diff --git a/resourceSchema/schema_aws.json b/resourceSchema/schema_aws.json index 78dd453..45b0b8b 100644 --- a/resourceSchema/schema_aws.json +++ b/resourceSchema/schema_aws.json @@ -2565,7 +2565,7 @@ "aws:apigateway/AccountThrottleSetting:AccountThrottleSetting": { "properties": { "burstLimit": { - "type": "integer", + "type": "number", "description": "Absolute maximum number of times API Gateway allows the API to be called per second (RPS).\n" }, "rateLimit": { @@ -2574,14 +2574,10 @@ } }, "type": "object", - "language": { - "nodejs": { - "requiredOutputs": [ - "burstLimit", - "rateLimit" - ] - } - } + "required": [ + "burstLimit", + "rateLimit" + ] }, "aws:apigateway/DeploymentCanarySettings:DeploymentCanarySettings": { "properties": { @@ -34490,6 +34486,10 @@ "type": "string", "description": "Use this to override the default service endpoint URL\n" }, + "taxsettings": { + "type": "string", + "description": "Use this to override the default service endpoint URL\n" + }, "timestreaminfluxdb": { "type": "string", "description": "Use this to override the default service endpoint URL\n" @@ -82382,6 +82382,10 @@ "type": "string", "description": "Use this to override the default service endpoint URL\n" }, + "taxsettings": { + "type": "string", + "description": "Use this to override the default service endpoint URL\n" + }, "timestreaminfluxdb": { "type": "string", "description": "Use this to override the default service endpoint URL\n" @@ -175005,7 +175009,7 @@ } }, "aws:apigateway/account:Account": { - "description": "Provides a settings of an API Gateway Account. Settings is applied region-wide per `provider` block.\n\n\u003e **Note:** As there is no API method for deleting account settings or resetting it to defaults, destroying this resource will keep your account settings intact\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst assumeRole = aws.iam.getPolicyDocument({\n statements: [{\n effect: \"Allow\",\n principals: [{\n type: \"Service\",\n identifiers: [\"apigateway.amazonaws.com\"],\n }],\n actions: [\"sts:AssumeRole\"],\n }],\n});\nconst cloudwatchRole = new aws.iam.Role(\"cloudwatch\", {\n name: \"api_gateway_cloudwatch_global\",\n assumeRolePolicy: assumeRole.then(assumeRole =\u003e assumeRole.json),\n});\nconst demo = new aws.apigateway.Account(\"demo\", {cloudwatchRoleArn: cloudwatchRole.arn});\nconst cloudwatch = aws.iam.getPolicyDocument({\n statements: [{\n effect: \"Allow\",\n actions: [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\",\n \"logs:PutLogEvents\",\n \"logs:GetLogEvents\",\n \"logs:FilterLogEvents\",\n ],\n resources: [\"*\"],\n }],\n});\nconst cloudwatchRolePolicy = new aws.iam.RolePolicy(\"cloudwatch\", {\n name: \"default\",\n role: cloudwatchRole.id,\n policy: cloudwatch.then(cloudwatch =\u003e cloudwatch.json),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nassume_role = aws.iam.get_policy_document(statements=[{\n \"effect\": \"Allow\",\n \"principals\": [{\n \"type\": \"Service\",\n \"identifiers\": [\"apigateway.amazonaws.com\"],\n }],\n \"actions\": [\"sts:AssumeRole\"],\n}])\ncloudwatch_role = aws.iam.Role(\"cloudwatch\",\n name=\"api_gateway_cloudwatch_global\",\n assume_role_policy=assume_role.json)\ndemo = aws.apigateway.Account(\"demo\", cloudwatch_role_arn=cloudwatch_role.arn)\ncloudwatch = aws.iam.get_policy_document(statements=[{\n \"effect\": \"Allow\",\n \"actions\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\",\n \"logs:PutLogEvents\",\n \"logs:GetLogEvents\",\n \"logs:FilterLogEvents\",\n ],\n \"resources\": [\"*\"],\n}])\ncloudwatch_role_policy = aws.iam.RolePolicy(\"cloudwatch\",\n name=\"default\",\n role=cloudwatch_role.id,\n policy=cloudwatch.json)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var assumeRole = Aws.Iam.GetPolicyDocument.Invoke(new()\n {\n Statements = new[]\n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementInputArgs\n {\n Effect = \"Allow\",\n Principals = new[]\n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementPrincipalInputArgs\n {\n Type = \"Service\",\n Identifiers = new[]\n {\n \"apigateway.amazonaws.com\",\n },\n },\n },\n Actions = new[]\n {\n \"sts:AssumeRole\",\n },\n },\n },\n });\n\n var cloudwatchRole = new Aws.Iam.Role(\"cloudwatch\", new()\n {\n Name = \"api_gateway_cloudwatch_global\",\n AssumeRolePolicy = assumeRole.Apply(getPolicyDocumentResult =\u003e getPolicyDocumentResult.Json),\n });\n\n var demo = new Aws.ApiGateway.Account(\"demo\", new()\n {\n CloudwatchRoleArn = cloudwatchRole.Arn,\n });\n\n var cloudwatch = Aws.Iam.GetPolicyDocument.Invoke(new()\n {\n Statements = new[]\n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementInputArgs\n {\n Effect = \"Allow\",\n Actions = new[]\n {\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\",\n \"logs:PutLogEvents\",\n \"logs:GetLogEvents\",\n \"logs:FilterLogEvents\",\n },\n Resources = new[]\n {\n \"*\",\n },\n },\n },\n });\n\n var cloudwatchRolePolicy = new Aws.Iam.RolePolicy(\"cloudwatch\", new()\n {\n Name = \"default\",\n Role = cloudwatchRole.Id,\n Policy = cloudwatch.Apply(getPolicyDocumentResult =\u003e getPolicyDocumentResult.Json),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tassumeRole, err := iam.GetPolicyDocument(ctx, \u0026iam.GetPolicyDocumentArgs{\n\t\t\tStatements: []iam.GetPolicyDocumentStatement{\n\t\t\t\t{\n\t\t\t\t\tEffect: pulumi.StringRef(\"Allow\"),\n\t\t\t\t\tPrincipals: []iam.GetPolicyDocumentStatementPrincipal{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tType: \"Service\",\n\t\t\t\t\t\t\tIdentifiers: []string{\n\t\t\t\t\t\t\t\t\"apigateway.amazonaws.com\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tActions: []string{\n\t\t\t\t\t\t\"sts:AssumeRole\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcloudwatchRole, err := iam.NewRole(ctx, \"cloudwatch\", \u0026iam.RoleArgs{\n\t\t\tName: pulumi.String(\"api_gateway_cloudwatch_global\"),\n\t\t\tAssumeRolePolicy: pulumi.String(assumeRole.Json),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewAccount(ctx, \"demo\", \u0026apigateway.AccountArgs{\n\t\t\tCloudwatchRoleArn: cloudwatchRole.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcloudwatch, err := iam.GetPolicyDocument(ctx, \u0026iam.GetPolicyDocumentArgs{\n\t\t\tStatements: []iam.GetPolicyDocumentStatement{\n\t\t\t\t{\n\t\t\t\t\tEffect: pulumi.StringRef(\"Allow\"),\n\t\t\t\t\tActions: []string{\n\t\t\t\t\t\t\"logs:CreateLogGroup\",\n\t\t\t\t\t\t\"logs:CreateLogStream\",\n\t\t\t\t\t\t\"logs:DescribeLogGroups\",\n\t\t\t\t\t\t\"logs:DescribeLogStreams\",\n\t\t\t\t\t\t\"logs:PutLogEvents\",\n\t\t\t\t\t\t\"logs:GetLogEvents\",\n\t\t\t\t\t\t\"logs:FilterLogEvents\",\n\t\t\t\t\t},\n\t\t\t\t\tResources: []string{\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}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicy(ctx, \"cloudwatch\", \u0026iam.RolePolicyArgs{\n\t\t\tName: pulumi.String(\"default\"),\n\t\t\tRole: cloudwatchRole.ID(),\n\t\t\tPolicy: pulumi.String(cloudwatch.Json),\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.IamFunctions;\nimport com.pulumi.aws.iam.inputs.GetPolicyDocumentArgs;\nimport com.pulumi.aws.iam.Role;\nimport com.pulumi.aws.iam.RoleArgs;\nimport com.pulumi.aws.apigateway.Account;\nimport com.pulumi.aws.apigateway.AccountArgs;\nimport com.pulumi.aws.iam.RolePolicy;\nimport com.pulumi.aws.iam.RolePolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var assumeRole = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()\n .statements(GetPolicyDocumentStatementArgs.builder()\n .effect(\"Allow\")\n .principals(GetPolicyDocumentStatementPrincipalArgs.builder()\n .type(\"Service\")\n .identifiers(\"apigateway.amazonaws.com\")\n .build())\n .actions(\"sts:AssumeRole\")\n .build())\n .build());\n\n var cloudwatchRole = new Role(\"cloudwatchRole\", RoleArgs.builder()\n .name(\"api_gateway_cloudwatch_global\")\n .assumeRolePolicy(assumeRole.applyValue(getPolicyDocumentResult -\u003e getPolicyDocumentResult.json()))\n .build());\n\n var demo = new Account(\"demo\", AccountArgs.builder()\n .cloudwatchRoleArn(cloudwatchRole.arn())\n .build());\n\n final var cloudwatch = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()\n .statements(GetPolicyDocumentStatementArgs.builder()\n .effect(\"Allow\")\n .actions( \n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\",\n \"logs:PutLogEvents\",\n \"logs:GetLogEvents\",\n \"logs:FilterLogEvents\")\n .resources(\"*\")\n .build())\n .build());\n\n var cloudwatchRolePolicy = new RolePolicy(\"cloudwatchRolePolicy\", RolePolicyArgs.builder()\n .name(\"default\")\n .role(cloudwatchRole.id())\n .policy(cloudwatch.applyValue(getPolicyDocumentResult -\u003e getPolicyDocumentResult.json()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: aws:apigateway:Account\n properties:\n cloudwatchRoleArn: ${cloudwatchRole.arn}\n cloudwatchRole:\n type: aws:iam:Role\n name: cloudwatch\n properties:\n name: api_gateway_cloudwatch_global\n assumeRolePolicy: ${assumeRole.json}\n cloudwatchRolePolicy:\n type: aws:iam:RolePolicy\n name: cloudwatch\n properties:\n name: default\n role: ${cloudwatchRole.id}\n policy: ${cloudwatch.json}\nvariables:\n assumeRole:\n fn::invoke:\n Function: aws:iam:getPolicyDocument\n Arguments:\n statements:\n - effect: Allow\n principals:\n - type: Service\n identifiers:\n - apigateway.amazonaws.com\n actions:\n - sts:AssumeRole\n cloudwatch:\n fn::invoke:\n Function: aws:iam:getPolicyDocument\n Arguments:\n statements:\n - effect: Allow\n actions:\n - logs:CreateLogGroup\n - logs:CreateLogStream\n - logs:DescribeLogGroups\n - logs:DescribeLogStreams\n - logs:PutLogEvents\n - logs:GetLogEvents\n - logs:FilterLogEvents\n resources:\n - '*'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nUsing `pulumi import`, import API Gateway Accounts using the word `api-gateway-account`. For example:\n\n```sh\n$ pulumi import aws:apigateway/account:Account demo api-gateway-account\n```\n", + "description": "Provides a settings of an API Gateway Account. Settings is applied region-wide per `provider` block.\n\n\u003e **Note:** By default, destroying this resource will keep your account settings intact. Set `reset_on_delete` to `true` to reset the account setttings to default. In a future major version of the provider, destroying the resource will reset account settings.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst assumeRole = aws.iam.getPolicyDocument({\n statements: [{\n effect: \"Allow\",\n principals: [{\n type: \"Service\",\n identifiers: [\"apigateway.amazonaws.com\"],\n }],\n actions: [\"sts:AssumeRole\"],\n }],\n});\nconst cloudwatchRole = new aws.iam.Role(\"cloudwatch\", {\n name: \"api_gateway_cloudwatch_global\",\n assumeRolePolicy: assumeRole.then(assumeRole =\u003e assumeRole.json),\n});\nconst demo = new aws.apigateway.Account(\"demo\", {cloudwatchRoleArn: cloudwatchRole.arn});\nconst cloudwatch = aws.iam.getPolicyDocument({\n statements: [{\n effect: \"Allow\",\n actions: [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\",\n \"logs:PutLogEvents\",\n \"logs:GetLogEvents\",\n \"logs:FilterLogEvents\",\n ],\n resources: [\"*\"],\n }],\n});\nconst cloudwatchRolePolicy = new aws.iam.RolePolicy(\"cloudwatch\", {\n name: \"default\",\n role: cloudwatchRole.id,\n policy: cloudwatch.then(cloudwatch =\u003e cloudwatch.json),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nassume_role = aws.iam.get_policy_document(statements=[{\n \"effect\": \"Allow\",\n \"principals\": [{\n \"type\": \"Service\",\n \"identifiers\": [\"apigateway.amazonaws.com\"],\n }],\n \"actions\": [\"sts:AssumeRole\"],\n}])\ncloudwatch_role = aws.iam.Role(\"cloudwatch\",\n name=\"api_gateway_cloudwatch_global\",\n assume_role_policy=assume_role.json)\ndemo = aws.apigateway.Account(\"demo\", cloudwatch_role_arn=cloudwatch_role.arn)\ncloudwatch = aws.iam.get_policy_document(statements=[{\n \"effect\": \"Allow\",\n \"actions\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\",\n \"logs:PutLogEvents\",\n \"logs:GetLogEvents\",\n \"logs:FilterLogEvents\",\n ],\n \"resources\": [\"*\"],\n}])\ncloudwatch_role_policy = aws.iam.RolePolicy(\"cloudwatch\",\n name=\"default\",\n role=cloudwatch_role.id,\n policy=cloudwatch.json)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var assumeRole = Aws.Iam.GetPolicyDocument.Invoke(new()\n {\n Statements = new[]\n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementInputArgs\n {\n Effect = \"Allow\",\n Principals = new[]\n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementPrincipalInputArgs\n {\n Type = \"Service\",\n Identifiers = new[]\n {\n \"apigateway.amazonaws.com\",\n },\n },\n },\n Actions = new[]\n {\n \"sts:AssumeRole\",\n },\n },\n },\n });\n\n var cloudwatchRole = new Aws.Iam.Role(\"cloudwatch\", new()\n {\n Name = \"api_gateway_cloudwatch_global\",\n AssumeRolePolicy = assumeRole.Apply(getPolicyDocumentResult =\u003e getPolicyDocumentResult.Json),\n });\n\n var demo = new Aws.ApiGateway.Account(\"demo\", new()\n {\n CloudwatchRoleArn = cloudwatchRole.Arn,\n });\n\n var cloudwatch = Aws.Iam.GetPolicyDocument.Invoke(new()\n {\n Statements = new[]\n {\n new Aws.Iam.Inputs.GetPolicyDocumentStatementInputArgs\n {\n Effect = \"Allow\",\n Actions = new[]\n {\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\",\n \"logs:PutLogEvents\",\n \"logs:GetLogEvents\",\n \"logs:FilterLogEvents\",\n },\n Resources = new[]\n {\n \"*\",\n },\n },\n },\n });\n\n var cloudwatchRolePolicy = new Aws.Iam.RolePolicy(\"cloudwatch\", new()\n {\n Name = \"default\",\n Role = cloudwatchRole.Id,\n Policy = cloudwatch.Apply(getPolicyDocumentResult =\u003e getPolicyDocumentResult.Json),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/apigateway\"\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tassumeRole, err := iam.GetPolicyDocument(ctx, \u0026iam.GetPolicyDocumentArgs{\n\t\t\tStatements: []iam.GetPolicyDocumentStatement{\n\t\t\t\t{\n\t\t\t\t\tEffect: pulumi.StringRef(\"Allow\"),\n\t\t\t\t\tPrincipals: []iam.GetPolicyDocumentStatementPrincipal{\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tType: \"Service\",\n\t\t\t\t\t\t\tIdentifiers: []string{\n\t\t\t\t\t\t\t\t\"apigateway.amazonaws.com\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tActions: []string{\n\t\t\t\t\t\t\"sts:AssumeRole\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcloudwatchRole, err := iam.NewRole(ctx, \"cloudwatch\", \u0026iam.RoleArgs{\n\t\t\tName: pulumi.String(\"api_gateway_cloudwatch_global\"),\n\t\t\tAssumeRolePolicy: pulumi.String(assumeRole.Json),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewAccount(ctx, \"demo\", \u0026apigateway.AccountArgs{\n\t\t\tCloudwatchRoleArn: cloudwatchRole.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcloudwatch, err := iam.GetPolicyDocument(ctx, \u0026iam.GetPolicyDocumentArgs{\n\t\t\tStatements: []iam.GetPolicyDocumentStatement{\n\t\t\t\t{\n\t\t\t\t\tEffect: pulumi.StringRef(\"Allow\"),\n\t\t\t\t\tActions: []string{\n\t\t\t\t\t\t\"logs:CreateLogGroup\",\n\t\t\t\t\t\t\"logs:CreateLogStream\",\n\t\t\t\t\t\t\"logs:DescribeLogGroups\",\n\t\t\t\t\t\t\"logs:DescribeLogStreams\",\n\t\t\t\t\t\t\"logs:PutLogEvents\",\n\t\t\t\t\t\t\"logs:GetLogEvents\",\n\t\t\t\t\t\t\"logs:FilterLogEvents\",\n\t\t\t\t\t},\n\t\t\t\t\tResources: []string{\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}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewRolePolicy(ctx, \"cloudwatch\", \u0026iam.RolePolicyArgs{\n\t\t\tName: pulumi.String(\"default\"),\n\t\t\tRole: cloudwatchRole.ID(),\n\t\t\tPolicy: pulumi.String(cloudwatch.Json),\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.IamFunctions;\nimport com.pulumi.aws.iam.inputs.GetPolicyDocumentArgs;\nimport com.pulumi.aws.iam.Role;\nimport com.pulumi.aws.iam.RoleArgs;\nimport com.pulumi.aws.apigateway.Account;\nimport com.pulumi.aws.apigateway.AccountArgs;\nimport com.pulumi.aws.iam.RolePolicy;\nimport com.pulumi.aws.iam.RolePolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var assumeRole = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()\n .statements(GetPolicyDocumentStatementArgs.builder()\n .effect(\"Allow\")\n .principals(GetPolicyDocumentStatementPrincipalArgs.builder()\n .type(\"Service\")\n .identifiers(\"apigateway.amazonaws.com\")\n .build())\n .actions(\"sts:AssumeRole\")\n .build())\n .build());\n\n var cloudwatchRole = new Role(\"cloudwatchRole\", RoleArgs.builder()\n .name(\"api_gateway_cloudwatch_global\")\n .assumeRolePolicy(assumeRole.applyValue(getPolicyDocumentResult -\u003e getPolicyDocumentResult.json()))\n .build());\n\n var demo = new Account(\"demo\", AccountArgs.builder()\n .cloudwatchRoleArn(cloudwatchRole.arn())\n .build());\n\n final var cloudwatch = IamFunctions.getPolicyDocument(GetPolicyDocumentArgs.builder()\n .statements(GetPolicyDocumentStatementArgs.builder()\n .effect(\"Allow\")\n .actions( \n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\",\n \"logs:PutLogEvents\",\n \"logs:GetLogEvents\",\n \"logs:FilterLogEvents\")\n .resources(\"*\")\n .build())\n .build());\n\n var cloudwatchRolePolicy = new RolePolicy(\"cloudwatchRolePolicy\", RolePolicyArgs.builder()\n .name(\"default\")\n .role(cloudwatchRole.id())\n .policy(cloudwatch.applyValue(getPolicyDocumentResult -\u003e getPolicyDocumentResult.json()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demo:\n type: aws:apigateway:Account\n properties:\n cloudwatchRoleArn: ${cloudwatchRole.arn}\n cloudwatchRole:\n type: aws:iam:Role\n name: cloudwatch\n properties:\n name: api_gateway_cloudwatch_global\n assumeRolePolicy: ${assumeRole.json}\n cloudwatchRolePolicy:\n type: aws:iam:RolePolicy\n name: cloudwatch\n properties:\n name: default\n role: ${cloudwatchRole.id}\n policy: ${cloudwatch.json}\nvariables:\n assumeRole:\n fn::invoke:\n Function: aws:iam:getPolicyDocument\n Arguments:\n statements:\n - effect: Allow\n principals:\n - type: Service\n identifiers:\n - apigateway.amazonaws.com\n actions:\n - sts:AssumeRole\n cloudwatch:\n fn::invoke:\n Function: aws:iam:getPolicyDocument\n Arguments:\n statements:\n - effect: Allow\n actions:\n - logs:CreateLogGroup\n - logs:CreateLogStream\n - logs:DescribeLogGroups\n - logs:DescribeLogStreams\n - logs:PutLogEvents\n - logs:GetLogEvents\n - logs:FilterLogEvents\n resources:\n - '*'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nUsing `pulumi import`, import API Gateway Accounts using the word `api-gateway-account`. For example:\n\n```sh\n$ pulumi import aws:apigateway/account:Account demo api-gateway-account\n```\n", "properties": { "apiKeyVersion": { "type": "string", @@ -175022,6 +175026,11 @@ }, "description": "A list of features supported for the account.\n" }, + "resetOnDelete": { + "type": "boolean", + "description": "If `true`, destroying the resource will reset account settings to default, otherwise account settings are not modified.\nDefaults to `false`.\nWill be removed in a future major version of the provider.\n", + "deprecationMessage": "The \"reset_on_delete\" attribute will be removed in a future version of the provider" + }, "throttleSettings": { "type": "array", "items": { @@ -175032,6 +175041,7 @@ }, "required": [ "apiKeyVersion", + "cloudwatchRoleArn", "features", "throttleSettings" ], @@ -175039,6 +175049,11 @@ "cloudwatchRoleArn": { "type": "string", "description": "ARN of an IAM role for CloudWatch (to allow logging \u0026 monitoring). See more [in AWS Docs](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-stage-settings.html#how-to-stage-settings-console). Logging \u0026 monitoring can be enabled/disabled and otherwise tuned on the API Gateway Stage level.\n" + }, + "resetOnDelete": { + "type": "boolean", + "description": "If `true`, destroying the resource will reset account settings to default, otherwise account settings are not modified.\nDefaults to `false`.\nWill be removed in a future major version of the provider.\n", + "deprecationMessage": "The \"reset_on_delete\" attribute will be removed in a future version of the provider" } }, "stateInputs": { @@ -175059,6 +175074,11 @@ }, "description": "A list of features supported for the account.\n" }, + "resetOnDelete": { + "type": "boolean", + "description": "If `true`, destroying the resource will reset account settings to default, otherwise account settings are not modified.\nDefaults to `false`.\nWill be removed in a future major version of the provider.\n", + "deprecationMessage": "The \"reset_on_delete\" attribute will be removed in a future version of the provider" + }, "throttleSettings": { "type": "array", "items": { @@ -175582,7 +175602,8 @@ "properties": { "canarySettings": { "$ref": "#/types/aws:apigateway/DeploymentCanarySettings:DeploymentCanarySettings", - "description": "Input configuration for the canary deployment when the deployment is a canary release deployment. See `canary_settings below.\n" + "description": "Input configuration for the canary deployment when the deployment is a canary release deployment.\nSee `canary_settings below.\nHas no effect when `stage_name` is not set.\n", + "deprecationMessage": "The attribute \"canary_settings\" will be removed in a future major version. Use an explicit \"aws.apigateway.Stage\" instead." }, "createdDate": { "type": "string", @@ -175606,11 +175627,13 @@ }, "stageDescription": { "type": "string", - "description": "Description to set on the stage managed by the `stage_name` argument.\n" + "description": "Description to set on the stage managed by the `stage_name` argument.\nHas no effect when `stage_name` is not set.\n", + "deprecationMessage": "The attribute \"stage_description\" will be removed in a future major version. Use an explicit \"aws.apigateway.Stage\" instead." }, "stageName": { "type": "string", - "description": "Name of the stage to create with this deployment. If the specified stage already exists, it will be updated to point to the new deployment. We recommend using the `aws.apigateway.Stage` resource instead to manage stages.\n" + "description": "Name of the stage to create with this deployment.\nIf the specified stage already exists, it will be updated to point to the new deployment.\nWe recommend using the `aws.apigateway.Stage` resource instead to manage stages.\n", + "deprecationMessage": "The attribute \"stage_name\" will be removed in a future major version. Use an explicit \"aws.apigateway.Stage\" instead." }, "triggers": { "type": "object", @@ -175636,7 +175659,8 @@ "inputProperties": { "canarySettings": { "$ref": "#/types/aws:apigateway/DeploymentCanarySettings:DeploymentCanarySettings", - "description": "Input configuration for the canary deployment when the deployment is a canary release deployment. See `canary_settings below.\n", + "description": "Input configuration for the canary deployment when the deployment is a canary release deployment.\nSee `canary_settings below.\nHas no effect when `stage_name` is not set.\n", + "deprecationMessage": "The attribute \"canary_settings\" will be removed in a future major version. Use an explicit \"aws.apigateway.Stage\" instead.", "willReplaceOnChanges": true }, "description": { @@ -175659,12 +175683,14 @@ }, "stageDescription": { "type": "string", - "description": "Description to set on the stage managed by the `stage_name` argument.\n", + "description": "Description to set on the stage managed by the `stage_name` argument.\nHas no effect when `stage_name` is not set.\n", + "deprecationMessage": "The attribute \"stage_description\" will be removed in a future major version. Use an explicit \"aws.apigateway.Stage\" instead.", "willReplaceOnChanges": true }, "stageName": { "type": "string", - "description": "Name of the stage to create with this deployment. If the specified stage already exists, it will be updated to point to the new deployment. We recommend using the `aws.apigateway.Stage` resource instead to manage stages.\n", + "description": "Name of the stage to create with this deployment.\nIf the specified stage already exists, it will be updated to point to the new deployment.\nWe recommend using the `aws.apigateway.Stage` resource instead to manage stages.\n", + "deprecationMessage": "The attribute \"stage_name\" will be removed in a future major version. Use an explicit \"aws.apigateway.Stage\" instead.", "willReplaceOnChanges": true }, "triggers": { @@ -175692,7 +175718,8 @@ "properties": { "canarySettings": { "$ref": "#/types/aws:apigateway/DeploymentCanarySettings:DeploymentCanarySettings", - "description": "Input configuration for the canary deployment when the deployment is a canary release deployment. See `canary_settings below.\n", + "description": "Input configuration for the canary deployment when the deployment is a canary release deployment.\nSee `canary_settings below.\nHas no effect when `stage_name` is not set.\n", + "deprecationMessage": "The attribute \"canary_settings\" will be removed in a future major version. Use an explicit \"aws.apigateway.Stage\" instead.", "willReplaceOnChanges": true }, "createdDate": { @@ -175727,12 +175754,14 @@ }, "stageDescription": { "type": "string", - "description": "Description to set on the stage managed by the `stage_name` argument.\n", + "description": "Description to set on the stage managed by the `stage_name` argument.\nHas no effect when `stage_name` is not set.\n", + "deprecationMessage": "The attribute \"stage_description\" will be removed in a future major version. Use an explicit \"aws.apigateway.Stage\" instead.", "willReplaceOnChanges": true }, "stageName": { "type": "string", - "description": "Name of the stage to create with this deployment. If the specified stage already exists, it will be updated to point to the new deployment. We recommend using the `aws.apigateway.Stage` resource instead to manage stages.\n", + "description": "Name of the stage to create with this deployment.\nIf the specified stage already exists, it will be updated to point to the new deployment.\nWe recommend using the `aws.apigateway.Stage` resource instead to manage stages.\n", + "deprecationMessage": "The attribute \"stage_name\" will be removed in a future major version. Use an explicit \"aws.apigateway.Stage\" instead.", "willReplaceOnChanges": true }, "triggers": { @@ -191349,7 +191378,8 @@ "description": "The name of the restore testing plan.\n" }, "validationWindowHours": { - "type": "integer" + "type": "integer", + "description": "The amount of hours available to run a validation script on the data. Valid range is `1` to `168`.\n" } }, "required": [ @@ -191397,7 +191427,8 @@ "description": "The name of the restore testing plan.\n" }, "validationWindowHours": { - "type": "integer" + "type": "integer", + "description": "The amount of hours available to run a validation script on the data. Valid range is `1` to `168`.\n" } }, "requiredInputs": [ @@ -191443,7 +191474,8 @@ "description": "The name of the restore testing plan.\n" }, "validationWindowHours": { - "type": "integer" + "type": "integer", + "description": "The amount of hours available to run a validation script on the data. Valid range is `1` to `168`.\n" } }, "type": "object" @@ -202916,37 +202948,41 @@ } }, "aws:cloudwatch/eventBus:EventBus": { - "description": "Provides an EventBridge event bus resource.\n\n\u003e **Note:** EventBridge was formerly known as CloudWatch Events. The functionality is identical.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst messenger = new aws.cloudwatch.EventBus(\"messenger\", {name: \"chat-messages\"});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nmessenger = aws.cloudwatch.EventBus(\"messenger\", name=\"chat-messages\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var messenger = new Aws.CloudWatch.EventBus(\"messenger\", new()\n {\n Name = \"chat-messages\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/cloudwatch\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudwatch.NewEventBus(ctx, \"messenger\", \u0026cloudwatch.EventBusArgs{\n\t\t\tName: pulumi.String(\"chat-messages\"),\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.cloudwatch.EventBus;\nimport com.pulumi.aws.cloudwatch.EventBusArgs;\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 messenger = new EventBus(\"messenger\", EventBusArgs.builder()\n .name(\"chat-messages\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n messenger:\n type: aws:cloudwatch:EventBus\n properties:\n name: chat-messages\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst examplepartner = aws.cloudwatch.getEventSource({\n namePrefix: \"aws.partner/examplepartner.com\",\n});\nconst examplepartnerEventBus = new aws.cloudwatch.EventBus(\"examplepartner\", {\n name: examplepartner.then(examplepartner =\u003e examplepartner.name),\n eventSourceName: examplepartner.then(examplepartner =\u003e examplepartner.name),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexamplepartner = aws.cloudwatch.get_event_source(name_prefix=\"aws.partner/examplepartner.com\")\nexamplepartner_event_bus = aws.cloudwatch.EventBus(\"examplepartner\",\n name=examplepartner.name,\n event_source_name=examplepartner.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var examplepartner = Aws.CloudWatch.GetEventSource.Invoke(new()\n {\n NamePrefix = \"aws.partner/examplepartner.com\",\n });\n\n var examplepartnerEventBus = new Aws.CloudWatch.EventBus(\"examplepartner\", new()\n {\n Name = examplepartner.Apply(getEventSourceResult =\u003e getEventSourceResult.Name),\n EventSourceName = examplepartner.Apply(getEventSourceResult =\u003e getEventSourceResult.Name),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/cloudwatch\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texamplepartner, err := cloudwatch.GetEventSource(ctx, \u0026cloudwatch.GetEventSourceArgs{\n\t\t\tNamePrefix: pulumi.StringRef(\"aws.partner/examplepartner.com\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudwatch.NewEventBus(ctx, \"examplepartner\", \u0026cloudwatch.EventBusArgs{\n\t\t\tName: pulumi.String(examplepartner.Name),\n\t\t\tEventSourceName: pulumi.String(examplepartner.Name),\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.cloudwatch.CloudwatchFunctions;\nimport com.pulumi.aws.cloudwatch.inputs.GetEventSourceArgs;\nimport com.pulumi.aws.cloudwatch.EventBus;\nimport com.pulumi.aws.cloudwatch.EventBusArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var examplepartner = CloudwatchFunctions.getEventSource(GetEventSourceArgs.builder()\n .namePrefix(\"aws.partner/examplepartner.com\")\n .build());\n\n var examplepartnerEventBus = new EventBus(\"examplepartnerEventBus\", EventBusArgs.builder()\n .name(examplepartner.applyValue(getEventSourceResult -\u003e getEventSourceResult.name()))\n .eventSourceName(examplepartner.applyValue(getEventSourceResult -\u003e getEventSourceResult.name()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n examplepartnerEventBus:\n type: aws:cloudwatch:EventBus\n name: examplepartner\n properties:\n name: ${examplepartner.name}\n eventSourceName: ${examplepartner.name}\nvariables:\n examplepartner:\n fn::invoke:\n Function: aws:cloudwatch:getEventSource\n Arguments:\n namePrefix: aws.partner/examplepartner.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nUsing `pulumi import`, import EventBridge event buses using the `name` (which can also be a partner event source name). For example:\n\n```sh\n$ pulumi import aws:cloudwatch/eventBus:EventBus messenger chat-messages\n```\n", + "description": "Provides an EventBridge event bus resource.\n\n\u003e **Note:** EventBridge was formerly known as CloudWatch Events. The functionality is identical.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst messenger = new aws.cloudwatch.EventBus(\"messenger\", {name: \"chat-messages\"});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nmessenger = aws.cloudwatch.EventBus(\"messenger\", name=\"chat-messages\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var messenger = new Aws.CloudWatch.EventBus(\"messenger\", new()\n {\n Name = \"chat-messages\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/cloudwatch\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudwatch.NewEventBus(ctx, \"messenger\", \u0026cloudwatch.EventBusArgs{\n\t\t\tName: pulumi.String(\"chat-messages\"),\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.cloudwatch.EventBus;\nimport com.pulumi.aws.cloudwatch.EventBusArgs;\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 messenger = new EventBus(\"messenger\", EventBusArgs.builder()\n .name(\"chat-messages\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n messenger:\n type: aws:cloudwatch:EventBus\n properties:\n name: chat-messages\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\n\nconst examplepartner = aws.cloudwatch.getEventSource({\n namePrefix: \"aws.partner/examplepartner.com\",\n});\nconst examplepartnerEventBus = new aws.cloudwatch.EventBus(\"examplepartner\", {\n name: examplepartner.then(examplepartner =\u003e examplepartner.name),\n description: \"Event bus for example partner events\",\n eventSourceName: examplepartner.then(examplepartner =\u003e examplepartner.name),\n});\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\n\nexamplepartner = aws.cloudwatch.get_event_source(name_prefix=\"aws.partner/examplepartner.com\")\nexamplepartner_event_bus = aws.cloudwatch.EventBus(\"examplepartner\",\n name=examplepartner.name,\n description=\"Event bus for example partner events\",\n event_source_name=examplepartner.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var examplepartner = Aws.CloudWatch.GetEventSource.Invoke(new()\n {\n NamePrefix = \"aws.partner/examplepartner.com\",\n });\n\n var examplepartnerEventBus = new Aws.CloudWatch.EventBus(\"examplepartner\", new()\n {\n Name = examplepartner.Apply(getEventSourceResult =\u003e getEventSourceResult.Name),\n Description = \"Event bus for example partner events\",\n EventSourceName = examplepartner.Apply(getEventSourceResult =\u003e getEventSourceResult.Name),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/cloudwatch\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texamplepartner, err := cloudwatch.GetEventSource(ctx, \u0026cloudwatch.GetEventSourceArgs{\n\t\t\tNamePrefix: pulumi.StringRef(\"aws.partner/examplepartner.com\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudwatch.NewEventBus(ctx, \"examplepartner\", \u0026cloudwatch.EventBusArgs{\n\t\t\tName: pulumi.String(examplepartner.Name),\n\t\t\tDescription: pulumi.String(\"Event bus for example partner events\"),\n\t\t\tEventSourceName: pulumi.String(examplepartner.Name),\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.cloudwatch.CloudwatchFunctions;\nimport com.pulumi.aws.cloudwatch.inputs.GetEventSourceArgs;\nimport com.pulumi.aws.cloudwatch.EventBus;\nimport com.pulumi.aws.cloudwatch.EventBusArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var examplepartner = CloudwatchFunctions.getEventSource(GetEventSourceArgs.builder()\n .namePrefix(\"aws.partner/examplepartner.com\")\n .build());\n\n var examplepartnerEventBus = new EventBus(\"examplepartnerEventBus\", EventBusArgs.builder()\n .name(examplepartner.applyValue(getEventSourceResult -\u003e getEventSourceResult.name()))\n .description(\"Event bus for example partner events\")\n .eventSourceName(examplepartner.applyValue(getEventSourceResult -\u003e getEventSourceResult.name()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n examplepartnerEventBus:\n type: aws:cloudwatch:EventBus\n name: examplepartner\n properties:\n name: ${examplepartner.name}\n description: Event bus for example partner events\n eventSourceName: ${examplepartner.name}\nvariables:\n examplepartner:\n fn::invoke:\n Function: aws:cloudwatch:getEventSource\n Arguments:\n namePrefix: aws.partner/examplepartner.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nUsing `pulumi import`, import EventBridge event buses using the name of the event bus (which can also be a partner event source name). For example:\n\n```sh\n$ pulumi import aws:cloudwatch/eventBus:EventBus messenger chat-messages\n```\n", "properties": { "arn": { "type": "string", - "description": "The Amazon Resource Name (ARN) of the event bus.\n" + "description": "ARN of the event bus.\n" + }, + "description": { + "type": "string", + "description": "Event bus description.\n" }, "eventSourceName": { "type": "string", - "description": "The partner event source that the new event bus will be matched with. Must match `name`.\n" + "description": "Partner event source that the new event bus will be matched with. Must match `name`.\n" }, "kmsKeyIdentifier": { "type": "string", - "description": "The identifier of the AWS KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt events on this event bus. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.\n" + "description": "Identifier of the AWS KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt events on this event bus. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.\n" }, "name": { "type": "string", - "description": "The name of the new event bus. The names of custom event buses can't contain the / character. To create a partner event bus, ensure the `name` matches the `event_source_name`.\n" + "description": "Name of the new event bus. The names of custom event buses can't contain the / character. To create a partner event bus, ensure that the `name` matches the `event_source_name`.\n\nThe following arguments are optional:\n" }, "tags": { "type": "object", "additionalProperties": { "type": "string" }, - "description": "A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n" + "description": "Map of tags assigned to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n" }, "tagsAll": { "type": "object", "additionalProperties": { "type": "string" }, - "description": "A map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.\n", + "description": "Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.\n", "deprecationMessage": "Please use `tags` instead." } }, @@ -202956,18 +202992,22 @@ "tagsAll" ], "inputProperties": { + "description": { + "type": "string", + "description": "Event bus description.\n" + }, "eventSourceName": { "type": "string", - "description": "The partner event source that the new event bus will be matched with. Must match `name`.\n", + "description": "Partner event source that the new event bus will be matched with. Must match `name`.\n", "willReplaceOnChanges": true }, "kmsKeyIdentifier": { "type": "string", - "description": "The identifier of the AWS KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt events on this event bus. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.\n" + "description": "Identifier of the AWS KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt events on this event bus. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.\n" }, "name": { "type": "string", - "description": "The name of the new event bus. The names of custom event buses can't contain the / character. To create a partner event bus, ensure the `name` matches the `event_source_name`.\n", + "description": "Name of the new event bus. The names of custom event buses can't contain the / character. To create a partner event bus, ensure that the `name` matches the `event_source_name`.\n\nThe following arguments are optional:\n", "willReplaceOnChanges": true }, "tags": { @@ -202975,7 +203015,7 @@ "additionalProperties": { "type": "string" }, - "description": "A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n" + "description": "Map of tags assigned to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n" } }, "stateInputs": { @@ -202983,20 +203023,24 @@ "properties": { "arn": { "type": "string", - "description": "The Amazon Resource Name (ARN) of the event bus.\n" + "description": "ARN of the event bus.\n" + }, + "description": { + "type": "string", + "description": "Event bus description.\n" }, "eventSourceName": { "type": "string", - "description": "The partner event source that the new event bus will be matched with. Must match `name`.\n", + "description": "Partner event source that the new event bus will be matched with. Must match `name`.\n", "willReplaceOnChanges": true }, "kmsKeyIdentifier": { "type": "string", - "description": "The identifier of the AWS KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt events on this event bus. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.\n" + "description": "Identifier of the AWS KMS customer managed key for EventBridge to use, if you choose to use a customer managed key to encrypt events on this event bus. The identifier can be the key Amazon Resource Name (ARN), KeyId, key alias, or key alias ARN.\n" }, "name": { "type": "string", - "description": "The name of the new event bus. The names of custom event buses can't contain the / character. To create a partner event bus, ensure the `name` matches the `event_source_name`.\n", + "description": "Name of the new event bus. The names of custom event buses can't contain the / character. To create a partner event bus, ensure that the `name` matches the `event_source_name`.\n\nThe following arguments are optional:\n", "willReplaceOnChanges": true }, "tags": { @@ -203004,14 +203048,14 @@ "additionalProperties": { "type": "string" }, - "description": "A map of tags to assign to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n" + "description": "Map of tags assigned to the resource. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.\n" }, "tagsAll": { "type": "object", "additionalProperties": { "type": "string" }, - "description": "A map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.\n", + "description": "Map of tags assigned to the resource, including those inherited from the provider `default_tags` configuration block.\n", "deprecationMessage": "Please use `tags` instead." } }, @@ -385812,7 +385856,7 @@ "properties": { "name": { "type": "string", - "description": "Friendly EventBridge event bus name.\n" + "description": "Name of the event bus.\n" } }, "type": "object", @@ -385824,7 +385868,11 @@ "description": "A collection of values returned by getEventBus.\n", "properties": { "arn": { - "description": "ARN.\n", + "description": "ARN of the event bus.\n", + "type": "string" + }, + "description": { + "description": "Event bus description.\n", "type": "string" }, "id": { @@ -385832,7 +385880,7 @@ "type": "string" }, "kmsKeyIdentifier": { - "description": "The identifier of the AWS KMS customer managed key for EventBridge to use to encrypt events on this event bus, if one has been specified.\n", + "description": "Identifier of the AWS KMS customer managed key for EventBridge to use to encrypt events on this event bus, if one has been specified.\n", "type": "string" }, "name": { @@ -385841,6 +385889,7 @@ }, "required": [ "arn", + "description", "kmsKeyIdentifier", "name", "id" diff --git a/resourceSchema/schema_gcp.json b/resourceSchema/schema_gcp.json index 0183b20..6a2c77e 100644 --- a/resourceSchema/schema_gcp.json +++ b/resourceSchema/schema_gcp.json @@ -374,6 +374,9 @@ "dataprocCustomEndpoint": { "type": "string" }, + "dataprocGdcCustomEndpoint": { + "type": "string" + }, "dataprocMetastoreCustomEndpoint": { "type": "string" }, @@ -476,6 +479,9 @@ "iam2CustomEndpoint": { "type": "string" }, + "iam3CustomEndpoint": { + "type": "string" + }, "iamBetaCustomEndpoint": { "type": "string" }, @@ -3945,6 +3951,32 @@ }, "type": "object" }, + "gcp:apigee/ApiMetaData:ApiMetaData": { + "properties": { + "createdAt": { + "type": "string", + "description": "Time at which the API proxy was created, in milliseconds since epoch.\n" + }, + "lastModifiedAt": { + "type": "string", + "description": "Time at which the API proxy was most recently modified, in milliseconds since epoch.\n" + }, + "subType": { + "type": "string", + "description": "The type of entity described\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "createdAt", + "lastModifiedAt", + "subType" + ] + } + } + }, "gcp:apigee/AppGroupAttribute:AppGroupAttribute": { "properties": { "name": { @@ -7576,6 +7608,176 @@ }, "type": "object" }, + "gcp:backupdisasterrecovery/BackupPlanAssociationRulesConfigInfo:BackupPlanAssociationRulesConfigInfo": { + "properties": { + "lastBackupErrors": { + "type": "array", + "items": { + "$ref": "#/types/gcp:backupdisasterrecovery/BackupPlanAssociationRulesConfigInfoLastBackupError:BackupPlanAssociationRulesConfigInfoLastBackupError" + }, + "description": "(Output)\ngoogle.rpc.Status object to store the last backup error\nStructure is documented below.\n" + }, + "lastBackupState": { + "type": "string", + "description": "(Output)\nState of last backup taken.\n" + }, + "ruleId": { + "type": "string", + "description": "(Output)\nBackup Rule id fetched from backup plan.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "lastBackupErrors", + "lastBackupState", + "ruleId" + ] + } + } + }, + "gcp:backupdisasterrecovery/BackupPlanAssociationRulesConfigInfoLastBackupError:BackupPlanAssociationRulesConfigInfoLastBackupError": { + "properties": { + "code": { + "type": "number", + "description": "(Output)\nThe status code, which should be an enum value of [google.rpc.Code]\n" + }, + "message": { + "type": "string", + "description": "(Output)\nA developer-facing error message, which should be in English.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "code", + "message" + ] + } + } + }, + "gcp:backupdisasterrecovery/BackupPlanBackupRule:BackupPlanBackupRule": { + "properties": { + "backupRetentionDays": { + "type": "integer", + "description": "Configures the duration for which backup data will be kept. The value should be greater than or equal to minimum enforced retention of the backup vault.\n", + "willReplaceOnChanges": true + }, + "ruleId": { + "type": "string", + "description": "The unique ID of this `BackupRule`. The `rule_id` is unique per `BackupPlan`.\n", + "willReplaceOnChanges": true + }, + "standardSchedule": { + "$ref": "#/types/gcp:backupdisasterrecovery/BackupPlanBackupRuleStandardSchedule:BackupPlanBackupRuleStandardSchedule", + "description": "StandardSchedule defines a schedule that runs within the confines of a defined window of days.\nStructure is documented below.\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "required": [ + "backupRetentionDays", + "ruleId", + "standardSchedule" + ] + }, + "gcp:backupdisasterrecovery/BackupPlanBackupRuleStandardSchedule:BackupPlanBackupRuleStandardSchedule": { + "properties": { + "backupWindow": { + "$ref": "#/types/gcp:backupdisasterrecovery/BackupPlanBackupRuleStandardScheduleBackupWindow:BackupPlanBackupRuleStandardScheduleBackupWindow", + "description": "A BackupWindow defines the window of the day during which backup jobs will run. Jobs are queued at the beginning of the window and will be marked as\n`NOT_RUN` if they do not start by the end of the window.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "daysOfMonths": { + "type": "array", + "items": { + "type": "integer" + }, + "description": "Specifies days of months like 1, 5, or 14 on which jobs will run.\n", + "willReplaceOnChanges": true + }, + "daysOfWeeks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Specifies days of week like MONDAY or TUESDAY, on which jobs will run. This is required for `recurrence_type`, `WEEKLY` and is not applicable otherwise.\nEach value may be one of: `DAY_OF_WEEK_UNSPECIFIED`, `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`.\n", + "willReplaceOnChanges": true + }, + "hourlyFrequency": { + "type": "integer", + "description": "Specifies frequency for hourly backups. An hourly frequency of 2 means jobs will run every 2 hours from start time till end time defined.\nThis is required for `recurrence_type`, `HOURLY` and is not applicable otherwise.\n", + "willReplaceOnChanges": true + }, + "months": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Specifies values of months\nEach value may be one of: `MONTH_UNSPECIFIED`, `JANUARY`, `FEBRUARY`, `MARCH`, `APRIL`, `MAY`, `JUNE`, `JULY`, `AUGUST`, `SEPTEMBER`, `OCTOBER`, `NOVEMBER`, `DECEMBER`.\n", + "willReplaceOnChanges": true + }, + "recurrenceType": { + "type": "string", + "description": "RecurrenceType enumerates the applicable periodicity for the schedule.\nPossible values are: `HOURLY`, `DAILY`, `WEEKLY`, `MONTHLY`, `YEARLY`.\n", + "willReplaceOnChanges": true + }, + "timeZone": { + "type": "string", + "description": "The time zone to be used when interpreting the schedule.\n", + "willReplaceOnChanges": true + }, + "weekDayOfMonth": { + "$ref": "#/types/gcp:backupdisasterrecovery/BackupPlanBackupRuleStandardScheduleWeekDayOfMonth:BackupPlanBackupRuleStandardScheduleWeekDayOfMonth", + "description": "Specifies a week day of the month like FIRST SUNDAY or LAST MONDAY, on which jobs will run.\nStructure is documented below.\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "required": [ + "recurrenceType", + "timeZone" + ] + }, + "gcp:backupdisasterrecovery/BackupPlanBackupRuleStandardScheduleBackupWindow:BackupPlanBackupRuleStandardScheduleBackupWindow": { + "properties": { + "endHourOfDay": { + "type": "integer", + "description": "The hour of the day (1-24) when the window ends, for example, if the value of end hour of the day is 10, that means the backup window end time is 10:00.\nThe end hour of the day should be greater than the start\n\n- - -\n", + "willReplaceOnChanges": true + }, + "startHourOfDay": { + "type": "integer", + "description": "The hour of the day (0-23) when the window starts, for example, if the value of the start hour of the day is 6, that means the backup window starts at 6:00.\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "required": [ + "startHourOfDay" + ] + }, + "gcp:backupdisasterrecovery/BackupPlanBackupRuleStandardScheduleWeekDayOfMonth:BackupPlanBackupRuleStandardScheduleWeekDayOfMonth": { + "properties": { + "dayOfWeek": { + "type": "string", + "description": "Specifies the day of the week.\nPossible values are: `DAY_OF_WEEK_UNSPECIFIED`, `MONDAY`, `TUESDAY`, `WEDNESDAY`, `THURSDAY`, `FRIDAY`, `SATURDAY`, `SUNDAY`.\n", + "willReplaceOnChanges": true + }, + "weekOfMonth": { + "type": "string", + "description": "WeekOfMonth enumerates possible weeks in the month, e.g. the first, third, or last week of the month.\nPossible values are: `WEEK_OF_MONTH_UNSPECIFIED`, `FIRST`, `SECOND`, `THIRD`, `FOURTH`, `LAST`.\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "required": [ + "dayOfWeek", + "weekOfMonth" + ] + }, "gcp:backupdisasterrecovery/ManagementServerManagementUri:ManagementServerManagementUri": { "properties": { "api": { @@ -7615,6 +7817,199 @@ "network" ] }, + "gcp:backupdisasterrecovery/getBackupPlanAssociationRulesConfigInfo:getBackupPlanAssociationRulesConfigInfo": { + "properties": { + "lastBackupErrors": { + "type": "array", + "items": { + "$ref": "#/types/gcp:backupdisasterrecovery/getBackupPlanAssociationRulesConfigInfoLastBackupError:getBackupPlanAssociationRulesConfigInfoLastBackupError" + }, + "description": "google.rpc.Status object to store the last backup error\n" + }, + "lastBackupState": { + "type": "string", + "description": "State of last backup taken.\n" + }, + "ruleId": { + "type": "string", + "description": "Backup Rule id fetched from backup plan.\n" + } + }, + "type": "object", + "required": [ + "lastBackupErrors", + "lastBackupState", + "ruleId" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:backupdisasterrecovery/getBackupPlanAssociationRulesConfigInfoLastBackupError:getBackupPlanAssociationRulesConfigInfoLastBackupError": { + "properties": { + "code": { + "type": "number", + "description": "The status code, which should be an enum value of [google.rpc.Code]\n" + }, + "message": { + "type": "string", + "description": "A developer-facing error message, which should be in English.\n" + } + }, + "type": "object", + "required": [ + "code", + "message" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:backupdisasterrecovery/getBackupPlanBackupRule:getBackupPlanBackupRule": { + "properties": { + "backupRetentionDays": { + "type": "integer", + "description": "Configures the duration for which backup data will be kept. The value should be greater than or equal to minimum enforced retention of the backup vault.\n" + }, + "ruleId": { + "type": "string", + "description": "The unique ID of this 'BackupRule'. The 'rule_id' is unique per 'BackupPlan'.\n" + }, + "standardSchedules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:backupdisasterrecovery/getBackupPlanBackupRuleStandardSchedule:getBackupPlanBackupRuleStandardSchedule" + }, + "description": "StandardSchedule defines a schedule that runs within the confines of a defined window of days.\n" + } + }, + "type": "object", + "required": [ + "backupRetentionDays", + "ruleId", + "standardSchedules" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:backupdisasterrecovery/getBackupPlanBackupRuleStandardSchedule:getBackupPlanBackupRuleStandardSchedule": { + "properties": { + "backupWindows": { + "type": "array", + "items": { + "$ref": "#/types/gcp:backupdisasterrecovery/getBackupPlanBackupRuleStandardScheduleBackupWindow:getBackupPlanBackupRuleStandardScheduleBackupWindow" + }, + "description": "A BackupWindow defines the window of the day during which backup jobs will run. Jobs are queued at the beginning of the window and will be marked as\n'NOT_RUN' if they do not start by the end of the window.\n" + }, + "daysOfMonths": { + "type": "array", + "items": { + "type": "integer" + }, + "description": "Specifies days of months like 1, 5, or 14 on which jobs will run.\n" + }, + "daysOfWeeks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Specifies days of week like MONDAY or TUESDAY, on which jobs will run. This is required for 'recurrence_type', 'WEEKLY' and is not applicable otherwise. Possible values: [\"DAY_OF_WEEK_UNSPECIFIED\", \"MONDAY\", \"TUESDAY\", \"WEDNESDAY\", \"THURSDAY\", \"FRIDAY\", \"SATURDAY\"]\n" + }, + "hourlyFrequency": { + "type": "integer", + "description": "Specifies frequency for hourly backups. An hourly frequency of 2 means jobs will run every 2 hours from start time till end time defined.\nThis is required for 'recurrence_type', 'HOURLY' and is not applicable otherwise.\n" + }, + "months": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Specifies values of months Possible values: [\"MONTH_UNSPECIFIED\", \"JANUARY\", \"FEBRUARY\", \"MARCH\", \"APRIL\", \"MAY\", \"JUNE\", \"JULY\", \"AUGUST\", \"SEPTEMBER\", \"OCTOBER\", \"NOVEMBER\", \"DECEMBER\"]\n" + }, + "recurrenceType": { + "type": "string", + "description": "RecurrenceType enumerates the applicable periodicity for the schedule. Possible values: [\"HOURLY\", \"DAILY\", \"WEEKLY\", \"MONTHLY\", \"YEARLY\"]\n" + }, + "timeZone": { + "type": "string", + "description": "The time zone to be used when interpreting the schedule.\n" + }, + "weekDayOfMonths": { + "type": "array", + "items": { + "$ref": "#/types/gcp:backupdisasterrecovery/getBackupPlanBackupRuleStandardScheduleWeekDayOfMonth:getBackupPlanBackupRuleStandardScheduleWeekDayOfMonth" + }, + "description": "Specifies a week day of the month like FIRST SUNDAY or LAST MONDAY, on which jobs will run.\n" + } + }, + "type": "object", + "required": [ + "backupWindows", + "daysOfMonths", + "daysOfWeeks", + "hourlyFrequency", + "months", + "recurrenceType", + "timeZone", + "weekDayOfMonths" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:backupdisasterrecovery/getBackupPlanBackupRuleStandardScheduleBackupWindow:getBackupPlanBackupRuleStandardScheduleBackupWindow": { + "properties": { + "endHourOfDay": { + "type": "integer", + "description": "The hour of the day (1-24) when the window ends, for example, if the value of end hour of the day is 10, that means the backup window end time is 10:00.\nThe end hour of the day should be greater than the start\n" + }, + "startHourOfDay": { + "type": "integer", + "description": "The hour of the day (0-23) when the window starts, for example, if the value of the start hour of the day is 6, that means the backup window starts at 6:00.\n" + } + }, + "type": "object", + "required": [ + "endHourOfDay", + "startHourOfDay" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:backupdisasterrecovery/getBackupPlanBackupRuleStandardScheduleWeekDayOfMonth:getBackupPlanBackupRuleStandardScheduleWeekDayOfMonth": { + "properties": { + "dayOfWeek": { + "type": "string", + "description": "Specifies the day of the week. Possible values: [\"DAY_OF_WEEK_UNSPECIFIED\", \"MONDAY\", \"TUESDAY\", \"WEDNESDAY\", \"THURSDAY\", \"FRIDAY\", \"SATURDAY\", \"SUNDAY\"]\n" + }, + "weekOfMonth": { + "type": "string", + "description": "WeekOfMonth enumerates possible weeks in the month, e.g. the first, third, or last week of the month. Possible values: [\"WEEK_OF_MONTH_UNSPECIFIED\", \"FIRST\", \"SECOND\", \"THIRD\", \"FOURTH\", \"LAST\"]\n" + } + }, + "type": "object", + "required": [ + "dayOfWeek", + "weekOfMonth" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:backupdisasterrecovery/getManagementServerManagementUri:getManagementServerManagementUri": { "properties": { "api": { @@ -24319,6 +24714,13 @@ "type": "string", "description": "Name of the cloud storage bucket to back the volume. The resource service account must have permission to access the bucket.\n" }, + "mountOptions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of flags to pass to the gcsfuse command for configuring this volume.\nFlags should be passed without leading dashes.\n" + }, "readOnly": { "type": "boolean", "description": "If true, mount this volume as read-only in all mounts. If false, mount this volume as read-write.\n" @@ -25212,6 +25614,13 @@ "type": "string", "description": "GCS Bucket name\n" }, + "mountOptions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of flags to pass to the gcsfuse command for configuring this volume.\nFlags should be passed without leading dashes.\n" + }, "readOnly": { "type": "boolean", "description": "If true, mount the GCS bucket as read-only\n" @@ -25985,6 +26394,13 @@ "type": "string", "description": "Name of the cloud storage bucket to back the volume. The resource service account must have permission to access the bucket.\n" }, + "mountOptions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of flags to pass to the gcsfuse command for configuring this volume.\nFlags should be passed without leading dashes.\n" + }, "readOnly": { "type": "boolean", "description": "If true, mount this volume as read-only in all mounts. If false, mount this volume as read-write.\n" @@ -25993,6 +26409,7 @@ "type": "object", "required": [ "bucket", + "mountOptions", "readOnly" ], "language": { @@ -27104,6 +27521,13 @@ "type": "string", "description": "GCS Bucket name\n" }, + "mountOptions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of flags to pass to the gcsfuse command for configuring this volume.\nFlags should be passed without leading dashes.\n" + }, "readOnly": { "type": "boolean", "description": "If true, mount the GCS bucket as read-only\n" @@ -27112,6 +27536,7 @@ "type": "object", "required": [ "bucket", + "mountOptions", "readOnly" ], "language": { @@ -29665,7 +30090,7 @@ "properties": { "maxScaledDownReplicas": { "$ref": "#/types/gcp:compute/AutoscalerAutoscalingPolicyScaleDownControlMaxScaledDownReplicas:AutoscalerAutoscalingPolicyScaleDownControlMaxScaledDownReplicas", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "timeWindowSec": { "type": "integer", @@ -29691,7 +30116,7 @@ "properties": { "maxScaledInReplicas": { "$ref": "#/types/gcp:compute/AutoscalerAutoscalingPolicyScaleInControlMaxScaledInReplicas:AutoscalerAutoscalingPolicyScaleInControlMaxScaledInReplicas", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "timeWindowSec": { "type": "integer", @@ -30756,77 +31181,77 @@ "items": { "type": "string" }, - "description": "Address groups which should be matched against the traffic destination. Maximum number of destination address groups is 10. Destination address groups is only supported in Egress rules.\n" + "description": "Address groups which should be matched against the traffic destination. Maximum number of destination address groups is 10.\n" }, "destFqdns": { "type": "array", "items": { "type": "string" }, - "description": "Domain names that will be used to match against the resolved domain name of destination of traffic. Can only be specified if DIRECTION is egress.\n" + "description": "Fully Qualified Domain Name (FQDN) which should be matched against traffic destination. Maximum number of destination fqdn allowed is 100.\n" }, "destIpRanges": { "type": "array", "items": { "type": "string" }, - "description": "CIDR IP address range. Maximum number of destination CIDR IP ranges allowed is 256.\n" + "description": "CIDR IP address range. Maximum number of destination CIDR IP ranges allowed is 5000.\n" }, "destRegionCodes": { "type": "array", "items": { "type": "string" }, - "description": "The Unicode country codes whose IP addresses will be used to match against the source of traffic. Can only be specified if DIRECTION is egress.\n" + "description": "Region codes whose IP addresses will be used to match for destination of traffic. Should be specified as 2 letter country code defined as per ISO 3166 alpha-2 country codes. ex.\"US\" Maximum number of dest region codes allowed is 5000.\n" }, "destThreatIntelligences": { "type": "array", "items": { "type": "string" }, - "description": "Name of the Google Cloud Threat Intelligence list.\n" + "description": "Names of Network Threat Intelligence lists. The IPs in these lists will be matched against traffic destination.\n" }, "layer4Configs": { "type": "array", "items": { "$ref": "#/types/gcp:compute/FirewallPolicyRuleMatchLayer4Config:FirewallPolicyRuleMatchLayer4Config" }, - "description": "Pairs of IP protocols and ports that the rule should match.\n" + "description": "Pairs of IP protocols and ports that the rule should match.\nStructure is documented below.\n" }, "srcAddressGroups": { "type": "array", "items": { "type": "string" }, - "description": "Address groups which should be matched against the traffic source. Maximum number of source address groups is 10. Source address groups is only supported in Ingress rules.\n" + "description": "Address groups which should be matched against the traffic source. Maximum number of source address groups is 10.\n" }, "srcFqdns": { "type": "array", "items": { "type": "string" }, - "description": "Domain names that will be used to match against the resolved domain name of source of traffic. Can only be specified if DIRECTION is ingress.\n" + "description": "Fully Qualified Domain Name (FQDN) which should be matched against traffic source. Maximum number of source fqdn allowed is 100.\n" }, "srcIpRanges": { "type": "array", "items": { "type": "string" }, - "description": "CIDR IP address range. Maximum number of source CIDR IP ranges allowed is 256.\n" + "description": "CIDR IP address range. Maximum number of source CIDR IP ranges allowed is 5000.\n" }, "srcRegionCodes": { "type": "array", "items": { "type": "string" }, - "description": "The Unicode country codes whose IP addresses will be used to match against the source of traffic. Can only be specified if DIRECTION is ingress.\n" + "description": "Region codes whose IP addresses will be used to match for source of traffic. Should be specified as 2 letter country code defined as per ISO 3166 alpha-2 country codes. ex.\"US\" Maximum number of source region codes allowed is 5000.\n" }, "srcThreatIntelligences": { "type": "array", "items": { "type": "string" }, - "description": "Name of the Google Cloud Threat Intelligence list.\n\nThe `layer4_configs` block supports:\n" + "description": "Names of Network Threat Intelligence lists. The IPs in these lists will be matched against traffic source.\n\n\n\u003ca name=\"nested_layer4_configs\"\u003e\u003c/a\u003eThe `layer4_configs` block supports:\n" } }, "type": "object", @@ -30838,14 +31263,14 @@ "properties": { "ipProtocol": { "type": "string", - "description": "The IP protocol to which this rule applies. The protocol type is required when creating a firewall rule. This value can either be one of the following well known protocol strings (`tcp`, `udp`, `icmp`, `esp`, `ah`, `ipip`, `sctp`), or the IP protocol number.\n" + "description": "The IP protocol to which this rule applies. The protocol type is required when creating a firewall rule.\nThis value can either be one of the following well known protocol strings (tcp, udp, icmp, esp, ah, ipip, sctp), or the IP protocol number.\n" }, "ports": { "type": "array", "items": { "type": "string" }, - "description": "An optional list of ports to which this rule applies. This field is only applicable for UDP or TCP protocol. Each entry must be either an integer or a range. If not specified, this rule applies to connections through any port. Example inputs include: ``.\n" + "description": "An optional list of ports to which this rule applies. This field is only applicable for UDP or TCP protocol. Each entry must be either an integer or a range. If not specified, this rule applies to connections through any port.\nExample inputs include: [\"22\"], [\"80\",\"443\"], and [\"12345-12349\"].\n" } }, "type": "object", @@ -36022,6 +36447,26 @@ }, "type": "object" }, + "gcp:compute/NodeTemplateDisk:NodeTemplateDisk": { + "properties": { + "diskCount": { + "type": "integer", + "description": "Specifies the number of such disks.\n", + "willReplaceOnChanges": true + }, + "diskSizeGb": { + "type": "integer", + "description": "Specifies the size of the disk in base-2 GB.\n", + "willReplaceOnChanges": true + }, + "diskType": { + "type": "string", + "description": "Specifies the desired disk type on the node. This disk type must be a local storage type (e.g.: local-ssd). Note that for nodeTemplates, this should be the name of the disk type and not its URL.\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + }, "gcp:compute/NodeTemplateNodeTypeFlexibility:NodeTemplateNodeTypeFlexibility": { "properties": { "cpus": { @@ -36467,7 +36912,7 @@ "properties": { "maxScaledDownReplicas": { "$ref": "#/types/gcp:compute/RegionAutoscalerAutoscalingPolicyScaleDownControlMaxScaledDownReplicas:RegionAutoscalerAutoscalingPolicyScaleDownControlMaxScaledDownReplicas", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "timeWindowSec": { "type": "integer", @@ -36493,7 +36938,7 @@ "properties": { "maxScaledInReplicas": { "$ref": "#/types/gcp:compute/RegionAutoscalerAutoscalingPolicyScaleInControlMaxScaledInReplicas:RegionAutoscalerAutoscalingPolicyScaleInControlMaxScaledInReplicas", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "timeWindowSec": { "type": "integer", @@ -37450,14 +37895,14 @@ "additionalProperties": { "type": "string" }, - "description": ", The label key-value pairs that you want to patch onto the instance.\n\n- - -\n" + "description": "The label key-value pairs that you want to patch onto the instance,\n" }, "metadata": { "type": "object", "additionalProperties": { "type": "string" }, - "description": ", The metadata key-value pairs that you want to patch onto the instance. For more information, see [Project and instance metadata](https://cloud.google.com/compute/docs/metadata#project_and_instance_metadata).\n" + "description": "The metadata key-value pairs that you want to patch onto the instance. For more information, see Project and instance metadata,\n" } }, "type": "object" @@ -37479,11 +37924,47 @@ "initialDelaySec" ] }, + "gcp:compute/RegionInstanceGroupManagerInstanceFlexibilityPolicy:RegionInstanceGroupManagerInstanceFlexibilityPolicy": { + "properties": { + "instanceSelections": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerInstanceFlexibilityPolicyInstanceSelection:RegionInstanceGroupManagerInstanceFlexibilityPolicyInstanceSelection" + }, + "description": "Named instance selections configuring properties that the group will use when creating new VMs.\n" + } + }, + "type": "object" + }, + "gcp:compute/RegionInstanceGroupManagerInstanceFlexibilityPolicyInstanceSelection:RegionInstanceGroupManagerInstanceFlexibilityPolicyInstanceSelection": { + "properties": { + "machineTypes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Full machine-type names, e.g. \"n1-standard-16\"\n" + }, + "name": { + "type": "string", + "description": "The name of the instance group manager. Must be 1-63\ncharacters long and comply with\n[RFC1035](https://www.ietf.org/rfc/rfc1035.txt). Supported characters\ninclude lowercase letters, numbers, and hyphens.\n" + }, + "rank": { + "type": "integer", + "description": "Preference of this instance selection. Lower number means higher preference. MIG will first try to create a VM based on the machine-type with lowest rank and fallback to next rank based on availability. Machine types and instance selections with the same rank have the same preference.\n" + } + }, + "type": "object", + "required": [ + "machineTypes", + "name" + ] + }, "gcp:compute/RegionInstanceGroupManagerInstanceLifecyclePolicy:RegionInstanceGroupManagerInstanceLifecyclePolicy": { "properties": { "defaultActionOnFailure": { "type": "string", - "description": ", Default behavior for all instance or health check failures. Valid options are: `REPAIR`, `DO_NOTHING`. If `DO_NOTHING` then instances will not be repaired. If `REPAIR` (default), then failed instances will be repaired.\n\n- - -\n" + "description": ", Default behavior for all instance or health check failures. Valid options are: `REPAIR`, `DO_NOTHING`. If `DO_NOTHING` then instances will not be repaired. If `REPAIR` (default), then failed instances will be repaired.\n\n- - -\n\u003ca name=\"nested_instance_flexibility_policy\"\u003e\u003c/a\u003eThe `instance_flexibility_policy` block supports:\n\n" }, "forceUpdateOnRepair": { "type": "string", @@ -39286,6 +39767,530 @@ }, "type": "object" }, + "gcp:compute/RegionResizeRequestRequestedRunDuration:RegionResizeRequestRequestedRunDuration": { + "properties": { + "nanos": { + "type": "integer", + "description": "Span of time that's a fraction of a second at nanosecond resolution. Durations less than one second are represented with a 0 seconds field and a positive nanos field. Must be from 0 to 999,999,999 inclusive.\n", + "willReplaceOnChanges": true + }, + "seconds": { + "type": "string", + "description": "Span of time at a resolution of a second. Must be from 600 to 604800 inclusive. Note: minimum and maximum allowed range for requestedRunDuration is 10 minutes (600 seconds) and 7 days(604800 seconds) correspondingly.\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "required": [ + "seconds" + ] + }, + "gcp:compute/RegionResizeRequestStatus:RegionResizeRequestStatus": { + "properties": { + "errors": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusError:RegionResizeRequestStatusError" + }, + "description": "(Output)\nFatal errors encountered during the queueing or provisioning phases of the ResizeRequest that caused the transition to the FAILED state. Contrary to the lastAttempt errors, this field is final and errors are never removed from here, as the ResizeRequest is not going to retry.\nStructure is documented below.\n" + }, + "lastAttempts": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusLastAttempt:RegionResizeRequestStatusLastAttempt" + }, + "description": "(Output)\nInformation about the last attempt to fulfill the request. The value is temporary since the ResizeRequest can retry, as long as it's still active and the last attempt value can either be cleared or replaced with a different error. Since ResizeRequest retries infrequently, the value may be stale and no longer show an active problem. The value is cleared when ResizeRequest transitions to the final state (becomes inactive). If the final state is FAILED the error describing it will be storred in the \"error\" field only.\nStructure is documented below.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "errors", + "lastAttempts" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusError:RegionResizeRequestStatusError": { + "properties": { + "errors": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusErrorError:RegionResizeRequestStatusErrorError" + }, + "description": "(Output)\nThe array of errors encountered while processing this operation.\nStructure is documented below.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "errors" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusErrorError:RegionResizeRequestStatusErrorError": { + "properties": { + "code": { + "type": "string", + "description": "(Output)\nThe error type identifier for this error.\n" + }, + "errorDetails": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusErrorErrorErrorDetail:RegionResizeRequestStatusErrorErrorErrorDetail" + }, + "description": "(Output)\nAn array of messages that contain the error details. There is a set of defined message types to use for providing details.The syntax depends on the error code. For example, QuotaExceededInfo will have details when the error code is QUOTA_EXCEEDED.\nStructure is documented below.\n" + }, + "location": { + "type": "string", + "description": "(Output)\nIndicates the field in the request that caused the error. This property is optional.\n" + }, + "message": { + "type": "string", + "description": "(Output)\nThe localized error message in the above locale.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "code", + "errorDetails", + "location", + "message" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusErrorErrorErrorDetail:RegionResizeRequestStatusErrorErrorErrorDetail": { + "properties": { + "errorInfos": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusErrorErrorErrorDetailErrorInfo:RegionResizeRequestStatusErrorErrorErrorDetailErrorInfo" + }, + "description": "(Output)\nA nested object resource.\nStructure is documented below.\n" + }, + "helps": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusErrorErrorErrorDetailHelp:RegionResizeRequestStatusErrorErrorErrorDetailHelp" + }, + "description": "(Output)\nA nested object resource.\nStructure is documented below.\n" + }, + "localizedMessages": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusErrorErrorErrorDetailLocalizedMessage:RegionResizeRequestStatusErrorErrorErrorDetailLocalizedMessage" + }, + "description": "(Output)\nA nested object resource.\nStructure is documented below.\n" + }, + "quotaInfos": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusErrorErrorErrorDetailQuotaInfo:RegionResizeRequestStatusErrorErrorErrorDetailQuotaInfo" + }, + "description": "(Output)\nA nested object resource.\nStructure is documented below.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "errorInfos", + "helps", + "localizedMessages", + "quotaInfos" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusErrorErrorErrorDetailErrorInfo:RegionResizeRequestStatusErrorErrorErrorDetailErrorInfo": { + "properties": { + "domain": { + "type": "string", + "description": "(Output)\nThe logical grouping to which the \"reason\" belongs. The error domain is typically the registered service name of the tool or product that generates the error. Example: \"pubsub.googleapis.com\".\n" + }, + "metadatas": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "(Output)\nAdditional structured details about this error.\n" + }, + "reason": { + "type": "string", + "description": "(Output)\nThe reason of the error. This is a constant value that identifies the proximate cause of the error. Error reasons are unique within a particular domain of errors.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "domain", + "metadatas", + "reason" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusErrorErrorErrorDetailHelp:RegionResizeRequestStatusErrorErrorErrorDetailHelp": { + "properties": { + "links": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusErrorErrorErrorDetailHelpLink:RegionResizeRequestStatusErrorErrorErrorDetailHelpLink" + }, + "description": "(Output)\nA nested object resource.\nStructure is documented below.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "links" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusErrorErrorErrorDetailHelpLink:RegionResizeRequestStatusErrorErrorErrorDetailHelpLink": { + "properties": { + "description": { + "type": "string", + "description": "An optional description of this resize-request.\n" + }, + "url": { + "type": "string", + "description": "(Output)\nThe URL of the link.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "description", + "url" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusErrorErrorErrorDetailLocalizedMessage:RegionResizeRequestStatusErrorErrorErrorDetailLocalizedMessage": { + "properties": { + "locale": { + "type": "string", + "description": "(Output)\nThe locale used following the specification defined at https://www.rfc-editor.org/rfc/bcp/bcp47.txt. Examples are: \"en-US\", \"fr-CH\", \"es-MX\"\n" + }, + "message": { + "type": "string", + "description": "(Output)\nThe localized error message in the above locale.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "locale", + "message" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusErrorErrorErrorDetailQuotaInfo:RegionResizeRequestStatusErrorErrorErrorDetailQuotaInfo": { + "properties": { + "dimensions": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "(Output)\nThe map holding related quota dimensions\n" + }, + "futureLimit": { + "type": "integer", + "description": "(Output)\nFuture quota limit being rolled out. The limit's unit depends on the quota type or metric.\n" + }, + "limit": { + "type": "integer", + "description": "(Output)\nCurrent effective quota limit. The limit's unit depends on the quota type or metric.\n" + }, + "limitName": { + "type": "string", + "description": "(Output)\nThe name of the quota limit.\n" + }, + "metricName": { + "type": "string", + "description": "(Output)\nThe Compute Engine quota metric name.\n" + }, + "rolloutStatus": { + "type": "string", + "description": "(Output)\nRollout status of the future quota limit.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "dimensions", + "futureLimit", + "limit", + "limitName", + "metricName", + "rolloutStatus" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusLastAttempt:RegionResizeRequestStatusLastAttempt": { + "properties": { + "errors": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusLastAttemptError:RegionResizeRequestStatusLastAttemptError" + }, + "description": "(Output)\nFatal errors encountered during the queueing or provisioning phases of the ResizeRequest that caused the transition to the FAILED state. Contrary to the lastAttempt errors, this field is final and errors are never removed from here, as the ResizeRequest is not going to retry.\nStructure is documented below.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "errors" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusLastAttemptError:RegionResizeRequestStatusLastAttemptError": { + "properties": { + "errors": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusLastAttemptErrorError:RegionResizeRequestStatusLastAttemptErrorError" + }, + "description": "(Output)\nThe array of errors encountered while processing this operation.\nStructure is documented below.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "errors" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusLastAttemptErrorError:RegionResizeRequestStatusLastAttemptErrorError": { + "properties": { + "code": { + "type": "string", + "description": "(Output)\nThe error type identifier for this error.\n" + }, + "errorDetails": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusLastAttemptErrorErrorErrorDetail:RegionResizeRequestStatusLastAttemptErrorErrorErrorDetail" + }, + "description": "(Output)\nAn array of messages that contain the error details. There is a set of defined message types to use for providing details.The syntax depends on the error code. For example, QuotaExceededInfo will have details when the error code is QUOTA_EXCEEDED.\nStructure is documented below.\n" + }, + "location": { + "type": "string", + "description": "(Output)\nIndicates the field in the request that caused the error. This property is optional.\n" + }, + "message": { + "type": "string", + "description": "(Output)\nThe localized error message in the above locale.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "code", + "errorDetails", + "location", + "message" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusLastAttemptErrorErrorErrorDetail:RegionResizeRequestStatusLastAttemptErrorErrorErrorDetail": { + "properties": { + "errorInfos": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailErrorInfo:RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailErrorInfo" + }, + "description": "(Output)\nA nested object resource.\nStructure is documented below.\n" + }, + "helps": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailHelp:RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailHelp" + }, + "description": "(Output)\nA nested object resource.\nStructure is documented below.\n" + }, + "localizedMessages": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailLocalizedMessage:RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailLocalizedMessage" + }, + "description": "(Output)\nA nested object resource.\nStructure is documented below.\n" + }, + "quotaInfos": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailQuotaInfo:RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailQuotaInfo" + }, + "description": "(Output)\nA nested object resource.\nStructure is documented below.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "errorInfos", + "helps", + "localizedMessages", + "quotaInfos" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailErrorInfo:RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailErrorInfo": { + "properties": { + "domain": { + "type": "string", + "description": "(Output)\nThe logical grouping to which the \"reason\" belongs. The error domain is typically the registered service name of the tool or product that generates the error. Example: \"pubsub.googleapis.com\".\n" + }, + "metadatas": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "(Output)\nAdditional structured details about this error.\n" + }, + "reason": { + "type": "string", + "description": "(Output)\nThe reason of the error. This is a constant value that identifies the proximate cause of the error. Error reasons are unique within a particular domain of errors.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "domain", + "metadatas", + "reason" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailHelp:RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailHelp": { + "properties": { + "links": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailHelpLink:RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailHelpLink" + }, + "description": "(Output)\nA nested object resource.\nStructure is documented below.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "links" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailHelpLink:RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailHelpLink": { + "properties": { + "description": { + "type": "string", + "description": "An optional description of this resize-request.\n" + }, + "url": { + "type": "string", + "description": "(Output)\nThe URL of the link.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "description", + "url" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailLocalizedMessage:RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailLocalizedMessage": { + "properties": { + "locale": { + "type": "string", + "description": "(Output)\nThe locale used following the specification defined at https://www.rfc-editor.org/rfc/bcp/bcp47.txt. Examples are: \"en-US\", \"fr-CH\", \"es-MX\"\n" + }, + "message": { + "type": "string", + "description": "(Output)\nThe localized error message in the above locale.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "locale", + "message" + ] + } + } + }, + "gcp:compute/RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailQuotaInfo:RegionResizeRequestStatusLastAttemptErrorErrorErrorDetailQuotaInfo": { + "properties": { + "dimensions": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "(Output)\nThe map holding related quota dimensions\n" + }, + "futureLimit": { + "type": "integer", + "description": "(Output)\nFuture quota limit being rolled out. The limit's unit depends on the quota type or metric.\n" + }, + "limit": { + "type": "integer", + "description": "(Output)\nCurrent effective quota limit. The limit's unit depends on the quota type or metric.\n" + }, + "limitName": { + "type": "string", + "description": "(Output)\nThe name of the quota limit.\n" + }, + "metricName": { + "type": "string", + "description": "(Output)\nThe Compute Engine quota metric name.\n" + }, + "rolloutStatus": { + "type": "string", + "description": "(Output)\nRollout status of the future quota limit.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "dimensions", + "futureLimit", + "limit", + "limitName", + "metricName", + "rolloutStatus" + ] + } + } + }, "gcp:compute/RegionSecurityPolicyDdosProtectionConfig:RegionSecurityPolicyDdosProtectionConfig": { "properties": { "ddosProtection": { @@ -39298,6 +40303,47 @@ "ddosProtection" ] }, + "gcp:compute/RegionSecurityPolicyRule:RegionSecurityPolicyRule": { + "properties": { + "action": { + "type": "string", + "description": "The Action to perform when the rule is matched. The following are the valid actions:\n* allow: allow access to target.\n* deny(STATUS): deny access to target, returns the HTTP response code specified. Valid values for STATUS are 403, 404, and 502.\n* rate_based_ban: limit client traffic to the configured threshold and ban the client if the traffic exceeds the threshold. Configure parameters for this action in RateLimitOptions. Requires rateLimitOptions to be set.\n* redirect: redirect to a different target. This can either be an internal reCAPTCHA redirect, or an external URL-based redirect via a 302 response. Parameters for this action can be configured via redirectOptions. This action is only supported in Global Security Policies of type CLOUD_ARMOR.\n* throttle: limit client traffic to the configured threshold. Configure parameters for this action in rateLimitOptions. Requires rateLimitOptions to be set for this.\n" + }, + "description": { + "type": "string", + "description": "An optional description of this resource. Provide this property when you create the resource.\n" + }, + "match": { + "$ref": "#/types/gcp:compute/RegionSecurityPolicyRuleMatch:RegionSecurityPolicyRuleMatch", + "description": "A match condition that incoming traffic is evaluated against.\nIf it evaluates to true, the corresponding 'action' is enforced.\nStructure is documented below.\n" + }, + "networkMatch": { + "$ref": "#/types/gcp:compute/RegionSecurityPolicyRuleNetworkMatch:RegionSecurityPolicyRuleNetworkMatch", + "description": "A match condition that incoming packets are evaluated against for CLOUD_ARMOR_NETWORK security policies. If it matches, the corresponding 'action' is enforced.\nThe match criteria for a rule consists of built-in match fields (like 'srcIpRanges') and potentially multiple user-defined match fields ('userDefinedFields').\nField values may be extracted directly from the packet or derived from it (e.g. 'srcRegionCodes'). Some fields may not be present in every packet (e.g. 'srcPorts'). A user-defined field is only present if the base header is found in the packet and the entire field is in bounds.\nEach match field may specify which values can match it, listing one or more ranges, prefixes, or exact values that are considered a match for the field. A field value must be present in order to match a specified match field. If no match values are specified for a match field, then any field value is considered to match it, and it's not required to be present. For strings specifying '*' is also equivalent to match all.\nFor a packet to match a rule, all specified match fields must match the corresponding field values derived from the packet.\nExample:\nnetworkMatch: srcIpRanges: - \"192.0.2.0/24\" - \"198.51.100.0/24\" userDefinedFields: - name: \"ipv4_fragment_offset\" values: - \"1-0x1fff\"\nThe above match condition matches packets with a source IP in 192.0.2.0/24 or 198.51.100.0/24 and a user-defined field named \"ipv4_fragment_offset\" with a value between 1 and 0x1fff inclusive\nStructure is documented below.\n" + }, + "preconfiguredWafConfig": { + "$ref": "#/types/gcp:compute/RegionSecurityPolicyRulePreconfiguredWafConfig:RegionSecurityPolicyRulePreconfiguredWafConfig", + "description": "Preconfigured WAF configuration to be applied for the rule.\nIf the rule does not evaluate preconfigured WAF rules, i.e., if evaluatePreconfiguredWaf() is not used, this field will have no effect.\nStructure is documented below.\n" + }, + "preview": { + "type": "boolean", + "description": "If set to true, the specified action is not enforced.\n" + }, + "priority": { + "type": "integer", + "description": "An integer indicating the priority of a rule in the list.\nThe priority must be a positive value between 0 and 2147483647.\nRules are evaluated from highest to lowest priority where 0 is the highest priority and 2147483647 is the lowest priority.\n" + }, + "rateLimitOptions": { + "$ref": "#/types/gcp:compute/RegionSecurityPolicyRuleRateLimitOptions:RegionSecurityPolicyRuleRateLimitOptions", + "description": "Must be specified if the action is \"rate_based_ban\" or \"throttle\". Cannot be specified for any other actions.\nStructure is documented below.\n" + } + }, + "type": "object", + "required": [ + "action", + "priority" + ] + }, "gcp:compute/RegionSecurityPolicyRuleMatch:RegionSecurityPolicyRuleMatch": { "properties": { "config": { @@ -39630,7 +40676,7 @@ }, "name": { "type": "string", - "description": "The name of this field. Must be unique within the policy.\n" + "description": "Name of the user-defined field, as given in the definition.\n" }, "offset": { "type": "integer", @@ -42228,7 +43274,7 @@ "properties": { "range": { "type": "string", - "description": "The IP range to advertise. The value must be a\nCIDR-formatted string.\n" + "description": "The IP range to learn. The value must be a\nCIDR-formatted string.\n" } }, "type": "object", @@ -49440,6 +50486,56 @@ } } }, + "gcp:compute/getRegionInstanceGroupManagerInstanceFlexibilityPolicy:getRegionInstanceGroupManagerInstanceFlexibilityPolicy": { + "properties": { + "instanceSelections": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getRegionInstanceGroupManagerInstanceFlexibilityPolicyInstanceSelection:getRegionInstanceGroupManagerInstanceFlexibilityPolicyInstanceSelection" + }, + "description": "Named instance selections configuring properties that the group will use when creating new VMs.\n" + } + }, + "type": "object", + "required": [ + "instanceSelections" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getRegionInstanceGroupManagerInstanceFlexibilityPolicyInstanceSelection:getRegionInstanceGroupManagerInstanceFlexibilityPolicyInstanceSelection": { + "properties": { + "machineTypes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Full machine-type names, e.g. \"n1-standard-16\"\n" + }, + "name": { + "type": "string", + "description": "The name of the instance group. Either `name` or `self_link` must be provided.\n" + }, + "rank": { + "type": "integer", + "description": "Preference of this instance selection. Lower number means higher preference. MIG will first try to create a VM based on the machine-type with lowest rank and fallback to next rank based on availability. Machine types and instance selections with the same rank have the same preference.\n" + } + }, + "type": "object", + "required": [ + "machineTypes", + "name", + "rank" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:compute/getRegionInstanceGroupManagerInstanceLifecyclePolicy:getRegionInstanceGroupManagerInstanceLifecyclePolicy": { "properties": { "defaultActionOnFailure": { @@ -53995,12 +55091,16 @@ "$ref": "#/types/gcp:container/ClusterAddonsConfigNetworkPolicyConfig:ClusterAddonsConfigNetworkPolicyConfig", "description": "Whether we should enable the network policy addon\nfor the master. This must be enabled in order to enable network policy for the nodes.\nTo enable this, you must also define a `network_policy` block,\notherwise nothing will happen.\nIt can only be disabled if the nodes already do not have network policies enabled.\nDefaults to disabled; set `disabled = false` to enable.\n" }, + "parallelstoreCsiDriverConfig": { + "$ref": "#/types/gcp:container/ClusterAddonsConfigParallelstoreCsiDriverConfig:ClusterAddonsConfigParallelstoreCsiDriverConfig", + "description": "The status of the Parallelstore CSI driver addon,\nwhich allows the usage of a Parallelstore instances as volumes.\nIt is disabled by default for Standard clusters; set `enabled = true` to enable.\nIt is enabled by default for Autopilot clusters with version 1.29 or later; set `enabled = true` to enable it explicitly.\nSee [Enable the Parallelstore CSI driver](https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/parallelstore-csi-new-volume#enable) for more information.\n\nThis example `addons_config` disables two addons:\n\n" + }, "rayOperatorConfigs": { "type": "array", "items": { "$ref": "#/types/gcp:container/ClusterAddonsConfigRayOperatorConfig:ClusterAddonsConfigRayOperatorConfig" }, - "description": ". The status of the [Ray Operator\naddon](https://cloud.google.com/kubernetes-engine/docs/add-on/ray-on-gke/concepts/overview).\nIt is disabled by default. Set `enabled = true` to enable. The minimum\ncluster version to enable Ray is 1.30.0-gke.1747000.\n\nRay Operator config has optional subfields\n`ray_cluster_logging_config.enabled` and\n`ray_cluster_monitoring_config.enabled` which control Ray Cluster logging\nand monitoring respectively. See [Collect and view logs and metrics for Ray\nclusters on\nGKE](https://cloud.google.com/kubernetes-engine/docs/add-on/ray-on-gke/how-to/collect-view-logs-metrics)\nfor more information.\n\n\nThis example `addons_config` disables two addons:\n\n" + "description": ". The status of the [Ray Operator\naddon](https://cloud.google.com/kubernetes-engine/docs/add-on/ray-on-gke/concepts/overview).\nIt is disabled by default. Set `enabled = true` to enable. The minimum\ncluster version to enable Ray is 1.30.0-gke.1747000.\n\nRay Operator config has optional subfields\n`ray_cluster_logging_config.enabled` and\n`ray_cluster_monitoring_config.enabled` which control Ray Cluster logging\nand monitoring respectively. See [Collect and view logs and metrics for Ray\nclusters on\nGKE](https://cloud.google.com/kubernetes-engine/docs/add-on/ray-on-gke/how-to/collect-view-logs-metrics)\nfor more information.\n" }, "statefulHaConfig": { "$ref": "#/types/gcp:container/ClusterAddonsConfigStatefulHaConfig:ClusterAddonsConfigStatefulHaConfig", @@ -54023,6 +55123,7 @@ "istioConfig", "kalmConfig", "networkPolicyConfig", + "parallelstoreCsiDriverConfig", "rayOperatorConfigs", "statefulHaConfig" ] @@ -54174,6 +55275,17 @@ "disabled" ] }, + "gcp:container/ClusterAddonsConfigParallelstoreCsiDriverConfig:ClusterAddonsConfigParallelstoreCsiDriverConfig": { + "properties": { + "enabled": { + "type": "boolean" + } + }, + "type": "object", + "required": [ + "enabled" + ] + }, "gcp:container/ClusterAddonsConfigRayOperatorConfig:ClusterAddonsConfigRayOperatorConfig": { "properties": { "enabled": { @@ -54549,6 +55661,42 @@ "enabled" ] }, + "gcp:container/ClusterControlPlaneEndpointsConfig:ClusterControlPlaneEndpointsConfig": { + "properties": { + "dnsEndpointConfig": { + "$ref": "#/types/gcp:container/ClusterControlPlaneEndpointsConfigDnsEndpointConfig:ClusterControlPlaneEndpointsConfigDnsEndpointConfig", + "description": "DNS endpoint configuration.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "dnsEndpointConfig" + ] + } + } + }, + "gcp:container/ClusterControlPlaneEndpointsConfigDnsEndpointConfig:ClusterControlPlaneEndpointsConfigDnsEndpointConfig": { + "properties": { + "allowExternalTraffic": { + "type": "boolean", + "description": "Controls whether user traffic is allowed over this endpoint. Note that GCP-managed services may still use the endpoint even if this is false.\n" + }, + "endpoint": { + "type": "string", + "description": "The cluster's DNS endpoint.\n" + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "endpoint" + ] + } + } + }, "gcp:container/ClusterCostManagementConfig:ClusterCostManagementConfig": { "properties": { "enabled": { @@ -54931,13 +56079,18 @@ "gcpPublicCidrsAccessEnabled": { "type": "boolean", "description": "Whether Kubernetes master is\naccessible via Google Compute Engine Public IPs.\n" + }, + "privateEndpointEnforcementEnabled": { + "type": "boolean", + "description": "Whether authorized networks is enforced on the private endpoint or not. Defaults to false.\n" } }, "type": "object", "language": { "nodejs": { "requiredOutputs": [ - "gcpPublicCidrsAccessEnabled" + "gcpPublicCidrsAccessEnabled", + "privateEndpointEnforcementEnabled" ] } } @@ -57375,6 +58528,49 @@ } } }, + "gcp:container/ClusterUserManagedKeysConfig:ClusterUserManagedKeysConfig": { + "properties": { + "aggregationCa": { + "type": "string", + "description": "The Certificate Authority Service caPool to use for the aggreation CA in this cluster.\n" + }, + "clusterCa": { + "type": "string", + "description": "The Certificate Authority Service caPool to use for the cluster CA in this cluster.\n" + }, + "controlPlaneDiskEncryptionKey": { + "type": "string", + "description": "The Cloud KMS cryptoKey to use for Confidential Hyperdisk on the control plane nodes.\n" + }, + "etcdApiCa": { + "type": "string", + "description": "The Certificate Authority Service caPool to use for the etcd API CA in this cluster.\n" + }, + "etcdPeerCa": { + "type": "string", + "description": "The Certificate Authority Service caPool to use for the etcd peer CA in this cluster.\n" + }, + "gkeopsEtcdBackupEncryptionKey": { + "type": "string", + "description": "Resource path of the Cloud KMS cryptoKey to use for encryption of internal etcd backups.\n" + }, + "serviceAccountSigningKeys": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The Cloud KMS cryptoKeyVersions to use for signing service account JWTs issued by this cluster.\n" + }, + "serviceAccountVerificationKeys": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The Cloud KMS cryptoKeyVersions to use for verifying service account JWTs issued by this cluster.\n" + } + }, + "type": "object" + }, "gcp:container/ClusterVerticalPodAutoscaling:ClusterVerticalPodAutoscaling": { "properties": { "enabled": { @@ -58530,6 +59726,13 @@ }, "description": "Whether we should enable the network policy addon for the master. This must be enabled in order to enable network policy for the nodes. To enable this, you must also define a network_policy block, otherwise nothing will happen. It can only be disabled if the nodes already do not have network policies enabled. Defaults to disabled; set disabled = false to enable.\n" }, + "parallelstoreCsiDriverConfigs": { + "type": "array", + "items": { + "$ref": "#/types/gcp:container/getClusterAddonsConfigParallelstoreCsiDriverConfig:getClusterAddonsConfigParallelstoreCsiDriverConfig" + }, + "description": "The status of the Parallelstore CSI driver addon, which allows the usage of Parallelstore instances as volumes. Defaults to disabled; set enabled = true to enable.\n" + }, "rayOperatorConfigs": { "type": "array", "items": { @@ -58559,6 +59762,7 @@ "istioConfigs", "kalmConfigs", "networkPolicyConfigs", + "parallelstoreCsiDriverConfigs", "rayOperatorConfigs", "statefulHaConfigs" ], @@ -58770,6 +59974,22 @@ } } }, + "gcp:container/getClusterAddonsConfigParallelstoreCsiDriverConfig:getClusterAddonsConfigParallelstoreCsiDriverConfig": { + "properties": { + "enabled": { + "type": "boolean" + } + }, + "type": "object", + "required": [ + "enabled" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:container/getClusterAddonsConfigRayOperatorConfig:getClusterAddonsConfigRayOperatorConfig": { "properties": { "enabled": { @@ -59231,6 +60451,48 @@ } } }, + "gcp:container/getClusterControlPlaneEndpointsConfig:getClusterControlPlaneEndpointsConfig": { + "properties": { + "dnsEndpointConfigs": { + "type": "array", + "items": { + "$ref": "#/types/gcp:container/getClusterControlPlaneEndpointsConfigDnsEndpointConfig:getClusterControlPlaneEndpointsConfigDnsEndpointConfig" + }, + "description": "DNS endpoint configuration.\n" + } + }, + "type": "object", + "required": [ + "dnsEndpointConfigs" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:container/getClusterControlPlaneEndpointsConfigDnsEndpointConfig:getClusterControlPlaneEndpointsConfigDnsEndpointConfig": { + "properties": { + "allowExternalTraffic": { + "type": "boolean", + "description": "Controls whether user traffic is allowed over this endpoint. Note that GCP-managed services may still use the endpoint even if this is false.\n" + }, + "endpoint": { + "type": "string", + "description": "The cluster's DNS endpoint.\n" + } + }, + "type": "object", + "required": [ + "allowExternalTraffic", + "endpoint" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:container/getClusterCostManagementConfig:getClusterCostManagementConfig": { "properties": { "enabled": { @@ -59712,12 +60974,17 @@ "gcpPublicCidrsAccessEnabled": { "type": "boolean", "description": "Whether Kubernetes master is accessible via Google Compute Engine Public IPs.\n" + }, + "privateEndpointEnforcementEnabled": { + "type": "boolean", + "description": "Whether authorized networks is enforced on the private endpoint or not. Defaults to false.\n" } }, "type": "object", "required": [ "cidrBlocks", - "gcpPublicCidrsAccessEnabled" + "gcpPublicCidrsAccessEnabled", + "privateEndpointEnforcementEnabled" ], "language": { "nodejs": { @@ -62774,6 +64041,64 @@ } } }, + "gcp:container/getClusterUserManagedKeysConfig:getClusterUserManagedKeysConfig": { + "properties": { + "aggregationCa": { + "type": "string", + "description": "The Certificate Authority Service caPool to use for the aggreation CA in this cluster.\n" + }, + "clusterCa": { + "type": "string", + "description": "The Certificate Authority Service caPool to use for the cluster CA in this cluster.\n" + }, + "controlPlaneDiskEncryptionKey": { + "type": "string", + "description": "The Cloud KMS cryptoKey to use for Confidential Hyperdisk on the control plane nodes.\n" + }, + "etcdApiCa": { + "type": "string", + "description": "The Certificate Authority Service caPool to use for the etcd API CA in this cluster.\n" + }, + "etcdPeerCa": { + "type": "string", + "description": "The Certificate Authority Service caPool to use for the etcd peer CA in this cluster.\n" + }, + "gkeopsEtcdBackupEncryptionKey": { + "type": "string", + "description": "Resource path of the Cloud KMS cryptoKey to use for encryption of internal etcd backups.\n" + }, + "serviceAccountSigningKeys": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The Cloud KMS cryptoKeyVersions to use for signing service account JWTs issued by this cluster.\n" + }, + "serviceAccountVerificationKeys": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The Cloud KMS cryptoKeyVersions to use for verifying service account JWTs issued by this cluster.\n" + } + }, + "type": "object", + "required": [ + "aggregationCa", + "clusterCa", + "controlPlaneDiskEncryptionKey", + "etcdApiCa", + "etcdPeerCa", + "gkeopsEtcdBackupEncryptionKey", + "serviceAccountSigningKeys", + "serviceAccountVerificationKeys" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:container/getClusterVerticalPodAutoscaling:getClusterVerticalPodAutoscaling": { "properties": { "enabled": { @@ -74558,6 +75883,38 @@ } } }, + "gcp:dataproc/GdcApplicationEnvironmentSparkApplicationEnvironmentConfig:GdcApplicationEnvironmentSparkApplicationEnvironmentConfig": { + "properties": { + "defaultProperties": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "A map of default Spark properties to apply to workloads in this application environment. These defaults may be overridden by per-application properties.\n" + }, + "defaultVersion": { + "type": "string", + "description": "The default Dataproc version to use for applications submitted to this application environment\n" + } + }, + "type": "object" + }, + "gcp:dataproc/GdcServiceInstanceGdceCluster:GdcServiceInstanceGdceCluster": { + "properties": { + "gdceCluster": { + "type": "string", + "description": "Gdce cluster resource id.\n", + "willReplaceOnChanges": true + } + }, + "type": "object", + "required": [ + "gdceCluster" + ] + }, + "gcp:dataproc/GdcServiceInstanceSparkServiceInstanceConfig:GdcServiceInstanceSparkServiceInstanceConfig": { + "type": "object" + }, "gcp:dataproc/JobHadoopConfig:JobHadoopConfig": { "properties": { "archiveUris": { @@ -88107,7 +89464,7 @@ "properties": { "manualLbConfig": { "$ref": "#/types/gcp:gkeonprem/BareMetalAdminClusterLoadBalancerManualLbConfig:BareMetalAdminClusterLoadBalancerManualLbConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "portConfig": { "$ref": "#/types/gcp:gkeonprem/BareMetalAdminClusterLoadBalancerPortConfig:BareMetalAdminClusterLoadBalancerPortConfig", @@ -88179,7 +89536,7 @@ "properties": { "islandModeCidr": { "$ref": "#/types/gcp:gkeonprem/BareMetalAdminClusterNetworkConfigIslandModeCidr:BareMetalAdminClusterNetworkConfigIslandModeCidr", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" } }, "type": "object" @@ -88649,11 +90006,11 @@ }, "manualLbConfig": { "$ref": "#/types/gcp:gkeonprem/BareMetalClusterLoadBalancerManualLbConfig:BareMetalClusterLoadBalancerManualLbConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "metalLbConfig": { "$ref": "#/types/gcp:gkeonprem/BareMetalClusterLoadBalancerMetalLbConfig:BareMetalClusterLoadBalancerMetalLbConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "portConfig": { "$ref": "#/types/gcp:gkeonprem/BareMetalClusterLoadBalancerPortConfig:BareMetalClusterLoadBalancerPortConfig", @@ -89039,7 +90396,7 @@ }, "islandModeCidr": { "$ref": "#/types/gcp:gkeonprem/BareMetalClusterNetworkConfigIslandModeCidr:BareMetalClusterNetworkConfigIslandModeCidr", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "multipleNetworkInterfacesConfig": { "$ref": "#/types/gcp:gkeonprem/BareMetalClusterNetworkConfigMultipleNetworkInterfacesConfig:BareMetalClusterNetworkConfigMultipleNetworkInterfacesConfig", @@ -91057,78 +92414,129 @@ "expression" ] }, - "gcp:iam/DenyPolicyRule:DenyPolicyRule": { + "gcp:iam/DenyPolicyRule:DenyPolicyRule": { + "properties": { + "denyRule": { + "$ref": "#/types/gcp:iam/DenyPolicyRuleDenyRule:DenyPolicyRuleDenyRule", + "description": "A deny rule in an IAM deny policy.\nStructure is documented below.\n" + }, + "description": { + "type": "string", + "description": "The description of the rule.\n" + } + }, + "type": "object" + }, + "gcp:iam/DenyPolicyRuleDenyRule:DenyPolicyRuleDenyRule": { + "properties": { + "denialCondition": { + "$ref": "#/types/gcp:iam/DenyPolicyRuleDenyRuleDenialCondition:DenyPolicyRuleDenyRuleDenialCondition", + "description": "User defined CEVAL expression. A CEVAL expression is used to specify match criteria such as origin.ip, source.region_code and contents in the request header.\nStructure is documented below.\n" + }, + "deniedPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The permissions that are explicitly denied by this rule. Each permission uses the format `{service-fqdn}/{resource}.{verb}`,\nwhere `{service-fqdn}` is the fully qualified domain name for the service. For example, `iam.googleapis.com/roles.list`.\n" + }, + "deniedPrincipals": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The identities that are prevented from using one or more permissions on Google Cloud resources.\n" + }, + "exceptionPermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Specifies the permissions that this rule excludes from the set of denied permissions given by deniedPermissions.\nIf a permission appears in deniedPermissions and in exceptionPermissions then it will not be denied.\nThe excluded permissions can be specified using the same syntax as deniedPermissions.\n" + }, + "exceptionPrincipals": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The identities that are excluded from the deny rule, even if they are listed in the deniedPrincipals.\nFor example, you could add a Google group to the deniedPrincipals, then exclude specific users who belong to that group.\n" + } + }, + "type": "object" + }, + "gcp:iam/DenyPolicyRuleDenyRuleDenialCondition:DenyPolicyRuleDenyRuleDenialCondition": { + "properties": { + "description": { + "type": "string", + "description": "Description of the expression. This is a longer text which describes the expression,\ne.g. when hovered over it in a UI.\n" + }, + "expression": { + "type": "string", + "description": "Textual representation of an expression in Common Expression Language syntax.\n" + }, + "location": { + "type": "string", + "description": "String indicating the location of the expression for error reporting,\ne.g. a file name and a position in the file.\n\n- - -\n" + }, + "title": { + "type": "string", + "description": "Title for the expression, i.e. a short string describing its purpose.\nThis can be used e.g. in UIs which allow to enter the expression.\n" + } + }, + "type": "object", + "required": [ + "expression" + ] + }, + "gcp:iam/PrincipalAccessBoundaryPolicyDetails:PrincipalAccessBoundaryPolicyDetails": { "properties": { - "denyRule": { - "$ref": "#/types/gcp:iam/DenyPolicyRuleDenyRule:DenyPolicyRuleDenyRule", - "description": "A deny rule in an IAM deny policy.\nStructure is documented below.\n" - }, - "description": { + "enforcementVersion": { "type": "string", - "description": "The description of the rule.\n" - } - }, - "type": "object" - }, - "gcp:iam/DenyPolicyRuleDenyRule:DenyPolicyRuleDenyRule": { - "properties": { - "denialCondition": { - "$ref": "#/types/gcp:iam/DenyPolicyRuleDenyRuleDenialCondition:DenyPolicyRuleDenyRuleDenialCondition", - "description": "User defined CEVAL expression. A CEVAL expression is used to specify match criteria such as origin.ip, source.region_code and contents in the request header.\nStructure is documented below.\n" - }, - "deniedPermissions": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The permissions that are explicitly denied by this rule. Each permission uses the format `{service-fqdn}/{resource}.{verb}`,\nwhere `{service-fqdn}` is the fully qualified domain name for the service. For example, `iam.googleapis.com/roles.list`.\n" + "description": "The version number that indicates which Google Cloud services\nare included in the enforcement (e.g. \\\"latest\\\", \\\"1\\\", ...). If empty, the\nPAB policy version will be set to the current latest version, and this version\nwon't get updated when new versions are released.\n" }, - "deniedPrincipals": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The identities that are prevented from using one or more permissions on Google Cloud resources.\n" - }, - "exceptionPermissions": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Specifies the permissions that this rule excludes from the set of denied permissions given by deniedPermissions.\nIf a permission appears in deniedPermissions and in exceptionPermissions then it will not be denied.\nThe excluded permissions can be specified using the same syntax as deniedPermissions.\n" - }, - "exceptionPrincipals": { + "rules": { "type": "array", "items": { - "type": "string" + "$ref": "#/types/gcp:iam/PrincipalAccessBoundaryPolicyDetailsRule:PrincipalAccessBoundaryPolicyDetailsRule" }, - "description": "The identities that are excluded from the deny rule, even if they are listed in the deniedPrincipals.\nFor example, you could add a Google group to the deniedPrincipals, then exclude specific users who belong to that group.\n" + "description": "A list of principal access boundary policy rules. The number of rules in a policy is limited to 500.\nStructure is documented below.\n" } }, - "type": "object" + "type": "object", + "required": [ + "rules" + ], + "language": { + "nodejs": { + "requiredOutputs": [ + "enforcementVersion", + "rules" + ] + } + } }, - "gcp:iam/DenyPolicyRuleDenyRuleDenialCondition:DenyPolicyRuleDenyRuleDenialCondition": { + "gcp:iam/PrincipalAccessBoundaryPolicyDetailsRule:PrincipalAccessBoundaryPolicyDetailsRule": { "properties": { "description": { "type": "string", - "description": "Description of the expression. This is a longer text which describes the expression,\ne.g. when hovered over it in a UI.\n" - }, - "expression": { - "type": "string", - "description": "Textual representation of an expression in Common Expression Language syntax.\n" + "description": "The description of the principal access boundary policy rule. Must be less than or equal to 256 characters.\n" }, - "location": { + "effect": { "type": "string", - "description": "String indicating the location of the expression for error reporting,\ne.g. a file name and a position in the file.\n\n- - -\n" + "description": "The access relationship of principals to the resources in this rule.\nPossible values: ALLOW\n" }, - "title": { - "type": "string", - "description": "Title for the expression, i.e. a short string describing its purpose.\nThis can be used e.g. in UIs which allow to enter the expression.\n" + "resources": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Cloud Resource Manager resources. The resource\nand all the descendants are included. The number of resources in a policy\nis limited to 500 across all rules.\nThe following resource types are supported:\n* Organizations, such as `//cloudresourcemanager.googleapis.com/organizations/123`.\n* Folders, such as `//cloudresourcemanager.googleapis.com/folders/123`.\n* Projects, such as `//cloudresourcemanager.googleapis.com/projects/123`\nor `//cloudresourcemanager.googleapis.com/projects/my-project-id`.\n" } }, "type": "object", "required": [ - "expression" + "effect", + "resources" ] }, "gcp:iam/WorkforcePoolAccessRestrictions:WorkforcePoolAccessRestrictions": { @@ -95345,7 +96753,7 @@ }, "clientSecret": { "type": "string", - "description": "The client secret for the Oauth config.\n" + "description": "The client secret for the Oauth config.\n\n- - -\n" } }, "type": "object", @@ -109753,7 +111161,7 @@ "properties": { "updateInfo": { "$ref": "#/types/gcp:redis/ClusterStateInfoUpdateInfo:ClusterStateInfoUpdateInfo", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" } }, "type": "object" @@ -113227,11 +114635,11 @@ "properties": { "overrides": { "$ref": "#/types/gcp:spanner/InstanceAutoscalingConfigAsymmetricAutoscalingOptionOverrides:InstanceAutoscalingConfigAsymmetricAutoscalingOptionOverrides", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "replicaSelection": { "$ref": "#/types/gcp:spanner/InstanceAutoscalingConfigAsymmetricAutoscalingOptionReplicaSelection:InstanceAutoscalingConfigAsymmetricAutoscalingOptionReplicaSelection", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" } }, "type": "object", @@ -113244,7 +114652,7 @@ "properties": { "autoscalingLimits": { "$ref": "#/types/gcp:spanner/InstanceAutoscalingConfigAsymmetricAutoscalingOptionOverridesAutoscalingLimits:InstanceAutoscalingConfigAsymmetricAutoscalingOptionOverridesAutoscalingLimits", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" } }, "type": "object", @@ -113377,6 +114785,31 @@ "title" ] }, + "gcp:spanner/getDatabaseEncryptionConfig:getDatabaseEncryptionConfig": { + "properties": { + "kmsKeyName": { + "type": "string", + "description": "Fully qualified name of the KMS key to use to encrypt this database. This key must exist\nin the same location as the Spanner Database.\n" + }, + "kmsKeyNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Fully qualified name of the KMS keys to use to encrypt this database. The keys must exist\nin the same locations as the Spanner Database.\n" + } + }, + "type": "object", + "required": [ + "kmsKeyName", + "kmsKeyNames" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:spanner/getInstanceAutoscalingConfig:getInstanceAutoscalingConfig": { "properties": { "asymmetricAutoscalingOptions": { @@ -113420,14 +114853,14 @@ "items": { "$ref": "#/types/gcp:spanner/getInstanceAutoscalingConfigAsymmetricAutoscalingOptionOverride:getInstanceAutoscalingConfigAsymmetricAutoscalingOptionOverride" }, - "description": "A nested object resource\n" + "description": "A nested object resource.\n" }, "replicaSelections": { "type": "array", "items": { "$ref": "#/types/gcp:spanner/getInstanceAutoscalingConfigAsymmetricAutoscalingOptionReplicaSelection:getInstanceAutoscalingConfigAsymmetricAutoscalingOptionReplicaSelection" }, - "description": "A nested object resource\n" + "description": "A nested object resource.\n" } }, "type": "object", @@ -113448,7 +114881,7 @@ "items": { "$ref": "#/types/gcp:spanner/getInstanceAutoscalingConfigAsymmetricAutoscalingOptionOverrideAutoscalingLimit:getInstanceAutoscalingConfigAsymmetricAutoscalingOptionOverrideAutoscalingLimit" }, - "description": "A nested object resource\n" + "description": "A nested object resource.\n" } }, "type": "object", @@ -113618,6 +115051,10 @@ "description": "PEM representation of the trusted CA's x509\ncertificate.\n", "willReplaceOnChanges": true }, + "cascadableReplica": { + "type": "boolean", + "description": "Specifies if the replica is a cascadable replica. If true, instance must be in different region from primary.\n\n\u003e **NOTE:** Only supported for SQL Server database.\n" + }, "clientCertificate": { "type": "string", "description": "PEM representation of the replica's x509\ncertificate.\n", @@ -114382,6 +115819,10 @@ "type": "string", "description": "PEM representation of the trusted CA's x509 certificate.\n" }, + "cascadableReplica": { + "type": "boolean", + "description": "Specifies if a SQL Server replica is a cascadable replica. A cascadable replica is a SQL Server cross region replica that supports replica(s) under it.\n" + }, "clientCertificate": { "type": "string", "description": "PEM representation of the replica's x509 certificate.\n" @@ -114426,6 +115867,7 @@ "type": "object", "required": [ "caCertificate", + "cascadableReplica", "clientCertificate", "clientKey", "connectRetryInterval", @@ -115215,6 +116657,13 @@ }, "description": "The configuration for replication.\n" }, + "replicaNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The replicas of the instance.\n" + }, "restoreBackupContexts": { "type": "array", "items": { @@ -115268,6 +116717,7 @@ "publicIpAddress", "region", "replicaConfigurations", + "replicaNames", "restoreBackupContexts", "rootPassword", "selfLink", @@ -115351,6 +116801,10 @@ "type": "string", "description": "PEM representation of the trusted CA's x509 certificate.\n" }, + "cascadableReplica": { + "type": "boolean", + "description": "Specifies if a SQL Server replica is a cascadable replica. A cascadable replica is a SQL Server cross region replica that supports replica(s) under it.\n" + }, "clientCertificate": { "type": "string", "description": "PEM representation of the replica's x509 certificate.\n" @@ -115395,6 +116849,7 @@ "type": "object", "required": [ "caCertificate", + "cascadableReplica", "clientCertificate", "clientKey", "connectRetryInterval", @@ -116670,7 +118125,7 @@ }, "storageFilters": { "$ref": "#/types/gcp:storage/InsightsReportConfigObjectMetadataReportOptionsStorageFilters:InsightsReportConfigObjectMetadataReportOptionsStorageFilters", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" } }, "type": "object", @@ -119973,6 +121428,56 @@ "title" ] }, + "gcp:vertex/AiEndpointPredictRequestResponseLoggingConfig:AiEndpointPredictRequestResponseLoggingConfig": { + "properties": { + "bigqueryDestination": { + "$ref": "#/types/gcp:vertex/AiEndpointPredictRequestResponseLoggingConfigBigqueryDestination:AiEndpointPredictRequestResponseLoggingConfigBigqueryDestination", + "description": "BigQuery table for logging. If only given a project, a new dataset will be created with name `logging_\u003cendpoint-display-name\u003e_\u003cendpoint-id\u003e` where will be made BigQuery-dataset-name compatible (e.g. most special characters will become underscores). If no table name is given, a new table will be created with name `request_response_logging`\nStructure is documented below.\n" + }, + "enabled": { + "type": "boolean", + "description": "If logging is enabled or not.\n" + }, + "samplingRate": { + "type": "number", + "description": "Percentage of requests to be logged, expressed as a fraction in range(0,1]\n" + } + }, + "type": "object" + }, + "gcp:vertex/AiEndpointPredictRequestResponseLoggingConfigBigqueryDestination:AiEndpointPredictRequestResponseLoggingConfigBigqueryDestination": { + "properties": { + "outputUri": { + "type": "string", + "description": "BigQuery URI to a project or table, up to 2000 characters long. When only the project is specified, the Dataset and Table is created. When the full table reference is specified, the Dataset must exist and table must not exist. Accepted forms: - BigQuery path. For example: `bq://projectId` or `bq://projectId.bqDatasetId` or `bq://projectId.bqDatasetId.bqTableId`.\n" + } + }, + "type": "object" + }, + "gcp:vertex/AiEndpointPrivateServiceConnectConfig:AiEndpointPrivateServiceConnectConfig": { + "properties": { + "enablePrivateServiceConnect": { + "type": "boolean", + "description": "Required. If true, expose the IndexEndpoint via private service connect.\n", + "willReplaceOnChanges": true + }, + "enableSecurePrivateServiceConnect": { + "type": "boolean", + "description": "If set to true, enable secure private service connect with IAM authorization. Otherwise, private service connect will be done without authorization. Note latency will be slightly increased if authorization is enabled.\n" + }, + "projectAllowlists": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of Projects from which the forwarding rule will target the service attachment.\n" + } + }, + "type": "object", + "required": [ + "enablePrivateServiceConnect" + ] + }, "gcp:vertex/AiFeatureGroupBigQuery:AiFeatureGroupBigQuery": { "properties": { "bigQuerySource": { @@ -123405,6 +124910,9 @@ "dataprocCustomEndpoint": { "type": "string" }, + "dataprocGdcCustomEndpoint": { + "type": "string" + }, "dataprocMetastoreCustomEndpoint": { "type": "string" }, @@ -123507,6 +125015,9 @@ "iam2CustomEndpoint": { "type": "string" }, + "iam3CustomEndpoint": { + "type": "string" + }, "iamBetaCustomEndpoint": { "type": "string" }, @@ -123948,6 +125459,9 @@ "dataprocCustomEndpoint": { "type": "string" }, + "dataprocGdcCustomEndpoint": { + "type": "string" + }, "dataprocMetastoreCustomEndpoint": { "type": "string" }, @@ -124050,6 +125564,9 @@ "iam2CustomEndpoint": { "type": "string" }, + "iam3CustomEndpoint": { + "type": "string" + }, "iamBetaCustomEndpoint": { "type": "string" }, @@ -125833,7 +127350,7 @@ } }, "gcp:activedirectory/domain:Domain": { - "description": "Creates a Microsoft AD domain\n\n\nTo get more information about Domain, see:\n\n* [API documentation](https://cloud.google.com/managed-microsoft-ad/reference/rest/v1/projects.locations.global.domains)\n* How-to Guides\n * [Managed Microsoft Active Directory Quickstart](https://cloud.google.com/managed-microsoft-ad/docs/quickstarts)\n\n## Example Usage\n\n### Active Directory Domain Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst ad_domain = new gcp.activedirectory.Domain(\"ad-domain\", {\n domainName: \"tfgen.org.com\",\n locations: [\"us-central1\"],\n reservedIpRange: \"192.168.255.0/24\",\n deletionProtection: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nad_domain = gcp.activedirectory.Domain(\"ad-domain\",\n domain_name=\"tfgen.org.com\",\n locations=[\"us-central1\"],\n reserved_ip_range=\"192.168.255.0/24\",\n deletion_protection=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ad_domain = new Gcp.ActiveDirectory.Domain(\"ad-domain\", new()\n {\n DomainName = \"tfgen.org.com\",\n Locations = new[]\n {\n \"us-central1\",\n },\n ReservedIpRange = \"192.168.255.0/24\",\n DeletionProtection = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/activedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := activedirectory.NewDomain(ctx, \"ad-domain\", \u0026activedirectory.DomainArgs{\n\t\t\tDomainName: pulumi.String(\"tfgen.org.com\"),\n\t\t\tLocations: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-central1\"),\n\t\t\t},\n\t\t\tReservedIpRange: pulumi.String(\"192.168.255.0/24\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\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.gcp.activedirectory.Domain;\nimport com.pulumi.gcp.activedirectory.DomainArgs;\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 ad_domain = new Domain(\"ad-domain\", DomainArgs.builder()\n .domainName(\"tfgen.org.com\")\n .locations(\"us-central1\")\n .reservedIpRange(\"192.168.255.0/24\")\n .deletionProtection(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ad-domain:\n type: gcp:activedirectory:Domain\n properties:\n domainName: tfgen.org.com\n locations:\n - us-central1\n reservedIpRange: 192.168.255.0/24\n deletionProtection: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDomain can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Domain can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:activedirectory/domain:Domain default {{name}}\n```\n\n", + "description": "Creates a Microsoft AD domain\n\n\nTo get more information about Domain, see:\n\n* [API documentation](https://cloud.google.com/managed-microsoft-ad/reference/rest/v1/projects.locations.global.domains)\n* How-to Guides\n * [Managed Microsoft Active Directory Quickstart](https://cloud.google.com/managed-microsoft-ad/docs/quickstarts)\n\n## Example Usage\n\n### Active Directory Domain Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst ad_domain = new gcp.activedirectory.Domain(\"ad-domain\", {\n domainName: \"tfgen.org.com\",\n locations: [\"us-central1\"],\n reservedIpRange: \"192.168.255.0/24\",\n deletionProtection: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nad_domain = gcp.activedirectory.Domain(\"ad-domain\",\n domain_name=\"tfgen.org.com\",\n locations=[\"us-central1\"],\n reserved_ip_range=\"192.168.255.0/24\",\n deletion_protection=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ad_domain = new Gcp.ActiveDirectory.Domain(\"ad-domain\", new()\n {\n DomainName = \"tfgen.org.com\",\n Locations = new[]\n {\n \"us-central1\",\n },\n ReservedIpRange = \"192.168.255.0/24\",\n DeletionProtection = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/activedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := activedirectory.NewDomain(ctx, \"ad-domain\", \u0026activedirectory.DomainArgs{\n\t\t\tDomainName: pulumi.String(\"tfgen.org.com\"),\n\t\t\tLocations: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-central1\"),\n\t\t\t},\n\t\t\tReservedIpRange: pulumi.String(\"192.168.255.0/24\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\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.gcp.activedirectory.Domain;\nimport com.pulumi.gcp.activedirectory.DomainArgs;\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 ad_domain = new Domain(\"ad-domain\", DomainArgs.builder()\n .domainName(\"tfgen.org.com\")\n .locations(\"us-central1\")\n .reservedIpRange(\"192.168.255.0/24\")\n .deletionProtection(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n ad-domain:\n type: gcp:activedirectory:Domain\n properties:\n domainName: tfgen.org.com\n locations:\n - us-central1\n reservedIpRange: 192.168.255.0/24\n deletionProtection: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDomain can be imported using any of these accepted formats:\n\n* `{{project}}/{{name}}`\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Domain can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:activedirectory/domain:Domain default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:activedirectory/domain:Domain default \"{{project}} {{name}}\"\n```\n\n```sh\n$ pulumi import gcp:activedirectory/domain:Domain default {{name}}\n```\n\n", "properties": { "admin": { "type": "string", @@ -129172,6 +130689,125 @@ "type": "object" } }, + "gcp:apigee/api:Api": { + "description": "To get more information about API proxies see, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.apis)\n* How-to Guides\n * [API proxies](https://cloud.google.com/apigee/docs/resources)\n\n\n## Import\n\nAn API proxy can be imported using any of these accepted formats:\n\n* `{{org_id}}/apis/{{name}}`\n\n* `{{org_id}}/{{name}}`\n\nWhen using the `pulumi import` command, API proxy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:apigee/api:Api default {{org_id}}/apis/{{name}}\n```\n\n```sh\n$ pulumi import gcp:apigee/api:Api default {{org_id}}/{{name}}\n```\n\n", + "properties": { + "configBundle": { + "type": "string", + "description": "Path to the config zip bundle.\n\n- - -\n" + }, + "detectMd5hash": { + "type": "string" + }, + "latestRevisionId": { + "type": "string", + "description": "The id of the most recently created revision for this API proxy.\n" + }, + "md5hash": { + "type": "string", + "description": "(Computed) Base 64 MD5 hash of the uploaded data. It is speculative as remote does not return hash of the bundle. Remote changes are detected using returned last_modified timestamp.\n" + }, + "metaDatas": { + "type": "array", + "items": { + "$ref": "#/types/gcp:apigee/ApiMetaData:ApiMetaData" + }, + "description": "Metadata describing the API proxy.\nStructure is documented below.\n" + }, + "name": { + "type": "string", + "description": "The ID of the API proxy.\n" + }, + "orgId": { + "type": "string", + "description": "The Apigee Organization name associated with the Apigee instance.\n" + }, + "revisions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of revisions of this API proxy.\n" + } + }, + "required": [ + "configBundle", + "latestRevisionId", + "md5hash", + "metaDatas", + "name", + "orgId", + "revisions" + ], + "inputProperties": { + "configBundle": { + "type": "string", + "description": "Path to the config zip bundle.\n\n- - -\n" + }, + "detectMd5hash": { + "type": "string" + }, + "name": { + "type": "string", + "description": "The ID of the API proxy.\n", + "willReplaceOnChanges": true + }, + "orgId": { + "type": "string", + "description": "The Apigee Organization name associated with the Apigee instance.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "configBundle", + "orgId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Api resources.\n", + "properties": { + "configBundle": { + "type": "string", + "description": "Path to the config zip bundle.\n\n- - -\n" + }, + "detectMd5hash": { + "type": "string" + }, + "latestRevisionId": { + "type": "string", + "description": "The id of the most recently created revision for this API proxy.\n" + }, + "md5hash": { + "type": "string", + "description": "(Computed) Base 64 MD5 hash of the uploaded data. It is speculative as remote does not return hash of the bundle. Remote changes are detected using returned last_modified timestamp.\n" + }, + "metaDatas": { + "type": "array", + "items": { + "$ref": "#/types/gcp:apigee/ApiMetaData:ApiMetaData" + }, + "description": "Metadata describing the API proxy.\nStructure is documented below.\n" + }, + "name": { + "type": "string", + "description": "The ID of the API proxy.\n", + "willReplaceOnChanges": true + }, + "orgId": { + "type": "string", + "description": "The Apigee Organization name associated with the Apigee instance.\n", + "willReplaceOnChanges": true + }, + "revisions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of revisions of this API proxy.\n" + } + }, + "type": "object" + } + }, "gcp:apigee/appGroup:AppGroup": { "description": "An `AppGroup` in Apigee.\n\n\nTo get more information about AppGroup, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.appgroups)\n* How-to Guides\n * [Organizing client app ownership](https://cloud.google.com/apigee/docs/api-platform/publish/organizing-client-app-ownership)\n\n## Example Usage\n\n### Apigee App Group Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst current = gcp.organizations.getClientConfig({});\nconst apigeeNetwork = new gcp.compute.Network(\"apigee_network\", {name: \"apigee-network\"});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigee_range\", {\n name: \"apigee-range\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: apigeeNetwork.id,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigee_vpc_connection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n});\nconst apigeeOrg = new gcp.apigee.Organization(\"apigee_org\", {\n analyticsRegion: \"us-central1\",\n projectId: current.then(current =\u003e current.project),\n authorizedNetwork: apigeeNetwork.id,\n}, {\n dependsOn: [apigeeVpcConnection],\n});\nconst apigeeInstance = new gcp.apigee.Instance(\"apigee_instance\", {\n name: \"instance\",\n location: \"us-central1\",\n orgId: apigeeOrg.id,\n peeringCidrRange: \"SLASH_22\",\n});\nconst apigeeAppGroup = new gcp.apigee.AppGroup(\"apigee_app_group\", {\n name: \"my-app-group\",\n displayName: \"Test app group\",\n channelId: \"storefront\",\n channelUri: \"https://my-dev-portal.org/groups/my-group\",\n status: \"active\",\n orgId: apigeeOrg.id,\n}, {\n dependsOn: [apigeeInstance],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncurrent = gcp.organizations.get_client_config()\napigee_network = gcp.compute.Network(\"apigee_network\", name=\"apigee-network\")\napigee_range = gcp.compute.GlobalAddress(\"apigee_range\",\n name=\"apigee-range\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=apigee_network.id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigee_vpc_connection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name])\napigee_org = gcp.apigee.Organization(\"apigee_org\",\n analytics_region=\"us-central1\",\n project_id=current.project,\n authorized_network=apigee_network.id,\n opts = pulumi.ResourceOptions(depends_on=[apigee_vpc_connection]))\napigee_instance = gcp.apigee.Instance(\"apigee_instance\",\n name=\"instance\",\n location=\"us-central1\",\n org_id=apigee_org.id,\n peering_cidr_range=\"SLASH_22\")\napigee_app_group = gcp.apigee.AppGroup(\"apigee_app_group\",\n name=\"my-app-group\",\n display_name=\"Test app group\",\n channel_id=\"storefront\",\n channel_uri=\"https://my-dev-portal.org/groups/my-group\",\n status=\"active\",\n org_id=apigee_org.id,\n opts = pulumi.ResourceOptions(depends_on=[apigee_instance]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var current = Gcp.Organizations.GetClientConfig.Invoke();\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigee_network\", new()\n {\n Name = \"apigee-network\",\n });\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigee_range\", new()\n {\n Name = \"apigee-range\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = apigeeNetwork.Id,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigee_vpc_connection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n });\n\n var apigeeOrg = new Gcp.Apigee.Organization(\"apigee_org\", new()\n {\n AnalyticsRegion = \"us-central1\",\n ProjectId = current.Apply(getClientConfigResult =\u003e getClientConfigResult.Project),\n AuthorizedNetwork = apigeeNetwork.Id,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n apigeeVpcConnection,\n },\n });\n\n var apigeeInstance = new Gcp.Apigee.Instance(\"apigee_instance\", new()\n {\n Name = \"instance\",\n Location = \"us-central1\",\n OrgId = apigeeOrg.Id,\n PeeringCidrRange = \"SLASH_22\",\n });\n\n var apigeeAppGroup = new Gcp.Apigee.AppGroup(\"apigee_app_group\", new()\n {\n Name = \"my-app-group\",\n DisplayName = \"Test app group\",\n ChannelId = \"storefront\",\n ChannelUri = \"https://my-dev-portal.org/groups/my-group\",\n Status = \"active\",\n OrgId = apigeeOrg.Id,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n apigeeInstance,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcurrent, err := organizations.GetClientConfig(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigee_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"apigee-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigee_range\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"apigee-range\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigee_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeOrg, err := apigee.NewOrganization(ctx, \"apigee_org\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tProjectId: pulumi.String(current.Project),\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeInstance, err := apigee.NewInstance(ctx, \"apigee_instance\", \u0026apigee.InstanceArgs{\n\t\t\tName: pulumi.String(\"instance\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tOrgId: apigeeOrg.ID(),\n\t\t\tPeeringCidrRange: pulumi.String(\"SLASH_22\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigee.NewAppGroup(ctx, \"apigee_app_group\", \u0026apigee.AppGroupArgs{\n\t\t\tName: pulumi.String(\"my-app-group\"),\n\t\t\tDisplayName: pulumi.String(\"Test app group\"),\n\t\t\tChannelId: pulumi.String(\"storefront\"),\n\t\t\tChannelUri: pulumi.String(\"https://my-dev-portal.org/groups/my-group\"),\n\t\t\tStatus: pulumi.String(\"active\"),\n\t\t\tOrgId: apigeeOrg.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeInstance,\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.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\nimport com.pulumi.gcp.apigee.Instance;\nimport com.pulumi.gcp.apigee.InstanceArgs;\nimport com.pulumi.gcp.apigee.AppGroup;\nimport com.pulumi.gcp.apigee.AppGroupArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var current = OrganizationsFunctions.getClientConfig();\n\n var apigeeNetwork = new Network(\"apigeeNetwork\", NetworkArgs.builder()\n .name(\"apigee-network\")\n .build());\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder()\n .name(\"apigee-range\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(apigeeNetwork.id())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder()\n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build());\n\n var apigeeOrg = new Organization(\"apigeeOrg\", OrganizationArgs.builder()\n .analyticsRegion(\"us-central1\")\n .projectId(current.applyValue(getClientConfigResult -\u003e getClientConfigResult.project()))\n .authorizedNetwork(apigeeNetwork.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn(apigeeVpcConnection)\n .build());\n\n var apigeeInstance = new Instance(\"apigeeInstance\", InstanceArgs.builder()\n .name(\"instance\")\n .location(\"us-central1\")\n .orgId(apigeeOrg.id())\n .peeringCidrRange(\"SLASH_22\")\n .build());\n\n var apigeeAppGroup = new AppGroup(\"apigeeAppGroup\", AppGroupArgs.builder()\n .name(\"my-app-group\")\n .displayName(\"Test app group\")\n .channelId(\"storefront\")\n .channelUri(\"https://my-dev-portal.org/groups/my-group\")\n .status(\"active\")\n .orgId(apigeeOrg.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn(apigeeInstance)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n apigeeNetwork:\n type: gcp:compute:Network\n name: apigee_network\n properties:\n name: apigee-network\n apigeeRange:\n type: gcp:compute:GlobalAddress\n name: apigee_range\n properties:\n name: apigee-range\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${apigeeNetwork.id}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n name: apigee_vpc_connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n apigeeOrg:\n type: gcp:apigee:Organization\n name: apigee_org\n properties:\n analyticsRegion: us-central1\n projectId: ${current.project}\n authorizedNetwork: ${apigeeNetwork.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\n apigeeInstance:\n type: gcp:apigee:Instance\n name: apigee_instance\n properties:\n name: instance\n location: us-central1\n orgId: ${apigeeOrg.id}\n peeringCidrRange: SLASH_22\n apigeeAppGroup:\n type: gcp:apigee:AppGroup\n name: apigee_app_group\n properties:\n name: my-app-group\n displayName: Test app group\n channelId: storefront\n channelUri: https://my-dev-portal.org/groups/my-group\n status: active\n orgId: ${apigeeOrg.id}\n options:\n dependson:\n - ${apigeeInstance}\nvariables:\n current:\n fn::invoke:\n Function: gcp:organizations:getClientConfig\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Apigee App Group With Attributes\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst current = gcp.organizations.getClientConfig({});\nconst apigeeNetwork = new gcp.compute.Network(\"apigee_network\", {name: \"apigee-network\"});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigee_range\", {\n name: \"apigee-range\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: apigeeNetwork.id,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigee_vpc_connection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n});\nconst apigeeOrg = new gcp.apigee.Organization(\"apigee_org\", {\n analyticsRegion: \"us-central1\",\n projectId: current.then(current =\u003e current.project),\n authorizedNetwork: apigeeNetwork.id,\n}, {\n dependsOn: [apigeeVpcConnection],\n});\nconst apigeeInstance = new gcp.apigee.Instance(\"apigee_instance\", {\n name: \"instance\",\n location: \"us-central1\",\n orgId: apigeeOrg.id,\n peeringCidrRange: \"SLASH_22\",\n});\nconst apigeeAppGroup = new gcp.apigee.AppGroup(\"apigee_app_group\", {\n name: \"my-app-group\",\n displayName: \"Test app group\",\n channelId: \"storefront\",\n channelUri: \"https://my-dev-portal.org/groups/my-group\",\n status: \"active\",\n orgId: apigeeOrg.id,\n attributes: [\n {\n name: \"business_unit\",\n value: \"HR\",\n },\n {\n name: \"department\",\n value: \"payroll\",\n },\n ],\n}, {\n dependsOn: [apigeeInstance],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncurrent = gcp.organizations.get_client_config()\napigee_network = gcp.compute.Network(\"apigee_network\", name=\"apigee-network\")\napigee_range = gcp.compute.GlobalAddress(\"apigee_range\",\n name=\"apigee-range\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=apigee_network.id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigee_vpc_connection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name])\napigee_org = gcp.apigee.Organization(\"apigee_org\",\n analytics_region=\"us-central1\",\n project_id=current.project,\n authorized_network=apigee_network.id,\n opts = pulumi.ResourceOptions(depends_on=[apigee_vpc_connection]))\napigee_instance = gcp.apigee.Instance(\"apigee_instance\",\n name=\"instance\",\n location=\"us-central1\",\n org_id=apigee_org.id,\n peering_cidr_range=\"SLASH_22\")\napigee_app_group = gcp.apigee.AppGroup(\"apigee_app_group\",\n name=\"my-app-group\",\n display_name=\"Test app group\",\n channel_id=\"storefront\",\n channel_uri=\"https://my-dev-portal.org/groups/my-group\",\n status=\"active\",\n org_id=apigee_org.id,\n attributes=[\n {\n \"name\": \"business_unit\",\n \"value\": \"HR\",\n },\n {\n \"name\": \"department\",\n \"value\": \"payroll\",\n },\n ],\n opts = pulumi.ResourceOptions(depends_on=[apigee_instance]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var current = Gcp.Organizations.GetClientConfig.Invoke();\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigee_network\", new()\n {\n Name = \"apigee-network\",\n });\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigee_range\", new()\n {\n Name = \"apigee-range\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = apigeeNetwork.Id,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigee_vpc_connection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n });\n\n var apigeeOrg = new Gcp.Apigee.Organization(\"apigee_org\", new()\n {\n AnalyticsRegion = \"us-central1\",\n ProjectId = current.Apply(getClientConfigResult =\u003e getClientConfigResult.Project),\n AuthorizedNetwork = apigeeNetwork.Id,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n apigeeVpcConnection,\n },\n });\n\n var apigeeInstance = new Gcp.Apigee.Instance(\"apigee_instance\", new()\n {\n Name = \"instance\",\n Location = \"us-central1\",\n OrgId = apigeeOrg.Id,\n PeeringCidrRange = \"SLASH_22\",\n });\n\n var apigeeAppGroup = new Gcp.Apigee.AppGroup(\"apigee_app_group\", new()\n {\n Name = \"my-app-group\",\n DisplayName = \"Test app group\",\n ChannelId = \"storefront\",\n ChannelUri = \"https://my-dev-portal.org/groups/my-group\",\n Status = \"active\",\n OrgId = apigeeOrg.Id,\n Attributes = new[]\n {\n new Gcp.Apigee.Inputs.AppGroupAttributeArgs\n {\n Name = \"business_unit\",\n Value = \"HR\",\n },\n new Gcp.Apigee.Inputs.AppGroupAttributeArgs\n {\n Name = \"department\",\n Value = \"payroll\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n apigeeInstance,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcurrent, err := organizations.GetClientConfig(ctx, map[string]interface{}{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigee_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"apigee-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigee_range\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"apigee-range\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigee_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeOrg, err := apigee.NewOrganization(ctx, \"apigee_org\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tProjectId: pulumi.String(current.Project),\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeInstance, err := apigee.NewInstance(ctx, \"apigee_instance\", \u0026apigee.InstanceArgs{\n\t\t\tName: pulumi.String(\"instance\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tOrgId: apigeeOrg.ID(),\n\t\t\tPeeringCidrRange: pulumi.String(\"SLASH_22\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigee.NewAppGroup(ctx, \"apigee_app_group\", \u0026apigee.AppGroupArgs{\n\t\t\tName: pulumi.String(\"my-app-group\"),\n\t\t\tDisplayName: pulumi.String(\"Test app group\"),\n\t\t\tChannelId: pulumi.String(\"storefront\"),\n\t\t\tChannelUri: pulumi.String(\"https://my-dev-portal.org/groups/my-group\"),\n\t\t\tStatus: pulumi.String(\"active\"),\n\t\t\tOrgId: apigeeOrg.ID(),\n\t\t\tAttributes: apigee.AppGroupAttributeArray{\n\t\t\t\t\u0026apigee.AppGroupAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"business_unit\"),\n\t\t\t\t\tValue: pulumi.String(\"HR\"),\n\t\t\t\t},\n\t\t\t\t\u0026apigee.AppGroupAttributeArgs{\n\t\t\t\t\tName: pulumi.String(\"department\"),\n\t\t\t\t\tValue: pulumi.String(\"payroll\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeInstance,\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.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\nimport com.pulumi.gcp.apigee.Instance;\nimport com.pulumi.gcp.apigee.InstanceArgs;\nimport com.pulumi.gcp.apigee.AppGroup;\nimport com.pulumi.gcp.apigee.AppGroupArgs;\nimport com.pulumi.gcp.apigee.inputs.AppGroupAttributeArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var current = OrganizationsFunctions.getClientConfig();\n\n var apigeeNetwork = new Network(\"apigeeNetwork\", NetworkArgs.builder()\n .name(\"apigee-network\")\n .build());\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder()\n .name(\"apigee-range\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(apigeeNetwork.id())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder()\n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build());\n\n var apigeeOrg = new Organization(\"apigeeOrg\", OrganizationArgs.builder()\n .analyticsRegion(\"us-central1\")\n .projectId(current.applyValue(getClientConfigResult -\u003e getClientConfigResult.project()))\n .authorizedNetwork(apigeeNetwork.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn(apigeeVpcConnection)\n .build());\n\n var apigeeInstance = new Instance(\"apigeeInstance\", InstanceArgs.builder()\n .name(\"instance\")\n .location(\"us-central1\")\n .orgId(apigeeOrg.id())\n .peeringCidrRange(\"SLASH_22\")\n .build());\n\n var apigeeAppGroup = new AppGroup(\"apigeeAppGroup\", AppGroupArgs.builder()\n .name(\"my-app-group\")\n .displayName(\"Test app group\")\n .channelId(\"storefront\")\n .channelUri(\"https://my-dev-portal.org/groups/my-group\")\n .status(\"active\")\n .orgId(apigeeOrg.id())\n .attributes( \n AppGroupAttributeArgs.builder()\n .name(\"business_unit\")\n .value(\"HR\")\n .build(),\n AppGroupAttributeArgs.builder()\n .name(\"department\")\n .value(\"payroll\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(apigeeInstance)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n apigeeNetwork:\n type: gcp:compute:Network\n name: apigee_network\n properties:\n name: apigee-network\n apigeeRange:\n type: gcp:compute:GlobalAddress\n name: apigee_range\n properties:\n name: apigee-range\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${apigeeNetwork.id}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n name: apigee_vpc_connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n apigeeOrg:\n type: gcp:apigee:Organization\n name: apigee_org\n properties:\n analyticsRegion: us-central1\n projectId: ${current.project}\n authorizedNetwork: ${apigeeNetwork.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\n apigeeInstance:\n type: gcp:apigee:Instance\n name: apigee_instance\n properties:\n name: instance\n location: us-central1\n orgId: ${apigeeOrg.id}\n peeringCidrRange: SLASH_22\n apigeeAppGroup:\n type: gcp:apigee:AppGroup\n name: apigee_app_group\n properties:\n name: my-app-group\n displayName: Test app group\n channelId: storefront\n channelUri: https://my-dev-portal.org/groups/my-group\n status: active\n orgId: ${apigeeOrg.id}\n attributes:\n - name: business_unit\n value: HR\n - name: department\n value: payroll\n options:\n dependson:\n - ${apigeeInstance}\nvariables:\n current:\n fn::invoke:\n Function: gcp:organizations:getClientConfig\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAppGroup can be imported using any of these accepted formats:\n\n* `{{org_id}}/appgroups/{{name}}`\n\n* `{{org_id}}/{{name}}`\n\nWhen using the `pulumi import` command, AppGroup can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:apigee/appGroup:AppGroup default {{org_id}}/appgroups/{{name}}\n```\n\n```sh\n$ pulumi import gcp:apigee/appGroup:AppGroup default {{org_id}}/{{name}}\n```\n\n", "properties": { @@ -129819,8 +131455,7 @@ }, "refers": { "type": "string", - "description": "Required. The id of the resource to which this reference refers. Must be the id of a resource that exists in the parent environment and is of the given resourceType.\n", - "willReplaceOnChanges": true + "description": "Required. The id of the resource to which this reference refers. Must be the id of a resource that exists in the parent environment and is of the given resourceType.\n" }, "resourceType": { "type": "string", @@ -129853,8 +131488,7 @@ }, "refers": { "type": "string", - "description": "Required. The id of the resource to which this reference refers. Must be the id of a resource that exists in the parent environment and is of the given resourceType.\n", - "willReplaceOnChanges": true + "description": "Required. The id of the resource to which this reference refers. Must be the id of a resource that exists in the parent environment and is of the given resourceType.\n" }, "resourceType": { "type": "string", @@ -129926,13 +131560,11 @@ }, "description": { "type": "string", - "description": "Description of the environment.\n", - "willReplaceOnChanges": true + "description": "Description of the environment.\n" }, "displayName": { "type": "string", - "description": "Display name of the environment.\n", - "willReplaceOnChanges": true + "description": "Display name of the environment.\n" }, "forwardProxyUri": { "type": "string", @@ -129975,13 +131607,11 @@ }, "description": { "type": "string", - "description": "Description of the environment.\n", - "willReplaceOnChanges": true + "description": "Description of the environment.\n" }, "displayName": { "type": "string", - "description": "Display name of the environment.\n", - "willReplaceOnChanges": true + "description": "Display name of the environment.\n" }, "forwardProxyUri": { "type": "string", @@ -133911,7 +135541,7 @@ } }, "gcp:applicationintegration/authConfig:AuthConfig": { - "description": "The AuthConfig resource use to hold channels and connection config data.\n\n\nTo get more information about AuthConfig, see:\n\n* [API documentation](https://cloud.google.com/application-integration/docs/reference/rest/v1/projects.locations.authConfigs)\n* How-to Guides\n * [Manage authentication profiles](https://cloud.google.com/application-integration/docs/configure-authentication-profiles)\n * [Official Documentation](https://cloud.google.com/application-integration/docs/overview)\n\n## Example Usage\n\n### Integrations Auth Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst client = new gcp.applicationintegration.Client(\"client\", {location: \"us-west1\"});\nconst basicExample = new gcp.applicationintegration.AuthConfig(\"basic_example\", {\n location: \"us-west1\",\n displayName: \"test-authconfig\",\n description: \"Test auth config created via terraform\",\n decryptedCredential: {\n credentialType: \"USERNAME_AND_PASSWORD\",\n usernameAndPassword: {\n username: \"test-username\",\n password: \"test-password\",\n },\n },\n}, {\n dependsOn: [client],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nclient = gcp.applicationintegration.Client(\"client\", location=\"us-west1\")\nbasic_example = gcp.applicationintegration.AuthConfig(\"basic_example\",\n location=\"us-west1\",\n display_name=\"test-authconfig\",\n description=\"Test auth config created via terraform\",\n decrypted_credential={\n \"credential_type\": \"USERNAME_AND_PASSWORD\",\n \"username_and_password\": {\n \"username\": \"test-username\",\n \"password\": \"test-password\",\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[client]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var client = new Gcp.ApplicationIntegration.Client(\"client\", new()\n {\n Location = \"us-west1\",\n });\n\n var basicExample = new Gcp.ApplicationIntegration.AuthConfig(\"basic_example\", new()\n {\n Location = \"us-west1\",\n DisplayName = \"test-authconfig\",\n Description = \"Test auth config created via terraform\",\n DecryptedCredential = new Gcp.ApplicationIntegration.Inputs.AuthConfigDecryptedCredentialArgs\n {\n CredentialType = \"USERNAME_AND_PASSWORD\",\n UsernameAndPassword = new Gcp.ApplicationIntegration.Inputs.AuthConfigDecryptedCredentialUsernameAndPasswordArgs\n {\n Username = \"test-username\",\n Password = \"test-password\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n client,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tclient, err := applicationintegration.NewClient(ctx, \"client\", \u0026applicationintegration.ClientArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = applicationintegration.NewAuthConfig(ctx, \"basic_example\", \u0026applicationintegration.AuthConfigArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tDisplayName: pulumi.String(\"test-authconfig\"),\n\t\t\tDescription: pulumi.String(\"Test auth config created via terraform\"),\n\t\t\tDecryptedCredential: \u0026applicationintegration.AuthConfigDecryptedCredentialArgs{\n\t\t\t\tCredentialType: pulumi.String(\"USERNAME_AND_PASSWORD\"),\n\t\t\t\tUsernameAndPassword: \u0026applicationintegration.AuthConfigDecryptedCredentialUsernameAndPasswordArgs{\n\t\t\t\t\tUsername: pulumi.String(\"test-username\"),\n\t\t\t\t\tPassword: pulumi.String(\"test-password\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclient,\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.gcp.applicationintegration.Client;\nimport com.pulumi.gcp.applicationintegration.ClientArgs;\nimport com.pulumi.gcp.applicationintegration.AuthConfig;\nimport com.pulumi.gcp.applicationintegration.AuthConfigArgs;\nimport com.pulumi.gcp.applicationintegration.inputs.AuthConfigDecryptedCredentialArgs;\nimport com.pulumi.gcp.applicationintegration.inputs.AuthConfigDecryptedCredentialUsernameAndPasswordArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 client = new Client(\"client\", ClientArgs.builder()\n .location(\"us-west1\")\n .build());\n\n var basicExample = new AuthConfig(\"basicExample\", AuthConfigArgs.builder()\n .location(\"us-west1\")\n .displayName(\"test-authconfig\")\n .description(\"Test auth config created via terraform\")\n .decryptedCredential(AuthConfigDecryptedCredentialArgs.builder()\n .credentialType(\"USERNAME_AND_PASSWORD\")\n .usernameAndPassword(AuthConfigDecryptedCredentialUsernameAndPasswordArgs.builder()\n .username(\"test-username\")\n .password(\"test-password\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(client)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n client:\n type: gcp:applicationintegration:Client\n properties:\n location: us-west1\n basicExample:\n type: gcp:applicationintegration:AuthConfig\n name: basic_example\n properties:\n location: us-west1\n displayName: test-authconfig\n description: Test auth config created via terraform\n decryptedCredential:\n credentialType: USERNAME_AND_PASSWORD\n usernameAndPassword:\n username: test-username\n password: test-password\n options:\n dependson:\n - ${client}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAuthConfig can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, AuthConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:applicationintegration/authConfig:AuthConfig default {{name}}\n```\n\n", + "description": "The AuthConfig resource use to hold channels and connection config data.\n\n\nTo get more information about AuthConfig, see:\n\n* [API documentation](https://cloud.google.com/application-integration/docs/reference/rest/v1/projects.locations.authConfigs)\n* How-to Guides\n * [Manage authentication profiles](https://cloud.google.com/application-integration/docs/configure-authentication-profiles)\n * [Official Documentation](https://cloud.google.com/application-integration/docs/overview)\n\n## Example Usage\n\n### Integrations Auth Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst client = new gcp.applicationintegration.Client(\"client\", {location: \"us-west1\"});\nconst basicExample = new gcp.applicationintegration.AuthConfig(\"basic_example\", {\n location: \"us-west1\",\n displayName: \"test-authconfig\",\n description: \"Test auth config created via terraform\",\n decryptedCredential: {\n credentialType: \"USERNAME_AND_PASSWORD\",\n usernameAndPassword: {\n username: \"test-username\",\n password: \"test-password\",\n },\n },\n}, {\n dependsOn: [client],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nclient = gcp.applicationintegration.Client(\"client\", location=\"us-west1\")\nbasic_example = gcp.applicationintegration.AuthConfig(\"basic_example\",\n location=\"us-west1\",\n display_name=\"test-authconfig\",\n description=\"Test auth config created via terraform\",\n decrypted_credential={\n \"credential_type\": \"USERNAME_AND_PASSWORD\",\n \"username_and_password\": {\n \"username\": \"test-username\",\n \"password\": \"test-password\",\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[client]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var client = new Gcp.ApplicationIntegration.Client(\"client\", new()\n {\n Location = \"us-west1\",\n });\n\n var basicExample = new Gcp.ApplicationIntegration.AuthConfig(\"basic_example\", new()\n {\n Location = \"us-west1\",\n DisplayName = \"test-authconfig\",\n Description = \"Test auth config created via terraform\",\n DecryptedCredential = new Gcp.ApplicationIntegration.Inputs.AuthConfigDecryptedCredentialArgs\n {\n CredentialType = \"USERNAME_AND_PASSWORD\",\n UsernameAndPassword = new Gcp.ApplicationIntegration.Inputs.AuthConfigDecryptedCredentialUsernameAndPasswordArgs\n {\n Username = \"test-username\",\n Password = \"test-password\",\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n client,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/applicationintegration\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tclient, err := applicationintegration.NewClient(ctx, \"client\", \u0026applicationintegration.ClientArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = applicationintegration.NewAuthConfig(ctx, \"basic_example\", \u0026applicationintegration.AuthConfigArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tDisplayName: pulumi.String(\"test-authconfig\"),\n\t\t\tDescription: pulumi.String(\"Test auth config created via terraform\"),\n\t\t\tDecryptedCredential: \u0026applicationintegration.AuthConfigDecryptedCredentialArgs{\n\t\t\t\tCredentialType: pulumi.String(\"USERNAME_AND_PASSWORD\"),\n\t\t\t\tUsernameAndPassword: \u0026applicationintegration.AuthConfigDecryptedCredentialUsernameAndPasswordArgs{\n\t\t\t\t\tUsername: pulumi.String(\"test-username\"),\n\t\t\t\t\tPassword: pulumi.String(\"test-password\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclient,\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.gcp.applicationintegration.Client;\nimport com.pulumi.gcp.applicationintegration.ClientArgs;\nimport com.pulumi.gcp.applicationintegration.AuthConfig;\nimport com.pulumi.gcp.applicationintegration.AuthConfigArgs;\nimport com.pulumi.gcp.applicationintegration.inputs.AuthConfigDecryptedCredentialArgs;\nimport com.pulumi.gcp.applicationintegration.inputs.AuthConfigDecryptedCredentialUsernameAndPasswordArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 client = new Client(\"client\", ClientArgs.builder()\n .location(\"us-west1\")\n .build());\n\n var basicExample = new AuthConfig(\"basicExample\", AuthConfigArgs.builder()\n .location(\"us-west1\")\n .displayName(\"test-authconfig\")\n .description(\"Test auth config created via terraform\")\n .decryptedCredential(AuthConfigDecryptedCredentialArgs.builder()\n .credentialType(\"USERNAME_AND_PASSWORD\")\n .usernameAndPassword(AuthConfigDecryptedCredentialUsernameAndPasswordArgs.builder()\n .username(\"test-username\")\n .password(\"test-password\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(client)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n client:\n type: gcp:applicationintegration:Client\n properties:\n location: us-west1\n basicExample:\n type: gcp:applicationintegration:AuthConfig\n name: basic_example\n properties:\n location: us-west1\n displayName: test-authconfig\n description: Test auth config created via terraform\n decryptedCredential:\n credentialType: USERNAME_AND_PASSWORD\n usernameAndPassword:\n username: test-username\n password: test-password\n options:\n dependson:\n - ${client}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAuthConfig can be imported using any of these accepted formats:\n\n* `{{project}}/{{name}}`\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, AuthConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:applicationintegration/authConfig:AuthConfig default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:applicationintegration/authConfig:AuthConfig default \"{{project}} {{name}}\"\n```\n\n```sh\n$ pulumi import gcp:applicationintegration/authConfig:AuthConfig default {{name}}\n```\n\n", "properties": { "certificateId": { "type": "string", @@ -135302,8 +136932,348 @@ "type": "object" } }, + "gcp:backupdisasterrecovery/backupPlan:BackupPlan": { + "description": "## Example Usage\n\n### Backup Dr Backup Plan Simple\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myBackupVault = new gcp.backupdisasterrecovery.BackupVault(\"my_backup_vault\", {\n location: \"us-central1\",\n backupVaultId: \"bv-bp-test\",\n backupMinimumEnforcedRetentionDuration: \"100000s\",\n});\nconst my_backup_plan_1 = new gcp.backupdisasterrecovery.BackupPlan(\"my-backup-plan-1\", {\n location: \"us-central1\",\n backupPlanId: \"backup-plan-simple-test\",\n resourceType: \"compute.googleapis.com/Instance\",\n backupVault: myBackupVault.id,\n backupRules: [{\n ruleId: \"rule-1\",\n backupRetentionDays: 5,\n standardSchedule: {\n recurrenceType: \"HOURLY\",\n hourlyFrequency: 6,\n timeZone: \"UTC\",\n backupWindow: {\n startHourOfDay: 0,\n endHourOfDay: 24,\n },\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_backup_vault = gcp.backupdisasterrecovery.BackupVault(\"my_backup_vault\",\n location=\"us-central1\",\n backup_vault_id=\"bv-bp-test\",\n backup_minimum_enforced_retention_duration=\"100000s\")\nmy_backup_plan_1 = gcp.backupdisasterrecovery.BackupPlan(\"my-backup-plan-1\",\n location=\"us-central1\",\n backup_plan_id=\"backup-plan-simple-test\",\n resource_type=\"compute.googleapis.com/Instance\",\n backup_vault=my_backup_vault.id,\n backup_rules=[{\n \"rule_id\": \"rule-1\",\n \"backup_retention_days\": 5,\n \"standard_schedule\": {\n \"recurrence_type\": \"HOURLY\",\n \"hourly_frequency\": 6,\n \"time_zone\": \"UTC\",\n \"backup_window\": {\n \"start_hour_of_day\": 0,\n \"end_hour_of_day\": 24,\n },\n },\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myBackupVault = new Gcp.BackupDisasterRecovery.BackupVault(\"my_backup_vault\", new()\n {\n Location = \"us-central1\",\n BackupVaultId = \"bv-bp-test\",\n BackupMinimumEnforcedRetentionDuration = \"100000s\",\n });\n\n var my_backup_plan_1 = new Gcp.BackupDisasterRecovery.BackupPlan(\"my-backup-plan-1\", new()\n {\n Location = \"us-central1\",\n BackupPlanId = \"backup-plan-simple-test\",\n ResourceType = \"compute.googleapis.com/Instance\",\n BackupVault = myBackupVault.Id,\n BackupRules = new[]\n {\n new Gcp.BackupDisasterRecovery.Inputs.BackupPlanBackupRuleArgs\n {\n RuleId = \"rule-1\",\n BackupRetentionDays = 5,\n StandardSchedule = new Gcp.BackupDisasterRecovery.Inputs.BackupPlanBackupRuleStandardScheduleArgs\n {\n RecurrenceType = \"HOURLY\",\n HourlyFrequency = 6,\n TimeZone = \"UTC\",\n BackupWindow = new Gcp.BackupDisasterRecovery.Inputs.BackupPlanBackupRuleStandardScheduleBackupWindowArgs\n {\n StartHourOfDay = 0,\n EndHourOfDay = 24,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/backupdisasterrecovery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyBackupVault, err := backupdisasterrecovery.NewBackupVault(ctx, \"my_backup_vault\", \u0026backupdisasterrecovery.BackupVaultArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupVaultId: pulumi.String(\"bv-bp-test\"),\n\t\t\tBackupMinimumEnforcedRetentionDuration: pulumi.String(\"100000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = backupdisasterrecovery.NewBackupPlan(ctx, \"my-backup-plan-1\", \u0026backupdisasterrecovery.BackupPlanArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlanId: pulumi.String(\"backup-plan-simple-test\"),\n\t\t\tResourceType: pulumi.String(\"compute.googleapis.com/Instance\"),\n\t\t\tBackupVault: myBackupVault.ID(),\n\t\t\tBackupRules: backupdisasterrecovery.BackupPlanBackupRuleArray{\n\t\t\t\t\u0026backupdisasterrecovery.BackupPlanBackupRuleArgs{\n\t\t\t\t\tRuleId: pulumi.String(\"rule-1\"),\n\t\t\t\t\tBackupRetentionDays: pulumi.Int(5),\n\t\t\t\t\tStandardSchedule: \u0026backupdisasterrecovery.BackupPlanBackupRuleStandardScheduleArgs{\n\t\t\t\t\t\tRecurrenceType: pulumi.String(\"HOURLY\"),\n\t\t\t\t\t\tHourlyFrequency: pulumi.Int(6),\n\t\t\t\t\t\tTimeZone: pulumi.String(\"UTC\"),\n\t\t\t\t\t\tBackupWindow: \u0026backupdisasterrecovery.BackupPlanBackupRuleStandardScheduleBackupWindowArgs{\n\t\t\t\t\t\t\tStartHourOfDay: pulumi.Int(0),\n\t\t\t\t\t\t\tEndHourOfDay: pulumi.Int(24),\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\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.gcp.backupdisasterrecovery.BackupVault;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVaultArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupPlan;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupPlanArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.BackupPlanBackupRuleArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.BackupPlanBackupRuleStandardScheduleArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.BackupPlanBackupRuleStandardScheduleBackupWindowArgs;\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 myBackupVault = new BackupVault(\"myBackupVault\", BackupVaultArgs.builder()\n .location(\"us-central1\")\n .backupVaultId(\"bv-bp-test\")\n .backupMinimumEnforcedRetentionDuration(\"100000s\")\n .build());\n\n var my_backup_plan_1 = new BackupPlan(\"my-backup-plan-1\", BackupPlanArgs.builder()\n .location(\"us-central1\")\n .backupPlanId(\"backup-plan-simple-test\")\n .resourceType(\"compute.googleapis.com/Instance\")\n .backupVault(myBackupVault.id())\n .backupRules(BackupPlanBackupRuleArgs.builder()\n .ruleId(\"rule-1\")\n .backupRetentionDays(5)\n .standardSchedule(BackupPlanBackupRuleStandardScheduleArgs.builder()\n .recurrenceType(\"HOURLY\")\n .hourlyFrequency(6)\n .timeZone(\"UTC\")\n .backupWindow(BackupPlanBackupRuleStandardScheduleBackupWindowArgs.builder()\n .startHourOfDay(0)\n .endHourOfDay(24)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myBackupVault:\n type: gcp:backupdisasterrecovery:BackupVault\n name: my_backup_vault\n properties:\n location: us-central1\n backupVaultId: bv-bp-test\n backupMinimumEnforcedRetentionDuration: 100000s\n my-backup-plan-1:\n type: gcp:backupdisasterrecovery:BackupPlan\n properties:\n location: us-central1\n backupPlanId: backup-plan-simple-test\n resourceType: compute.googleapis.com/Instance\n backupVault: ${myBackupVault.id}\n backupRules:\n - ruleId: rule-1\n backupRetentionDays: 5\n standardSchedule:\n recurrenceType: HOURLY\n hourlyFrequency: 6\n timeZone: UTC\n backupWindow:\n startHourOfDay: 0\n endHourOfDay: 24\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBackupPlan can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan_id}}`\n\n* `{{project}}/{{location}}/{{backup_plan_id}}`\n\n* `{{location}}/{{backup_plan_id}}`\n\nWhen using the `pulumi import` command, BackupPlan can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupPlan:BackupPlan default projects/{{project}}/locations/{{location}}/backupPlans/{{backup_plan_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupPlan:BackupPlan default {{project}}/{{location}}/{{backup_plan_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupPlan:BackupPlan default {{location}}/{{backup_plan_id}}\n```\n\n", + "properties": { + "backupPlanId": { + "type": "string", + "description": "The ID of the backup plan\n" + }, + "backupRules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:backupdisasterrecovery/BackupPlanBackupRule:BackupPlanBackupRule" + }, + "description": "The backup rules for this `BackupPlan`. There must be at least one `BackupRule` message.\nStructure is documented below.\n" + }, + "backupVault": { + "type": "string", + "description": "Backup vault where the backups gets stored using this Backup plan.\n" + }, + "backupVaultServiceAccount": { + "type": "string", + "description": "The Google Cloud Platform Service Account to be used by the BackupVault for taking backups.\n" + }, + "createTime": { + "type": "string", + "description": "When the `BackupPlan` was created.\n" + }, + "description": { + "type": "string", + "description": "The description allows for additional details about 'BackupPlan' and its use cases to be provided.\n" + }, + "location": { + "type": "string", + "description": "The location for the backup plan\n" + }, + "name": { + "type": "string", + "description": "The name of backup plan resource created\n" + }, + "project": { + "type": "string" + }, + "resourceType": { + "type": "string", + "description": "The resource type to which the `BackupPlan` will be applied. Examples include, \"compute.googleapis.com/Instance\" and \"storage.googleapis.com/Bucket\".\n" + }, + "updateTime": { + "type": "string", + "description": "When the `BackupPlan` was last updated.\n" + } + }, + "required": [ + "backupPlanId", + "backupRules", + "backupVault", + "backupVaultServiceAccount", + "createTime", + "location", + "name", + "project", + "resourceType", + "updateTime" + ], + "inputProperties": { + "backupPlanId": { + "type": "string", + "description": "The ID of the backup plan\n", + "willReplaceOnChanges": true + }, + "backupRules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:backupdisasterrecovery/BackupPlanBackupRule:BackupPlanBackupRule" + }, + "description": "The backup rules for this `BackupPlan`. There must be at least one `BackupRule` message.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "backupVault": { + "type": "string", + "description": "Backup vault where the backups gets stored using this Backup plan.\n", + "willReplaceOnChanges": true + }, + "description": { + "type": "string", + "description": "The description allows for additional details about 'BackupPlan' and its use cases to be provided.\n", + "willReplaceOnChanges": true + }, + "location": { + "type": "string", + "description": "The location for the backup plan\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "willReplaceOnChanges": true + }, + "resourceType": { + "type": "string", + "description": "The resource type to which the `BackupPlan` will be applied. Examples include, \"compute.googleapis.com/Instance\" and \"storage.googleapis.com/Bucket\".\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "backupPlanId", + "backupRules", + "backupVault", + "location", + "resourceType" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering BackupPlan resources.\n", + "properties": { + "backupPlanId": { + "type": "string", + "description": "The ID of the backup plan\n", + "willReplaceOnChanges": true + }, + "backupRules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:backupdisasterrecovery/BackupPlanBackupRule:BackupPlanBackupRule" + }, + "description": "The backup rules for this `BackupPlan`. There must be at least one `BackupRule` message.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "backupVault": { + "type": "string", + "description": "Backup vault where the backups gets stored using this Backup plan.\n", + "willReplaceOnChanges": true + }, + "backupVaultServiceAccount": { + "type": "string", + "description": "The Google Cloud Platform Service Account to be used by the BackupVault for taking backups.\n" + }, + "createTime": { + "type": "string", + "description": "When the `BackupPlan` was created.\n" + }, + "description": { + "type": "string", + "description": "The description allows for additional details about 'BackupPlan' and its use cases to be provided.\n", + "willReplaceOnChanges": true + }, + "location": { + "type": "string", + "description": "The location for the backup plan\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The name of backup plan resource created\n" + }, + "project": { + "type": "string", + "willReplaceOnChanges": true + }, + "resourceType": { + "type": "string", + "description": "The resource type to which the `BackupPlan` will be applied. Examples include, \"compute.googleapis.com/Instance\" and \"storage.googleapis.com/Bucket\".\n", + "willReplaceOnChanges": true + }, + "updateTime": { + "type": "string", + "description": "When the `BackupPlan` was last updated.\n" + } + }, + "type": "object" + } + }, + "gcp:backupdisasterrecovery/backupPlanAssociation:BackupPlanAssociation": { + "description": "## Example Usage\n\n### Backup Dr Bpa\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst mySA = new gcp.serviceaccount.Account(\"mySA\", {\n accountId: \"my-custom\",\n displayName: \"Custom SA for VM Instance\",\n});\nconst myinstance = new gcp.compute.Instance(\"myinstance\", {\n networkInterfaces: [{\n accessConfigs: [{}],\n network: \"default\",\n }],\n name: \"test-instance\",\n machineType: \"n2-standard-2\",\n zone: \"us-central1-a\",\n bootDisk: {\n initializeParams: {\n image: \"debian-cloud/debian-11\",\n labels: {\n my_label: \"value\",\n },\n },\n },\n scratchDisks: [{\n \"interface\": \"NVME\",\n }],\n serviceAccount: {\n email: mySA.email,\n scopes: [\"cloud-platform\"],\n },\n});\nconst bv1 = new gcp.backupdisasterrecovery.BackupVault(\"bv1\", {\n location: \"us-central1\",\n backupVaultId: \"bv-bpa\",\n backupMinimumEnforcedRetentionDuration: \"100000s\",\n forceDelete: true,\n});\nconst bp1 = new gcp.backupdisasterrecovery.BackupPlan(\"bp1\", {\n location: \"us-central1\",\n backupPlanId: \"bp-bpa-test\",\n resourceType: \"compute.googleapis.com/Instance\",\n backupVault: bv1.id,\n backupRules: [{\n ruleId: \"rule-1\",\n backupRetentionDays: 2,\n standardSchedule: {\n recurrenceType: \"HOURLY\",\n hourlyFrequency: 6,\n timeZone: \"UTC\",\n backupWindow: {\n startHourOfDay: 12,\n endHourOfDay: 18,\n },\n },\n }],\n});\nconst my_backup_plan_association = new gcp.backupdisasterrecovery.BackupPlanAssociation(\"my-backup-plan-association\", {\n location: \"us-central1\",\n resourceType: \"compute.googleapis.com/Instance\",\n backupPlanAssociationId: \"my-bpa\",\n resource: myinstance.id,\n backupPlan: bp1.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_sa = gcp.serviceaccount.Account(\"mySA\",\n account_id=\"my-custom\",\n display_name=\"Custom SA for VM Instance\")\nmyinstance = gcp.compute.Instance(\"myinstance\",\n network_interfaces=[{\n \"access_configs\": [{}],\n \"network\": \"default\",\n }],\n name=\"test-instance\",\n machine_type=\"n2-standard-2\",\n zone=\"us-central1-a\",\n boot_disk={\n \"initialize_params\": {\n \"image\": \"debian-cloud/debian-11\",\n \"labels\": {\n \"my_label\": \"value\",\n },\n },\n },\n scratch_disks=[{\n \"interface\": \"NVME\",\n }],\n service_account={\n \"email\": my_sa.email,\n \"scopes\": [\"cloud-platform\"],\n })\nbv1 = gcp.backupdisasterrecovery.BackupVault(\"bv1\",\n location=\"us-central1\",\n backup_vault_id=\"bv-bpa\",\n backup_minimum_enforced_retention_duration=\"100000s\",\n force_delete=True)\nbp1 = gcp.backupdisasterrecovery.BackupPlan(\"bp1\",\n location=\"us-central1\",\n backup_plan_id=\"bp-bpa-test\",\n resource_type=\"compute.googleapis.com/Instance\",\n backup_vault=bv1.id,\n backup_rules=[{\n \"rule_id\": \"rule-1\",\n \"backup_retention_days\": 2,\n \"standard_schedule\": {\n \"recurrence_type\": \"HOURLY\",\n \"hourly_frequency\": 6,\n \"time_zone\": \"UTC\",\n \"backup_window\": {\n \"start_hour_of_day\": 12,\n \"end_hour_of_day\": 18,\n },\n },\n }])\nmy_backup_plan_association = gcp.backupdisasterrecovery.BackupPlanAssociation(\"my-backup-plan-association\",\n location=\"us-central1\",\n resource_type=\"compute.googleapis.com/Instance\",\n backup_plan_association_id=\"my-bpa\",\n resource=myinstance.id,\n backup_plan=bp1.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var mySA = new Gcp.ServiceAccount.Account(\"mySA\", new()\n {\n AccountId = \"my-custom\",\n DisplayName = \"Custom SA for VM Instance\",\n });\n\n var myinstance = new Gcp.Compute.Instance(\"myinstance\", new()\n {\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n AccessConfigs = new[]\n {\n null,\n },\n Network = \"default\",\n },\n },\n Name = \"test-instance\",\n MachineType = \"n2-standard-2\",\n Zone = \"us-central1-a\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = \"debian-cloud/debian-11\",\n Labels = \n {\n { \"my_label\", \"value\" },\n },\n },\n },\n ScratchDisks = new[]\n {\n new Gcp.Compute.Inputs.InstanceScratchDiskArgs\n {\n Interface = \"NVME\",\n },\n },\n ServiceAccount = new Gcp.Compute.Inputs.InstanceServiceAccountArgs\n {\n Email = mySA.Email,\n Scopes = new[]\n {\n \"cloud-platform\",\n },\n },\n });\n\n var bv1 = new Gcp.BackupDisasterRecovery.BackupVault(\"bv1\", new()\n {\n Location = \"us-central1\",\n BackupVaultId = \"bv-bpa\",\n BackupMinimumEnforcedRetentionDuration = \"100000s\",\n ForceDelete = true,\n });\n\n var bp1 = new Gcp.BackupDisasterRecovery.BackupPlan(\"bp1\", new()\n {\n Location = \"us-central1\",\n BackupPlanId = \"bp-bpa-test\",\n ResourceType = \"compute.googleapis.com/Instance\",\n BackupVault = bv1.Id,\n BackupRules = new[]\n {\n new Gcp.BackupDisasterRecovery.Inputs.BackupPlanBackupRuleArgs\n {\n RuleId = \"rule-1\",\n BackupRetentionDays = 2,\n StandardSchedule = new Gcp.BackupDisasterRecovery.Inputs.BackupPlanBackupRuleStandardScheduleArgs\n {\n RecurrenceType = \"HOURLY\",\n HourlyFrequency = 6,\n TimeZone = \"UTC\",\n BackupWindow = new Gcp.BackupDisasterRecovery.Inputs.BackupPlanBackupRuleStandardScheduleBackupWindowArgs\n {\n StartHourOfDay = 12,\n EndHourOfDay = 18,\n },\n },\n },\n },\n });\n\n var my_backup_plan_association = new Gcp.BackupDisasterRecovery.BackupPlanAssociation(\"my-backup-plan-association\", new()\n {\n Location = \"us-central1\",\n ResourceType = \"compute.googleapis.com/Instance\",\n BackupPlanAssociationId = \"my-bpa\",\n Resource = myinstance.Id,\n BackupPlan = bp1.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/backupdisasterrecovery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmySA, err := serviceaccount.NewAccount(ctx, \"mySA\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-custom\"),\n\t\t\tDisplayName: pulumi.String(\"Custom SA for VM Instance\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyinstance, err := compute.NewInstance(ctx, \"myinstance\", \u0026compute.InstanceArgs{\n\t\t\tNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceNetworkInterfaceArgs{\n\t\t\t\t\tAccessConfigs: compute.InstanceNetworkInterfaceAccessConfigArray{\n\t\t\t\t\t\t\u0026compute.InstanceNetworkInterfaceAccessConfigArgs{},\n\t\t\t\t\t},\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tName: pulumi.String(\"test-instance\"),\n\t\t\tMachineType: pulumi.String(\"n2-standard-2\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(\"debian-cloud/debian-11\"),\n\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\"my_label\": pulumi.String(\"value\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tScratchDisks: compute.InstanceScratchDiskArray{\n\t\t\t\t\u0026compute.InstanceScratchDiskArgs{\n\t\t\t\t\tInterface: pulumi.String(\"NVME\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tServiceAccount: \u0026compute.InstanceServiceAccountArgs{\n\t\t\t\tEmail: mySA.Email,\n\t\t\t\tScopes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"cloud-platform\"),\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\tbv1, err := backupdisasterrecovery.NewBackupVault(ctx, \"bv1\", \u0026backupdisasterrecovery.BackupVaultArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupVaultId: pulumi.String(\"bv-bpa\"),\n\t\t\tBackupMinimumEnforcedRetentionDuration: pulumi.String(\"100000s\"),\n\t\t\tForceDelete: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbp1, err := backupdisasterrecovery.NewBackupPlan(ctx, \"bp1\", \u0026backupdisasterrecovery.BackupPlanArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupPlanId: pulumi.String(\"bp-bpa-test\"),\n\t\t\tResourceType: pulumi.String(\"compute.googleapis.com/Instance\"),\n\t\t\tBackupVault: bv1.ID(),\n\t\t\tBackupRules: backupdisasterrecovery.BackupPlanBackupRuleArray{\n\t\t\t\t\u0026backupdisasterrecovery.BackupPlanBackupRuleArgs{\n\t\t\t\t\tRuleId: pulumi.String(\"rule-1\"),\n\t\t\t\t\tBackupRetentionDays: pulumi.Int(2),\n\t\t\t\t\tStandardSchedule: \u0026backupdisasterrecovery.BackupPlanBackupRuleStandardScheduleArgs{\n\t\t\t\t\t\tRecurrenceType: pulumi.String(\"HOURLY\"),\n\t\t\t\t\t\tHourlyFrequency: pulumi.Int(6),\n\t\t\t\t\t\tTimeZone: pulumi.String(\"UTC\"),\n\t\t\t\t\t\tBackupWindow: \u0026backupdisasterrecovery.BackupPlanBackupRuleStandardScheduleBackupWindowArgs{\n\t\t\t\t\t\t\tStartHourOfDay: pulumi.Int(12),\n\t\t\t\t\t\t\tEndHourOfDay: pulumi.Int(18),\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\t_, err = backupdisasterrecovery.NewBackupPlanAssociation(ctx, \"my-backup-plan-association\", \u0026backupdisasterrecovery.BackupPlanAssociationArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tResourceType: pulumi.String(\"compute.googleapis.com/Instance\"),\n\t\t\tBackupPlanAssociationId: pulumi.String(\"my-bpa\"),\n\t\t\tResource: myinstance.ID(),\n\t\t\tBackupPlan: bp1.Name,\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.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceScratchDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceServiceAccountArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVault;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVaultArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupPlan;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupPlanArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.BackupPlanBackupRuleArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.BackupPlanBackupRuleStandardScheduleArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.BackupPlanBackupRuleStandardScheduleBackupWindowArgs;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupPlanAssociation;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupPlanAssociationArgs;\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 mySA = new Account(\"mySA\", AccountArgs.builder()\n .accountId(\"my-custom\")\n .displayName(\"Custom SA for VM Instance\")\n .build());\n\n var myinstance = new Instance(\"myinstance\", InstanceArgs.builder()\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .accessConfigs()\n .network(\"default\")\n .build())\n .name(\"test-instance\")\n .machineType(\"n2-standard-2\")\n .zone(\"us-central1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"debian-cloud/debian-11\")\n .labels(Map.of(\"my_label\", \"value\"))\n .build())\n .build())\n .scratchDisks(InstanceScratchDiskArgs.builder()\n .interface_(\"NVME\")\n .build())\n .serviceAccount(InstanceServiceAccountArgs.builder()\n .email(mySA.email())\n .scopes(\"cloud-platform\")\n .build())\n .build());\n\n var bv1 = new BackupVault(\"bv1\", BackupVaultArgs.builder()\n .location(\"us-central1\")\n .backupVaultId(\"bv-bpa\")\n .backupMinimumEnforcedRetentionDuration(\"100000s\")\n .forceDelete(\"true\")\n .build());\n\n var bp1 = new BackupPlan(\"bp1\", BackupPlanArgs.builder()\n .location(\"us-central1\")\n .backupPlanId(\"bp-bpa-test\")\n .resourceType(\"compute.googleapis.com/Instance\")\n .backupVault(bv1.id())\n .backupRules(BackupPlanBackupRuleArgs.builder()\n .ruleId(\"rule-1\")\n .backupRetentionDays(2)\n .standardSchedule(BackupPlanBackupRuleStandardScheduleArgs.builder()\n .recurrenceType(\"HOURLY\")\n .hourlyFrequency(6)\n .timeZone(\"UTC\")\n .backupWindow(BackupPlanBackupRuleStandardScheduleBackupWindowArgs.builder()\n .startHourOfDay(12)\n .endHourOfDay(18)\n .build())\n .build())\n .build())\n .build());\n\n var my_backup_plan_association = new BackupPlanAssociation(\"my-backup-plan-association\", BackupPlanAssociationArgs.builder()\n .location(\"us-central1\")\n .resourceType(\"compute.googleapis.com/Instance\")\n .backupPlanAssociationId(\"my-bpa\")\n .resource(myinstance.id())\n .backupPlan(bp1.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n mySA:\n type: gcp:serviceaccount:Account\n properties:\n accountId: my-custom\n displayName: Custom SA for VM Instance\n myinstance:\n type: gcp:compute:Instance\n properties:\n networkInterfaces:\n - accessConfigs:\n - {}\n network: default\n name: test-instance\n machineType: n2-standard-2\n zone: us-central1-a\n bootDisk:\n initializeParams:\n image: debian-cloud/debian-11\n labels:\n my_label: value\n scratchDisks:\n - interface: NVME\n serviceAccount:\n email: ${mySA.email}\n scopes:\n - cloud-platform\n bv1:\n type: gcp:backupdisasterrecovery:BackupVault\n properties:\n location: us-central1\n backupVaultId: bv-bpa\n backupMinimumEnforcedRetentionDuration: 100000s\n forceDelete: 'true'\n bp1:\n type: gcp:backupdisasterrecovery:BackupPlan\n properties:\n location: us-central1\n backupPlanId: bp-bpa-test\n resourceType: compute.googleapis.com/Instance\n backupVault: ${bv1.id}\n backupRules:\n - ruleId: rule-1\n backupRetentionDays: 2\n standardSchedule:\n recurrenceType: HOURLY\n hourlyFrequency: 6\n timeZone: UTC\n backupWindow:\n startHourOfDay: 12\n endHourOfDay: 18\n my-backup-plan-association:\n type: gcp:backupdisasterrecovery:BackupPlanAssociation\n properties:\n location: us-central1\n resourceType: compute.googleapis.com/Instance\n backupPlanAssociationId: my-bpa\n resource: ${myinstance.id}\n backupPlan: ${bp1.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBackupPlanAssociation can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/backupPlanAssociations/{{backup_plan_association_id}}`\n\n* `{{project}}/{{location}}/{{backup_plan_association_id}}`\n\n* `{{location}}/{{backup_plan_association_id}}`\n\nWhen using the `pulumi import` command, BackupPlanAssociation can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupPlanAssociation:BackupPlanAssociation default projects/{{project}}/locations/{{location}}/backupPlanAssociations/{{backup_plan_association_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupPlanAssociation:BackupPlanAssociation default {{project}}/{{location}}/{{backup_plan_association_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupPlanAssociation:BackupPlanAssociation default {{location}}/{{backup_plan_association_id}}\n```\n\n", + "properties": { + "backupPlan": { + "type": "string", + "description": "The BP with which resource needs to be created\n" + }, + "backupPlanAssociationId": { + "type": "string", + "description": "The id of backupplan association\n\n\n- - -\n" + }, + "createTime": { + "type": "string", + "description": "The time when the instance was created\n" + }, + "dataSource": { + "type": "string", + "description": "Resource name of data source which will be used as storage location for backups taken\n" + }, + "lastSuccessfulBackupConsistencyTime": { + "type": "string", + "description": "The point in time when the last successful backup was captured from the source\n" + }, + "location": { + "type": "string", + "description": "The location for the backupplan association\n" + }, + "name": { + "type": "string", + "description": "The name of backup plan association resource created\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n" + }, + "resource": { + "type": "string", + "description": "The resource for which BPA needs to be created\n" + }, + "resourceType": { + "type": "string", + "description": "The resource type of workload on which backupplan is applied\n" + }, + "rulesConfigInfos": { + "type": "array", + "items": { + "$ref": "#/types/gcp:backupdisasterrecovery/BackupPlanAssociationRulesConfigInfo:BackupPlanAssociationRulesConfigInfo" + }, + "description": "Message for rules config info\nStructure is documented below.\n" + }, + "updateTime": { + "type": "string", + "description": "The time when the instance was updated.\n" + } + }, + "required": [ + "backupPlan", + "backupPlanAssociationId", + "createTime", + "dataSource", + "lastSuccessfulBackupConsistencyTime", + "location", + "name", + "project", + "resource", + "resourceType", + "rulesConfigInfos", + "updateTime" + ], + "inputProperties": { + "backupPlan": { + "type": "string", + "description": "The BP with which resource needs to be created\n", + "willReplaceOnChanges": true + }, + "backupPlanAssociationId": { + "type": "string", + "description": "The id of backupplan association\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "location": { + "type": "string", + "description": "The location for the backupplan association\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "resource": { + "type": "string", + "description": "The resource for which BPA needs to be created\n", + "willReplaceOnChanges": true + }, + "resourceType": { + "type": "string", + "description": "The resource type of workload on which backupplan is applied\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "backupPlan", + "backupPlanAssociationId", + "location", + "resource", + "resourceType" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering BackupPlanAssociation resources.\n", + "properties": { + "backupPlan": { + "type": "string", + "description": "The BP with which resource needs to be created\n", + "willReplaceOnChanges": true + }, + "backupPlanAssociationId": { + "type": "string", + "description": "The id of backupplan association\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "createTime": { + "type": "string", + "description": "The time when the instance was created\n" + }, + "dataSource": { + "type": "string", + "description": "Resource name of data source which will be used as storage location for backups taken\n" + }, + "lastSuccessfulBackupConsistencyTime": { + "type": "string", + "description": "The point in time when the last successful backup was captured from the source\n" + }, + "location": { + "type": "string", + "description": "The location for the backupplan association\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The name of backup plan association resource created\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "resource": { + "type": "string", + "description": "The resource for which BPA needs to be created\n", + "willReplaceOnChanges": true + }, + "resourceType": { + "type": "string", + "description": "The resource type of workload on which backupplan is applied\n", + "willReplaceOnChanges": true + }, + "rulesConfigInfos": { + "type": "array", + "items": { + "$ref": "#/types/gcp:backupdisasterrecovery/BackupPlanAssociationRulesConfigInfo:BackupPlanAssociationRulesConfigInfo" + }, + "description": "Message for rules config info\nStructure is documented below.\n" + }, + "updateTime": { + "type": "string", + "description": "The time when the instance was updated.\n" + } + }, + "type": "object" + } + }, "gcp:backupdisasterrecovery/backupVault:BackupVault": { - "description": "## Example Usage\n\n### Backup Dr Backup Vault Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst backup_vault_test = new gcp.backupdisasterrecovery.BackupVault(\"backup-vault-test\", {\n location: \"us-central1\",\n backupVaultId: \"backup-vault-test\",\n description: \"This is a second backup vault built by Terraform.\",\n backupMinimumEnforcedRetentionDuration: \"100000s\",\n labels: {\n foo: \"bar1\",\n bar: \"baz1\",\n },\n annotations: {\n annotations1: \"bar1\",\n annotations2: \"baz1\",\n },\n forceUpdate: true,\n forceDelete: true,\n allowMissing: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbackup_vault_test = gcp.backupdisasterrecovery.BackupVault(\"backup-vault-test\",\n location=\"us-central1\",\n backup_vault_id=\"backup-vault-test\",\n description=\"This is a second backup vault built by Terraform.\",\n backup_minimum_enforced_retention_duration=\"100000s\",\n labels={\n \"foo\": \"bar1\",\n \"bar\": \"baz1\",\n },\n annotations={\n \"annotations1\": \"bar1\",\n \"annotations2\": \"baz1\",\n },\n force_update=True,\n force_delete=True,\n allow_missing=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var backup_vault_test = new Gcp.BackupDisasterRecovery.BackupVault(\"backup-vault-test\", new()\n {\n Location = \"us-central1\",\n BackupVaultId = \"backup-vault-test\",\n Description = \"This is a second backup vault built by Terraform.\",\n BackupMinimumEnforcedRetentionDuration = \"100000s\",\n Labels = \n {\n { \"foo\", \"bar1\" },\n { \"bar\", \"baz1\" },\n },\n Annotations = \n {\n { \"annotations1\", \"bar1\" },\n { \"annotations2\", \"baz1\" },\n },\n ForceUpdate = true,\n ForceDelete = true,\n AllowMissing = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/backupdisasterrecovery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := backupdisasterrecovery.NewBackupVault(ctx, \"backup-vault-test\", \u0026backupdisasterrecovery.BackupVaultArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupVaultId: pulumi.String(\"backup-vault-test\"),\n\t\t\tDescription: pulumi.String(\"This is a second backup vault built by Terraform.\"),\n\t\t\tBackupMinimumEnforcedRetentionDuration: pulumi.String(\"100000s\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar1\"),\n\t\t\t\t\"bar\": pulumi.String(\"baz1\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"annotations1\": pulumi.String(\"bar1\"),\n\t\t\t\t\"annotations2\": pulumi.String(\"baz1\"),\n\t\t\t},\n\t\t\tForceUpdate: pulumi.Bool(true),\n\t\t\tForceDelete: pulumi.Bool(true),\n\t\t\tAllowMissing: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVault;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVaultArgs;\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 backup_vault_test = new BackupVault(\"backup-vault-test\", BackupVaultArgs.builder()\n .location(\"us-central1\")\n .backupVaultId(\"backup-vault-test\")\n .description(\"This is a second backup vault built by Terraform.\")\n .backupMinimumEnforcedRetentionDuration(\"100000s\")\n .labels(Map.ofEntries(\n Map.entry(\"foo\", \"bar1\"),\n Map.entry(\"bar\", \"baz1\")\n ))\n .annotations(Map.ofEntries(\n Map.entry(\"annotations1\", \"bar1\"),\n Map.entry(\"annotations2\", \"baz1\")\n ))\n .forceUpdate(\"true\")\n .forceDelete(\"true\")\n .allowMissing(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n backup-vault-test:\n type: gcp:backupdisasterrecovery:BackupVault\n properties:\n location: us-central1\n backupVaultId: backup-vault-test\n description: This is a second backup vault built by Terraform.\n backupMinimumEnforcedRetentionDuration: 100000s\n labels:\n foo: bar1\n bar: baz1\n annotations:\n annotations1: bar1\n annotations2: baz1\n forceUpdate: 'true'\n forceDelete: 'true'\n allowMissing: 'true'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBackupVault can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/backupVaults/{{backup_vault_id}}`\n\n* `{{project}}/{{location}}/{{backup_vault_id}}`\n\n* `{{location}}/{{backup_vault_id}}`\n\nWhen using the `pulumi import` command, BackupVault can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default projects/{{project}}/locations/{{location}}/backupVaults/{{backup_vault_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default {{project}}/{{location}}/{{backup_vault_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default {{location}}/{{backup_vault_id}}\n```\n\n", + "description": "## Example Usage\n\n### Backup Dr Backup Vault Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst backup_vault_test = new gcp.backupdisasterrecovery.BackupVault(\"backup-vault-test\", {\n location: \"us-central1\",\n backupVaultId: \"backup-vault-test\",\n description: \"This is a second backup vault built by Terraform.\",\n backupMinimumEnforcedRetentionDuration: \"100000s\",\n labels: {\n foo: \"bar1\",\n bar: \"baz1\",\n },\n annotations: {\n annotations1: \"bar1\",\n annotations2: \"baz1\",\n },\n forceUpdate: true,\n ignoreInactiveDatasources: true,\n ignoreBackupPlanReferences: true,\n allowMissing: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbackup_vault_test = gcp.backupdisasterrecovery.BackupVault(\"backup-vault-test\",\n location=\"us-central1\",\n backup_vault_id=\"backup-vault-test\",\n description=\"This is a second backup vault built by Terraform.\",\n backup_minimum_enforced_retention_duration=\"100000s\",\n labels={\n \"foo\": \"bar1\",\n \"bar\": \"baz1\",\n },\n annotations={\n \"annotations1\": \"bar1\",\n \"annotations2\": \"baz1\",\n },\n force_update=True,\n ignore_inactive_datasources=True,\n ignore_backup_plan_references=True,\n allow_missing=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var backup_vault_test = new Gcp.BackupDisasterRecovery.BackupVault(\"backup-vault-test\", new()\n {\n Location = \"us-central1\",\n BackupVaultId = \"backup-vault-test\",\n Description = \"This is a second backup vault built by Terraform.\",\n BackupMinimumEnforcedRetentionDuration = \"100000s\",\n Labels = \n {\n { \"foo\", \"bar1\" },\n { \"bar\", \"baz1\" },\n },\n Annotations = \n {\n { \"annotations1\", \"bar1\" },\n { \"annotations2\", \"baz1\" },\n },\n ForceUpdate = true,\n IgnoreInactiveDatasources = true,\n IgnoreBackupPlanReferences = true,\n AllowMissing = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/backupdisasterrecovery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := backupdisasterrecovery.NewBackupVault(ctx, \"backup-vault-test\", \u0026backupdisasterrecovery.BackupVaultArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBackupVaultId: pulumi.String(\"backup-vault-test\"),\n\t\t\tDescription: pulumi.String(\"This is a second backup vault built by Terraform.\"),\n\t\t\tBackupMinimumEnforcedRetentionDuration: pulumi.String(\"100000s\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar1\"),\n\t\t\t\t\"bar\": pulumi.String(\"baz1\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"annotations1\": pulumi.String(\"bar1\"),\n\t\t\t\t\"annotations2\": pulumi.String(\"baz1\"),\n\t\t\t},\n\t\t\tForceUpdate: pulumi.Bool(true),\n\t\t\tIgnoreInactiveDatasources: pulumi.Bool(true),\n\t\t\tIgnoreBackupPlanReferences: pulumi.Bool(true),\n\t\t\tAllowMissing: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVault;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupVaultArgs;\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 backup_vault_test = new BackupVault(\"backup-vault-test\", BackupVaultArgs.builder()\n .location(\"us-central1\")\n .backupVaultId(\"backup-vault-test\")\n .description(\"This is a second backup vault built by Terraform.\")\n .backupMinimumEnforcedRetentionDuration(\"100000s\")\n .labels(Map.ofEntries(\n Map.entry(\"foo\", \"bar1\"),\n Map.entry(\"bar\", \"baz1\")\n ))\n .annotations(Map.ofEntries(\n Map.entry(\"annotations1\", \"bar1\"),\n Map.entry(\"annotations2\", \"baz1\")\n ))\n .forceUpdate(\"true\")\n .ignoreInactiveDatasources(\"true\")\n .ignoreBackupPlanReferences(\"true\")\n .allowMissing(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n backup-vault-test:\n type: gcp:backupdisasterrecovery:BackupVault\n properties:\n location: us-central1\n backupVaultId: backup-vault-test\n description: This is a second backup vault built by Terraform.\n backupMinimumEnforcedRetentionDuration: 100000s\n labels:\n foo: bar1\n bar: baz1\n annotations:\n annotations1: bar1\n annotations2: baz1\n forceUpdate: 'true'\n ignoreInactiveDatasources: 'true'\n ignoreBackupPlanReferences: 'true'\n allowMissing: 'true'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nBackupVault can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/backupVaults/{{backup_vault_id}}`\n\n* `{{project}}/{{location}}/{{backup_vault_id}}`\n\n* `{{location}}/{{backup_vault_id}}`\n\nWhen using the `pulumi import` command, BackupVault can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default projects/{{project}}/locations/{{location}}/backupVaults/{{backup_vault_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default {{project}}/{{location}}/{{backup_vault_id}}\n```\n\n```sh\n$ pulumi import gcp:backupdisasterrecovery/backupVault:BackupVault default {{location}}/{{backup_vault_id}}\n```\n\n", "properties": { "allowMissing": { "type": "boolean", @@ -135364,12 +137334,21 @@ }, "forceDelete": { "type": "boolean", - "description": "If set, the following restrictions against deletion of the backup vault instance can be overridden:\n* deletion of a backup vault instance containing no backups, but still containing empty datasources.\n* deletion of a backup vault instance that is being referenced by an active backup plan.\n" + "description": "(Optional, Deprecated)\nIf set, the following restrictions against deletion of the backup vault instance can be overridden:\n* deletion of a backup vault instance containing no backups, but still containing empty datasources.\n* deletion of a backup vault instance that is being referenced by an active backup plan.\n\n\u003e **Warning:** `force_delete` is deprecated and will be removed in a future major release. Use `ignore_inactive_datasources` instead.\n", + "deprecationMessage": "`force_delete` is deprecated and will be removed in a future major release. Use `ignore_inactive_datasources` instead." }, "forceUpdate": { "type": "boolean", "description": "If set, allow update to extend the minimum enforced retention for backup vault. This overrides\nthe restriction against conflicting retention periods. This conflict may occur when the\nexpiration schedule defined by the associated backup plan is shorter than the minimum\nretention set by the backup vault.\n" }, + "ignoreBackupPlanReferences": { + "type": "boolean", + "description": "If set, the following restrictions against deletion of the backup vault instance can be overridden:\n* deletion of a backup vault instance that is being referenced by an active backup plan.\n" + }, + "ignoreInactiveDatasources": { + "type": "boolean", + "description": "If set, the following restrictions against deletion of the backup vault instance can be overridden:\n* deletion of a backup vault instance containing no backups, but still containing empty datasources.\n" + }, "labels": { "type": "object", "additionalProperties": { @@ -135468,12 +137447,21 @@ }, "forceDelete": { "type": "boolean", - "description": "If set, the following restrictions against deletion of the backup vault instance can be overridden:\n* deletion of a backup vault instance containing no backups, but still containing empty datasources.\n* deletion of a backup vault instance that is being referenced by an active backup plan.\n" + "description": "(Optional, Deprecated)\nIf set, the following restrictions against deletion of the backup vault instance can be overridden:\n* deletion of a backup vault instance containing no backups, but still containing empty datasources.\n* deletion of a backup vault instance that is being referenced by an active backup plan.\n\n\u003e **Warning:** `force_delete` is deprecated and will be removed in a future major release. Use `ignore_inactive_datasources` instead.\n", + "deprecationMessage": "`force_delete` is deprecated and will be removed in a future major release. Use `ignore_inactive_datasources` instead." }, "forceUpdate": { "type": "boolean", "description": "If set, allow update to extend the minimum enforced retention for backup vault. This overrides\nthe restriction against conflicting retention periods. This conflict may occur when the\nexpiration schedule defined by the associated backup plan is shorter than the minimum\nretention set by the backup vault.\n" }, + "ignoreBackupPlanReferences": { + "type": "boolean", + "description": "If set, the following restrictions against deletion of the backup vault instance can be overridden:\n* deletion of a backup vault instance that is being referenced by an active backup plan.\n" + }, + "ignoreInactiveDatasources": { + "type": "boolean", + "description": "If set, the following restrictions against deletion of the backup vault instance can be overridden:\n* deletion of a backup vault instance containing no backups, but still containing empty datasources.\n" + }, "labels": { "type": "object", "additionalProperties": { @@ -135560,12 +137548,21 @@ }, "forceDelete": { "type": "boolean", - "description": "If set, the following restrictions against deletion of the backup vault instance can be overridden:\n* deletion of a backup vault instance containing no backups, but still containing empty datasources.\n* deletion of a backup vault instance that is being referenced by an active backup plan.\n" + "description": "(Optional, Deprecated)\nIf set, the following restrictions against deletion of the backup vault instance can be overridden:\n* deletion of a backup vault instance containing no backups, but still containing empty datasources.\n* deletion of a backup vault instance that is being referenced by an active backup plan.\n\n\u003e **Warning:** `force_delete` is deprecated and will be removed in a future major release. Use `ignore_inactive_datasources` instead.\n", + "deprecationMessage": "`force_delete` is deprecated and will be removed in a future major release. Use `ignore_inactive_datasources` instead." }, "forceUpdate": { "type": "boolean", "description": "If set, allow update to extend the minimum enforced retention for backup vault. This overrides\nthe restriction against conflicting retention periods. This conflict may occur when the\nexpiration schedule defined by the associated backup plan is shorter than the minimum\nretention set by the backup vault.\n" }, + "ignoreBackupPlanReferences": { + "type": "boolean", + "description": "If set, the following restrictions against deletion of the backup vault instance can be overridden:\n* deletion of a backup vault instance that is being referenced by an active backup plan.\n" + }, + "ignoreInactiveDatasources": { + "type": "boolean", + "description": "If set, the following restrictions against deletion of the backup vault instance can be overridden:\n* deletion of a backup vault instance containing no backups, but still containing empty datasources.\n" + }, "labels": { "type": "object", "additionalProperties": { @@ -137531,7 +139528,7 @@ } }, "gcp:bigquery/dataTransferConfig:DataTransferConfig": { - "description": "Represents a data transfer configuration. A transfer configuration\ncontains all metadata needed to perform a data transfer.\n\n\nTo get more information about Config, see:\n\n* [API documentation](https://cloud.google.com/bigquery/docs/reference/datatransfer/rest/v1/projects.locations.transferConfigs/create)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/bigquery/docs/reference/datatransfer/rest/)\n\n\n\n## Example Usage\n\n### Bigquerydatatransfer Config Scheduled Query\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst permissions = new gcp.projects.IAMMember(\"permissions\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/iam.serviceAccountTokenCreator\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com`),\n});\nconst myDataset = new gcp.bigquery.Dataset(\"my_dataset\", {\n datasetId: \"my_dataset\",\n friendlyName: \"foo\",\n description: \"bar\",\n location: \"asia-northeast1\",\n}, {\n dependsOn: [permissions],\n});\nconst queryConfig = new gcp.bigquery.DataTransferConfig(\"query_config\", {\n displayName: \"my-query\",\n location: \"asia-northeast1\",\n dataSourceId: \"scheduled_query\",\n schedule: \"first sunday of quarter 00:00\",\n destinationDatasetId: myDataset.datasetId,\n params: {\n destination_table_name_template: \"my_table\",\n write_disposition: \"WRITE_APPEND\",\n query: \"SELECT name FROM tabl WHERE x = 'y'\",\n },\n}, {\n dependsOn: [permissions],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\npermissions = gcp.projects.IAMMember(\"permissions\",\n project=project.project_id,\n role=\"roles/iam.serviceAccountTokenCreator\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\")\nmy_dataset = gcp.bigquery.Dataset(\"my_dataset\",\n dataset_id=\"my_dataset\",\n friendly_name=\"foo\",\n description=\"bar\",\n location=\"asia-northeast1\",\n opts = pulumi.ResourceOptions(depends_on=[permissions]))\nquery_config = gcp.bigquery.DataTransferConfig(\"query_config\",\n display_name=\"my-query\",\n location=\"asia-northeast1\",\n data_source_id=\"scheduled_query\",\n schedule=\"first sunday of quarter 00:00\",\n destination_dataset_id=my_dataset.dataset_id,\n params={\n \"destination_table_name_template\": \"my_table\",\n \"write_disposition\": \"WRITE_APPEND\",\n \"query\": \"SELECT name FROM tabl WHERE x = 'y'\",\n },\n opts = pulumi.ResourceOptions(depends_on=[permissions]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var permissions = new Gcp.Projects.IAMMember(\"permissions\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/iam.serviceAccountTokenCreator\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\",\n });\n\n var myDataset = new Gcp.BigQuery.Dataset(\"my_dataset\", new()\n {\n DatasetId = \"my_dataset\",\n FriendlyName = \"foo\",\n Description = \"bar\",\n Location = \"asia-northeast1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n permissions,\n },\n });\n\n var queryConfig = new Gcp.BigQuery.DataTransferConfig(\"query_config\", new()\n {\n DisplayName = \"my-query\",\n Location = \"asia-northeast1\",\n DataSourceId = \"scheduled_query\",\n Schedule = \"first sunday of quarter 00:00\",\n DestinationDatasetId = myDataset.DatasetId,\n Params = \n {\n { \"destination_table_name_template\", \"my_table\" },\n { \"write_disposition\", \"WRITE_APPEND\" },\n { \"query\", \"SELECT name FROM tabl WHERE x = 'y'\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n permissions,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpermissions, err := projects.NewIAMMember(ctx, \"permissions\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountTokenCreator\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyDataset, err := bigquery.NewDataset(ctx, \"my_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"my_dataset\"),\n\t\t\tFriendlyName: pulumi.String(\"foo\"),\n\t\t\tDescription: pulumi.String(\"bar\"),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tpermissions,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataTransferConfig(ctx, \"query_config\", \u0026bigquery.DataTransferConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"my-query\"),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t\tDataSourceId: pulumi.String(\"scheduled_query\"),\n\t\t\tSchedule: pulumi.String(\"first sunday of quarter 00:00\"),\n\t\t\tDestinationDatasetId: myDataset.DatasetId,\n\t\t\tParams: pulumi.StringMap{\n\t\t\t\t\"destination_table_name_template\": pulumi.String(\"my_table\"),\n\t\t\t\t\"write_disposition\": pulumi.String(\"WRITE_APPEND\"),\n\t\t\t\t\"query\": pulumi.String(\"SELECT name FROM tabl WHERE x = 'y'\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tpermissions,\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.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.DataTransferConfig;\nimport com.pulumi.gcp.bigquery.DataTransferConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var permissions = new IAMMember(\"permissions\", IAMMemberArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/iam.serviceAccountTokenCreator\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var myDataset = new Dataset(\"myDataset\", DatasetArgs.builder()\n .datasetId(\"my_dataset\")\n .friendlyName(\"foo\")\n .description(\"bar\")\n .location(\"asia-northeast1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(permissions)\n .build());\n\n var queryConfig = new DataTransferConfig(\"queryConfig\", DataTransferConfigArgs.builder()\n .displayName(\"my-query\")\n .location(\"asia-northeast1\")\n .dataSourceId(\"scheduled_query\")\n .schedule(\"first sunday of quarter 00:00\")\n .destinationDatasetId(myDataset.datasetId())\n .params(Map.ofEntries(\n Map.entry(\"destination_table_name_template\", \"my_table\"),\n Map.entry(\"write_disposition\", \"WRITE_APPEND\"),\n Map.entry(\"query\", \"SELECT name FROM tabl WHERE x = 'y'\")\n ))\n .build(), CustomResourceOptions.builder()\n .dependsOn(permissions)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n permissions:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/iam.serviceAccountTokenCreator\n member: serviceAccount:service-${project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\n queryConfig:\n type: gcp:bigquery:DataTransferConfig\n name: query_config\n properties:\n displayName: my-query\n location: asia-northeast1\n dataSourceId: scheduled_query\n schedule: first sunday of quarter 00:00\n destinationDatasetId: ${myDataset.datasetId}\n params:\n destination_table_name_template: my_table\n write_disposition: WRITE_APPEND\n query: SELECT name FROM tabl WHERE x = 'y'\n options:\n dependson:\n - ${permissions}\n myDataset:\n type: gcp:bigquery:Dataset\n name: my_dataset\n properties:\n datasetId: my_dataset\n friendlyName: foo\n description: bar\n location: asia-northeast1\n options:\n dependson:\n - ${permissions}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquerydatatransfer Config Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst permissions = new gcp.projects.IAMMember(\"permissions\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/iam.serviceAccountTokenCreator\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com`),\n});\nconst myDataset = new gcp.bigquery.Dataset(\"my_dataset\", {\n datasetId: \"example_dataset\",\n friendlyName: \"foo\",\n description: \"bar\",\n location: \"asia-northeast1\",\n}, {\n dependsOn: [permissions],\n});\nconst keyRing = new gcp.kms.KeyRing(\"key_ring\", {\n name: \"example-keyring\",\n location: \"us\",\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"crypto_key\", {\n name: \"example-key\",\n keyRing: keyRing.id,\n});\nconst queryConfigCmek = new gcp.bigquery.DataTransferConfig(\"query_config_cmek\", {\n displayName: \"\",\n location: \"asia-northeast1\",\n dataSourceId: \"scheduled_query\",\n schedule: \"first sunday of quarter 00:00\",\n destinationDatasetId: myDataset.datasetId,\n params: {\n destination_table_name_template: \"my_table\",\n write_disposition: \"WRITE_APPEND\",\n query: \"SELECT name FROM tabl WHERE x = 'y'\",\n },\n encryptionConfiguration: {\n kmsKeyName: cryptoKey.id,\n },\n}, {\n dependsOn: [permissions],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\npermissions = gcp.projects.IAMMember(\"permissions\",\n project=project.project_id,\n role=\"roles/iam.serviceAccountTokenCreator\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\")\nmy_dataset = gcp.bigquery.Dataset(\"my_dataset\",\n dataset_id=\"example_dataset\",\n friendly_name=\"foo\",\n description=\"bar\",\n location=\"asia-northeast1\",\n opts = pulumi.ResourceOptions(depends_on=[permissions]))\nkey_ring = gcp.kms.KeyRing(\"key_ring\",\n name=\"example-keyring\",\n location=\"us\")\ncrypto_key = gcp.kms.CryptoKey(\"crypto_key\",\n name=\"example-key\",\n key_ring=key_ring.id)\nquery_config_cmek = gcp.bigquery.DataTransferConfig(\"query_config_cmek\",\n display_name=\"\",\n location=\"asia-northeast1\",\n data_source_id=\"scheduled_query\",\n schedule=\"first sunday of quarter 00:00\",\n destination_dataset_id=my_dataset.dataset_id,\n params={\n \"destination_table_name_template\": \"my_table\",\n \"write_disposition\": \"WRITE_APPEND\",\n \"query\": \"SELECT name FROM tabl WHERE x = 'y'\",\n },\n encryption_configuration={\n \"kms_key_name\": crypto_key.id,\n },\n opts = pulumi.ResourceOptions(depends_on=[permissions]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var permissions = new Gcp.Projects.IAMMember(\"permissions\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/iam.serviceAccountTokenCreator\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\",\n });\n\n var myDataset = new Gcp.BigQuery.Dataset(\"my_dataset\", new()\n {\n DatasetId = \"example_dataset\",\n FriendlyName = \"foo\",\n Description = \"bar\",\n Location = \"asia-northeast1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n permissions,\n },\n });\n\n var keyRing = new Gcp.Kms.KeyRing(\"key_ring\", new()\n {\n Name = \"example-keyring\",\n Location = \"us\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"crypto_key\", new()\n {\n Name = \"example-key\",\n KeyRing = keyRing.Id,\n });\n\n var queryConfigCmek = new Gcp.BigQuery.DataTransferConfig(\"query_config_cmek\", new()\n {\n DisplayName = \"\",\n Location = \"asia-northeast1\",\n DataSourceId = \"scheduled_query\",\n Schedule = \"first sunday of quarter 00:00\",\n DestinationDatasetId = myDataset.DatasetId,\n Params = \n {\n { \"destination_table_name_template\", \"my_table\" },\n { \"write_disposition\", \"WRITE_APPEND\" },\n { \"query\", \"SELECT name FROM tabl WHERE x = 'y'\" },\n },\n EncryptionConfiguration = new Gcp.BigQuery.Inputs.DataTransferConfigEncryptionConfigurationArgs\n {\n KmsKeyName = cryptoKey.Id,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n permissions,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpermissions, err := projects.NewIAMMember(ctx, \"permissions\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountTokenCreator\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyDataset, err := bigquery.NewDataset(ctx, \"my_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t\tFriendlyName: pulumi.String(\"foo\"),\n\t\t\tDescription: pulumi.String(\"bar\"),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tpermissions,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyRing, err := kms.NewKeyRing(ctx, \"key_ring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"example-keyring\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"crypto_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"example-key\"),\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataTransferConfig(ctx, \"query_config_cmek\", \u0026bigquery.DataTransferConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"\"),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t\tDataSourceId: pulumi.String(\"scheduled_query\"),\n\t\t\tSchedule: pulumi.String(\"first sunday of quarter 00:00\"),\n\t\t\tDestinationDatasetId: myDataset.DatasetId,\n\t\t\tParams: pulumi.StringMap{\n\t\t\t\t\"destination_table_name_template\": pulumi.String(\"my_table\"),\n\t\t\t\t\"write_disposition\": pulumi.String(\"WRITE_APPEND\"),\n\t\t\t\t\"query\": pulumi.String(\"SELECT name FROM tabl WHERE x = 'y'\"),\n\t\t\t},\n\t\t\tEncryptionConfiguration: \u0026bigquery.DataTransferConfigEncryptionConfigurationArgs{\n\t\t\t\tKmsKeyName: cryptoKey.ID(),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tpermissions,\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.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.bigquery.DataTransferConfig;\nimport com.pulumi.gcp.bigquery.DataTransferConfigArgs;\nimport com.pulumi.gcp.bigquery.inputs.DataTransferConfigEncryptionConfigurationArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var permissions = new IAMMember(\"permissions\", IAMMemberArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/iam.serviceAccountTokenCreator\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var myDataset = new Dataset(\"myDataset\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .friendlyName(\"foo\")\n .description(\"bar\")\n .location(\"asia-northeast1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(permissions)\n .build());\n\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder()\n .name(\"example-keyring\")\n .location(\"us\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder()\n .name(\"example-key\")\n .keyRing(keyRing.id())\n .build());\n\n var queryConfigCmek = new DataTransferConfig(\"queryConfigCmek\", DataTransferConfigArgs.builder()\n .displayName(\"\")\n .location(\"asia-northeast1\")\n .dataSourceId(\"scheduled_query\")\n .schedule(\"first sunday of quarter 00:00\")\n .destinationDatasetId(myDataset.datasetId())\n .params(Map.ofEntries(\n Map.entry(\"destination_table_name_template\", \"my_table\"),\n Map.entry(\"write_disposition\", \"WRITE_APPEND\"),\n Map.entry(\"query\", \"SELECT name FROM tabl WHERE x = 'y'\")\n ))\n .encryptionConfiguration(DataTransferConfigEncryptionConfigurationArgs.builder()\n .kmsKeyName(cryptoKey.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(permissions)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n permissions:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/iam.serviceAccountTokenCreator\n member: serviceAccount:service-${project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\n queryConfigCmek:\n type: gcp:bigquery:DataTransferConfig\n name: query_config_cmek\n properties:\n displayName:\n location: asia-northeast1\n dataSourceId: scheduled_query\n schedule: first sunday of quarter 00:00\n destinationDatasetId: ${myDataset.datasetId}\n params:\n destination_table_name_template: my_table\n write_disposition: WRITE_APPEND\n query: SELECT name FROM tabl WHERE x = 'y'\n encryptionConfiguration:\n kmsKeyName: ${cryptoKey.id}\n options:\n dependson:\n - ${permissions}\n myDataset:\n type: gcp:bigquery:Dataset\n name: my_dataset\n properties:\n datasetId: example_dataset\n friendlyName: foo\n description: bar\n location: asia-northeast1\n options:\n dependson:\n - ${permissions}\n cryptoKey:\n type: gcp:kms:CryptoKey\n name: crypto_key\n properties:\n name: example-key\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n name: key_ring\n properties:\n name: example-keyring\n location: us\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquerydatatransfer Config Salesforce\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst myDataset = new gcp.bigquery.Dataset(\"my_dataset\", {\n datasetId: \"my_dataset\",\n description: \"My dataset\",\n location: \"asia-northeast1\",\n});\nconst salesforceConfig = new gcp.bigquery.DataTransferConfig(\"salesforce_config\", {\n displayName: \"my-salesforce-config\",\n location: \"asia-northeast1\",\n dataSourceId: \"salesforce\",\n schedule: \"first sunday of quarter 00:00\",\n destinationDatasetId: myDataset.datasetId,\n params: {\n \"connector.authentication.oauth.clientId\": \"client-id\",\n \"connector.authentication.oauth.clientSecret\": \"client-secret\",\n \"connector.authentication.oauth.myDomain\": \"MyDomainName\",\n assets: \"[\\\"asset-a\\\",\\\"asset-b\\\"]\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nmy_dataset = gcp.bigquery.Dataset(\"my_dataset\",\n dataset_id=\"my_dataset\",\n description=\"My dataset\",\n location=\"asia-northeast1\")\nsalesforce_config = gcp.bigquery.DataTransferConfig(\"salesforce_config\",\n display_name=\"my-salesforce-config\",\n location=\"asia-northeast1\",\n data_source_id=\"salesforce\",\n schedule=\"first sunday of quarter 00:00\",\n destination_dataset_id=my_dataset.dataset_id,\n params={\n \"connector.authentication.oauth.clientId\": \"client-id\",\n \"connector.authentication.oauth.clientSecret\": \"client-secret\",\n \"connector.authentication.oauth.myDomain\": \"MyDomainName\",\n \"assets\": \"[\\\"asset-a\\\",\\\"asset-b\\\"]\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var myDataset = new Gcp.BigQuery.Dataset(\"my_dataset\", new()\n {\n DatasetId = \"my_dataset\",\n Description = \"My dataset\",\n Location = \"asia-northeast1\",\n });\n\n var salesforceConfig = new Gcp.BigQuery.DataTransferConfig(\"salesforce_config\", new()\n {\n DisplayName = \"my-salesforce-config\",\n Location = \"asia-northeast1\",\n DataSourceId = \"salesforce\",\n Schedule = \"first sunday of quarter 00:00\",\n DestinationDatasetId = myDataset.DatasetId,\n Params = \n {\n { \"connector.authentication.oauth.clientId\", \"client-id\" },\n { \"connector.authentication.oauth.clientSecret\", \"client-secret\" },\n { \"connector.authentication.oauth.myDomain\", \"MyDomainName\" },\n { \"assets\", \"[\\\"asset-a\\\",\\\"asset-b\\\"]\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyDataset, err := bigquery.NewDataset(ctx, \"my_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"my_dataset\"),\n\t\t\tDescription: pulumi.String(\"My dataset\"),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataTransferConfig(ctx, \"salesforce_config\", \u0026bigquery.DataTransferConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"my-salesforce-config\"),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t\tDataSourceId: pulumi.String(\"salesforce\"),\n\t\t\tSchedule: pulumi.String(\"first sunday of quarter 00:00\"),\n\t\t\tDestinationDatasetId: myDataset.DatasetId,\n\t\t\tParams: pulumi.StringMap{\n\t\t\t\t\"connector.authentication.oauth.clientId\": pulumi.String(\"client-id\"),\n\t\t\t\t\"connector.authentication.oauth.clientSecret\": pulumi.String(\"client-secret\"),\n\t\t\t\t\"connector.authentication.oauth.myDomain\": pulumi.String(\"MyDomainName\"),\n\t\t\t\t\"assets\": pulumi.String(\"[\\\"asset-a\\\",\\\"asset-b\\\"]\"),\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.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.DataTransferConfig;\nimport com.pulumi.gcp.bigquery.DataTransferConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var myDataset = new Dataset(\"myDataset\", DatasetArgs.builder()\n .datasetId(\"my_dataset\")\n .description(\"My dataset\")\n .location(\"asia-northeast1\")\n .build());\n\n var salesforceConfig = new DataTransferConfig(\"salesforceConfig\", DataTransferConfigArgs.builder()\n .displayName(\"my-salesforce-config\")\n .location(\"asia-northeast1\")\n .dataSourceId(\"salesforce\")\n .schedule(\"first sunday of quarter 00:00\")\n .destinationDatasetId(myDataset.datasetId())\n .params(Map.ofEntries(\n Map.entry(\"connector.authentication.oauth.clientId\", \"client-id\"),\n Map.entry(\"connector.authentication.oauth.clientSecret\", \"client-secret\"),\n Map.entry(\"connector.authentication.oauth.myDomain\", \"MyDomainName\"),\n Map.entry(\"assets\", \"[\\\"asset-a\\\",\\\"asset-b\\\"]\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myDataset:\n type: gcp:bigquery:Dataset\n name: my_dataset\n properties:\n datasetId: my_dataset\n description: My dataset\n location: asia-northeast1\n salesforceConfig:\n type: gcp:bigquery:DataTransferConfig\n name: salesforce_config\n properties:\n displayName: my-salesforce-config\n location: asia-northeast1\n dataSourceId: salesforce\n schedule: first sunday of quarter 00:00\n destinationDatasetId: ${myDataset.datasetId}\n params:\n connector.authentication.oauth.clientId: client-id\n connector.authentication.oauth.clientSecret: client-secret\n connector.authentication.oauth.myDomain: MyDomainName\n assets: '[\"asset-a\",\"asset-b\"]'\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nConfig can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Config can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:bigquery/dataTransferConfig:DataTransferConfig default {{name}}\n```\n\n", + "description": "Represents a data transfer configuration. A transfer configuration\ncontains all metadata needed to perform a data transfer.\n\n\nTo get more information about Config, see:\n\n* [API documentation](https://cloud.google.com/bigquery/docs/reference/datatransfer/rest/v1/projects.locations.transferConfigs/create)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/bigquery/docs/reference/datatransfer/rest/)\n\n\n\n## Example Usage\n\n### Bigquerydatatransfer Config Scheduled Query\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst permissions = new gcp.projects.IAMMember(\"permissions\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/iam.serviceAccountTokenCreator\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com`),\n});\nconst myDataset = new gcp.bigquery.Dataset(\"my_dataset\", {\n datasetId: \"my_dataset\",\n friendlyName: \"foo\",\n description: \"bar\",\n location: \"asia-northeast1\",\n}, {\n dependsOn: [permissions],\n});\nconst queryConfig = new gcp.bigquery.DataTransferConfig(\"query_config\", {\n displayName: \"my-query\",\n location: \"asia-northeast1\",\n dataSourceId: \"scheduled_query\",\n schedule: \"first sunday of quarter 00:00\",\n destinationDatasetId: myDataset.datasetId,\n params: {\n destination_table_name_template: \"my_table\",\n write_disposition: \"WRITE_APPEND\",\n query: \"SELECT name FROM tabl WHERE x = 'y'\",\n },\n}, {\n dependsOn: [permissions],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\npermissions = gcp.projects.IAMMember(\"permissions\",\n project=project.project_id,\n role=\"roles/iam.serviceAccountTokenCreator\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\")\nmy_dataset = gcp.bigquery.Dataset(\"my_dataset\",\n dataset_id=\"my_dataset\",\n friendly_name=\"foo\",\n description=\"bar\",\n location=\"asia-northeast1\",\n opts = pulumi.ResourceOptions(depends_on=[permissions]))\nquery_config = gcp.bigquery.DataTransferConfig(\"query_config\",\n display_name=\"my-query\",\n location=\"asia-northeast1\",\n data_source_id=\"scheduled_query\",\n schedule=\"first sunday of quarter 00:00\",\n destination_dataset_id=my_dataset.dataset_id,\n params={\n \"destination_table_name_template\": \"my_table\",\n \"write_disposition\": \"WRITE_APPEND\",\n \"query\": \"SELECT name FROM tabl WHERE x = 'y'\",\n },\n opts = pulumi.ResourceOptions(depends_on=[permissions]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var permissions = new Gcp.Projects.IAMMember(\"permissions\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/iam.serviceAccountTokenCreator\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\",\n });\n\n var myDataset = new Gcp.BigQuery.Dataset(\"my_dataset\", new()\n {\n DatasetId = \"my_dataset\",\n FriendlyName = \"foo\",\n Description = \"bar\",\n Location = \"asia-northeast1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n permissions,\n },\n });\n\n var queryConfig = new Gcp.BigQuery.DataTransferConfig(\"query_config\", new()\n {\n DisplayName = \"my-query\",\n Location = \"asia-northeast1\",\n DataSourceId = \"scheduled_query\",\n Schedule = \"first sunday of quarter 00:00\",\n DestinationDatasetId = myDataset.DatasetId,\n Params = \n {\n { \"destination_table_name_template\", \"my_table\" },\n { \"write_disposition\", \"WRITE_APPEND\" },\n { \"query\", \"SELECT name FROM tabl WHERE x = 'y'\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n permissions,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpermissions, err := projects.NewIAMMember(ctx, \"permissions\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountTokenCreator\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyDataset, err := bigquery.NewDataset(ctx, \"my_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"my_dataset\"),\n\t\t\tFriendlyName: pulumi.String(\"foo\"),\n\t\t\tDescription: pulumi.String(\"bar\"),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tpermissions,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataTransferConfig(ctx, \"query_config\", \u0026bigquery.DataTransferConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"my-query\"),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t\tDataSourceId: pulumi.String(\"scheduled_query\"),\n\t\t\tSchedule: pulumi.String(\"first sunday of quarter 00:00\"),\n\t\t\tDestinationDatasetId: myDataset.DatasetId,\n\t\t\tParams: pulumi.StringMap{\n\t\t\t\t\"destination_table_name_template\": pulumi.String(\"my_table\"),\n\t\t\t\t\"write_disposition\": pulumi.String(\"WRITE_APPEND\"),\n\t\t\t\t\"query\": pulumi.String(\"SELECT name FROM tabl WHERE x = 'y'\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tpermissions,\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.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.DataTransferConfig;\nimport com.pulumi.gcp.bigquery.DataTransferConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var permissions = new IAMMember(\"permissions\", IAMMemberArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/iam.serviceAccountTokenCreator\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var myDataset = new Dataset(\"myDataset\", DatasetArgs.builder()\n .datasetId(\"my_dataset\")\n .friendlyName(\"foo\")\n .description(\"bar\")\n .location(\"asia-northeast1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(permissions)\n .build());\n\n var queryConfig = new DataTransferConfig(\"queryConfig\", DataTransferConfigArgs.builder()\n .displayName(\"my-query\")\n .location(\"asia-northeast1\")\n .dataSourceId(\"scheduled_query\")\n .schedule(\"first sunday of quarter 00:00\")\n .destinationDatasetId(myDataset.datasetId())\n .params(Map.ofEntries(\n Map.entry(\"destination_table_name_template\", \"my_table\"),\n Map.entry(\"write_disposition\", \"WRITE_APPEND\"),\n Map.entry(\"query\", \"SELECT name FROM tabl WHERE x = 'y'\")\n ))\n .build(), CustomResourceOptions.builder()\n .dependsOn(permissions)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n permissions:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/iam.serviceAccountTokenCreator\n member: serviceAccount:service-${project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\n queryConfig:\n type: gcp:bigquery:DataTransferConfig\n name: query_config\n properties:\n displayName: my-query\n location: asia-northeast1\n dataSourceId: scheduled_query\n schedule: first sunday of quarter 00:00\n destinationDatasetId: ${myDataset.datasetId}\n params:\n destination_table_name_template: my_table\n write_disposition: WRITE_APPEND\n query: SELECT name FROM tabl WHERE x = 'y'\n options:\n dependson:\n - ${permissions}\n myDataset:\n type: gcp:bigquery:Dataset\n name: my_dataset\n properties:\n datasetId: my_dataset\n friendlyName: foo\n description: bar\n location: asia-northeast1\n options:\n dependson:\n - ${permissions}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquerydatatransfer Config Cmek\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst permissions = new gcp.projects.IAMMember(\"permissions\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/iam.serviceAccountTokenCreator\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com`),\n});\nconst myDataset = new gcp.bigquery.Dataset(\"my_dataset\", {\n datasetId: \"example_dataset\",\n friendlyName: \"foo\",\n description: \"bar\",\n location: \"asia-northeast1\",\n}, {\n dependsOn: [permissions],\n});\nconst keyRing = new gcp.kms.KeyRing(\"key_ring\", {\n name: \"example-keyring\",\n location: \"us\",\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"crypto_key\", {\n name: \"example-key\",\n keyRing: keyRing.id,\n});\nconst queryConfigCmek = new gcp.bigquery.DataTransferConfig(\"query_config_cmek\", {\n displayName: \"\",\n location: \"asia-northeast1\",\n dataSourceId: \"scheduled_query\",\n schedule: \"first sunday of quarter 00:00\",\n destinationDatasetId: myDataset.datasetId,\n params: {\n destination_table_name_template: \"my_table\",\n write_disposition: \"WRITE_APPEND\",\n query: \"SELECT name FROM tabl WHERE x = 'y'\",\n },\n encryptionConfiguration: {\n kmsKeyName: cryptoKey.id,\n },\n}, {\n dependsOn: [permissions],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\npermissions = gcp.projects.IAMMember(\"permissions\",\n project=project.project_id,\n role=\"roles/iam.serviceAccountTokenCreator\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\")\nmy_dataset = gcp.bigquery.Dataset(\"my_dataset\",\n dataset_id=\"example_dataset\",\n friendly_name=\"foo\",\n description=\"bar\",\n location=\"asia-northeast1\",\n opts = pulumi.ResourceOptions(depends_on=[permissions]))\nkey_ring = gcp.kms.KeyRing(\"key_ring\",\n name=\"example-keyring\",\n location=\"us\")\ncrypto_key = gcp.kms.CryptoKey(\"crypto_key\",\n name=\"example-key\",\n key_ring=key_ring.id)\nquery_config_cmek = gcp.bigquery.DataTransferConfig(\"query_config_cmek\",\n display_name=\"\",\n location=\"asia-northeast1\",\n data_source_id=\"scheduled_query\",\n schedule=\"first sunday of quarter 00:00\",\n destination_dataset_id=my_dataset.dataset_id,\n params={\n \"destination_table_name_template\": \"my_table\",\n \"write_disposition\": \"WRITE_APPEND\",\n \"query\": \"SELECT name FROM tabl WHERE x = 'y'\",\n },\n encryption_configuration={\n \"kms_key_name\": crypto_key.id,\n },\n opts = pulumi.ResourceOptions(depends_on=[permissions]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var permissions = new Gcp.Projects.IAMMember(\"permissions\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/iam.serviceAccountTokenCreator\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\",\n });\n\n var myDataset = new Gcp.BigQuery.Dataset(\"my_dataset\", new()\n {\n DatasetId = \"example_dataset\",\n FriendlyName = \"foo\",\n Description = \"bar\",\n Location = \"asia-northeast1\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n permissions,\n },\n });\n\n var keyRing = new Gcp.Kms.KeyRing(\"key_ring\", new()\n {\n Name = \"example-keyring\",\n Location = \"us\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"crypto_key\", new()\n {\n Name = \"example-key\",\n KeyRing = keyRing.Id,\n });\n\n var queryConfigCmek = new Gcp.BigQuery.DataTransferConfig(\"query_config_cmek\", new()\n {\n DisplayName = \"\",\n Location = \"asia-northeast1\",\n DataSourceId = \"scheduled_query\",\n Schedule = \"first sunday of quarter 00:00\",\n DestinationDatasetId = myDataset.DatasetId,\n Params = \n {\n { \"destination_table_name_template\", \"my_table\" },\n { \"write_disposition\", \"WRITE_APPEND\" },\n { \"query\", \"SELECT name FROM tabl WHERE x = 'y'\" },\n },\n EncryptionConfiguration = new Gcp.BigQuery.Inputs.DataTransferConfigEncryptionConfigurationArgs\n {\n KmsKeyName = cryptoKey.Id,\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n permissions,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpermissions, err := projects.NewIAMMember(ctx, \"permissions\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountTokenCreator\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\", project.Number),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyDataset, err := bigquery.NewDataset(ctx, \"my_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_dataset\"),\n\t\t\tFriendlyName: pulumi.String(\"foo\"),\n\t\t\tDescription: pulumi.String(\"bar\"),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tpermissions,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyRing, err := kms.NewKeyRing(ctx, \"key_ring\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"example-keyring\"),\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"crypto_key\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"example-key\"),\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataTransferConfig(ctx, \"query_config_cmek\", \u0026bigquery.DataTransferConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"\"),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t\tDataSourceId: pulumi.String(\"scheduled_query\"),\n\t\t\tSchedule: pulumi.String(\"first sunday of quarter 00:00\"),\n\t\t\tDestinationDatasetId: myDataset.DatasetId,\n\t\t\tParams: pulumi.StringMap{\n\t\t\t\t\"destination_table_name_template\": pulumi.String(\"my_table\"),\n\t\t\t\t\"write_disposition\": pulumi.String(\"WRITE_APPEND\"),\n\t\t\t\t\"query\": pulumi.String(\"SELECT name FROM tabl WHERE x = 'y'\"),\n\t\t\t},\n\t\t\tEncryptionConfiguration: \u0026bigquery.DataTransferConfigEncryptionConfigurationArgs{\n\t\t\t\tKmsKeyName: cryptoKey.ID(),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tpermissions,\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.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.bigquery.DataTransferConfig;\nimport com.pulumi.gcp.bigquery.DataTransferConfigArgs;\nimport com.pulumi.gcp.bigquery.inputs.DataTransferConfigEncryptionConfigurationArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var permissions = new IAMMember(\"permissions\", IAMMemberArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/iam.serviceAccountTokenCreator\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var myDataset = new Dataset(\"myDataset\", DatasetArgs.builder()\n .datasetId(\"example_dataset\")\n .friendlyName(\"foo\")\n .description(\"bar\")\n .location(\"asia-northeast1\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(permissions)\n .build());\n\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder()\n .name(\"example-keyring\")\n .location(\"us\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder()\n .name(\"example-key\")\n .keyRing(keyRing.id())\n .build());\n\n var queryConfigCmek = new DataTransferConfig(\"queryConfigCmek\", DataTransferConfigArgs.builder()\n .displayName(\"\")\n .location(\"asia-northeast1\")\n .dataSourceId(\"scheduled_query\")\n .schedule(\"first sunday of quarter 00:00\")\n .destinationDatasetId(myDataset.datasetId())\n .params(Map.ofEntries(\n Map.entry(\"destination_table_name_template\", \"my_table\"),\n Map.entry(\"write_disposition\", \"WRITE_APPEND\"),\n Map.entry(\"query\", \"SELECT name FROM tabl WHERE x = 'y'\")\n ))\n .encryptionConfiguration(DataTransferConfigEncryptionConfigurationArgs.builder()\n .kmsKeyName(cryptoKey.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(permissions)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n permissions:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/iam.serviceAccountTokenCreator\n member: serviceAccount:service-${project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\n queryConfigCmek:\n type: gcp:bigquery:DataTransferConfig\n name: query_config_cmek\n properties:\n displayName:\n location: asia-northeast1\n dataSourceId: scheduled_query\n schedule: first sunday of quarter 00:00\n destinationDatasetId: ${myDataset.datasetId}\n params:\n destination_table_name_template: my_table\n write_disposition: WRITE_APPEND\n query: SELECT name FROM tabl WHERE x = 'y'\n encryptionConfiguration:\n kmsKeyName: ${cryptoKey.id}\n options:\n dependson:\n - ${permissions}\n myDataset:\n type: gcp:bigquery:Dataset\n name: my_dataset\n properties:\n datasetId: example_dataset\n friendlyName: foo\n description: bar\n location: asia-northeast1\n options:\n dependson:\n - ${permissions}\n cryptoKey:\n type: gcp:kms:CryptoKey\n name: crypto_key\n properties:\n name: example-key\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n name: key_ring\n properties:\n name: example-keyring\n location: us\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Bigquerydatatransfer Config Salesforce\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst myDataset = new gcp.bigquery.Dataset(\"my_dataset\", {\n datasetId: \"my_dataset\",\n description: \"My dataset\",\n location: \"asia-northeast1\",\n});\nconst salesforceConfig = new gcp.bigquery.DataTransferConfig(\"salesforce_config\", {\n displayName: \"my-salesforce-config\",\n location: \"asia-northeast1\",\n dataSourceId: \"salesforce\",\n schedule: \"first sunday of quarter 00:00\",\n destinationDatasetId: myDataset.datasetId,\n params: {\n \"connector.authentication.oauth.clientId\": \"client-id\",\n \"connector.authentication.oauth.clientSecret\": \"client-secret\",\n \"connector.authentication.oauth.myDomain\": \"MyDomainName\",\n assets: \"[\\\"asset-a\\\",\\\"asset-b\\\"]\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nmy_dataset = gcp.bigquery.Dataset(\"my_dataset\",\n dataset_id=\"my_dataset\",\n description=\"My dataset\",\n location=\"asia-northeast1\")\nsalesforce_config = gcp.bigquery.DataTransferConfig(\"salesforce_config\",\n display_name=\"my-salesforce-config\",\n location=\"asia-northeast1\",\n data_source_id=\"salesforce\",\n schedule=\"first sunday of quarter 00:00\",\n destination_dataset_id=my_dataset.dataset_id,\n params={\n \"connector.authentication.oauth.clientId\": \"client-id\",\n \"connector.authentication.oauth.clientSecret\": \"client-secret\",\n \"connector.authentication.oauth.myDomain\": \"MyDomainName\",\n \"assets\": \"[\\\"asset-a\\\",\\\"asset-b\\\"]\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var myDataset = new Gcp.BigQuery.Dataset(\"my_dataset\", new()\n {\n DatasetId = \"my_dataset\",\n Description = \"My dataset\",\n Location = \"asia-northeast1\",\n });\n\n var salesforceConfig = new Gcp.BigQuery.DataTransferConfig(\"salesforce_config\", new()\n {\n DisplayName = \"my-salesforce-config\",\n Location = \"asia-northeast1\",\n DataSourceId = \"salesforce\",\n Schedule = \"first sunday of quarter 00:00\",\n DestinationDatasetId = myDataset.DatasetId,\n Params = \n {\n { \"connector.authentication.oauth.clientId\", \"client-id\" },\n { \"connector.authentication.oauth.clientSecret\", \"client-secret\" },\n { \"connector.authentication.oauth.myDomain\", \"MyDomainName\" },\n { \"assets\", \"[\\\"asset-a\\\",\\\"asset-b\\\"]\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyDataset, err := bigquery.NewDataset(ctx, \"my_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"my_dataset\"),\n\t\t\tDescription: pulumi.String(\"My dataset\"),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataTransferConfig(ctx, \"salesforce_config\", \u0026bigquery.DataTransferConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"my-salesforce-config\"),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t\tDataSourceId: pulumi.String(\"salesforce\"),\n\t\t\tSchedule: pulumi.String(\"first sunday of quarter 00:00\"),\n\t\t\tDestinationDatasetId: myDataset.DatasetId,\n\t\t\tParams: pulumi.StringMap{\n\t\t\t\t\"connector.authentication.oauth.clientId\": pulumi.String(\"client-id\"),\n\t\t\t\t\"connector.authentication.oauth.clientSecret\": pulumi.String(\"client-secret\"),\n\t\t\t\t\"connector.authentication.oauth.myDomain\": pulumi.String(\"MyDomainName\"),\n\t\t\t\t\"assets\": pulumi.String(\"[\\\"asset-a\\\",\\\"asset-b\\\"]\"),\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.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.DataTransferConfig;\nimport com.pulumi.gcp.bigquery.DataTransferConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var myDataset = new Dataset(\"myDataset\", DatasetArgs.builder()\n .datasetId(\"my_dataset\")\n .description(\"My dataset\")\n .location(\"asia-northeast1\")\n .build());\n\n var salesforceConfig = new DataTransferConfig(\"salesforceConfig\", DataTransferConfigArgs.builder()\n .displayName(\"my-salesforce-config\")\n .location(\"asia-northeast1\")\n .dataSourceId(\"salesforce\")\n .schedule(\"first sunday of quarter 00:00\")\n .destinationDatasetId(myDataset.datasetId())\n .params(Map.ofEntries(\n Map.entry(\"connector.authentication.oauth.clientId\", \"client-id\"),\n Map.entry(\"connector.authentication.oauth.clientSecret\", \"client-secret\"),\n Map.entry(\"connector.authentication.oauth.myDomain\", \"MyDomainName\"),\n Map.entry(\"assets\", \"[\\\"asset-a\\\",\\\"asset-b\\\"]\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myDataset:\n type: gcp:bigquery:Dataset\n name: my_dataset\n properties:\n datasetId: my_dataset\n description: My dataset\n location: asia-northeast1\n salesforceConfig:\n type: gcp:bigquery:DataTransferConfig\n name: salesforce_config\n properties:\n displayName: my-salesforce-config\n location: asia-northeast1\n dataSourceId: salesforce\n schedule: first sunday of quarter 00:00\n destinationDatasetId: ${myDataset.datasetId}\n params:\n connector.authentication.oauth.clientId: client-id\n connector.authentication.oauth.clientSecret: client-secret\n connector.authentication.oauth.myDomain: MyDomainName\n assets: '[\"asset-a\",\"asset-b\"]'\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nConfig can be imported using any of these accepted formats:\n\n* `{{project}}/{{name}}`\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Config can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:bigquery/dataTransferConfig:DataTransferConfig default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:bigquery/dataTransferConfig:DataTransferConfig default \"{{project}} {{name}}\"\n```\n\n```sh\n$ pulumi import gcp:bigquery/dataTransferConfig:DataTransferConfig default {{name}}\n```\n\n", "properties": { "dataRefreshWindowDays": { "type": "integer", @@ -153200,7 +155197,7 @@ } }, "gcp:cloudrunv2/job:Job": { - "description": "A Cloud Run Job resource that references a container image which is run to completion.\n\n\nTo get more information about Job, see:\n\n* [API documentation](https://cloud.google.com/run/docs/reference/rest/v2/projects.locations.jobs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/run/docs/)\n\n## Example Usage\n\n### Cloudrunv2 Job Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"template\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\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\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.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\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 default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Limits\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n resources: {\n limits: {\n cpu: \"2\",\n memory: \"1024Mi\",\n },\n },\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"template\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n \"resources\": {\n \"limits\": {\n \"cpu\": \"2\",\n \"memory\": \"1024Mi\",\n },\n },\n }],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n Resources = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerResourcesArgs\n {\n Limits = \n {\n { \"cpu\", \"2\" },\n { \"memory\", \"1024Mi\" },\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t\tResources: \u0026cloudrunv2.JobTemplateTemplateContainerResourcesArgs{\n\t\t\t\t\t\t\t\tLimits: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\t\"cpu\": pulumi.String(\"2\"),\n\t\t\t\t\t\t\t\t\t\"memory\": pulumi.String(\"1024Mi\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\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\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.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\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 default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .resources(JobTemplateTemplateContainerResourcesArgs.builder()\n .limits(Map.ofEntries(\n Map.entry(\"cpu\", \"2\"),\n Map.entry(\"memory\", \"1024Mi\")\n ))\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n resources:\n limits:\n cpu: '2'\n memory: 1024Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Sql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret\",\n replication: {\n auto: {},\n },\n});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"cloudrun-sql\",\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n template: {\n volumes: [{\n name: \"cloudsql\",\n cloudSqlInstance: {\n instances: [instance.connectionName],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n envs: [\n {\n name: \"FOO\",\n value: \"bar\",\n },\n {\n name: \"latestdclsecret\",\n valueSource: {\n secretKeyRef: {\n secret: secret.secretId,\n version: \"1\",\n },\n },\n },\n ],\n volumeMounts: [{\n name: \"cloudsql\",\n mountPath: \"/cloudsql\",\n }],\n }],\n },\n },\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n}, {\n dependsOn: [secret],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret\",\n replication={\n \"auto\": {},\n })\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"cloudrun-sql\",\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings={\n \"tier\": \"db-f1-micro\",\n },\n deletion_protection=True)\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"template\": {\n \"volumes\": [{\n \"name\": \"cloudsql\",\n \"cloud_sql_instance\": {\n \"instances\": [instance.connection_name],\n },\n }],\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n \"envs\": [\n {\n \"name\": \"FOO\",\n \"value\": \"bar\",\n },\n {\n \"name\": \"latestdclsecret\",\n \"value_source\": {\n \"secret_key_ref\": {\n \"secret\": secret.secret_id,\n \"version\": \"1\",\n },\n },\n },\n ],\n \"volume_mounts\": [{\n \"name\": \"cloudsql\",\n \"mount_path\": \"/cloudsql\",\n }],\n }],\n },\n })\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\",\n opts = pulumi.ResourceOptions(depends_on=[secret]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"cloudrun-sql\",\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"cloudsql\",\n CloudSqlInstance = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeCloudSqlInstanceArgs\n {\n Instances = new[]\n {\n instance.ConnectionName,\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvArgs\n {\n Name = \"FOO\",\n Value = \"bar\",\n },\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvArgs\n {\n Name = \"latestdclsecret\",\n ValueSource = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvValueSourceArgs\n {\n SecretKeyRef = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs\n {\n Secret = secret.SecretId,\n Version = \"1\",\n },\n },\n },\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"cloudsql\",\n MountPath = \"/cloudsql\",\n },\n },\n },\n },\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-sql\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\tCloudSqlInstance: \u0026cloudrunv2.JobTemplateTemplateVolumeCloudSqlInstanceArgs{\n\t\t\t\t\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tinstance.ConnectionName,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t\tEnvs: cloudrunv2.JobTemplateTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"FOO\"),\n\t\t\t\t\t\t\t\t\tValue: pulumi.String(\"bar\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"latestdclsecret\"),\n\t\t\t\t\t\t\t\t\tValueSource: \u0026cloudrunv2.JobTemplateTemplateContainerEnvValueSourceArgs{\n\t\t\t\t\t\t\t\t\t\tSecretKeyRef: \u0026cloudrunv2.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs{\n\t\t\t\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/cloudsql\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\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\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret,\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.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 secret = new Secret(\"secret\", SecretArgs.builder()\n .secretId(\"secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(\"cloudrun-sql\")\n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(true)\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"cloudsql\")\n .cloudSqlInstance(JobTemplateTemplateVolumeCloudSqlInstanceArgs.builder()\n .instances(instance.connectionName())\n .build())\n .build())\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .envs( \n JobTemplateTemplateContainerEnvArgs.builder()\n .name(\"FOO\")\n .value(\"bar\")\n .build(),\n JobTemplateTemplateContainerEnvArgs.builder()\n .name(\"latestdclsecret\")\n .valueSource(JobTemplateTemplateContainerEnvValueSourceArgs.builder()\n .secretKeyRef(JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs.builder()\n .secret(secret.secretId())\n .version(\"1\")\n .build())\n .build())\n .build())\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"cloudsql\")\n .mountPath(\"/cloudsql\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder()\n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n template:\n template:\n volumes:\n - name: cloudsql\n cloudSqlInstance:\n instances:\n - ${instance.connectionName}\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n envs:\n - name: FOO\n value: bar\n - name: latestdclsecret\n valueSource:\n secretKeyRef:\n secret: ${secret.secretId}\n version: '1'\n volumeMounts:\n - name: cloudsql\n mountPath: /cloudsql\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n options:\n dependson:\n - ${secret}\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: cloudrun-sql\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n deletionProtection: true\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Vpcaccess\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customTestNetwork = new gcp.compute.Network(\"custom_test\", {\n name: \"run-network\",\n autoCreateSubnetworks: false,\n});\nconst customTest = new gcp.compute.Subnetwork(\"custom_test\", {\n name: \"run-subnetwork\",\n ipCidrRange: \"10.2.0.0/28\",\n region: \"us-central1\",\n network: customTestNetwork.id,\n});\nconst connector = new gcp.vpcaccess.Connector(\"connector\", {\n name: \"run-vpc\",\n subnet: {\n name: customTest.name,\n },\n machineType: \"e2-standard-4\",\n minInstances: 2,\n maxInstances: 3,\n region: \"us-central1\",\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n vpcAccess: {\n connector: connector.id,\n egress: \"ALL_TRAFFIC\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom_test_network = gcp.compute.Network(\"custom_test\",\n name=\"run-network\",\n auto_create_subnetworks=False)\ncustom_test = gcp.compute.Subnetwork(\"custom_test\",\n name=\"run-subnetwork\",\n ip_cidr_range=\"10.2.0.0/28\",\n region=\"us-central1\",\n network=custom_test_network.id)\nconnector = gcp.vpcaccess.Connector(\"connector\",\n name=\"run-vpc\",\n subnet={\n \"name\": custom_test.name,\n },\n machine_type=\"e2-standard-4\",\n min_instances=2,\n max_instances=3,\n region=\"us-central1\")\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"template\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n \"vpc_access\": {\n \"connector\": connector.id,\n \"egress\": \"ALL_TRAFFIC\",\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customTestNetwork = new Gcp.Compute.Network(\"custom_test\", new()\n {\n Name = \"run-network\",\n AutoCreateSubnetworks = false,\n });\n\n var customTest = new Gcp.Compute.Subnetwork(\"custom_test\", new()\n {\n Name = \"run-subnetwork\",\n IpCidrRange = \"10.2.0.0/28\",\n Region = \"us-central1\",\n Network = customTestNetwork.Id,\n });\n\n var connector = new Gcp.VpcAccess.Connector(\"connector\", new()\n {\n Name = \"run-vpc\",\n Subnet = new Gcp.VpcAccess.Inputs.ConnectorSubnetArgs\n {\n Name = customTest.Name,\n },\n MachineType = \"e2-standard-4\",\n MinInstances = 2,\n MaxInstances = 3,\n Region = \"us-central1\",\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessArgs\n {\n Connector = connector.Id,\n Egress = \"ALL_TRAFFIC\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vpcaccess\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomTestNetwork, err := compute.NewNetwork(ctx, \"custom_test\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"run-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcustomTest, err := compute.NewSubnetwork(ctx, \"custom_test\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"run-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.2.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: customTestNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconnector, err := vpcaccess.NewConnector(ctx, \"connector\", \u0026vpcaccess.ConnectorArgs{\n\t\t\tName: pulumi.String(\"run-vpc\"),\n\t\t\tSubnet: \u0026vpcaccess.ConnectorSubnetArgs{\n\t\t\t\tName: customTest.Name,\n\t\t\t},\n\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\tMinInstances: pulumi.Int(2),\n\t\t\tMaxInstances: pulumi.Int(3),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcAccess: \u0026cloudrunv2.JobTemplateTemplateVpcAccessArgs{\n\t\t\t\t\t\tConnector: connector.ID(),\n\t\t\t\t\t\tEgress: pulumi.String(\"ALL_TRAFFIC\"),\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\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.vpcaccess.Connector;\nimport com.pulumi.gcp.vpcaccess.ConnectorArgs;\nimport com.pulumi.gcp.vpcaccess.inputs.ConnectorSubnetArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateVpcAccessArgs;\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 customTestNetwork = new Network(\"customTestNetwork\", NetworkArgs.builder()\n .name(\"run-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var customTest = new Subnetwork(\"customTest\", SubnetworkArgs.builder()\n .name(\"run-subnetwork\")\n .ipCidrRange(\"10.2.0.0/28\")\n .region(\"us-central1\")\n .network(customTestNetwork.id())\n .build());\n\n var connector = new Connector(\"connector\", ConnectorArgs.builder()\n .name(\"run-vpc\")\n .subnet(ConnectorSubnetArgs.builder()\n .name(customTest.name())\n .build())\n .machineType(\"e2-standard-4\")\n .minInstances(2)\n .maxInstances(3)\n .region(\"us-central1\")\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .build())\n .vpcAccess(JobTemplateTemplateVpcAccessArgs.builder()\n .connector(connector.id())\n .egress(\"ALL_TRAFFIC\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n vpcAccess:\n connector: ${connector.id}\n egress: ALL_TRAFFIC\n connector:\n type: gcp:vpcaccess:Connector\n properties:\n name: run-vpc\n subnet:\n name: ${customTest.name}\n machineType: e2-standard-4\n minInstances: 2\n maxInstances: 3\n region: us-central1\n customTest:\n type: gcp:compute:Subnetwork\n name: custom_test\n properties:\n name: run-subnetwork\n ipCidrRange: 10.2.0.0/28\n region: us-central1\n network: ${customTestNetwork.id}\n customTestNetwork:\n type: gcp:compute:Network\n name: custom_test\n properties:\n name: run-network\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Directvpc\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n launchStage: \"GA\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n vpcAccess: {\n networkInterfaces: [{\n network: \"default\",\n subnetwork: \"default\",\n tags: [\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n }],\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n launch_stage=\"GA\",\n template={\n \"template\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n \"vpc_access\": {\n \"network_interfaces\": [{\n \"network\": \"default\",\n \"subnetwork\": \"default\",\n \"tags\": [\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n }],\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n LaunchStage = \"GA\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessArgs\n {\n NetworkInterfaces = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessNetworkInterfaceArgs\n {\n Network = \"default\",\n Subnetwork = \"default\",\n Tags = new[]\n {\n \"tag1\",\n \"tag2\",\n \"tag3\",\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tLaunchStage: pulumi.String(\"GA\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcAccess: \u0026cloudrunv2.JobTemplateTemplateVpcAccessArgs{\n\t\t\t\t\t\tNetworkInterfaces: cloudrunv2.JobTemplateTemplateVpcAccessNetworkInterfaceArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVpcAccessNetworkInterfaceArgs{\n\t\t\t\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\t\tTags: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"tag2\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"tag3\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\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\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.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateVpcAccessArgs;\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 default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .launchStage(\"GA\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .build())\n .vpcAccess(JobTemplateTemplateVpcAccessArgs.builder()\n .networkInterfaces(JobTemplateTemplateVpcAccessNetworkInterfaceArgs.builder()\n .network(\"default\")\n .subnetwork(\"default\")\n .tags( \n \"tag1\",\n \"tag2\",\n \"tag3\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n launchStage: GA\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n vpcAccess:\n networkInterfaces:\n - network: default\n subnetwork: default\n tags:\n - tag1\n - tag2\n - tag3\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Secret\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret\",\n replication: {\n auto: {},\n },\n});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst project = gcp.organizations.getProject({});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n}, {\n dependsOn: [secret],\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n template: {\n volumes: [{\n name: \"a-volume\",\n secret: {\n secret: secret.secretId,\n defaultMode: 292,\n items: [{\n version: \"1\",\n path: \"my-secret\",\n mode: 256,\n }],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n volumeMounts: [{\n name: \"a-volume\",\n mountPath: \"/secrets\",\n }],\n }],\n },\n },\n}, {\n dependsOn: [\n secret_version_data,\n secret_access,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret\",\n replication={\n \"auto\": {},\n })\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nproject = gcp.organizations.get_project()\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\",\n opts = pulumi.ResourceOptions(depends_on=[secret]))\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"template\": {\n \"volumes\": [{\n \"name\": \"a-volume\",\n \"secret\": {\n \"secret\": secret.secret_id,\n \"default_mode\": 292,\n \"items\": [{\n \"version\": \"1\",\n \"path\": \"my-secret\",\n \"mode\": 256,\n }],\n },\n }],\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n \"volume_mounts\": [{\n \"name\": \"a-volume\",\n \"mount_path\": \"/secrets\",\n }],\n }],\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[\n secret_version_data,\n secret_access,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret,\n },\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"a-volume\",\n Secret = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeSecretArgs\n {\n Secret = secret.SecretId,\n DefaultMode = 292,\n Items = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeSecretItemArgs\n {\n Version = \"1\",\n Path = \"my-secret\",\n Mode = 256,\n },\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"a-volume\",\n MountPath = \"/secrets\",\n },\n },\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret_version_data,\n secret_access,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\tSecret: \u0026cloudrunv2.JobTemplateTemplateVolumeSecretArgs{\n\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\tDefaultMode: pulumi.Int(292),\n\t\t\t\t\t\t\t\tItems: cloudrunv2.JobTemplateTemplateVolumeSecretItemArray{\n\t\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeSecretItemArgs{\n\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"my-secret\"),\n\t\t\t\t\t\t\t\t\t\tMode: pulumi.Int(256),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/secrets\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\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}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret_version_data,\n\t\t\tsecret_access,\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.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 secret = new Secret(\"secret\", SecretArgs.builder()\n .secretId(\"secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder()\n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret)\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"a-volume\")\n .secret(JobTemplateTemplateVolumeSecretArgs.builder()\n .secret(secret.secretId())\n .defaultMode(292)\n .items(JobTemplateTemplateVolumeSecretItemArgs.builder()\n .version(\"1\")\n .path(\"my-secret\")\n .mode(256)\n .build())\n .build())\n .build())\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"a-volume\")\n .mountPath(\"/secrets\")\n .build())\n .build())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n secret_version_data,\n secret_access)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n template:\n template:\n volumes:\n - name: a-volume\n secret:\n secret: ${secret.secretId}\n defaultMode: 292\n items:\n - version: '1'\n path: my-secret\n mode: 256\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n volumeMounts:\n - name: a-volume\n mountPath: /secrets\n options:\n dependson:\n - ${[\"secret-version-data\"]}\n - ${[\"secret-access\"]}\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n options:\n dependson:\n - ${secret}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Emptydir\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n launchStage: \"BETA\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n volumeMounts: [{\n name: \"empty-dir-volume\",\n mountPath: \"/mnt\",\n }],\n }],\n volumes: [{\n name: \"empty-dir-volume\",\n emptyDir: {\n medium: \"MEMORY\",\n sizeLimit: \"128Mi\",\n },\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n launch_stage=\"BETA\",\n template={\n \"template\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n \"volume_mounts\": [{\n \"name\": \"empty-dir-volume\",\n \"mount_path\": \"/mnt\",\n }],\n }],\n \"volumes\": [{\n \"name\": \"empty-dir-volume\",\n \"empty_dir\": {\n \"medium\": \"MEMORY\",\n \"size_limit\": \"128Mi\",\n },\n }],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"empty-dir-volume\",\n MountPath = \"/mnt\",\n },\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"empty-dir-volume\",\n EmptyDir = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeEmptyDirArgs\n {\n Medium = \"MEMORY\",\n SizeLimit = \"128Mi\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/mnt\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\t\tEmptyDir: \u0026cloudrunv2.JobTemplateTemplateVolumeEmptyDirArgs{\n\t\t\t\t\t\t\t\tMedium: pulumi.String(\"MEMORY\"),\n\t\t\t\t\t\t\t\tSizeLimit: pulumi.String(\"128Mi\"),\n\t\t\t\t\t\t\t},\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\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.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\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 default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .launchStage(\"BETA\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"empty-dir-volume\")\n .mountPath(\"/mnt\")\n .build())\n .build())\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"empty-dir-volume\")\n .emptyDir(JobTemplateTemplateVolumeEmptyDirArgs.builder()\n .medium(\"MEMORY\")\n .sizeLimit(\"128Mi\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n launchStage: BETA\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n volumeMounts:\n - name: empty-dir-volume\n mountPath: /mnt\n volumes:\n - name: empty-dir-volume\n emptyDir:\n medium: MEMORY\n sizeLimit: 128Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Run Job\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n startExecutionToken: \"start-once-created\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n start_execution_token=\"start-once-created\",\n template={\n \"template\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n StartExecutionToken = \"start-once-created\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tStartExecutionToken: pulumi.String(\"start-once-created\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\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\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.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\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 default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .startExecutionToken(\"start-once-created\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n startExecutionToken: start-once-created\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nJob can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/jobs/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Job can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:cloudrunv2/job:Job default projects/{{project}}/locations/{{location}}/jobs/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/job:Job default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/job:Job default {{location}}/{{name}}\n```\n\n", + "description": "A Cloud Run Job resource that references a container image which is run to completion.\n\n\nTo get more information about Job, see:\n\n* [API documentation](https://cloud.google.com/run/docs/reference/rest/v2/projects.locations.jobs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/run/docs/)\n\n## Example Usage\n\n### Cloudrunv2 Job Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"template\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\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\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.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\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 default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Limits\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n resources: {\n limits: {\n cpu: \"2\",\n memory: \"1024Mi\",\n },\n },\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"template\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n \"resources\": {\n \"limits\": {\n \"cpu\": \"2\",\n \"memory\": \"1024Mi\",\n },\n },\n }],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n Resources = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerResourcesArgs\n {\n Limits = \n {\n { \"cpu\", \"2\" },\n { \"memory\", \"1024Mi\" },\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t\tResources: \u0026cloudrunv2.JobTemplateTemplateContainerResourcesArgs{\n\t\t\t\t\t\t\t\tLimits: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\t\"cpu\": pulumi.String(\"2\"),\n\t\t\t\t\t\t\t\t\t\"memory\": pulumi.String(\"1024Mi\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\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\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.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\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 default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .resources(JobTemplateTemplateContainerResourcesArgs.builder()\n .limits(Map.ofEntries(\n Map.entry(\"cpu\", \"2\"),\n Map.entry(\"memory\", \"1024Mi\")\n ))\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n resources:\n limits:\n cpu: '2'\n memory: 1024Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Sql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret\",\n replication: {\n auto: {},\n },\n});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"cloudrun-sql\",\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n template: {\n volumes: [{\n name: \"cloudsql\",\n cloudSqlInstance: {\n instances: [instance.connectionName],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n envs: [\n {\n name: \"FOO\",\n value: \"bar\",\n },\n {\n name: \"latestdclsecret\",\n valueSource: {\n secretKeyRef: {\n secret: secret.secretId,\n version: \"1\",\n },\n },\n },\n ],\n volumeMounts: [{\n name: \"cloudsql\",\n mountPath: \"/cloudsql\",\n }],\n }],\n },\n },\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n}, {\n dependsOn: [secret],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret\",\n replication={\n \"auto\": {},\n })\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"cloudrun-sql\",\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings={\n \"tier\": \"db-f1-micro\",\n },\n deletion_protection=True)\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"template\": {\n \"volumes\": [{\n \"name\": \"cloudsql\",\n \"cloud_sql_instance\": {\n \"instances\": [instance.connection_name],\n },\n }],\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n \"envs\": [\n {\n \"name\": \"FOO\",\n \"value\": \"bar\",\n },\n {\n \"name\": \"latestdclsecret\",\n \"value_source\": {\n \"secret_key_ref\": {\n \"secret\": secret.secret_id,\n \"version\": \"1\",\n },\n },\n },\n ],\n \"volume_mounts\": [{\n \"name\": \"cloudsql\",\n \"mount_path\": \"/cloudsql\",\n }],\n }],\n },\n })\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\",\n opts = pulumi.ResourceOptions(depends_on=[secret]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"cloudrun-sql\",\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"cloudsql\",\n CloudSqlInstance = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeCloudSqlInstanceArgs\n {\n Instances = new[]\n {\n instance.ConnectionName,\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvArgs\n {\n Name = \"FOO\",\n Value = \"bar\",\n },\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvArgs\n {\n Name = \"latestdclsecret\",\n ValueSource = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvValueSourceArgs\n {\n SecretKeyRef = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs\n {\n Secret = secret.SecretId,\n Version = \"1\",\n },\n },\n },\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"cloudsql\",\n MountPath = \"/cloudsql\",\n },\n },\n },\n },\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-sql\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\tCloudSqlInstance: \u0026cloudrunv2.JobTemplateTemplateVolumeCloudSqlInstanceArgs{\n\t\t\t\t\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tinstance.ConnectionName,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t\tEnvs: cloudrunv2.JobTemplateTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"FOO\"),\n\t\t\t\t\t\t\t\t\tValue: pulumi.String(\"bar\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"latestdclsecret\"),\n\t\t\t\t\t\t\t\t\tValueSource: \u0026cloudrunv2.JobTemplateTemplateContainerEnvValueSourceArgs{\n\t\t\t\t\t\t\t\t\t\tSecretKeyRef: \u0026cloudrunv2.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs{\n\t\t\t\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/cloudsql\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\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\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret,\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.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 secret = new Secret(\"secret\", SecretArgs.builder()\n .secretId(\"secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(\"cloudrun-sql\")\n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(true)\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"cloudsql\")\n .cloudSqlInstance(JobTemplateTemplateVolumeCloudSqlInstanceArgs.builder()\n .instances(instance.connectionName())\n .build())\n .build())\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .envs( \n JobTemplateTemplateContainerEnvArgs.builder()\n .name(\"FOO\")\n .value(\"bar\")\n .build(),\n JobTemplateTemplateContainerEnvArgs.builder()\n .name(\"latestdclsecret\")\n .valueSource(JobTemplateTemplateContainerEnvValueSourceArgs.builder()\n .secretKeyRef(JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs.builder()\n .secret(secret.secretId())\n .version(\"1\")\n .build())\n .build())\n .build())\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"cloudsql\")\n .mountPath(\"/cloudsql\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder()\n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n template:\n template:\n volumes:\n - name: cloudsql\n cloudSqlInstance:\n instances:\n - ${instance.connectionName}\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n envs:\n - name: FOO\n value: bar\n - name: latestdclsecret\n valueSource:\n secretKeyRef:\n secret: ${secret.secretId}\n version: '1'\n volumeMounts:\n - name: cloudsql\n mountPath: /cloudsql\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n options:\n dependson:\n - ${secret}\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: cloudrun-sql\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n deletionProtection: true\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Vpcaccess\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customTestNetwork = new gcp.compute.Network(\"custom_test\", {\n name: \"run-network\",\n autoCreateSubnetworks: false,\n});\nconst customTest = new gcp.compute.Subnetwork(\"custom_test\", {\n name: \"run-subnetwork\",\n ipCidrRange: \"10.2.0.0/28\",\n region: \"us-central1\",\n network: customTestNetwork.id,\n});\nconst connector = new gcp.vpcaccess.Connector(\"connector\", {\n name: \"run-vpc\",\n subnet: {\n name: customTest.name,\n },\n machineType: \"e2-standard-4\",\n minInstances: 2,\n maxInstances: 3,\n region: \"us-central1\",\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n vpcAccess: {\n connector: connector.id,\n egress: \"ALL_TRAFFIC\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom_test_network = gcp.compute.Network(\"custom_test\",\n name=\"run-network\",\n auto_create_subnetworks=False)\ncustom_test = gcp.compute.Subnetwork(\"custom_test\",\n name=\"run-subnetwork\",\n ip_cidr_range=\"10.2.0.0/28\",\n region=\"us-central1\",\n network=custom_test_network.id)\nconnector = gcp.vpcaccess.Connector(\"connector\",\n name=\"run-vpc\",\n subnet={\n \"name\": custom_test.name,\n },\n machine_type=\"e2-standard-4\",\n min_instances=2,\n max_instances=3,\n region=\"us-central1\")\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"template\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n \"vpc_access\": {\n \"connector\": connector.id,\n \"egress\": \"ALL_TRAFFIC\",\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customTestNetwork = new Gcp.Compute.Network(\"custom_test\", new()\n {\n Name = \"run-network\",\n AutoCreateSubnetworks = false,\n });\n\n var customTest = new Gcp.Compute.Subnetwork(\"custom_test\", new()\n {\n Name = \"run-subnetwork\",\n IpCidrRange = \"10.2.0.0/28\",\n Region = \"us-central1\",\n Network = customTestNetwork.Id,\n });\n\n var connector = new Gcp.VpcAccess.Connector(\"connector\", new()\n {\n Name = \"run-vpc\",\n Subnet = new Gcp.VpcAccess.Inputs.ConnectorSubnetArgs\n {\n Name = customTest.Name,\n },\n MachineType = \"e2-standard-4\",\n MinInstances = 2,\n MaxInstances = 3,\n Region = \"us-central1\",\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessArgs\n {\n Connector = connector.Id,\n Egress = \"ALL_TRAFFIC\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vpcaccess\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomTestNetwork, err := compute.NewNetwork(ctx, \"custom_test\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"run-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcustomTest, err := compute.NewSubnetwork(ctx, \"custom_test\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"run-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.2.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: customTestNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconnector, err := vpcaccess.NewConnector(ctx, \"connector\", \u0026vpcaccess.ConnectorArgs{\n\t\t\tName: pulumi.String(\"run-vpc\"),\n\t\t\tSubnet: \u0026vpcaccess.ConnectorSubnetArgs{\n\t\t\t\tName: customTest.Name,\n\t\t\t},\n\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\tMinInstances: pulumi.Int(2),\n\t\t\tMaxInstances: pulumi.Int(3),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcAccess: \u0026cloudrunv2.JobTemplateTemplateVpcAccessArgs{\n\t\t\t\t\t\tConnector: connector.ID(),\n\t\t\t\t\t\tEgress: pulumi.String(\"ALL_TRAFFIC\"),\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\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.vpcaccess.Connector;\nimport com.pulumi.gcp.vpcaccess.ConnectorArgs;\nimport com.pulumi.gcp.vpcaccess.inputs.ConnectorSubnetArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateVpcAccessArgs;\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 customTestNetwork = new Network(\"customTestNetwork\", NetworkArgs.builder()\n .name(\"run-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var customTest = new Subnetwork(\"customTest\", SubnetworkArgs.builder()\n .name(\"run-subnetwork\")\n .ipCidrRange(\"10.2.0.0/28\")\n .region(\"us-central1\")\n .network(customTestNetwork.id())\n .build());\n\n var connector = new Connector(\"connector\", ConnectorArgs.builder()\n .name(\"run-vpc\")\n .subnet(ConnectorSubnetArgs.builder()\n .name(customTest.name())\n .build())\n .machineType(\"e2-standard-4\")\n .minInstances(2)\n .maxInstances(3)\n .region(\"us-central1\")\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .build())\n .vpcAccess(JobTemplateTemplateVpcAccessArgs.builder()\n .connector(connector.id())\n .egress(\"ALL_TRAFFIC\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n vpcAccess:\n connector: ${connector.id}\n egress: ALL_TRAFFIC\n connector:\n type: gcp:vpcaccess:Connector\n properties:\n name: run-vpc\n subnet:\n name: ${customTest.name}\n machineType: e2-standard-4\n minInstances: 2\n maxInstances: 3\n region: us-central1\n customTest:\n type: gcp:compute:Subnetwork\n name: custom_test\n properties:\n name: run-subnetwork\n ipCidrRange: 10.2.0.0/28\n region: us-central1\n network: ${customTestNetwork.id}\n customTestNetwork:\n type: gcp:compute:Network\n name: custom_test\n properties:\n name: run-network\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Directvpc\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n launchStage: \"GA\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n vpcAccess: {\n networkInterfaces: [{\n network: \"default\",\n subnetwork: \"default\",\n tags: [\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n }],\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n launch_stage=\"GA\",\n template={\n \"template\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n \"vpc_access\": {\n \"network_interfaces\": [{\n \"network\": \"default\",\n \"subnetwork\": \"default\",\n \"tags\": [\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n }],\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n LaunchStage = \"GA\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessArgs\n {\n NetworkInterfaces = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessNetworkInterfaceArgs\n {\n Network = \"default\",\n Subnetwork = \"default\",\n Tags = new[]\n {\n \"tag1\",\n \"tag2\",\n \"tag3\",\n },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tLaunchStage: pulumi.String(\"GA\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcAccess: \u0026cloudrunv2.JobTemplateTemplateVpcAccessArgs{\n\t\t\t\t\t\tNetworkInterfaces: cloudrunv2.JobTemplateTemplateVpcAccessNetworkInterfaceArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVpcAccessNetworkInterfaceArgs{\n\t\t\t\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\t\tTags: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"tag2\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"tag3\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\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\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.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateVpcAccessArgs;\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 default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .launchStage(\"GA\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .build())\n .vpcAccess(JobTemplateTemplateVpcAccessArgs.builder()\n .networkInterfaces(JobTemplateTemplateVpcAccessNetworkInterfaceArgs.builder()\n .network(\"default\")\n .subnetwork(\"default\")\n .tags( \n \"tag1\",\n \"tag2\",\n \"tag3\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n launchStage: GA\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n vpcAccess:\n networkInterfaces:\n - network: default\n subnetwork: default\n tags:\n - tag1\n - tag2\n - tag3\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Secret\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret\",\n replication: {\n auto: {},\n },\n});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst project = gcp.organizations.getProject({});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n}, {\n dependsOn: [secret],\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n template: {\n volumes: [{\n name: \"a-volume\",\n secret: {\n secret: secret.secretId,\n defaultMode: 292,\n items: [{\n version: \"1\",\n path: \"my-secret\",\n mode: 256,\n }],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n volumeMounts: [{\n name: \"a-volume\",\n mountPath: \"/secrets\",\n }],\n }],\n },\n },\n}, {\n dependsOn: [\n secret_version_data,\n secret_access,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret\",\n replication={\n \"auto\": {},\n })\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nproject = gcp.organizations.get_project()\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\",\n opts = pulumi.ResourceOptions(depends_on=[secret]))\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"template\": {\n \"volumes\": [{\n \"name\": \"a-volume\",\n \"secret\": {\n \"secret\": secret.secret_id,\n \"default_mode\": 292,\n \"items\": [{\n \"version\": \"1\",\n \"path\": \"my-secret\",\n \"mode\": 256,\n }],\n },\n }],\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n \"volume_mounts\": [{\n \"name\": \"a-volume\",\n \"mount_path\": \"/secrets\",\n }],\n }],\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[\n secret_version_data,\n secret_access,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret,\n },\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"a-volume\",\n Secret = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeSecretArgs\n {\n Secret = secret.SecretId,\n DefaultMode = 292,\n Items = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeSecretItemArgs\n {\n Version = \"1\",\n Path = \"my-secret\",\n Mode = 256,\n },\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"a-volume\",\n MountPath = \"/secrets\",\n },\n },\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret_version_data,\n secret_access,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\tSecret: \u0026cloudrunv2.JobTemplateTemplateVolumeSecretArgs{\n\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\tDefaultMode: pulumi.Int(292),\n\t\t\t\t\t\t\t\tItems: cloudrunv2.JobTemplateTemplateVolumeSecretItemArray{\n\t\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeSecretItemArgs{\n\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"my-secret\"),\n\t\t\t\t\t\t\t\t\t\tMode: pulumi.Int(256),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/secrets\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\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}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret_version_data,\n\t\t\tsecret_access,\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.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 secret = new Secret(\"secret\", SecretArgs.builder()\n .secretId(\"secret\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder()\n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret)\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"a-volume\")\n .secret(JobTemplateTemplateVolumeSecretArgs.builder()\n .secret(secret.secretId())\n .defaultMode(292)\n .items(JobTemplateTemplateVolumeSecretItemArgs.builder()\n .version(\"1\")\n .path(\"my-secret\")\n .mode(256)\n .build())\n .build())\n .build())\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"a-volume\")\n .mountPath(\"/secrets\")\n .build())\n .build())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n secret_version_data,\n secret_access)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n template:\n template:\n volumes:\n - name: a-volume\n secret:\n secret: ${secret.secretId}\n defaultMode: 292\n items:\n - version: '1'\n path: my-secret\n mode: 256\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n volumeMounts:\n - name: a-volume\n mountPath: /secrets\n options:\n dependson:\n - ${[\"secret-version-data\"]}\n - ${[\"secret-access\"]}\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n options:\n dependson:\n - ${secret}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Emptydir\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n volumeMounts: [{\n name: \"empty-dir-volume\",\n mountPath: \"/mnt\",\n }],\n }],\n volumes: [{\n name: \"empty-dir-volume\",\n emptyDir: {\n medium: \"MEMORY\",\n sizeLimit: \"128Mi\",\n },\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"template\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n \"volume_mounts\": [{\n \"name\": \"empty-dir-volume\",\n \"mount_path\": \"/mnt\",\n }],\n }],\n \"volumes\": [{\n \"name\": \"empty-dir-volume\",\n \"empty_dir\": {\n \"medium\": \"MEMORY\",\n \"size_limit\": \"128Mi\",\n },\n }],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"empty-dir-volume\",\n MountPath = \"/mnt\",\n },\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"empty-dir-volume\",\n EmptyDir = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeEmptyDirArgs\n {\n Medium = \"MEMORY\",\n SizeLimit = \"128Mi\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/mnt\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\t\tEmptyDir: \u0026cloudrunv2.JobTemplateTemplateVolumeEmptyDirArgs{\n\t\t\t\t\t\t\t\tMedium: pulumi.String(\"MEMORY\"),\n\t\t\t\t\t\t\t\tSizeLimit: pulumi.String(\"128Mi\"),\n\t\t\t\t\t\t\t},\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\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.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\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 default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"empty-dir-volume\")\n .mountPath(\"/mnt\")\n .build())\n .build())\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"empty-dir-volume\")\n .emptyDir(JobTemplateTemplateVolumeEmptyDirArgs.builder()\n .medium(\"MEMORY\")\n .sizeLimit(\"128Mi\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n volumeMounts:\n - name: empty-dir-volume\n mountPath: /mnt\n volumes:\n - name: empty-dir-volume\n emptyDir:\n medium: MEMORY\n sizeLimit: 128Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Job Run Job\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n name: \"cloudrun-job\",\n location: \"us-central1\",\n deletionProtection: false,\n startExecutionToken: \"start-once-created\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n name=\"cloudrun-job\",\n location=\"us-central1\",\n deletion_protection=False,\n start_execution_token=\"start-once-created\",\n template={\n \"template\": {\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/job\",\n }],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Name = \"cloudrun-job\",\n Location = \"us-central1\",\n DeletionProtection = false,\n StartExecutionToken = \"start-once-created\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/job\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tName: pulumi.String(\"cloudrun-job\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tStartExecutionToken: pulumi.String(\"start-once-created\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/job\"),\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\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.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\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 default_ = new Job(\"default\", JobArgs.builder()\n .name(\"cloudrun-job\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .startExecutionToken(\"start-once-created\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/job\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n name: cloudrun-job\n location: us-central1\n deletionProtection: false\n startExecutionToken: start-once-created\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/job\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nJob can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/jobs/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Job can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:cloudrunv2/job:Job default projects/{{project}}/locations/{{location}}/jobs/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/job:Job default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/job:Job default {{location}}/{{name}}\n```\n\n", "properties": { "annotations": { "type": "object", @@ -153918,7 +155915,7 @@ } }, "gcp:cloudrunv2/service:Service": { - "description": "Service acts as a top-level container that manages a set of configurations and revision templates which implement a network service. Service exists to provide a singular abstraction which can be access controlled, reasoned about, and which encapsulates software lifecycle decisions such as rollout policy and team resource ownership.\n\n\nTo get more information about Service, see:\n\n* [API documentation](https://cloud.google.com/run/docs/reference/rest/v2/projects.locations.services)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/run/docs/)\n\n## Example Usage\n\n### Cloudrunv2 Service Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\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\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.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Limits\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n resources: {\n limits: {\n cpu: \"2\",\n memory: \"1024Mi\",\n },\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"resources\": {\n \"limits\": {\n \"cpu\": \"2\",\n \"memory\": \"1024Mi\",\n },\n },\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Resources = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerResourcesArgs\n {\n Limits = \n {\n { \"cpu\", \"2\" },\n { \"memory\", \"1024Mi\" },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tResources: \u0026cloudrunv2.ServiceTemplateContainerResourcesArgs{\n\t\t\t\t\t\t\tLimits: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"cpu\": pulumi.String(\"2\"),\n\t\t\t\t\t\t\t\t\"memory\": pulumi.String(\"1024Mi\"),\n\t\t\t\t\t\t\t},\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\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.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .resources(ServiceTemplateContainerResourcesArgs.builder()\n .limits(Map.ofEntries(\n Map.entry(\"cpu\", \"2\"),\n Map.entry(\"memory\", \"1024Mi\")\n ))\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n resources:\n limits:\n cpu: '2'\n memory: 1024Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Sql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret-1\",\n replication: {\n auto: {},\n },\n});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"cloudrun-sql\",\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n scaling: {\n maxInstanceCount: 2,\n },\n volumes: [{\n name: \"cloudsql\",\n cloudSqlInstance: {\n instances: [instance.connectionName],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n envs: [\n {\n name: \"FOO\",\n value: \"bar\",\n },\n {\n name: \"SECRET_ENV_VAR\",\n valueSource: {\n secretKeyRef: {\n secret: secret.secretId,\n version: \"1\",\n },\n },\n },\n ],\n volumeMounts: [{\n name: \"cloudsql\",\n mountPath: \"/cloudsql\",\n }],\n }],\n },\n traffics: [{\n type: \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\",\n percent: 100,\n }],\n}, {\n dependsOn: [secret_version_data],\n});\nconst project = gcp.organizations.getProject({});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n}, {\n dependsOn: [secret],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret-1\",\n replication={\n \"auto\": {},\n })\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"cloudrun-sql\",\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings={\n \"tier\": \"db-f1-micro\",\n },\n deletion_protection=True)\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"scaling\": {\n \"max_instance_count\": 2,\n },\n \"volumes\": [{\n \"name\": \"cloudsql\",\n \"cloud_sql_instance\": {\n \"instances\": [instance.connection_name],\n },\n }],\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"envs\": [\n {\n \"name\": \"FOO\",\n \"value\": \"bar\",\n },\n {\n \"name\": \"SECRET_ENV_VAR\",\n \"value_source\": {\n \"secret_key_ref\": {\n \"secret\": secret.secret_id,\n \"version\": \"1\",\n },\n },\n },\n ],\n \"volume_mounts\": [{\n \"name\": \"cloudsql\",\n \"mount_path\": \"/cloudsql\",\n }],\n }],\n },\n traffics=[{\n \"type\": \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\",\n \"percent\": 100,\n }],\n opts = pulumi.ResourceOptions(depends_on=[secret_version_data]))\nproject = gcp.organizations.get_project()\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\",\n opts = pulumi.ResourceOptions(depends_on=[secret]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret-1\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"cloudrun-sql\",\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Scaling = new Gcp.CloudRunV2.Inputs.ServiceTemplateScalingArgs\n {\n MaxInstanceCount = 2,\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"cloudsql\",\n CloudSqlInstance = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeCloudSqlInstanceArgs\n {\n Instances = new[]\n {\n instance.ConnectionName,\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvArgs\n {\n Name = \"FOO\",\n Value = \"bar\",\n },\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvArgs\n {\n Name = \"SECRET_ENV_VAR\",\n ValueSource = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvValueSourceArgs\n {\n SecretKeyRef = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs\n {\n Secret = secret.SecretId,\n Version = \"1\",\n },\n },\n },\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"cloudsql\",\n MountPath = \"/cloudsql\",\n },\n },\n },\n },\n },\n Traffics = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTrafficArgs\n {\n Type = \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\",\n Percent = 100,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret_version_data,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret-1\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-sql\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tScaling: \u0026cloudrunv2.ServiceTemplateScalingArgs{\n\t\t\t\t\tMaxInstanceCount: pulumi.Int(2),\n\t\t\t\t},\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\tCloudSqlInstance: \u0026cloudrunv2.ServiceTemplateVolumeCloudSqlInstanceArgs{\n\t\t\t\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\t\t\t\tinstance.ConnectionName,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tEnvs: cloudrunv2.ServiceTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"FOO\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"bar\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"SECRET_ENV_VAR\"),\n\t\t\t\t\t\t\t\tValueSource: \u0026cloudrunv2.ServiceTemplateContainerEnvValueSourceArgs{\n\t\t\t\t\t\t\t\t\tSecretKeyRef: \u0026cloudrunv2.ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs{\n\t\t\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/cloudsql\"),\n\t\t\t\t\t\t\t},\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\tTraffics: cloudrunv2.ServiceTrafficArray{\n\t\t\t\t\u0026cloudrunv2.ServiceTrafficArgs{\n\t\t\t\t\tType: pulumi.String(\"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\"),\n\t\t\t\t\tPercent: pulumi.Int(100),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret_version_data,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret,\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.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateScalingArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTrafficArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 secret = new Secret(\"secret\", SecretArgs.builder()\n .secretId(\"secret-1\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder()\n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(\"cloudrun-sql\")\n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(true)\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .scaling(ServiceTemplateScalingArgs.builder()\n .maxInstanceCount(2)\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"cloudsql\")\n .cloudSqlInstance(ServiceTemplateVolumeCloudSqlInstanceArgs.builder()\n .instances(instance.connectionName())\n .build())\n .build())\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .envs( \n ServiceTemplateContainerEnvArgs.builder()\n .name(\"FOO\")\n .value(\"bar\")\n .build(),\n ServiceTemplateContainerEnvArgs.builder()\n .name(\"SECRET_ENV_VAR\")\n .valueSource(ServiceTemplateContainerEnvValueSourceArgs.builder()\n .secretKeyRef(ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs.builder()\n .secret(secret.secretId())\n .version(\"1\")\n .build())\n .build())\n .build())\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"cloudsql\")\n .mountPath(\"/cloudsql\")\n .build())\n .build())\n .build())\n .traffics(ServiceTrafficArgs.builder()\n .type(\"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\")\n .percent(100)\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret_version_data)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n ingress: INGRESS_TRAFFIC_ALL\n template:\n scaling:\n maxInstanceCount: 2\n volumes:\n - name: cloudsql\n cloudSqlInstance:\n instances:\n - ${instance.connectionName}\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n envs:\n - name: FOO\n value: bar\n - name: SECRET_ENV_VAR\n valueSource:\n secretKeyRef:\n secret: ${secret.secretId}\n version: '1'\n volumeMounts:\n - name: cloudsql\n mountPath: /cloudsql\n traffics:\n - type: TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\n percent: 100\n options:\n dependson:\n - ${[\"secret-version-data\"]}\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret-1\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n options:\n dependson:\n - ${secret}\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: cloudrun-sql\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n deletionProtection: true\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Vpcaccess\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customTestNetwork = new gcp.compute.Network(\"custom_test\", {\n name: \"run-network\",\n autoCreateSubnetworks: false,\n});\nconst customTest = new gcp.compute.Subnetwork(\"custom_test\", {\n name: \"run-subnetwork\",\n ipCidrRange: \"10.2.0.0/28\",\n region: \"us-central1\",\n network: customTestNetwork.id,\n});\nconst connector = new gcp.vpcaccess.Connector(\"connector\", {\n name: \"run-vpc\",\n subnet: {\n name: customTest.name,\n },\n machineType: \"e2-standard-4\",\n minInstances: 2,\n maxInstances: 3,\n region: \"us-central1\",\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n vpcAccess: {\n connector: connector.id,\n egress: \"ALL_TRAFFIC\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom_test_network = gcp.compute.Network(\"custom_test\",\n name=\"run-network\",\n auto_create_subnetworks=False)\ncustom_test = gcp.compute.Subnetwork(\"custom_test\",\n name=\"run-subnetwork\",\n ip_cidr_range=\"10.2.0.0/28\",\n region=\"us-central1\",\n network=custom_test_network.id)\nconnector = gcp.vpcaccess.Connector(\"connector\",\n name=\"run-vpc\",\n subnet={\n \"name\": custom_test.name,\n },\n machine_type=\"e2-standard-4\",\n min_instances=2,\n max_instances=3,\n region=\"us-central1\")\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n \"vpc_access\": {\n \"connector\": connector.id,\n \"egress\": \"ALL_TRAFFIC\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customTestNetwork = new Gcp.Compute.Network(\"custom_test\", new()\n {\n Name = \"run-network\",\n AutoCreateSubnetworks = false,\n });\n\n var customTest = new Gcp.Compute.Subnetwork(\"custom_test\", new()\n {\n Name = \"run-subnetwork\",\n IpCidrRange = \"10.2.0.0/28\",\n Region = \"us-central1\",\n Network = customTestNetwork.Id,\n });\n\n var connector = new Gcp.VpcAccess.Connector(\"connector\", new()\n {\n Name = \"run-vpc\",\n Subnet = new Gcp.VpcAccess.Inputs.ConnectorSubnetArgs\n {\n Name = customTest.Name,\n },\n MachineType = \"e2-standard-4\",\n MinInstances = 2,\n MaxInstances = 3,\n Region = \"us-central1\",\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessArgs\n {\n Connector = connector.Id,\n Egress = \"ALL_TRAFFIC\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vpcaccess\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomTestNetwork, err := compute.NewNetwork(ctx, \"custom_test\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"run-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcustomTest, err := compute.NewSubnetwork(ctx, \"custom_test\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"run-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.2.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: customTestNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconnector, err := vpcaccess.NewConnector(ctx, \"connector\", \u0026vpcaccess.ConnectorArgs{\n\t\t\tName: pulumi.String(\"run-vpc\"),\n\t\t\tSubnet: \u0026vpcaccess.ConnectorSubnetArgs{\n\t\t\t\tName: customTest.Name,\n\t\t\t},\n\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\tMinInstances: pulumi.Int(2),\n\t\t\tMaxInstances: pulumi.Int(3),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVpcAccess: \u0026cloudrunv2.ServiceTemplateVpcAccessArgs{\n\t\t\t\t\tConnector: connector.ID(),\n\t\t\t\t\tEgress: pulumi.String(\"ALL_TRAFFIC\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.vpcaccess.Connector;\nimport com.pulumi.gcp.vpcaccess.ConnectorArgs;\nimport com.pulumi.gcp.vpcaccess.inputs.ConnectorSubnetArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateVpcAccessArgs;\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 customTestNetwork = new Network(\"customTestNetwork\", NetworkArgs.builder()\n .name(\"run-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var customTest = new Subnetwork(\"customTest\", SubnetworkArgs.builder()\n .name(\"run-subnetwork\")\n .ipCidrRange(\"10.2.0.0/28\")\n .region(\"us-central1\")\n .network(customTestNetwork.id())\n .build());\n\n var connector = new Connector(\"connector\", ConnectorArgs.builder()\n .name(\"run-vpc\")\n .subnet(ConnectorSubnetArgs.builder()\n .name(customTest.name())\n .build())\n .machineType(\"e2-standard-4\")\n .minInstances(2)\n .maxInstances(3)\n .region(\"us-central1\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .vpcAccess(ServiceTemplateVpcAccessArgs.builder()\n .connector(connector.id())\n .egress(\"ALL_TRAFFIC\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n vpcAccess:\n connector: ${connector.id}\n egress: ALL_TRAFFIC\n connector:\n type: gcp:vpcaccess:Connector\n properties:\n name: run-vpc\n subnet:\n name: ${customTest.name}\n machineType: e2-standard-4\n minInstances: 2\n maxInstances: 3\n region: us-central1\n customTest:\n type: gcp:compute:Subnetwork\n name: custom_test\n properties:\n name: run-subnetwork\n ipCidrRange: 10.2.0.0/28\n region: us-central1\n network: ${customTestNetwork.id}\n customTestNetwork:\n type: gcp:compute:Network\n name: custom_test\n properties:\n name: run-network\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Directvpc\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n launchStage: \"GA\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n vpcAccess: {\n networkInterfaces: [{\n network: \"default\",\n subnetwork: \"default\",\n tags: [\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n launch_stage=\"GA\",\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n \"vpc_access\": {\n \"network_interfaces\": [{\n \"network\": \"default\",\n \"subnetwork\": \"default\",\n \"tags\": [\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n }],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n LaunchStage = \"GA\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessArgs\n {\n NetworkInterfaces = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessNetworkInterfaceArgs\n {\n Network = \"default\",\n Subnetwork = \"default\",\n Tags = new[]\n {\n \"tag1\",\n \"tag2\",\n \"tag3\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tLaunchStage: pulumi.String(\"GA\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVpcAccess: \u0026cloudrunv2.ServiceTemplateVpcAccessArgs{\n\t\t\t\t\tNetworkInterfaces: cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArray{\n\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArgs{\n\t\t\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\tTags: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"tag2\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"tag3\"),\n\t\t\t\t\t\t\t},\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\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.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateVpcAccessArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .launchStage(\"GA\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .vpcAccess(ServiceTemplateVpcAccessArgs.builder()\n .networkInterfaces(ServiceTemplateVpcAccessNetworkInterfaceArgs.builder()\n .network(\"default\")\n .subnetwork(\"default\")\n .tags( \n \"tag1\",\n \"tag2\",\n \"tag3\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n launchStage: GA\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n vpcAccess:\n networkInterfaces:\n - network: default\n subnetwork: default\n tags:\n - tag1\n - tag2\n - tag3\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Gpu\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n ingress: \"INGRESS_TRAFFIC_ALL\",\n launchStage: \"BETA\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n resources: {\n limits: {\n cpu: \"4\",\n memory: \"16Gi\",\n \"nvidia.com/gpu\": \"1\",\n },\n startupCpuBoost: true,\n },\n }],\n nodeSelector: {\n accelerator: \"nvidia-l4\",\n },\n scaling: {\n maxInstanceCount: 1,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n ingress=\"INGRESS_TRAFFIC_ALL\",\n launch_stage=\"BETA\",\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"resources\": {\n \"limits\": {\n \"cpu\": \"4\",\n \"memory\": \"16Gi\",\n \"nvidia.com/gpu\": \"1\",\n },\n \"startup_cpu_boost\": True,\n },\n }],\n \"node_selector\": {\n \"accelerator\": \"nvidia-l4\",\n },\n \"scaling\": {\n \"max_instance_count\": 1,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Resources = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerResourcesArgs\n {\n Limits = \n {\n { \"cpu\", \"4\" },\n { \"memory\", \"16Gi\" },\n { \"nvidia.com/gpu\", \"1\" },\n },\n StartupCpuBoost = true,\n },\n },\n },\n NodeSelector = new Gcp.CloudRunV2.Inputs.ServiceTemplateNodeSelectorArgs\n {\n Accelerator = \"nvidia-l4\",\n },\n Scaling = new Gcp.CloudRunV2.Inputs.ServiceTemplateScalingArgs\n {\n MaxInstanceCount = 1,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tResources: \u0026cloudrunv2.ServiceTemplateContainerResourcesArgs{\n\t\t\t\t\t\t\tLimits: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"cpu\": pulumi.String(\"4\"),\n\t\t\t\t\t\t\t\t\"memory\": pulumi.String(\"16Gi\"),\n\t\t\t\t\t\t\t\t\"nvidia.com/gpu\": pulumi.String(\"1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tStartupCpuBoost: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNodeSelector: \u0026cloudrunv2.ServiceTemplateNodeSelectorArgs{\n\t\t\t\t\tAccelerator: pulumi.String(\"nvidia-l4\"),\n\t\t\t\t},\n\t\t\t\tScaling: \u0026cloudrunv2.ServiceTemplateScalingArgs{\n\t\t\t\t\tMaxInstanceCount: pulumi.Int(1),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateNodeSelectorArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateScalingArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .launchStage(\"BETA\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .resources(ServiceTemplateContainerResourcesArgs.builder()\n .limits(Map.ofEntries(\n Map.entry(\"cpu\", \"4\"),\n Map.entry(\"memory\", \"16Gi\"),\n Map.entry(\"nvidia.com/gpu\", \"1\")\n ))\n .startupCpuBoost(true)\n .build())\n .build())\n .nodeSelector(ServiceTemplateNodeSelectorArgs.builder()\n .accelerator(\"nvidia-l4\")\n .build())\n .scaling(ServiceTemplateScalingArgs.builder()\n .maxInstanceCount(1)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n ingress: INGRESS_TRAFFIC_ALL\n launchStage: BETA\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n resources:\n limits:\n cpu: '4'\n memory: 16Gi\n nvidia.com/gpu: '1'\n startupCpuBoost: true\n nodeSelector:\n accelerator: nvidia-l4\n scaling:\n maxInstanceCount: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Probes\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n startupProbe: {\n initialDelaySeconds: 0,\n timeoutSeconds: 1,\n periodSeconds: 3,\n failureThreshold: 1,\n tcpSocket: {\n port: 8080,\n },\n },\n livenessProbe: {\n httpGet: {\n path: \"/\",\n },\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"startup_probe\": {\n \"initial_delay_seconds\": 0,\n \"timeout_seconds\": 1,\n \"period_seconds\": 3,\n \"failure_threshold\": 1,\n \"tcp_socket\": {\n \"port\": 8080,\n },\n },\n \"liveness_probe\": {\n \"http_get\": {\n \"path\": \"/\",\n },\n },\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n StartupProbe = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeArgs\n {\n InitialDelaySeconds = 0,\n TimeoutSeconds = 1,\n PeriodSeconds = 3,\n FailureThreshold = 1,\n TcpSocket = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeTcpSocketArgs\n {\n Port = 8080,\n },\n },\n LivenessProbe = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerLivenessProbeArgs\n {\n HttpGet = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerLivenessProbeHttpGetArgs\n {\n Path = \"/\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tStartupProbe: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeArgs{\n\t\t\t\t\t\t\tInitialDelaySeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tTimeoutSeconds: pulumi.Int(1),\n\t\t\t\t\t\t\tPeriodSeconds: pulumi.Int(3),\n\t\t\t\t\t\t\tFailureThreshold: pulumi.Int(1),\n\t\t\t\t\t\t\tTcpSocket: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeTcpSocketArgs{\n\t\t\t\t\t\t\t\tPort: pulumi.Int(8080),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLivenessProbe: \u0026cloudrunv2.ServiceTemplateContainerLivenessProbeArgs{\n\t\t\t\t\t\t\tHttpGet: \u0026cloudrunv2.ServiceTemplateContainerLivenessProbeHttpGetArgs{\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t},\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\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.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .startupProbe(ServiceTemplateContainerStartupProbeArgs.builder()\n .initialDelaySeconds(0)\n .timeoutSeconds(1)\n .periodSeconds(3)\n .failureThreshold(1)\n .tcpSocket(ServiceTemplateContainerStartupProbeTcpSocketArgs.builder()\n .port(8080)\n .build())\n .build())\n .livenessProbe(ServiceTemplateContainerLivenessProbeArgs.builder()\n .httpGet(ServiceTemplateContainerLivenessProbeHttpGetArgs.builder()\n .path(\"/\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n startupProbe:\n initialDelaySeconds: 0\n timeoutSeconds: 1\n periodSeconds: 3\n failureThreshold: 1\n tcpSocket:\n port: 8080\n livenessProbe:\n httpGet:\n path: /\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Secret\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret-1\",\n replication: {\n auto: {},\n },\n});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n volumes: [{\n name: \"a-volume\",\n secret: {\n secret: secret.secretId,\n defaultMode: 292,\n items: [{\n version: \"1\",\n path: \"my-secret\",\n }],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"a-volume\",\n mountPath: \"/secrets\",\n }],\n }],\n },\n}, {\n dependsOn: [secret_version_data],\n});\nconst project = gcp.organizations.getProject({});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n}, {\n dependsOn: [secret],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret-1\",\n replication={\n \"auto\": {},\n })\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"volumes\": [{\n \"name\": \"a-volume\",\n \"secret\": {\n \"secret\": secret.secret_id,\n \"default_mode\": 292,\n \"items\": [{\n \"version\": \"1\",\n \"path\": \"my-secret\",\n }],\n },\n }],\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"volume_mounts\": [{\n \"name\": \"a-volume\",\n \"mount_path\": \"/secrets\",\n }],\n }],\n },\n opts = pulumi.ResourceOptions(depends_on=[secret_version_data]))\nproject = gcp.organizations.get_project()\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\",\n opts = pulumi.ResourceOptions(depends_on=[secret]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret-1\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"a-volume\",\n Secret = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeSecretArgs\n {\n Secret = secret.SecretId,\n DefaultMode = 292,\n Items = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeSecretItemArgs\n {\n Version = \"1\",\n Path = \"my-secret\",\n },\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"a-volume\",\n MountPath = \"/secrets\",\n },\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret_version_data,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret-1\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\tSecret: \u0026cloudrunv2.ServiceTemplateVolumeSecretArgs{\n\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\tDefaultMode: pulumi.Int(292),\n\t\t\t\t\t\t\tItems: cloudrunv2.ServiceTemplateVolumeSecretItemArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeSecretItemArgs{\n\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"my-secret\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/secrets\"),\n\t\t\t\t\t\t\t},\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}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret_version_data,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret,\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.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 secret = new Secret(\"secret\", SecretArgs.builder()\n .secretId(\"secret-1\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder()\n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"a-volume\")\n .secret(ServiceTemplateVolumeSecretArgs.builder()\n .secret(secret.secretId())\n .defaultMode(292)\n .items(ServiceTemplateVolumeSecretItemArgs.builder()\n .version(\"1\")\n .path(\"my-secret\")\n .build())\n .build())\n .build())\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"a-volume\")\n .mountPath(\"/secrets\")\n .build())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret_version_data)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n ingress: INGRESS_TRAFFIC_ALL\n template:\n volumes:\n - name: a-volume\n secret:\n secret: ${secret.secretId}\n defaultMode: 292\n items:\n - version: '1'\n path: my-secret\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: a-volume\n mountPath: /secrets\n options:\n dependson:\n - ${[\"secret-version-data\"]}\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret-1\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n options:\n dependson:\n - ${secret}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Multicontainer\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n launchStage: \"BETA\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [\n {\n name: \"hello-1\",\n ports: {\n containerPort: 8080,\n },\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n dependsOns: [\"hello-2\"],\n volumeMounts: [{\n name: \"empty-dir-volume\",\n mountPath: \"/mnt\",\n }],\n },\n {\n name: \"hello-2\",\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n envs: [{\n name: \"PORT\",\n value: \"8081\",\n }],\n startupProbe: {\n httpGet: {\n port: 8081,\n },\n },\n },\n ],\n volumes: [{\n name: \"empty-dir-volume\",\n emptyDir: {\n medium: \"MEMORY\",\n sizeLimit: \"256Mi\",\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n launch_stage=\"BETA\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"containers\": [\n {\n \"name\": \"hello-1\",\n \"ports\": {\n \"container_port\": 8080,\n },\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"depends_ons\": [\"hello-2\"],\n \"volume_mounts\": [{\n \"name\": \"empty-dir-volume\",\n \"mount_path\": \"/mnt\",\n }],\n },\n {\n \"name\": \"hello-2\",\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"envs\": [{\n \"name\": \"PORT\",\n \"value\": \"8081\",\n }],\n \"startup_probe\": {\n \"http_get\": {\n \"port\": 8081,\n },\n },\n },\n ],\n \"volumes\": [{\n \"name\": \"empty-dir-volume\",\n \"empty_dir\": {\n \"medium\": \"MEMORY\",\n \"size_limit\": \"256Mi\",\n },\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n LaunchStage = \"BETA\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Name = \"hello-1\",\n Ports = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerPortsArgs\n {\n ContainerPort = 8080,\n },\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n DependsOns = new[]\n {\n \"hello-2\",\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"empty-dir-volume\",\n MountPath = \"/mnt\",\n },\n },\n },\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Name = \"hello-2\",\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvArgs\n {\n Name = \"PORT\",\n Value = \"8081\",\n },\n },\n StartupProbe = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeArgs\n {\n HttpGet = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeHttpGetArgs\n {\n Port = 8081,\n },\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"empty-dir-volume\",\n EmptyDir = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeEmptyDirArgs\n {\n Medium = \"MEMORY\",\n SizeLimit = \"256Mi\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tName: pulumi.String(\"hello-1\"),\n\t\t\t\t\t\tPorts: \u0026cloudrunv2.ServiceTemplateContainerPortsArgs{\n\t\t\t\t\t\t\tContainerPort: pulumi.Int(8080),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tDependsOns: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"hello-2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/mnt\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tName: pulumi.String(\"hello-2\"),\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tEnvs: cloudrunv2.ServiceTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"PORT\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"8081\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStartupProbe: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeArgs{\n\t\t\t\t\t\t\tHttpGet: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeHttpGetArgs{\n\t\t\t\t\t\t\t\tPort: pulumi.Int(8081),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\tEmptyDir: \u0026cloudrunv2.ServiceTemplateVolumeEmptyDirArgs{\n\t\t\t\t\t\t\tMedium: pulumi.String(\"MEMORY\"),\n\t\t\t\t\t\t\tSizeLimit: pulumi.String(\"256Mi\"),\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\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.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .launchStage(\"BETA\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers( \n ServiceTemplateContainerArgs.builder()\n .name(\"hello-1\")\n .ports(ServiceTemplateContainerPortsArgs.builder()\n .containerPort(8080)\n .build())\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .dependsOns(\"hello-2\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"empty-dir-volume\")\n .mountPath(\"/mnt\")\n .build())\n .build(),\n ServiceTemplateContainerArgs.builder()\n .name(\"hello-2\")\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .envs(ServiceTemplateContainerEnvArgs.builder()\n .name(\"PORT\")\n .value(\"8081\")\n .build())\n .startupProbe(ServiceTemplateContainerStartupProbeArgs.builder()\n .httpGet(ServiceTemplateContainerStartupProbeHttpGetArgs.builder()\n .port(8081)\n .build())\n .build())\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"empty-dir-volume\")\n .emptyDir(ServiceTemplateVolumeEmptyDirArgs.builder()\n .medium(\"MEMORY\")\n .sizeLimit(\"256Mi\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n launchStage: BETA\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - name: hello-1\n ports:\n containerPort: 8080\n image: us-docker.pkg.dev/cloudrun/container/hello\n dependsOns:\n - hello-2\n volumeMounts:\n - name: empty-dir-volume\n mountPath: /mnt\n - name: hello-2\n image: us-docker.pkg.dev/cloudrun/container/hello\n envs:\n - name: PORT\n value: '8081'\n startupProbe:\n httpGet:\n port: 8081\n volumes:\n - name: empty-dir-volume\n emptyDir:\n medium: MEMORY\n sizeLimit: 256Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Mount Gcs\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultBucket = new gcp.storage.Bucket(\"default\", {\n name: \"cloudrun-service\",\n location: \"US\",\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n executionEnvironment: \"EXECUTION_ENVIRONMENT_GEN2\",\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"bucket\",\n mountPath: \"/var/www\",\n }],\n }],\n volumes: [{\n name: \"bucket\",\n gcs: {\n bucket: defaultBucket.name,\n readOnly: false,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_bucket = gcp.storage.Bucket(\"default\",\n name=\"cloudrun-service\",\n location=\"US\")\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"execution_environment\": \"EXECUTION_ENVIRONMENT_GEN2\",\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"volume_mounts\": [{\n \"name\": \"bucket\",\n \"mount_path\": \"/var/www\",\n }],\n }],\n \"volumes\": [{\n \"name\": \"bucket\",\n \"gcs\": {\n \"bucket\": default_bucket.name,\n \"read_only\": False,\n },\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultBucket = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"US\",\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n ExecutionEnvironment = \"EXECUTION_ENVIRONMENT_GEN2\",\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"bucket\",\n MountPath = \"/var/www\",\n },\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"bucket\",\n Gcs = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeGcsArgs\n {\n Bucket = defaultBucket.Name,\n ReadOnly = false,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultBucket, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tExecutionEnvironment: pulumi.String(\"EXECUTION_ENVIRONMENT_GEN2\"),\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"bucket\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/var/www\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"bucket\"),\n\t\t\t\t\t\tGcs: \u0026cloudrunv2.ServiceTemplateVolumeGcsArgs{\n\t\t\t\t\t\t\tBucket: defaultBucket.Name,\n\t\t\t\t\t\t\tReadOnly: pulumi.Bool(false),\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\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.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\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 defaultBucket = new Bucket(\"defaultBucket\", BucketArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"US\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(ServiceTemplateArgs.builder()\n .executionEnvironment(\"EXECUTION_ENVIRONMENT_GEN2\")\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"bucket\")\n .mountPath(\"/var/www\")\n .build())\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"bucket\")\n .gcs(ServiceTemplateVolumeGcsArgs.builder()\n .bucket(defaultBucket.name())\n .readOnly(false)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n template:\n executionEnvironment: EXECUTION_ENVIRONMENT_GEN2\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: bucket\n mountPath: /var/www\n volumes:\n - name: bucket\n gcs:\n bucket: ${defaultBucket.name}\n readOnly: false\n defaultBucket:\n type: gcp:storage:Bucket\n name: default\n properties:\n name: cloudrun-service\n location: US\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Mount Nfs\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultInstance = new gcp.filestore.Instance(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1-b\",\n tier: \"BASIC_HDD\",\n fileShares: {\n capacityGb: 1024,\n name: \"share1\",\n },\n networks: [{\n network: \"default\",\n modes: [\"MODE_IPV4\"],\n }],\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n executionEnvironment: \"EXECUTION_ENVIRONMENT_GEN2\",\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello:latest\",\n volumeMounts: [{\n name: \"nfs\",\n mountPath: \"/mnt/nfs/filestore\",\n }],\n }],\n vpcAccess: {\n networkInterfaces: [{\n network: \"default\",\n subnetwork: \"default\",\n }],\n },\n volumes: [{\n name: \"nfs\",\n nfs: {\n server: defaultInstance.networks.apply(networks =\u003e networks[0].ipAddresses?.[0]),\n path: \"/share1\",\n readOnly: false,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_instance = gcp.filestore.Instance(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1-b\",\n tier=\"BASIC_HDD\",\n file_shares={\n \"capacity_gb\": 1024,\n \"name\": \"share1\",\n },\n networks=[{\n \"network\": \"default\",\n \"modes\": [\"MODE_IPV4\"],\n }])\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"execution_environment\": \"EXECUTION_ENVIRONMENT_GEN2\",\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello:latest\",\n \"volume_mounts\": [{\n \"name\": \"nfs\",\n \"mount_path\": \"/mnt/nfs/filestore\",\n }],\n }],\n \"vpc_access\": {\n \"network_interfaces\": [{\n \"network\": \"default\",\n \"subnetwork\": \"default\",\n }],\n },\n \"volumes\": [{\n \"name\": \"nfs\",\n \"nfs\": {\n \"server\": default_instance.networks[0].ip_addresses[0],\n \"path\": \"/share1\",\n \"read_only\": False,\n },\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultInstance = new Gcp.Filestore.Instance(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1-b\",\n Tier = \"BASIC_HDD\",\n FileShares = new Gcp.Filestore.Inputs.InstanceFileSharesArgs\n {\n CapacityGb = 1024,\n Name = \"share1\",\n },\n Networks = new[]\n {\n new Gcp.Filestore.Inputs.InstanceNetworkArgs\n {\n Network = \"default\",\n Modes = new[]\n {\n \"MODE_IPV4\",\n },\n },\n },\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n ExecutionEnvironment = \"EXECUTION_ENVIRONMENT_GEN2\",\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello:latest\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"nfs\",\n MountPath = \"/mnt/nfs/filestore\",\n },\n },\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessArgs\n {\n NetworkInterfaces = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessNetworkInterfaceArgs\n {\n Network = \"default\",\n Subnetwork = \"default\",\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"nfs\",\n Nfs = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeNfsArgs\n {\n Server = defaultInstance.Networks.Apply(networks =\u003e networks[0].IpAddresses[0]),\n Path = \"/share1\",\n ReadOnly = false,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/filestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultInstance, err := filestore.NewInstance(ctx, \"default\", \u0026filestore.InstanceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1-b\"),\n\t\t\tTier: pulumi.String(\"BASIC_HDD\"),\n\t\t\tFileShares: \u0026filestore.InstanceFileSharesArgs{\n\t\t\t\tCapacityGb: pulumi.Int(1024),\n\t\t\t\tName: pulumi.String(\"share1\"),\n\t\t\t},\n\t\t\tNetworks: filestore.InstanceNetworkArray{\n\t\t\t\t\u0026filestore.InstanceNetworkArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\tModes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"MODE_IPV4\"),\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\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tExecutionEnvironment: pulumi.String(\"EXECUTION_ENVIRONMENT_GEN2\"),\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello:latest\"),\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"nfs\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/mnt/nfs/filestore\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVpcAccess: \u0026cloudrunv2.ServiceTemplateVpcAccessArgs{\n\t\t\t\t\tNetworkInterfaces: cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArray{\n\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArgs{\n\t\t\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"nfs\"),\n\t\t\t\t\t\tNfs: \u0026cloudrunv2.ServiceTemplateVolumeNfsArgs{\n\t\t\t\t\t\t\tServer: defaultInstance.Networks.ApplyT(func(networks []filestore.InstanceNetwork) (*string, error) {\n\t\t\t\t\t\t\t\treturn \u0026networks[0].IpAddresses[0], nil\n\t\t\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t\t\t\tPath: pulumi.String(\"/share1\"),\n\t\t\t\t\t\t\tReadOnly: pulumi.Bool(false),\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\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.gcp.filestore.Instance;\nimport com.pulumi.gcp.filestore.InstanceArgs;\nimport com.pulumi.gcp.filestore.inputs.InstanceFileSharesArgs;\nimport com.pulumi.gcp.filestore.inputs.InstanceNetworkArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateVpcAccessArgs;\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 defaultInstance = new Instance(\"defaultInstance\", InstanceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1-b\")\n .tier(\"BASIC_HDD\")\n .fileShares(InstanceFileSharesArgs.builder()\n .capacityGb(1024)\n .name(\"share1\")\n .build())\n .networks(InstanceNetworkArgs.builder()\n .network(\"default\")\n .modes(\"MODE_IPV4\")\n .build())\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .executionEnvironment(\"EXECUTION_ENVIRONMENT_GEN2\")\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello:latest\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"nfs\")\n .mountPath(\"/mnt/nfs/filestore\")\n .build())\n .build())\n .vpcAccess(ServiceTemplateVpcAccessArgs.builder()\n .networkInterfaces(ServiceTemplateVpcAccessNetworkInterfaceArgs.builder()\n .network(\"default\")\n .subnetwork(\"default\")\n .build())\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"nfs\")\n .nfs(ServiceTemplateVolumeNfsArgs.builder()\n .server(defaultInstance.networks().applyValue(networks -\u003e networks[0].ipAddresses()[0]))\n .path(\"/share1\")\n .readOnly(false)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n ingress: INGRESS_TRAFFIC_ALL\n template:\n executionEnvironment: EXECUTION_ENVIRONMENT_GEN2\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello:latest\n volumeMounts:\n - name: nfs\n mountPath: /mnt/nfs/filestore\n vpcAccess:\n networkInterfaces:\n - network: default\n subnetwork: default\n volumes:\n - name: nfs\n nfs:\n server: ${defaultInstance.networks[0].ipAddresses[0]}\n path: /share1\n readOnly: false\n defaultInstance:\n type: gcp:filestore:Instance\n name: default\n properties:\n name: cloudrun-service\n location: us-central1-b\n tier: BASIC_HDD\n fileShares:\n capacityGb: 1024\n name: share1\n networks:\n - network: default\n modes:\n - MODE_IPV4\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Mesh\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as time from \"@pulumi/time\";\n\nconst mesh = new gcp.networkservices.Mesh(\"mesh\", {name: \"network-services-mesh\"});\nconst waitForMesh = new time.index.Sleep(\"wait_for_mesh\", {createDuration: \"1m\"}, {\n dependsOn: [mesh],\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n deletionProtection: false,\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n serviceMesh: {\n mesh: mesh.id,\n },\n },\n}, {\n dependsOn: [waitForMesh],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_time as time\n\nmesh = gcp.networkservices.Mesh(\"mesh\", name=\"network-services-mesh\")\nwait_for_mesh = time.index.Sleep(\"wait_for_mesh\", create_duration=1m,\nopts = pulumi.ResourceOptions(depends_on=[mesh]))\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n deletion_protection=False,\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n \"service_mesh\": {\n \"mesh\": mesh.id,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[wait_for_mesh]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Time = Pulumi.Time;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var mesh = new Gcp.NetworkServices.Mesh(\"mesh\", new()\n {\n Name = \"network-services-mesh\",\n });\n\n var waitForMesh = new Time.Index.Sleep(\"wait_for_mesh\", new()\n {\n CreateDuration = \"1m\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n mesh,\n },\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n DeletionProtection = false,\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n ServiceMesh = new Gcp.CloudRunV2.Inputs.ServiceTemplateServiceMeshArgs\n {\n Mesh = mesh.Id,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n waitForMesh,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkservices\"\n\t\"github.com/pulumi/pulumi-time/sdk/go/time\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmesh, err := networkservices.NewMesh(ctx, \"mesh\", \u0026networkservices.MeshArgs{\n\t\t\tName: pulumi.String(\"network-services-mesh\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twaitForMesh, err := time.NewSleep(ctx, \"wait_for_mesh\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"1m\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tmesh,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tServiceMesh: \u0026cloudrunv2.ServiceTemplateServiceMeshArgs{\n\t\t\t\t\tMesh: mesh.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\twaitForMesh,\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.gcp.networkservices.Mesh;\nimport com.pulumi.gcp.networkservices.MeshArgs;\nimport com.pulumi.time.sleep;\nimport com.pulumi.time.SleepArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateServiceMeshArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 mesh = new Mesh(\"mesh\", MeshArgs.builder()\n .name(\"network-services-mesh\")\n .build());\n\n var waitForMesh = new Sleep(\"waitForMesh\", SleepArgs.builder()\n .createDuration(\"1m\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(mesh)\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .deletionProtection(false)\n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .serviceMesh(ServiceTemplateServiceMeshArgs.builder()\n .mesh(mesh.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(waitForMesh)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n deletionProtection: false\n location: us-central1\n launchStage: BETA\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n serviceMesh:\n mesh: ${mesh.id}\n options:\n dependson:\n - ${waitForMesh}\n waitForMesh:\n type: time:sleep\n name: wait_for_mesh\n properties:\n createDuration: 1m\n options:\n dependson:\n - ${mesh}\n mesh:\n type: gcp:networkservices:Mesh\n properties:\n name: network-services-mesh\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Invokeriam\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n invokerIamDisabled: true,\n description: \"The serving URL of this service will not perform any IAM check when invoked\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n invoker_iam_disabled=True,\n description=\"The serving URL of this service will not perform any IAM check when invoked\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n InvokerIamDisabled = true,\n Description = \"The serving URL of this service will not perform any IAM check when invoked\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tInvokerIamDisabled: pulumi.Bool(true),\n\t\t\tDescription: pulumi.String(\"The serving URL of this service will not perform any IAM check when invoked\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\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\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.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .invokerIamDisabled(true)\n .description(\"The serving URL of this service will not perform any IAM check when invoked\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n invokerIamDisabled: true\n description: The serving URL of this service will not perform any IAM check when invoked\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nService can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/services/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Service can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:cloudrunv2/service:Service default projects/{{project}}/locations/{{location}}/services/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/service:Service default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/service:Service default {{location}}/{{name}}\n```\n\n", + "description": "Service acts as a top-level container that manages a set of configurations and revision templates which implement a network service. Service exists to provide a singular abstraction which can be access controlled, reasoned about, and which encapsulates software lifecycle decisions such as rollout policy and team resource ownership.\n\n\nTo get more information about Service, see:\n\n* [API documentation](https://cloud.google.com/run/docs/reference/rest/v2/projects.locations.services)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/run/docs/)\n\n## Example Usage\n\n### Cloudrunv2 Service Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\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\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.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Limits\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n resources: {\n limits: {\n cpu: \"2\",\n memory: \"1024Mi\",\n },\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"resources\": {\n \"limits\": {\n \"cpu\": \"2\",\n \"memory\": \"1024Mi\",\n },\n },\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Resources = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerResourcesArgs\n {\n Limits = \n {\n { \"cpu\", \"2\" },\n { \"memory\", \"1024Mi\" },\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tResources: \u0026cloudrunv2.ServiceTemplateContainerResourcesArgs{\n\t\t\t\t\t\t\tLimits: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"cpu\": pulumi.String(\"2\"),\n\t\t\t\t\t\t\t\t\"memory\": pulumi.String(\"1024Mi\"),\n\t\t\t\t\t\t\t},\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\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.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .resources(ServiceTemplateContainerResourcesArgs.builder()\n .limits(Map.ofEntries(\n Map.entry(\"cpu\", \"2\"),\n Map.entry(\"memory\", \"1024Mi\")\n ))\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n resources:\n limits:\n cpu: '2'\n memory: 1024Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Sql\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret-1\",\n replication: {\n auto: {},\n },\n});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: \"cloudrun-sql\",\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n scaling: {\n maxInstanceCount: 2,\n },\n volumes: [{\n name: \"cloudsql\",\n cloudSqlInstance: {\n instances: [instance.connectionName],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n envs: [\n {\n name: \"FOO\",\n value: \"bar\",\n },\n {\n name: \"SECRET_ENV_VAR\",\n valueSource: {\n secretKeyRef: {\n secret: secret.secretId,\n version: \"1\",\n },\n },\n },\n ],\n volumeMounts: [{\n name: \"cloudsql\",\n mountPath: \"/cloudsql\",\n }],\n }],\n },\n traffics: [{\n type: \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\",\n percent: 100,\n }],\n}, {\n dependsOn: [secret_version_data],\n});\nconst project = gcp.organizations.getProject({});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n}, {\n dependsOn: [secret],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret-1\",\n replication={\n \"auto\": {},\n })\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=\"cloudrun-sql\",\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings={\n \"tier\": \"db-f1-micro\",\n },\n deletion_protection=True)\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"scaling\": {\n \"max_instance_count\": 2,\n },\n \"volumes\": [{\n \"name\": \"cloudsql\",\n \"cloud_sql_instance\": {\n \"instances\": [instance.connection_name],\n },\n }],\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"envs\": [\n {\n \"name\": \"FOO\",\n \"value\": \"bar\",\n },\n {\n \"name\": \"SECRET_ENV_VAR\",\n \"value_source\": {\n \"secret_key_ref\": {\n \"secret\": secret.secret_id,\n \"version\": \"1\",\n },\n },\n },\n ],\n \"volume_mounts\": [{\n \"name\": \"cloudsql\",\n \"mount_path\": \"/cloudsql\",\n }],\n }],\n },\n traffics=[{\n \"type\": \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\",\n \"percent\": 100,\n }],\n opts = pulumi.ResourceOptions(depends_on=[secret_version_data]))\nproject = gcp.organizations.get_project()\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\",\n opts = pulumi.ResourceOptions(depends_on=[secret]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret-1\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = \"cloudrun-sql\",\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Scaling = new Gcp.CloudRunV2.Inputs.ServiceTemplateScalingArgs\n {\n MaxInstanceCount = 2,\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"cloudsql\",\n CloudSqlInstance = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeCloudSqlInstanceArgs\n {\n Instances = new[]\n {\n instance.ConnectionName,\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvArgs\n {\n Name = \"FOO\",\n Value = \"bar\",\n },\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvArgs\n {\n Name = \"SECRET_ENV_VAR\",\n ValueSource = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvValueSourceArgs\n {\n SecretKeyRef = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs\n {\n Secret = secret.SecretId,\n Version = \"1\",\n },\n },\n },\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"cloudsql\",\n MountPath = \"/cloudsql\",\n },\n },\n },\n },\n },\n Traffics = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTrafficArgs\n {\n Type = \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\",\n Percent = 100,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret_version_data,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret-1\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-sql\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tScaling: \u0026cloudrunv2.ServiceTemplateScalingArgs{\n\t\t\t\t\tMaxInstanceCount: pulumi.Int(2),\n\t\t\t\t},\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\tCloudSqlInstance: \u0026cloudrunv2.ServiceTemplateVolumeCloudSqlInstanceArgs{\n\t\t\t\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\t\t\t\tinstance.ConnectionName,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tEnvs: cloudrunv2.ServiceTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"FOO\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"bar\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"SECRET_ENV_VAR\"),\n\t\t\t\t\t\t\t\tValueSource: \u0026cloudrunv2.ServiceTemplateContainerEnvValueSourceArgs{\n\t\t\t\t\t\t\t\t\tSecretKeyRef: \u0026cloudrunv2.ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs{\n\t\t\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/cloudsql\"),\n\t\t\t\t\t\t\t},\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\tTraffics: cloudrunv2.ServiceTrafficArray{\n\t\t\t\t\u0026cloudrunv2.ServiceTrafficArgs{\n\t\t\t\t\tType: pulumi.String(\"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\"),\n\t\t\t\t\tPercent: pulumi.Int(100),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret_version_data,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret,\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.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateScalingArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTrafficArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 secret = new Secret(\"secret\", SecretArgs.builder()\n .secretId(\"secret-1\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder()\n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(\"cloudrun-sql\")\n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(true)\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .scaling(ServiceTemplateScalingArgs.builder()\n .maxInstanceCount(2)\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"cloudsql\")\n .cloudSqlInstance(ServiceTemplateVolumeCloudSqlInstanceArgs.builder()\n .instances(instance.connectionName())\n .build())\n .build())\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .envs( \n ServiceTemplateContainerEnvArgs.builder()\n .name(\"FOO\")\n .value(\"bar\")\n .build(),\n ServiceTemplateContainerEnvArgs.builder()\n .name(\"SECRET_ENV_VAR\")\n .valueSource(ServiceTemplateContainerEnvValueSourceArgs.builder()\n .secretKeyRef(ServiceTemplateContainerEnvValueSourceSecretKeyRefArgs.builder()\n .secret(secret.secretId())\n .version(\"1\")\n .build())\n .build())\n .build())\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"cloudsql\")\n .mountPath(\"/cloudsql\")\n .build())\n .build())\n .build())\n .traffics(ServiceTrafficArgs.builder()\n .type(\"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\")\n .percent(100)\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret_version_data)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n ingress: INGRESS_TRAFFIC_ALL\n template:\n scaling:\n maxInstanceCount: 2\n volumes:\n - name: cloudsql\n cloudSqlInstance:\n instances:\n - ${instance.connectionName}\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n envs:\n - name: FOO\n value: bar\n - name: SECRET_ENV_VAR\n valueSource:\n secretKeyRef:\n secret: ${secret.secretId}\n version: '1'\n volumeMounts:\n - name: cloudsql\n mountPath: /cloudsql\n traffics:\n - type: TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\n percent: 100\n options:\n dependson:\n - ${[\"secret-version-data\"]}\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret-1\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n options:\n dependson:\n - ${secret}\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: cloudrun-sql\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n deletionProtection: true\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Vpcaccess\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customTestNetwork = new gcp.compute.Network(\"custom_test\", {\n name: \"run-network\",\n autoCreateSubnetworks: false,\n});\nconst customTest = new gcp.compute.Subnetwork(\"custom_test\", {\n name: \"run-subnetwork\",\n ipCidrRange: \"10.2.0.0/28\",\n region: \"us-central1\",\n network: customTestNetwork.id,\n});\nconst connector = new gcp.vpcaccess.Connector(\"connector\", {\n name: \"run-vpc\",\n subnet: {\n name: customTest.name,\n },\n machineType: \"e2-standard-4\",\n minInstances: 2,\n maxInstances: 3,\n region: \"us-central1\",\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n vpcAccess: {\n connector: connector.id,\n egress: \"ALL_TRAFFIC\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom_test_network = gcp.compute.Network(\"custom_test\",\n name=\"run-network\",\n auto_create_subnetworks=False)\ncustom_test = gcp.compute.Subnetwork(\"custom_test\",\n name=\"run-subnetwork\",\n ip_cidr_range=\"10.2.0.0/28\",\n region=\"us-central1\",\n network=custom_test_network.id)\nconnector = gcp.vpcaccess.Connector(\"connector\",\n name=\"run-vpc\",\n subnet={\n \"name\": custom_test.name,\n },\n machine_type=\"e2-standard-4\",\n min_instances=2,\n max_instances=3,\n region=\"us-central1\")\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n \"vpc_access\": {\n \"connector\": connector.id,\n \"egress\": \"ALL_TRAFFIC\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customTestNetwork = new Gcp.Compute.Network(\"custom_test\", new()\n {\n Name = \"run-network\",\n AutoCreateSubnetworks = false,\n });\n\n var customTest = new Gcp.Compute.Subnetwork(\"custom_test\", new()\n {\n Name = \"run-subnetwork\",\n IpCidrRange = \"10.2.0.0/28\",\n Region = \"us-central1\",\n Network = customTestNetwork.Id,\n });\n\n var connector = new Gcp.VpcAccess.Connector(\"connector\", new()\n {\n Name = \"run-vpc\",\n Subnet = new Gcp.VpcAccess.Inputs.ConnectorSubnetArgs\n {\n Name = customTest.Name,\n },\n MachineType = \"e2-standard-4\",\n MinInstances = 2,\n MaxInstances = 3,\n Region = \"us-central1\",\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessArgs\n {\n Connector = connector.Id,\n Egress = \"ALL_TRAFFIC\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vpcaccess\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomTestNetwork, err := compute.NewNetwork(ctx, \"custom_test\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"run-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcustomTest, err := compute.NewSubnetwork(ctx, \"custom_test\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"run-subnetwork\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.2.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: customTestNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconnector, err := vpcaccess.NewConnector(ctx, \"connector\", \u0026vpcaccess.ConnectorArgs{\n\t\t\tName: pulumi.String(\"run-vpc\"),\n\t\t\tSubnet: \u0026vpcaccess.ConnectorSubnetArgs{\n\t\t\t\tName: customTest.Name,\n\t\t\t},\n\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\tMinInstances: pulumi.Int(2),\n\t\t\tMaxInstances: pulumi.Int(3),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVpcAccess: \u0026cloudrunv2.ServiceTemplateVpcAccessArgs{\n\t\t\t\t\tConnector: connector.ID(),\n\t\t\t\t\tEgress: pulumi.String(\"ALL_TRAFFIC\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.vpcaccess.Connector;\nimport com.pulumi.gcp.vpcaccess.ConnectorArgs;\nimport com.pulumi.gcp.vpcaccess.inputs.ConnectorSubnetArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateVpcAccessArgs;\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 customTestNetwork = new Network(\"customTestNetwork\", NetworkArgs.builder()\n .name(\"run-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var customTest = new Subnetwork(\"customTest\", SubnetworkArgs.builder()\n .name(\"run-subnetwork\")\n .ipCidrRange(\"10.2.0.0/28\")\n .region(\"us-central1\")\n .network(customTestNetwork.id())\n .build());\n\n var connector = new Connector(\"connector\", ConnectorArgs.builder()\n .name(\"run-vpc\")\n .subnet(ConnectorSubnetArgs.builder()\n .name(customTest.name())\n .build())\n .machineType(\"e2-standard-4\")\n .minInstances(2)\n .maxInstances(3)\n .region(\"us-central1\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .vpcAccess(ServiceTemplateVpcAccessArgs.builder()\n .connector(connector.id())\n .egress(\"ALL_TRAFFIC\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n vpcAccess:\n connector: ${connector.id}\n egress: ALL_TRAFFIC\n connector:\n type: gcp:vpcaccess:Connector\n properties:\n name: run-vpc\n subnet:\n name: ${customTest.name}\n machineType: e2-standard-4\n minInstances: 2\n maxInstances: 3\n region: us-central1\n customTest:\n type: gcp:compute:Subnetwork\n name: custom_test\n properties:\n name: run-subnetwork\n ipCidrRange: 10.2.0.0/28\n region: us-central1\n network: ${customTestNetwork.id}\n customTestNetwork:\n type: gcp:compute:Network\n name: custom_test\n properties:\n name: run-network\n autoCreateSubnetworks: false\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Directvpc\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n launchStage: \"GA\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n vpcAccess: {\n networkInterfaces: [{\n network: \"default\",\n subnetwork: \"default\",\n tags: [\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n launch_stage=\"GA\",\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n \"vpc_access\": {\n \"network_interfaces\": [{\n \"network\": \"default\",\n \"subnetwork\": \"default\",\n \"tags\": [\n \"tag1\",\n \"tag2\",\n \"tag3\",\n ],\n }],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n LaunchStage = \"GA\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessArgs\n {\n NetworkInterfaces = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessNetworkInterfaceArgs\n {\n Network = \"default\",\n Subnetwork = \"default\",\n Tags = new[]\n {\n \"tag1\",\n \"tag2\",\n \"tag3\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tLaunchStage: pulumi.String(\"GA\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVpcAccess: \u0026cloudrunv2.ServiceTemplateVpcAccessArgs{\n\t\t\t\t\tNetworkInterfaces: cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArray{\n\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArgs{\n\t\t\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\tTags: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"tag1\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"tag2\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"tag3\"),\n\t\t\t\t\t\t\t},\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\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.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateVpcAccessArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .launchStage(\"GA\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .vpcAccess(ServiceTemplateVpcAccessArgs.builder()\n .networkInterfaces(ServiceTemplateVpcAccessNetworkInterfaceArgs.builder()\n .network(\"default\")\n .subnetwork(\"default\")\n .tags( \n \"tag1\",\n \"tag2\",\n \"tag3\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n launchStage: GA\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n vpcAccess:\n networkInterfaces:\n - network: default\n subnetwork: default\n tags:\n - tag1\n - tag2\n - tag3\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Gpu\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n ingress: \"INGRESS_TRAFFIC_ALL\",\n launchStage: \"BETA\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n resources: {\n limits: {\n cpu: \"4\",\n memory: \"16Gi\",\n \"nvidia.com/gpu\": \"1\",\n },\n startupCpuBoost: true,\n },\n }],\n nodeSelector: {\n accelerator: \"nvidia-l4\",\n },\n scaling: {\n maxInstanceCount: 1,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n ingress=\"INGRESS_TRAFFIC_ALL\",\n launch_stage=\"BETA\",\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"resources\": {\n \"limits\": {\n \"cpu\": \"4\",\n \"memory\": \"16Gi\",\n \"nvidia.com/gpu\": \"1\",\n },\n \"startup_cpu_boost\": True,\n },\n }],\n \"node_selector\": {\n \"accelerator\": \"nvidia-l4\",\n },\n \"scaling\": {\n \"max_instance_count\": 1,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Resources = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerResourcesArgs\n {\n Limits = \n {\n { \"cpu\", \"4\" },\n { \"memory\", \"16Gi\" },\n { \"nvidia.com/gpu\", \"1\" },\n },\n StartupCpuBoost = true,\n },\n },\n },\n NodeSelector = new Gcp.CloudRunV2.Inputs.ServiceTemplateNodeSelectorArgs\n {\n Accelerator = \"nvidia-l4\",\n },\n Scaling = new Gcp.CloudRunV2.Inputs.ServiceTemplateScalingArgs\n {\n MaxInstanceCount = 1,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tResources: \u0026cloudrunv2.ServiceTemplateContainerResourcesArgs{\n\t\t\t\t\t\t\tLimits: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"cpu\": pulumi.String(\"4\"),\n\t\t\t\t\t\t\t\t\"memory\": pulumi.String(\"16Gi\"),\n\t\t\t\t\t\t\t\t\"nvidia.com/gpu\": pulumi.String(\"1\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tStartupCpuBoost: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tNodeSelector: \u0026cloudrunv2.ServiceTemplateNodeSelectorArgs{\n\t\t\t\t\tAccelerator: pulumi.String(\"nvidia-l4\"),\n\t\t\t\t},\n\t\t\t\tScaling: \u0026cloudrunv2.ServiceTemplateScalingArgs{\n\t\t\t\t\tMaxInstanceCount: pulumi.Int(1),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateNodeSelectorArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateScalingArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .launchStage(\"BETA\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .resources(ServiceTemplateContainerResourcesArgs.builder()\n .limits(Map.ofEntries(\n Map.entry(\"cpu\", \"4\"),\n Map.entry(\"memory\", \"16Gi\"),\n Map.entry(\"nvidia.com/gpu\", \"1\")\n ))\n .startupCpuBoost(true)\n .build())\n .build())\n .nodeSelector(ServiceTemplateNodeSelectorArgs.builder()\n .accelerator(\"nvidia-l4\")\n .build())\n .scaling(ServiceTemplateScalingArgs.builder()\n .maxInstanceCount(1)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n ingress: INGRESS_TRAFFIC_ALL\n launchStage: BETA\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n resources:\n limits:\n cpu: '4'\n memory: 16Gi\n nvidia.com/gpu: '1'\n startupCpuBoost: true\n nodeSelector:\n accelerator: nvidia-l4\n scaling:\n maxInstanceCount: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Probes\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n startupProbe: {\n initialDelaySeconds: 0,\n timeoutSeconds: 1,\n periodSeconds: 3,\n failureThreshold: 1,\n tcpSocket: {\n port: 8080,\n },\n },\n livenessProbe: {\n httpGet: {\n path: \"/\",\n },\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"startup_probe\": {\n \"initial_delay_seconds\": 0,\n \"timeout_seconds\": 1,\n \"period_seconds\": 3,\n \"failure_threshold\": 1,\n \"tcp_socket\": {\n \"port\": 8080,\n },\n },\n \"liveness_probe\": {\n \"http_get\": {\n \"path\": \"/\",\n },\n },\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n StartupProbe = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeArgs\n {\n InitialDelaySeconds = 0,\n TimeoutSeconds = 1,\n PeriodSeconds = 3,\n FailureThreshold = 1,\n TcpSocket = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeTcpSocketArgs\n {\n Port = 8080,\n },\n },\n LivenessProbe = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerLivenessProbeArgs\n {\n HttpGet = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerLivenessProbeHttpGetArgs\n {\n Path = \"/\",\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tStartupProbe: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeArgs{\n\t\t\t\t\t\t\tInitialDelaySeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tTimeoutSeconds: pulumi.Int(1),\n\t\t\t\t\t\t\tPeriodSeconds: pulumi.Int(3),\n\t\t\t\t\t\t\tFailureThreshold: pulumi.Int(1),\n\t\t\t\t\t\t\tTcpSocket: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeTcpSocketArgs{\n\t\t\t\t\t\t\t\tPort: pulumi.Int(8080),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLivenessProbe: \u0026cloudrunv2.ServiceTemplateContainerLivenessProbeArgs{\n\t\t\t\t\t\t\tHttpGet: \u0026cloudrunv2.ServiceTemplateContainerLivenessProbeHttpGetArgs{\n\t\t\t\t\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t},\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\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.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .startupProbe(ServiceTemplateContainerStartupProbeArgs.builder()\n .initialDelaySeconds(0)\n .timeoutSeconds(1)\n .periodSeconds(3)\n .failureThreshold(1)\n .tcpSocket(ServiceTemplateContainerStartupProbeTcpSocketArgs.builder()\n .port(8080)\n .build())\n .build())\n .livenessProbe(ServiceTemplateContainerLivenessProbeArgs.builder()\n .httpGet(ServiceTemplateContainerLivenessProbeHttpGetArgs.builder()\n .path(\"/\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n startupProbe:\n initialDelaySeconds: 0\n timeoutSeconds: 1\n periodSeconds: 3\n failureThreshold: 1\n tcpSocket:\n port: 8080\n livenessProbe:\n httpGet:\n path: /\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Secret\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret-1\",\n replication: {\n auto: {},\n },\n});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n volumes: [{\n name: \"a-volume\",\n secret: {\n secret: secret.secretId,\n defaultMode: 292,\n items: [{\n version: \"1\",\n path: \"my-secret\",\n }],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"a-volume\",\n mountPath: \"/secrets\",\n }],\n }],\n },\n}, {\n dependsOn: [secret_version_data],\n});\nconst project = gcp.organizations.getProject({});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n}, {\n dependsOn: [secret],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret-1\",\n replication={\n \"auto\": {},\n })\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"volumes\": [{\n \"name\": \"a-volume\",\n \"secret\": {\n \"secret\": secret.secret_id,\n \"default_mode\": 292,\n \"items\": [{\n \"version\": \"1\",\n \"path\": \"my-secret\",\n }],\n },\n }],\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"volume_mounts\": [{\n \"name\": \"a-volume\",\n \"mount_path\": \"/secrets\",\n }],\n }],\n },\n opts = pulumi.ResourceOptions(depends_on=[secret_version_data]))\nproject = gcp.organizations.get_project()\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\",\n opts = pulumi.ResourceOptions(depends_on=[secret]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret-1\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"a-volume\",\n Secret = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeSecretArgs\n {\n Secret = secret.SecretId,\n DefaultMode = 292,\n Items = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeSecretItemArgs\n {\n Version = \"1\",\n Path = \"my-secret\",\n },\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"a-volume\",\n MountPath = \"/secrets\",\n },\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret_version_data,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n secret,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret-1\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\tSecret: \u0026cloudrunv2.ServiceTemplateVolumeSecretArgs{\n\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\tDefaultMode: pulumi.Int(292),\n\t\t\t\t\t\t\tItems: cloudrunv2.ServiceTemplateVolumeSecretItemArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeSecretItemArgs{\n\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"my-secret\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/secrets\"),\n\t\t\t\t\t\t\t},\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}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret_version_data,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret,\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.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 secret = new Secret(\"secret\", SecretArgs.builder()\n .secretId(\"secret-1\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder()\n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"a-volume\")\n .secret(ServiceTemplateVolumeSecretArgs.builder()\n .secret(secret.secretId())\n .defaultMode(292)\n .items(ServiceTemplateVolumeSecretItemArgs.builder()\n .version(\"1\")\n .path(\"my-secret\")\n .build())\n .build())\n .build())\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"a-volume\")\n .mountPath(\"/secrets\")\n .build())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret_version_data)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder()\n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n ingress: INGRESS_TRAFFIC_ALL\n template:\n volumes:\n - name: a-volume\n secret:\n secret: ${secret.secretId}\n defaultMode: 292\n items:\n - version: '1'\n path: my-secret\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: a-volume\n mountPath: /secrets\n options:\n dependson:\n - ${[\"secret-version-data\"]}\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret-1\n replication:\n auto: {}\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n options:\n dependson:\n - ${secret}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Multicontainer\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [\n {\n name: \"hello-1\",\n ports: {\n containerPort: 8080,\n },\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n dependsOns: [\"hello-2\"],\n volumeMounts: [{\n name: \"empty-dir-volume\",\n mountPath: \"/mnt\",\n }],\n },\n {\n name: \"hello-2\",\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n envs: [{\n name: \"PORT\",\n value: \"8081\",\n }],\n startupProbe: {\n httpGet: {\n port: 8081,\n },\n },\n },\n ],\n volumes: [{\n name: \"empty-dir-volume\",\n emptyDir: {\n medium: \"MEMORY\",\n sizeLimit: \"256Mi\",\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"containers\": [\n {\n \"name\": \"hello-1\",\n \"ports\": {\n \"container_port\": 8080,\n },\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"depends_ons\": [\"hello-2\"],\n \"volume_mounts\": [{\n \"name\": \"empty-dir-volume\",\n \"mount_path\": \"/mnt\",\n }],\n },\n {\n \"name\": \"hello-2\",\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"envs\": [{\n \"name\": \"PORT\",\n \"value\": \"8081\",\n }],\n \"startup_probe\": {\n \"http_get\": {\n \"port\": 8081,\n },\n },\n },\n ],\n \"volumes\": [{\n \"name\": \"empty-dir-volume\",\n \"empty_dir\": {\n \"medium\": \"MEMORY\",\n \"size_limit\": \"256Mi\",\n },\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Name = \"hello-1\",\n Ports = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerPortsArgs\n {\n ContainerPort = 8080,\n },\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n DependsOns = new[]\n {\n \"hello-2\",\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"empty-dir-volume\",\n MountPath = \"/mnt\",\n },\n },\n },\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Name = \"hello-2\",\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerEnvArgs\n {\n Name = \"PORT\",\n Value = \"8081\",\n },\n },\n StartupProbe = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeArgs\n {\n HttpGet = new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerStartupProbeHttpGetArgs\n {\n Port = 8081,\n },\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"empty-dir-volume\",\n EmptyDir = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeEmptyDirArgs\n {\n Medium = \"MEMORY\",\n SizeLimit = \"256Mi\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tName: pulumi.String(\"hello-1\"),\n\t\t\t\t\t\tPorts: \u0026cloudrunv2.ServiceTemplateContainerPortsArgs{\n\t\t\t\t\t\t\tContainerPort: pulumi.Int(8080),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tDependsOns: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"hello-2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/mnt\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tName: pulumi.String(\"hello-2\"),\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tEnvs: cloudrunv2.ServiceTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"PORT\"),\n\t\t\t\t\t\t\t\tValue: pulumi.String(\"8081\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStartupProbe: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeArgs{\n\t\t\t\t\t\t\tHttpGet: \u0026cloudrunv2.ServiceTemplateContainerStartupProbeHttpGetArgs{\n\t\t\t\t\t\t\t\tPort: pulumi.Int(8081),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"empty-dir-volume\"),\n\t\t\t\t\t\tEmptyDir: \u0026cloudrunv2.ServiceTemplateVolumeEmptyDirArgs{\n\t\t\t\t\t\t\tMedium: pulumi.String(\"MEMORY\"),\n\t\t\t\t\t\t\tSizeLimit: pulumi.String(\"256Mi\"),\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\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.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers( \n ServiceTemplateContainerArgs.builder()\n .name(\"hello-1\")\n .ports(ServiceTemplateContainerPortsArgs.builder()\n .containerPort(8080)\n .build())\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .dependsOns(\"hello-2\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"empty-dir-volume\")\n .mountPath(\"/mnt\")\n .build())\n .build(),\n ServiceTemplateContainerArgs.builder()\n .name(\"hello-2\")\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .envs(ServiceTemplateContainerEnvArgs.builder()\n .name(\"PORT\")\n .value(\"8081\")\n .build())\n .startupProbe(ServiceTemplateContainerStartupProbeArgs.builder()\n .httpGet(ServiceTemplateContainerStartupProbeHttpGetArgs.builder()\n .port(8081)\n .build())\n .build())\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"empty-dir-volume\")\n .emptyDir(ServiceTemplateVolumeEmptyDirArgs.builder()\n .medium(\"MEMORY\")\n .sizeLimit(\"256Mi\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - name: hello-1\n ports:\n containerPort: 8080\n image: us-docker.pkg.dev/cloudrun/container/hello\n dependsOns:\n - hello-2\n volumeMounts:\n - name: empty-dir-volume\n mountPath: /mnt\n - name: hello-2\n image: us-docker.pkg.dev/cloudrun/container/hello\n envs:\n - name: PORT\n value: '8081'\n startupProbe:\n httpGet:\n port: 8081\n volumes:\n - name: empty-dir-volume\n emptyDir:\n medium: MEMORY\n sizeLimit: 256Mi\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Mount Gcs\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultBucket = new gcp.storage.Bucket(\"default\", {\n name: \"cloudrun-service\",\n location: \"US\",\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n template: {\n executionEnvironment: \"EXECUTION_ENVIRONMENT_GEN2\",\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"bucket\",\n mountPath: \"/var/www\",\n }],\n }],\n volumes: [{\n name: \"bucket\",\n gcs: {\n bucket: defaultBucket.name,\n readOnly: false,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_bucket = gcp.storage.Bucket(\"default\",\n name=\"cloudrun-service\",\n location=\"US\")\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n template={\n \"execution_environment\": \"EXECUTION_ENVIRONMENT_GEN2\",\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n \"volume_mounts\": [{\n \"name\": \"bucket\",\n \"mount_path\": \"/var/www\",\n }],\n }],\n \"volumes\": [{\n \"name\": \"bucket\",\n \"gcs\": {\n \"bucket\": default_bucket.name,\n \"read_only\": False,\n },\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultBucket = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"US\",\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n ExecutionEnvironment = \"EXECUTION_ENVIRONMENT_GEN2\",\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"bucket\",\n MountPath = \"/var/www\",\n },\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"bucket\",\n Gcs = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeGcsArgs\n {\n Bucket = defaultBucket.Name,\n ReadOnly = false,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultBucket, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tExecutionEnvironment: pulumi.String(\"EXECUTION_ENVIRONMENT_GEN2\"),\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"bucket\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/var/www\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"bucket\"),\n\t\t\t\t\t\tGcs: \u0026cloudrunv2.ServiceTemplateVolumeGcsArgs{\n\t\t\t\t\t\t\tBucket: defaultBucket.Name,\n\t\t\t\t\t\t\tReadOnly: pulumi.Bool(false),\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\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.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\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 defaultBucket = new Bucket(\"defaultBucket\", BucketArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"US\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .template(ServiceTemplateArgs.builder()\n .executionEnvironment(\"EXECUTION_ENVIRONMENT_GEN2\")\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"bucket\")\n .mountPath(\"/var/www\")\n .build())\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"bucket\")\n .gcs(ServiceTemplateVolumeGcsArgs.builder()\n .bucket(defaultBucket.name())\n .readOnly(false)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n template:\n executionEnvironment: EXECUTION_ENVIRONMENT_GEN2\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: bucket\n mountPath: /var/www\n volumes:\n - name: bucket\n gcs:\n bucket: ${defaultBucket.name}\n readOnly: false\n defaultBucket:\n type: gcp:storage:Bucket\n name: default\n properties:\n name: cloudrun-service\n location: US\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Mount Nfs\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultInstance = new gcp.filestore.Instance(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1-b\",\n tier: \"BASIC_HDD\",\n fileShares: {\n capacityGb: 1024,\n name: \"share1\",\n },\n networks: [{\n network: \"default\",\n modes: [\"MODE_IPV4\"],\n }],\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n executionEnvironment: \"EXECUTION_ENVIRONMENT_GEN2\",\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello:latest\",\n volumeMounts: [{\n name: \"nfs\",\n mountPath: \"/mnt/nfs/filestore\",\n }],\n }],\n vpcAccess: {\n networkInterfaces: [{\n network: \"default\",\n subnetwork: \"default\",\n }],\n },\n volumes: [{\n name: \"nfs\",\n nfs: {\n server: defaultInstance.networks.apply(networks =\u003e networks[0].ipAddresses?.[0]),\n path: \"/share1\",\n readOnly: false,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_instance = gcp.filestore.Instance(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1-b\",\n tier=\"BASIC_HDD\",\n file_shares={\n \"capacity_gb\": 1024,\n \"name\": \"share1\",\n },\n networks=[{\n \"network\": \"default\",\n \"modes\": [\"MODE_IPV4\"],\n }])\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"execution_environment\": \"EXECUTION_ENVIRONMENT_GEN2\",\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello:latest\",\n \"volume_mounts\": [{\n \"name\": \"nfs\",\n \"mount_path\": \"/mnt/nfs/filestore\",\n }],\n }],\n \"vpc_access\": {\n \"network_interfaces\": [{\n \"network\": \"default\",\n \"subnetwork\": \"default\",\n }],\n },\n \"volumes\": [{\n \"name\": \"nfs\",\n \"nfs\": {\n \"server\": default_instance.networks[0].ip_addresses[0],\n \"path\": \"/share1\",\n \"read_only\": False,\n },\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultInstance = new Gcp.Filestore.Instance(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1-b\",\n Tier = \"BASIC_HDD\",\n FileShares = new Gcp.Filestore.Inputs.InstanceFileSharesArgs\n {\n CapacityGb = 1024,\n Name = \"share1\",\n },\n Networks = new[]\n {\n new Gcp.Filestore.Inputs.InstanceNetworkArgs\n {\n Network = \"default\",\n Modes = new[]\n {\n \"MODE_IPV4\",\n },\n },\n },\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n ExecutionEnvironment = \"EXECUTION_ENVIRONMENT_GEN2\",\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello:latest\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerVolumeMountArgs\n {\n Name = \"nfs\",\n MountPath = \"/mnt/nfs/filestore\",\n },\n },\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessArgs\n {\n NetworkInterfaces = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVpcAccessNetworkInterfaceArgs\n {\n Network = \"default\",\n Subnetwork = \"default\",\n },\n },\n },\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeArgs\n {\n Name = \"nfs\",\n Nfs = new Gcp.CloudRunV2.Inputs.ServiceTemplateVolumeNfsArgs\n {\n Server = defaultInstance.Networks.Apply(networks =\u003e networks[0].IpAddresses[0]),\n Path = \"/share1\",\n ReadOnly = false,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/filestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultInstance, err := filestore.NewInstance(ctx, \"default\", \u0026filestore.InstanceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1-b\"),\n\t\t\tTier: pulumi.String(\"BASIC_HDD\"),\n\t\t\tFileShares: \u0026filestore.InstanceFileSharesArgs{\n\t\t\t\tCapacityGb: pulumi.Int(1024),\n\t\t\t\tName: pulumi.String(\"share1\"),\n\t\t\t},\n\t\t\tNetworks: filestore.InstanceNetworkArray{\n\t\t\t\t\u0026filestore.InstanceNetworkArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\tModes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"MODE_IPV4\"),\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\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tExecutionEnvironment: pulumi.String(\"EXECUTION_ENVIRONMENT_GEN2\"),\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello:latest\"),\n\t\t\t\t\t\tVolumeMounts: cloudrunv2.ServiceTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\tName: pulumi.String(\"nfs\"),\n\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/mnt/nfs/filestore\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVpcAccess: \u0026cloudrunv2.ServiceTemplateVpcAccessArgs{\n\t\t\t\t\tNetworkInterfaces: cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArray{\n\t\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVpcAccessNetworkInterfaceArgs{\n\t\t\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t\tSubnetwork: pulumi.String(\"default\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tVolumes: cloudrunv2.ServiceTemplateVolumeArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateVolumeArgs{\n\t\t\t\t\t\tName: pulumi.String(\"nfs\"),\n\t\t\t\t\t\tNfs: \u0026cloudrunv2.ServiceTemplateVolumeNfsArgs{\n\t\t\t\t\t\t\tServer: defaultInstance.Networks.ApplyT(func(networks []filestore.InstanceNetwork) (*string, error) {\n\t\t\t\t\t\t\t\treturn \u0026networks[0].IpAddresses[0], nil\n\t\t\t\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\t\t\t\tPath: pulumi.String(\"/share1\"),\n\t\t\t\t\t\t\tReadOnly: pulumi.Bool(false),\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\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.gcp.filestore.Instance;\nimport com.pulumi.gcp.filestore.InstanceArgs;\nimport com.pulumi.gcp.filestore.inputs.InstanceFileSharesArgs;\nimport com.pulumi.gcp.filestore.inputs.InstanceNetworkArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateVpcAccessArgs;\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 defaultInstance = new Instance(\"defaultInstance\", InstanceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1-b\")\n .tier(\"BASIC_HDD\")\n .fileShares(InstanceFileSharesArgs.builder()\n .capacityGb(1024)\n .name(\"share1\")\n .build())\n .networks(InstanceNetworkArgs.builder()\n .network(\"default\")\n .modes(\"MODE_IPV4\")\n .build())\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .executionEnvironment(\"EXECUTION_ENVIRONMENT_GEN2\")\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello:latest\")\n .volumeMounts(ServiceTemplateContainerVolumeMountArgs.builder()\n .name(\"nfs\")\n .mountPath(\"/mnt/nfs/filestore\")\n .build())\n .build())\n .vpcAccess(ServiceTemplateVpcAccessArgs.builder()\n .networkInterfaces(ServiceTemplateVpcAccessNetworkInterfaceArgs.builder()\n .network(\"default\")\n .subnetwork(\"default\")\n .build())\n .build())\n .volumes(ServiceTemplateVolumeArgs.builder()\n .name(\"nfs\")\n .nfs(ServiceTemplateVolumeNfsArgs.builder()\n .server(defaultInstance.networks().applyValue(networks -\u003e networks[0].ipAddresses()[0]))\n .path(\"/share1\")\n .readOnly(false)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n ingress: INGRESS_TRAFFIC_ALL\n template:\n executionEnvironment: EXECUTION_ENVIRONMENT_GEN2\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello:latest\n volumeMounts:\n - name: nfs\n mountPath: /mnt/nfs/filestore\n vpcAccess:\n networkInterfaces:\n - network: default\n subnetwork: default\n volumes:\n - name: nfs\n nfs:\n server: ${defaultInstance.networks[0].ipAddresses[0]}\n path: /share1\n readOnly: false\n defaultInstance:\n type: gcp:filestore:Instance\n name: default\n properties:\n name: cloudrun-service\n location: us-central1-b\n tier: BASIC_HDD\n fileShares:\n capacityGb: 1024\n name: share1\n networks:\n - network: default\n modes:\n - MODE_IPV4\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Mesh\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as time from \"@pulumi/time\";\n\nconst mesh = new gcp.networkservices.Mesh(\"mesh\", {name: \"network-services-mesh\"});\nconst waitForMesh = new time.index.Sleep(\"wait_for_mesh\", {createDuration: \"1m\"}, {\n dependsOn: [mesh],\n});\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n deletionProtection: false,\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n serviceMesh: {\n mesh: mesh.id,\n },\n },\n}, {\n dependsOn: [waitForMesh],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_time as time\n\nmesh = gcp.networkservices.Mesh(\"mesh\", name=\"network-services-mesh\")\nwait_for_mesh = time.index.Sleep(\"wait_for_mesh\", create_duration=1m,\nopts = pulumi.ResourceOptions(depends_on=[mesh]))\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n deletion_protection=False,\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n \"service_mesh\": {\n \"mesh\": mesh.id,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[wait_for_mesh]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Time = Pulumi.Time;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var mesh = new Gcp.NetworkServices.Mesh(\"mesh\", new()\n {\n Name = \"network-services-mesh\",\n });\n\n var waitForMesh = new Time.Index.Sleep(\"wait_for_mesh\", new()\n {\n CreateDuration = \"1m\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n mesh,\n },\n });\n\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n DeletionProtection = false,\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n ServiceMesh = new Gcp.CloudRunV2.Inputs.ServiceTemplateServiceMeshArgs\n {\n Mesh = mesh.Id,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n waitForMesh,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkservices\"\n\t\"github.com/pulumi/pulumi-time/sdk/go/time\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmesh, err := networkservices.NewMesh(ctx, \"mesh\", \u0026networkservices.MeshArgs{\n\t\t\tName: pulumi.String(\"network-services-mesh\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twaitForMesh, err := time.NewSleep(ctx, \"wait_for_mesh\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"1m\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tmesh,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tServiceMesh: \u0026cloudrunv2.ServiceTemplateServiceMeshArgs{\n\t\t\t\t\tMesh: mesh.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\twaitForMesh,\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.gcp.networkservices.Mesh;\nimport com.pulumi.gcp.networkservices.MeshArgs;\nimport com.pulumi.time.sleep;\nimport com.pulumi.time.SleepArgs;\nimport com.pulumi.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateServiceMeshArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 mesh = new Mesh(\"mesh\", MeshArgs.builder()\n .name(\"network-services-mesh\")\n .build());\n\n var waitForMesh = new Sleep(\"waitForMesh\", SleepArgs.builder()\n .createDuration(\"1m\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(mesh)\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .deletionProtection(false)\n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .serviceMesh(ServiceTemplateServiceMeshArgs.builder()\n .mesh(mesh.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(waitForMesh)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n deletionProtection: false\n location: us-central1\n launchStage: BETA\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n serviceMesh:\n mesh: ${mesh.id}\n options:\n dependson:\n - ${waitForMesh}\n waitForMesh:\n type: time:sleep\n name: wait_for_mesh\n properties:\n createDuration: 1m\n options:\n dependson:\n - ${mesh}\n mesh:\n type: gcp:networkservices:Mesh\n properties:\n name: network-services-mesh\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Cloudrunv2 Service Invokeriam\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Service(\"default\", {\n name: \"cloudrun-service\",\n location: \"us-central1\",\n deletionProtection: false,\n invokerIamDisabled: true,\n description: \"The serving URL of this service will not perform any IAM check when invoked\",\n ingress: \"INGRESS_TRAFFIC_ALL\",\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Service(\"default\",\n name=\"cloudrun-service\",\n location=\"us-central1\",\n deletion_protection=False,\n invoker_iam_disabled=True,\n description=\"The serving URL of this service will not perform any IAM check when invoked\",\n ingress=\"INGRESS_TRAFFIC_ALL\",\n template={\n \"containers\": [{\n \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Service(\"default\", new()\n {\n Name = \"cloudrun-service\",\n Location = \"us-central1\",\n DeletionProtection = false,\n InvokerIamDisabled = true,\n Description = \"The serving URL of this service will not perform any IAM check when invoked\",\n Ingress = \"INGRESS_TRAFFIC_ALL\",\n Template = new Gcp.CloudRunV2.Inputs.ServiceTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.ServiceTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewService(ctx, \"default\", \u0026cloudrunv2.ServiceArgs{\n\t\t\tName: pulumi.String(\"cloudrun-service\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tInvokerIamDisabled: pulumi.Bool(true),\n\t\t\tDescription: pulumi.String(\"The serving URL of this service will not perform any IAM check when invoked\"),\n\t\t\tIngress: pulumi.String(\"INGRESS_TRAFFIC_ALL\"),\n\t\t\tTemplate: \u0026cloudrunv2.ServiceTemplateArgs{\n\t\t\t\tContainers: cloudrunv2.ServiceTemplateContainerArray{\n\t\t\t\t\t\u0026cloudrunv2.ServiceTemplateContainerArgs{\n\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\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\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.gcp.cloudrunv2.Service;\nimport com.pulumi.gcp.cloudrunv2.ServiceArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.ServiceTemplateArgs;\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 default_ = new Service(\"default\", ServiceArgs.builder()\n .name(\"cloudrun-service\")\n .location(\"us-central1\")\n .deletionProtection(false)\n .invokerIamDisabled(true)\n .description(\"The serving URL of this service will not perform any IAM check when invoked\")\n .ingress(\"INGRESS_TRAFFIC_ALL\")\n .template(ServiceTemplateArgs.builder()\n .containers(ServiceTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Service\n properties:\n name: cloudrun-service\n location: us-central1\n deletionProtection: false\n invokerIamDisabled: true\n description: The serving URL of this service will not perform any IAM check when invoked\n ingress: INGRESS_TRAFFIC_ALL\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nService can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/services/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Service can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:cloudrunv2/service:Service default projects/{{project}}/locations/{{location}}/services/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/service:Service default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:cloudrunv2/service:Service default {{location}}/{{name}}\n```\n\n", "properties": { "annotations": { "type": "object", @@ -157684,7 +159681,7 @@ }, "asyncPrimaryDisk": { "$ref": "#/types/gcp:compute/DiskAsyncPrimaryDisk:DiskAsyncPrimaryDisk", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "creationTimestamp": { "type": "string", @@ -157884,7 +159881,7 @@ }, "asyncPrimaryDisk": { "$ref": "#/types/gcp:compute/DiskAsyncPrimaryDisk:DiskAsyncPrimaryDisk", - "description": "A nested object resource\nStructure is documented below.\n", + "description": "A nested object resource.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "description": { @@ -158021,7 +160018,7 @@ }, "asyncPrimaryDisk": { "$ref": "#/types/gcp:compute/DiskAsyncPrimaryDisk:DiskAsyncPrimaryDisk", - "description": "A nested object resource\nStructure is documented below.\n", + "description": "A nested object resource.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "creationTimestamp": { @@ -159352,19 +161349,23 @@ } }, "gcp:compute/firewallPolicyRule:FirewallPolicyRule": { - "description": "The Compute FirewallPolicyRule resource\n\n## Example Usage\n\n### Basic_fir_sec_rule\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicGlobalNetworksecurityAddressGroup = new gcp.networksecurity.AddressGroup(\"basic_global_networksecurity_address_group\", {\n name: \"policy\",\n parent: \"organizations/123456789\",\n description: \"Sample global networksecurity_address_group\",\n location: \"global\",\n items: [\"208.80.154.224/32\"],\n type: \"IPV4\",\n capacity: 100,\n});\nconst folder = new gcp.organizations.Folder(\"folder\", {\n displayName: \"policy\",\n parent: \"organizations/123456789\",\n deletionProtection: false,\n});\nconst _default = new gcp.compute.FirewallPolicy(\"default\", {\n parent: folder.id,\n shortName: \"policy\",\n description: \"Resource created for Terraform acceptance testing\",\n});\nconst primary = new gcp.compute.FirewallPolicyRule(\"primary\", {\n firewallPolicy: _default.name,\n description: \"Resource created for Terraform acceptance testing\",\n priority: 9000,\n enableLogging: true,\n action: \"allow\",\n direction: \"EGRESS\",\n disabled: false,\n match: {\n layer4Configs: [\n {\n ipProtocol: \"tcp\",\n ports: [\"8080\"],\n },\n {\n ipProtocol: \"udp\",\n ports: [\"22\"],\n },\n ],\n destIpRanges: [\"11.100.0.1/32\"],\n destFqdns: [],\n destRegionCodes: [\"US\"],\n destThreatIntelligences: [\"iplist-known-malicious-ips\"],\n srcAddressGroups: [],\n destAddressGroups: [basicGlobalNetworksecurityAddressGroup.id],\n },\n targetServiceAccounts: [\"my@service-account.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_global_networksecurity_address_group = gcp.networksecurity.AddressGroup(\"basic_global_networksecurity_address_group\",\n name=\"policy\",\n parent=\"organizations/123456789\",\n description=\"Sample global networksecurity_address_group\",\n location=\"global\",\n items=[\"208.80.154.224/32\"],\n type=\"IPV4\",\n capacity=100)\nfolder = gcp.organizations.Folder(\"folder\",\n display_name=\"policy\",\n parent=\"organizations/123456789\",\n deletion_protection=False)\ndefault = gcp.compute.FirewallPolicy(\"default\",\n parent=folder.id,\n short_name=\"policy\",\n description=\"Resource created for Terraform acceptance testing\")\nprimary = gcp.compute.FirewallPolicyRule(\"primary\",\n firewall_policy=default.name,\n description=\"Resource created for Terraform acceptance testing\",\n priority=9000,\n enable_logging=True,\n action=\"allow\",\n direction=\"EGRESS\",\n disabled=False,\n match={\n \"layer4_configs\": [\n {\n \"ip_protocol\": \"tcp\",\n \"ports\": [\"8080\"],\n },\n {\n \"ip_protocol\": \"udp\",\n \"ports\": [\"22\"],\n },\n ],\n \"dest_ip_ranges\": [\"11.100.0.1/32\"],\n \"dest_fqdns\": [],\n \"dest_region_codes\": [\"US\"],\n \"dest_threat_intelligences\": [\"iplist-known-malicious-ips\"],\n \"src_address_groups\": [],\n \"dest_address_groups\": [basic_global_networksecurity_address_group.id],\n },\n target_service_accounts=[\"my@service-account.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicGlobalNetworksecurityAddressGroup = new Gcp.NetworkSecurity.AddressGroup(\"basic_global_networksecurity_address_group\", new()\n {\n Name = \"policy\",\n Parent = \"organizations/123456789\",\n Description = \"Sample global networksecurity_address_group\",\n Location = \"global\",\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n Type = \"IPV4\",\n Capacity = 100,\n });\n\n var folder = new Gcp.Organizations.Folder(\"folder\", new()\n {\n DisplayName = \"policy\",\n Parent = \"organizations/123456789\",\n DeletionProtection = false,\n });\n\n var @default = new Gcp.Compute.FirewallPolicy(\"default\", new()\n {\n Parent = folder.Id,\n ShortName = \"policy\",\n Description = \"Resource created for Terraform acceptance testing\",\n });\n\n var primary = new Gcp.Compute.FirewallPolicyRule(\"primary\", new()\n {\n FirewallPolicy = @default.Name,\n Description = \"Resource created for Terraform acceptance testing\",\n Priority = 9000,\n EnableLogging = true,\n Action = \"allow\",\n Direction = \"EGRESS\",\n Disabled = false,\n Match = new Gcp.Compute.Inputs.FirewallPolicyRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.FirewallPolicyRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"tcp\",\n Ports = new[]\n {\n \"8080\",\n },\n },\n new Gcp.Compute.Inputs.FirewallPolicyRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"udp\",\n Ports = new[]\n {\n \"22\",\n },\n },\n },\n DestIpRanges = new[]\n {\n \"11.100.0.1/32\",\n },\n DestFqdns = new() { },\n DestRegionCodes = new[]\n {\n \"US\",\n },\n DestThreatIntelligences = new[]\n {\n \"iplist-known-malicious-ips\",\n },\n SrcAddressGroups = new() { },\n DestAddressGroups = new[]\n {\n basicGlobalNetworksecurityAddressGroup.Id,\n },\n },\n TargetServiceAccounts = new[]\n {\n \"my@service-account.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicGlobalNetworksecurityAddressGroup, err := networksecurity.NewAddressGroup(ctx, \"basic_global_networksecurity_address_group\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"policy\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDescription: pulumi.String(\"Sample global networksecurity_address_group\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfolder, err := organizations.NewFolder(ctx, \"folder\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"policy\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewFirewallPolicy(ctx, \"default\", \u0026compute.FirewallPolicyArgs{\n\t\t\tParent: folder.ID(),\n\t\t\tShortName: pulumi.String(\"policy\"),\n\t\t\tDescription: pulumi.String(\"Resource created for Terraform acceptance testing\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewFirewallPolicyRule(ctx, \"primary\", \u0026compute.FirewallPolicyRuleArgs{\n\t\t\tFirewallPolicy: _default.Name,\n\t\t\tDescription: pulumi.String(\"Resource created for Terraform acceptance testing\"),\n\t\t\tPriority: pulumi.Int(9000),\n\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\tDirection: pulumi.String(\"EGRESS\"),\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tMatch: \u0026compute.FirewallPolicyRuleMatchArgs{\n\t\t\t\tLayer4Configs: compute.FirewallPolicyRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\u0026compute.FirewallPolicyRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\tIpProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"8080\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026compute.FirewallPolicyRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\tIpProtocol: pulumi.String(\"udp\"),\n\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"22\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tDestIpRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"11.100.0.1/32\"),\n\t\t\t\t},\n\t\t\t\tDestFqdns: pulumi.StringArray{},\n\t\t\t\tDestRegionCodes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\t},\n\t\t\t\tDestThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"iplist-known-malicious-ips\"),\n\t\t\t\t},\n\t\t\t\tSrcAddressGroups: pulumi.StringArray{},\n\t\t\t\tDestAddressGroups: pulumi.StringArray{\n\t\t\t\t\tbasicGlobalNetworksecurityAddressGroup.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetServiceAccounts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"my@service-account.com\"),\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.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\nimport com.pulumi.gcp.organizations.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.compute.FirewallPolicy;\nimport com.pulumi.gcp.compute.FirewallPolicyArgs;\nimport com.pulumi.gcp.compute.FirewallPolicyRule;\nimport com.pulumi.gcp.compute.FirewallPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.FirewallPolicyRuleMatchArgs;\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 basicGlobalNetworksecurityAddressGroup = new AddressGroup(\"basicGlobalNetworksecurityAddressGroup\", AddressGroupArgs.builder()\n .name(\"policy\")\n .parent(\"organizations/123456789\")\n .description(\"Sample global networksecurity_address_group\")\n .location(\"global\")\n .items(\"208.80.154.224/32\")\n .type(\"IPV4\")\n .capacity(100)\n .build());\n\n var folder = new Folder(\"folder\", FolderArgs.builder()\n .displayName(\"policy\")\n .parent(\"organizations/123456789\")\n .deletionProtection(false)\n .build());\n\n var default_ = new FirewallPolicy(\"default\", FirewallPolicyArgs.builder()\n .parent(folder.id())\n .shortName(\"policy\")\n .description(\"Resource created for Terraform acceptance testing\")\n .build());\n\n var primary = new FirewallPolicyRule(\"primary\", FirewallPolicyRuleArgs.builder()\n .firewallPolicy(default_.name())\n .description(\"Resource created for Terraform acceptance testing\")\n .priority(9000)\n .enableLogging(true)\n .action(\"allow\")\n .direction(\"EGRESS\")\n .disabled(false)\n .match(FirewallPolicyRuleMatchArgs.builder()\n .layer4Configs( \n FirewallPolicyRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"tcp\")\n .ports(8080)\n .build(),\n FirewallPolicyRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"udp\")\n .ports(22)\n .build())\n .destIpRanges(\"11.100.0.1/32\")\n .destFqdns()\n .destRegionCodes(\"US\")\n .destThreatIntelligences(\"iplist-known-malicious-ips\")\n .srcAddressGroups()\n .destAddressGroups(basicGlobalNetworksecurityAddressGroup.id())\n .build())\n .targetServiceAccounts(\"my@service-account.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicGlobalNetworksecurityAddressGroup:\n type: gcp:networksecurity:AddressGroup\n name: basic_global_networksecurity_address_group\n properties:\n name: policy\n parent: organizations/123456789\n description: Sample global networksecurity_address_group\n location: global\n items:\n - 208.80.154.224/32\n type: IPV4\n capacity: 100\n folder:\n type: gcp:organizations:Folder\n properties:\n displayName: policy\n parent: organizations/123456789\n deletionProtection: false\n default:\n type: gcp:compute:FirewallPolicy\n properties:\n parent: ${folder.id}\n shortName: policy\n description: Resource created for Terraform acceptance testing\n primary:\n type: gcp:compute:FirewallPolicyRule\n properties:\n firewallPolicy: ${default.name}\n description: Resource created for Terraform acceptance testing\n priority: 9000\n enableLogging: true\n action: allow\n direction: EGRESS\n disabled: false\n match:\n layer4Configs:\n - ipProtocol: tcp\n ports:\n - 8080\n - ipProtocol: udp\n ports:\n - 22\n destIpRanges:\n - 11.100.0.1/32\n destFqdns: []\n destRegionCodes:\n - US\n destThreatIntelligences:\n - iplist-known-malicious-ips\n srcAddressGroups: []\n destAddressGroups:\n - ${basicGlobalNetworksecurityAddressGroup.id}\n targetServiceAccounts:\n - my@service-account.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFirewallPolicyRule can be imported using any of these accepted formats:\n\n* `locations/global/firewallPolicies/{{firewall_policy}}/rules/{{priority}}`\n\n* `{{firewall_policy}}/{{priority}}`\n\nWhen using the `pulumi import` command, FirewallPolicyRule can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/firewallPolicyRule:FirewallPolicyRule default locations/global/firewallPolicies/{{firewall_policy}}/rules/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/firewallPolicyRule:FirewallPolicyRule default {{firewall_policy}}/{{priority}}\n```\n\n", + "description": "## Example Usage\n\n### Firewall Policy Rule\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicGlobalNetworksecurityAddressGroup = new gcp.networksecurity.AddressGroup(\"basic_global_networksecurity_address_group\", {\n name: \"address\",\n parent: \"organizations/123456789\",\n description: \"Sample global networksecurity_address_group\",\n location: \"global\",\n items: [\"208.80.154.224/32\"],\n type: \"IPV4\",\n capacity: 100,\n});\nconst folder = new gcp.organizations.Folder(\"folder\", {\n displayName: \"folder\",\n parent: \"organizations/123456789\",\n deletionProtection: false,\n});\nconst _default = new gcp.compute.FirewallPolicy(\"default\", {\n parent: folder.id,\n shortName: \"policy\",\n description: \"Resource created for Terraform acceptance testing\",\n});\nconst policyRule = new gcp.compute.FirewallPolicyRule(\"policy_rule\", {\n firewallPolicy: _default.name,\n description: \"Resource created for Terraform acceptance testing\",\n priority: 9000,\n enableLogging: true,\n action: \"allow\",\n direction: \"EGRESS\",\n disabled: false,\n match: {\n layer4Configs: [\n {\n ipProtocol: \"tcp\",\n ports: [\"8080\"],\n },\n {\n ipProtocol: \"udp\",\n ports: [\"22\"],\n },\n ],\n destIpRanges: [\"11.100.0.1/32\"],\n destFqdns: [],\n destRegionCodes: [\"US\"],\n destThreatIntelligences: [\"iplist-known-malicious-ips\"],\n srcAddressGroups: [],\n destAddressGroups: [basicGlobalNetworksecurityAddressGroup.id],\n },\n targetServiceAccounts: [\"my@service-account.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_global_networksecurity_address_group = gcp.networksecurity.AddressGroup(\"basic_global_networksecurity_address_group\",\n name=\"address\",\n parent=\"organizations/123456789\",\n description=\"Sample global networksecurity_address_group\",\n location=\"global\",\n items=[\"208.80.154.224/32\"],\n type=\"IPV4\",\n capacity=100)\nfolder = gcp.organizations.Folder(\"folder\",\n display_name=\"folder\",\n parent=\"organizations/123456789\",\n deletion_protection=False)\ndefault = gcp.compute.FirewallPolicy(\"default\",\n parent=folder.id,\n short_name=\"policy\",\n description=\"Resource created for Terraform acceptance testing\")\npolicy_rule = gcp.compute.FirewallPolicyRule(\"policy_rule\",\n firewall_policy=default.name,\n description=\"Resource created for Terraform acceptance testing\",\n priority=9000,\n enable_logging=True,\n action=\"allow\",\n direction=\"EGRESS\",\n disabled=False,\n match={\n \"layer4_configs\": [\n {\n \"ip_protocol\": \"tcp\",\n \"ports\": [\"8080\"],\n },\n {\n \"ip_protocol\": \"udp\",\n \"ports\": [\"22\"],\n },\n ],\n \"dest_ip_ranges\": [\"11.100.0.1/32\"],\n \"dest_fqdns\": [],\n \"dest_region_codes\": [\"US\"],\n \"dest_threat_intelligences\": [\"iplist-known-malicious-ips\"],\n \"src_address_groups\": [],\n \"dest_address_groups\": [basic_global_networksecurity_address_group.id],\n },\n target_service_accounts=[\"my@service-account.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicGlobalNetworksecurityAddressGroup = new Gcp.NetworkSecurity.AddressGroup(\"basic_global_networksecurity_address_group\", new()\n {\n Name = \"address\",\n Parent = \"organizations/123456789\",\n Description = \"Sample global networksecurity_address_group\",\n Location = \"global\",\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n Type = \"IPV4\",\n Capacity = 100,\n });\n\n var folder = new Gcp.Organizations.Folder(\"folder\", new()\n {\n DisplayName = \"folder\",\n Parent = \"organizations/123456789\",\n DeletionProtection = false,\n });\n\n var @default = new Gcp.Compute.FirewallPolicy(\"default\", new()\n {\n Parent = folder.Id,\n ShortName = \"policy\",\n Description = \"Resource created for Terraform acceptance testing\",\n });\n\n var policyRule = new Gcp.Compute.FirewallPolicyRule(\"policy_rule\", new()\n {\n FirewallPolicy = @default.Name,\n Description = \"Resource created for Terraform acceptance testing\",\n Priority = 9000,\n EnableLogging = true,\n Action = \"allow\",\n Direction = \"EGRESS\",\n Disabled = false,\n Match = new Gcp.Compute.Inputs.FirewallPolicyRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.FirewallPolicyRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"tcp\",\n Ports = new[]\n {\n \"8080\",\n },\n },\n new Gcp.Compute.Inputs.FirewallPolicyRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"udp\",\n Ports = new[]\n {\n \"22\",\n },\n },\n },\n DestIpRanges = new[]\n {\n \"11.100.0.1/32\",\n },\n DestFqdns = new() { },\n DestRegionCodes = new[]\n {\n \"US\",\n },\n DestThreatIntelligences = new[]\n {\n \"iplist-known-malicious-ips\",\n },\n SrcAddressGroups = new() { },\n DestAddressGroups = new[]\n {\n basicGlobalNetworksecurityAddressGroup.Id,\n },\n },\n TargetServiceAccounts = new[]\n {\n \"my@service-account.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicGlobalNetworksecurityAddressGroup, err := networksecurity.NewAddressGroup(ctx, \"basic_global_networksecurity_address_group\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"address\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDescription: pulumi.String(\"Sample global networksecurity_address_group\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfolder, err := organizations.NewFolder(ctx, \"folder\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"folder\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewFirewallPolicy(ctx, \"default\", \u0026compute.FirewallPolicyArgs{\n\t\t\tParent: folder.ID(),\n\t\t\tShortName: pulumi.String(\"policy\"),\n\t\t\tDescription: pulumi.String(\"Resource created for Terraform acceptance testing\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewFirewallPolicyRule(ctx, \"policy_rule\", \u0026compute.FirewallPolicyRuleArgs{\n\t\t\tFirewallPolicy: _default.Name,\n\t\t\tDescription: pulumi.String(\"Resource created for Terraform acceptance testing\"),\n\t\t\tPriority: pulumi.Int(9000),\n\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\tDirection: pulumi.String(\"EGRESS\"),\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tMatch: \u0026compute.FirewallPolicyRuleMatchArgs{\n\t\t\t\tLayer4Configs: compute.FirewallPolicyRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\u0026compute.FirewallPolicyRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\tIpProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"8080\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026compute.FirewallPolicyRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\tIpProtocol: pulumi.String(\"udp\"),\n\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"22\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tDestIpRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"11.100.0.1/32\"),\n\t\t\t\t},\n\t\t\t\tDestFqdns: pulumi.StringArray{},\n\t\t\t\tDestRegionCodes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\t},\n\t\t\t\tDestThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"iplist-known-malicious-ips\"),\n\t\t\t\t},\n\t\t\t\tSrcAddressGroups: pulumi.StringArray{},\n\t\t\t\tDestAddressGroups: pulumi.StringArray{\n\t\t\t\t\tbasicGlobalNetworksecurityAddressGroup.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTargetServiceAccounts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"my@service-account.com\"),\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.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\nimport com.pulumi.gcp.organizations.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.compute.FirewallPolicy;\nimport com.pulumi.gcp.compute.FirewallPolicyArgs;\nimport com.pulumi.gcp.compute.FirewallPolicyRule;\nimport com.pulumi.gcp.compute.FirewallPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.FirewallPolicyRuleMatchArgs;\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 basicGlobalNetworksecurityAddressGroup = new AddressGroup(\"basicGlobalNetworksecurityAddressGroup\", AddressGroupArgs.builder()\n .name(\"address\")\n .parent(\"organizations/123456789\")\n .description(\"Sample global networksecurity_address_group\")\n .location(\"global\")\n .items(\"208.80.154.224/32\")\n .type(\"IPV4\")\n .capacity(100)\n .build());\n\n var folder = new Folder(\"folder\", FolderArgs.builder()\n .displayName(\"folder\")\n .parent(\"organizations/123456789\")\n .deletionProtection(false)\n .build());\n\n var default_ = new FirewallPolicy(\"default\", FirewallPolicyArgs.builder()\n .parent(folder.id())\n .shortName(\"policy\")\n .description(\"Resource created for Terraform acceptance testing\")\n .build());\n\n var policyRule = new FirewallPolicyRule(\"policyRule\", FirewallPolicyRuleArgs.builder()\n .firewallPolicy(default_.name())\n .description(\"Resource created for Terraform acceptance testing\")\n .priority(9000)\n .enableLogging(true)\n .action(\"allow\")\n .direction(\"EGRESS\")\n .disabled(false)\n .match(FirewallPolicyRuleMatchArgs.builder()\n .layer4Configs( \n FirewallPolicyRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"tcp\")\n .ports(8080)\n .build(),\n FirewallPolicyRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"udp\")\n .ports(22)\n .build())\n .destIpRanges(\"11.100.0.1/32\")\n .destFqdns()\n .destRegionCodes(\"US\")\n .destThreatIntelligences(\"iplist-known-malicious-ips\")\n .srcAddressGroups()\n .destAddressGroups(basicGlobalNetworksecurityAddressGroup.id())\n .build())\n .targetServiceAccounts(\"my@service-account.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicGlobalNetworksecurityAddressGroup:\n type: gcp:networksecurity:AddressGroup\n name: basic_global_networksecurity_address_group\n properties:\n name: address\n parent: organizations/123456789\n description: Sample global networksecurity_address_group\n location: global\n items:\n - 208.80.154.224/32\n type: IPV4\n capacity: 100\n folder:\n type: gcp:organizations:Folder\n properties:\n displayName: folder\n parent: organizations/123456789\n deletionProtection: false\n default:\n type: gcp:compute:FirewallPolicy\n properties:\n parent: ${folder.id}\n shortName: policy\n description: Resource created for Terraform acceptance testing\n policyRule:\n type: gcp:compute:FirewallPolicyRule\n name: policy_rule\n properties:\n firewallPolicy: ${default.name}\n description: Resource created for Terraform acceptance testing\n priority: 9000\n enableLogging: true\n action: allow\n direction: EGRESS\n disabled: false\n match:\n layer4Configs:\n - ipProtocol: tcp\n ports:\n - 8080\n - ipProtocol: udp\n ports:\n - 22\n destIpRanges:\n - 11.100.0.1/32\n destFqdns: []\n destRegionCodes:\n - US\n destThreatIntelligences:\n - iplist-known-malicious-ips\n srcAddressGroups: []\n destAddressGroups:\n - ${basicGlobalNetworksecurityAddressGroup.id}\n targetServiceAccounts:\n - my@service-account.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFirewallPolicyRule can be imported using any of these accepted formats:\n\n* `locations/global/firewallPolicies/{{firewall_policy}}/rules/{{priority}}`\n\n* `{{firewall_policy}}/{{priority}}`\n\nWhen using the `pulumi import` command, FirewallPolicyRule can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/firewallPolicyRule:FirewallPolicyRule default locations/global/firewallPolicies/{{firewall_policy}}/rules/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/firewallPolicyRule:FirewallPolicyRule default {{firewall_policy}}/{{priority}}\n```\n\n", "properties": { "action": { "type": "string", "description": "The Action to perform when the client connection triggers the rule. Valid actions are \"allow\", \"deny\", \"goto_next\" and \"apply_security_profile_group\".\n" }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format.\n" + }, "description": { "type": "string", "description": "An optional description for this resource.\n" }, "direction": { "type": "string", - "description": "The direction in which this rule applies. Possible values: INGRESS, EGRESS\n" + "description": "The direction in which this rule applies.\nPossible values are: `INGRESS`, `EGRESS`.\n" }, "disabled": { "type": "boolean", @@ -159384,11 +161385,11 @@ }, "match": { "$ref": "#/types/gcp:compute/FirewallPolicyRuleMatch:FirewallPolicyRuleMatch", - "description": "A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding 'action' is enforced.\n" + "description": "A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding 'action' is enforced.\nStructure is documented below.\n" }, "priority": { "type": "integer", - "description": "An integer indicating the priority of a rule in the list. The priority must be a positive value between 0 and 2147483647. Rules are evaluated from highest to lowest priority where 0 is the highest priority and 2147483647 is the lowest prority.\n" + "description": "An integer indicating the priority of a rule in the list.\nThe priority must be a positive value between 0 and 2147483647.\nRules are evaluated from highest to lowest priority where 0 is the highest priority and 2147483647 is the lowest prority.\n" }, "ruleTupleCount": { "type": "integer", @@ -159396,7 +161397,7 @@ }, "securityProfileGroup": { "type": "string", - "description": "A fully-qualified URL of a SecurityProfileGroup resource. Example:\nhttps://networksecurity.googleapis.com/v1/organizations/{organizationId}/locations/global/securityProfileGroups/my-security-profile-group.\nIt must be specified if action = 'apply_security_profile_group' and cannot be specified for other actions.\n" + "description": "A fully-qualified URL of a SecurityProfile resource instance. Example:\nhttps://networksecurity.googleapis.com/v1/projects/{project}/locations/{location}/securityProfileGroups/my-security-profile-group\nMust be specified if action = 'apply_security_profile_group' and cannot be specified for other actions.\n" }, "targetResources": { "type": "array", @@ -159414,11 +161415,12 @@ }, "tlsInspect": { "type": "boolean", - "description": "Boolean flag indicating if the traffic should be TLS decrypted. It can be set only if action =\n'apply_security_profile_group' and cannot be set for other actions.\n" + "description": "Boolean flag indicating if the traffic should be TLS decrypted. Can be set only if action =\n'apply_security_profile_group' and cannot be set for other actions.\n" } }, "required": [ "action", + "creationTimestamp", "direction", "firewallPolicy", "kind", @@ -159437,7 +161439,7 @@ }, "direction": { "type": "string", - "description": "The direction in which this rule applies. Possible values: INGRESS, EGRESS\n" + "description": "The direction in which this rule applies.\nPossible values are: `INGRESS`, `EGRESS`.\n" }, "disabled": { "type": "boolean", @@ -159454,16 +161456,16 @@ }, "match": { "$ref": "#/types/gcp:compute/FirewallPolicyRuleMatch:FirewallPolicyRuleMatch", - "description": "A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding 'action' is enforced.\n" + "description": "A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding 'action' is enforced.\nStructure is documented below.\n" }, "priority": { "type": "integer", - "description": "An integer indicating the priority of a rule in the list. The priority must be a positive value between 0 and 2147483647. Rules are evaluated from highest to lowest priority where 0 is the highest priority and 2147483647 is the lowest prority.\n", + "description": "An integer indicating the priority of a rule in the list.\nThe priority must be a positive value between 0 and 2147483647.\nRules are evaluated from highest to lowest priority where 0 is the highest priority and 2147483647 is the lowest prority.\n", "willReplaceOnChanges": true }, "securityProfileGroup": { "type": "string", - "description": "A fully-qualified URL of a SecurityProfileGroup resource. Example:\nhttps://networksecurity.googleapis.com/v1/organizations/{organizationId}/locations/global/securityProfileGroups/my-security-profile-group.\nIt must be specified if action = 'apply_security_profile_group' and cannot be specified for other actions.\n" + "description": "A fully-qualified URL of a SecurityProfile resource instance. Example:\nhttps://networksecurity.googleapis.com/v1/projects/{project}/locations/{location}/securityProfileGroups/my-security-profile-group\nMust be specified if action = 'apply_security_profile_group' and cannot be specified for other actions.\n" }, "targetResources": { "type": "array", @@ -159481,7 +161483,7 @@ }, "tlsInspect": { "type": "boolean", - "description": "Boolean flag indicating if the traffic should be TLS decrypted. It can be set only if action =\n'apply_security_profile_group' and cannot be set for other actions.\n" + "description": "Boolean flag indicating if the traffic should be TLS decrypted. Can be set only if action =\n'apply_security_profile_group' and cannot be set for other actions.\n" } }, "requiredInputs": [ @@ -159498,13 +161500,17 @@ "type": "string", "description": "The Action to perform when the client connection triggers the rule. Valid actions are \"allow\", \"deny\", \"goto_next\" and \"apply_security_profile_group\".\n" }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format.\n" + }, "description": { "type": "string", "description": "An optional description for this resource.\n" }, "direction": { "type": "string", - "description": "The direction in which this rule applies. Possible values: INGRESS, EGRESS\n" + "description": "The direction in which this rule applies.\nPossible values are: `INGRESS`, `EGRESS`.\n" }, "disabled": { "type": "boolean", @@ -159525,11 +161531,11 @@ }, "match": { "$ref": "#/types/gcp:compute/FirewallPolicyRuleMatch:FirewallPolicyRuleMatch", - "description": "A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding 'action' is enforced.\n" + "description": "A match condition that incoming traffic is evaluated against. If it evaluates to true, the corresponding 'action' is enforced.\nStructure is documented below.\n" }, "priority": { "type": "integer", - "description": "An integer indicating the priority of a rule in the list. The priority must be a positive value between 0 and 2147483647. Rules are evaluated from highest to lowest priority where 0 is the highest priority and 2147483647 is the lowest prority.\n", + "description": "An integer indicating the priority of a rule in the list.\nThe priority must be a positive value between 0 and 2147483647.\nRules are evaluated from highest to lowest priority where 0 is the highest priority and 2147483647 is the lowest prority.\n", "willReplaceOnChanges": true }, "ruleTupleCount": { @@ -159538,7 +161544,7 @@ }, "securityProfileGroup": { "type": "string", - "description": "A fully-qualified URL of a SecurityProfileGroup resource. Example:\nhttps://networksecurity.googleapis.com/v1/organizations/{organizationId}/locations/global/securityProfileGroups/my-security-profile-group.\nIt must be specified if action = 'apply_security_profile_group' and cannot be specified for other actions.\n" + "description": "A fully-qualified URL of a SecurityProfile resource instance. Example:\nhttps://networksecurity.googleapis.com/v1/projects/{project}/locations/{location}/securityProfileGroups/my-security-profile-group\nMust be specified if action = 'apply_security_profile_group' and cannot be specified for other actions.\n" }, "targetResources": { "type": "array", @@ -159556,7 +161562,7 @@ }, "tlsInspect": { "type": "boolean", - "description": "Boolean flag indicating if the traffic should be TLS decrypted. It can be set only if action =\n'apply_security_profile_group' and cannot be set for other actions.\n" + "description": "Boolean flag indicating if the traffic should be TLS decrypted. Can be set only if action =\n'apply_security_profile_group' and cannot be set for other actions.\n" } }, "type": "object" @@ -161166,7 +163172,7 @@ }, "grpcHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckGrpcHealthCheck:HealthCheckGrpcHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "healthyThreshold": { "type": "integer", @@ -161174,15 +163180,15 @@ }, "http2HealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckHttp2HealthCheck:HealthCheckHttp2HealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "httpHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckHttpHealthCheck:HealthCheckHttpHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "httpsHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckHttpsHealthCheck:HealthCheckHttpsHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "logConfig": { "$ref": "#/types/gcp:compute/HealthCheckLogConfig:HealthCheckLogConfig", @@ -161209,11 +163215,11 @@ }, "sslHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckSslHealthCheck:HealthCheckSslHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "tcpHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckTcpHealthCheck:HealthCheckTcpHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "timeoutSec": { "type": "integer", @@ -161247,7 +163253,7 @@ }, "grpcHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckGrpcHealthCheck:HealthCheckGrpcHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "healthyThreshold": { "type": "integer", @@ -161255,15 +163261,15 @@ }, "http2HealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckHttp2HealthCheck:HealthCheckHttp2HealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "httpHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckHttpHealthCheck:HealthCheckHttpHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "httpsHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckHttpsHealthCheck:HealthCheckHttpsHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "logConfig": { "$ref": "#/types/gcp:compute/HealthCheckLogConfig:HealthCheckLogConfig", @@ -161288,11 +163294,11 @@ }, "sslHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckSslHealthCheck:HealthCheckSslHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "tcpHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckTcpHealthCheck:HealthCheckTcpHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "timeoutSec": { "type": "integer", @@ -161320,7 +163326,7 @@ }, "grpcHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckGrpcHealthCheck:HealthCheckGrpcHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "healthyThreshold": { "type": "integer", @@ -161328,15 +163334,15 @@ }, "http2HealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckHttp2HealthCheck:HealthCheckHttp2HealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "httpHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckHttpHealthCheck:HealthCheckHttpHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "httpsHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckHttpsHealthCheck:HealthCheckHttpsHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "logConfig": { "$ref": "#/types/gcp:compute/HealthCheckLogConfig:HealthCheckLogConfig", @@ -161365,11 +163371,11 @@ }, "sslHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckSslHealthCheck:HealthCheckSslHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "tcpHealthCheck": { "$ref": "#/types/gcp:compute/HealthCheckTcpHealthCheck:HealthCheckTcpHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "timeoutSec": { "type": "integer", @@ -168544,7 +170550,7 @@ } }, "gcp:compute/networkFirewallPolicyRule:NetworkFirewallPolicyRule": { - "description": "Represents a rule that describes one or more match conditions along with the action to be taken when traffic matches this condition (allow or deny).\n\n\nTo get more information about NetworkFirewallPolicyRule, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/networkFirewallPolicies/addRule)\n\n## Example Usage\n\n### Network Firewall Policy Rule\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicGlobalNetworksecurityAddressGroup = new gcp.networksecurity.AddressGroup(\"basic_global_networksecurity_address_group\", {\n name: \"address\",\n parent: \"projects/my-project-name\",\n description: \"Sample global networksecurity_address_group\",\n location: \"global\",\n items: [\"208.80.154.224/32\"],\n type: \"IPV4\",\n capacity: 100,\n});\nconst basicNetworkFirewallPolicy = new gcp.compute.NetworkFirewallPolicy(\"basic_network_firewall_policy\", {\n name: \"policy\",\n description: \"Sample global network firewall policy\",\n project: \"my-project-name\",\n});\nconst basicNetwork = new gcp.compute.Network(\"basic_network\", {name: \"network\"});\nconst basicKey = new gcp.tags.TagKey(\"basic_key\", {\n description: \"For keyname resources.\",\n parent: \"organizations/123456789\",\n purpose: \"GCE_FIREWALL\",\n shortName: \"tagkey\",\n purposeData: {\n network: pulumi.interpolate`my-project-name/${basicNetwork.name}`,\n },\n});\nconst basicValue = new gcp.tags.TagValue(\"basic_value\", {\n description: \"For valuename resources.\",\n parent: pulumi.interpolate`tagKeys/${basicKey.name}`,\n shortName: \"tagvalue\",\n});\nconst primary = new gcp.compute.NetworkFirewallPolicyRule(\"primary\", {\n action: \"allow\",\n description: \"This is a simple rule description\",\n direction: \"INGRESS\",\n disabled: false,\n enableLogging: true,\n firewallPolicy: basicNetworkFirewallPolicy.name,\n priority: 1000,\n ruleName: \"test-rule\",\n targetServiceAccounts: [\"my@service-account.com\"],\n match: {\n srcIpRanges: [\"10.100.0.1/32\"],\n srcFqdns: [\"google.com\"],\n srcRegionCodes: [\"US\"],\n srcThreatIntelligences: [\"iplist-known-malicious-ips\"],\n srcSecureTags: [{\n name: pulumi.interpolate`tagValues/${basicValue.name}`,\n }],\n layer4Configs: [{\n ipProtocol: \"all\",\n }],\n srcAddressGroups: [basicGlobalNetworksecurityAddressGroup.id],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_global_networksecurity_address_group = gcp.networksecurity.AddressGroup(\"basic_global_networksecurity_address_group\",\n name=\"address\",\n parent=\"projects/my-project-name\",\n description=\"Sample global networksecurity_address_group\",\n location=\"global\",\n items=[\"208.80.154.224/32\"],\n type=\"IPV4\",\n capacity=100)\nbasic_network_firewall_policy = gcp.compute.NetworkFirewallPolicy(\"basic_network_firewall_policy\",\n name=\"policy\",\n description=\"Sample global network firewall policy\",\n project=\"my-project-name\")\nbasic_network = gcp.compute.Network(\"basic_network\", name=\"network\")\nbasic_key = gcp.tags.TagKey(\"basic_key\",\n description=\"For keyname resources.\",\n parent=\"organizations/123456789\",\n purpose=\"GCE_FIREWALL\",\n short_name=\"tagkey\",\n purpose_data={\n \"network\": basic_network.name.apply(lambda name: f\"my-project-name/{name}\"),\n })\nbasic_value = gcp.tags.TagValue(\"basic_value\",\n description=\"For valuename resources.\",\n parent=basic_key.name.apply(lambda name: f\"tagKeys/{name}\"),\n short_name=\"tagvalue\")\nprimary = gcp.compute.NetworkFirewallPolicyRule(\"primary\",\n action=\"allow\",\n description=\"This is a simple rule description\",\n direction=\"INGRESS\",\n disabled=False,\n enable_logging=True,\n firewall_policy=basic_network_firewall_policy.name,\n priority=1000,\n rule_name=\"test-rule\",\n target_service_accounts=[\"my@service-account.com\"],\n match={\n \"src_ip_ranges\": [\"10.100.0.1/32\"],\n \"src_fqdns\": [\"google.com\"],\n \"src_region_codes\": [\"US\"],\n \"src_threat_intelligences\": [\"iplist-known-malicious-ips\"],\n \"src_secure_tags\": [{\n \"name\": basic_value.name.apply(lambda name: f\"tagValues/{name}\"),\n }],\n \"layer4_configs\": [{\n \"ip_protocol\": \"all\",\n }],\n \"src_address_groups\": [basic_global_networksecurity_address_group.id],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicGlobalNetworksecurityAddressGroup = new Gcp.NetworkSecurity.AddressGroup(\"basic_global_networksecurity_address_group\", new()\n {\n Name = \"address\",\n Parent = \"projects/my-project-name\",\n Description = \"Sample global networksecurity_address_group\",\n Location = \"global\",\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n Type = \"IPV4\",\n Capacity = 100,\n });\n\n var basicNetworkFirewallPolicy = new Gcp.Compute.NetworkFirewallPolicy(\"basic_network_firewall_policy\", new()\n {\n Name = \"policy\",\n Description = \"Sample global network firewall policy\",\n Project = \"my-project-name\",\n });\n\n var basicNetwork = new Gcp.Compute.Network(\"basic_network\", new()\n {\n Name = \"network\",\n });\n\n var basicKey = new Gcp.Tags.TagKey(\"basic_key\", new()\n {\n Description = \"For keyname resources.\",\n Parent = \"organizations/123456789\",\n Purpose = \"GCE_FIREWALL\",\n ShortName = \"tagkey\",\n PurposeData = \n {\n { \"network\", basicNetwork.Name.Apply(name =\u003e $\"my-project-name/{name}\") },\n },\n });\n\n var basicValue = new Gcp.Tags.TagValue(\"basic_value\", new()\n {\n Description = \"For valuename resources.\",\n Parent = basicKey.Name.Apply(name =\u003e $\"tagKeys/{name}\"),\n ShortName = \"tagvalue\",\n });\n\n var primary = new Gcp.Compute.NetworkFirewallPolicyRule(\"primary\", new()\n {\n Action = \"allow\",\n Description = \"This is a simple rule description\",\n Direction = \"INGRESS\",\n Disabled = false,\n EnableLogging = true,\n FirewallPolicy = basicNetworkFirewallPolicy.Name,\n Priority = 1000,\n RuleName = \"test-rule\",\n TargetServiceAccounts = new[]\n {\n \"my@service-account.com\",\n },\n Match = new Gcp.Compute.Inputs.NetworkFirewallPolicyRuleMatchArgs\n {\n SrcIpRanges = new[]\n {\n \"10.100.0.1/32\",\n },\n SrcFqdns = new[]\n {\n \"google.com\",\n },\n SrcRegionCodes = new[]\n {\n \"US\",\n },\n SrcThreatIntelligences = new[]\n {\n \"iplist-known-malicious-ips\",\n },\n SrcSecureTags = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyRuleMatchSrcSecureTagArgs\n {\n Name = basicValue.Name.Apply(name =\u003e $\"tagValues/{name}\"),\n },\n },\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"all\",\n },\n },\n SrcAddressGroups = new[]\n {\n basicGlobalNetworksecurityAddressGroup.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicGlobalNetworksecurityAddressGroup, err := networksecurity.NewAddressGroup(ctx, \"basic_global_networksecurity_address_group\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"address\"),\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tDescription: pulumi.String(\"Sample global networksecurity_address_group\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicNetworkFirewallPolicy, err := compute.NewNetworkFirewallPolicy(ctx, \"basic_network_firewall_policy\", \u0026compute.NetworkFirewallPolicyArgs{\n\t\t\tName: pulumi.String(\"policy\"),\n\t\t\tDescription: pulumi.String(\"Sample global network firewall policy\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicNetwork, err := compute.NewNetwork(ctx, \"basic_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicKey, err := tags.NewTagKey(ctx, \"basic_key\", \u0026tags.TagKeyArgs{\n\t\t\tDescription: pulumi.String(\"For keyname resources.\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tPurpose: pulumi.String(\"GCE_FIREWALL\"),\n\t\t\tShortName: pulumi.String(\"tagkey\"),\n\t\t\tPurposeData: pulumi.StringMap{\n\t\t\t\t\"network\": basicNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"my-project-name/%v\", name), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicValue, err := tags.NewTagValue(ctx, \"basic_value\", \u0026tags.TagValueArgs{\n\t\t\tDescription: pulumi.String(\"For valuename resources.\"),\n\t\t\tParent: basicKey.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"tagKeys/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tShortName: pulumi.String(\"tagvalue\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNetworkFirewallPolicyRule(ctx, \"primary\", \u0026compute.NetworkFirewallPolicyRuleArgs{\n\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\tDescription: pulumi.String(\"This is a simple rule description\"),\n\t\t\tDirection: pulumi.String(\"INGRESS\"),\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\tFirewallPolicy: basicNetworkFirewallPolicy.Name,\n\t\t\tPriority: pulumi.Int(1000),\n\t\t\tRuleName: pulumi.String(\"test-rule\"),\n\t\t\tTargetServiceAccounts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"my@service-account.com\"),\n\t\t\t},\n\t\t\tMatch: \u0026compute.NetworkFirewallPolicyRuleMatchArgs{\n\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10.100.0.1/32\"),\n\t\t\t\t},\n\t\t\t\tSrcFqdns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"google.com\"),\n\t\t\t\t},\n\t\t\t\tSrcRegionCodes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\t},\n\t\t\t\tSrcThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"iplist-known-malicious-ips\"),\n\t\t\t\t},\n\t\t\t\tSrcSecureTags: compute.NetworkFirewallPolicyRuleMatchSrcSecureTagArray{\n\t\t\t\t\t\u0026compute.NetworkFirewallPolicyRuleMatchSrcSecureTagArgs{\n\t\t\t\t\t\tName: basicValue.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"tagValues/%v\", name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tLayer4Configs: compute.NetworkFirewallPolicyRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\u0026compute.NetworkFirewallPolicyRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\tIpProtocol: pulumi.String(\"all\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSrcAddressGroups: pulumi.StringArray{\n\t\t\t\t\tbasicGlobalNetworksecurityAddressGroup.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\nimport com.pulumi.gcp.compute.NetworkFirewallPolicy;\nimport com.pulumi.gcp.compute.NetworkFirewallPolicyArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.compute.NetworkFirewallPolicyRule;\nimport com.pulumi.gcp.compute.NetworkFirewallPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.NetworkFirewallPolicyRuleMatchArgs;\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 basicGlobalNetworksecurityAddressGroup = new AddressGroup(\"basicGlobalNetworksecurityAddressGroup\", AddressGroupArgs.builder()\n .name(\"address\")\n .parent(\"projects/my-project-name\")\n .description(\"Sample global networksecurity_address_group\")\n .location(\"global\")\n .items(\"208.80.154.224/32\")\n .type(\"IPV4\")\n .capacity(100)\n .build());\n\n var basicNetworkFirewallPolicy = new NetworkFirewallPolicy(\"basicNetworkFirewallPolicy\", NetworkFirewallPolicyArgs.builder()\n .name(\"policy\")\n .description(\"Sample global network firewall policy\")\n .project(\"my-project-name\")\n .build());\n\n var basicNetwork = new Network(\"basicNetwork\", NetworkArgs.builder()\n .name(\"network\")\n .build());\n\n var basicKey = new TagKey(\"basicKey\", TagKeyArgs.builder()\n .description(\"For keyname resources.\")\n .parent(\"organizations/123456789\")\n .purpose(\"GCE_FIREWALL\")\n .shortName(\"tagkey\")\n .purposeData(Map.of(\"network\", basicNetwork.name().applyValue(name -\u003e String.format(\"my-project-name/%s\", name))))\n .build());\n\n var basicValue = new TagValue(\"basicValue\", TagValueArgs.builder()\n .description(\"For valuename resources.\")\n .parent(basicKey.name().applyValue(name -\u003e String.format(\"tagKeys/%s\", name)))\n .shortName(\"tagvalue\")\n .build());\n\n var primary = new NetworkFirewallPolicyRule(\"primary\", NetworkFirewallPolicyRuleArgs.builder()\n .action(\"allow\")\n .description(\"This is a simple rule description\")\n .direction(\"INGRESS\")\n .disabled(false)\n .enableLogging(true)\n .firewallPolicy(basicNetworkFirewallPolicy.name())\n .priority(1000)\n .ruleName(\"test-rule\")\n .targetServiceAccounts(\"my@service-account.com\")\n .match(NetworkFirewallPolicyRuleMatchArgs.builder()\n .srcIpRanges(\"10.100.0.1/32\")\n .srcFqdns(\"google.com\")\n .srcRegionCodes(\"US\")\n .srcThreatIntelligences(\"iplist-known-malicious-ips\")\n .srcSecureTags(NetworkFirewallPolicyRuleMatchSrcSecureTagArgs.builder()\n .name(basicValue.name().applyValue(name -\u003e String.format(\"tagValues/%s\", name)))\n .build())\n .layer4Configs(NetworkFirewallPolicyRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"all\")\n .build())\n .srcAddressGroups(basicGlobalNetworksecurityAddressGroup.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicGlobalNetworksecurityAddressGroup:\n type: gcp:networksecurity:AddressGroup\n name: basic_global_networksecurity_address_group\n properties:\n name: address\n parent: projects/my-project-name\n description: Sample global networksecurity_address_group\n location: global\n items:\n - 208.80.154.224/32\n type: IPV4\n capacity: 100\n basicNetworkFirewallPolicy:\n type: gcp:compute:NetworkFirewallPolicy\n name: basic_network_firewall_policy\n properties:\n name: policy\n description: Sample global network firewall policy\n project: my-project-name\n primary:\n type: gcp:compute:NetworkFirewallPolicyRule\n properties:\n action: allow\n description: This is a simple rule description\n direction: INGRESS\n disabled: false\n enableLogging: true\n firewallPolicy: ${basicNetworkFirewallPolicy.name}\n priority: 1000\n ruleName: test-rule\n targetServiceAccounts:\n - my@service-account.com\n match:\n srcIpRanges:\n - 10.100.0.1/32\n srcFqdns:\n - google.com\n srcRegionCodes:\n - US\n srcThreatIntelligences:\n - iplist-known-malicious-ips\n srcSecureTags:\n - name: tagValues/${basicValue.name}\n layer4Configs:\n - ipProtocol: all\n srcAddressGroups:\n - ${basicGlobalNetworksecurityAddressGroup.id}\n basicNetwork:\n type: gcp:compute:Network\n name: basic_network\n properties:\n name: network\n basicKey:\n type: gcp:tags:TagKey\n name: basic_key\n properties:\n description: For keyname resources.\n parent: organizations/123456789\n purpose: GCE_FIREWALL\n shortName: tagkey\n purposeData:\n network: my-project-name/${basicNetwork.name}\n basicValue:\n type: gcp:tags:TagValue\n name: basic_value\n properties:\n description: For valuename resources.\n parent: tagKeys/${basicKey.name}\n shortName: tagvalue\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNetworkFirewallPolicyRule can be imported using any of these accepted formats:\n\n* `projects/{{project}}/global/firewallPolicies/{{firewall_policy}}/rules/{{priority}}`\n\n* `{{project}}/{{firewall_policy}}/{{priority}}`\n\n* `{{firewall_policy}}/{{priority}}`\n\nWhen using the `pulumi import` command, NetworkFirewallPolicyRule can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/networkFirewallPolicyRule:NetworkFirewallPolicyRule default projects/{{project}}/global/firewallPolicies/{{firewall_policy}}/rules/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/networkFirewallPolicyRule:NetworkFirewallPolicyRule default {{project}}/{{firewall_policy}}/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/networkFirewallPolicyRule:NetworkFirewallPolicyRule default {{firewall_policy}}/{{priority}}\n```\n\n", + "description": "Represents a rule that describes one or more match conditions along with the action to be taken when traffic matches this condition (allow or deny).\n\n\nTo get more information about NetworkFirewallPolicyRule, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/networkFirewallPolicies/addRule)\n\n## Example Usage\n\n### Network Firewall Policy Rule\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicGlobalNetworksecurityAddressGroup = new gcp.networksecurity.AddressGroup(\"basic_global_networksecurity_address_group\", {\n name: \"address\",\n parent: \"projects/my-project-name\",\n description: \"Sample global networksecurity_address_group\",\n location: \"global\",\n items: [\"208.80.154.224/32\"],\n type: \"IPV4\",\n capacity: 100,\n});\nconst basicNetworkFirewallPolicy = new gcp.compute.NetworkFirewallPolicy(\"basic_network_firewall_policy\", {\n name: \"policy\",\n description: \"Sample global network firewall policy\",\n project: \"my-project-name\",\n});\nconst basicNetwork = new gcp.compute.Network(\"basic_network\", {name: \"network\"});\nconst basicKey = new gcp.tags.TagKey(\"basic_key\", {\n description: \"For keyname resources.\",\n parent: \"organizations/123456789\",\n purpose: \"GCE_FIREWALL\",\n shortName: \"tagkey\",\n purposeData: {\n network: pulumi.interpolate`my-project-name/${basicNetwork.name}`,\n },\n});\nconst basicValue = new gcp.tags.TagValue(\"basic_value\", {\n description: \"For valuename resources.\",\n parent: basicKey.id,\n shortName: \"tagvalue\",\n});\nconst primary = new gcp.compute.NetworkFirewallPolicyRule(\"primary\", {\n action: \"allow\",\n description: \"This is a simple rule description\",\n direction: \"INGRESS\",\n disabled: false,\n enableLogging: true,\n firewallPolicy: basicNetworkFirewallPolicy.name,\n priority: 1000,\n ruleName: \"test-rule\",\n targetServiceAccounts: [\"my@service-account.com\"],\n match: {\n srcIpRanges: [\"10.100.0.1/32\"],\n srcFqdns: [\"google.com\"],\n srcRegionCodes: [\"US\"],\n srcThreatIntelligences: [\"iplist-known-malicious-ips\"],\n srcSecureTags: [{\n name: basicValue.id,\n }],\n layer4Configs: [{\n ipProtocol: \"all\",\n }],\n srcAddressGroups: [basicGlobalNetworksecurityAddressGroup.id],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_global_networksecurity_address_group = gcp.networksecurity.AddressGroup(\"basic_global_networksecurity_address_group\",\n name=\"address\",\n parent=\"projects/my-project-name\",\n description=\"Sample global networksecurity_address_group\",\n location=\"global\",\n items=[\"208.80.154.224/32\"],\n type=\"IPV4\",\n capacity=100)\nbasic_network_firewall_policy = gcp.compute.NetworkFirewallPolicy(\"basic_network_firewall_policy\",\n name=\"policy\",\n description=\"Sample global network firewall policy\",\n project=\"my-project-name\")\nbasic_network = gcp.compute.Network(\"basic_network\", name=\"network\")\nbasic_key = gcp.tags.TagKey(\"basic_key\",\n description=\"For keyname resources.\",\n parent=\"organizations/123456789\",\n purpose=\"GCE_FIREWALL\",\n short_name=\"tagkey\",\n purpose_data={\n \"network\": basic_network.name.apply(lambda name: f\"my-project-name/{name}\"),\n })\nbasic_value = gcp.tags.TagValue(\"basic_value\",\n description=\"For valuename resources.\",\n parent=basic_key.id,\n short_name=\"tagvalue\")\nprimary = gcp.compute.NetworkFirewallPolicyRule(\"primary\",\n action=\"allow\",\n description=\"This is a simple rule description\",\n direction=\"INGRESS\",\n disabled=False,\n enable_logging=True,\n firewall_policy=basic_network_firewall_policy.name,\n priority=1000,\n rule_name=\"test-rule\",\n target_service_accounts=[\"my@service-account.com\"],\n match={\n \"src_ip_ranges\": [\"10.100.0.1/32\"],\n \"src_fqdns\": [\"google.com\"],\n \"src_region_codes\": [\"US\"],\n \"src_threat_intelligences\": [\"iplist-known-malicious-ips\"],\n \"src_secure_tags\": [{\n \"name\": basic_value.id,\n }],\n \"layer4_configs\": [{\n \"ip_protocol\": \"all\",\n }],\n \"src_address_groups\": [basic_global_networksecurity_address_group.id],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicGlobalNetworksecurityAddressGroup = new Gcp.NetworkSecurity.AddressGroup(\"basic_global_networksecurity_address_group\", new()\n {\n Name = \"address\",\n Parent = \"projects/my-project-name\",\n Description = \"Sample global networksecurity_address_group\",\n Location = \"global\",\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n Type = \"IPV4\",\n Capacity = 100,\n });\n\n var basicNetworkFirewallPolicy = new Gcp.Compute.NetworkFirewallPolicy(\"basic_network_firewall_policy\", new()\n {\n Name = \"policy\",\n Description = \"Sample global network firewall policy\",\n Project = \"my-project-name\",\n });\n\n var basicNetwork = new Gcp.Compute.Network(\"basic_network\", new()\n {\n Name = \"network\",\n });\n\n var basicKey = new Gcp.Tags.TagKey(\"basic_key\", new()\n {\n Description = \"For keyname resources.\",\n Parent = \"organizations/123456789\",\n Purpose = \"GCE_FIREWALL\",\n ShortName = \"tagkey\",\n PurposeData = \n {\n { \"network\", basicNetwork.Name.Apply(name =\u003e $\"my-project-name/{name}\") },\n },\n });\n\n var basicValue = new Gcp.Tags.TagValue(\"basic_value\", new()\n {\n Description = \"For valuename resources.\",\n Parent = basicKey.Id,\n ShortName = \"tagvalue\",\n });\n\n var primary = new Gcp.Compute.NetworkFirewallPolicyRule(\"primary\", new()\n {\n Action = \"allow\",\n Description = \"This is a simple rule description\",\n Direction = \"INGRESS\",\n Disabled = false,\n EnableLogging = true,\n FirewallPolicy = basicNetworkFirewallPolicy.Name,\n Priority = 1000,\n RuleName = \"test-rule\",\n TargetServiceAccounts = new[]\n {\n \"my@service-account.com\",\n },\n Match = new Gcp.Compute.Inputs.NetworkFirewallPolicyRuleMatchArgs\n {\n SrcIpRanges = new[]\n {\n \"10.100.0.1/32\",\n },\n SrcFqdns = new[]\n {\n \"google.com\",\n },\n SrcRegionCodes = new[]\n {\n \"US\",\n },\n SrcThreatIntelligences = new[]\n {\n \"iplist-known-malicious-ips\",\n },\n SrcSecureTags = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyRuleMatchSrcSecureTagArgs\n {\n Name = basicValue.Id,\n },\n },\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"all\",\n },\n },\n SrcAddressGroups = new[]\n {\n basicGlobalNetworksecurityAddressGroup.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicGlobalNetworksecurityAddressGroup, err := networksecurity.NewAddressGroup(ctx, \"basic_global_networksecurity_address_group\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"address\"),\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tDescription: pulumi.String(\"Sample global networksecurity_address_group\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicNetworkFirewallPolicy, err := compute.NewNetworkFirewallPolicy(ctx, \"basic_network_firewall_policy\", \u0026compute.NetworkFirewallPolicyArgs{\n\t\t\tName: pulumi.String(\"policy\"),\n\t\t\tDescription: pulumi.String(\"Sample global network firewall policy\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicNetwork, err := compute.NewNetwork(ctx, \"basic_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicKey, err := tags.NewTagKey(ctx, \"basic_key\", \u0026tags.TagKeyArgs{\n\t\t\tDescription: pulumi.String(\"For keyname resources.\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tPurpose: pulumi.String(\"GCE_FIREWALL\"),\n\t\t\tShortName: pulumi.String(\"tagkey\"),\n\t\t\tPurposeData: pulumi.StringMap{\n\t\t\t\t\"network\": basicNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"my-project-name/%v\", name), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicValue, err := tags.NewTagValue(ctx, \"basic_value\", \u0026tags.TagValueArgs{\n\t\t\tDescription: pulumi.String(\"For valuename resources.\"),\n\t\t\tParent: basicKey.ID(),\n\t\t\tShortName: pulumi.String(\"tagvalue\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNetworkFirewallPolicyRule(ctx, \"primary\", \u0026compute.NetworkFirewallPolicyRuleArgs{\n\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\tDescription: pulumi.String(\"This is a simple rule description\"),\n\t\t\tDirection: pulumi.String(\"INGRESS\"),\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\tFirewallPolicy: basicNetworkFirewallPolicy.Name,\n\t\t\tPriority: pulumi.Int(1000),\n\t\t\tRuleName: pulumi.String(\"test-rule\"),\n\t\t\tTargetServiceAccounts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"my@service-account.com\"),\n\t\t\t},\n\t\t\tMatch: \u0026compute.NetworkFirewallPolicyRuleMatchArgs{\n\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10.100.0.1/32\"),\n\t\t\t\t},\n\t\t\t\tSrcFqdns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"google.com\"),\n\t\t\t\t},\n\t\t\t\tSrcRegionCodes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\t},\n\t\t\t\tSrcThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"iplist-known-malicious-ips\"),\n\t\t\t\t},\n\t\t\t\tSrcSecureTags: compute.NetworkFirewallPolicyRuleMatchSrcSecureTagArray{\n\t\t\t\t\t\u0026compute.NetworkFirewallPolicyRuleMatchSrcSecureTagArgs{\n\t\t\t\t\t\tName: basicValue.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tLayer4Configs: compute.NetworkFirewallPolicyRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\u0026compute.NetworkFirewallPolicyRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\tIpProtocol: pulumi.String(\"all\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSrcAddressGroups: pulumi.StringArray{\n\t\t\t\t\tbasicGlobalNetworksecurityAddressGroup.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\nimport com.pulumi.gcp.compute.NetworkFirewallPolicy;\nimport com.pulumi.gcp.compute.NetworkFirewallPolicyArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.compute.NetworkFirewallPolicyRule;\nimport com.pulumi.gcp.compute.NetworkFirewallPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.NetworkFirewallPolicyRuleMatchArgs;\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 basicGlobalNetworksecurityAddressGroup = new AddressGroup(\"basicGlobalNetworksecurityAddressGroup\", AddressGroupArgs.builder()\n .name(\"address\")\n .parent(\"projects/my-project-name\")\n .description(\"Sample global networksecurity_address_group\")\n .location(\"global\")\n .items(\"208.80.154.224/32\")\n .type(\"IPV4\")\n .capacity(100)\n .build());\n\n var basicNetworkFirewallPolicy = new NetworkFirewallPolicy(\"basicNetworkFirewallPolicy\", NetworkFirewallPolicyArgs.builder()\n .name(\"policy\")\n .description(\"Sample global network firewall policy\")\n .project(\"my-project-name\")\n .build());\n\n var basicNetwork = new Network(\"basicNetwork\", NetworkArgs.builder()\n .name(\"network\")\n .build());\n\n var basicKey = new TagKey(\"basicKey\", TagKeyArgs.builder()\n .description(\"For keyname resources.\")\n .parent(\"organizations/123456789\")\n .purpose(\"GCE_FIREWALL\")\n .shortName(\"tagkey\")\n .purposeData(Map.of(\"network\", basicNetwork.name().applyValue(name -\u003e String.format(\"my-project-name/%s\", name))))\n .build());\n\n var basicValue = new TagValue(\"basicValue\", TagValueArgs.builder()\n .description(\"For valuename resources.\")\n .parent(basicKey.id())\n .shortName(\"tagvalue\")\n .build());\n\n var primary = new NetworkFirewallPolicyRule(\"primary\", NetworkFirewallPolicyRuleArgs.builder()\n .action(\"allow\")\n .description(\"This is a simple rule description\")\n .direction(\"INGRESS\")\n .disabled(false)\n .enableLogging(true)\n .firewallPolicy(basicNetworkFirewallPolicy.name())\n .priority(1000)\n .ruleName(\"test-rule\")\n .targetServiceAccounts(\"my@service-account.com\")\n .match(NetworkFirewallPolicyRuleMatchArgs.builder()\n .srcIpRanges(\"10.100.0.1/32\")\n .srcFqdns(\"google.com\")\n .srcRegionCodes(\"US\")\n .srcThreatIntelligences(\"iplist-known-malicious-ips\")\n .srcSecureTags(NetworkFirewallPolicyRuleMatchSrcSecureTagArgs.builder()\n .name(basicValue.id())\n .build())\n .layer4Configs(NetworkFirewallPolicyRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"all\")\n .build())\n .srcAddressGroups(basicGlobalNetworksecurityAddressGroup.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicGlobalNetworksecurityAddressGroup:\n type: gcp:networksecurity:AddressGroup\n name: basic_global_networksecurity_address_group\n properties:\n name: address\n parent: projects/my-project-name\n description: Sample global networksecurity_address_group\n location: global\n items:\n - 208.80.154.224/32\n type: IPV4\n capacity: 100\n basicNetworkFirewallPolicy:\n type: gcp:compute:NetworkFirewallPolicy\n name: basic_network_firewall_policy\n properties:\n name: policy\n description: Sample global network firewall policy\n project: my-project-name\n primary:\n type: gcp:compute:NetworkFirewallPolicyRule\n properties:\n action: allow\n description: This is a simple rule description\n direction: INGRESS\n disabled: false\n enableLogging: true\n firewallPolicy: ${basicNetworkFirewallPolicy.name}\n priority: 1000\n ruleName: test-rule\n targetServiceAccounts:\n - my@service-account.com\n match:\n srcIpRanges:\n - 10.100.0.1/32\n srcFqdns:\n - google.com\n srcRegionCodes:\n - US\n srcThreatIntelligences:\n - iplist-known-malicious-ips\n srcSecureTags:\n - name: ${basicValue.id}\n layer4Configs:\n - ipProtocol: all\n srcAddressGroups:\n - ${basicGlobalNetworksecurityAddressGroup.id}\n basicNetwork:\n type: gcp:compute:Network\n name: basic_network\n properties:\n name: network\n basicKey:\n type: gcp:tags:TagKey\n name: basic_key\n properties:\n description: For keyname resources.\n parent: organizations/123456789\n purpose: GCE_FIREWALL\n shortName: tagkey\n purposeData:\n network: my-project-name/${basicNetwork.name}\n basicValue:\n type: gcp:tags:TagValue\n name: basic_value\n properties:\n description: For valuename resources.\n parent: ${basicKey.id}\n shortName: tagvalue\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNetworkFirewallPolicyRule can be imported using any of these accepted formats:\n\n* `projects/{{project}}/global/firewallPolicies/{{firewall_policy}}/rules/{{priority}}`\n\n* `{{project}}/{{firewall_policy}}/{{priority}}`\n\n* `{{firewall_policy}}/{{priority}}`\n\nWhen using the `pulumi import` command, NetworkFirewallPolicyRule can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/networkFirewallPolicyRule:NetworkFirewallPolicyRule default projects/{{project}}/global/firewallPolicies/{{firewall_policy}}/rules/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/networkFirewallPolicyRule:NetworkFirewallPolicyRule default {{project}}/{{firewall_policy}}/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/networkFirewallPolicyRule:NetworkFirewallPolicyRule default {{firewall_policy}}/{{priority}}\n```\n\n", "properties": { "action": { "type": "string", @@ -168788,7 +170794,7 @@ } }, "gcp:compute/networkFirewallPolicyWithRules:NetworkFirewallPolicyWithRules": { - "description": "## Example Usage\n\n### Compute Network Firewall Policy With Rules Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst addressGroup1 = new gcp.networksecurity.AddressGroup(\"address_group_1\", {\n name: \"tf-address-group\",\n parent: project.then(project =\u003e `projects/${project.name}`),\n description: \"Global address group\",\n location: \"global\",\n items: [\"208.80.154.224/32\"],\n type: \"IPV4\",\n capacity: 100,\n});\nconst secureTagKey1 = new gcp.tags.TagKey(\"secure_tag_key_1\", {\n description: \"Tag key\",\n parent: project.then(project =\u003e `projects/${project.name}`),\n purpose: \"GCE_FIREWALL\",\n shortName: \"tf-tag-key\",\n purposeData: {\n network: project.then(project =\u003e `${project.name}/default`),\n },\n});\nconst secureTagValue1 = new gcp.tags.TagValue(\"secure_tag_value_1\", {\n description: \"Tag value\",\n parent: pulumi.interpolate`tagKeys/${secureTagKey1.name}`,\n shortName: \"tf-tag-value\",\n});\nconst securityProfile1 = new gcp.networksecurity.SecurityProfile(\"security_profile_1\", {\n name: \"tf-security-profile\",\n type: \"THREAT_PREVENTION\",\n parent: \"organizations/123456789\",\n location: \"global\",\n});\nconst securityProfileGroup1 = new gcp.networksecurity.SecurityProfileGroup(\"security_profile_group_1\", {\n name: \"tf-security-profile-group\",\n parent: \"organizations/123456789\",\n description: \"my description\",\n threatPreventionProfile: securityProfile1.id,\n});\nconst network_firewall_policy_with_rules = new gcp.compute.NetworkFirewallPolicyWithRules(\"network-firewall-policy-with-rules\", {\n name: \"tf-fw-policy-with-rules\",\n description: \"Terraform test\",\n rules: [\n {\n description: \"tcp rule\",\n priority: 1000,\n enableLogging: true,\n action: \"allow\",\n direction: \"EGRESS\",\n match: {\n layer4Configs: [{\n ipProtocol: \"tcp\",\n ports: [\n \"8080\",\n \"7070\",\n ],\n }],\n destIpRanges: [\"11.100.0.1/32\"],\n destFqdns: [\n \"www.yyy.com\",\n \"www.zzz.com\",\n ],\n destRegionCodes: [\n \"HK\",\n \"IN\",\n ],\n destThreatIntelligences: [\n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\",\n ],\n destAddressGroups: [addressGroup1.id],\n },\n targetSecureTags: [{\n name: pulumi.interpolate`tagValues/${secureTagValue1.name}`,\n }],\n },\n {\n description: \"udp rule\",\n priority: 2000,\n enableLogging: false,\n action: \"deny\",\n direction: \"INGRESS\",\n match: {\n layer4Configs: [{\n ipProtocol: \"udp\",\n }],\n srcIpRanges: [\"0.0.0.0/0\"],\n srcFqdns: [\n \"www.abc.com\",\n \"www.def.com\",\n ],\n srcRegionCodes: [\n \"US\",\n \"CA\",\n ],\n srcThreatIntelligences: [\n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\",\n ],\n srcAddressGroups: [addressGroup1.id],\n srcSecureTags: [{\n name: pulumi.interpolate`tagValues/${secureTagValue1.name}`,\n }],\n },\n disabled: true,\n },\n {\n description: \"security profile group rule\",\n ruleName: \"tcp rule\",\n priority: 3000,\n enableLogging: false,\n action: \"apply_security_profile_group\",\n direction: \"INGRESS\",\n match: {\n layer4Configs: [{\n ipProtocol: \"tcp\",\n }],\n srcIpRanges: [\"0.0.0.0/0\"],\n },\n targetServiceAccounts: [\"test@google.com\"],\n securityProfileGroup: pulumi.interpolate`//networksecurity.googleapis.com/${securityProfileGroup1.id}`,\n tlsInspect: true,\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\naddress_group1 = gcp.networksecurity.AddressGroup(\"address_group_1\",\n name=\"tf-address-group\",\n parent=f\"projects/{project.name}\",\n description=\"Global address group\",\n location=\"global\",\n items=[\"208.80.154.224/32\"],\n type=\"IPV4\",\n capacity=100)\nsecure_tag_key1 = gcp.tags.TagKey(\"secure_tag_key_1\",\n description=\"Tag key\",\n parent=f\"projects/{project.name}\",\n purpose=\"GCE_FIREWALL\",\n short_name=\"tf-tag-key\",\n purpose_data={\n \"network\": f\"{project.name}/default\",\n })\nsecure_tag_value1 = gcp.tags.TagValue(\"secure_tag_value_1\",\n description=\"Tag value\",\n parent=secure_tag_key1.name.apply(lambda name: f\"tagKeys/{name}\"),\n short_name=\"tf-tag-value\")\nsecurity_profile1 = gcp.networksecurity.SecurityProfile(\"security_profile_1\",\n name=\"tf-security-profile\",\n type=\"THREAT_PREVENTION\",\n parent=\"organizations/123456789\",\n location=\"global\")\nsecurity_profile_group1 = gcp.networksecurity.SecurityProfileGroup(\"security_profile_group_1\",\n name=\"tf-security-profile-group\",\n parent=\"organizations/123456789\",\n description=\"my description\",\n threat_prevention_profile=security_profile1.id)\nnetwork_firewall_policy_with_rules = gcp.compute.NetworkFirewallPolicyWithRules(\"network-firewall-policy-with-rules\",\n name=\"tf-fw-policy-with-rules\",\n description=\"Terraform test\",\n rules=[\n {\n \"description\": \"tcp rule\",\n \"priority\": 1000,\n \"enable_logging\": True,\n \"action\": \"allow\",\n \"direction\": \"EGRESS\",\n \"match\": {\n \"layer4_configs\": [{\n \"ip_protocol\": \"tcp\",\n \"ports\": [\n \"8080\",\n \"7070\",\n ],\n }],\n \"dest_ip_ranges\": [\"11.100.0.1/32\"],\n \"dest_fqdns\": [\n \"www.yyy.com\",\n \"www.zzz.com\",\n ],\n \"dest_region_codes\": [\n \"HK\",\n \"IN\",\n ],\n \"dest_threat_intelligences\": [\n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\",\n ],\n \"dest_address_groups\": [address_group1.id],\n },\n \"target_secure_tags\": [{\n \"name\": secure_tag_value1.name.apply(lambda name: f\"tagValues/{name}\"),\n }],\n },\n {\n \"description\": \"udp rule\",\n \"priority\": 2000,\n \"enable_logging\": False,\n \"action\": \"deny\",\n \"direction\": \"INGRESS\",\n \"match\": {\n \"layer4_configs\": [{\n \"ip_protocol\": \"udp\",\n }],\n \"src_ip_ranges\": [\"0.0.0.0/0\"],\n \"src_fqdns\": [\n \"www.abc.com\",\n \"www.def.com\",\n ],\n \"src_region_codes\": [\n \"US\",\n \"CA\",\n ],\n \"src_threat_intelligences\": [\n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\",\n ],\n \"src_address_groups\": [address_group1.id],\n \"src_secure_tags\": [{\n \"name\": secure_tag_value1.name.apply(lambda name: f\"tagValues/{name}\"),\n }],\n },\n \"disabled\": True,\n },\n {\n \"description\": \"security profile group rule\",\n \"rule_name\": \"tcp rule\",\n \"priority\": 3000,\n \"enable_logging\": False,\n \"action\": \"apply_security_profile_group\",\n \"direction\": \"INGRESS\",\n \"match\": {\n \"layer4_configs\": [{\n \"ip_protocol\": \"tcp\",\n }],\n \"src_ip_ranges\": [\"0.0.0.0/0\"],\n },\n \"target_service_accounts\": [\"test@google.com\"],\n \"security_profile_group\": security_profile_group1.id.apply(lambda id: f\"//networksecurity.googleapis.com/{id}\"),\n \"tls_inspect\": True,\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var addressGroup1 = new Gcp.NetworkSecurity.AddressGroup(\"address_group_1\", new()\n {\n Name = \"tf-address-group\",\n Parent = $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Name)}\",\n Description = \"Global address group\",\n Location = \"global\",\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n Type = \"IPV4\",\n Capacity = 100,\n });\n\n var secureTagKey1 = new Gcp.Tags.TagKey(\"secure_tag_key_1\", new()\n {\n Description = \"Tag key\",\n Parent = $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Name)}\",\n Purpose = \"GCE_FIREWALL\",\n ShortName = \"tf-tag-key\",\n PurposeData = \n {\n { \"network\", $\"{project.Apply(getProjectResult =\u003e getProjectResult.Name)}/default\" },\n },\n });\n\n var secureTagValue1 = new Gcp.Tags.TagValue(\"secure_tag_value_1\", new()\n {\n Description = \"Tag value\",\n Parent = secureTagKey1.Name.Apply(name =\u003e $\"tagKeys/{name}\"),\n ShortName = \"tf-tag-value\",\n });\n\n var securityProfile1 = new Gcp.NetworkSecurity.SecurityProfile(\"security_profile_1\", new()\n {\n Name = \"tf-security-profile\",\n Type = \"THREAT_PREVENTION\",\n Parent = \"organizations/123456789\",\n Location = \"global\",\n });\n\n var securityProfileGroup1 = new Gcp.NetworkSecurity.SecurityProfileGroup(\"security_profile_group_1\", new()\n {\n Name = \"tf-security-profile-group\",\n Parent = \"organizations/123456789\",\n Description = \"my description\",\n ThreatPreventionProfile = securityProfile1.Id,\n });\n\n var network_firewall_policy_with_rules = new Gcp.Compute.NetworkFirewallPolicyWithRules(\"network-firewall-policy-with-rules\", new()\n {\n Name = \"tf-fw-policy-with-rules\",\n Description = \"Terraform test\",\n Rules = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleArgs\n {\n Description = \"tcp rule\",\n Priority = 1000,\n EnableLogging = true,\n Action = \"allow\",\n Direction = \"EGRESS\",\n Match = new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"tcp\",\n Ports = new[]\n {\n \"8080\",\n \"7070\",\n },\n },\n },\n DestIpRanges = new[]\n {\n \"11.100.0.1/32\",\n },\n DestFqdns = new[]\n {\n \"www.yyy.com\",\n \"www.zzz.com\",\n },\n DestRegionCodes = new[]\n {\n \"HK\",\n \"IN\",\n },\n DestThreatIntelligences = new[]\n {\n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\",\n },\n DestAddressGroups = new[]\n {\n addressGroup1.Id,\n },\n },\n TargetSecureTags = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleTargetSecureTagArgs\n {\n Name = secureTagValue1.Name.Apply(name =\u003e $\"tagValues/{name}\"),\n },\n },\n },\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleArgs\n {\n Description = \"udp rule\",\n Priority = 2000,\n EnableLogging = false,\n Action = \"deny\",\n Direction = \"INGRESS\",\n Match = new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"udp\",\n },\n },\n SrcIpRanges = new[]\n {\n \"0.0.0.0/0\",\n },\n SrcFqdns = new[]\n {\n \"www.abc.com\",\n \"www.def.com\",\n },\n SrcRegionCodes = new[]\n {\n \"US\",\n \"CA\",\n },\n SrcThreatIntelligences = new[]\n {\n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\",\n },\n SrcAddressGroups = new[]\n {\n addressGroup1.Id,\n },\n SrcSecureTags = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArgs\n {\n Name = secureTagValue1.Name.Apply(name =\u003e $\"tagValues/{name}\"),\n },\n },\n },\n Disabled = true,\n },\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleArgs\n {\n Description = \"security profile group rule\",\n RuleName = \"tcp rule\",\n Priority = 3000,\n EnableLogging = false,\n Action = \"apply_security_profile_group\",\n Direction = \"INGRESS\",\n Match = new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"tcp\",\n },\n },\n SrcIpRanges = new[]\n {\n \"0.0.0.0/0\",\n },\n },\n TargetServiceAccounts = new[]\n {\n \"test@google.com\",\n },\n SecurityProfileGroup = securityProfileGroup1.Id.Apply(id =\u003e $\"//networksecurity.googleapis.com/{id}\"),\n TlsInspect = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taddressGroup1, err := networksecurity.NewAddressGroup(ctx, \"address_group_1\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"tf-address-group\"),\n\t\t\tParent: pulumi.Sprintf(\"projects/%v\", project.Name),\n\t\t\tDescription: pulumi.String(\"Global address group\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecureTagKey1, err := tags.NewTagKey(ctx, \"secure_tag_key_1\", \u0026tags.TagKeyArgs{\n\t\t\tDescription: pulumi.String(\"Tag key\"),\n\t\t\tParent: pulumi.Sprintf(\"projects/%v\", project.Name),\n\t\t\tPurpose: pulumi.String(\"GCE_FIREWALL\"),\n\t\t\tShortName: pulumi.String(\"tf-tag-key\"),\n\t\t\tPurposeData: pulumi.StringMap{\n\t\t\t\t\"network\": pulumi.Sprintf(\"%v/default\", project.Name),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecureTagValue1, err := tags.NewTagValue(ctx, \"secure_tag_value_1\", \u0026tags.TagValueArgs{\n\t\t\tDescription: pulumi.String(\"Tag value\"),\n\t\t\tParent: secureTagKey1.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"tagKeys/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tShortName: pulumi.String(\"tf-tag-value\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecurityProfile1, err := networksecurity.NewSecurityProfile(ctx, \"security_profile_1\", \u0026networksecurity.SecurityProfileArgs{\n\t\t\tName: pulumi.String(\"tf-security-profile\"),\n\t\t\tType: pulumi.String(\"THREAT_PREVENTION\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecurityProfileGroup1, err := networksecurity.NewSecurityProfileGroup(ctx, \"security_profile_group_1\", \u0026networksecurity.SecurityProfileGroupArgs{\n\t\t\tName: pulumi.String(\"tf-security-profile-group\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tThreatPreventionProfile: securityProfile1.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNetworkFirewallPolicyWithRules(ctx, \"network-firewall-policy-with-rules\", \u0026compute.NetworkFirewallPolicyWithRulesArgs{\n\t\t\tName: pulumi.String(\"tf-fw-policy-with-rules\"),\n\t\t\tDescription: pulumi.String(\"Terraform test\"),\n\t\t\tRules: compute.NetworkFirewallPolicyWithRulesRuleArray{\n\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"tcp rule\"),\n\t\t\t\t\tPriority: pulumi.Int(1000),\n\t\t\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\t\t\tDirection: pulumi.String(\"EGRESS\"),\n\t\t\t\t\tMatch: \u0026compute.NetworkFirewallPolicyWithRulesRuleMatchArgs{\n\t\t\t\t\t\tLayer4Configs: compute.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"8080\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"7070\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"11.100.0.1/32\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestFqdns: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"www.yyy.com\"),\n\t\t\t\t\t\t\tpulumi.String(\"www.zzz.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestRegionCodes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"HK\"),\n\t\t\t\t\t\t\tpulumi.String(\"IN\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"iplist-search-engines-crawlers\"),\n\t\t\t\t\t\t\tpulumi.String(\"iplist-tor-exit-nodes\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestAddressGroups: pulumi.StringArray{\n\t\t\t\t\t\t\taddressGroup1.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tTargetSecureTags: compute.NetworkFirewallPolicyWithRulesRuleTargetSecureTagArray{\n\t\t\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleTargetSecureTagArgs{\n\t\t\t\t\t\t\tName: secureTagValue1.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\t\t\treturn fmt.Sprintf(\"tagValues/%v\", name), nil\n\t\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"udp rule\"),\n\t\t\t\t\tPriority: pulumi.Int(2000),\n\t\t\t\t\tEnableLogging: pulumi.Bool(false),\n\t\t\t\t\tAction: pulumi.String(\"deny\"),\n\t\t\t\t\tDirection: pulumi.String(\"INGRESS\"),\n\t\t\t\t\tMatch: \u0026compute.NetworkFirewallPolicyWithRulesRuleMatchArgs{\n\t\t\t\t\t\tLayer4Configs: compute.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"udp\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"0.0.0.0/0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcFqdns: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"www.abc.com\"),\n\t\t\t\t\t\t\tpulumi.String(\"www.def.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcRegionCodes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\t\t\t\tpulumi.String(\"CA\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"iplist-known-malicious-ips\"),\n\t\t\t\t\t\t\tpulumi.String(\"iplist-public-clouds\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcAddressGroups: pulumi.StringArray{\n\t\t\t\t\t\t\taddressGroup1.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcSecureTags: compute.NetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArray{\n\t\t\t\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArgs{\n\t\t\t\t\t\t\t\tName: secureTagValue1.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\t\t\t\treturn fmt.Sprintf(\"tagValues/%v\", name), nil\n\t\t\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tDisabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"security profile group rule\"),\n\t\t\t\t\tRuleName: pulumi.String(\"tcp rule\"),\n\t\t\t\t\tPriority: pulumi.Int(3000),\n\t\t\t\t\tEnableLogging: pulumi.Bool(false),\n\t\t\t\t\tAction: pulumi.String(\"apply_security_profile_group\"),\n\t\t\t\t\tDirection: pulumi.String(\"INGRESS\"),\n\t\t\t\t\tMatch: \u0026compute.NetworkFirewallPolicyWithRulesRuleMatchArgs{\n\t\t\t\t\t\tLayer4Configs: compute.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"0.0.0.0/0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tTargetServiceAccounts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"test@google.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tSecurityProfileGroup: securityProfileGroup1.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"//networksecurity.googleapis.com/%v\", id), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\tTlsInspect: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.networksecurity.SecurityProfile;\nimport com.pulumi.gcp.networksecurity.SecurityProfileArgs;\nimport com.pulumi.gcp.networksecurity.SecurityProfileGroup;\nimport com.pulumi.gcp.networksecurity.SecurityProfileGroupArgs;\nimport com.pulumi.gcp.compute.NetworkFirewallPolicyWithRules;\nimport com.pulumi.gcp.compute.NetworkFirewallPolicyWithRulesArgs;\nimport com.pulumi.gcp.compute.inputs.NetworkFirewallPolicyWithRulesRuleArgs;\nimport com.pulumi.gcp.compute.inputs.NetworkFirewallPolicyWithRulesRuleMatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var addressGroup1 = new AddressGroup(\"addressGroup1\", AddressGroupArgs.builder()\n .name(\"tf-address-group\")\n .parent(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.name())))\n .description(\"Global address group\")\n .location(\"global\")\n .items(\"208.80.154.224/32\")\n .type(\"IPV4\")\n .capacity(100)\n .build());\n\n var secureTagKey1 = new TagKey(\"secureTagKey1\", TagKeyArgs.builder()\n .description(\"Tag key\")\n .parent(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.name())))\n .purpose(\"GCE_FIREWALL\")\n .shortName(\"tf-tag-key\")\n .purposeData(Map.of(\"network\", String.format(\"%s/default\", project.applyValue(getProjectResult -\u003e getProjectResult.name()))))\n .build());\n\n var secureTagValue1 = new TagValue(\"secureTagValue1\", TagValueArgs.builder()\n .description(\"Tag value\")\n .parent(secureTagKey1.name().applyValue(name -\u003e String.format(\"tagKeys/%s\", name)))\n .shortName(\"tf-tag-value\")\n .build());\n\n var securityProfile1 = new SecurityProfile(\"securityProfile1\", SecurityProfileArgs.builder()\n .name(\"tf-security-profile\")\n .type(\"THREAT_PREVENTION\")\n .parent(\"organizations/123456789\")\n .location(\"global\")\n .build());\n\n var securityProfileGroup1 = new SecurityProfileGroup(\"securityProfileGroup1\", SecurityProfileGroupArgs.builder()\n .name(\"tf-security-profile-group\")\n .parent(\"organizations/123456789\")\n .description(\"my description\")\n .threatPreventionProfile(securityProfile1.id())\n .build());\n\n var network_firewall_policy_with_rules = new NetworkFirewallPolicyWithRules(\"network-firewall-policy-with-rules\", NetworkFirewallPolicyWithRulesArgs.builder()\n .name(\"tf-fw-policy-with-rules\")\n .description(\"Terraform test\")\n .rules( \n NetworkFirewallPolicyWithRulesRuleArgs.builder()\n .description(\"tcp rule\")\n .priority(1000)\n .enableLogging(true)\n .action(\"allow\")\n .direction(\"EGRESS\")\n .match(NetworkFirewallPolicyWithRulesRuleMatchArgs.builder()\n .layer4Configs(NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"tcp\")\n .ports( \n 8080,\n 7070)\n .build())\n .destIpRanges(\"11.100.0.1/32\")\n .destFqdns( \n \"www.yyy.com\",\n \"www.zzz.com\")\n .destRegionCodes( \n \"HK\",\n \"IN\")\n .destThreatIntelligences( \n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\")\n .destAddressGroups(addressGroup1.id())\n .build())\n .targetSecureTags(NetworkFirewallPolicyWithRulesRuleTargetSecureTagArgs.builder()\n .name(secureTagValue1.name().applyValue(name -\u003e String.format(\"tagValues/%s\", name)))\n .build())\n .build(),\n NetworkFirewallPolicyWithRulesRuleArgs.builder()\n .description(\"udp rule\")\n .priority(2000)\n .enableLogging(false)\n .action(\"deny\")\n .direction(\"INGRESS\")\n .match(NetworkFirewallPolicyWithRulesRuleMatchArgs.builder()\n .layer4Configs(NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"udp\")\n .build())\n .srcIpRanges(\"0.0.0.0/0\")\n .srcFqdns( \n \"www.abc.com\",\n \"www.def.com\")\n .srcRegionCodes( \n \"US\",\n \"CA\")\n .srcThreatIntelligences( \n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\")\n .srcAddressGroups(addressGroup1.id())\n .srcSecureTags(NetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArgs.builder()\n .name(secureTagValue1.name().applyValue(name -\u003e String.format(\"tagValues/%s\", name)))\n .build())\n .build())\n .disabled(true)\n .build(),\n NetworkFirewallPolicyWithRulesRuleArgs.builder()\n .description(\"security profile group rule\")\n .ruleName(\"tcp rule\")\n .priority(3000)\n .enableLogging(false)\n .action(\"apply_security_profile_group\")\n .direction(\"INGRESS\")\n .match(NetworkFirewallPolicyWithRulesRuleMatchArgs.builder()\n .layer4Configs(NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"tcp\")\n .build())\n .srcIpRanges(\"0.0.0.0/0\")\n .build())\n .targetServiceAccounts(\"test@google.com\")\n .securityProfileGroup(securityProfileGroup1.id().applyValue(id -\u003e String.format(\"//networksecurity.googleapis.com/%s\", id)))\n .tlsInspect(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network-firewall-policy-with-rules:\n type: gcp:compute:NetworkFirewallPolicyWithRules\n properties:\n name: tf-fw-policy-with-rules\n description: Terraform test\n rules:\n - description: tcp rule\n priority: 1000\n enableLogging: true\n action: allow\n direction: EGRESS\n match:\n layer4Configs:\n - ipProtocol: tcp\n ports:\n - 8080\n - 7070\n destIpRanges:\n - 11.100.0.1/32\n destFqdns:\n - www.yyy.com\n - www.zzz.com\n destRegionCodes:\n - HK\n - IN\n destThreatIntelligences:\n - iplist-search-engines-crawlers\n - iplist-tor-exit-nodes\n destAddressGroups:\n - ${addressGroup1.id}\n targetSecureTags:\n - name: tagValues/${secureTagValue1.name}\n - description: udp rule\n priority: 2000\n enableLogging: false\n action: deny\n direction: INGRESS\n match:\n layer4Configs:\n - ipProtocol: udp\n srcIpRanges:\n - 0.0.0.0/0\n srcFqdns:\n - www.abc.com\n - www.def.com\n srcRegionCodes:\n - US\n - CA\n srcThreatIntelligences:\n - iplist-known-malicious-ips\n - iplist-public-clouds\n srcAddressGroups:\n - ${addressGroup1.id}\n srcSecureTags:\n - name: tagValues/${secureTagValue1.name}\n disabled: true\n - description: security profile group rule\n ruleName: tcp rule\n priority: 3000\n enableLogging: false\n action: apply_security_profile_group\n direction: INGRESS\n match:\n layer4Configs:\n - ipProtocol: tcp\n srcIpRanges:\n - 0.0.0.0/0\n targetServiceAccounts:\n - test@google.com\n securityProfileGroup: //networksecurity.googleapis.com/${securityProfileGroup1.id}\n tlsInspect: true\n addressGroup1:\n type: gcp:networksecurity:AddressGroup\n name: address_group_1\n properties:\n name: tf-address-group\n parent: projects/${project.name}\n description: Global address group\n location: global\n items:\n - 208.80.154.224/32\n type: IPV4\n capacity: 100\n secureTagKey1:\n type: gcp:tags:TagKey\n name: secure_tag_key_1\n properties:\n description: Tag key\n parent: projects/${project.name}\n purpose: GCE_FIREWALL\n shortName: tf-tag-key\n purposeData:\n network: ${project.name}/default\n secureTagValue1:\n type: gcp:tags:TagValue\n name: secure_tag_value_1\n properties:\n description: Tag value\n parent: tagKeys/${secureTagKey1.name}\n shortName: tf-tag-value\n securityProfileGroup1:\n type: gcp:networksecurity:SecurityProfileGroup\n name: security_profile_group_1\n properties:\n name: tf-security-profile-group\n parent: organizations/123456789\n description: my description\n threatPreventionProfile: ${securityProfile1.id}\n securityProfile1:\n type: gcp:networksecurity:SecurityProfile\n name: security_profile_1\n properties:\n name: tf-security-profile\n type: THREAT_PREVENTION\n parent: organizations/123456789\n location: global\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNetworkFirewallPolicyWithRules can be imported using any of these accepted formats:\n\n* `projects/{{project}}/global/firewallPolicies/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, NetworkFirewallPolicyWithRules can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/networkFirewallPolicyWithRules:NetworkFirewallPolicyWithRules default projects/{{project}}/global/firewallPolicies/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/networkFirewallPolicyWithRules:NetworkFirewallPolicyWithRules default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/networkFirewallPolicyWithRules:NetworkFirewallPolicyWithRules default {{name}}\n```\n\n", + "description": "## Example Usage\n\n### Compute Network Firewall Policy With Rules Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst addressGroup1 = new gcp.networksecurity.AddressGroup(\"address_group_1\", {\n name: \"tf-address-group\",\n parent: project.then(project =\u003e project.id),\n description: \"Global address group\",\n location: \"global\",\n items: [\"208.80.154.224/32\"],\n type: \"IPV4\",\n capacity: 100,\n});\nconst secureTagKey1 = new gcp.tags.TagKey(\"secure_tag_key_1\", {\n description: \"Tag key\",\n parent: project.then(project =\u003e project.id),\n purpose: \"GCE_FIREWALL\",\n shortName: \"tf-tag-key\",\n purposeData: {\n network: project.then(project =\u003e `${project.name}/default`),\n },\n});\nconst secureTagValue1 = new gcp.tags.TagValue(\"secure_tag_value_1\", {\n description: \"Tag value\",\n parent: secureTagKey1.id,\n shortName: \"tf-tag-value\",\n});\nconst securityProfile1 = new gcp.networksecurity.SecurityProfile(\"security_profile_1\", {\n name: \"tf-security-profile\",\n type: \"THREAT_PREVENTION\",\n parent: \"organizations/123456789\",\n location: \"global\",\n});\nconst securityProfileGroup1 = new gcp.networksecurity.SecurityProfileGroup(\"security_profile_group_1\", {\n name: \"tf-security-profile-group\",\n parent: \"organizations/123456789\",\n description: \"my description\",\n threatPreventionProfile: securityProfile1.id,\n});\nconst network_firewall_policy_with_rules = new gcp.compute.NetworkFirewallPolicyWithRules(\"network-firewall-policy-with-rules\", {\n name: \"tf-fw-policy-with-rules\",\n description: \"Terraform test\",\n rules: [\n {\n description: \"tcp rule\",\n priority: 1000,\n enableLogging: true,\n action: \"allow\",\n direction: \"EGRESS\",\n match: {\n layer4Configs: [{\n ipProtocol: \"tcp\",\n ports: [\n \"8080\",\n \"7070\",\n ],\n }],\n destIpRanges: [\"11.100.0.1/32\"],\n destFqdns: [\n \"www.yyy.com\",\n \"www.zzz.com\",\n ],\n destRegionCodes: [\n \"HK\",\n \"IN\",\n ],\n destThreatIntelligences: [\n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\",\n ],\n destAddressGroups: [addressGroup1.id],\n },\n targetSecureTags: [{\n name: secureTagValue1.id,\n }],\n },\n {\n description: \"udp rule\",\n priority: 2000,\n enableLogging: false,\n action: \"deny\",\n direction: \"INGRESS\",\n match: {\n layer4Configs: [{\n ipProtocol: \"udp\",\n }],\n srcIpRanges: [\"0.0.0.0/0\"],\n srcFqdns: [\n \"www.abc.com\",\n \"www.def.com\",\n ],\n srcRegionCodes: [\n \"US\",\n \"CA\",\n ],\n srcThreatIntelligences: [\n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\",\n ],\n srcAddressGroups: [addressGroup1.id],\n srcSecureTags: [{\n name: secureTagValue1.id,\n }],\n },\n disabled: true,\n },\n {\n description: \"security profile group rule\",\n ruleName: \"tcp rule\",\n priority: 3000,\n enableLogging: false,\n action: \"apply_security_profile_group\",\n direction: \"INGRESS\",\n match: {\n layer4Configs: [{\n ipProtocol: \"tcp\",\n }],\n srcIpRanges: [\"0.0.0.0/0\"],\n },\n targetServiceAccounts: [\"test@google.com\"],\n securityProfileGroup: pulumi.interpolate`//networksecurity.googleapis.com/${securityProfileGroup1.id}`,\n tlsInspect: true,\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\naddress_group1 = gcp.networksecurity.AddressGroup(\"address_group_1\",\n name=\"tf-address-group\",\n parent=project.id,\n description=\"Global address group\",\n location=\"global\",\n items=[\"208.80.154.224/32\"],\n type=\"IPV4\",\n capacity=100)\nsecure_tag_key1 = gcp.tags.TagKey(\"secure_tag_key_1\",\n description=\"Tag key\",\n parent=project.id,\n purpose=\"GCE_FIREWALL\",\n short_name=\"tf-tag-key\",\n purpose_data={\n \"network\": f\"{project.name}/default\",\n })\nsecure_tag_value1 = gcp.tags.TagValue(\"secure_tag_value_1\",\n description=\"Tag value\",\n parent=secure_tag_key1.id,\n short_name=\"tf-tag-value\")\nsecurity_profile1 = gcp.networksecurity.SecurityProfile(\"security_profile_1\",\n name=\"tf-security-profile\",\n type=\"THREAT_PREVENTION\",\n parent=\"organizations/123456789\",\n location=\"global\")\nsecurity_profile_group1 = gcp.networksecurity.SecurityProfileGroup(\"security_profile_group_1\",\n name=\"tf-security-profile-group\",\n parent=\"organizations/123456789\",\n description=\"my description\",\n threat_prevention_profile=security_profile1.id)\nnetwork_firewall_policy_with_rules = gcp.compute.NetworkFirewallPolicyWithRules(\"network-firewall-policy-with-rules\",\n name=\"tf-fw-policy-with-rules\",\n description=\"Terraform test\",\n rules=[\n {\n \"description\": \"tcp rule\",\n \"priority\": 1000,\n \"enable_logging\": True,\n \"action\": \"allow\",\n \"direction\": \"EGRESS\",\n \"match\": {\n \"layer4_configs\": [{\n \"ip_protocol\": \"tcp\",\n \"ports\": [\n \"8080\",\n \"7070\",\n ],\n }],\n \"dest_ip_ranges\": [\"11.100.0.1/32\"],\n \"dest_fqdns\": [\n \"www.yyy.com\",\n \"www.zzz.com\",\n ],\n \"dest_region_codes\": [\n \"HK\",\n \"IN\",\n ],\n \"dest_threat_intelligences\": [\n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\",\n ],\n \"dest_address_groups\": [address_group1.id],\n },\n \"target_secure_tags\": [{\n \"name\": secure_tag_value1.id,\n }],\n },\n {\n \"description\": \"udp rule\",\n \"priority\": 2000,\n \"enable_logging\": False,\n \"action\": \"deny\",\n \"direction\": \"INGRESS\",\n \"match\": {\n \"layer4_configs\": [{\n \"ip_protocol\": \"udp\",\n }],\n \"src_ip_ranges\": [\"0.0.0.0/0\"],\n \"src_fqdns\": [\n \"www.abc.com\",\n \"www.def.com\",\n ],\n \"src_region_codes\": [\n \"US\",\n \"CA\",\n ],\n \"src_threat_intelligences\": [\n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\",\n ],\n \"src_address_groups\": [address_group1.id],\n \"src_secure_tags\": [{\n \"name\": secure_tag_value1.id,\n }],\n },\n \"disabled\": True,\n },\n {\n \"description\": \"security profile group rule\",\n \"rule_name\": \"tcp rule\",\n \"priority\": 3000,\n \"enable_logging\": False,\n \"action\": \"apply_security_profile_group\",\n \"direction\": \"INGRESS\",\n \"match\": {\n \"layer4_configs\": [{\n \"ip_protocol\": \"tcp\",\n }],\n \"src_ip_ranges\": [\"0.0.0.0/0\"],\n },\n \"target_service_accounts\": [\"test@google.com\"],\n \"security_profile_group\": security_profile_group1.id.apply(lambda id: f\"//networksecurity.googleapis.com/{id}\"),\n \"tls_inspect\": True,\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var addressGroup1 = new Gcp.NetworkSecurity.AddressGroup(\"address_group_1\", new()\n {\n Name = \"tf-address-group\",\n Parent = project.Apply(getProjectResult =\u003e getProjectResult.Id),\n Description = \"Global address group\",\n Location = \"global\",\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n Type = \"IPV4\",\n Capacity = 100,\n });\n\n var secureTagKey1 = new Gcp.Tags.TagKey(\"secure_tag_key_1\", new()\n {\n Description = \"Tag key\",\n Parent = project.Apply(getProjectResult =\u003e getProjectResult.Id),\n Purpose = \"GCE_FIREWALL\",\n ShortName = \"tf-tag-key\",\n PurposeData = \n {\n { \"network\", $\"{project.Apply(getProjectResult =\u003e getProjectResult.Name)}/default\" },\n },\n });\n\n var secureTagValue1 = new Gcp.Tags.TagValue(\"secure_tag_value_1\", new()\n {\n Description = \"Tag value\",\n Parent = secureTagKey1.Id,\n ShortName = \"tf-tag-value\",\n });\n\n var securityProfile1 = new Gcp.NetworkSecurity.SecurityProfile(\"security_profile_1\", new()\n {\n Name = \"tf-security-profile\",\n Type = \"THREAT_PREVENTION\",\n Parent = \"organizations/123456789\",\n Location = \"global\",\n });\n\n var securityProfileGroup1 = new Gcp.NetworkSecurity.SecurityProfileGroup(\"security_profile_group_1\", new()\n {\n Name = \"tf-security-profile-group\",\n Parent = \"organizations/123456789\",\n Description = \"my description\",\n ThreatPreventionProfile = securityProfile1.Id,\n });\n\n var network_firewall_policy_with_rules = new Gcp.Compute.NetworkFirewallPolicyWithRules(\"network-firewall-policy-with-rules\", new()\n {\n Name = \"tf-fw-policy-with-rules\",\n Description = \"Terraform test\",\n Rules = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleArgs\n {\n Description = \"tcp rule\",\n Priority = 1000,\n EnableLogging = true,\n Action = \"allow\",\n Direction = \"EGRESS\",\n Match = new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"tcp\",\n Ports = new[]\n {\n \"8080\",\n \"7070\",\n },\n },\n },\n DestIpRanges = new[]\n {\n \"11.100.0.1/32\",\n },\n DestFqdns = new[]\n {\n \"www.yyy.com\",\n \"www.zzz.com\",\n },\n DestRegionCodes = new[]\n {\n \"HK\",\n \"IN\",\n },\n DestThreatIntelligences = new[]\n {\n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\",\n },\n DestAddressGroups = new[]\n {\n addressGroup1.Id,\n },\n },\n TargetSecureTags = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleTargetSecureTagArgs\n {\n Name = secureTagValue1.Id,\n },\n },\n },\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleArgs\n {\n Description = \"udp rule\",\n Priority = 2000,\n EnableLogging = false,\n Action = \"deny\",\n Direction = \"INGRESS\",\n Match = new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"udp\",\n },\n },\n SrcIpRanges = new[]\n {\n \"0.0.0.0/0\",\n },\n SrcFqdns = new[]\n {\n \"www.abc.com\",\n \"www.def.com\",\n },\n SrcRegionCodes = new[]\n {\n \"US\",\n \"CA\",\n },\n SrcThreatIntelligences = new[]\n {\n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\",\n },\n SrcAddressGroups = new[]\n {\n addressGroup1.Id,\n },\n SrcSecureTags = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArgs\n {\n Name = secureTagValue1.Id,\n },\n },\n },\n Disabled = true,\n },\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleArgs\n {\n Description = \"security profile group rule\",\n RuleName = \"tcp rule\",\n Priority = 3000,\n EnableLogging = false,\n Action = \"apply_security_profile_group\",\n Direction = \"INGRESS\",\n Match = new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"tcp\",\n },\n },\n SrcIpRanges = new[]\n {\n \"0.0.0.0/0\",\n },\n },\n TargetServiceAccounts = new[]\n {\n \"test@google.com\",\n },\n SecurityProfileGroup = securityProfileGroup1.Id.Apply(id =\u003e $\"//networksecurity.googleapis.com/{id}\"),\n TlsInspect = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taddressGroup1, err := networksecurity.NewAddressGroup(ctx, \"address_group_1\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"tf-address-group\"),\n\t\t\tParent: pulumi.String(project.Id),\n\t\t\tDescription: pulumi.String(\"Global address group\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecureTagKey1, err := tags.NewTagKey(ctx, \"secure_tag_key_1\", \u0026tags.TagKeyArgs{\n\t\t\tDescription: pulumi.String(\"Tag key\"),\n\t\t\tParent: pulumi.String(project.Id),\n\t\t\tPurpose: pulumi.String(\"GCE_FIREWALL\"),\n\t\t\tShortName: pulumi.String(\"tf-tag-key\"),\n\t\t\tPurposeData: pulumi.StringMap{\n\t\t\t\t\"network\": pulumi.Sprintf(\"%v/default\", project.Name),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecureTagValue1, err := tags.NewTagValue(ctx, \"secure_tag_value_1\", \u0026tags.TagValueArgs{\n\t\t\tDescription: pulumi.String(\"Tag value\"),\n\t\t\tParent: secureTagKey1.ID(),\n\t\t\tShortName: pulumi.String(\"tf-tag-value\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecurityProfile1, err := networksecurity.NewSecurityProfile(ctx, \"security_profile_1\", \u0026networksecurity.SecurityProfileArgs{\n\t\t\tName: pulumi.String(\"tf-security-profile\"),\n\t\t\tType: pulumi.String(\"THREAT_PREVENTION\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecurityProfileGroup1, err := networksecurity.NewSecurityProfileGroup(ctx, \"security_profile_group_1\", \u0026networksecurity.SecurityProfileGroupArgs{\n\t\t\tName: pulumi.String(\"tf-security-profile-group\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tThreatPreventionProfile: securityProfile1.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNetworkFirewallPolicyWithRules(ctx, \"network-firewall-policy-with-rules\", \u0026compute.NetworkFirewallPolicyWithRulesArgs{\n\t\t\tName: pulumi.String(\"tf-fw-policy-with-rules\"),\n\t\t\tDescription: pulumi.String(\"Terraform test\"),\n\t\t\tRules: compute.NetworkFirewallPolicyWithRulesRuleArray{\n\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"tcp rule\"),\n\t\t\t\t\tPriority: pulumi.Int(1000),\n\t\t\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\t\t\tDirection: pulumi.String(\"EGRESS\"),\n\t\t\t\t\tMatch: \u0026compute.NetworkFirewallPolicyWithRulesRuleMatchArgs{\n\t\t\t\t\t\tLayer4Configs: compute.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"8080\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"7070\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"11.100.0.1/32\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestFqdns: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"www.yyy.com\"),\n\t\t\t\t\t\t\tpulumi.String(\"www.zzz.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestRegionCodes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"HK\"),\n\t\t\t\t\t\t\tpulumi.String(\"IN\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"iplist-search-engines-crawlers\"),\n\t\t\t\t\t\t\tpulumi.String(\"iplist-tor-exit-nodes\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestAddressGroups: pulumi.StringArray{\n\t\t\t\t\t\t\taddressGroup1.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tTargetSecureTags: compute.NetworkFirewallPolicyWithRulesRuleTargetSecureTagArray{\n\t\t\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleTargetSecureTagArgs{\n\t\t\t\t\t\t\tName: secureTagValue1.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"udp rule\"),\n\t\t\t\t\tPriority: pulumi.Int(2000),\n\t\t\t\t\tEnableLogging: pulumi.Bool(false),\n\t\t\t\t\tAction: pulumi.String(\"deny\"),\n\t\t\t\t\tDirection: pulumi.String(\"INGRESS\"),\n\t\t\t\t\tMatch: \u0026compute.NetworkFirewallPolicyWithRulesRuleMatchArgs{\n\t\t\t\t\t\tLayer4Configs: compute.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"udp\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"0.0.0.0/0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcFqdns: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"www.abc.com\"),\n\t\t\t\t\t\t\tpulumi.String(\"www.def.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcRegionCodes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\t\t\t\tpulumi.String(\"CA\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"iplist-known-malicious-ips\"),\n\t\t\t\t\t\t\tpulumi.String(\"iplist-public-clouds\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcAddressGroups: pulumi.StringArray{\n\t\t\t\t\t\t\taddressGroup1.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcSecureTags: compute.NetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArray{\n\t\t\t\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArgs{\n\t\t\t\t\t\t\t\tName: secureTagValue1.ID(),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tDisabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"security profile group rule\"),\n\t\t\t\t\tRuleName: pulumi.String(\"tcp rule\"),\n\t\t\t\t\tPriority: pulumi.Int(3000),\n\t\t\t\t\tEnableLogging: pulumi.Bool(false),\n\t\t\t\t\tAction: pulumi.String(\"apply_security_profile_group\"),\n\t\t\t\t\tDirection: pulumi.String(\"INGRESS\"),\n\t\t\t\t\tMatch: \u0026compute.NetworkFirewallPolicyWithRulesRuleMatchArgs{\n\t\t\t\t\t\tLayer4Configs: compute.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\t\t\u0026compute.NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"0.0.0.0/0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tTargetServiceAccounts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"test@google.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tSecurityProfileGroup: securityProfileGroup1.ID().ApplyT(func(id string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"//networksecurity.googleapis.com/%v\", id), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\tTlsInspect: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.networksecurity.SecurityProfile;\nimport com.pulumi.gcp.networksecurity.SecurityProfileArgs;\nimport com.pulumi.gcp.networksecurity.SecurityProfileGroup;\nimport com.pulumi.gcp.networksecurity.SecurityProfileGroupArgs;\nimport com.pulumi.gcp.compute.NetworkFirewallPolicyWithRules;\nimport com.pulumi.gcp.compute.NetworkFirewallPolicyWithRulesArgs;\nimport com.pulumi.gcp.compute.inputs.NetworkFirewallPolicyWithRulesRuleArgs;\nimport com.pulumi.gcp.compute.inputs.NetworkFirewallPolicyWithRulesRuleMatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var addressGroup1 = new AddressGroup(\"addressGroup1\", AddressGroupArgs.builder()\n .name(\"tf-address-group\")\n .parent(project.applyValue(getProjectResult -\u003e getProjectResult.id()))\n .description(\"Global address group\")\n .location(\"global\")\n .items(\"208.80.154.224/32\")\n .type(\"IPV4\")\n .capacity(100)\n .build());\n\n var secureTagKey1 = new TagKey(\"secureTagKey1\", TagKeyArgs.builder()\n .description(\"Tag key\")\n .parent(project.applyValue(getProjectResult -\u003e getProjectResult.id()))\n .purpose(\"GCE_FIREWALL\")\n .shortName(\"tf-tag-key\")\n .purposeData(Map.of(\"network\", String.format(\"%s/default\", project.applyValue(getProjectResult -\u003e getProjectResult.name()))))\n .build());\n\n var secureTagValue1 = new TagValue(\"secureTagValue1\", TagValueArgs.builder()\n .description(\"Tag value\")\n .parent(secureTagKey1.id())\n .shortName(\"tf-tag-value\")\n .build());\n\n var securityProfile1 = new SecurityProfile(\"securityProfile1\", SecurityProfileArgs.builder()\n .name(\"tf-security-profile\")\n .type(\"THREAT_PREVENTION\")\n .parent(\"organizations/123456789\")\n .location(\"global\")\n .build());\n\n var securityProfileGroup1 = new SecurityProfileGroup(\"securityProfileGroup1\", SecurityProfileGroupArgs.builder()\n .name(\"tf-security-profile-group\")\n .parent(\"organizations/123456789\")\n .description(\"my description\")\n .threatPreventionProfile(securityProfile1.id())\n .build());\n\n var network_firewall_policy_with_rules = new NetworkFirewallPolicyWithRules(\"network-firewall-policy-with-rules\", NetworkFirewallPolicyWithRulesArgs.builder()\n .name(\"tf-fw-policy-with-rules\")\n .description(\"Terraform test\")\n .rules( \n NetworkFirewallPolicyWithRulesRuleArgs.builder()\n .description(\"tcp rule\")\n .priority(1000)\n .enableLogging(true)\n .action(\"allow\")\n .direction(\"EGRESS\")\n .match(NetworkFirewallPolicyWithRulesRuleMatchArgs.builder()\n .layer4Configs(NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"tcp\")\n .ports( \n 8080,\n 7070)\n .build())\n .destIpRanges(\"11.100.0.1/32\")\n .destFqdns( \n \"www.yyy.com\",\n \"www.zzz.com\")\n .destRegionCodes( \n \"HK\",\n \"IN\")\n .destThreatIntelligences( \n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\")\n .destAddressGroups(addressGroup1.id())\n .build())\n .targetSecureTags(NetworkFirewallPolicyWithRulesRuleTargetSecureTagArgs.builder()\n .name(secureTagValue1.id())\n .build())\n .build(),\n NetworkFirewallPolicyWithRulesRuleArgs.builder()\n .description(\"udp rule\")\n .priority(2000)\n .enableLogging(false)\n .action(\"deny\")\n .direction(\"INGRESS\")\n .match(NetworkFirewallPolicyWithRulesRuleMatchArgs.builder()\n .layer4Configs(NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"udp\")\n .build())\n .srcIpRanges(\"0.0.0.0/0\")\n .srcFqdns( \n \"www.abc.com\",\n \"www.def.com\")\n .srcRegionCodes( \n \"US\",\n \"CA\")\n .srcThreatIntelligences( \n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\")\n .srcAddressGroups(addressGroup1.id())\n .srcSecureTags(NetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArgs.builder()\n .name(secureTagValue1.id())\n .build())\n .build())\n .disabled(true)\n .build(),\n NetworkFirewallPolicyWithRulesRuleArgs.builder()\n .description(\"security profile group rule\")\n .ruleName(\"tcp rule\")\n .priority(3000)\n .enableLogging(false)\n .action(\"apply_security_profile_group\")\n .direction(\"INGRESS\")\n .match(NetworkFirewallPolicyWithRulesRuleMatchArgs.builder()\n .layer4Configs(NetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"tcp\")\n .build())\n .srcIpRanges(\"0.0.0.0/0\")\n .build())\n .targetServiceAccounts(\"test@google.com\")\n .securityProfileGroup(securityProfileGroup1.id().applyValue(id -\u003e String.format(\"//networksecurity.googleapis.com/%s\", id)))\n .tlsInspect(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network-firewall-policy-with-rules:\n type: gcp:compute:NetworkFirewallPolicyWithRules\n properties:\n name: tf-fw-policy-with-rules\n description: Terraform test\n rules:\n - description: tcp rule\n priority: 1000\n enableLogging: true\n action: allow\n direction: EGRESS\n match:\n layer4Configs:\n - ipProtocol: tcp\n ports:\n - 8080\n - 7070\n destIpRanges:\n - 11.100.0.1/32\n destFqdns:\n - www.yyy.com\n - www.zzz.com\n destRegionCodes:\n - HK\n - IN\n destThreatIntelligences:\n - iplist-search-engines-crawlers\n - iplist-tor-exit-nodes\n destAddressGroups:\n - ${addressGroup1.id}\n targetSecureTags:\n - name: ${secureTagValue1.id}\n - description: udp rule\n priority: 2000\n enableLogging: false\n action: deny\n direction: INGRESS\n match:\n layer4Configs:\n - ipProtocol: udp\n srcIpRanges:\n - 0.0.0.0/0\n srcFqdns:\n - www.abc.com\n - www.def.com\n srcRegionCodes:\n - US\n - CA\n srcThreatIntelligences:\n - iplist-known-malicious-ips\n - iplist-public-clouds\n srcAddressGroups:\n - ${addressGroup1.id}\n srcSecureTags:\n - name: ${secureTagValue1.id}\n disabled: true\n - description: security profile group rule\n ruleName: tcp rule\n priority: 3000\n enableLogging: false\n action: apply_security_profile_group\n direction: INGRESS\n match:\n layer4Configs:\n - ipProtocol: tcp\n srcIpRanges:\n - 0.0.0.0/0\n targetServiceAccounts:\n - test@google.com\n securityProfileGroup: //networksecurity.googleapis.com/${securityProfileGroup1.id}\n tlsInspect: true\n addressGroup1:\n type: gcp:networksecurity:AddressGroup\n name: address_group_1\n properties:\n name: tf-address-group\n parent: ${project.id}\n description: Global address group\n location: global\n items:\n - 208.80.154.224/32\n type: IPV4\n capacity: 100\n secureTagKey1:\n type: gcp:tags:TagKey\n name: secure_tag_key_1\n properties:\n description: Tag key\n parent: ${project.id}\n purpose: GCE_FIREWALL\n shortName: tf-tag-key\n purposeData:\n network: ${project.name}/default\n secureTagValue1:\n type: gcp:tags:TagValue\n name: secure_tag_value_1\n properties:\n description: Tag value\n parent: ${secureTagKey1.id}\n shortName: tf-tag-value\n securityProfileGroup1:\n type: gcp:networksecurity:SecurityProfileGroup\n name: security_profile_group_1\n properties:\n name: tf-security-profile-group\n parent: organizations/123456789\n description: my description\n threatPreventionProfile: ${securityProfile1.id}\n securityProfile1:\n type: gcp:networksecurity:SecurityProfile\n name: security_profile_1\n properties:\n name: tf-security-profile\n type: THREAT_PREVENTION\n parent: organizations/123456789\n location: global\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNetworkFirewallPolicyWithRules can be imported using any of these accepted formats:\n\n* `projects/{{project}}/global/firewallPolicies/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, NetworkFirewallPolicyWithRules can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/networkFirewallPolicyWithRules:NetworkFirewallPolicyWithRules default projects/{{project}}/global/firewallPolicies/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/networkFirewallPolicyWithRules:NetworkFirewallPolicyWithRules default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/networkFirewallPolicyWithRules:NetworkFirewallPolicyWithRules default {{name}}\n```\n\n", "properties": { "creationTimestamp": { "type": "string", @@ -169356,7 +171362,7 @@ } }, "gcp:compute/nodeTemplate:NodeTemplate": { - "description": "Represents a NodeTemplate resource. Node templates specify properties\nfor creating sole-tenant nodes, such as node type, vCPU and memory\nrequirements, node affinity labels, and region.\n\n\nTo get more information about NodeTemplate, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/nodeTemplates)\n* How-to Guides\n * [Sole-Tenant Nodes](https://cloud.google.com/compute/docs/nodes/)\n\n## Example Usage\n\n### Node Template Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst template = new gcp.compute.NodeTemplate(\"template\", {\n name: \"soletenant-tmpl\",\n region: \"us-central1\",\n nodeType: \"n1-node-96-624\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntemplate = gcp.compute.NodeTemplate(\"template\",\n name=\"soletenant-tmpl\",\n region=\"us-central1\",\n node_type=\"n1-node-96-624\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var template = new Gcp.Compute.NodeTemplate(\"template\", new()\n {\n Name = \"soletenant-tmpl\",\n Region = \"us-central1\",\n NodeType = \"n1-node-96-624\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNodeTemplate(ctx, \"template\", \u0026compute.NodeTemplateArgs{\n\t\t\tName: pulumi.String(\"soletenant-tmpl\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNodeType: pulumi.String(\"n1-node-96-624\"),\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.gcp.compute.NodeTemplate;\nimport com.pulumi.gcp.compute.NodeTemplateArgs;\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 template = new NodeTemplate(\"template\", NodeTemplateArgs.builder()\n .name(\"soletenant-tmpl\")\n .region(\"us-central1\")\n .nodeType(\"n1-node-96-624\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n template:\n type: gcp:compute:NodeTemplate\n properties:\n name: soletenant-tmpl\n region: us-central1\n nodeType: n1-node-96-624\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Node Template Server Binding\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst central1a = gcp.compute.getNodeTypes({\n zone: \"us-central1-a\",\n});\nconst template = new gcp.compute.NodeTemplate(\"template\", {\n name: \"soletenant-with-licenses\",\n region: \"us-central1\",\n nodeType: \"n1-node-96-624\",\n nodeAffinityLabels: {\n foo: \"baz\",\n },\n serverBinding: {\n type: \"RESTART_NODE_ON_MINIMAL_SERVERS\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncentral1a = gcp.compute.get_node_types(zone=\"us-central1-a\")\ntemplate = gcp.compute.NodeTemplate(\"template\",\n name=\"soletenant-with-licenses\",\n region=\"us-central1\",\n node_type=\"n1-node-96-624\",\n node_affinity_labels={\n \"foo\": \"baz\",\n },\n server_binding={\n \"type\": \"RESTART_NODE_ON_MINIMAL_SERVERS\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var central1a = Gcp.Compute.GetNodeTypes.Invoke(new()\n {\n Zone = \"us-central1-a\",\n });\n\n var template = new Gcp.Compute.NodeTemplate(\"template\", new()\n {\n Name = \"soletenant-with-licenses\",\n Region = \"us-central1\",\n NodeType = \"n1-node-96-624\",\n NodeAffinityLabels = \n {\n { \"foo\", \"baz\" },\n },\n ServerBinding = new Gcp.Compute.Inputs.NodeTemplateServerBindingArgs\n {\n Type = \"RESTART_NODE_ON_MINIMAL_SERVERS\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.GetNodeTypes(ctx, \u0026compute.GetNodeTypesArgs{\n\t\t\tZone: pulumi.StringRef(\"us-central1-a\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNodeTemplate(ctx, \"template\", \u0026compute.NodeTemplateArgs{\n\t\t\tName: pulumi.String(\"soletenant-with-licenses\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNodeType: pulumi.String(\"n1-node-96-624\"),\n\t\t\tNodeAffinityLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"baz\"),\n\t\t\t},\n\t\t\tServerBinding: \u0026compute.NodeTemplateServerBindingArgs{\n\t\t\t\tType: pulumi.String(\"RESTART_NODE_ON_MINIMAL_SERVERS\"),\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.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNodeTypesArgs;\nimport com.pulumi.gcp.compute.NodeTemplate;\nimport com.pulumi.gcp.compute.NodeTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.NodeTemplateServerBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var central1a = ComputeFunctions.getNodeTypes(GetNodeTypesArgs.builder()\n .zone(\"us-central1-a\")\n .build());\n\n var template = new NodeTemplate(\"template\", NodeTemplateArgs.builder()\n .name(\"soletenant-with-licenses\")\n .region(\"us-central1\")\n .nodeType(\"n1-node-96-624\")\n .nodeAffinityLabels(Map.of(\"foo\", \"baz\"))\n .serverBinding(NodeTemplateServerBindingArgs.builder()\n .type(\"RESTART_NODE_ON_MINIMAL_SERVERS\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n template:\n type: gcp:compute:NodeTemplate\n properties:\n name: soletenant-with-licenses\n region: us-central1\n nodeType: n1-node-96-624\n nodeAffinityLabels:\n foo: baz\n serverBinding:\n type: RESTART_NODE_ON_MINIMAL_SERVERS\nvariables:\n central1a:\n fn::invoke:\n Function: gcp:compute:getNodeTypes\n Arguments:\n zone: us-central1-a\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Node Template Accelerators\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst central1a = gcp.compute.getNodeTypes({\n zone: \"us-central1-a\",\n});\nconst template = new gcp.compute.NodeTemplate(\"template\", {\n name: \"soletenant-with-accelerators\",\n region: \"us-central1\",\n nodeType: \"n1-node-96-624\",\n accelerators: [{\n acceleratorType: \"nvidia-tesla-t4\",\n acceleratorCount: 4,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncentral1a = gcp.compute.get_node_types(zone=\"us-central1-a\")\ntemplate = gcp.compute.NodeTemplate(\"template\",\n name=\"soletenant-with-accelerators\",\n region=\"us-central1\",\n node_type=\"n1-node-96-624\",\n accelerators=[{\n \"accelerator_type\": \"nvidia-tesla-t4\",\n \"accelerator_count\": 4,\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var central1a = Gcp.Compute.GetNodeTypes.Invoke(new()\n {\n Zone = \"us-central1-a\",\n });\n\n var template = new Gcp.Compute.NodeTemplate(\"template\", new()\n {\n Name = \"soletenant-with-accelerators\",\n Region = \"us-central1\",\n NodeType = \"n1-node-96-624\",\n Accelerators = new[]\n {\n new Gcp.Compute.Inputs.NodeTemplateAcceleratorArgs\n {\n AcceleratorType = \"nvidia-tesla-t4\",\n AcceleratorCount = 4,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.GetNodeTypes(ctx, \u0026compute.GetNodeTypesArgs{\n\t\t\tZone: pulumi.StringRef(\"us-central1-a\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNodeTemplate(ctx, \"template\", \u0026compute.NodeTemplateArgs{\n\t\t\tName: pulumi.String(\"soletenant-with-accelerators\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNodeType: pulumi.String(\"n1-node-96-624\"),\n\t\t\tAccelerators: compute.NodeTemplateAcceleratorArray{\n\t\t\t\t\u0026compute.NodeTemplateAcceleratorArgs{\n\t\t\t\t\tAcceleratorType: pulumi.String(\"nvidia-tesla-t4\"),\n\t\t\t\t\tAcceleratorCount: pulumi.Int(4),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNodeTypesArgs;\nimport com.pulumi.gcp.compute.NodeTemplate;\nimport com.pulumi.gcp.compute.NodeTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.NodeTemplateAcceleratorArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var central1a = ComputeFunctions.getNodeTypes(GetNodeTypesArgs.builder()\n .zone(\"us-central1-a\")\n .build());\n\n var template = new NodeTemplate(\"template\", NodeTemplateArgs.builder()\n .name(\"soletenant-with-accelerators\")\n .region(\"us-central1\")\n .nodeType(\"n1-node-96-624\")\n .accelerators(NodeTemplateAcceleratorArgs.builder()\n .acceleratorType(\"nvidia-tesla-t4\")\n .acceleratorCount(4)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n template:\n type: gcp:compute:NodeTemplate\n properties:\n name: soletenant-with-accelerators\n region: us-central1\n nodeType: n1-node-96-624\n accelerators:\n - acceleratorType: nvidia-tesla-t4\n acceleratorCount: 4\nvariables:\n central1a:\n fn::invoke:\n Function: gcp:compute:getNodeTypes\n Arguments:\n zone: us-central1-a\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNodeTemplate can be imported using any of these accepted formats:\n\n* `projects/{{project}}/regions/{{region}}/nodeTemplates/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, NodeTemplate can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/nodeTemplate:NodeTemplate default projects/{{project}}/regions/{{region}}/nodeTemplates/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/nodeTemplate:NodeTemplate default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/nodeTemplate:NodeTemplate default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/nodeTemplate:NodeTemplate default {{name}}\n```\n\n", + "description": "Represents a NodeTemplate resource. Node templates specify properties\nfor creating sole-tenant nodes, such as node type, vCPU and memory\nrequirements, node affinity labels, and region.\n\n\nTo get more information about NodeTemplate, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/nodeTemplates)\n* How-to Guides\n * [Sole-Tenant Nodes](https://cloud.google.com/compute/docs/nodes/)\n\n## Example Usage\n\n### Node Template Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst template = new gcp.compute.NodeTemplate(\"template\", {\n name: \"soletenant-tmpl\",\n region: \"us-central1\",\n nodeType: \"n1-node-96-624\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntemplate = gcp.compute.NodeTemplate(\"template\",\n name=\"soletenant-tmpl\",\n region=\"us-central1\",\n node_type=\"n1-node-96-624\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var template = new Gcp.Compute.NodeTemplate(\"template\", new()\n {\n Name = \"soletenant-tmpl\",\n Region = \"us-central1\",\n NodeType = \"n1-node-96-624\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNodeTemplate(ctx, \"template\", \u0026compute.NodeTemplateArgs{\n\t\t\tName: pulumi.String(\"soletenant-tmpl\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNodeType: pulumi.String(\"n1-node-96-624\"),\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.gcp.compute.NodeTemplate;\nimport com.pulumi.gcp.compute.NodeTemplateArgs;\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 template = new NodeTemplate(\"template\", NodeTemplateArgs.builder()\n .name(\"soletenant-tmpl\")\n .region(\"us-central1\")\n .nodeType(\"n1-node-96-624\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n template:\n type: gcp:compute:NodeTemplate\n properties:\n name: soletenant-tmpl\n region: us-central1\n nodeType: n1-node-96-624\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Node Template Server Binding\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst central1a = gcp.compute.getNodeTypes({\n zone: \"us-central1-a\",\n});\nconst template = new gcp.compute.NodeTemplate(\"template\", {\n name: \"soletenant-with-licenses\",\n region: \"us-central1\",\n nodeType: \"n1-node-96-624\",\n nodeAffinityLabels: {\n foo: \"baz\",\n },\n serverBinding: {\n type: \"RESTART_NODE_ON_MINIMAL_SERVERS\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncentral1a = gcp.compute.get_node_types(zone=\"us-central1-a\")\ntemplate = gcp.compute.NodeTemplate(\"template\",\n name=\"soletenant-with-licenses\",\n region=\"us-central1\",\n node_type=\"n1-node-96-624\",\n node_affinity_labels={\n \"foo\": \"baz\",\n },\n server_binding={\n \"type\": \"RESTART_NODE_ON_MINIMAL_SERVERS\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var central1a = Gcp.Compute.GetNodeTypes.Invoke(new()\n {\n Zone = \"us-central1-a\",\n });\n\n var template = new Gcp.Compute.NodeTemplate(\"template\", new()\n {\n Name = \"soletenant-with-licenses\",\n Region = \"us-central1\",\n NodeType = \"n1-node-96-624\",\n NodeAffinityLabels = \n {\n { \"foo\", \"baz\" },\n },\n ServerBinding = new Gcp.Compute.Inputs.NodeTemplateServerBindingArgs\n {\n Type = \"RESTART_NODE_ON_MINIMAL_SERVERS\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.GetNodeTypes(ctx, \u0026compute.GetNodeTypesArgs{\n\t\t\tZone: pulumi.StringRef(\"us-central1-a\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNodeTemplate(ctx, \"template\", \u0026compute.NodeTemplateArgs{\n\t\t\tName: pulumi.String(\"soletenant-with-licenses\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNodeType: pulumi.String(\"n1-node-96-624\"),\n\t\t\tNodeAffinityLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"baz\"),\n\t\t\t},\n\t\t\tServerBinding: \u0026compute.NodeTemplateServerBindingArgs{\n\t\t\t\tType: pulumi.String(\"RESTART_NODE_ON_MINIMAL_SERVERS\"),\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.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNodeTypesArgs;\nimport com.pulumi.gcp.compute.NodeTemplate;\nimport com.pulumi.gcp.compute.NodeTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.NodeTemplateServerBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var central1a = ComputeFunctions.getNodeTypes(GetNodeTypesArgs.builder()\n .zone(\"us-central1-a\")\n .build());\n\n var template = new NodeTemplate(\"template\", NodeTemplateArgs.builder()\n .name(\"soletenant-with-licenses\")\n .region(\"us-central1\")\n .nodeType(\"n1-node-96-624\")\n .nodeAffinityLabels(Map.of(\"foo\", \"baz\"))\n .serverBinding(NodeTemplateServerBindingArgs.builder()\n .type(\"RESTART_NODE_ON_MINIMAL_SERVERS\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n template:\n type: gcp:compute:NodeTemplate\n properties:\n name: soletenant-with-licenses\n region: us-central1\n nodeType: n1-node-96-624\n nodeAffinityLabels:\n foo: baz\n serverBinding:\n type: RESTART_NODE_ON_MINIMAL_SERVERS\nvariables:\n central1a:\n fn::invoke:\n Function: gcp:compute:getNodeTypes\n Arguments:\n zone: us-central1-a\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Node Template Accelerators\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst central1a = gcp.compute.getNodeTypes({\n zone: \"us-central1-a\",\n});\nconst template = new gcp.compute.NodeTemplate(\"template\", {\n name: \"soletenant-with-accelerators\",\n region: \"us-central1\",\n nodeType: \"n1-node-96-624\",\n accelerators: [{\n acceleratorType: \"nvidia-tesla-t4\",\n acceleratorCount: 4,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncentral1a = gcp.compute.get_node_types(zone=\"us-central1-a\")\ntemplate = gcp.compute.NodeTemplate(\"template\",\n name=\"soletenant-with-accelerators\",\n region=\"us-central1\",\n node_type=\"n1-node-96-624\",\n accelerators=[{\n \"accelerator_type\": \"nvidia-tesla-t4\",\n \"accelerator_count\": 4,\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var central1a = Gcp.Compute.GetNodeTypes.Invoke(new()\n {\n Zone = \"us-central1-a\",\n });\n\n var template = new Gcp.Compute.NodeTemplate(\"template\", new()\n {\n Name = \"soletenant-with-accelerators\",\n Region = \"us-central1\",\n NodeType = \"n1-node-96-624\",\n Accelerators = new[]\n {\n new Gcp.Compute.Inputs.NodeTemplateAcceleratorArgs\n {\n AcceleratorType = \"nvidia-tesla-t4\",\n AcceleratorCount = 4,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.GetNodeTypes(ctx, \u0026compute.GetNodeTypesArgs{\n\t\t\tZone: pulumi.StringRef(\"us-central1-a\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNodeTemplate(ctx, \"template\", \u0026compute.NodeTemplateArgs{\n\t\t\tName: pulumi.String(\"soletenant-with-accelerators\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNodeType: pulumi.String(\"n1-node-96-624\"),\n\t\t\tAccelerators: compute.NodeTemplateAcceleratorArray{\n\t\t\t\t\u0026compute.NodeTemplateAcceleratorArgs{\n\t\t\t\t\tAcceleratorType: pulumi.String(\"nvidia-tesla-t4\"),\n\t\t\t\t\tAcceleratorCount: pulumi.Int(4),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNodeTypesArgs;\nimport com.pulumi.gcp.compute.NodeTemplate;\nimport com.pulumi.gcp.compute.NodeTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.NodeTemplateAcceleratorArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var central1a = ComputeFunctions.getNodeTypes(GetNodeTypesArgs.builder()\n .zone(\"us-central1-a\")\n .build());\n\n var template = new NodeTemplate(\"template\", NodeTemplateArgs.builder()\n .name(\"soletenant-with-accelerators\")\n .region(\"us-central1\")\n .nodeType(\"n1-node-96-624\")\n .accelerators(NodeTemplateAcceleratorArgs.builder()\n .acceleratorType(\"nvidia-tesla-t4\")\n .acceleratorCount(4)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n template:\n type: gcp:compute:NodeTemplate\n properties:\n name: soletenant-with-accelerators\n region: us-central1\n nodeType: n1-node-96-624\n accelerators:\n - acceleratorType: nvidia-tesla-t4\n acceleratorCount: 4\nvariables:\n central1a:\n fn::invoke:\n Function: gcp:compute:getNodeTypes\n Arguments:\n zone: us-central1-a\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Node Template Disks\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst central1a = gcp.compute.getNodeTypes({\n zone: \"us-central1-a\",\n});\nconst template = new gcp.compute.NodeTemplate(\"template\", {\n name: \"soletenant-with-disks\",\n region: \"us-central1\",\n nodeType: \"n2-node-80-640\",\n disks: [{\n diskCount: 16,\n diskSizeGb: 375,\n diskType: \"local-ssd\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncentral1a = gcp.compute.get_node_types(zone=\"us-central1-a\")\ntemplate = gcp.compute.NodeTemplate(\"template\",\n name=\"soletenant-with-disks\",\n region=\"us-central1\",\n node_type=\"n2-node-80-640\",\n disks=[{\n \"disk_count\": 16,\n \"disk_size_gb\": 375,\n \"disk_type\": \"local-ssd\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var central1a = Gcp.Compute.GetNodeTypes.Invoke(new()\n {\n Zone = \"us-central1-a\",\n });\n\n var template = new Gcp.Compute.NodeTemplate(\"template\", new()\n {\n Name = \"soletenant-with-disks\",\n Region = \"us-central1\",\n NodeType = \"n2-node-80-640\",\n Disks = new[]\n {\n new Gcp.Compute.Inputs.NodeTemplateDiskArgs\n {\n DiskCount = 16,\n DiskSizeGb = 375,\n DiskType = \"local-ssd\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.GetNodeTypes(ctx, \u0026compute.GetNodeTypesArgs{\n\t\t\tZone: pulumi.StringRef(\"us-central1-a\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNodeTemplate(ctx, \"template\", \u0026compute.NodeTemplateArgs{\n\t\t\tName: pulumi.String(\"soletenant-with-disks\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNodeType: pulumi.String(\"n2-node-80-640\"),\n\t\t\tDisks: compute.NodeTemplateDiskArray{\n\t\t\t\t\u0026compute.NodeTemplateDiskArgs{\n\t\t\t\t\tDiskCount: pulumi.Int(16),\n\t\t\t\t\tDiskSizeGb: pulumi.Int(375),\n\t\t\t\t\tDiskType: pulumi.String(\"local-ssd\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNodeTypesArgs;\nimport com.pulumi.gcp.compute.NodeTemplate;\nimport com.pulumi.gcp.compute.NodeTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.NodeTemplateDiskArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var central1a = ComputeFunctions.getNodeTypes(GetNodeTypesArgs.builder()\n .zone(\"us-central1-a\")\n .build());\n\n var template = new NodeTemplate(\"template\", NodeTemplateArgs.builder()\n .name(\"soletenant-with-disks\")\n .region(\"us-central1\")\n .nodeType(\"n2-node-80-640\")\n .disks(NodeTemplateDiskArgs.builder()\n .diskCount(16)\n .diskSizeGb(375)\n .diskType(\"local-ssd\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n template:\n type: gcp:compute:NodeTemplate\n properties:\n name: soletenant-with-disks\n region: us-central1\n nodeType: n2-node-80-640\n disks:\n - diskCount: 16\n diskSizeGb: 375\n diskType: local-ssd\nvariables:\n central1a:\n fn::invoke:\n Function: gcp:compute:getNodeTypes\n Arguments:\n zone: us-central1-a\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNodeTemplate can be imported using any of these accepted formats:\n\n* `projects/{{project}}/regions/{{region}}/nodeTemplates/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, NodeTemplate can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/nodeTemplate:NodeTemplate default projects/{{project}}/regions/{{region}}/nodeTemplates/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/nodeTemplate:NodeTemplate default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/nodeTemplate:NodeTemplate default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/nodeTemplate:NodeTemplate default {{name}}\n```\n\n", "properties": { "accelerators": { "type": "array", @@ -169377,6 +171383,13 @@ "type": "string", "description": "An optional textual description of the resource.\n" }, + "disks": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/NodeTemplateDisk:NodeTemplateDisk" + }, + "description": "List of the type, size and count of disks attached to the\nnode template\nStructure is documented below.\n" + }, "name": { "type": "string", "description": "Name of the resource.\n" @@ -169440,6 +171453,14 @@ "description": "An optional textual description of the resource.\n", "willReplaceOnChanges": true }, + "disks": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/NodeTemplateDisk:NodeTemplateDisk" + }, + "description": "List of the type, size and count of disks attached to the\nnode template\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, "name": { "type": "string", "description": "Name of the resource.\n", @@ -169504,6 +171525,14 @@ "description": "An optional textual description of the resource.\n", "willReplaceOnChanges": true }, + "disks": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/NodeTemplateDisk:NodeTemplateDisk" + }, + "description": "List of the type, size and count of disks attached to the\nnode template\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, "name": { "type": "string", "description": "Name of the resource.\n", @@ -171723,7 +173752,7 @@ "properties": { "asyncPrimaryDisk": { "$ref": "#/types/gcp:compute/RegionDiskAsyncPrimaryDisk:RegionDiskAsyncPrimaryDisk", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "creationTimestamp": { "type": "string", @@ -171877,7 +173906,7 @@ "inputProperties": { "asyncPrimaryDisk": { "$ref": "#/types/gcp:compute/RegionDiskAsyncPrimaryDisk:RegionDiskAsyncPrimaryDisk", - "description": "A nested object resource\nStructure is documented below.\n", + "description": "A nested object resource.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "description": { @@ -171980,7 +174009,7 @@ "properties": { "asyncPrimaryDisk": { "$ref": "#/types/gcp:compute/RegionDiskAsyncPrimaryDisk:RegionDiskAsyncPrimaryDisk", - "description": "A nested object resource\nStructure is documented below.\n", + "description": "A nested object resource.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "creationTimestamp": { @@ -172544,7 +174573,7 @@ }, "grpcHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckGrpcHealthCheck:RegionHealthCheckGrpcHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "healthyThreshold": { "type": "integer", @@ -172552,15 +174581,15 @@ }, "http2HealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckHttp2HealthCheck:RegionHealthCheckHttp2HealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "httpHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckHttpHealthCheck:RegionHealthCheckHttpHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "httpsHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckHttpsHealthCheck:RegionHealthCheckHttpsHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "logConfig": { "$ref": "#/types/gcp:compute/RegionHealthCheckLogConfig:RegionHealthCheckLogConfig", @@ -172584,11 +174613,11 @@ }, "sslHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckSslHealthCheck:RegionHealthCheckSslHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "tcpHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckTcpHealthCheck:RegionHealthCheckTcpHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "timeoutSec": { "type": "integer", @@ -172623,7 +174652,7 @@ }, "grpcHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckGrpcHealthCheck:RegionHealthCheckGrpcHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "healthyThreshold": { "type": "integer", @@ -172631,15 +174660,15 @@ }, "http2HealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckHttp2HealthCheck:RegionHealthCheckHttp2HealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "httpHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckHttpHealthCheck:RegionHealthCheckHttpHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "httpsHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckHttpsHealthCheck:RegionHealthCheckHttpsHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "logConfig": { "$ref": "#/types/gcp:compute/RegionHealthCheckLogConfig:RegionHealthCheckLogConfig", @@ -172662,11 +174691,11 @@ }, "sslHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckSslHealthCheck:RegionHealthCheckSslHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "tcpHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckTcpHealthCheck:RegionHealthCheckTcpHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "timeoutSec": { "type": "integer", @@ -172694,7 +174723,7 @@ }, "grpcHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckGrpcHealthCheck:RegionHealthCheckGrpcHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "healthyThreshold": { "type": "integer", @@ -172702,15 +174731,15 @@ }, "http2HealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckHttp2HealthCheck:RegionHealthCheckHttp2HealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "httpHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckHttpHealthCheck:RegionHealthCheckHttpHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "httpsHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckHttpsHealthCheck:RegionHealthCheckHttpsHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "logConfig": { "$ref": "#/types/gcp:compute/RegionHealthCheckLogConfig:RegionHealthCheckLogConfig", @@ -172737,11 +174766,11 @@ }, "sslHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckSslHealthCheck:RegionHealthCheckSslHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "tcpHealthCheck": { "$ref": "#/types/gcp:compute/RegionHealthCheckTcpHealthCheck:RegionHealthCheckTcpHealthCheck", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "timeoutSec": { "type": "integer", @@ -172797,6 +174826,10 @@ "type": "string", "description": "The fingerprint of the instance group manager.\n" }, + "instanceFlexibilityPolicy": { + "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerInstanceFlexibilityPolicy:RegionInstanceGroupManagerInstanceFlexibilityPolicy", + "description": "The flexibility policy for managed instance group. Instance flexibility allows managed instance group to create VMs from multiple types of machines. Instance flexibility configuration on managed instance group overrides instance template configuration. Structure is documented below.\n- - -\n" + }, "instanceGroup": { "type": "string", "description": "The full URL of the instance group created by the manager.\n" @@ -172822,7 +174855,7 @@ }, "params": { "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerParams:RegionInstanceGroupManagerParams", - "description": "Input only additional params for instance group manager creation. Structure is documented below. For more information, see [API](https://cloud.google.com/compute/docs/reference/rest/beta/instanceGroupManagers/insert).\n\n- - -\n" + "description": "Input only additional params for instance group manager creation. Structure is documented below. For more information, see [API](https://cloud.google.com/compute/docs/reference/rest/beta/instanceGroupManagers/insert).\n" }, "project": { "type": "string", @@ -172958,6 +174991,10 @@ "description": "The distribution policy for this managed instance\ngroup. You can specify one or more values. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/distributing-instances-with-regional-instance-groups#selectingzones).\n", "willReplaceOnChanges": true }, + "instanceFlexibilityPolicy": { + "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerInstanceFlexibilityPolicy:RegionInstanceGroupManagerInstanceFlexibilityPolicy", + "description": "The flexibility policy for managed instance group. Instance flexibility allows managed instance group to create VMs from multiple types of machines. Instance flexibility configuration on managed instance group overrides instance template configuration. Structure is documented below.\n- - -\n" + }, "instanceLifecyclePolicy": { "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerInstanceLifecyclePolicy:RegionInstanceGroupManagerInstanceLifecyclePolicy", "description": "The instance lifecycle policy for this managed instance group.\n" @@ -172980,7 +175017,7 @@ }, "params": { "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerParams:RegionInstanceGroupManagerParams", - "description": "Input only additional params for instance group manager creation. Structure is documented below. For more information, see [API](https://cloud.google.com/compute/docs/reference/rest/beta/instanceGroupManagers/insert).\n\n- - -\n", + "description": "Input only additional params for instance group manager creation. Structure is documented below. For more information, see [API](https://cloud.google.com/compute/docs/reference/rest/beta/instanceGroupManagers/insert).\n", "willReplaceOnChanges": true }, "project": { @@ -173102,6 +175139,10 @@ "type": "string", "description": "The fingerprint of the instance group manager.\n" }, + "instanceFlexibilityPolicy": { + "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerInstanceFlexibilityPolicy:RegionInstanceGroupManagerInstanceFlexibilityPolicy", + "description": "The flexibility policy for managed instance group. Instance flexibility allows managed instance group to create VMs from multiple types of machines. Instance flexibility configuration on managed instance group overrides instance template configuration. Structure is documented below.\n- - -\n" + }, "instanceGroup": { "type": "string", "description": "The full URL of the instance group created by the manager.\n" @@ -173128,7 +175169,7 @@ }, "params": { "$ref": "#/types/gcp:compute/RegionInstanceGroupManagerParams:RegionInstanceGroupManagerParams", - "description": "Input only additional params for instance group manager creation. Structure is documented below. For more information, see [API](https://cloud.google.com/compute/docs/reference/rest/beta/instanceGroupManagers/insert).\n\n- - -\n", + "description": "Input only additional params for instance group manager creation. Structure is documented below. For more information, see [API](https://cloud.google.com/compute/docs/reference/rest/beta/instanceGroupManagers/insert).\n", "willReplaceOnChanges": true }, "project": { @@ -174342,7 +176383,7 @@ } }, "gcp:compute/regionNetworkFirewallPolicyRule:RegionNetworkFirewallPolicyRule": { - "description": "Represents a rule that describes one or more match conditions along with the action to be taken when traffic matches this condition (allow or deny).\n\n\nTo get more information about RegionNetworkFirewallPolicyRule, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionNetworkFirewallPolicies/addRule)\n\n## Example Usage\n\n### Region Network Firewall Policy Rule\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicRegionalNetworksecurityAddressGroup = new gcp.networksecurity.AddressGroup(\"basic_regional_networksecurity_address_group\", {\n name: \"address\",\n parent: \"projects/my-project-name\",\n description: \"Sample regional networksecurity_address_group\",\n location: \"us-west1\",\n items: [\"208.80.154.224/32\"],\n type: \"IPV4\",\n capacity: 100,\n});\nconst basicRegionalNetworkFirewallPolicy = new gcp.compute.RegionNetworkFirewallPolicy(\"basic_regional_network_firewall_policy\", {\n name: \"policy\",\n description: \"Sample regional network firewall policy\",\n project: \"my-project-name\",\n region: \"us-west1\",\n});\nconst basicNetwork = new gcp.compute.Network(\"basic_network\", {name: \"network\"});\nconst basicKey = new gcp.tags.TagKey(\"basic_key\", {\n description: \"For keyname resources.\",\n parent: \"organizations/123456789\",\n purpose: \"GCE_FIREWALL\",\n shortName: \"tagkey\",\n purposeData: {\n network: pulumi.interpolate`my-project-name/${basicNetwork.name}`,\n },\n});\nconst basicValue = new gcp.tags.TagValue(\"basic_value\", {\n description: \"For valuename resources.\",\n parent: pulumi.interpolate`tagKeys/${basicKey.name}`,\n shortName: \"tagvalue\",\n});\nconst primary = new gcp.compute.RegionNetworkFirewallPolicyRule(\"primary\", {\n action: \"allow\",\n description: \"This is a simple rule description\",\n direction: \"INGRESS\",\n disabled: false,\n enableLogging: true,\n firewallPolicy: basicRegionalNetworkFirewallPolicy.name,\n priority: 1000,\n region: \"us-west1\",\n ruleName: \"test-rule\",\n targetServiceAccounts: [\"my@service-account.com\"],\n match: {\n srcIpRanges: [\"10.100.0.1/32\"],\n srcFqdns: [\"example.com\"],\n srcRegionCodes: [\"US\"],\n srcThreatIntelligences: [\"iplist-known-malicious-ips\"],\n layer4Configs: [{\n ipProtocol: \"all\",\n }],\n srcSecureTags: [{\n name: pulumi.interpolate`tagValues/${basicValue.name}`,\n }],\n srcAddressGroups: [basicRegionalNetworksecurityAddressGroup.id],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_regional_networksecurity_address_group = gcp.networksecurity.AddressGroup(\"basic_regional_networksecurity_address_group\",\n name=\"address\",\n parent=\"projects/my-project-name\",\n description=\"Sample regional networksecurity_address_group\",\n location=\"us-west1\",\n items=[\"208.80.154.224/32\"],\n type=\"IPV4\",\n capacity=100)\nbasic_regional_network_firewall_policy = gcp.compute.RegionNetworkFirewallPolicy(\"basic_regional_network_firewall_policy\",\n name=\"policy\",\n description=\"Sample regional network firewall policy\",\n project=\"my-project-name\",\n region=\"us-west1\")\nbasic_network = gcp.compute.Network(\"basic_network\", name=\"network\")\nbasic_key = gcp.tags.TagKey(\"basic_key\",\n description=\"For keyname resources.\",\n parent=\"organizations/123456789\",\n purpose=\"GCE_FIREWALL\",\n short_name=\"tagkey\",\n purpose_data={\n \"network\": basic_network.name.apply(lambda name: f\"my-project-name/{name}\"),\n })\nbasic_value = gcp.tags.TagValue(\"basic_value\",\n description=\"For valuename resources.\",\n parent=basic_key.name.apply(lambda name: f\"tagKeys/{name}\"),\n short_name=\"tagvalue\")\nprimary = gcp.compute.RegionNetworkFirewallPolicyRule(\"primary\",\n action=\"allow\",\n description=\"This is a simple rule description\",\n direction=\"INGRESS\",\n disabled=False,\n enable_logging=True,\n firewall_policy=basic_regional_network_firewall_policy.name,\n priority=1000,\n region=\"us-west1\",\n rule_name=\"test-rule\",\n target_service_accounts=[\"my@service-account.com\"],\n match={\n \"src_ip_ranges\": [\"10.100.0.1/32\"],\n \"src_fqdns\": [\"example.com\"],\n \"src_region_codes\": [\"US\"],\n \"src_threat_intelligences\": [\"iplist-known-malicious-ips\"],\n \"layer4_configs\": [{\n \"ip_protocol\": \"all\",\n }],\n \"src_secure_tags\": [{\n \"name\": basic_value.name.apply(lambda name: f\"tagValues/{name}\"),\n }],\n \"src_address_groups\": [basic_regional_networksecurity_address_group.id],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicRegionalNetworksecurityAddressGroup = new Gcp.NetworkSecurity.AddressGroup(\"basic_regional_networksecurity_address_group\", new()\n {\n Name = \"address\",\n Parent = \"projects/my-project-name\",\n Description = \"Sample regional networksecurity_address_group\",\n Location = \"us-west1\",\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n Type = \"IPV4\",\n Capacity = 100,\n });\n\n var basicRegionalNetworkFirewallPolicy = new Gcp.Compute.RegionNetworkFirewallPolicy(\"basic_regional_network_firewall_policy\", new()\n {\n Name = \"policy\",\n Description = \"Sample regional network firewall policy\",\n Project = \"my-project-name\",\n Region = \"us-west1\",\n });\n\n var basicNetwork = new Gcp.Compute.Network(\"basic_network\", new()\n {\n Name = \"network\",\n });\n\n var basicKey = new Gcp.Tags.TagKey(\"basic_key\", new()\n {\n Description = \"For keyname resources.\",\n Parent = \"organizations/123456789\",\n Purpose = \"GCE_FIREWALL\",\n ShortName = \"tagkey\",\n PurposeData = \n {\n { \"network\", basicNetwork.Name.Apply(name =\u003e $\"my-project-name/{name}\") },\n },\n });\n\n var basicValue = new Gcp.Tags.TagValue(\"basic_value\", new()\n {\n Description = \"For valuename resources.\",\n Parent = basicKey.Name.Apply(name =\u003e $\"tagKeys/{name}\"),\n ShortName = \"tagvalue\",\n });\n\n var primary = new Gcp.Compute.RegionNetworkFirewallPolicyRule(\"primary\", new()\n {\n Action = \"allow\",\n Description = \"This is a simple rule description\",\n Direction = \"INGRESS\",\n Disabled = false,\n EnableLogging = true,\n FirewallPolicy = basicRegionalNetworkFirewallPolicy.Name,\n Priority = 1000,\n Region = \"us-west1\",\n RuleName = \"test-rule\",\n TargetServiceAccounts = new[]\n {\n \"my@service-account.com\",\n },\n Match = new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyRuleMatchArgs\n {\n SrcIpRanges = new[]\n {\n \"10.100.0.1/32\",\n },\n SrcFqdns = new[]\n {\n \"example.com\",\n },\n SrcRegionCodes = new[]\n {\n \"US\",\n },\n SrcThreatIntelligences = new[]\n {\n \"iplist-known-malicious-ips\",\n },\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"all\",\n },\n },\n SrcSecureTags = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyRuleMatchSrcSecureTagArgs\n {\n Name = basicValue.Name.Apply(name =\u003e $\"tagValues/{name}\"),\n },\n },\n SrcAddressGroups = new[]\n {\n basicRegionalNetworksecurityAddressGroup.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicRegionalNetworksecurityAddressGroup, err := networksecurity.NewAddressGroup(ctx, \"basic_regional_networksecurity_address_group\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"address\"),\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tDescription: pulumi.String(\"Sample regional networksecurity_address_group\"),\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicRegionalNetworkFirewallPolicy, err := compute.NewRegionNetworkFirewallPolicy(ctx, \"basic_regional_network_firewall_policy\", \u0026compute.RegionNetworkFirewallPolicyArgs{\n\t\t\tName: pulumi.String(\"policy\"),\n\t\t\tDescription: pulumi.String(\"Sample regional network firewall policy\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicNetwork, err := compute.NewNetwork(ctx, \"basic_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicKey, err := tags.NewTagKey(ctx, \"basic_key\", \u0026tags.TagKeyArgs{\n\t\t\tDescription: pulumi.String(\"For keyname resources.\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tPurpose: pulumi.String(\"GCE_FIREWALL\"),\n\t\t\tShortName: pulumi.String(\"tagkey\"),\n\t\t\tPurposeData: pulumi.StringMap{\n\t\t\t\t\"network\": basicNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"my-project-name/%v\", name), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicValue, err := tags.NewTagValue(ctx, \"basic_value\", \u0026tags.TagValueArgs{\n\t\t\tDescription: pulumi.String(\"For valuename resources.\"),\n\t\t\tParent: basicKey.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"tagKeys/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tShortName: pulumi.String(\"tagvalue\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkFirewallPolicyRule(ctx, \"primary\", \u0026compute.RegionNetworkFirewallPolicyRuleArgs{\n\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\tDescription: pulumi.String(\"This is a simple rule description\"),\n\t\t\tDirection: pulumi.String(\"INGRESS\"),\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\tFirewallPolicy: basicRegionalNetworkFirewallPolicy.Name,\n\t\t\tPriority: pulumi.Int(1000),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t\tRuleName: pulumi.String(\"test-rule\"),\n\t\t\tTargetServiceAccounts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"my@service-account.com\"),\n\t\t\t},\n\t\t\tMatch: \u0026compute.RegionNetworkFirewallPolicyRuleMatchArgs{\n\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10.100.0.1/32\"),\n\t\t\t\t},\n\t\t\t\tSrcFqdns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t\tSrcRegionCodes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\t},\n\t\t\t\tSrcThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"iplist-known-malicious-ips\"),\n\t\t\t\t},\n\t\t\t\tLayer4Configs: compute.RegionNetworkFirewallPolicyRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\tIpProtocol: pulumi.String(\"all\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSrcSecureTags: compute.RegionNetworkFirewallPolicyRuleMatchSrcSecureTagArray{\n\t\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyRuleMatchSrcSecureTagArgs{\n\t\t\t\t\t\tName: basicValue.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"tagValues/%v\", name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSrcAddressGroups: pulumi.StringArray{\n\t\t\t\t\tbasicRegionalNetworksecurityAddressGroup.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\nimport com.pulumi.gcp.compute.RegionNetworkFirewallPolicy;\nimport com.pulumi.gcp.compute.RegionNetworkFirewallPolicyArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.compute.RegionNetworkFirewallPolicyRule;\nimport com.pulumi.gcp.compute.RegionNetworkFirewallPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkFirewallPolicyRuleMatchArgs;\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 basicRegionalNetworksecurityAddressGroup = new AddressGroup(\"basicRegionalNetworksecurityAddressGroup\", AddressGroupArgs.builder()\n .name(\"address\")\n .parent(\"projects/my-project-name\")\n .description(\"Sample regional networksecurity_address_group\")\n .location(\"us-west1\")\n .items(\"208.80.154.224/32\")\n .type(\"IPV4\")\n .capacity(100)\n .build());\n\n var basicRegionalNetworkFirewallPolicy = new RegionNetworkFirewallPolicy(\"basicRegionalNetworkFirewallPolicy\", RegionNetworkFirewallPolicyArgs.builder()\n .name(\"policy\")\n .description(\"Sample regional network firewall policy\")\n .project(\"my-project-name\")\n .region(\"us-west1\")\n .build());\n\n var basicNetwork = new Network(\"basicNetwork\", NetworkArgs.builder()\n .name(\"network\")\n .build());\n\n var basicKey = new TagKey(\"basicKey\", TagKeyArgs.builder()\n .description(\"For keyname resources.\")\n .parent(\"organizations/123456789\")\n .purpose(\"GCE_FIREWALL\")\n .shortName(\"tagkey\")\n .purposeData(Map.of(\"network\", basicNetwork.name().applyValue(name -\u003e String.format(\"my-project-name/%s\", name))))\n .build());\n\n var basicValue = new TagValue(\"basicValue\", TagValueArgs.builder()\n .description(\"For valuename resources.\")\n .parent(basicKey.name().applyValue(name -\u003e String.format(\"tagKeys/%s\", name)))\n .shortName(\"tagvalue\")\n .build());\n\n var primary = new RegionNetworkFirewallPolicyRule(\"primary\", RegionNetworkFirewallPolicyRuleArgs.builder()\n .action(\"allow\")\n .description(\"This is a simple rule description\")\n .direction(\"INGRESS\")\n .disabled(false)\n .enableLogging(true)\n .firewallPolicy(basicRegionalNetworkFirewallPolicy.name())\n .priority(1000)\n .region(\"us-west1\")\n .ruleName(\"test-rule\")\n .targetServiceAccounts(\"my@service-account.com\")\n .match(RegionNetworkFirewallPolicyRuleMatchArgs.builder()\n .srcIpRanges(\"10.100.0.1/32\")\n .srcFqdns(\"example.com\")\n .srcRegionCodes(\"US\")\n .srcThreatIntelligences(\"iplist-known-malicious-ips\")\n .layer4Configs(RegionNetworkFirewallPolicyRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"all\")\n .build())\n .srcSecureTags(RegionNetworkFirewallPolicyRuleMatchSrcSecureTagArgs.builder()\n .name(basicValue.name().applyValue(name -\u003e String.format(\"tagValues/%s\", name)))\n .build())\n .srcAddressGroups(basicRegionalNetworksecurityAddressGroup.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicRegionalNetworksecurityAddressGroup:\n type: gcp:networksecurity:AddressGroup\n name: basic_regional_networksecurity_address_group\n properties:\n name: address\n parent: projects/my-project-name\n description: Sample regional networksecurity_address_group\n location: us-west1\n items:\n - 208.80.154.224/32\n type: IPV4\n capacity: 100\n basicRegionalNetworkFirewallPolicy:\n type: gcp:compute:RegionNetworkFirewallPolicy\n name: basic_regional_network_firewall_policy\n properties:\n name: policy\n description: Sample regional network firewall policy\n project: my-project-name\n region: us-west1\n primary:\n type: gcp:compute:RegionNetworkFirewallPolicyRule\n properties:\n action: allow\n description: This is a simple rule description\n direction: INGRESS\n disabled: false\n enableLogging: true\n firewallPolicy: ${basicRegionalNetworkFirewallPolicy.name}\n priority: 1000\n region: us-west1\n ruleName: test-rule\n targetServiceAccounts:\n - my@service-account.com\n match:\n srcIpRanges:\n - 10.100.0.1/32\n srcFqdns:\n - example.com\n srcRegionCodes:\n - US\n srcThreatIntelligences:\n - iplist-known-malicious-ips\n layer4Configs:\n - ipProtocol: all\n srcSecureTags:\n - name: tagValues/${basicValue.name}\n srcAddressGroups:\n - ${basicRegionalNetworksecurityAddressGroup.id}\n basicNetwork:\n type: gcp:compute:Network\n name: basic_network\n properties:\n name: network\n basicKey:\n type: gcp:tags:TagKey\n name: basic_key\n properties:\n description: For keyname resources.\n parent: organizations/123456789\n purpose: GCE_FIREWALL\n shortName: tagkey\n purposeData:\n network: my-project-name/${basicNetwork.name}\n basicValue:\n type: gcp:tags:TagValue\n name: basic_value\n properties:\n description: For valuename resources.\n parent: tagKeys/${basicKey.name}\n shortName: tagvalue\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRegionNetworkFirewallPolicyRule can be imported using any of these accepted formats:\n\n* `projects/{{project}}/regions/{{region}}/firewallPolicies/{{firewall_policy}}/{{priority}}`\n\n* `{{project}}/{{region}}/{{firewall_policy}}/{{priority}}`\n\n* `{{region}}/{{firewall_policy}}/{{priority}}`\n\n* `{{firewall_policy}}/{{priority}}`\n\nWhen using the `pulumi import` command, RegionNetworkFirewallPolicyRule can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyRule:RegionNetworkFirewallPolicyRule default projects/{{project}}/regions/{{region}}/firewallPolicies/{{firewall_policy}}/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyRule:RegionNetworkFirewallPolicyRule default {{project}}/{{region}}/{{firewall_policy}}/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyRule:RegionNetworkFirewallPolicyRule default {{region}}/{{firewall_policy}}/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyRule:RegionNetworkFirewallPolicyRule default {{firewall_policy}}/{{priority}}\n```\n\n", + "description": "Represents a rule that describes one or more match conditions along with the action to be taken when traffic matches this condition (allow or deny).\n\n\nTo get more information about RegionNetworkFirewallPolicyRule, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionNetworkFirewallPolicies/addRule)\n\n## Example Usage\n\n### Region Network Firewall Policy Rule\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicRegionalNetworksecurityAddressGroup = new gcp.networksecurity.AddressGroup(\"basic_regional_networksecurity_address_group\", {\n name: \"address\",\n parent: \"projects/my-project-name\",\n description: \"Sample regional networksecurity_address_group\",\n location: \"us-west1\",\n items: [\"208.80.154.224/32\"],\n type: \"IPV4\",\n capacity: 100,\n});\nconst basicRegionalNetworkFirewallPolicy = new gcp.compute.RegionNetworkFirewallPolicy(\"basic_regional_network_firewall_policy\", {\n name: \"policy\",\n description: \"Sample regional network firewall policy\",\n project: \"my-project-name\",\n region: \"us-west1\",\n});\nconst basicNetwork = new gcp.compute.Network(\"basic_network\", {name: \"network\"});\nconst basicKey = new gcp.tags.TagKey(\"basic_key\", {\n description: \"For keyname resources.\",\n parent: \"organizations/123456789\",\n purpose: \"GCE_FIREWALL\",\n shortName: \"tagkey\",\n purposeData: {\n network: pulumi.interpolate`my-project-name/${basicNetwork.name}`,\n },\n});\nconst basicValue = new gcp.tags.TagValue(\"basic_value\", {\n description: \"For valuename resources.\",\n parent: basicKey.id,\n shortName: \"tagvalue\",\n});\nconst primary = new gcp.compute.RegionNetworkFirewallPolicyRule(\"primary\", {\n action: \"allow\",\n description: \"This is a simple rule description\",\n direction: \"INGRESS\",\n disabled: false,\n enableLogging: true,\n firewallPolicy: basicRegionalNetworkFirewallPolicy.name,\n priority: 1000,\n region: \"us-west1\",\n ruleName: \"test-rule\",\n targetServiceAccounts: [\"my@service-account.com\"],\n match: {\n srcIpRanges: [\"10.100.0.1/32\"],\n srcFqdns: [\"example.com\"],\n srcRegionCodes: [\"US\"],\n srcThreatIntelligences: [\"iplist-known-malicious-ips\"],\n layer4Configs: [{\n ipProtocol: \"all\",\n }],\n srcSecureTags: [{\n name: basicValue.id,\n }],\n srcAddressGroups: [basicRegionalNetworksecurityAddressGroup.id],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_regional_networksecurity_address_group = gcp.networksecurity.AddressGroup(\"basic_regional_networksecurity_address_group\",\n name=\"address\",\n parent=\"projects/my-project-name\",\n description=\"Sample regional networksecurity_address_group\",\n location=\"us-west1\",\n items=[\"208.80.154.224/32\"],\n type=\"IPV4\",\n capacity=100)\nbasic_regional_network_firewall_policy = gcp.compute.RegionNetworkFirewallPolicy(\"basic_regional_network_firewall_policy\",\n name=\"policy\",\n description=\"Sample regional network firewall policy\",\n project=\"my-project-name\",\n region=\"us-west1\")\nbasic_network = gcp.compute.Network(\"basic_network\", name=\"network\")\nbasic_key = gcp.tags.TagKey(\"basic_key\",\n description=\"For keyname resources.\",\n parent=\"organizations/123456789\",\n purpose=\"GCE_FIREWALL\",\n short_name=\"tagkey\",\n purpose_data={\n \"network\": basic_network.name.apply(lambda name: f\"my-project-name/{name}\"),\n })\nbasic_value = gcp.tags.TagValue(\"basic_value\",\n description=\"For valuename resources.\",\n parent=basic_key.id,\n short_name=\"tagvalue\")\nprimary = gcp.compute.RegionNetworkFirewallPolicyRule(\"primary\",\n action=\"allow\",\n description=\"This is a simple rule description\",\n direction=\"INGRESS\",\n disabled=False,\n enable_logging=True,\n firewall_policy=basic_regional_network_firewall_policy.name,\n priority=1000,\n region=\"us-west1\",\n rule_name=\"test-rule\",\n target_service_accounts=[\"my@service-account.com\"],\n match={\n \"src_ip_ranges\": [\"10.100.0.1/32\"],\n \"src_fqdns\": [\"example.com\"],\n \"src_region_codes\": [\"US\"],\n \"src_threat_intelligences\": [\"iplist-known-malicious-ips\"],\n \"layer4_configs\": [{\n \"ip_protocol\": \"all\",\n }],\n \"src_secure_tags\": [{\n \"name\": basic_value.id,\n }],\n \"src_address_groups\": [basic_regional_networksecurity_address_group.id],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicRegionalNetworksecurityAddressGroup = new Gcp.NetworkSecurity.AddressGroup(\"basic_regional_networksecurity_address_group\", new()\n {\n Name = \"address\",\n Parent = \"projects/my-project-name\",\n Description = \"Sample regional networksecurity_address_group\",\n Location = \"us-west1\",\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n Type = \"IPV4\",\n Capacity = 100,\n });\n\n var basicRegionalNetworkFirewallPolicy = new Gcp.Compute.RegionNetworkFirewallPolicy(\"basic_regional_network_firewall_policy\", new()\n {\n Name = \"policy\",\n Description = \"Sample regional network firewall policy\",\n Project = \"my-project-name\",\n Region = \"us-west1\",\n });\n\n var basicNetwork = new Gcp.Compute.Network(\"basic_network\", new()\n {\n Name = \"network\",\n });\n\n var basicKey = new Gcp.Tags.TagKey(\"basic_key\", new()\n {\n Description = \"For keyname resources.\",\n Parent = \"organizations/123456789\",\n Purpose = \"GCE_FIREWALL\",\n ShortName = \"tagkey\",\n PurposeData = \n {\n { \"network\", basicNetwork.Name.Apply(name =\u003e $\"my-project-name/{name}\") },\n },\n });\n\n var basicValue = new Gcp.Tags.TagValue(\"basic_value\", new()\n {\n Description = \"For valuename resources.\",\n Parent = basicKey.Id,\n ShortName = \"tagvalue\",\n });\n\n var primary = new Gcp.Compute.RegionNetworkFirewallPolicyRule(\"primary\", new()\n {\n Action = \"allow\",\n Description = \"This is a simple rule description\",\n Direction = \"INGRESS\",\n Disabled = false,\n EnableLogging = true,\n FirewallPolicy = basicRegionalNetworkFirewallPolicy.Name,\n Priority = 1000,\n Region = \"us-west1\",\n RuleName = \"test-rule\",\n TargetServiceAccounts = new[]\n {\n \"my@service-account.com\",\n },\n Match = new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyRuleMatchArgs\n {\n SrcIpRanges = new[]\n {\n \"10.100.0.1/32\",\n },\n SrcFqdns = new[]\n {\n \"example.com\",\n },\n SrcRegionCodes = new[]\n {\n \"US\",\n },\n SrcThreatIntelligences = new[]\n {\n \"iplist-known-malicious-ips\",\n },\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"all\",\n },\n },\n SrcSecureTags = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyRuleMatchSrcSecureTagArgs\n {\n Name = basicValue.Id,\n },\n },\n SrcAddressGroups = new[]\n {\n basicRegionalNetworksecurityAddressGroup.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicRegionalNetworksecurityAddressGroup, err := networksecurity.NewAddressGroup(ctx, \"basic_regional_networksecurity_address_group\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"address\"),\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tDescription: pulumi.String(\"Sample regional networksecurity_address_group\"),\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicRegionalNetworkFirewallPolicy, err := compute.NewRegionNetworkFirewallPolicy(ctx, \"basic_regional_network_firewall_policy\", \u0026compute.RegionNetworkFirewallPolicyArgs{\n\t\t\tName: pulumi.String(\"policy\"),\n\t\t\tDescription: pulumi.String(\"Sample regional network firewall policy\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicNetwork, err := compute.NewNetwork(ctx, \"basic_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicKey, err := tags.NewTagKey(ctx, \"basic_key\", \u0026tags.TagKeyArgs{\n\t\t\tDescription: pulumi.String(\"For keyname resources.\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tPurpose: pulumi.String(\"GCE_FIREWALL\"),\n\t\t\tShortName: pulumi.String(\"tagkey\"),\n\t\t\tPurposeData: pulumi.StringMap{\n\t\t\t\t\"network\": basicNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"my-project-name/%v\", name), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbasicValue, err := tags.NewTagValue(ctx, \"basic_value\", \u0026tags.TagValueArgs{\n\t\t\tDescription: pulumi.String(\"For valuename resources.\"),\n\t\t\tParent: basicKey.ID(),\n\t\t\tShortName: pulumi.String(\"tagvalue\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkFirewallPolicyRule(ctx, \"primary\", \u0026compute.RegionNetworkFirewallPolicyRuleArgs{\n\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\tDescription: pulumi.String(\"This is a simple rule description\"),\n\t\t\tDirection: pulumi.String(\"INGRESS\"),\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\tFirewallPolicy: basicRegionalNetworkFirewallPolicy.Name,\n\t\t\tPriority: pulumi.Int(1000),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t\tRuleName: pulumi.String(\"test-rule\"),\n\t\t\tTargetServiceAccounts: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"my@service-account.com\"),\n\t\t\t},\n\t\t\tMatch: \u0026compute.RegionNetworkFirewallPolicyRuleMatchArgs{\n\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"10.100.0.1/32\"),\n\t\t\t\t},\n\t\t\t\tSrcFqdns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"example.com\"),\n\t\t\t\t},\n\t\t\t\tSrcRegionCodes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\t},\n\t\t\t\tSrcThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"iplist-known-malicious-ips\"),\n\t\t\t\t},\n\t\t\t\tLayer4Configs: compute.RegionNetworkFirewallPolicyRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\tIpProtocol: pulumi.String(\"all\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSrcSecureTags: compute.RegionNetworkFirewallPolicyRuleMatchSrcSecureTagArray{\n\t\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyRuleMatchSrcSecureTagArgs{\n\t\t\t\t\t\tName: basicValue.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tSrcAddressGroups: pulumi.StringArray{\n\t\t\t\t\tbasicRegionalNetworksecurityAddressGroup.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\nimport com.pulumi.gcp.compute.RegionNetworkFirewallPolicy;\nimport com.pulumi.gcp.compute.RegionNetworkFirewallPolicyArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.compute.RegionNetworkFirewallPolicyRule;\nimport com.pulumi.gcp.compute.RegionNetworkFirewallPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkFirewallPolicyRuleMatchArgs;\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 basicRegionalNetworksecurityAddressGroup = new AddressGroup(\"basicRegionalNetworksecurityAddressGroup\", AddressGroupArgs.builder()\n .name(\"address\")\n .parent(\"projects/my-project-name\")\n .description(\"Sample regional networksecurity_address_group\")\n .location(\"us-west1\")\n .items(\"208.80.154.224/32\")\n .type(\"IPV4\")\n .capacity(100)\n .build());\n\n var basicRegionalNetworkFirewallPolicy = new RegionNetworkFirewallPolicy(\"basicRegionalNetworkFirewallPolicy\", RegionNetworkFirewallPolicyArgs.builder()\n .name(\"policy\")\n .description(\"Sample regional network firewall policy\")\n .project(\"my-project-name\")\n .region(\"us-west1\")\n .build());\n\n var basicNetwork = new Network(\"basicNetwork\", NetworkArgs.builder()\n .name(\"network\")\n .build());\n\n var basicKey = new TagKey(\"basicKey\", TagKeyArgs.builder()\n .description(\"For keyname resources.\")\n .parent(\"organizations/123456789\")\n .purpose(\"GCE_FIREWALL\")\n .shortName(\"tagkey\")\n .purposeData(Map.of(\"network\", basicNetwork.name().applyValue(name -\u003e String.format(\"my-project-name/%s\", name))))\n .build());\n\n var basicValue = new TagValue(\"basicValue\", TagValueArgs.builder()\n .description(\"For valuename resources.\")\n .parent(basicKey.id())\n .shortName(\"tagvalue\")\n .build());\n\n var primary = new RegionNetworkFirewallPolicyRule(\"primary\", RegionNetworkFirewallPolicyRuleArgs.builder()\n .action(\"allow\")\n .description(\"This is a simple rule description\")\n .direction(\"INGRESS\")\n .disabled(false)\n .enableLogging(true)\n .firewallPolicy(basicRegionalNetworkFirewallPolicy.name())\n .priority(1000)\n .region(\"us-west1\")\n .ruleName(\"test-rule\")\n .targetServiceAccounts(\"my@service-account.com\")\n .match(RegionNetworkFirewallPolicyRuleMatchArgs.builder()\n .srcIpRanges(\"10.100.0.1/32\")\n .srcFqdns(\"example.com\")\n .srcRegionCodes(\"US\")\n .srcThreatIntelligences(\"iplist-known-malicious-ips\")\n .layer4Configs(RegionNetworkFirewallPolicyRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"all\")\n .build())\n .srcSecureTags(RegionNetworkFirewallPolicyRuleMatchSrcSecureTagArgs.builder()\n .name(basicValue.id())\n .build())\n .srcAddressGroups(basicRegionalNetworksecurityAddressGroup.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicRegionalNetworksecurityAddressGroup:\n type: gcp:networksecurity:AddressGroup\n name: basic_regional_networksecurity_address_group\n properties:\n name: address\n parent: projects/my-project-name\n description: Sample regional networksecurity_address_group\n location: us-west1\n items:\n - 208.80.154.224/32\n type: IPV4\n capacity: 100\n basicRegionalNetworkFirewallPolicy:\n type: gcp:compute:RegionNetworkFirewallPolicy\n name: basic_regional_network_firewall_policy\n properties:\n name: policy\n description: Sample regional network firewall policy\n project: my-project-name\n region: us-west1\n primary:\n type: gcp:compute:RegionNetworkFirewallPolicyRule\n properties:\n action: allow\n description: This is a simple rule description\n direction: INGRESS\n disabled: false\n enableLogging: true\n firewallPolicy: ${basicRegionalNetworkFirewallPolicy.name}\n priority: 1000\n region: us-west1\n ruleName: test-rule\n targetServiceAccounts:\n - my@service-account.com\n match:\n srcIpRanges:\n - 10.100.0.1/32\n srcFqdns:\n - example.com\n srcRegionCodes:\n - US\n srcThreatIntelligences:\n - iplist-known-malicious-ips\n layer4Configs:\n - ipProtocol: all\n srcSecureTags:\n - name: ${basicValue.id}\n srcAddressGroups:\n - ${basicRegionalNetworksecurityAddressGroup.id}\n basicNetwork:\n type: gcp:compute:Network\n name: basic_network\n properties:\n name: network\n basicKey:\n type: gcp:tags:TagKey\n name: basic_key\n properties:\n description: For keyname resources.\n parent: organizations/123456789\n purpose: GCE_FIREWALL\n shortName: tagkey\n purposeData:\n network: my-project-name/${basicNetwork.name}\n basicValue:\n type: gcp:tags:TagValue\n name: basic_value\n properties:\n description: For valuename resources.\n parent: ${basicKey.id}\n shortName: tagvalue\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRegionNetworkFirewallPolicyRule can be imported using any of these accepted formats:\n\n* `projects/{{project}}/regions/{{region}}/firewallPolicies/{{firewall_policy}}/{{priority}}`\n\n* `{{project}}/{{region}}/{{firewall_policy}}/{{priority}}`\n\n* `{{region}}/{{firewall_policy}}/{{priority}}`\n\n* `{{firewall_policy}}/{{priority}}`\n\nWhen using the `pulumi import` command, RegionNetworkFirewallPolicyRule can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyRule:RegionNetworkFirewallPolicyRule default projects/{{project}}/regions/{{region}}/firewallPolicies/{{firewall_policy}}/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyRule:RegionNetworkFirewallPolicyRule default {{project}}/{{region}}/{{firewall_policy}}/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyRule:RegionNetworkFirewallPolicyRule default {{region}}/{{firewall_policy}}/{{priority}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyRule:RegionNetworkFirewallPolicyRule default {{firewall_policy}}/{{priority}}\n```\n\n", "properties": { "action": { "type": "string", @@ -174601,7 +176642,7 @@ } }, "gcp:compute/regionNetworkFirewallPolicyWithRules:RegionNetworkFirewallPolicyWithRules": { - "description": "## Example Usage\n\n### Compute Region Network Firewall Policy With Rules Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst addressGroup1 = new gcp.networksecurity.AddressGroup(\"address_group_1\", {\n name: \"tf-address-group\",\n parent: project.then(project =\u003e `projects/${project.name}`),\n description: \"Regional address group\",\n location: \"us-west2\",\n items: [\"208.80.154.224/32\"],\n type: \"IPV4\",\n capacity: 100,\n});\nconst secureTagKey1 = new gcp.tags.TagKey(\"secure_tag_key_1\", {\n description: \"Tag key\",\n parent: project.then(project =\u003e `projects/${project.name}`),\n purpose: \"GCE_FIREWALL\",\n shortName: \"tf-tag-key\",\n purposeData: {\n network: project.then(project =\u003e `${project.name}/default`),\n },\n});\nconst secureTagValue1 = new gcp.tags.TagValue(\"secure_tag_value_1\", {\n description: \"Tag value\",\n parent: pulumi.interpolate`tagKeys/${secureTagKey1.name}`,\n shortName: \"tf-tag-value\",\n});\nconst region_network_firewall_policy_with_rules = new gcp.compute.RegionNetworkFirewallPolicyWithRules(\"region-network-firewall-policy-with-rules\", {\n name: \"tf-region-fw-policy-with-rules\",\n region: \"us-west2\",\n description: \"Terraform test\",\n rules: [\n {\n description: \"tcp rule\",\n priority: 1000,\n enableLogging: true,\n action: \"allow\",\n direction: \"EGRESS\",\n match: {\n layer4Configs: [{\n ipProtocol: \"tcp\",\n ports: [\n \"8080\",\n \"7070\",\n ],\n }],\n destIpRanges: [\"11.100.0.1/32\"],\n destFqdns: [\n \"www.yyy.com\",\n \"www.zzz.com\",\n ],\n destRegionCodes: [\n \"HK\",\n \"IN\",\n ],\n destThreatIntelligences: [\n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\",\n ],\n destAddressGroups: [addressGroup1.id],\n },\n targetSecureTags: [{\n name: pulumi.interpolate`tagValues/${secureTagValue1.name}`,\n }],\n },\n {\n description: \"udp rule\",\n ruleName: \"test-rule\",\n priority: 2000,\n enableLogging: false,\n action: \"deny\",\n direction: \"INGRESS\",\n match: {\n layer4Configs: [{\n ipProtocol: \"udp\",\n }],\n srcIpRanges: [\"0.0.0.0/0\"],\n srcFqdns: [\n \"www.abc.com\",\n \"www.def.com\",\n ],\n srcRegionCodes: [\n \"US\",\n \"CA\",\n ],\n srcThreatIntelligences: [\n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\",\n ],\n srcAddressGroups: [addressGroup1.id],\n srcSecureTags: [{\n name: pulumi.interpolate`tagValues/${secureTagValue1.name}`,\n }],\n },\n disabled: true,\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\naddress_group1 = gcp.networksecurity.AddressGroup(\"address_group_1\",\n name=\"tf-address-group\",\n parent=f\"projects/{project.name}\",\n description=\"Regional address group\",\n location=\"us-west2\",\n items=[\"208.80.154.224/32\"],\n type=\"IPV4\",\n capacity=100)\nsecure_tag_key1 = gcp.tags.TagKey(\"secure_tag_key_1\",\n description=\"Tag key\",\n parent=f\"projects/{project.name}\",\n purpose=\"GCE_FIREWALL\",\n short_name=\"tf-tag-key\",\n purpose_data={\n \"network\": f\"{project.name}/default\",\n })\nsecure_tag_value1 = gcp.tags.TagValue(\"secure_tag_value_1\",\n description=\"Tag value\",\n parent=secure_tag_key1.name.apply(lambda name: f\"tagKeys/{name}\"),\n short_name=\"tf-tag-value\")\nregion_network_firewall_policy_with_rules = gcp.compute.RegionNetworkFirewallPolicyWithRules(\"region-network-firewall-policy-with-rules\",\n name=\"tf-region-fw-policy-with-rules\",\n region=\"us-west2\",\n description=\"Terraform test\",\n rules=[\n {\n \"description\": \"tcp rule\",\n \"priority\": 1000,\n \"enable_logging\": True,\n \"action\": \"allow\",\n \"direction\": \"EGRESS\",\n \"match\": {\n \"layer4_configs\": [{\n \"ip_protocol\": \"tcp\",\n \"ports\": [\n \"8080\",\n \"7070\",\n ],\n }],\n \"dest_ip_ranges\": [\"11.100.0.1/32\"],\n \"dest_fqdns\": [\n \"www.yyy.com\",\n \"www.zzz.com\",\n ],\n \"dest_region_codes\": [\n \"HK\",\n \"IN\",\n ],\n \"dest_threat_intelligences\": [\n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\",\n ],\n \"dest_address_groups\": [address_group1.id],\n },\n \"target_secure_tags\": [{\n \"name\": secure_tag_value1.name.apply(lambda name: f\"tagValues/{name}\"),\n }],\n },\n {\n \"description\": \"udp rule\",\n \"rule_name\": \"test-rule\",\n \"priority\": 2000,\n \"enable_logging\": False,\n \"action\": \"deny\",\n \"direction\": \"INGRESS\",\n \"match\": {\n \"layer4_configs\": [{\n \"ip_protocol\": \"udp\",\n }],\n \"src_ip_ranges\": [\"0.0.0.0/0\"],\n \"src_fqdns\": [\n \"www.abc.com\",\n \"www.def.com\",\n ],\n \"src_region_codes\": [\n \"US\",\n \"CA\",\n ],\n \"src_threat_intelligences\": [\n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\",\n ],\n \"src_address_groups\": [address_group1.id],\n \"src_secure_tags\": [{\n \"name\": secure_tag_value1.name.apply(lambda name: f\"tagValues/{name}\"),\n }],\n },\n \"disabled\": True,\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var addressGroup1 = new Gcp.NetworkSecurity.AddressGroup(\"address_group_1\", new()\n {\n Name = \"tf-address-group\",\n Parent = $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Name)}\",\n Description = \"Regional address group\",\n Location = \"us-west2\",\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n Type = \"IPV4\",\n Capacity = 100,\n });\n\n var secureTagKey1 = new Gcp.Tags.TagKey(\"secure_tag_key_1\", new()\n {\n Description = \"Tag key\",\n Parent = $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Name)}\",\n Purpose = \"GCE_FIREWALL\",\n ShortName = \"tf-tag-key\",\n PurposeData = \n {\n { \"network\", $\"{project.Apply(getProjectResult =\u003e getProjectResult.Name)}/default\" },\n },\n });\n\n var secureTagValue1 = new Gcp.Tags.TagValue(\"secure_tag_value_1\", new()\n {\n Description = \"Tag value\",\n Parent = secureTagKey1.Name.Apply(name =\u003e $\"tagKeys/{name}\"),\n ShortName = \"tf-tag-value\",\n });\n\n var region_network_firewall_policy_with_rules = new Gcp.Compute.RegionNetworkFirewallPolicyWithRules(\"region-network-firewall-policy-with-rules\", new()\n {\n Name = \"tf-region-fw-policy-with-rules\",\n Region = \"us-west2\",\n Description = \"Terraform test\",\n Rules = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleArgs\n {\n Description = \"tcp rule\",\n Priority = 1000,\n EnableLogging = true,\n Action = \"allow\",\n Direction = \"EGRESS\",\n Match = new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"tcp\",\n Ports = new[]\n {\n \"8080\",\n \"7070\",\n },\n },\n },\n DestIpRanges = new[]\n {\n \"11.100.0.1/32\",\n },\n DestFqdns = new[]\n {\n \"www.yyy.com\",\n \"www.zzz.com\",\n },\n DestRegionCodes = new[]\n {\n \"HK\",\n \"IN\",\n },\n DestThreatIntelligences = new[]\n {\n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\",\n },\n DestAddressGroups = new[]\n {\n addressGroup1.Id,\n },\n },\n TargetSecureTags = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleTargetSecureTagArgs\n {\n Name = secureTagValue1.Name.Apply(name =\u003e $\"tagValues/{name}\"),\n },\n },\n },\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleArgs\n {\n Description = \"udp rule\",\n RuleName = \"test-rule\",\n Priority = 2000,\n EnableLogging = false,\n Action = \"deny\",\n Direction = \"INGRESS\",\n Match = new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"udp\",\n },\n },\n SrcIpRanges = new[]\n {\n \"0.0.0.0/0\",\n },\n SrcFqdns = new[]\n {\n \"www.abc.com\",\n \"www.def.com\",\n },\n SrcRegionCodes = new[]\n {\n \"US\",\n \"CA\",\n },\n SrcThreatIntelligences = new[]\n {\n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\",\n },\n SrcAddressGroups = new[]\n {\n addressGroup1.Id,\n },\n SrcSecureTags = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArgs\n {\n Name = secureTagValue1.Name.Apply(name =\u003e $\"tagValues/{name}\"),\n },\n },\n },\n Disabled = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taddressGroup1, err := networksecurity.NewAddressGroup(ctx, \"address_group_1\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"tf-address-group\"),\n\t\t\tParent: pulumi.Sprintf(\"projects/%v\", project.Name),\n\t\t\tDescription: pulumi.String(\"Regional address group\"),\n\t\t\tLocation: pulumi.String(\"us-west2\"),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecureTagKey1, err := tags.NewTagKey(ctx, \"secure_tag_key_1\", \u0026tags.TagKeyArgs{\n\t\t\tDescription: pulumi.String(\"Tag key\"),\n\t\t\tParent: pulumi.Sprintf(\"projects/%v\", project.Name),\n\t\t\tPurpose: pulumi.String(\"GCE_FIREWALL\"),\n\t\t\tShortName: pulumi.String(\"tf-tag-key\"),\n\t\t\tPurposeData: pulumi.StringMap{\n\t\t\t\t\"network\": pulumi.Sprintf(\"%v/default\", project.Name),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecureTagValue1, err := tags.NewTagValue(ctx, \"secure_tag_value_1\", \u0026tags.TagValueArgs{\n\t\t\tDescription: pulumi.String(\"Tag value\"),\n\t\t\tParent: secureTagKey1.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"tagKeys/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tShortName: pulumi.String(\"tf-tag-value\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkFirewallPolicyWithRules(ctx, \"region-network-firewall-policy-with-rules\", \u0026compute.RegionNetworkFirewallPolicyWithRulesArgs{\n\t\t\tName: pulumi.String(\"tf-region-fw-policy-with-rules\"),\n\t\t\tRegion: pulumi.String(\"us-west2\"),\n\t\t\tDescription: pulumi.String(\"Terraform test\"),\n\t\t\tRules: compute.RegionNetworkFirewallPolicyWithRulesRuleArray{\n\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyWithRulesRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"tcp rule\"),\n\t\t\t\t\tPriority: pulumi.Int(1000),\n\t\t\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\t\t\tDirection: pulumi.String(\"EGRESS\"),\n\t\t\t\t\tMatch: \u0026compute.RegionNetworkFirewallPolicyWithRulesRuleMatchArgs{\n\t\t\t\t\t\tLayer4Configs: compute.RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"8080\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"7070\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"11.100.0.1/32\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestFqdns: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"www.yyy.com\"),\n\t\t\t\t\t\t\tpulumi.String(\"www.zzz.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestRegionCodes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"HK\"),\n\t\t\t\t\t\t\tpulumi.String(\"IN\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"iplist-search-engines-crawlers\"),\n\t\t\t\t\t\t\tpulumi.String(\"iplist-tor-exit-nodes\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestAddressGroups: pulumi.StringArray{\n\t\t\t\t\t\t\taddressGroup1.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tTargetSecureTags: compute.RegionNetworkFirewallPolicyWithRulesRuleTargetSecureTagArray{\n\t\t\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyWithRulesRuleTargetSecureTagArgs{\n\t\t\t\t\t\t\tName: secureTagValue1.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\t\t\treturn fmt.Sprintf(\"tagValues/%v\", name), nil\n\t\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyWithRulesRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"udp rule\"),\n\t\t\t\t\tRuleName: pulumi.String(\"test-rule\"),\n\t\t\t\t\tPriority: pulumi.Int(2000),\n\t\t\t\t\tEnableLogging: pulumi.Bool(false),\n\t\t\t\t\tAction: pulumi.String(\"deny\"),\n\t\t\t\t\tDirection: pulumi.String(\"INGRESS\"),\n\t\t\t\t\tMatch: \u0026compute.RegionNetworkFirewallPolicyWithRulesRuleMatchArgs{\n\t\t\t\t\t\tLayer4Configs: compute.RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"udp\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"0.0.0.0/0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcFqdns: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"www.abc.com\"),\n\t\t\t\t\t\t\tpulumi.String(\"www.def.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcRegionCodes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\t\t\t\tpulumi.String(\"CA\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"iplist-known-malicious-ips\"),\n\t\t\t\t\t\t\tpulumi.String(\"iplist-public-clouds\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcAddressGroups: pulumi.StringArray{\n\t\t\t\t\t\t\taddressGroup1.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcSecureTags: compute.RegionNetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArray{\n\t\t\t\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArgs{\n\t\t\t\t\t\t\t\tName: secureTagValue1.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\t\t\t\treturn fmt.Sprintf(\"tagValues/%v\", name), nil\n\t\t\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tDisabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.compute.RegionNetworkFirewallPolicyWithRules;\nimport com.pulumi.gcp.compute.RegionNetworkFirewallPolicyWithRulesArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkFirewallPolicyWithRulesRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkFirewallPolicyWithRulesRuleMatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var addressGroup1 = new AddressGroup(\"addressGroup1\", AddressGroupArgs.builder()\n .name(\"tf-address-group\")\n .parent(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.name())))\n .description(\"Regional address group\")\n .location(\"us-west2\")\n .items(\"208.80.154.224/32\")\n .type(\"IPV4\")\n .capacity(100)\n .build());\n\n var secureTagKey1 = new TagKey(\"secureTagKey1\", TagKeyArgs.builder()\n .description(\"Tag key\")\n .parent(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.name())))\n .purpose(\"GCE_FIREWALL\")\n .shortName(\"tf-tag-key\")\n .purposeData(Map.of(\"network\", String.format(\"%s/default\", project.applyValue(getProjectResult -\u003e getProjectResult.name()))))\n .build());\n\n var secureTagValue1 = new TagValue(\"secureTagValue1\", TagValueArgs.builder()\n .description(\"Tag value\")\n .parent(secureTagKey1.name().applyValue(name -\u003e String.format(\"tagKeys/%s\", name)))\n .shortName(\"tf-tag-value\")\n .build());\n\n var region_network_firewall_policy_with_rules = new RegionNetworkFirewallPolicyWithRules(\"region-network-firewall-policy-with-rules\", RegionNetworkFirewallPolicyWithRulesArgs.builder()\n .name(\"tf-region-fw-policy-with-rules\")\n .region(\"us-west2\")\n .description(\"Terraform test\")\n .rules( \n RegionNetworkFirewallPolicyWithRulesRuleArgs.builder()\n .description(\"tcp rule\")\n .priority(1000)\n .enableLogging(true)\n .action(\"allow\")\n .direction(\"EGRESS\")\n .match(RegionNetworkFirewallPolicyWithRulesRuleMatchArgs.builder()\n .layer4Configs(RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"tcp\")\n .ports( \n 8080,\n 7070)\n .build())\n .destIpRanges(\"11.100.0.1/32\")\n .destFqdns( \n \"www.yyy.com\",\n \"www.zzz.com\")\n .destRegionCodes( \n \"HK\",\n \"IN\")\n .destThreatIntelligences( \n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\")\n .destAddressGroups(addressGroup1.id())\n .build())\n .targetSecureTags(RegionNetworkFirewallPolicyWithRulesRuleTargetSecureTagArgs.builder()\n .name(secureTagValue1.name().applyValue(name -\u003e String.format(\"tagValues/%s\", name)))\n .build())\n .build(),\n RegionNetworkFirewallPolicyWithRulesRuleArgs.builder()\n .description(\"udp rule\")\n .ruleName(\"test-rule\")\n .priority(2000)\n .enableLogging(false)\n .action(\"deny\")\n .direction(\"INGRESS\")\n .match(RegionNetworkFirewallPolicyWithRulesRuleMatchArgs.builder()\n .layer4Configs(RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"udp\")\n .build())\n .srcIpRanges(\"0.0.0.0/0\")\n .srcFqdns( \n \"www.abc.com\",\n \"www.def.com\")\n .srcRegionCodes( \n \"US\",\n \"CA\")\n .srcThreatIntelligences( \n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\")\n .srcAddressGroups(addressGroup1.id())\n .srcSecureTags(RegionNetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArgs.builder()\n .name(secureTagValue1.name().applyValue(name -\u003e String.format(\"tagValues/%s\", name)))\n .build())\n .build())\n .disabled(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n region-network-firewall-policy-with-rules:\n type: gcp:compute:RegionNetworkFirewallPolicyWithRules\n properties:\n name: tf-region-fw-policy-with-rules\n region: us-west2\n description: Terraform test\n rules:\n - description: tcp rule\n priority: 1000\n enableLogging: true\n action: allow\n direction: EGRESS\n match:\n layer4Configs:\n - ipProtocol: tcp\n ports:\n - 8080\n - 7070\n destIpRanges:\n - 11.100.0.1/32\n destFqdns:\n - www.yyy.com\n - www.zzz.com\n destRegionCodes:\n - HK\n - IN\n destThreatIntelligences:\n - iplist-search-engines-crawlers\n - iplist-tor-exit-nodes\n destAddressGroups:\n - ${addressGroup1.id}\n targetSecureTags:\n - name: tagValues/${secureTagValue1.name}\n - description: udp rule\n ruleName: test-rule\n priority: 2000\n enableLogging: false\n action: deny\n direction: INGRESS\n match:\n layer4Configs:\n - ipProtocol: udp\n srcIpRanges:\n - 0.0.0.0/0\n srcFqdns:\n - www.abc.com\n - www.def.com\n srcRegionCodes:\n - US\n - CA\n srcThreatIntelligences:\n - iplist-known-malicious-ips\n - iplist-public-clouds\n srcAddressGroups:\n - ${addressGroup1.id}\n srcSecureTags:\n - name: tagValues/${secureTagValue1.name}\n disabled: true\n addressGroup1:\n type: gcp:networksecurity:AddressGroup\n name: address_group_1\n properties:\n name: tf-address-group\n parent: projects/${project.name}\n description: Regional address group\n location: us-west2\n items:\n - 208.80.154.224/32\n type: IPV4\n capacity: 100\n secureTagKey1:\n type: gcp:tags:TagKey\n name: secure_tag_key_1\n properties:\n description: Tag key\n parent: projects/${project.name}\n purpose: GCE_FIREWALL\n shortName: tf-tag-key\n purposeData:\n network: ${project.name}/default\n secureTagValue1:\n type: gcp:tags:TagValue\n name: secure_tag_value_1\n properties:\n description: Tag value\n parent: tagKeys/${secureTagKey1.name}\n shortName: tf-tag-value\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRegionNetworkFirewallPolicyWithRules can be imported using any of these accepted formats:\n\n* `projects/{{project}}/regions/{{region}}/firewallPolicies/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, RegionNetworkFirewallPolicyWithRules can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyWithRules:RegionNetworkFirewallPolicyWithRules default projects/{{project}}/regions/{{region}}/firewallPolicies/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyWithRules:RegionNetworkFirewallPolicyWithRules default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyWithRules:RegionNetworkFirewallPolicyWithRules default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyWithRules:RegionNetworkFirewallPolicyWithRules default {{name}}\n```\n\n", + "description": "## Example Usage\n\n### Compute Region Network Firewall Policy With Rules Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst addressGroup1 = new gcp.networksecurity.AddressGroup(\"address_group_1\", {\n name: \"tf-address-group\",\n parent: project.then(project =\u003e project.id),\n description: \"Regional address group\",\n location: \"us-west2\",\n items: [\"208.80.154.224/32\"],\n type: \"IPV4\",\n capacity: 100,\n});\nconst secureTagKey1 = new gcp.tags.TagKey(\"secure_tag_key_1\", {\n description: \"Tag key\",\n parent: project.then(project =\u003e project.id),\n purpose: \"GCE_FIREWALL\",\n shortName: \"tf-tag-key\",\n purposeData: {\n network: project.then(project =\u003e `${project.name}/default`),\n },\n});\nconst secureTagValue1 = new gcp.tags.TagValue(\"secure_tag_value_1\", {\n description: \"Tag value\",\n parent: secureTagKey1.id,\n shortName: \"tf-tag-value\",\n});\nconst region_network_firewall_policy_with_rules = new gcp.compute.RegionNetworkFirewallPolicyWithRules(\"region-network-firewall-policy-with-rules\", {\n name: \"tf-region-fw-policy-with-rules\",\n region: \"us-west2\",\n description: \"Terraform test\",\n rules: [\n {\n description: \"tcp rule\",\n priority: 1000,\n enableLogging: true,\n action: \"allow\",\n direction: \"EGRESS\",\n match: {\n layer4Configs: [{\n ipProtocol: \"tcp\",\n ports: [\n \"8080\",\n \"7070\",\n ],\n }],\n destIpRanges: [\"11.100.0.1/32\"],\n destFqdns: [\n \"www.yyy.com\",\n \"www.zzz.com\",\n ],\n destRegionCodes: [\n \"HK\",\n \"IN\",\n ],\n destThreatIntelligences: [\n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\",\n ],\n destAddressGroups: [addressGroup1.id],\n },\n targetSecureTags: [{\n name: secureTagValue1.id,\n }],\n },\n {\n description: \"udp rule\",\n ruleName: \"test-rule\",\n priority: 2000,\n enableLogging: false,\n action: \"deny\",\n direction: \"INGRESS\",\n match: {\n layer4Configs: [{\n ipProtocol: \"udp\",\n }],\n srcIpRanges: [\"0.0.0.0/0\"],\n srcFqdns: [\n \"www.abc.com\",\n \"www.def.com\",\n ],\n srcRegionCodes: [\n \"US\",\n \"CA\",\n ],\n srcThreatIntelligences: [\n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\",\n ],\n srcAddressGroups: [addressGroup1.id],\n srcSecureTags: [{\n name: secureTagValue1.id,\n }],\n },\n disabled: true,\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\naddress_group1 = gcp.networksecurity.AddressGroup(\"address_group_1\",\n name=\"tf-address-group\",\n parent=project.id,\n description=\"Regional address group\",\n location=\"us-west2\",\n items=[\"208.80.154.224/32\"],\n type=\"IPV4\",\n capacity=100)\nsecure_tag_key1 = gcp.tags.TagKey(\"secure_tag_key_1\",\n description=\"Tag key\",\n parent=project.id,\n purpose=\"GCE_FIREWALL\",\n short_name=\"tf-tag-key\",\n purpose_data={\n \"network\": f\"{project.name}/default\",\n })\nsecure_tag_value1 = gcp.tags.TagValue(\"secure_tag_value_1\",\n description=\"Tag value\",\n parent=secure_tag_key1.id,\n short_name=\"tf-tag-value\")\nregion_network_firewall_policy_with_rules = gcp.compute.RegionNetworkFirewallPolicyWithRules(\"region-network-firewall-policy-with-rules\",\n name=\"tf-region-fw-policy-with-rules\",\n region=\"us-west2\",\n description=\"Terraform test\",\n rules=[\n {\n \"description\": \"tcp rule\",\n \"priority\": 1000,\n \"enable_logging\": True,\n \"action\": \"allow\",\n \"direction\": \"EGRESS\",\n \"match\": {\n \"layer4_configs\": [{\n \"ip_protocol\": \"tcp\",\n \"ports\": [\n \"8080\",\n \"7070\",\n ],\n }],\n \"dest_ip_ranges\": [\"11.100.0.1/32\"],\n \"dest_fqdns\": [\n \"www.yyy.com\",\n \"www.zzz.com\",\n ],\n \"dest_region_codes\": [\n \"HK\",\n \"IN\",\n ],\n \"dest_threat_intelligences\": [\n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\",\n ],\n \"dest_address_groups\": [address_group1.id],\n },\n \"target_secure_tags\": [{\n \"name\": secure_tag_value1.id,\n }],\n },\n {\n \"description\": \"udp rule\",\n \"rule_name\": \"test-rule\",\n \"priority\": 2000,\n \"enable_logging\": False,\n \"action\": \"deny\",\n \"direction\": \"INGRESS\",\n \"match\": {\n \"layer4_configs\": [{\n \"ip_protocol\": \"udp\",\n }],\n \"src_ip_ranges\": [\"0.0.0.0/0\"],\n \"src_fqdns\": [\n \"www.abc.com\",\n \"www.def.com\",\n ],\n \"src_region_codes\": [\n \"US\",\n \"CA\",\n ],\n \"src_threat_intelligences\": [\n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\",\n ],\n \"src_address_groups\": [address_group1.id],\n \"src_secure_tags\": [{\n \"name\": secure_tag_value1.id,\n }],\n },\n \"disabled\": True,\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var addressGroup1 = new Gcp.NetworkSecurity.AddressGroup(\"address_group_1\", new()\n {\n Name = \"tf-address-group\",\n Parent = project.Apply(getProjectResult =\u003e getProjectResult.Id),\n Description = \"Regional address group\",\n Location = \"us-west2\",\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n Type = \"IPV4\",\n Capacity = 100,\n });\n\n var secureTagKey1 = new Gcp.Tags.TagKey(\"secure_tag_key_1\", new()\n {\n Description = \"Tag key\",\n Parent = project.Apply(getProjectResult =\u003e getProjectResult.Id),\n Purpose = \"GCE_FIREWALL\",\n ShortName = \"tf-tag-key\",\n PurposeData = \n {\n { \"network\", $\"{project.Apply(getProjectResult =\u003e getProjectResult.Name)}/default\" },\n },\n });\n\n var secureTagValue1 = new Gcp.Tags.TagValue(\"secure_tag_value_1\", new()\n {\n Description = \"Tag value\",\n Parent = secureTagKey1.Id,\n ShortName = \"tf-tag-value\",\n });\n\n var region_network_firewall_policy_with_rules = new Gcp.Compute.RegionNetworkFirewallPolicyWithRules(\"region-network-firewall-policy-with-rules\", new()\n {\n Name = \"tf-region-fw-policy-with-rules\",\n Region = \"us-west2\",\n Description = \"Terraform test\",\n Rules = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleArgs\n {\n Description = \"tcp rule\",\n Priority = 1000,\n EnableLogging = true,\n Action = \"allow\",\n Direction = \"EGRESS\",\n Match = new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"tcp\",\n Ports = new[]\n {\n \"8080\",\n \"7070\",\n },\n },\n },\n DestIpRanges = new[]\n {\n \"11.100.0.1/32\",\n },\n DestFqdns = new[]\n {\n \"www.yyy.com\",\n \"www.zzz.com\",\n },\n DestRegionCodes = new[]\n {\n \"HK\",\n \"IN\",\n },\n DestThreatIntelligences = new[]\n {\n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\",\n },\n DestAddressGroups = new[]\n {\n addressGroup1.Id,\n },\n },\n TargetSecureTags = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleTargetSecureTagArgs\n {\n Name = secureTagValue1.Id,\n },\n },\n },\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleArgs\n {\n Description = \"udp rule\",\n RuleName = \"test-rule\",\n Priority = 2000,\n EnableLogging = false,\n Action = \"deny\",\n Direction = \"INGRESS\",\n Match = new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleMatchArgs\n {\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs\n {\n IpProtocol = \"udp\",\n },\n },\n SrcIpRanges = new[]\n {\n \"0.0.0.0/0\",\n },\n SrcFqdns = new[]\n {\n \"www.abc.com\",\n \"www.def.com\",\n },\n SrcRegionCodes = new[]\n {\n \"US\",\n \"CA\",\n },\n SrcThreatIntelligences = new[]\n {\n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\",\n },\n SrcAddressGroups = new[]\n {\n addressGroup1.Id,\n },\n SrcSecureTags = new[]\n {\n new Gcp.Compute.Inputs.RegionNetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArgs\n {\n Name = secureTagValue1.Id,\n },\n },\n },\n Disabled = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taddressGroup1, err := networksecurity.NewAddressGroup(ctx, \"address_group_1\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"tf-address-group\"),\n\t\t\tParent: pulumi.String(project.Id),\n\t\t\tDescription: pulumi.String(\"Regional address group\"),\n\t\t\tLocation: pulumi.String(\"us-west2\"),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecureTagKey1, err := tags.NewTagKey(ctx, \"secure_tag_key_1\", \u0026tags.TagKeyArgs{\n\t\t\tDescription: pulumi.String(\"Tag key\"),\n\t\t\tParent: pulumi.String(project.Id),\n\t\t\tPurpose: pulumi.String(\"GCE_FIREWALL\"),\n\t\t\tShortName: pulumi.String(\"tf-tag-key\"),\n\t\t\tPurposeData: pulumi.StringMap{\n\t\t\t\t\"network\": pulumi.Sprintf(\"%v/default\", project.Name),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecureTagValue1, err := tags.NewTagValue(ctx, \"secure_tag_value_1\", \u0026tags.TagValueArgs{\n\t\t\tDescription: pulumi.String(\"Tag value\"),\n\t\t\tParent: secureTagKey1.ID(),\n\t\t\tShortName: pulumi.String(\"tf-tag-value\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkFirewallPolicyWithRules(ctx, \"region-network-firewall-policy-with-rules\", \u0026compute.RegionNetworkFirewallPolicyWithRulesArgs{\n\t\t\tName: pulumi.String(\"tf-region-fw-policy-with-rules\"),\n\t\t\tRegion: pulumi.String(\"us-west2\"),\n\t\t\tDescription: pulumi.String(\"Terraform test\"),\n\t\t\tRules: compute.RegionNetworkFirewallPolicyWithRulesRuleArray{\n\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyWithRulesRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"tcp rule\"),\n\t\t\t\t\tPriority: pulumi.Int(1000),\n\t\t\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\t\t\tDirection: pulumi.String(\"EGRESS\"),\n\t\t\t\t\tMatch: \u0026compute.RegionNetworkFirewallPolicyWithRulesRuleMatchArgs{\n\t\t\t\t\t\tLayer4Configs: compute.RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tpulumi.String(\"8080\"),\n\t\t\t\t\t\t\t\t\tpulumi.String(\"7070\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"11.100.0.1/32\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestFqdns: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"www.yyy.com\"),\n\t\t\t\t\t\t\tpulumi.String(\"www.zzz.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestRegionCodes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"HK\"),\n\t\t\t\t\t\t\tpulumi.String(\"IN\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"iplist-search-engines-crawlers\"),\n\t\t\t\t\t\t\tpulumi.String(\"iplist-tor-exit-nodes\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDestAddressGroups: pulumi.StringArray{\n\t\t\t\t\t\t\taddressGroup1.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tTargetSecureTags: compute.RegionNetworkFirewallPolicyWithRulesRuleTargetSecureTagArray{\n\t\t\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyWithRulesRuleTargetSecureTagArgs{\n\t\t\t\t\t\t\tName: secureTagValue1.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyWithRulesRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"udp rule\"),\n\t\t\t\t\tRuleName: pulumi.String(\"test-rule\"),\n\t\t\t\t\tPriority: pulumi.Int(2000),\n\t\t\t\t\tEnableLogging: pulumi.Bool(false),\n\t\t\t\t\tAction: pulumi.String(\"deny\"),\n\t\t\t\t\tDirection: pulumi.String(\"INGRESS\"),\n\t\t\t\t\tMatch: \u0026compute.RegionNetworkFirewallPolicyWithRulesRuleMatchArgs{\n\t\t\t\t\t\tLayer4Configs: compute.RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArray{\n\t\t\t\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs{\n\t\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"udp\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"0.0.0.0/0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcFqdns: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"www.abc.com\"),\n\t\t\t\t\t\t\tpulumi.String(\"www.def.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcRegionCodes: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"US\"),\n\t\t\t\t\t\t\tpulumi.String(\"CA\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcThreatIntelligences: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"iplist-known-malicious-ips\"),\n\t\t\t\t\t\t\tpulumi.String(\"iplist-public-clouds\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcAddressGroups: pulumi.StringArray{\n\t\t\t\t\t\t\taddressGroup1.ID(),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSrcSecureTags: compute.RegionNetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArray{\n\t\t\t\t\t\t\t\u0026compute.RegionNetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArgs{\n\t\t\t\t\t\t\t\tName: secureTagValue1.ID(),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tDisabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.compute.RegionNetworkFirewallPolicyWithRules;\nimport com.pulumi.gcp.compute.RegionNetworkFirewallPolicyWithRulesArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkFirewallPolicyWithRulesRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkFirewallPolicyWithRulesRuleMatchArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var addressGroup1 = new AddressGroup(\"addressGroup1\", AddressGroupArgs.builder()\n .name(\"tf-address-group\")\n .parent(project.applyValue(getProjectResult -\u003e getProjectResult.id()))\n .description(\"Regional address group\")\n .location(\"us-west2\")\n .items(\"208.80.154.224/32\")\n .type(\"IPV4\")\n .capacity(100)\n .build());\n\n var secureTagKey1 = new TagKey(\"secureTagKey1\", TagKeyArgs.builder()\n .description(\"Tag key\")\n .parent(project.applyValue(getProjectResult -\u003e getProjectResult.id()))\n .purpose(\"GCE_FIREWALL\")\n .shortName(\"tf-tag-key\")\n .purposeData(Map.of(\"network\", String.format(\"%s/default\", project.applyValue(getProjectResult -\u003e getProjectResult.name()))))\n .build());\n\n var secureTagValue1 = new TagValue(\"secureTagValue1\", TagValueArgs.builder()\n .description(\"Tag value\")\n .parent(secureTagKey1.id())\n .shortName(\"tf-tag-value\")\n .build());\n\n var region_network_firewall_policy_with_rules = new RegionNetworkFirewallPolicyWithRules(\"region-network-firewall-policy-with-rules\", RegionNetworkFirewallPolicyWithRulesArgs.builder()\n .name(\"tf-region-fw-policy-with-rules\")\n .region(\"us-west2\")\n .description(\"Terraform test\")\n .rules( \n RegionNetworkFirewallPolicyWithRulesRuleArgs.builder()\n .description(\"tcp rule\")\n .priority(1000)\n .enableLogging(true)\n .action(\"allow\")\n .direction(\"EGRESS\")\n .match(RegionNetworkFirewallPolicyWithRulesRuleMatchArgs.builder()\n .layer4Configs(RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"tcp\")\n .ports( \n 8080,\n 7070)\n .build())\n .destIpRanges(\"11.100.0.1/32\")\n .destFqdns( \n \"www.yyy.com\",\n \"www.zzz.com\")\n .destRegionCodes( \n \"HK\",\n \"IN\")\n .destThreatIntelligences( \n \"iplist-search-engines-crawlers\",\n \"iplist-tor-exit-nodes\")\n .destAddressGroups(addressGroup1.id())\n .build())\n .targetSecureTags(RegionNetworkFirewallPolicyWithRulesRuleTargetSecureTagArgs.builder()\n .name(secureTagValue1.id())\n .build())\n .build(),\n RegionNetworkFirewallPolicyWithRulesRuleArgs.builder()\n .description(\"udp rule\")\n .ruleName(\"test-rule\")\n .priority(2000)\n .enableLogging(false)\n .action(\"deny\")\n .direction(\"INGRESS\")\n .match(RegionNetworkFirewallPolicyWithRulesRuleMatchArgs.builder()\n .layer4Configs(RegionNetworkFirewallPolicyWithRulesRuleMatchLayer4ConfigArgs.builder()\n .ipProtocol(\"udp\")\n .build())\n .srcIpRanges(\"0.0.0.0/0\")\n .srcFqdns( \n \"www.abc.com\",\n \"www.def.com\")\n .srcRegionCodes( \n \"US\",\n \"CA\")\n .srcThreatIntelligences( \n \"iplist-known-malicious-ips\",\n \"iplist-public-clouds\")\n .srcAddressGroups(addressGroup1.id())\n .srcSecureTags(RegionNetworkFirewallPolicyWithRulesRuleMatchSrcSecureTagArgs.builder()\n .name(secureTagValue1.id())\n .build())\n .build())\n .disabled(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n region-network-firewall-policy-with-rules:\n type: gcp:compute:RegionNetworkFirewallPolicyWithRules\n properties:\n name: tf-region-fw-policy-with-rules\n region: us-west2\n description: Terraform test\n rules:\n - description: tcp rule\n priority: 1000\n enableLogging: true\n action: allow\n direction: EGRESS\n match:\n layer4Configs:\n - ipProtocol: tcp\n ports:\n - 8080\n - 7070\n destIpRanges:\n - 11.100.0.1/32\n destFqdns:\n - www.yyy.com\n - www.zzz.com\n destRegionCodes:\n - HK\n - IN\n destThreatIntelligences:\n - iplist-search-engines-crawlers\n - iplist-tor-exit-nodes\n destAddressGroups:\n - ${addressGroup1.id}\n targetSecureTags:\n - name: ${secureTagValue1.id}\n - description: udp rule\n ruleName: test-rule\n priority: 2000\n enableLogging: false\n action: deny\n direction: INGRESS\n match:\n layer4Configs:\n - ipProtocol: udp\n srcIpRanges:\n - 0.0.0.0/0\n srcFqdns:\n - www.abc.com\n - www.def.com\n srcRegionCodes:\n - US\n - CA\n srcThreatIntelligences:\n - iplist-known-malicious-ips\n - iplist-public-clouds\n srcAddressGroups:\n - ${addressGroup1.id}\n srcSecureTags:\n - name: ${secureTagValue1.id}\n disabled: true\n addressGroup1:\n type: gcp:networksecurity:AddressGroup\n name: address_group_1\n properties:\n name: tf-address-group\n parent: ${project.id}\n description: Regional address group\n location: us-west2\n items:\n - 208.80.154.224/32\n type: IPV4\n capacity: 100\n secureTagKey1:\n type: gcp:tags:TagKey\n name: secure_tag_key_1\n properties:\n description: Tag key\n parent: ${project.id}\n purpose: GCE_FIREWALL\n shortName: tf-tag-key\n purposeData:\n network: ${project.name}/default\n secureTagValue1:\n type: gcp:tags:TagValue\n name: secure_tag_value_1\n properties:\n description: Tag value\n parent: ${secureTagKey1.id}\n shortName: tf-tag-value\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRegionNetworkFirewallPolicyWithRules can be imported using any of these accepted formats:\n\n* `projects/{{project}}/regions/{{region}}/firewallPolicies/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, RegionNetworkFirewallPolicyWithRules can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyWithRules:RegionNetworkFirewallPolicyWithRules default projects/{{project}}/regions/{{region}}/firewallPolicies/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyWithRules:RegionNetworkFirewallPolicyWithRules default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyWithRules:RegionNetworkFirewallPolicyWithRules default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionNetworkFirewallPolicyWithRules:RegionNetworkFirewallPolicyWithRules default {{name}}\n```\n\n", "properties": { "creationTimestamp": { "type": "string", @@ -174901,8 +176942,164 @@ "type": "object" } }, + "gcp:compute/regionResizeRequest:RegionResizeRequest": { + "description": "## Example Usage\n\n### Compute Rmig Resize Request\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst a3Dws = new gcp.compute.RegionInstanceTemplate(\"a3_dws\", {\n name: \"a3-dws\",\n region: \"us-central1\",\n description: \"This template is used to create a mig instance that is compatible with DWS resize requests.\",\n instanceDescription: \"A3 GPU\",\n machineType: \"a3-highgpu-8g\",\n canIpForward: false,\n scheduling: {\n automaticRestart: false,\n onHostMaintenance: \"TERMINATE\",\n },\n disks: [{\n sourceImage: \"cos-cloud/cos-105-lts\",\n autoDelete: true,\n boot: true,\n diskType: \"pd-ssd\",\n diskSizeGb: 960,\n mode: \"READ_WRITE\",\n }],\n guestAccelerators: [{\n type: \"nvidia-h100-80gb\",\n count: 8,\n }],\n reservationAffinity: {\n type: \"NO_RESERVATION\",\n },\n shieldedInstanceConfig: {\n enableVtpm: true,\n enableIntegrityMonitoring: true,\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n});\nconst a3DwsRegionInstanceGroupManager = new gcp.compute.RegionInstanceGroupManager(\"a3_dws\", {\n name: \"a3-dws\",\n baseInstanceName: \"a3-dws\",\n region: \"us-central1\",\n versions: [{\n instanceTemplate: a3Dws.selfLink,\n }],\n instanceLifecyclePolicy: {\n defaultActionOnFailure: \"DO_NOTHING\",\n },\n distributionPolicyTargetShape: \"ANY_SINGLE_ZONE\",\n distributionPolicyZones: [\n \"us-central1-a\",\n \"us-central1-b\",\n \"us-central1-c\",\n \"us-central1-f\",\n ],\n updatePolicy: {\n instanceRedistributionType: \"NONE\",\n type: \"OPPORTUNISTIC\",\n minimalAction: \"REPLACE\",\n maxSurgeFixed: 0,\n maxUnavailableFixed: 6,\n },\n waitForInstances: false,\n});\nconst a3ResizeRequest = new gcp.compute.RegionResizeRequest(\"a3_resize_request\", {\n name: \"a3-dws\",\n instanceGroupManager: a3DwsRegionInstanceGroupManager.name,\n region: \"us-central1\",\n description: \"Test resize request resource\",\n resizeBy: 2,\n requestedRunDuration: {\n seconds: \"14400\",\n nanos: 0,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\na3_dws = gcp.compute.RegionInstanceTemplate(\"a3_dws\",\n name=\"a3-dws\",\n region=\"us-central1\",\n description=\"This template is used to create a mig instance that is compatible with DWS resize requests.\",\n instance_description=\"A3 GPU\",\n machine_type=\"a3-highgpu-8g\",\n can_ip_forward=False,\n scheduling={\n \"automatic_restart\": False,\n \"on_host_maintenance\": \"TERMINATE\",\n },\n disks=[{\n \"source_image\": \"cos-cloud/cos-105-lts\",\n \"auto_delete\": True,\n \"boot\": True,\n \"disk_type\": \"pd-ssd\",\n \"disk_size_gb\": 960,\n \"mode\": \"READ_WRITE\",\n }],\n guest_accelerators=[{\n \"type\": \"nvidia-h100-80gb\",\n \"count\": 8,\n }],\n reservation_affinity={\n \"type\": \"NO_RESERVATION\",\n },\n shielded_instance_config={\n \"enable_vtpm\": True,\n \"enable_integrity_monitoring\": True,\n },\n network_interfaces=[{\n \"network\": \"default\",\n }])\na3_dws_region_instance_group_manager = gcp.compute.RegionInstanceGroupManager(\"a3_dws\",\n name=\"a3-dws\",\n base_instance_name=\"a3-dws\",\n region=\"us-central1\",\n versions=[{\n \"instance_template\": a3_dws.self_link,\n }],\n instance_lifecycle_policy={\n \"default_action_on_failure\": \"DO_NOTHING\",\n },\n distribution_policy_target_shape=\"ANY_SINGLE_ZONE\",\n distribution_policy_zones=[\n \"us-central1-a\",\n \"us-central1-b\",\n \"us-central1-c\",\n \"us-central1-f\",\n ],\n update_policy={\n \"instance_redistribution_type\": \"NONE\",\n \"type\": \"OPPORTUNISTIC\",\n \"minimal_action\": \"REPLACE\",\n \"max_surge_fixed\": 0,\n \"max_unavailable_fixed\": 6,\n },\n wait_for_instances=False)\na3_resize_request = gcp.compute.RegionResizeRequest(\"a3_resize_request\",\n name=\"a3-dws\",\n instance_group_manager=a3_dws_region_instance_group_manager.name,\n region=\"us-central1\",\n description=\"Test resize request resource\",\n resize_by=2,\n requested_run_duration={\n \"seconds\": \"14400\",\n \"nanos\": 0,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var a3Dws = new Gcp.Compute.RegionInstanceTemplate(\"a3_dws\", new()\n {\n Name = \"a3-dws\",\n Region = \"us-central1\",\n Description = \"This template is used to create a mig instance that is compatible with DWS resize requests.\",\n InstanceDescription = \"A3 GPU\",\n MachineType = \"a3-highgpu-8g\",\n CanIpForward = false,\n Scheduling = new Gcp.Compute.Inputs.RegionInstanceTemplateSchedulingArgs\n {\n AutomaticRestart = false,\n OnHostMaintenance = \"TERMINATE\",\n },\n Disks = new[]\n {\n new Gcp.Compute.Inputs.RegionInstanceTemplateDiskArgs\n {\n SourceImage = \"cos-cloud/cos-105-lts\",\n AutoDelete = true,\n Boot = true,\n DiskType = \"pd-ssd\",\n DiskSizeGb = 960,\n Mode = \"READ_WRITE\",\n },\n },\n GuestAccelerators = new[]\n {\n new Gcp.Compute.Inputs.RegionInstanceTemplateGuestAcceleratorArgs\n {\n Type = \"nvidia-h100-80gb\",\n Count = 8,\n },\n },\n ReservationAffinity = new Gcp.Compute.Inputs.RegionInstanceTemplateReservationAffinityArgs\n {\n Type = \"NO_RESERVATION\",\n },\n ShieldedInstanceConfig = new Gcp.Compute.Inputs.RegionInstanceTemplateShieldedInstanceConfigArgs\n {\n EnableVtpm = true,\n EnableIntegrityMonitoring = true,\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.RegionInstanceTemplateNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n });\n\n var a3DwsRegionInstanceGroupManager = new Gcp.Compute.RegionInstanceGroupManager(\"a3_dws\", new()\n {\n Name = \"a3-dws\",\n BaseInstanceName = \"a3-dws\",\n Region = \"us-central1\",\n Versions = new[]\n {\n new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionArgs\n {\n InstanceTemplate = a3Dws.SelfLink,\n },\n },\n InstanceLifecyclePolicy = new Gcp.Compute.Inputs.RegionInstanceGroupManagerInstanceLifecyclePolicyArgs\n {\n DefaultActionOnFailure = \"DO_NOTHING\",\n },\n DistributionPolicyTargetShape = \"ANY_SINGLE_ZONE\",\n DistributionPolicyZones = new[]\n {\n \"us-central1-a\",\n \"us-central1-b\",\n \"us-central1-c\",\n \"us-central1-f\",\n },\n UpdatePolicy = new Gcp.Compute.Inputs.RegionInstanceGroupManagerUpdatePolicyArgs\n {\n InstanceRedistributionType = \"NONE\",\n Type = \"OPPORTUNISTIC\",\n MinimalAction = \"REPLACE\",\n MaxSurgeFixed = 0,\n MaxUnavailableFixed = 6,\n },\n WaitForInstances = false,\n });\n\n var a3ResizeRequest = new Gcp.Compute.RegionResizeRequest(\"a3_resize_request\", new()\n {\n Name = \"a3-dws\",\n InstanceGroupManager = a3DwsRegionInstanceGroupManager.Name,\n Region = \"us-central1\",\n Description = \"Test resize request resource\",\n ResizeBy = 2,\n RequestedRunDuration = new Gcp.Compute.Inputs.RegionResizeRequestRequestedRunDurationArgs\n {\n Seconds = \"14400\",\n Nanos = 0,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ta3Dws, err := compute.NewRegionInstanceTemplate(ctx, \"a3_dws\", \u0026compute.RegionInstanceTemplateArgs{\n\t\t\tName: pulumi.String(\"a3-dws\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"This template is used to create a mig instance that is compatible with DWS resize requests.\"),\n\t\t\tInstanceDescription: pulumi.String(\"A3 GPU\"),\n\t\t\tMachineType: pulumi.String(\"a3-highgpu-8g\"),\n\t\t\tCanIpForward: pulumi.Bool(false),\n\t\t\tScheduling: \u0026compute.RegionInstanceTemplateSchedulingArgs{\n\t\t\t\tAutomaticRestart: pulumi.Bool(false),\n\t\t\t\tOnHostMaintenance: pulumi.String(\"TERMINATE\"),\n\t\t\t},\n\t\t\tDisks: compute.RegionInstanceTemplateDiskArray{\n\t\t\t\t\u0026compute.RegionInstanceTemplateDiskArgs{\n\t\t\t\t\tSourceImage: pulumi.String(\"cos-cloud/cos-105-lts\"),\n\t\t\t\t\tAutoDelete: pulumi.Bool(true),\n\t\t\t\t\tBoot: pulumi.Bool(true),\n\t\t\t\t\tDiskType: pulumi.String(\"pd-ssd\"),\n\t\t\t\t\tDiskSizeGb: pulumi.Int(960),\n\t\t\t\t\tMode: pulumi.String(\"READ_WRITE\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tGuestAccelerators: compute.RegionInstanceTemplateGuestAcceleratorArray{\n\t\t\t\t\u0026compute.RegionInstanceTemplateGuestAcceleratorArgs{\n\t\t\t\t\tType: pulumi.String(\"nvidia-h100-80gb\"),\n\t\t\t\t\tCount: pulumi.Int(8),\n\t\t\t\t},\n\t\t\t},\n\t\t\tReservationAffinity: \u0026compute.RegionInstanceTemplateReservationAffinityArgs{\n\t\t\t\tType: pulumi.String(\"NO_RESERVATION\"),\n\t\t\t},\n\t\t\tShieldedInstanceConfig: \u0026compute.RegionInstanceTemplateShieldedInstanceConfigArgs{\n\t\t\t\tEnableVtpm: pulumi.Bool(true),\n\t\t\t\tEnableIntegrityMonitoring: pulumi.Bool(true),\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.RegionInstanceTemplateNetworkInterfaceArray{\n\t\t\t\t\u0026compute.RegionInstanceTemplateNetworkInterfaceArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\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\ta3DwsRegionInstanceGroupManager, err := compute.NewRegionInstanceGroupManager(ctx, \"a3_dws\", \u0026compute.RegionInstanceGroupManagerArgs{\n\t\t\tName: pulumi.String(\"a3-dws\"),\n\t\t\tBaseInstanceName: pulumi.String(\"a3-dws\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tVersions: compute.RegionInstanceGroupManagerVersionArray{\n\t\t\t\t\u0026compute.RegionInstanceGroupManagerVersionArgs{\n\t\t\t\t\tInstanceTemplate: a3Dws.SelfLink,\n\t\t\t\t},\n\t\t\t},\n\t\t\tInstanceLifecyclePolicy: \u0026compute.RegionInstanceGroupManagerInstanceLifecyclePolicyArgs{\n\t\t\t\tDefaultActionOnFailure: pulumi.String(\"DO_NOTHING\"),\n\t\t\t},\n\t\t\tDistributionPolicyTargetShape: pulumi.String(\"ANY_SINGLE_ZONE\"),\n\t\t\tDistributionPolicyZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-central1-a\"),\n\t\t\t\tpulumi.String(\"us-central1-b\"),\n\t\t\t\tpulumi.String(\"us-central1-c\"),\n\t\t\t\tpulumi.String(\"us-central1-f\"),\n\t\t\t},\n\t\t\tUpdatePolicy: \u0026compute.RegionInstanceGroupManagerUpdatePolicyArgs{\n\t\t\t\tInstanceRedistributionType: pulumi.String(\"NONE\"),\n\t\t\t\tType: pulumi.String(\"OPPORTUNISTIC\"),\n\t\t\t\tMinimalAction: pulumi.String(\"REPLACE\"),\n\t\t\t\tMaxSurgeFixed: pulumi.Int(0),\n\t\t\t\tMaxUnavailableFixed: pulumi.Int(6),\n\t\t\t},\n\t\t\tWaitForInstances: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionResizeRequest(ctx, \"a3_resize_request\", \u0026compute.RegionResizeRequestArgs{\n\t\t\tName: pulumi.String(\"a3-dws\"),\n\t\t\tInstanceGroupManager: a3DwsRegionInstanceGroupManager.Name,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"Test resize request resource\"),\n\t\t\tResizeBy: pulumi.Int(2),\n\t\t\tRequestedRunDuration: \u0026compute.RegionResizeRequestRequestedRunDurationArgs{\n\t\t\t\tSeconds: pulumi.String(\"14400\"),\n\t\t\t\tNanos: pulumi.Int(0),\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.gcp.compute.RegionInstanceTemplate;\nimport com.pulumi.gcp.compute.RegionInstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceTemplateSchedulingArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceTemplateGuestAcceleratorArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceTemplateReservationAffinityArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceTemplateShieldedInstanceConfigArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.RegionInstanceGroupManager;\nimport com.pulumi.gcp.compute.RegionInstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerInstanceLifecyclePolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerUpdatePolicyArgs;\nimport com.pulumi.gcp.compute.RegionResizeRequest;\nimport com.pulumi.gcp.compute.RegionResizeRequestArgs;\nimport com.pulumi.gcp.compute.inputs.RegionResizeRequestRequestedRunDurationArgs;\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 a3Dws = new RegionInstanceTemplate(\"a3Dws\", RegionInstanceTemplateArgs.builder()\n .name(\"a3-dws\")\n .region(\"us-central1\")\n .description(\"This template is used to create a mig instance that is compatible with DWS resize requests.\")\n .instanceDescription(\"A3 GPU\")\n .machineType(\"a3-highgpu-8g\")\n .canIpForward(false)\n .scheduling(RegionInstanceTemplateSchedulingArgs.builder()\n .automaticRestart(false)\n .onHostMaintenance(\"TERMINATE\")\n .build())\n .disks(RegionInstanceTemplateDiskArgs.builder()\n .sourceImage(\"cos-cloud/cos-105-lts\")\n .autoDelete(true)\n .boot(true)\n .diskType(\"pd-ssd\")\n .diskSizeGb(\"960\")\n .mode(\"READ_WRITE\")\n .build())\n .guestAccelerators(RegionInstanceTemplateGuestAcceleratorArgs.builder()\n .type(\"nvidia-h100-80gb\")\n .count(8)\n .build())\n .reservationAffinity(RegionInstanceTemplateReservationAffinityArgs.builder()\n .type(\"NO_RESERVATION\")\n .build())\n .shieldedInstanceConfig(RegionInstanceTemplateShieldedInstanceConfigArgs.builder()\n .enableVtpm(true)\n .enableIntegrityMonitoring(true)\n .build())\n .networkInterfaces(RegionInstanceTemplateNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .build());\n\n var a3DwsRegionInstanceGroupManager = new RegionInstanceGroupManager(\"a3DwsRegionInstanceGroupManager\", RegionInstanceGroupManagerArgs.builder()\n .name(\"a3-dws\")\n .baseInstanceName(\"a3-dws\")\n .region(\"us-central1\")\n .versions(RegionInstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(a3Dws.selfLink())\n .build())\n .instanceLifecyclePolicy(RegionInstanceGroupManagerInstanceLifecyclePolicyArgs.builder()\n .defaultActionOnFailure(\"DO_NOTHING\")\n .build())\n .distributionPolicyTargetShape(\"ANY_SINGLE_ZONE\")\n .distributionPolicyZones( \n \"us-central1-a\",\n \"us-central1-b\",\n \"us-central1-c\",\n \"us-central1-f\")\n .updatePolicy(RegionInstanceGroupManagerUpdatePolicyArgs.builder()\n .instanceRedistributionType(\"NONE\")\n .type(\"OPPORTUNISTIC\")\n .minimalAction(\"REPLACE\")\n .maxSurgeFixed(0)\n .maxUnavailableFixed(6)\n .build())\n .waitForInstances(false)\n .build());\n\n var a3ResizeRequest = new RegionResizeRequest(\"a3ResizeRequest\", RegionResizeRequestArgs.builder()\n .name(\"a3-dws\")\n .instanceGroupManager(a3DwsRegionInstanceGroupManager.name())\n .region(\"us-central1\")\n .description(\"Test resize request resource\")\n .resizeBy(2)\n .requestedRunDuration(RegionResizeRequestRequestedRunDurationArgs.builder()\n .seconds(14400)\n .nanos(0)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n a3Dws:\n type: gcp:compute:RegionInstanceTemplate\n name: a3_dws\n properties:\n name: a3-dws\n region: us-central1\n description: This template is used to create a mig instance that is compatible with DWS resize requests.\n instanceDescription: A3 GPU\n machineType: a3-highgpu-8g\n canIpForward: false\n scheduling:\n automaticRestart: false\n onHostMaintenance: TERMINATE\n disks:\n - sourceImage: cos-cloud/cos-105-lts\n autoDelete: true\n boot: true\n diskType: pd-ssd\n diskSizeGb: '960'\n mode: READ_WRITE\n guestAccelerators:\n - type: nvidia-h100-80gb\n count: 8\n reservationAffinity:\n type: NO_RESERVATION\n shieldedInstanceConfig:\n enableVtpm: true\n enableIntegrityMonitoring: true\n networkInterfaces:\n - network: default\n a3DwsRegionInstanceGroupManager:\n type: gcp:compute:RegionInstanceGroupManager\n name: a3_dws\n properties:\n name: a3-dws\n baseInstanceName: a3-dws\n region: us-central1\n versions:\n - instanceTemplate: ${a3Dws.selfLink}\n instanceLifecyclePolicy:\n defaultActionOnFailure: DO_NOTHING\n distributionPolicyTargetShape: ANY_SINGLE_ZONE\n distributionPolicyZones:\n - us-central1-a\n - us-central1-b\n - us-central1-c\n - us-central1-f\n updatePolicy:\n instanceRedistributionType: NONE\n type: OPPORTUNISTIC\n minimalAction: REPLACE\n maxSurgeFixed: 0\n maxUnavailableFixed: 6\n waitForInstances: false\n a3ResizeRequest:\n type: gcp:compute:RegionResizeRequest\n name: a3_resize_request\n properties:\n name: a3-dws\n instanceGroupManager: ${a3DwsRegionInstanceGroupManager.name}\n region: us-central1\n description: Test resize request resource\n resizeBy: 2\n requestedRunDuration:\n seconds: 14400\n nanos: 0\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRegionResizeRequest can be imported using any of these accepted formats:\n\n* `projects/{{project}}/regions/{{region}}/instanceGroupManagers/{{instance_group_manager}}/resizeRequests/{{name}}`\n\n* `{{project}}/{{region}}/{{instance_group_manager}}/{{name}}`\n\n* `{{region}}/{{instance_group_manager}}/{{name}}`\n\n* `{{instance_group_manager}}/{{name}}`\n\nWhen using the `pulumi import` command, RegionResizeRequest can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/regionResizeRequest:RegionResizeRequest default projects/{{project}}/regions/{{region}}/instanceGroupManagers/{{instance_group_manager}}/resizeRequests/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionResizeRequest:RegionResizeRequest default {{project}}/{{region}}/{{instance_group_manager}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionResizeRequest:RegionResizeRequest default {{region}}/{{instance_group_manager}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionResizeRequest:RegionResizeRequest default {{instance_group_manager}}/{{name}}\n```\n\n", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "The creation timestamp for this resize request in RFC3339 text format.\n" + }, + "description": { + "type": "string", + "description": "An optional description of this resize-request.\n" + }, + "instanceGroupManager": { + "type": "string", + "description": "The reference of the regional instance group manager this ResizeRequest is a part of.\n\n\n- - -\n" + }, + "name": { + "type": "string", + "description": "The name of this resize request. The name must be 1-63 characters long, and comply with RFC1035.\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n" + }, + "region": { + "type": "string", + "description": "The reference of the compute region scoping this request.\n" + }, + "requestedRunDuration": { + "$ref": "#/types/gcp:compute/RegionResizeRequestRequestedRunDuration:RegionResizeRequestRequestedRunDuration", + "description": "Requested run duration for instances that will be created by this request. At the end of the run duration instances will be deleted.\nStructure is documented below.\n" + }, + "resizeBy": { + "type": "integer", + "description": "The number of instances to be created by this resize request. The group's target size will be increased by this number.\n" + }, + "state": { + "type": "string", + "description": "Current state of the request.\n" + }, + "statuses": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatus:RegionResizeRequestStatus" + }, + "description": "Status of the request.\nStructure is documented below.\n" + } + }, + "required": [ + "creationTimestamp", + "instanceGroupManager", + "name", + "project", + "region", + "resizeBy", + "state", + "statuses" + ], + "inputProperties": { + "description": { + "type": "string", + "description": "An optional description of this resize-request.\n", + "willReplaceOnChanges": true + }, + "instanceGroupManager": { + "type": "string", + "description": "The reference of the regional instance group manager this ResizeRequest is a part of.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The name of this resize request. The name must be 1-63 characters long, and comply with RFC1035.\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "region": { + "type": "string", + "description": "The reference of the compute region scoping this request.\n", + "willReplaceOnChanges": true + }, + "requestedRunDuration": { + "$ref": "#/types/gcp:compute/RegionResizeRequestRequestedRunDuration:RegionResizeRequestRequestedRunDuration", + "description": "Requested run duration for instances that will be created by this request. At the end of the run duration instances will be deleted.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "resizeBy": { + "type": "integer", + "description": "The number of instances to be created by this resize request. The group's target size will be increased by this number.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "instanceGroupManager", + "region", + "resizeBy" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering RegionResizeRequest resources.\n", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "The creation timestamp for this resize request in RFC3339 text format.\n" + }, + "description": { + "type": "string", + "description": "An optional description of this resize-request.\n", + "willReplaceOnChanges": true + }, + "instanceGroupManager": { + "type": "string", + "description": "The reference of the regional instance group manager this ResizeRequest is a part of.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The name of this resize request. The name must be 1-63 characters long, and comply with RFC1035.\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "region": { + "type": "string", + "description": "The reference of the compute region scoping this request.\n", + "willReplaceOnChanges": true + }, + "requestedRunDuration": { + "$ref": "#/types/gcp:compute/RegionResizeRequestRequestedRunDuration:RegionResizeRequestRequestedRunDuration", + "description": "Requested run duration for instances that will be created by this request. At the end of the run duration instances will be deleted.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "resizeBy": { + "type": "integer", + "description": "The number of instances to be created by this resize request. The group's target size will be increased by this number.\n", + "willReplaceOnChanges": true + }, + "state": { + "type": "string", + "description": "Current state of the request.\n" + }, + "statuses": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionResizeRequestStatus:RegionResizeRequestStatus" + }, + "description": "Status of the request.\nStructure is documented below.\n" + } + }, + "type": "object" + } + }, "gcp:compute/regionSecurityPolicy:RegionSecurityPolicy": { - "description": "## Example Usage\n\n### Region Security Policy Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst region_sec_policy_basic = new gcp.compute.RegionSecurityPolicy(\"region-sec-policy-basic\", {\n name: \"my-sec-policy-basic\",\n description: \"basic region security policy\",\n type: \"CLOUD_ARMOR\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nregion_sec_policy_basic = gcp.compute.RegionSecurityPolicy(\"region-sec-policy-basic\",\n name=\"my-sec-policy-basic\",\n description=\"basic region security policy\",\n type=\"CLOUD_ARMOR\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var region_sec_policy_basic = new Gcp.Compute.RegionSecurityPolicy(\"region-sec-policy-basic\", new()\n {\n Name = \"my-sec-policy-basic\",\n Description = \"basic region security policy\",\n Type = \"CLOUD_ARMOR\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionSecurityPolicy(ctx, \"region-sec-policy-basic\", \u0026compute.RegionSecurityPolicyArgs{\n\t\t\tName: pulumi.String(\"my-sec-policy-basic\"),\n\t\t\tDescription: pulumi.String(\"basic region security policy\"),\n\t\t\tType: pulumi.String(\"CLOUD_ARMOR\"),\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.gcp.compute.RegionSecurityPolicy;\nimport com.pulumi.gcp.compute.RegionSecurityPolicyArgs;\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 region_sec_policy_basic = new RegionSecurityPolicy(\"region-sec-policy-basic\", RegionSecurityPolicyArgs.builder()\n .name(\"my-sec-policy-basic\")\n .description(\"basic region security policy\")\n .type(\"CLOUD_ARMOR\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n region-sec-policy-basic:\n type: gcp:compute:RegionSecurityPolicy\n properties:\n name: my-sec-policy-basic\n description: basic region security policy\n type: CLOUD_ARMOR\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Security Policy With Ddos Protection Config\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst region_sec_policy_ddos_protection = new gcp.compute.RegionSecurityPolicy(\"region-sec-policy-ddos-protection\", {\n name: \"my-sec-policy-ddos-protection\",\n description: \"with ddos protection config\",\n type: \"CLOUD_ARMOR_NETWORK\",\n ddosProtectionConfig: {\n ddosProtection: \"ADVANCED_PREVIEW\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nregion_sec_policy_ddos_protection = gcp.compute.RegionSecurityPolicy(\"region-sec-policy-ddos-protection\",\n name=\"my-sec-policy-ddos-protection\",\n description=\"with ddos protection config\",\n type=\"CLOUD_ARMOR_NETWORK\",\n ddos_protection_config={\n \"ddos_protection\": \"ADVANCED_PREVIEW\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var region_sec_policy_ddos_protection = new Gcp.Compute.RegionSecurityPolicy(\"region-sec-policy-ddos-protection\", new()\n {\n Name = \"my-sec-policy-ddos-protection\",\n Description = \"with ddos protection config\",\n Type = \"CLOUD_ARMOR_NETWORK\",\n DdosProtectionConfig = new Gcp.Compute.Inputs.RegionSecurityPolicyDdosProtectionConfigArgs\n {\n DdosProtection = \"ADVANCED_PREVIEW\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionSecurityPolicy(ctx, \"region-sec-policy-ddos-protection\", \u0026compute.RegionSecurityPolicyArgs{\n\t\t\tName: pulumi.String(\"my-sec-policy-ddos-protection\"),\n\t\t\tDescription: pulumi.String(\"with ddos protection config\"),\n\t\t\tType: pulumi.String(\"CLOUD_ARMOR_NETWORK\"),\n\t\t\tDdosProtectionConfig: \u0026compute.RegionSecurityPolicyDdosProtectionConfigArgs{\n\t\t\t\tDdosProtection: pulumi.String(\"ADVANCED_PREVIEW\"),\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.gcp.compute.RegionSecurityPolicy;\nimport com.pulumi.gcp.compute.RegionSecurityPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionSecurityPolicyDdosProtectionConfigArgs;\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 region_sec_policy_ddos_protection = new RegionSecurityPolicy(\"region-sec-policy-ddos-protection\", RegionSecurityPolicyArgs.builder()\n .name(\"my-sec-policy-ddos-protection\")\n .description(\"with ddos protection config\")\n .type(\"CLOUD_ARMOR_NETWORK\")\n .ddosProtectionConfig(RegionSecurityPolicyDdosProtectionConfigArgs.builder()\n .ddosProtection(\"ADVANCED_PREVIEW\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n region-sec-policy-ddos-protection:\n type: gcp:compute:RegionSecurityPolicy\n properties:\n name: my-sec-policy-ddos-protection\n description: with ddos protection config\n type: CLOUD_ARMOR_NETWORK\n ddosProtectionConfig:\n ddosProtection: ADVANCED_PREVIEW\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Security Policy With User Defined Fields\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst region_sec_policy_user_defined_fields = new gcp.compute.RegionSecurityPolicy(\"region-sec-policy-user-defined-fields\", {\n name: \"my-sec-policy-user-defined-fields\",\n description: \"with user defined fields\",\n type: \"CLOUD_ARMOR_NETWORK\",\n userDefinedFields: [\n {\n name: \"SIG1_AT_0\",\n base: \"UDP\",\n offset: 8,\n size: 2,\n mask: \"0x8F00\",\n },\n {\n name: \"SIG2_AT_8\",\n base: \"UDP\",\n offset: 16,\n size: 4,\n mask: \"0xFFFFFFFF\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nregion_sec_policy_user_defined_fields = gcp.compute.RegionSecurityPolicy(\"region-sec-policy-user-defined-fields\",\n name=\"my-sec-policy-user-defined-fields\",\n description=\"with user defined fields\",\n type=\"CLOUD_ARMOR_NETWORK\",\n user_defined_fields=[\n {\n \"name\": \"SIG1_AT_0\",\n \"base\": \"UDP\",\n \"offset\": 8,\n \"size\": 2,\n \"mask\": \"0x8F00\",\n },\n {\n \"name\": \"SIG2_AT_8\",\n \"base\": \"UDP\",\n \"offset\": 16,\n \"size\": 4,\n \"mask\": \"0xFFFFFFFF\",\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var region_sec_policy_user_defined_fields = new Gcp.Compute.RegionSecurityPolicy(\"region-sec-policy-user-defined-fields\", new()\n {\n Name = \"my-sec-policy-user-defined-fields\",\n Description = \"with user defined fields\",\n Type = \"CLOUD_ARMOR_NETWORK\",\n UserDefinedFields = new[]\n {\n new Gcp.Compute.Inputs.RegionSecurityPolicyUserDefinedFieldArgs\n {\n Name = \"SIG1_AT_0\",\n Base = \"UDP\",\n Offset = 8,\n Size = 2,\n Mask = \"0x8F00\",\n },\n new Gcp.Compute.Inputs.RegionSecurityPolicyUserDefinedFieldArgs\n {\n Name = \"SIG2_AT_8\",\n Base = \"UDP\",\n Offset = 16,\n Size = 4,\n Mask = \"0xFFFFFFFF\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionSecurityPolicy(ctx, \"region-sec-policy-user-defined-fields\", \u0026compute.RegionSecurityPolicyArgs{\n\t\t\tName: pulumi.String(\"my-sec-policy-user-defined-fields\"),\n\t\t\tDescription: pulumi.String(\"with user defined fields\"),\n\t\t\tType: pulumi.String(\"CLOUD_ARMOR_NETWORK\"),\n\t\t\tUserDefinedFields: compute.RegionSecurityPolicyUserDefinedFieldArray{\n\t\t\t\t\u0026compute.RegionSecurityPolicyUserDefinedFieldArgs{\n\t\t\t\t\tName: pulumi.String(\"SIG1_AT_0\"),\n\t\t\t\t\tBase: pulumi.String(\"UDP\"),\n\t\t\t\t\tOffset: pulumi.Int(8),\n\t\t\t\t\tSize: pulumi.Int(2),\n\t\t\t\t\tMask: pulumi.String(\"0x8F00\"),\n\t\t\t\t},\n\t\t\t\t\u0026compute.RegionSecurityPolicyUserDefinedFieldArgs{\n\t\t\t\t\tName: pulumi.String(\"SIG2_AT_8\"),\n\t\t\t\t\tBase: pulumi.String(\"UDP\"),\n\t\t\t\t\tOffset: pulumi.Int(16),\n\t\t\t\t\tSize: pulumi.Int(4),\n\t\t\t\t\tMask: pulumi.String(\"0xFFFFFFFF\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RegionSecurityPolicy;\nimport com.pulumi.gcp.compute.RegionSecurityPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionSecurityPolicyUserDefinedFieldArgs;\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 region_sec_policy_user_defined_fields = new RegionSecurityPolicy(\"region-sec-policy-user-defined-fields\", RegionSecurityPolicyArgs.builder()\n .name(\"my-sec-policy-user-defined-fields\")\n .description(\"with user defined fields\")\n .type(\"CLOUD_ARMOR_NETWORK\")\n .userDefinedFields( \n RegionSecurityPolicyUserDefinedFieldArgs.builder()\n .name(\"SIG1_AT_0\")\n .base(\"UDP\")\n .offset(8)\n .size(2)\n .mask(\"0x8F00\")\n .build(),\n RegionSecurityPolicyUserDefinedFieldArgs.builder()\n .name(\"SIG2_AT_8\")\n .base(\"UDP\")\n .offset(16)\n .size(4)\n .mask(\"0xFFFFFFFF\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n region-sec-policy-user-defined-fields:\n type: gcp:compute:RegionSecurityPolicy\n properties:\n name: my-sec-policy-user-defined-fields\n description: with user defined fields\n type: CLOUD_ARMOR_NETWORK\n userDefinedFields:\n - name: SIG1_AT_0\n base: UDP\n offset: 8\n size: 2\n mask: 0x8F00\n - name: SIG2_AT_8\n base: UDP\n offset: 16\n size: 4\n mask: 0xFFFFFFFF\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRegionSecurityPolicy can be imported using any of these accepted formats:\n\n* `projects/{{project}}/regions/{{region}}/securityPolicies/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, RegionSecurityPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/regionSecurityPolicy:RegionSecurityPolicy default projects/{{project}}/regions/{{region}}/securityPolicies/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionSecurityPolicy:RegionSecurityPolicy default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionSecurityPolicy:RegionSecurityPolicy default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionSecurityPolicy:RegionSecurityPolicy default {{name}}\n```\n\n", + "description": "## Example Usage\n\n### Region Security Policy Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst region_sec_policy_basic = new gcp.compute.RegionSecurityPolicy(\"region-sec-policy-basic\", {\n name: \"my-sec-policy-basic\",\n description: \"basic region security policy\",\n type: \"CLOUD_ARMOR\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nregion_sec_policy_basic = gcp.compute.RegionSecurityPolicy(\"region-sec-policy-basic\",\n name=\"my-sec-policy-basic\",\n description=\"basic region security policy\",\n type=\"CLOUD_ARMOR\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var region_sec_policy_basic = new Gcp.Compute.RegionSecurityPolicy(\"region-sec-policy-basic\", new()\n {\n Name = \"my-sec-policy-basic\",\n Description = \"basic region security policy\",\n Type = \"CLOUD_ARMOR\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionSecurityPolicy(ctx, \"region-sec-policy-basic\", \u0026compute.RegionSecurityPolicyArgs{\n\t\t\tName: pulumi.String(\"my-sec-policy-basic\"),\n\t\t\tDescription: pulumi.String(\"basic region security policy\"),\n\t\t\tType: pulumi.String(\"CLOUD_ARMOR\"),\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.gcp.compute.RegionSecurityPolicy;\nimport com.pulumi.gcp.compute.RegionSecurityPolicyArgs;\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 region_sec_policy_basic = new RegionSecurityPolicy(\"region-sec-policy-basic\", RegionSecurityPolicyArgs.builder()\n .name(\"my-sec-policy-basic\")\n .description(\"basic region security policy\")\n .type(\"CLOUD_ARMOR\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n region-sec-policy-basic:\n type: gcp:compute:RegionSecurityPolicy\n properties:\n name: my-sec-policy-basic\n description: basic region security policy\n type: CLOUD_ARMOR\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Security Policy With Ddos Protection Config\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst region_sec_policy_ddos_protection = new gcp.compute.RegionSecurityPolicy(\"region-sec-policy-ddos-protection\", {\n name: \"my-sec-policy-ddos-protection\",\n description: \"with ddos protection config\",\n type: \"CLOUD_ARMOR_NETWORK\",\n ddosProtectionConfig: {\n ddosProtection: \"ADVANCED_PREVIEW\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nregion_sec_policy_ddos_protection = gcp.compute.RegionSecurityPolicy(\"region-sec-policy-ddos-protection\",\n name=\"my-sec-policy-ddos-protection\",\n description=\"with ddos protection config\",\n type=\"CLOUD_ARMOR_NETWORK\",\n ddos_protection_config={\n \"ddos_protection\": \"ADVANCED_PREVIEW\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var region_sec_policy_ddos_protection = new Gcp.Compute.RegionSecurityPolicy(\"region-sec-policy-ddos-protection\", new()\n {\n Name = \"my-sec-policy-ddos-protection\",\n Description = \"with ddos protection config\",\n Type = \"CLOUD_ARMOR_NETWORK\",\n DdosProtectionConfig = new Gcp.Compute.Inputs.RegionSecurityPolicyDdosProtectionConfigArgs\n {\n DdosProtection = \"ADVANCED_PREVIEW\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionSecurityPolicy(ctx, \"region-sec-policy-ddos-protection\", \u0026compute.RegionSecurityPolicyArgs{\n\t\t\tName: pulumi.String(\"my-sec-policy-ddos-protection\"),\n\t\t\tDescription: pulumi.String(\"with ddos protection config\"),\n\t\t\tType: pulumi.String(\"CLOUD_ARMOR_NETWORK\"),\n\t\t\tDdosProtectionConfig: \u0026compute.RegionSecurityPolicyDdosProtectionConfigArgs{\n\t\t\t\tDdosProtection: pulumi.String(\"ADVANCED_PREVIEW\"),\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.gcp.compute.RegionSecurityPolicy;\nimport com.pulumi.gcp.compute.RegionSecurityPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionSecurityPolicyDdosProtectionConfigArgs;\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 region_sec_policy_ddos_protection = new RegionSecurityPolicy(\"region-sec-policy-ddos-protection\", RegionSecurityPolicyArgs.builder()\n .name(\"my-sec-policy-ddos-protection\")\n .description(\"with ddos protection config\")\n .type(\"CLOUD_ARMOR_NETWORK\")\n .ddosProtectionConfig(RegionSecurityPolicyDdosProtectionConfigArgs.builder()\n .ddosProtection(\"ADVANCED_PREVIEW\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n region-sec-policy-ddos-protection:\n type: gcp:compute:RegionSecurityPolicy\n properties:\n name: my-sec-policy-ddos-protection\n description: with ddos protection config\n type: CLOUD_ARMOR_NETWORK\n ddosProtectionConfig:\n ddosProtection: ADVANCED_PREVIEW\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Security Policy With User Defined Fields\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst region_sec_policy_user_defined_fields = new gcp.compute.RegionSecurityPolicy(\"region-sec-policy-user-defined-fields\", {\n name: \"my-sec-policy-user-defined-fields\",\n description: \"with user defined fields\",\n type: \"CLOUD_ARMOR_NETWORK\",\n userDefinedFields: [\n {\n name: \"SIG1_AT_0\",\n base: \"UDP\",\n offset: 8,\n size: 2,\n mask: \"0x8F00\",\n },\n {\n name: \"SIG2_AT_8\",\n base: \"UDP\",\n offset: 16,\n size: 4,\n mask: \"0xFFFFFFFF\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nregion_sec_policy_user_defined_fields = gcp.compute.RegionSecurityPolicy(\"region-sec-policy-user-defined-fields\",\n name=\"my-sec-policy-user-defined-fields\",\n description=\"with user defined fields\",\n type=\"CLOUD_ARMOR_NETWORK\",\n user_defined_fields=[\n {\n \"name\": \"SIG1_AT_0\",\n \"base\": \"UDP\",\n \"offset\": 8,\n \"size\": 2,\n \"mask\": \"0x8F00\",\n },\n {\n \"name\": \"SIG2_AT_8\",\n \"base\": \"UDP\",\n \"offset\": 16,\n \"size\": 4,\n \"mask\": \"0xFFFFFFFF\",\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var region_sec_policy_user_defined_fields = new Gcp.Compute.RegionSecurityPolicy(\"region-sec-policy-user-defined-fields\", new()\n {\n Name = \"my-sec-policy-user-defined-fields\",\n Description = \"with user defined fields\",\n Type = \"CLOUD_ARMOR_NETWORK\",\n UserDefinedFields = new[]\n {\n new Gcp.Compute.Inputs.RegionSecurityPolicyUserDefinedFieldArgs\n {\n Name = \"SIG1_AT_0\",\n Base = \"UDP\",\n Offset = 8,\n Size = 2,\n Mask = \"0x8F00\",\n },\n new Gcp.Compute.Inputs.RegionSecurityPolicyUserDefinedFieldArgs\n {\n Name = \"SIG2_AT_8\",\n Base = \"UDP\",\n Offset = 16,\n Size = 4,\n Mask = \"0xFFFFFFFF\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionSecurityPolicy(ctx, \"region-sec-policy-user-defined-fields\", \u0026compute.RegionSecurityPolicyArgs{\n\t\t\tName: pulumi.String(\"my-sec-policy-user-defined-fields\"),\n\t\t\tDescription: pulumi.String(\"with user defined fields\"),\n\t\t\tType: pulumi.String(\"CLOUD_ARMOR_NETWORK\"),\n\t\t\tUserDefinedFields: compute.RegionSecurityPolicyUserDefinedFieldArray{\n\t\t\t\t\u0026compute.RegionSecurityPolicyUserDefinedFieldArgs{\n\t\t\t\t\tName: pulumi.String(\"SIG1_AT_0\"),\n\t\t\t\t\tBase: pulumi.String(\"UDP\"),\n\t\t\t\t\tOffset: pulumi.Int(8),\n\t\t\t\t\tSize: pulumi.Int(2),\n\t\t\t\t\tMask: pulumi.String(\"0x8F00\"),\n\t\t\t\t},\n\t\t\t\t\u0026compute.RegionSecurityPolicyUserDefinedFieldArgs{\n\t\t\t\t\tName: pulumi.String(\"SIG2_AT_8\"),\n\t\t\t\t\tBase: pulumi.String(\"UDP\"),\n\t\t\t\t\tOffset: pulumi.Int(16),\n\t\t\t\t\tSize: pulumi.Int(4),\n\t\t\t\t\tMask: pulumi.String(\"0xFFFFFFFF\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RegionSecurityPolicy;\nimport com.pulumi.gcp.compute.RegionSecurityPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionSecurityPolicyUserDefinedFieldArgs;\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 region_sec_policy_user_defined_fields = new RegionSecurityPolicy(\"region-sec-policy-user-defined-fields\", RegionSecurityPolicyArgs.builder()\n .name(\"my-sec-policy-user-defined-fields\")\n .description(\"with user defined fields\")\n .type(\"CLOUD_ARMOR_NETWORK\")\n .userDefinedFields( \n RegionSecurityPolicyUserDefinedFieldArgs.builder()\n .name(\"SIG1_AT_0\")\n .base(\"UDP\")\n .offset(8)\n .size(2)\n .mask(\"0x8F00\")\n .build(),\n RegionSecurityPolicyUserDefinedFieldArgs.builder()\n .name(\"SIG2_AT_8\")\n .base(\"UDP\")\n .offset(16)\n .size(4)\n .mask(\"0xFFFFFFFF\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n region-sec-policy-user-defined-fields:\n type: gcp:compute:RegionSecurityPolicy\n properties:\n name: my-sec-policy-user-defined-fields\n description: with user defined fields\n type: CLOUD_ARMOR_NETWORK\n userDefinedFields:\n - name: SIG1_AT_0\n base: UDP\n offset: 8\n size: 2\n mask: 0x8F00\n - name: SIG2_AT_8\n base: UDP\n offset: 16\n size: 4\n mask: 0xFFFFFFFF\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Region Security Policy With Rules\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst region_sec_policy_with_rules = new gcp.compute.RegionSecurityPolicy(\"region-sec-policy-with-rules\", {\n name: \"my-sec-policy-with-rules\",\n description: \"basic region security policy with multiple rules\",\n type: \"CLOUD_ARMOR\",\n rules: [\n {\n action: \"deny\",\n priority: 1000,\n match: {\n expr: {\n expression: \"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\",\n },\n },\n },\n {\n action: \"deny\",\n priority: 2147483647,\n match: {\n versionedExpr: \"SRC_IPS_V1\",\n config: {\n srcIpRanges: [\"*\"],\n },\n },\n description: \"default rule\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nregion_sec_policy_with_rules = gcp.compute.RegionSecurityPolicy(\"region-sec-policy-with-rules\",\n name=\"my-sec-policy-with-rules\",\n description=\"basic region security policy with multiple rules\",\n type=\"CLOUD_ARMOR\",\n rules=[\n {\n \"action\": \"deny\",\n \"priority\": 1000,\n \"match\": {\n \"expr\": {\n \"expression\": \"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\",\n },\n },\n },\n {\n \"action\": \"deny\",\n \"priority\": 2147483647,\n \"match\": {\n \"versioned_expr\": \"SRC_IPS_V1\",\n \"config\": {\n \"src_ip_ranges\": [\"*\"],\n },\n },\n \"description\": \"default rule\",\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var region_sec_policy_with_rules = new Gcp.Compute.RegionSecurityPolicy(\"region-sec-policy-with-rules\", new()\n {\n Name = \"my-sec-policy-with-rules\",\n Description = \"basic region security policy with multiple rules\",\n Type = \"CLOUD_ARMOR\",\n Rules = new[]\n {\n new Gcp.Compute.Inputs.RegionSecurityPolicyRuleArgs\n {\n Action = \"deny\",\n Priority = 1000,\n Match = new Gcp.Compute.Inputs.RegionSecurityPolicyRuleMatchArgs\n {\n Expr = new Gcp.Compute.Inputs.RegionSecurityPolicyRuleMatchExprArgs\n {\n Expression = \"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\",\n },\n },\n },\n new Gcp.Compute.Inputs.RegionSecurityPolicyRuleArgs\n {\n Action = \"deny\",\n Priority = 2147483647,\n Match = new Gcp.Compute.Inputs.RegionSecurityPolicyRuleMatchArgs\n {\n VersionedExpr = \"SRC_IPS_V1\",\n Config = new Gcp.Compute.Inputs.RegionSecurityPolicyRuleMatchConfigArgs\n {\n SrcIpRanges = new[]\n {\n \"*\",\n },\n },\n },\n Description = \"default rule\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionSecurityPolicy(ctx, \"region-sec-policy-with-rules\", \u0026compute.RegionSecurityPolicyArgs{\n\t\t\tName: pulumi.String(\"my-sec-policy-with-rules\"),\n\t\t\tDescription: pulumi.String(\"basic region security policy with multiple rules\"),\n\t\t\tType: pulumi.String(\"CLOUD_ARMOR\"),\n\t\t\tRules: compute.RegionSecurityPolicyRuleTypeArray{\n\t\t\t\t\u0026compute.RegionSecurityPolicyRuleTypeArgs{\n\t\t\t\t\tAction: pulumi.String(\"deny\"),\n\t\t\t\t\tPriority: pulumi.Int(1000),\n\t\t\t\t\tMatch: \u0026compute.RegionSecurityPolicyRuleMatchArgs{\n\t\t\t\t\t\tExpr: \u0026compute.RegionSecurityPolicyRuleMatchExprArgs{\n\t\t\t\t\t\t\tExpression: pulumi.String(\"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026compute.RegionSecurityPolicyRuleTypeArgs{\n\t\t\t\t\tAction: pulumi.String(\"deny\"),\n\t\t\t\t\tPriority: pulumi.Int(2147483647),\n\t\t\t\t\tMatch: \u0026compute.RegionSecurityPolicyRuleMatchArgs{\n\t\t\t\t\t\tVersionedExpr: pulumi.String(\"SRC_IPS_V1\"),\n\t\t\t\t\t\tConfig: \u0026compute.RegionSecurityPolicyRuleMatchConfigArgs{\n\t\t\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"*\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tDescription: pulumi.String(\"default rule\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RegionSecurityPolicy;\nimport com.pulumi.gcp.compute.RegionSecurityPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionSecurityPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionSecurityPolicyRuleMatchArgs;\nimport com.pulumi.gcp.compute.inputs.RegionSecurityPolicyRuleMatchExprArgs;\nimport com.pulumi.gcp.compute.inputs.RegionSecurityPolicyRuleMatchConfigArgs;\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 region_sec_policy_with_rules = new RegionSecurityPolicy(\"region-sec-policy-with-rules\", RegionSecurityPolicyArgs.builder()\n .name(\"my-sec-policy-with-rules\")\n .description(\"basic region security policy with multiple rules\")\n .type(\"CLOUD_ARMOR\")\n .rules( \n RegionSecurityPolicyRuleArgs.builder()\n .action(\"deny\")\n .priority(\"1000\")\n .match(RegionSecurityPolicyRuleMatchArgs.builder()\n .expr(RegionSecurityPolicyRuleMatchExprArgs.builder()\n .expression(\"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\")\n .build())\n .build())\n .build(),\n RegionSecurityPolicyRuleArgs.builder()\n .action(\"deny\")\n .priority(\"2147483647\")\n .match(RegionSecurityPolicyRuleMatchArgs.builder()\n .versionedExpr(\"SRC_IPS_V1\")\n .config(RegionSecurityPolicyRuleMatchConfigArgs.builder()\n .srcIpRanges(\"*\")\n .build())\n .build())\n .description(\"default rule\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n region-sec-policy-with-rules:\n type: gcp:compute:RegionSecurityPolicy\n properties:\n name: my-sec-policy-with-rules\n description: basic region security policy with multiple rules\n type: CLOUD_ARMOR\n rules:\n - action: deny\n priority: '1000'\n match:\n expr:\n expression: request.path.matches(\"/login.html\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\n - action: deny\n priority: '2147483647'\n match:\n versionedExpr: SRC_IPS_V1\n config:\n srcIpRanges:\n - '*'\n description: default rule\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nRegionSecurityPolicy can be imported using any of these accepted formats:\n\n* `projects/{{project}}/regions/{{region}}/securityPolicies/{{name}}`\n\n* `{{project}}/{{region}}/{{name}}`\n\n* `{{region}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, RegionSecurityPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/regionSecurityPolicy:RegionSecurityPolicy default projects/{{project}}/regions/{{region}}/securityPolicies/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionSecurityPolicy:RegionSecurityPolicy default {{project}}/{{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionSecurityPolicy:RegionSecurityPolicy default {{region}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/regionSecurityPolicy:RegionSecurityPolicy default {{name}}\n```\n\n", "properties": { "ddosProtectionConfig": { "$ref": "#/types/gcp:compute/RegionSecurityPolicyDdosProtectionConfig:RegionSecurityPolicyDdosProtectionConfig", @@ -174932,6 +177129,13 @@ "type": "string", "description": "The Region in which the created Region Security Policy should reside.\nIf it is not provided, the provider region is used.\n" }, + "rules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionSecurityPolicyRule:RegionSecurityPolicyRule" + }, + "description": "The set of rules that belong to this policy. There must always be a default rule (rule with priority 2147483647 and match \"*\"). If no rules are provided when creating a security policy, a default rule with action \"allow\" will be added.\nStructure is documented below.\n" + }, "selfLink": { "type": "string", "description": "Server-defined URL for the resource.\n" @@ -174958,6 +177162,7 @@ "policyId", "project", "region", + "rules", "selfLink", "selfLinkWithPolicyId" ], @@ -174985,6 +177190,13 @@ "description": "The Region in which the created Region Security Policy should reside.\nIf it is not provided, the provider region is used.\n", "willReplaceOnChanges": true }, + "rules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionSecurityPolicyRule:RegionSecurityPolicyRule" + }, + "description": "The set of rules that belong to this policy. There must always be a default rule (rule with priority 2147483647 and match \"*\"). If no rules are provided when creating a security policy, a default rule with action \"allow\" will be added.\nStructure is documented below.\n" + }, "type": { "type": "string", "description": "The type indicates the intended use of the security policy.\n- CLOUD_ARMOR: Cloud Armor backend security policies can be configured to filter incoming HTTP requests targeting backend services. They filter requests before they hit the origin servers.\n- CLOUD_ARMOR_EDGE: Cloud Armor edge security policies can be configured to filter incoming HTTP requests targeting backend services (including Cloud CDN-enabled) as well as backend buckets (Cloud Storage). They filter requests before the request is served from Google's cache.\n- CLOUD_ARMOR_NETWORK: Cloud Armor network policies can be configured to filter packets targeting network load balancing resources such as backend services, target pools, target instances, and instances with external IPs. They filter requests before the request is served from the application.\nThis field can be set only at resource creation time.\nPossible values are: `CLOUD_ARMOR`, `CLOUD_ARMOR_EDGE`, `CLOUD_ARMOR_NETWORK`.\n", @@ -175032,6 +177244,13 @@ "description": "The Region in which the created Region Security Policy should reside.\nIf it is not provided, the provider region is used.\n", "willReplaceOnChanges": true }, + "rules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RegionSecurityPolicyRule:RegionSecurityPolicyRule" + }, + "description": "The set of rules that belong to this policy. There must always be a default rule (rule with priority 2147483647 and match \"*\"). If no rules are provided when creating a security policy, a default rule with action \"allow\" will be added.\nStructure is documented below.\n" + }, "selfLink": { "type": "string", "description": "Server-defined URL for the resource.\n" @@ -177781,11 +180000,11 @@ "items": { "$ref": "#/types/gcp:compute/RouterPeerCustomLearnedIpRange:RouterPeerCustomLearnedIpRange" }, - "description": "The custom learned route IP address range. Must be a valid CIDR-formatted prefix. If an IP address is provided without a\nsubnet mask, it is interpreted as, for IPv4, a /32 singular IP address range, and, for IPv6, /128.\n" + "description": "The custom learned route IP address range. Must be a valid CIDR-formatted prefix.\nIf an IP address is provided without a subnet mask, it is interpreted as, for IPv4,\na /32 singular IP address range, and, for IPv6, /128.\nStructure is documented below.\n" }, "customLearnedRoutePriority": { "type": "integer", - "description": "The user-defined custom learned route priority for a BGP session. This value is applied to all custom learned route\nranges for the session. You can choose a value from 0 to 65335. If you don't provide a value, Google Cloud assigns a\npriority of 100 to the ranges.\n" + "description": "The user-defined custom learned route priority for a BGP session.\nThis value is applied to all custom learned route ranges for the session.\nYou can choose a value from 0 to 65335. If you don't provide a value,\nGoogle Cloud assigns a priority of 100 to the ranges.\n" }, "enable": { "type": "boolean", @@ -177923,11 +180142,11 @@ "items": { "$ref": "#/types/gcp:compute/RouterPeerCustomLearnedIpRange:RouterPeerCustomLearnedIpRange" }, - "description": "The custom learned route IP address range. Must be a valid CIDR-formatted prefix. If an IP address is provided without a\nsubnet mask, it is interpreted as, for IPv4, a /32 singular IP address range, and, for IPv6, /128.\n" + "description": "The custom learned route IP address range. Must be a valid CIDR-formatted prefix.\nIf an IP address is provided without a subnet mask, it is interpreted as, for IPv4,\na /32 singular IP address range, and, for IPv6, /128.\nStructure is documented below.\n" }, "customLearnedRoutePriority": { "type": "integer", - "description": "The user-defined custom learned route priority for a BGP session. This value is applied to all custom learned route\nranges for the session. You can choose a value from 0 to 65335. If you don't provide a value, Google Cloud assigns a\npriority of 100 to the ranges.\n" + "description": "The user-defined custom learned route priority for a BGP session.\nThis value is applied to all custom learned route ranges for the session.\nYou can choose a value from 0 to 65335. If you don't provide a value,\nGoogle Cloud assigns a priority of 100 to the ranges.\n" }, "enable": { "type": "boolean", @@ -178056,11 +180275,11 @@ "items": { "$ref": "#/types/gcp:compute/RouterPeerCustomLearnedIpRange:RouterPeerCustomLearnedIpRange" }, - "description": "The custom learned route IP address range. Must be a valid CIDR-formatted prefix. If an IP address is provided without a\nsubnet mask, it is interpreted as, for IPv4, a /32 singular IP address range, and, for IPv6, /128.\n" + "description": "The custom learned route IP address range. Must be a valid CIDR-formatted prefix.\nIf an IP address is provided without a subnet mask, it is interpreted as, for IPv4,\na /32 singular IP address range, and, for IPv6, /128.\nStructure is documented below.\n" }, "customLearnedRoutePriority": { "type": "integer", - "description": "The user-defined custom learned route priority for a BGP session. This value is applied to all custom learned route\nranges for the session. You can choose a value from 0 to 65335. If you don't provide a value, Google Cloud assigns a\npriority of 100 to the ranges.\n" + "description": "The user-defined custom learned route priority for a BGP session.\nThis value is applied to all custom learned route ranges for the session.\nYou can choose a value from 0 to 65335. If you don't provide a value,\nGoogle Cloud assigns a priority of 100 to the ranges.\n" }, "enable": { "type": "boolean", @@ -178884,7 +181103,7 @@ } }, "gcp:compute/securityScanConfig:SecurityScanConfig": { - "description": "A ScanConfig resource contains the configurations to launch a scan.\n\nTo get more information about ScanConfig, see:\n\n* [API documentation](https://cloud.google.com/security-scanner/docs/reference/rest/v1beta/projects.scanConfigs)\n* How-to Guides\n * [Using Cloud Security Scanner](https://cloud.google.com/security-scanner/docs/scanning)\n\n\n\n## Example Usage\n\n### Scan Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst scannerStaticIp = new gcp.compute.Address(\"scanner_static_ip\", {name: \"scan-basic-static-ip\"});\nconst scan_config = new gcp.compute.SecurityScanConfig(\"scan-config\", {\n displayName: \"scan-config\",\n startingUrls: [pulumi.interpolate`http://${scannerStaticIp.address}`],\n targetPlatforms: [\"COMPUTE\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscanner_static_ip = gcp.compute.Address(\"scanner_static_ip\", name=\"scan-basic-static-ip\")\nscan_config = gcp.compute.SecurityScanConfig(\"scan-config\",\n display_name=\"scan-config\",\n starting_urls=[scanner_static_ip.address.apply(lambda address: f\"http://{address}\")],\n target_platforms=[\"COMPUTE\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var scannerStaticIp = new Gcp.Compute.Address(\"scanner_static_ip\", new()\n {\n Name = \"scan-basic-static-ip\",\n });\n\n var scan_config = new Gcp.Compute.SecurityScanConfig(\"scan-config\", new()\n {\n DisplayName = \"scan-config\",\n StartingUrls = new[]\n {\n scannerStaticIp.IPAddress.Apply(address =\u003e $\"http://{address}\"),\n },\n TargetPlatforms = new[]\n {\n \"COMPUTE\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tscannerStaticIp, err := compute.NewAddress(ctx, \"scanner_static_ip\", \u0026compute.AddressArgs{\n\t\t\tName: pulumi.String(\"scan-basic-static-ip\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSecurityScanConfig(ctx, \"scan-config\", \u0026compute.SecurityScanConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"scan-config\"),\n\t\t\tStartingUrls: pulumi.StringArray{\n\t\t\t\tscannerStaticIp.Address.ApplyT(func(address string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"http://%v\", address), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tTargetPlatforms: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"COMPUTE\"),\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.gcp.compute.Address;\nimport com.pulumi.gcp.compute.AddressArgs;\nimport com.pulumi.gcp.compute.SecurityScanConfig;\nimport com.pulumi.gcp.compute.SecurityScanConfigArgs;\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 scannerStaticIp = new Address(\"scannerStaticIp\", AddressArgs.builder()\n .name(\"scan-basic-static-ip\")\n .build());\n\n var scan_config = new SecurityScanConfig(\"scan-config\", SecurityScanConfigArgs.builder()\n .displayName(\"scan-config\")\n .startingUrls(scannerStaticIp.address().applyValue(address -\u003e String.format(\"http://%s\", address)))\n .targetPlatforms(\"COMPUTE\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n scannerStaticIp:\n type: gcp:compute:Address\n name: scanner_static_ip\n properties:\n name: scan-basic-static-ip\n scan-config:\n type: gcp:compute:SecurityScanConfig\n properties:\n displayName: scan-config\n startingUrls:\n - http://${scannerStaticIp.address}\n targetPlatforms:\n - COMPUTE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nScanConfig can be imported using any of these accepted formats:\n\n* `projects/{{project}}/scanConfigs/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, ScanConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/securityScanConfig:SecurityScanConfig default projects/{{project}}/scanConfigs/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/securityScanConfig:SecurityScanConfig default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/securityScanConfig:SecurityScanConfig default {{name}}\n```\n\n", + "description": "A ScanConfig resource contains the configurations to launch a scan.\n\nTo get more information about ScanConfig, see:\n\n* [API documentation](https://cloud.google.com/security-scanner/docs/reference/rest/v1beta/projects.scanConfigs)\n* How-to Guides\n * [Using Cloud Security Scanner](https://cloud.google.com/security-scanner/docs/scanning)\n\n\n\n## Example Usage\n\n### Scan Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst scannerStaticIp = new gcp.compute.Address(\"scanner_static_ip\", {name: \"scan-basic-static-ip\"});\nconst scan_config = new gcp.compute.SecurityScanConfig(\"scan-config\", {\n displayName: \"scan-config\",\n startingUrls: [pulumi.interpolate`http://${scannerStaticIp.address}`],\n targetPlatforms: [\"COMPUTE\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscanner_static_ip = gcp.compute.Address(\"scanner_static_ip\", name=\"scan-basic-static-ip\")\nscan_config = gcp.compute.SecurityScanConfig(\"scan-config\",\n display_name=\"scan-config\",\n starting_urls=[scanner_static_ip.address.apply(lambda address: f\"http://{address}\")],\n target_platforms=[\"COMPUTE\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var scannerStaticIp = new Gcp.Compute.Address(\"scanner_static_ip\", new()\n {\n Name = \"scan-basic-static-ip\",\n });\n\n var scan_config = new Gcp.Compute.SecurityScanConfig(\"scan-config\", new()\n {\n DisplayName = \"scan-config\",\n StartingUrls = new[]\n {\n scannerStaticIp.IPAddress.Apply(address =\u003e $\"http://{address}\"),\n },\n TargetPlatforms = new[]\n {\n \"COMPUTE\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tscannerStaticIp, err := compute.NewAddress(ctx, \"scanner_static_ip\", \u0026compute.AddressArgs{\n\t\t\tName: pulumi.String(\"scan-basic-static-ip\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSecurityScanConfig(ctx, \"scan-config\", \u0026compute.SecurityScanConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"scan-config\"),\n\t\t\tStartingUrls: pulumi.StringArray{\n\t\t\t\tscannerStaticIp.Address.ApplyT(func(address string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"http://%v\", address), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tTargetPlatforms: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"COMPUTE\"),\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.gcp.compute.Address;\nimport com.pulumi.gcp.compute.AddressArgs;\nimport com.pulumi.gcp.compute.SecurityScanConfig;\nimport com.pulumi.gcp.compute.SecurityScanConfigArgs;\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 scannerStaticIp = new Address(\"scannerStaticIp\", AddressArgs.builder()\n .name(\"scan-basic-static-ip\")\n .build());\n\n var scan_config = new SecurityScanConfig(\"scan-config\", SecurityScanConfigArgs.builder()\n .displayName(\"scan-config\")\n .startingUrls(scannerStaticIp.address().applyValue(address -\u003e String.format(\"http://%s\", address)))\n .targetPlatforms(\"COMPUTE\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n scannerStaticIp:\n type: gcp:compute:Address\n name: scanner_static_ip\n properties:\n name: scan-basic-static-ip\n scan-config:\n type: gcp:compute:SecurityScanConfig\n properties:\n displayName: scan-config\n startingUrls:\n - http://${scannerStaticIp.address}\n targetPlatforms:\n - COMPUTE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nScanConfig can be imported using any of these accepted formats:\n\n* `{{project}}/{{name}}`\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, ScanConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:compute/securityScanConfig:SecurityScanConfig default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:compute/securityScanConfig:SecurityScanConfig default \"{{project}} {{name}}\"\n```\n\n```sh\n$ pulumi import gcp:compute/securityScanConfig:SecurityScanConfig default {{name}}\n```\n\n", "properties": { "authentication": { "$ref": "#/types/gcp:compute/SecurityScanConfigAuthentication:SecurityScanConfigAuthentication", @@ -184105,6 +186324,10 @@ "$ref": "#/types/gcp:container/ClusterConfidentialNodes:ClusterConfidentialNodes", "description": "Configuration for [Confidential Nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/confidential-gke-nodes) feature. Structure is documented below documented below.\n" }, + "controlPlaneEndpointsConfig": { + "$ref": "#/types/gcp:container/ClusterControlPlaneEndpointsConfig:ClusterControlPlaneEndpointsConfig", + "description": "Configuration for all of the cluster's control plane endpoints.\nStructure is documented below.\n" + }, "costManagementConfig": { "$ref": "#/types/gcp:container/ClusterCostManagementConfig:ClusterCostManagementConfig", "description": "Configuration for the\n[Cost Allocation](https://cloud.google.com/kubernetes-engine/docs/how-to/cost-allocations) feature.\nStructure is documented below.\n" @@ -184392,6 +186615,10 @@ "type": "string", "description": "The IP address range of the Cloud TPUs in this cluster, in\n[CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)\nnotation (e.g. `1.2.3.4/29`).\n" }, + "userManagedKeysConfig": { + "$ref": "#/types/gcp:container/ClusterUserManagedKeysConfig:ClusterUserManagedKeysConfig", + "description": "The custom keys configuration of the cluster.\n" + }, "verticalPodAutoscaling": { "$ref": "#/types/gcp:container/ClusterVerticalPodAutoscaling:ClusterVerticalPodAutoscaling", "description": "Vertical Pod Autoscaling automatically adjusts the resources of pods controlled by it.\nStructure is documented below.\n" @@ -184412,6 +186639,7 @@ "clusterIpv4Cidr", "clusterTelemetry", "confidentialNodes", + "controlPlaneEndpointsConfig", "costManagementConfig", "databaseEncryption", "datapathProvider", @@ -184496,6 +186724,10 @@ "description": "Configuration for [Confidential Nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/confidential-gke-nodes) feature. Structure is documented below documented below.\n", "willReplaceOnChanges": true }, + "controlPlaneEndpointsConfig": { + "$ref": "#/types/gcp:container/ClusterControlPlaneEndpointsConfig:ClusterControlPlaneEndpointsConfig", + "description": "Configuration for all of the cluster's control plane endpoints.\nStructure is documented below.\n" + }, "costManagementConfig": { "$ref": "#/types/gcp:container/ClusterCostManagementConfig:ClusterCostManagementConfig", "description": "Configuration for the\n[Cost Allocation](https://cloud.google.com/kubernetes-engine/docs/how-to/cost-allocations) feature.\nStructure is documented below.\n" @@ -184757,6 +186989,10 @@ "$ref": "#/types/gcp:container/ClusterTpuConfig:ClusterTpuConfig", "description": "TPU configuration for the cluster.\n" }, + "userManagedKeysConfig": { + "$ref": "#/types/gcp:container/ClusterUserManagedKeysConfig:ClusterUserManagedKeysConfig", + "description": "The custom keys configuration of the cluster.\n" + }, "verticalPodAutoscaling": { "$ref": "#/types/gcp:container/ClusterVerticalPodAutoscaling:ClusterVerticalPodAutoscaling", "description": "Vertical Pod Autoscaling automatically adjusts the resources of pods controlled by it.\nStructure is documented below.\n" @@ -184807,6 +187043,10 @@ "description": "Configuration for [Confidential Nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/confidential-gke-nodes) feature. Structure is documented below documented below.\n", "willReplaceOnChanges": true }, + "controlPlaneEndpointsConfig": { + "$ref": "#/types/gcp:container/ClusterControlPlaneEndpointsConfig:ClusterControlPlaneEndpointsConfig", + "description": "Configuration for all of the cluster's control plane endpoints.\nStructure is documented below.\n" + }, "costManagementConfig": { "$ref": "#/types/gcp:container/ClusterCostManagementConfig:ClusterCostManagementConfig", "description": "Configuration for the\n[Cost Allocation](https://cloud.google.com/kubernetes-engine/docs/how-to/cost-allocations) feature.\nStructure is documented below.\n" @@ -185111,6 +187351,10 @@ "type": "string", "description": "The IP address range of the Cloud TPUs in this cluster, in\n[CIDR](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)\nnotation (e.g. `1.2.3.4/29`).\n" }, + "userManagedKeysConfig": { + "$ref": "#/types/gcp:container/ClusterUserManagedKeysConfig:ClusterUserManagedKeysConfig", + "description": "The custom keys configuration of the cluster.\n" + }, "verticalPodAutoscaling": { "$ref": "#/types/gcp:container/ClusterVerticalPodAutoscaling:ClusterVerticalPodAutoscaling", "description": "Vertical Pod Autoscaling automatically adjusts the resources of pods controlled by it.\nStructure is documented below.\n" @@ -190975,7 +193219,7 @@ }, "orgConfig": { "$ref": "#/types/gcp:dataloss/PreventionDiscoveryConfigOrgConfig:PreventionDiscoveryConfigOrgConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "parent": { "type": "string", @@ -191032,7 +193276,7 @@ }, "orgConfig": { "$ref": "#/types/gcp:dataloss/PreventionDiscoveryConfigOrgConfig:PreventionDiscoveryConfigOrgConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "parent": { "type": "string", @@ -191102,7 +193346,7 @@ }, "orgConfig": { "$ref": "#/types/gcp:dataloss/PreventionDiscoveryConfigOrgConfig:PreventionDiscoveryConfigOrgConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "parent": { "type": "string", @@ -197271,6 +199515,502 @@ "type": "object" } }, + "gcp:dataproc/gdcApplicationEnvironment:GdcApplicationEnvironment": { + "description": "An ApplicationEnvironment contains shared configuration that may be referenced by multiple SparkApplications.\n\n\nTo get more information about ApplicationEnvironment, see:\n\n* [API documentation](https://cloud.google.com/dataproc-gdc/docs/reference/rest/v1/projects.locations.applicationEnvironments)\n* How-to Guides\n * [Dataproc Intro](https://cloud.google.com/dataproc/)\n\n## Example Usage\n\n### Dataprocgdc Applicationenvironment Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst application_environment = new gcp.dataproc.GdcApplicationEnvironment(\"application-environment\", {\n applicationEnvironmentId: \"dp-tf-e2e-application-environment-basic\",\n serviceinstance: \"do-not-delete-dataproc-gdc-instance\",\n project: \"my-project\",\n location: \"us-west2\",\n namespace: \"default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\napplication_environment = gcp.dataproc.GdcApplicationEnvironment(\"application-environment\",\n application_environment_id=\"dp-tf-e2e-application-environment-basic\",\n serviceinstance=\"do-not-delete-dataproc-gdc-instance\",\n project=\"my-project\",\n location=\"us-west2\",\n namespace=\"default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var application_environment = new Gcp.Dataproc.GdcApplicationEnvironment(\"application-environment\", new()\n {\n ApplicationEnvironmentId = \"dp-tf-e2e-application-environment-basic\",\n Serviceinstance = \"do-not-delete-dataproc-gdc-instance\",\n Project = \"my-project\",\n Location = \"us-west2\",\n Namespace = \"default\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewGdcApplicationEnvironment(ctx, \"application-environment\", \u0026dataproc.GdcApplicationEnvironmentArgs{\n\t\t\tApplicationEnvironmentId: pulumi.String(\"dp-tf-e2e-application-environment-basic\"),\n\t\t\tServiceinstance: pulumi.String(\"do-not-delete-dataproc-gdc-instance\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tLocation: pulumi.String(\"us-west2\"),\n\t\t\tNamespace: pulumi.String(\"default\"),\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.gcp.dataproc.GdcApplicationEnvironment;\nimport com.pulumi.gcp.dataproc.GdcApplicationEnvironmentArgs;\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 application_environment = new GdcApplicationEnvironment(\"application-environment\", GdcApplicationEnvironmentArgs.builder()\n .applicationEnvironmentId(\"dp-tf-e2e-application-environment-basic\")\n .serviceinstance(\"do-not-delete-dataproc-gdc-instance\")\n .project(\"my-project\")\n .location(\"us-west2\")\n .namespace(\"default\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n application-environment:\n type: gcp:dataproc:GdcApplicationEnvironment\n properties:\n applicationEnvironmentId: dp-tf-e2e-application-environment-basic\n serviceinstance: do-not-delete-dataproc-gdc-instance\n project: my-project\n location: us-west2\n namespace: default\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Dataprocgdc Applicationenvironment\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst application_environment = new gcp.dataproc.GdcApplicationEnvironment(\"application-environment\", {\n applicationEnvironmentId: \"dp-tf-e2e-application-environment\",\n serviceinstance: \"do-not-delete-dataproc-gdc-instance\",\n project: \"my-project\",\n location: \"us-west2\",\n namespace: \"default\",\n displayName: \"An application environment\",\n labels: {\n \"test-label\": \"label-value\",\n },\n annotations: {\n an_annotation: \"annotation_value\",\n },\n sparkApplicationEnvironmentConfig: {\n defaultProperties: {\n \"spark.executor.memory\": \"4g\",\n },\n defaultVersion: \"1.2\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\napplication_environment = gcp.dataproc.GdcApplicationEnvironment(\"application-environment\",\n application_environment_id=\"dp-tf-e2e-application-environment\",\n serviceinstance=\"do-not-delete-dataproc-gdc-instance\",\n project=\"my-project\",\n location=\"us-west2\",\n namespace=\"default\",\n display_name=\"An application environment\",\n labels={\n \"test-label\": \"label-value\",\n },\n annotations={\n \"an_annotation\": \"annotation_value\",\n },\n spark_application_environment_config={\n \"default_properties\": {\n \"spark.executor.memory\": \"4g\",\n },\n \"default_version\": \"1.2\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var application_environment = new Gcp.Dataproc.GdcApplicationEnvironment(\"application-environment\", new()\n {\n ApplicationEnvironmentId = \"dp-tf-e2e-application-environment\",\n Serviceinstance = \"do-not-delete-dataproc-gdc-instance\",\n Project = \"my-project\",\n Location = \"us-west2\",\n Namespace = \"default\",\n DisplayName = \"An application environment\",\n Labels = \n {\n { \"test-label\", \"label-value\" },\n },\n Annotations = \n {\n { \"an_annotation\", \"annotation_value\" },\n },\n SparkApplicationEnvironmentConfig = new Gcp.Dataproc.Inputs.GdcApplicationEnvironmentSparkApplicationEnvironmentConfigArgs\n {\n DefaultProperties = \n {\n { \"spark.executor.memory\", \"4g\" },\n },\n DefaultVersion = \"1.2\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewGdcApplicationEnvironment(ctx, \"application-environment\", \u0026dataproc.GdcApplicationEnvironmentArgs{\n\t\t\tApplicationEnvironmentId: pulumi.String(\"dp-tf-e2e-application-environment\"),\n\t\t\tServiceinstance: pulumi.String(\"do-not-delete-dataproc-gdc-instance\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tLocation: pulumi.String(\"us-west2\"),\n\t\t\tNamespace: pulumi.String(\"default\"),\n\t\t\tDisplayName: pulumi.String(\"An application environment\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"test-label\": pulumi.String(\"label-value\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"an_annotation\": pulumi.String(\"annotation_value\"),\n\t\t\t},\n\t\t\tSparkApplicationEnvironmentConfig: \u0026dataproc.GdcApplicationEnvironmentSparkApplicationEnvironmentConfigArgs{\n\t\t\t\tDefaultProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.executor.memory\": pulumi.String(\"4g\"),\n\t\t\t\t},\n\t\t\t\tDefaultVersion: pulumi.String(\"1.2\"),\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.gcp.dataproc.GdcApplicationEnvironment;\nimport com.pulumi.gcp.dataproc.GdcApplicationEnvironmentArgs;\nimport com.pulumi.gcp.dataproc.inputs.GdcApplicationEnvironmentSparkApplicationEnvironmentConfigArgs;\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 application_environment = new GdcApplicationEnvironment(\"application-environment\", GdcApplicationEnvironmentArgs.builder()\n .applicationEnvironmentId(\"dp-tf-e2e-application-environment\")\n .serviceinstance(\"do-not-delete-dataproc-gdc-instance\")\n .project(\"my-project\")\n .location(\"us-west2\")\n .namespace(\"default\")\n .displayName(\"An application environment\")\n .labels(Map.of(\"test-label\", \"label-value\"))\n .annotations(Map.of(\"an_annotation\", \"annotation_value\"))\n .sparkApplicationEnvironmentConfig(GdcApplicationEnvironmentSparkApplicationEnvironmentConfigArgs.builder()\n .defaultProperties(Map.of(\"spark.executor.memory\", \"4g\"))\n .defaultVersion(\"1.2\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n application-environment:\n type: gcp:dataproc:GdcApplicationEnvironment\n properties:\n applicationEnvironmentId: dp-tf-e2e-application-environment\n serviceinstance: do-not-delete-dataproc-gdc-instance\n project: my-project\n location: us-west2\n namespace: default\n displayName: An application environment\n labels:\n test-label: label-value\n annotations:\n an_annotation: annotation_value\n sparkApplicationEnvironmentConfig:\n defaultProperties:\n spark.executor.memory: 4g\n defaultVersion: '1.2'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nApplicationEnvironment can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/serviceInstances/{{serviceinstance}}/applicationEnvironments/{{application_environment_id}}`\n\n* `{{project}}/{{location}}/{{serviceinstance}}/{{application_environment_id}}`\n\n* `{{location}}/{{serviceinstance}}/{{application_environment_id}}`\n\nWhen using the `pulumi import` command, ApplicationEnvironment can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:dataproc/gdcApplicationEnvironment:GdcApplicationEnvironment default projects/{{project}}/locations/{{location}}/serviceInstances/{{serviceinstance}}/applicationEnvironments/{{application_environment_id}}\n```\n\n```sh\n$ pulumi import gcp:dataproc/gdcApplicationEnvironment:GdcApplicationEnvironment default {{project}}/{{location}}/{{serviceinstance}}/{{application_environment_id}}\n```\n\n```sh\n$ pulumi import gcp:dataproc/gdcApplicationEnvironment:GdcApplicationEnvironment default {{location}}/{{serviceinstance}}/{{application_environment_id}}\n```\n\n", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The annotations to associate with this application environment. Annotations may be used to store client information, but are not used by the server.\n**Note**: This field is non-authoritative, and will only manage the annotations present in your configuration.\nPlease refer to the field `effective_annotations` for all of the annotations present on the resource.\n" + }, + "applicationEnvironmentId": { + "type": "string", + "description": "The id of the application environment\n" + }, + "createTime": { + "type": "string", + "description": "The timestamp when the resource was created.\n" + }, + "displayName": { + "type": "string", + "description": "User-provided human-readable name to be used in user interfaces.\n" + }, + "effectiveAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The labels to associate with this application environment. Labels may be used for filtering and billing tracking.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "The location of the application environment\n" + }, + "name": { + "type": "string", + "description": "Identifier. The name of the application environment. Format: projects/{project}/locations/{location}/serviceInstances/{service_instance}/applicationEnvironments/{application_environment_id}\n" + }, + "namespace": { + "type": "string", + "description": "The name of the namespace in which to create this ApplicationEnvironment. This namespace must already exist in the cluster\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n" + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "serviceinstance": { + "type": "string", + "description": "The id of the service instance to which this application environment belongs.\n\n\n- - -\n" + }, + "sparkApplicationEnvironmentConfig": { + "$ref": "#/types/gcp:dataproc/GdcApplicationEnvironmentSparkApplicationEnvironmentConfig:GdcApplicationEnvironmentSparkApplicationEnvironmentConfig", + "description": "Represents the SparkApplicationEnvironmentConfig.\nStructure is documented below.\n" + }, + "uid": { + "type": "string", + "description": "System generated unique identifier for this application environment, formatted as UUID4.\n" + }, + "updateTime": { + "type": "string", + "description": "The timestamp when the resource was most recently updated.\n" + } + }, + "required": [ + "createTime", + "effectiveAnnotations", + "effectiveLabels", + "location", + "name", + "project", + "serviceinstance", + "pulumiLabels", + "uid", + "updateTime" + ], + "inputProperties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The annotations to associate with this application environment. Annotations may be used to store client information, but are not used by the server.\n**Note**: This field is non-authoritative, and will only manage the annotations present in your configuration.\nPlease refer to the field `effective_annotations` for all of the annotations present on the resource.\n" + }, + "applicationEnvironmentId": { + "type": "string", + "description": "The id of the application environment\n", + "willReplaceOnChanges": true + }, + "displayName": { + "type": "string", + "description": "User-provided human-readable name to be used in user interfaces.\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The labels to associate with this application environment. Labels may be used for filtering and billing tracking.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "The location of the application environment\n", + "willReplaceOnChanges": true + }, + "namespace": { + "type": "string", + "description": "The name of the namespace in which to create this ApplicationEnvironment. This namespace must already exist in the cluster\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "serviceinstance": { + "type": "string", + "description": "The id of the service instance to which this application environment belongs.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "sparkApplicationEnvironmentConfig": { + "$ref": "#/types/gcp:dataproc/GdcApplicationEnvironmentSparkApplicationEnvironmentConfig:GdcApplicationEnvironmentSparkApplicationEnvironmentConfig", + "description": "Represents the SparkApplicationEnvironmentConfig.\nStructure is documented below.\n" + } + }, + "requiredInputs": [ + "location", + "serviceinstance" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering GdcApplicationEnvironment resources.\n", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The annotations to associate with this application environment. Annotations may be used to store client information, but are not used by the server.\n**Note**: This field is non-authoritative, and will only manage the annotations present in your configuration.\nPlease refer to the field `effective_annotations` for all of the annotations present on the resource.\n" + }, + "applicationEnvironmentId": { + "type": "string", + "description": "The id of the application environment\n", + "willReplaceOnChanges": true + }, + "createTime": { + "type": "string", + "description": "The timestamp when the resource was created.\n" + }, + "displayName": { + "type": "string", + "description": "User-provided human-readable name to be used in user interfaces.\n" + }, + "effectiveAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The labels to associate with this application environment. Labels may be used for filtering and billing tracking.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "The location of the application environment\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "Identifier. The name of the application environment. Format: projects/{project}/locations/{location}/serviceInstances/{service_instance}/applicationEnvironments/{application_environment_id}\n" + }, + "namespace": { + "type": "string", + "description": "The name of the namespace in which to create this ApplicationEnvironment. This namespace must already exist in the cluster\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "serviceinstance": { + "type": "string", + "description": "The id of the service instance to which this application environment belongs.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "sparkApplicationEnvironmentConfig": { + "$ref": "#/types/gcp:dataproc/GdcApplicationEnvironmentSparkApplicationEnvironmentConfig:GdcApplicationEnvironmentSparkApplicationEnvironmentConfig", + "description": "Represents the SparkApplicationEnvironmentConfig.\nStructure is documented below.\n" + }, + "uid": { + "type": "string", + "description": "System generated unique identifier for this application environment, formatted as UUID4.\n" + }, + "updateTime": { + "type": "string", + "description": "The timestamp when the resource was most recently updated.\n" + } + }, + "type": "object" + } + }, + "gcp:dataproc/gdcServiceInstance:GdcServiceInstance": { + "description": "A service instance is an instance of the Dataproc operator running on a GDC cluster.\n\n\nTo get more information about ServiceInstance, see:\n\n* [API documentation](https://cloud.google.com/dataproc-gdc/docs/reference/rest/v1/projects.locations.serviceInstances)\n* How-to Guides\n * [Dataproc Intro](https://cloud.google.com/dataproc/)\n\n## Example Usage\n\n### Dataprocgdc Serviceinstance\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst service_instance = new gcp.dataproc.GdcServiceInstance(\"service-instance\", {\n serviceInstanceId: \"tf-e2e-service-instance\",\n project: \"my-project\",\n location: \"us-west2\",\n gdceCluster: {\n gdceCluster: \"projects/gdce-cluster-monitoring/locations/us-west2/clusters/gdce-prism-prober-ord106\",\n },\n displayName: \"A service instance\",\n labels: {\n \"test-label\": \"label-value\",\n },\n serviceAccount: \"dataprocgdc-cep-workflows@gdce-cluster-monitoring.iam.gserviceaccount.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nservice_instance = gcp.dataproc.GdcServiceInstance(\"service-instance\",\n service_instance_id=\"tf-e2e-service-instance\",\n project=\"my-project\",\n location=\"us-west2\",\n gdce_cluster={\n \"gdce_cluster\": \"projects/gdce-cluster-monitoring/locations/us-west2/clusters/gdce-prism-prober-ord106\",\n },\n display_name=\"A service instance\",\n labels={\n \"test-label\": \"label-value\",\n },\n service_account=\"dataprocgdc-cep-workflows@gdce-cluster-monitoring.iam.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var service_instance = new Gcp.Dataproc.GdcServiceInstance(\"service-instance\", new()\n {\n ServiceInstanceId = \"tf-e2e-service-instance\",\n Project = \"my-project\",\n Location = \"us-west2\",\n GdceCluster = new Gcp.Dataproc.Inputs.GdcServiceInstanceGdceClusterArgs\n {\n GdceCluster = \"projects/gdce-cluster-monitoring/locations/us-west2/clusters/gdce-prism-prober-ord106\",\n },\n DisplayName = \"A service instance\",\n Labels = \n {\n { \"test-label\", \"label-value\" },\n },\n ServiceAccount = \"dataprocgdc-cep-workflows@gdce-cluster-monitoring.iam.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dataproc.NewGdcServiceInstance(ctx, \"service-instance\", \u0026dataproc.GdcServiceInstanceArgs{\n\t\t\tServiceInstanceId: pulumi.String(\"tf-e2e-service-instance\"),\n\t\t\tProject: pulumi.String(\"my-project\"),\n\t\t\tLocation: pulumi.String(\"us-west2\"),\n\t\t\tGdceCluster: \u0026dataproc.GdcServiceInstanceGdceClusterArgs{\n\t\t\t\tGdceCluster: pulumi.String(\"projects/gdce-cluster-monitoring/locations/us-west2/clusters/gdce-prism-prober-ord106\"),\n\t\t\t},\n\t\t\tDisplayName: pulumi.String(\"A service instance\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"test-label\": pulumi.String(\"label-value\"),\n\t\t\t},\n\t\t\tServiceAccount: pulumi.String(\"dataprocgdc-cep-workflows@gdce-cluster-monitoring.iam.gserviceaccount.com\"),\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.gcp.dataproc.GdcServiceInstance;\nimport com.pulumi.gcp.dataproc.GdcServiceInstanceArgs;\nimport com.pulumi.gcp.dataproc.inputs.GdcServiceInstanceGdceClusterArgs;\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 service_instance = new GdcServiceInstance(\"service-instance\", GdcServiceInstanceArgs.builder()\n .serviceInstanceId(\"tf-e2e-service-instance\")\n .project(\"my-project\")\n .location(\"us-west2\")\n .gdceCluster(GdcServiceInstanceGdceClusterArgs.builder()\n .gdceCluster(\"projects/gdce-cluster-monitoring/locations/us-west2/clusters/gdce-prism-prober-ord106\")\n .build())\n .displayName(\"A service instance\")\n .labels(Map.of(\"test-label\", \"label-value\"))\n .serviceAccount(\"dataprocgdc-cep-workflows@gdce-cluster-monitoring.iam.gserviceaccount.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n service-instance:\n type: gcp:dataproc:GdcServiceInstance\n properties:\n serviceInstanceId: tf-e2e-service-instance\n project: my-project\n location: us-west2\n gdceCluster:\n gdceCluster: projects/gdce-cluster-monitoring/locations/us-west2/clusters/gdce-prism-prober-ord106\n displayName: A service instance\n labels:\n test-label: label-value\n serviceAccount: dataprocgdc-cep-workflows@gdce-cluster-monitoring.iam.gserviceaccount.com\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nServiceInstance can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/serviceInstances/{{service_instance_id}}`\n\n* `{{project}}/{{location}}/{{service_instance_id}}`\n\n* `{{location}}/{{service_instance_id}}`\n\nWhen using the `pulumi import` command, ServiceInstance can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:dataproc/gdcServiceInstance:GdcServiceInstance default projects/{{project}}/locations/{{location}}/serviceInstances/{{service_instance_id}}\n```\n\n```sh\n$ pulumi import gcp:dataproc/gdcServiceInstance:GdcServiceInstance default {{project}}/{{location}}/{{service_instance_id}}\n```\n\n```sh\n$ pulumi import gcp:dataproc/gdcServiceInstance:GdcServiceInstance default {{location}}/{{service_instance_id}}\n```\n\n", + "properties": { + "createTime": { + "type": "string", + "description": "The timestamp when the resource was created.\n" + }, + "displayName": { + "type": "string", + "description": "User-provided human-readable name to be used in user interfaces.\n" + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "effectiveServiceAccount": { + "type": "string", + "description": "Effective service account associated with ServiceInstance. This will be the service_account if specified. Otherwise, it will be an automatically created per-resource P4SA that also automatically has Fleet Workload. Identity bindings applied.\n" + }, + "gdceCluster": { + "$ref": "#/types/gcp:dataproc/GdcServiceInstanceGdceCluster:GdcServiceInstanceGdceCluster", + "description": "Gdce cluster information.\nStructure is documented below.\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The labels to associate with this service instance. Labels may be used for filtering and billing tracking.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "Location of the resource.\n" + }, + "name": { + "type": "string", + "description": "Identifier. The name of the service instance.\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n" + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "reconciling": { + "type": "boolean", + "description": "Whether the service instance is currently reconciling. True if the current state of the resource does not match the intended state, and the system is working to reconcile them, whether or not the change was user initiated.\n" + }, + "requestedState": { + "type": "string", + "description": "The intended state to which the service instance is reconciling. Possible values:\n* `CREATING`\n* `ACTIVE`\n* `DISCONNECTED`\n* `DELETING`\n* `STOPPING`\n* `STOPPED`\n* `STARTING`\n* `UPDATING`\n* `FAILED`\n" + }, + "serviceAccount": { + "type": "string", + "description": "Requested service account to associate with ServiceInstance.\n" + }, + "serviceInstanceId": { + "type": "string", + "description": "Id of the service instance.\n\n\n- - -\n" + }, + "sparkServiceInstanceConfig": { + "$ref": "#/types/gcp:dataproc/GdcServiceInstanceSparkServiceInstanceConfig:GdcServiceInstanceSparkServiceInstanceConfig", + "description": "Spark-specific service instance configuration.\n" + }, + "state": { + "type": "string", + "description": "The current state. Possible values:\n* `CREATING`\n* `ACTIVE`\n* `DISCONNECTED`\n* `DELETING`\n* `STOPPING`\n* `STOPPED`\n* `STARTING`\n* `UPDATING`\n* `FAILED`\n" + }, + "stateMessage": { + "type": "string", + "description": "A message explaining the current state.\n" + }, + "uid": { + "type": "string", + "description": "System generated unique identifier for this service instance, formatted as UUID4.\n" + }, + "updateTime": { + "type": "string", + "description": "The timestamp when the resource was most recently updated.\n" + } + }, + "required": [ + "createTime", + "effectiveLabels", + "effectiveServiceAccount", + "location", + "name", + "project", + "reconciling", + "requestedState", + "serviceInstanceId", + "state", + "stateMessage", + "pulumiLabels", + "uid", + "updateTime" + ], + "inputProperties": { + "displayName": { + "type": "string", + "description": "User-provided human-readable name to be used in user interfaces.\n", + "willReplaceOnChanges": true + }, + "gdceCluster": { + "$ref": "#/types/gcp:dataproc/GdcServiceInstanceGdceCluster:GdcServiceInstanceGdceCluster", + "description": "Gdce cluster information.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The labels to associate with this service instance. Labels may be used for filtering and billing tracking.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "Location of the resource.\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "serviceAccount": { + "type": "string", + "description": "Requested service account to associate with ServiceInstance.\n", + "willReplaceOnChanges": true + }, + "serviceInstanceId": { + "type": "string", + "description": "Id of the service instance.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "sparkServiceInstanceConfig": { + "$ref": "#/types/gcp:dataproc/GdcServiceInstanceSparkServiceInstanceConfig:GdcServiceInstanceSparkServiceInstanceConfig", + "description": "Spark-specific service instance configuration.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "location", + "serviceInstanceId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering GdcServiceInstance resources.\n", + "properties": { + "createTime": { + "type": "string", + "description": "The timestamp when the resource was created.\n" + }, + "displayName": { + "type": "string", + "description": "User-provided human-readable name to be used in user interfaces.\n", + "willReplaceOnChanges": true + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true, + "willReplaceOnChanges": true + }, + "effectiveServiceAccount": { + "type": "string", + "description": "Effective service account associated with ServiceInstance. This will be the service_account if specified. Otherwise, it will be an automatically created per-resource P4SA that also automatically has Fleet Workload. Identity bindings applied.\n" + }, + "gdceCluster": { + "$ref": "#/types/gcp:dataproc/GdcServiceInstanceGdceCluster:GdcServiceInstanceGdceCluster", + "description": "Gdce cluster information.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The labels to associate with this service instance. Labels may be used for filtering and billing tracking.\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "Location of the resource.\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "Identifier. The name of the service instance.\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "reconciling": { + "type": "boolean", + "description": "Whether the service instance is currently reconciling. True if the current state of the resource does not match the intended state, and the system is working to reconcile them, whether or not the change was user initiated.\n" + }, + "requestedState": { + "type": "string", + "description": "The intended state to which the service instance is reconciling. Possible values:\n* `CREATING`\n* `ACTIVE`\n* `DISCONNECTED`\n* `DELETING`\n* `STOPPING`\n* `STOPPED`\n* `STARTING`\n* `UPDATING`\n* `FAILED`\n" + }, + "serviceAccount": { + "type": "string", + "description": "Requested service account to associate with ServiceInstance.\n", + "willReplaceOnChanges": true + }, + "serviceInstanceId": { + "type": "string", + "description": "Id of the service instance.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "sparkServiceInstanceConfig": { + "$ref": "#/types/gcp:dataproc/GdcServiceInstanceSparkServiceInstanceConfig:GdcServiceInstanceSparkServiceInstanceConfig", + "description": "Spark-specific service instance configuration.\n", + "willReplaceOnChanges": true + }, + "state": { + "type": "string", + "description": "The current state. Possible values:\n* `CREATING`\n* `ACTIVE`\n* `DISCONNECTED`\n* `DELETING`\n* `STOPPING`\n* `STOPPED`\n* `STARTING`\n* `UPDATING`\n* `FAILED`\n" + }, + "stateMessage": { + "type": "string", + "description": "A message explaining the current state.\n" + }, + "uid": { + "type": "string", + "description": "System generated unique identifier for this service instance, formatted as UUID4.\n" + }, + "updateTime": { + "type": "string", + "description": "The timestamp when the resource was most recently updated.\n" + } + }, + "type": "object" + } + }, "gcp:dataproc/job:Job": { "description": "Manages a job resource within a Dataproc cluster within GCE. For more information see\n[the official dataproc documentation](https://cloud.google.com/dataproc/).\n\n!\u003e **Note:** This resource does not support 'update' and changing any attributes will cause the resource to be recreated.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst mycluster = new gcp.dataproc.Cluster(\"mycluster\", {\n name: \"dproc-cluster-unique-name\",\n region: \"us-central1\",\n});\n// Submit an example spark job to a dataproc cluster\nconst spark = new gcp.dataproc.Job(\"spark\", {\n region: mycluster.region,\n forceDelete: true,\n placement: {\n clusterName: mycluster.name,\n },\n sparkConfig: {\n mainClass: \"org.apache.spark.examples.SparkPi\",\n jarFileUris: [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n args: [\"1000\"],\n properties: {\n \"spark.logConf\": \"true\",\n },\n loggingConfig: {\n driverLogLevels: {\n root: \"INFO\",\n },\n },\n },\n});\n// Submit an example pyspark job to a dataproc cluster\nconst pyspark = new gcp.dataproc.Job(\"pyspark\", {\n region: mycluster.region,\n forceDelete: true,\n placement: {\n clusterName: mycluster.name,\n },\n pysparkConfig: {\n mainPythonFileUri: \"gs://dataproc-examples-2f10d78d114f6aaec76462e3c310f31f/src/pyspark/hello-world/hello-world.py\",\n properties: {\n \"spark.logConf\": \"true\",\n },\n },\n});\nexport const sparkStatus = spark.statuses.apply(statuses =\u003e statuses[0].state);\nexport const pysparkStatus = pyspark.statuses.apply(statuses =\u003e statuses[0].state);\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmycluster = gcp.dataproc.Cluster(\"mycluster\",\n name=\"dproc-cluster-unique-name\",\n region=\"us-central1\")\n# Submit an example spark job to a dataproc cluster\nspark = gcp.dataproc.Job(\"spark\",\n region=mycluster.region,\n force_delete=True,\n placement={\n \"cluster_name\": mycluster.name,\n },\n spark_config={\n \"main_class\": \"org.apache.spark.examples.SparkPi\",\n \"jar_file_uris\": [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"],\n \"args\": [\"1000\"],\n \"properties\": {\n \"spark.logConf\": \"true\",\n },\n \"logging_config\": {\n \"driver_log_levels\": {\n \"root\": \"INFO\",\n },\n },\n })\n# Submit an example pyspark job to a dataproc cluster\npyspark = gcp.dataproc.Job(\"pyspark\",\n region=mycluster.region,\n force_delete=True,\n placement={\n \"cluster_name\": mycluster.name,\n },\n pyspark_config={\n \"main_python_file_uri\": \"gs://dataproc-examples-2f10d78d114f6aaec76462e3c310f31f/src/pyspark/hello-world/hello-world.py\",\n \"properties\": {\n \"spark.logConf\": \"true\",\n },\n })\npulumi.export(\"sparkStatus\", spark.statuses[0].state)\npulumi.export(\"pysparkStatus\", pyspark.statuses[0].state)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var mycluster = new Gcp.Dataproc.Cluster(\"mycluster\", new()\n {\n Name = \"dproc-cluster-unique-name\",\n Region = \"us-central1\",\n });\n\n // Submit an example spark job to a dataproc cluster\n var spark = new Gcp.Dataproc.Job(\"spark\", new()\n {\n Region = mycluster.Region,\n ForceDelete = true,\n Placement = new Gcp.Dataproc.Inputs.JobPlacementArgs\n {\n ClusterName = mycluster.Name,\n },\n SparkConfig = new Gcp.Dataproc.Inputs.JobSparkConfigArgs\n {\n MainClass = \"org.apache.spark.examples.SparkPi\",\n JarFileUris = new[]\n {\n \"file:///usr/lib/spark/examples/jars/spark-examples.jar\",\n },\n Args = new[]\n {\n \"1000\",\n },\n Properties = \n {\n { \"spark.logConf\", \"true\" },\n },\n LoggingConfig = new Gcp.Dataproc.Inputs.JobSparkConfigLoggingConfigArgs\n {\n DriverLogLevels = \n {\n { \"root\", \"INFO\" },\n },\n },\n },\n });\n\n // Submit an example pyspark job to a dataproc cluster\n var pyspark = new Gcp.Dataproc.Job(\"pyspark\", new()\n {\n Region = mycluster.Region,\n ForceDelete = true,\n Placement = new Gcp.Dataproc.Inputs.JobPlacementArgs\n {\n ClusterName = mycluster.Name,\n },\n PysparkConfig = new Gcp.Dataproc.Inputs.JobPysparkConfigArgs\n {\n MainPythonFileUri = \"gs://dataproc-examples-2f10d78d114f6aaec76462e3c310f31f/src/pyspark/hello-world/hello-world.py\",\n Properties = \n {\n { \"spark.logConf\", \"true\" },\n },\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"sparkStatus\"] = spark.Statuses.Apply(statuses =\u003e statuses[0].State),\n [\"pysparkStatus\"] = pyspark.Statuses.Apply(statuses =\u003e statuses[0].State),\n };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/dataproc\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmycluster, err := dataproc.NewCluster(ctx, \"mycluster\", \u0026dataproc.ClusterArgs{\n\t\t\tName: pulumi.String(\"dproc-cluster-unique-name\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Submit an example spark job to a dataproc cluster\n\t\tspark, err := dataproc.NewJob(ctx, \"spark\", \u0026dataproc.JobArgs{\n\t\t\tRegion: mycluster.Region,\n\t\t\tForceDelete: pulumi.Bool(true),\n\t\t\tPlacement: \u0026dataproc.JobPlacementArgs{\n\t\t\t\tClusterName: mycluster.Name,\n\t\t\t},\n\t\t\tSparkConfig: \u0026dataproc.JobSparkConfigArgs{\n\t\t\t\tMainClass: pulumi.String(\"org.apache.spark.examples.SparkPi\"),\n\t\t\t\tJarFileUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"),\n\t\t\t\t},\n\t\t\t\tArgs: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"1000\"),\n\t\t\t\t},\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.logConf\": pulumi.String(\"true\"),\n\t\t\t\t},\n\t\t\t\tLoggingConfig: \u0026dataproc.JobSparkConfigLoggingConfigArgs{\n\t\t\t\t\tDriverLogLevels: pulumi.StringMap{\n\t\t\t\t\t\t\"root\": pulumi.String(\"INFO\"),\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\t// Submit an example pyspark job to a dataproc cluster\n\t\tpyspark, err := dataproc.NewJob(ctx, \"pyspark\", \u0026dataproc.JobArgs{\n\t\t\tRegion: mycluster.Region,\n\t\t\tForceDelete: pulumi.Bool(true),\n\t\t\tPlacement: \u0026dataproc.JobPlacementArgs{\n\t\t\t\tClusterName: mycluster.Name,\n\t\t\t},\n\t\t\tPysparkConfig: \u0026dataproc.JobPysparkConfigArgs{\n\t\t\t\tMainPythonFileUri: pulumi.String(\"gs://dataproc-examples-2f10d78d114f6aaec76462e3c310f31f/src/pyspark/hello-world/hello-world.py\"),\n\t\t\t\tProperties: pulumi.StringMap{\n\t\t\t\t\t\"spark.logConf\": pulumi.String(\"true\"),\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\tctx.Export(\"sparkStatus\", spark.Statuses.ApplyT(func(statuses []dataproc.JobStatus) (*string, error) {\n\t\t\treturn \u0026statuses[0].State, nil\n\t\t}).(pulumi.StringPtrOutput))\n\t\tctx.Export(\"pysparkStatus\", pyspark.Statuses.ApplyT(func(statuses []dataproc.JobStatus) (*string, error) {\n\t\t\treturn \u0026statuses[0].State, nil\n\t\t}).(pulumi.StringPtrOutput))\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.gcp.dataproc.Cluster;\nimport com.pulumi.gcp.dataproc.ClusterArgs;\nimport com.pulumi.gcp.dataproc.Job;\nimport com.pulumi.gcp.dataproc.JobArgs;\nimport com.pulumi.gcp.dataproc.inputs.JobPlacementArgs;\nimport com.pulumi.gcp.dataproc.inputs.JobSparkConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.JobSparkConfigLoggingConfigArgs;\nimport com.pulumi.gcp.dataproc.inputs.JobPysparkConfigArgs;\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 mycluster = new Cluster(\"mycluster\", ClusterArgs.builder()\n .name(\"dproc-cluster-unique-name\")\n .region(\"us-central1\")\n .build());\n\n // Submit an example spark job to a dataproc cluster\n var spark = new Job(\"spark\", JobArgs.builder()\n .region(mycluster.region())\n .forceDelete(true)\n .placement(JobPlacementArgs.builder()\n .clusterName(mycluster.name())\n .build())\n .sparkConfig(JobSparkConfigArgs.builder()\n .mainClass(\"org.apache.spark.examples.SparkPi\")\n .jarFileUris(\"file:///usr/lib/spark/examples/jars/spark-examples.jar\")\n .args(\"1000\")\n .properties(Map.of(\"spark.logConf\", \"true\"))\n .loggingConfig(JobSparkConfigLoggingConfigArgs.builder()\n .driverLogLevels(Map.of(\"root\", \"INFO\"))\n .build())\n .build())\n .build());\n\n // Submit an example pyspark job to a dataproc cluster\n var pyspark = new Job(\"pyspark\", JobArgs.builder()\n .region(mycluster.region())\n .forceDelete(true)\n .placement(JobPlacementArgs.builder()\n .clusterName(mycluster.name())\n .build())\n .pysparkConfig(JobPysparkConfigArgs.builder()\n .mainPythonFileUri(\"gs://dataproc-examples-2f10d78d114f6aaec76462e3c310f31f/src/pyspark/hello-world/hello-world.py\")\n .properties(Map.of(\"spark.logConf\", \"true\"))\n .build())\n .build());\n\n ctx.export(\"sparkStatus\", spark.statuses().applyValue(statuses -\u003e statuses[0].state()));\n ctx.export(\"pysparkStatus\", pyspark.statuses().applyValue(statuses -\u003e statuses[0].state()));\n }\n}\n```\n```yaml\nresources:\n mycluster:\n type: gcp:dataproc:Cluster\n properties:\n name: dproc-cluster-unique-name\n region: us-central1\n # Submit an example spark job to a dataproc cluster\n spark:\n type: gcp:dataproc:Job\n properties:\n region: ${mycluster.region}\n forceDelete: true\n placement:\n clusterName: ${mycluster.name}\n sparkConfig:\n mainClass: org.apache.spark.examples.SparkPi\n jarFileUris:\n - file:///usr/lib/spark/examples/jars/spark-examples.jar\n args:\n - '1000'\n properties:\n spark.logConf: 'true'\n loggingConfig:\n driverLogLevels:\n root: INFO\n # Submit an example pyspark job to a dataproc cluster\n pyspark:\n type: gcp:dataproc:Job\n properties:\n region: ${mycluster.region}\n forceDelete: true\n placement:\n clusterName: ${mycluster.name}\n pysparkConfig:\n mainPythonFileUri: gs://dataproc-examples-2f10d78d114f6aaec76462e3c310f31f/src/pyspark/hello-world/hello-world.py\n properties:\n spark.logConf: 'true'\noutputs:\n # Check out current state of the jobs\n sparkStatus: ${spark.statuses[0].state}\n pysparkStatus: ${pyspark.statuses[0].state}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nThis resource does not support import.\n\n", "properties": { @@ -205407,7 +208147,7 @@ "items": { "$ref": "#/types/gcp:edgecontainer/VpnConnectionDetail:VpnConnectionDetail" }, - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "effectiveLabels": { "type": "object", @@ -205554,7 +208294,7 @@ "items": { "$ref": "#/types/gcp:edgecontainer/VpnConnectionDetail:VpnConnectionDetail" }, - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "effectiveLabels": { "type": "object", @@ -208319,7 +211059,7 @@ } }, "gcp:firebase/androidApp:AndroidApp": { - "description": "## Example Usage\n\n### Firebase Android App Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.firebase.AndroidApp(\"basic\", {\n project: \"my-project-name\",\n displayName: \"Display Name Basic\",\n packageName: \"android.package.app\",\n sha1Hashes: [\"2145bdf698b8715039bd0e83f2069bed435ac21c\"],\n sha256Hashes: [\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.firebase.AndroidApp(\"basic\",\n project=\"my-project-name\",\n display_name=\"Display Name Basic\",\n package_name=\"android.package.app\",\n sha1_hashes=[\"2145bdf698b8715039bd0e83f2069bed435ac21c\"],\n sha256_hashes=[\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Firebase.AndroidApp(\"basic\", new()\n {\n Project = \"my-project-name\",\n DisplayName = \"Display Name Basic\",\n PackageName = \"android.package.app\",\n Sha1Hashes = new[]\n {\n \"2145bdf698b8715039bd0e83f2069bed435ac21c\",\n },\n Sha256Hashes = new[]\n {\n \"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := firebase.NewAndroidApp(ctx, \"basic\", \u0026firebase.AndroidAppArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name Basic\"),\n\t\t\tPackageName: pulumi.String(\"android.package.app\"),\n\t\t\tSha1Hashes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"2145bdf698b8715039bd0e83f2069bed435ac21c\"),\n\t\t\t},\n\t\t\tSha256Hashes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\"),\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.gcp.firebase.AndroidApp;\nimport com.pulumi.gcp.firebase.AndroidAppArgs;\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 basic = new AndroidApp(\"basic\", AndroidAppArgs.builder()\n .project(\"my-project-name\")\n .displayName(\"Display Name Basic\")\n .packageName(\"android.package.app\")\n .sha1Hashes(\"2145bdf698b8715039bd0e83f2069bed435ac21c\")\n .sha256Hashes(\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:firebase:AndroidApp\n properties:\n project: my-project-name\n displayName: Display Name Basic\n packageName: android.package.app\n sha1Hashes:\n - 2145bdf698b8715039bd0e83f2069bed435ac21c\n sha256Hashes:\n - 2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firebase Android App Custom Api Key\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst android = new gcp.projects.ApiKey(\"android\", {\n name: \"api-key\",\n displayName: \"Display Name\",\n project: \"my-project-name\",\n restrictions: {\n androidKeyRestrictions: {\n allowedApplications: [{\n packageName: \"android.package.app\",\n sha1Fingerprint: \"2145bdf698b8715039bd0e83f2069bed435ac21c\",\n }],\n },\n },\n});\nconst _default = new gcp.firebase.AndroidApp(\"default\", {\n project: \"my-project-name\",\n displayName: \"Display Name\",\n packageName: \"android.package.app\",\n sha1Hashes: [\"2145bdf698b8715039bd0e83f2069bed435ac21c\"],\n sha256Hashes: [\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\"],\n apiKeyId: android.uid,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nandroid = gcp.projects.ApiKey(\"android\",\n name=\"api-key\",\n display_name=\"Display Name\",\n project=\"my-project-name\",\n restrictions={\n \"android_key_restrictions\": {\n \"allowed_applications\": [{\n \"package_name\": \"android.package.app\",\n \"sha1_fingerprint\": \"2145bdf698b8715039bd0e83f2069bed435ac21c\",\n }],\n },\n })\ndefault = gcp.firebase.AndroidApp(\"default\",\n project=\"my-project-name\",\n display_name=\"Display Name\",\n package_name=\"android.package.app\",\n sha1_hashes=[\"2145bdf698b8715039bd0e83f2069bed435ac21c\"],\n sha256_hashes=[\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\"],\n api_key_id=android.uid)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var android = new Gcp.Projects.ApiKey(\"android\", new()\n {\n Name = \"api-key\",\n DisplayName = \"Display Name\",\n Project = \"my-project-name\",\n Restrictions = new Gcp.Projects.Inputs.ApiKeyRestrictionsArgs\n {\n AndroidKeyRestrictions = new Gcp.Projects.Inputs.ApiKeyRestrictionsAndroidKeyRestrictionsArgs\n {\n AllowedApplications = new[]\n {\n new Gcp.Projects.Inputs.ApiKeyRestrictionsAndroidKeyRestrictionsAllowedApplicationArgs\n {\n PackageName = \"android.package.app\",\n Sha1Fingerprint = \"2145bdf698b8715039bd0e83f2069bed435ac21c\",\n },\n },\n },\n },\n });\n\n var @default = new Gcp.Firebase.AndroidApp(\"default\", new()\n {\n Project = \"my-project-name\",\n DisplayName = \"Display Name\",\n PackageName = \"android.package.app\",\n Sha1Hashes = new[]\n {\n \"2145bdf698b8715039bd0e83f2069bed435ac21c\",\n },\n Sha256Hashes = new[]\n {\n \"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\",\n },\n ApiKeyId = android.Uid,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebase\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tandroid, err := projects.NewApiKey(ctx, \"android\", \u0026projects.ApiKeyArgs{\n\t\t\tName: pulumi.String(\"api-key\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRestrictions: \u0026projects.ApiKeyRestrictionsArgs{\n\t\t\t\tAndroidKeyRestrictions: \u0026projects.ApiKeyRestrictionsAndroidKeyRestrictionsArgs{\n\t\t\t\t\tAllowedApplications: projects.ApiKeyRestrictionsAndroidKeyRestrictionsAllowedApplicationArray{\n\t\t\t\t\t\t\u0026projects.ApiKeyRestrictionsAndroidKeyRestrictionsAllowedApplicationArgs{\n\t\t\t\t\t\t\tPackageName: pulumi.String(\"android.package.app\"),\n\t\t\t\t\t\t\tSha1Fingerprint: pulumi.String(\"2145bdf698b8715039bd0e83f2069bed435ac21c\"),\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\t_, err = firebase.NewAndroidApp(ctx, \"default\", \u0026firebase.AndroidAppArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name\"),\n\t\t\tPackageName: pulumi.String(\"android.package.app\"),\n\t\t\tSha1Hashes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"2145bdf698b8715039bd0e83f2069bed435ac21c\"),\n\t\t\t},\n\t\t\tSha256Hashes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\"),\n\t\t\t},\n\t\t\tApiKeyId: android.Uid,\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.gcp.projects.ApiKey;\nimport com.pulumi.gcp.projects.ApiKeyArgs;\nimport com.pulumi.gcp.projects.inputs.ApiKeyRestrictionsArgs;\nimport com.pulumi.gcp.projects.inputs.ApiKeyRestrictionsAndroidKeyRestrictionsArgs;\nimport com.pulumi.gcp.firebase.AndroidApp;\nimport com.pulumi.gcp.firebase.AndroidAppArgs;\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 android = new ApiKey(\"android\", ApiKeyArgs.builder()\n .name(\"api-key\")\n .displayName(\"Display Name\")\n .project(\"my-project-name\")\n .restrictions(ApiKeyRestrictionsArgs.builder()\n .androidKeyRestrictions(ApiKeyRestrictionsAndroidKeyRestrictionsArgs.builder()\n .allowedApplications(ApiKeyRestrictionsAndroidKeyRestrictionsAllowedApplicationArgs.builder()\n .packageName(\"android.package.app\")\n .sha1Fingerprint(\"2145bdf698b8715039bd0e83f2069bed435ac21c\")\n .build())\n .build())\n .build())\n .build());\n\n var default_ = new AndroidApp(\"default\", AndroidAppArgs.builder()\n .project(\"my-project-name\")\n .displayName(\"Display Name\")\n .packageName(\"android.package.app\")\n .sha1Hashes(\"2145bdf698b8715039bd0e83f2069bed435ac21c\")\n .sha256Hashes(\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\")\n .apiKeyId(android.uid())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:firebase:AndroidApp\n properties:\n project: my-project-name\n displayName: Display Name\n packageName: android.package.app\n sha1Hashes:\n - 2145bdf698b8715039bd0e83f2069bed435ac21c\n sha256Hashes:\n - 2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\n apiKeyId: ${android.uid}\n android:\n type: gcp:projects:ApiKey\n properties:\n name: api-key\n displayName: Display Name\n project: my-project-name\n restrictions:\n androidKeyRestrictions:\n allowedApplications:\n - packageName: android.package.app\n sha1Fingerprint: 2145bdf698b8715039bd0e83f2069bed435ac21c\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAndroidApp can be imported using any of these accepted formats:\n\n* `{{project}} projects/{{project}}/androidApps/{{app_id}}`\n\n* `projects/{{project}}/androidApps/{{app_id}}`\n\n* `{{project}}/{{project}}/{{app_id}}`\n\n* `androidApps/{{app_id}}`\n\n* `{{app_id}}`\n\nWhen using the `pulumi import` command, AndroidApp can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firebase/androidApp:AndroidApp default {{project}} projects/{{project}}/androidApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/androidApp:AndroidApp default projects/{{project}}/androidApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/androidApp:AndroidApp default {{project}}/{{project}}/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/androidApp:AndroidApp default androidApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/androidApp:AndroidApp default {{app_id}}\n```\n\n", + "description": "## Example Usage\n\n### Firebase Android App Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.firebase.AndroidApp(\"basic\", {\n project: \"my-project-name\",\n displayName: \"Display Name Basic\",\n packageName: \"android.package.app\",\n sha1Hashes: [\"2145bdf698b8715039bd0e83f2069bed435ac21c\"],\n sha256Hashes: [\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.firebase.AndroidApp(\"basic\",\n project=\"my-project-name\",\n display_name=\"Display Name Basic\",\n package_name=\"android.package.app\",\n sha1_hashes=[\"2145bdf698b8715039bd0e83f2069bed435ac21c\"],\n sha256_hashes=[\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Firebase.AndroidApp(\"basic\", new()\n {\n Project = \"my-project-name\",\n DisplayName = \"Display Name Basic\",\n PackageName = \"android.package.app\",\n Sha1Hashes = new[]\n {\n \"2145bdf698b8715039bd0e83f2069bed435ac21c\",\n },\n Sha256Hashes = new[]\n {\n \"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := firebase.NewAndroidApp(ctx, \"basic\", \u0026firebase.AndroidAppArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name Basic\"),\n\t\t\tPackageName: pulumi.String(\"android.package.app\"),\n\t\t\tSha1Hashes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"2145bdf698b8715039bd0e83f2069bed435ac21c\"),\n\t\t\t},\n\t\t\tSha256Hashes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\"),\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.gcp.firebase.AndroidApp;\nimport com.pulumi.gcp.firebase.AndroidAppArgs;\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 basic = new AndroidApp(\"basic\", AndroidAppArgs.builder()\n .project(\"my-project-name\")\n .displayName(\"Display Name Basic\")\n .packageName(\"android.package.app\")\n .sha1Hashes(\"2145bdf698b8715039bd0e83f2069bed435ac21c\")\n .sha256Hashes(\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:firebase:AndroidApp\n properties:\n project: my-project-name\n displayName: Display Name Basic\n packageName: android.package.app\n sha1Hashes:\n - 2145bdf698b8715039bd0e83f2069bed435ac21c\n sha256Hashes:\n - 2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firebase Android App Custom Api Key\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst android = new gcp.projects.ApiKey(\"android\", {\n name: \"api-key\",\n displayName: \"Display Name\",\n project: \"my-project-name\",\n restrictions: {\n androidKeyRestrictions: {\n allowedApplications: [{\n packageName: \"android.package.app\",\n sha1Fingerprint: \"2145bdf698b8715039bd0e83f2069bed435ac21c\",\n }],\n },\n },\n});\nconst _default = new gcp.firebase.AndroidApp(\"default\", {\n project: \"my-project-name\",\n displayName: \"Display Name\",\n packageName: \"android.package.app\",\n sha1Hashes: [\"2145bdf698b8715039bd0e83f2069bed435ac21c\"],\n sha256Hashes: [\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\"],\n apiKeyId: android.uid,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nandroid = gcp.projects.ApiKey(\"android\",\n name=\"api-key\",\n display_name=\"Display Name\",\n project=\"my-project-name\",\n restrictions={\n \"android_key_restrictions\": {\n \"allowed_applications\": [{\n \"package_name\": \"android.package.app\",\n \"sha1_fingerprint\": \"2145bdf698b8715039bd0e83f2069bed435ac21c\",\n }],\n },\n })\ndefault = gcp.firebase.AndroidApp(\"default\",\n project=\"my-project-name\",\n display_name=\"Display Name\",\n package_name=\"android.package.app\",\n sha1_hashes=[\"2145bdf698b8715039bd0e83f2069bed435ac21c\"],\n sha256_hashes=[\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\"],\n api_key_id=android.uid)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var android = new Gcp.Projects.ApiKey(\"android\", new()\n {\n Name = \"api-key\",\n DisplayName = \"Display Name\",\n Project = \"my-project-name\",\n Restrictions = new Gcp.Projects.Inputs.ApiKeyRestrictionsArgs\n {\n AndroidKeyRestrictions = new Gcp.Projects.Inputs.ApiKeyRestrictionsAndroidKeyRestrictionsArgs\n {\n AllowedApplications = new[]\n {\n new Gcp.Projects.Inputs.ApiKeyRestrictionsAndroidKeyRestrictionsAllowedApplicationArgs\n {\n PackageName = \"android.package.app\",\n Sha1Fingerprint = \"2145bdf698b8715039bd0e83f2069bed435ac21c\",\n },\n },\n },\n },\n });\n\n var @default = new Gcp.Firebase.AndroidApp(\"default\", new()\n {\n Project = \"my-project-name\",\n DisplayName = \"Display Name\",\n PackageName = \"android.package.app\",\n Sha1Hashes = new[]\n {\n \"2145bdf698b8715039bd0e83f2069bed435ac21c\",\n },\n Sha256Hashes = new[]\n {\n \"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\",\n },\n ApiKeyId = android.Uid,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebase\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tandroid, err := projects.NewApiKey(ctx, \"android\", \u0026projects.ApiKeyArgs{\n\t\t\tName: pulumi.String(\"api-key\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRestrictions: \u0026projects.ApiKeyRestrictionsArgs{\n\t\t\t\tAndroidKeyRestrictions: \u0026projects.ApiKeyRestrictionsAndroidKeyRestrictionsArgs{\n\t\t\t\t\tAllowedApplications: projects.ApiKeyRestrictionsAndroidKeyRestrictionsAllowedApplicationArray{\n\t\t\t\t\t\t\u0026projects.ApiKeyRestrictionsAndroidKeyRestrictionsAllowedApplicationArgs{\n\t\t\t\t\t\t\tPackageName: pulumi.String(\"android.package.app\"),\n\t\t\t\t\t\t\tSha1Fingerprint: pulumi.String(\"2145bdf698b8715039bd0e83f2069bed435ac21c\"),\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\t_, err = firebase.NewAndroidApp(ctx, \"default\", \u0026firebase.AndroidAppArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name\"),\n\t\t\tPackageName: pulumi.String(\"android.package.app\"),\n\t\t\tSha1Hashes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"2145bdf698b8715039bd0e83f2069bed435ac21c\"),\n\t\t\t},\n\t\t\tSha256Hashes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\"),\n\t\t\t},\n\t\t\tApiKeyId: android.Uid,\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.gcp.projects.ApiKey;\nimport com.pulumi.gcp.projects.ApiKeyArgs;\nimport com.pulumi.gcp.projects.inputs.ApiKeyRestrictionsArgs;\nimport com.pulumi.gcp.projects.inputs.ApiKeyRestrictionsAndroidKeyRestrictionsArgs;\nimport com.pulumi.gcp.firebase.AndroidApp;\nimport com.pulumi.gcp.firebase.AndroidAppArgs;\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 android = new ApiKey(\"android\", ApiKeyArgs.builder()\n .name(\"api-key\")\n .displayName(\"Display Name\")\n .project(\"my-project-name\")\n .restrictions(ApiKeyRestrictionsArgs.builder()\n .androidKeyRestrictions(ApiKeyRestrictionsAndroidKeyRestrictionsArgs.builder()\n .allowedApplications(ApiKeyRestrictionsAndroidKeyRestrictionsAllowedApplicationArgs.builder()\n .packageName(\"android.package.app\")\n .sha1Fingerprint(\"2145bdf698b8715039bd0e83f2069bed435ac21c\")\n .build())\n .build())\n .build())\n .build());\n\n var default_ = new AndroidApp(\"default\", AndroidAppArgs.builder()\n .project(\"my-project-name\")\n .displayName(\"Display Name\")\n .packageName(\"android.package.app\")\n .sha1Hashes(\"2145bdf698b8715039bd0e83f2069bed435ac21c\")\n .sha256Hashes(\"2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\")\n .apiKeyId(android.uid())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:firebase:AndroidApp\n properties:\n project: my-project-name\n displayName: Display Name\n packageName: android.package.app\n sha1Hashes:\n - 2145bdf698b8715039bd0e83f2069bed435ac21c\n sha256Hashes:\n - 2145bdf698b8715039bd0e83f2069bed435ac21ca1b2c3d4e5f6123456789abc\n apiKeyId: ${android.uid}\n android:\n type: gcp:projects:ApiKey\n properties:\n name: api-key\n displayName: Display Name\n project: my-project-name\n restrictions:\n androidKeyRestrictions:\n allowedApplications:\n - packageName: android.package.app\n sha1Fingerprint: 2145bdf698b8715039bd0e83f2069bed435ac21c\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAndroidApp can be imported using any of these accepted formats:\n\n* `{{project}} projects/{{project}}/androidApps/{{app_id}}`\n\n* `projects/{{project}}/androidApps/{{app_id}}`\n\n* `{{project}}/{{project}}/{{app_id}}`\n\n* `androidApps/{{app_id}}`\n\n* `{{app_id}}`\n\nWhen using the `pulumi import` command, AndroidApp can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firebase/androidApp:AndroidApp default \"{{project}} projects/{{project}}/androidApps/{{app_id}}\"\n```\n\n```sh\n$ pulumi import gcp:firebase/androidApp:AndroidApp default projects/{{project}}/androidApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/androidApp:AndroidApp default {{project}}/{{project}}/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/androidApp:AndroidApp default androidApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/androidApp:AndroidApp default {{app_id}}\n```\n\n", "properties": { "apiKeyId": { "type": "string", @@ -209058,7 +211798,7 @@ } }, "gcp:firebase/appleApp:AppleApp": { - "description": "## Example Usage\n\n### Firebase Apple App Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.firebase.AppleApp(\"default\", {\n project: \"my-project-name\",\n displayName: \"Display Name Basic\",\n bundleId: \"apple.app.12345\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.firebase.AppleApp(\"default\",\n project=\"my-project-name\",\n display_name=\"Display Name Basic\",\n bundle_id=\"apple.app.12345\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Firebase.AppleApp(\"default\", new()\n {\n Project = \"my-project-name\",\n DisplayName = \"Display Name Basic\",\n BundleId = \"apple.app.12345\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := firebase.NewAppleApp(ctx, \"default\", \u0026firebase.AppleAppArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name Basic\"),\n\t\t\tBundleId: pulumi.String(\"apple.app.12345\"),\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.gcp.firebase.AppleApp;\nimport com.pulumi.gcp.firebase.AppleAppArgs;\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 default_ = new AppleApp(\"default\", AppleAppArgs.builder()\n .project(\"my-project-name\")\n .displayName(\"Display Name Basic\")\n .bundleId(\"apple.app.12345\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:firebase:AppleApp\n properties:\n project: my-project-name\n displayName: Display Name Basic\n bundleId: apple.app.12345\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firebase Apple App Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst apple = new gcp.projects.ApiKey(\"apple\", {\n name: \"api-key\",\n displayName: \"Display Name Full\",\n project: \"my-project-name\",\n restrictions: {\n iosKeyRestrictions: {\n allowedBundleIds: [\"apple.app.12345\"],\n },\n },\n});\nconst full = new gcp.firebase.AppleApp(\"full\", {\n project: \"my-project-name\",\n displayName: \"Display Name Full\",\n bundleId: \"apple.app.12345\",\n appStoreId: \"12345\",\n teamId: \"9987654321\",\n apiKeyId: apple.uid,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\napple = gcp.projects.ApiKey(\"apple\",\n name=\"api-key\",\n display_name=\"Display Name Full\",\n project=\"my-project-name\",\n restrictions={\n \"ios_key_restrictions\": {\n \"allowed_bundle_ids\": [\"apple.app.12345\"],\n },\n })\nfull = gcp.firebase.AppleApp(\"full\",\n project=\"my-project-name\",\n display_name=\"Display Name Full\",\n bundle_id=\"apple.app.12345\",\n app_store_id=\"12345\",\n team_id=\"9987654321\",\n api_key_id=apple.uid)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var apple = new Gcp.Projects.ApiKey(\"apple\", new()\n {\n Name = \"api-key\",\n DisplayName = \"Display Name Full\",\n Project = \"my-project-name\",\n Restrictions = new Gcp.Projects.Inputs.ApiKeyRestrictionsArgs\n {\n IosKeyRestrictions = new Gcp.Projects.Inputs.ApiKeyRestrictionsIosKeyRestrictionsArgs\n {\n AllowedBundleIds = new[]\n {\n \"apple.app.12345\",\n },\n },\n },\n });\n\n var full = new Gcp.Firebase.AppleApp(\"full\", new()\n {\n Project = \"my-project-name\",\n DisplayName = \"Display Name Full\",\n BundleId = \"apple.app.12345\",\n AppStoreId = \"12345\",\n TeamId = \"9987654321\",\n ApiKeyId = apple.Uid,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebase\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tapple, err := projects.NewApiKey(ctx, \"apple\", \u0026projects.ApiKeyArgs{\n\t\t\tName: pulumi.String(\"api-key\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name Full\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRestrictions: \u0026projects.ApiKeyRestrictionsArgs{\n\t\t\t\tIosKeyRestrictions: \u0026projects.ApiKeyRestrictionsIosKeyRestrictionsArgs{\n\t\t\t\t\tAllowedBundleIds: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"apple.app.12345\"),\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\t_, err = firebase.NewAppleApp(ctx, \"full\", \u0026firebase.AppleAppArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name Full\"),\n\t\t\tBundleId: pulumi.String(\"apple.app.12345\"),\n\t\t\tAppStoreId: pulumi.String(\"12345\"),\n\t\t\tTeamId: pulumi.String(\"9987654321\"),\n\t\t\tApiKeyId: apple.Uid,\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.gcp.projects.ApiKey;\nimport com.pulumi.gcp.projects.ApiKeyArgs;\nimport com.pulumi.gcp.projects.inputs.ApiKeyRestrictionsArgs;\nimport com.pulumi.gcp.projects.inputs.ApiKeyRestrictionsIosKeyRestrictionsArgs;\nimport com.pulumi.gcp.firebase.AppleApp;\nimport com.pulumi.gcp.firebase.AppleAppArgs;\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 apple = new ApiKey(\"apple\", ApiKeyArgs.builder()\n .name(\"api-key\")\n .displayName(\"Display Name Full\")\n .project(\"my-project-name\")\n .restrictions(ApiKeyRestrictionsArgs.builder()\n .iosKeyRestrictions(ApiKeyRestrictionsIosKeyRestrictionsArgs.builder()\n .allowedBundleIds(\"apple.app.12345\")\n .build())\n .build())\n .build());\n\n var full = new AppleApp(\"full\", AppleAppArgs.builder()\n .project(\"my-project-name\")\n .displayName(\"Display Name Full\")\n .bundleId(\"apple.app.12345\")\n .appStoreId(\"12345\")\n .teamId(\"9987654321\")\n .apiKeyId(apple.uid())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n full:\n type: gcp:firebase:AppleApp\n properties:\n project: my-project-name\n displayName: Display Name Full\n bundleId: apple.app.12345\n appStoreId: '12345'\n teamId: '9987654321'\n apiKeyId: ${apple.uid}\n apple:\n type: gcp:projects:ApiKey\n properties:\n name: api-key\n displayName: Display Name Full\n project: my-project-name\n restrictions:\n iosKeyRestrictions:\n allowedBundleIds:\n - apple.app.12345\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAppleApp can be imported using any of these accepted formats:\n\n* `{{project}} projects/{{project}}/iosApps/{{app_id}}`\n\n* `projects/{{project}}/iosApps/{{app_id}}`\n\n* `{{project}}/{{project}}/{{app_id}}`\n\n* `iosApps/{{app_id}}`\n\n* `{{app_id}}`\n\nWhen using the `pulumi import` command, AppleApp can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firebase/appleApp:AppleApp default {{project}} projects/{{project}}/iosApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/appleApp:AppleApp default projects/{{project}}/iosApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/appleApp:AppleApp default {{project}}/{{project}}/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/appleApp:AppleApp default iosApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/appleApp:AppleApp default {{app_id}}\n```\n\n", + "description": "## Example Usage\n\n### Firebase Apple App Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.firebase.AppleApp(\"default\", {\n project: \"my-project-name\",\n displayName: \"Display Name Basic\",\n bundleId: \"apple.app.12345\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.firebase.AppleApp(\"default\",\n project=\"my-project-name\",\n display_name=\"Display Name Basic\",\n bundle_id=\"apple.app.12345\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Firebase.AppleApp(\"default\", new()\n {\n Project = \"my-project-name\",\n DisplayName = \"Display Name Basic\",\n BundleId = \"apple.app.12345\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebase\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := firebase.NewAppleApp(ctx, \"default\", \u0026firebase.AppleAppArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name Basic\"),\n\t\t\tBundleId: pulumi.String(\"apple.app.12345\"),\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.gcp.firebase.AppleApp;\nimport com.pulumi.gcp.firebase.AppleAppArgs;\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 default_ = new AppleApp(\"default\", AppleAppArgs.builder()\n .project(\"my-project-name\")\n .displayName(\"Display Name Basic\")\n .bundleId(\"apple.app.12345\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:firebase:AppleApp\n properties:\n project: my-project-name\n displayName: Display Name Basic\n bundleId: apple.app.12345\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firebase Apple App Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst apple = new gcp.projects.ApiKey(\"apple\", {\n name: \"api-key\",\n displayName: \"Display Name Full\",\n project: \"my-project-name\",\n restrictions: {\n iosKeyRestrictions: {\n allowedBundleIds: [\"apple.app.12345\"],\n },\n },\n});\nconst full = new gcp.firebase.AppleApp(\"full\", {\n project: \"my-project-name\",\n displayName: \"Display Name Full\",\n bundleId: \"apple.app.12345\",\n appStoreId: \"12345\",\n teamId: \"9987654321\",\n apiKeyId: apple.uid,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\napple = gcp.projects.ApiKey(\"apple\",\n name=\"api-key\",\n display_name=\"Display Name Full\",\n project=\"my-project-name\",\n restrictions={\n \"ios_key_restrictions\": {\n \"allowed_bundle_ids\": [\"apple.app.12345\"],\n },\n })\nfull = gcp.firebase.AppleApp(\"full\",\n project=\"my-project-name\",\n display_name=\"Display Name Full\",\n bundle_id=\"apple.app.12345\",\n app_store_id=\"12345\",\n team_id=\"9987654321\",\n api_key_id=apple.uid)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var apple = new Gcp.Projects.ApiKey(\"apple\", new()\n {\n Name = \"api-key\",\n DisplayName = \"Display Name Full\",\n Project = \"my-project-name\",\n Restrictions = new Gcp.Projects.Inputs.ApiKeyRestrictionsArgs\n {\n IosKeyRestrictions = new Gcp.Projects.Inputs.ApiKeyRestrictionsIosKeyRestrictionsArgs\n {\n AllowedBundleIds = new[]\n {\n \"apple.app.12345\",\n },\n },\n },\n });\n\n var full = new Gcp.Firebase.AppleApp(\"full\", new()\n {\n Project = \"my-project-name\",\n DisplayName = \"Display Name Full\",\n BundleId = \"apple.app.12345\",\n AppStoreId = \"12345\",\n TeamId = \"9987654321\",\n ApiKeyId = apple.Uid,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebase\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tapple, err := projects.NewApiKey(ctx, \"apple\", \u0026projects.ApiKeyArgs{\n\t\t\tName: pulumi.String(\"api-key\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name Full\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tRestrictions: \u0026projects.ApiKeyRestrictionsArgs{\n\t\t\t\tIosKeyRestrictions: \u0026projects.ApiKeyRestrictionsIosKeyRestrictionsArgs{\n\t\t\t\t\tAllowedBundleIds: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"apple.app.12345\"),\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\t_, err = firebase.NewAppleApp(ctx, \"full\", \u0026firebase.AppleAppArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name Full\"),\n\t\t\tBundleId: pulumi.String(\"apple.app.12345\"),\n\t\t\tAppStoreId: pulumi.String(\"12345\"),\n\t\t\tTeamId: pulumi.String(\"9987654321\"),\n\t\t\tApiKeyId: apple.Uid,\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.gcp.projects.ApiKey;\nimport com.pulumi.gcp.projects.ApiKeyArgs;\nimport com.pulumi.gcp.projects.inputs.ApiKeyRestrictionsArgs;\nimport com.pulumi.gcp.projects.inputs.ApiKeyRestrictionsIosKeyRestrictionsArgs;\nimport com.pulumi.gcp.firebase.AppleApp;\nimport com.pulumi.gcp.firebase.AppleAppArgs;\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 apple = new ApiKey(\"apple\", ApiKeyArgs.builder()\n .name(\"api-key\")\n .displayName(\"Display Name Full\")\n .project(\"my-project-name\")\n .restrictions(ApiKeyRestrictionsArgs.builder()\n .iosKeyRestrictions(ApiKeyRestrictionsIosKeyRestrictionsArgs.builder()\n .allowedBundleIds(\"apple.app.12345\")\n .build())\n .build())\n .build());\n\n var full = new AppleApp(\"full\", AppleAppArgs.builder()\n .project(\"my-project-name\")\n .displayName(\"Display Name Full\")\n .bundleId(\"apple.app.12345\")\n .appStoreId(\"12345\")\n .teamId(\"9987654321\")\n .apiKeyId(apple.uid())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n full:\n type: gcp:firebase:AppleApp\n properties:\n project: my-project-name\n displayName: Display Name Full\n bundleId: apple.app.12345\n appStoreId: '12345'\n teamId: '9987654321'\n apiKeyId: ${apple.uid}\n apple:\n type: gcp:projects:ApiKey\n properties:\n name: api-key\n displayName: Display Name Full\n project: my-project-name\n restrictions:\n iosKeyRestrictions:\n allowedBundleIds:\n - apple.app.12345\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAppleApp can be imported using any of these accepted formats:\n\n* `{{project}} projects/{{project}}/iosApps/{{app_id}}`\n\n* `projects/{{project}}/iosApps/{{app_id}}`\n\n* `{{project}}/{{project}}/{{app_id}}`\n\n* `iosApps/{{app_id}}`\n\n* `{{app_id}}`\n\nWhen using the `pulumi import` command, AppleApp can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firebase/appleApp:AppleApp default \"{{project}} projects/{{project}}/iosApps/{{app_id}}\"\n```\n\n```sh\n$ pulumi import gcp:firebase/appleApp:AppleApp default projects/{{project}}/iosApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/appleApp:AppleApp default {{project}}/{{project}}/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/appleApp:AppleApp default iosApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/appleApp:AppleApp default {{app_id}}\n```\n\n", "properties": { "apiKeyId": { "type": "string", @@ -210204,7 +212944,7 @@ } }, "gcp:firebase/webApp:WebApp": { - "description": "A Google Cloud Firebase web application instance\n\nTo get more information about WebApp, see:\n\n* [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.webApps)\n* How-to Guides\n * [Official Documentation](https://firebase.google.com/)\n\n## Example Usage\n\n### Firebase Web App Custom Api Key\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst web = new gcp.projects.ApiKey(\"web\", {\n project: \"my-project-name\",\n name: \"api-key\",\n displayName: \"Display Name\",\n restrictions: {\n browserKeyRestrictions: {\n allowedReferrers: [\"*\"],\n },\n },\n});\nconst _default = new gcp.firebase.WebApp(\"default\", {\n project: \"my-project-name\",\n displayName: \"Display Name\",\n apiKeyId: web.uid,\n deletionPolicy: \"DELETE\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nweb = gcp.projects.ApiKey(\"web\",\n project=\"my-project-name\",\n name=\"api-key\",\n display_name=\"Display Name\",\n restrictions={\n \"browser_key_restrictions\": {\n \"allowed_referrers\": [\"*\"],\n },\n })\ndefault = gcp.firebase.WebApp(\"default\",\n project=\"my-project-name\",\n display_name=\"Display Name\",\n api_key_id=web.uid,\n deletion_policy=\"DELETE\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var web = new Gcp.Projects.ApiKey(\"web\", new()\n {\n Project = \"my-project-name\",\n Name = \"api-key\",\n DisplayName = \"Display Name\",\n Restrictions = new Gcp.Projects.Inputs.ApiKeyRestrictionsArgs\n {\n BrowserKeyRestrictions = new Gcp.Projects.Inputs.ApiKeyRestrictionsBrowserKeyRestrictionsArgs\n {\n AllowedReferrers = new[]\n {\n \"*\",\n },\n },\n },\n });\n\n var @default = new Gcp.Firebase.WebApp(\"default\", new()\n {\n Project = \"my-project-name\",\n DisplayName = \"Display Name\",\n ApiKeyId = web.Uid,\n DeletionPolicy = \"DELETE\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebase\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tweb, err := projects.NewApiKey(ctx, \"web\", \u0026projects.ApiKeyArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"api-key\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name\"),\n\t\t\tRestrictions: \u0026projects.ApiKeyRestrictionsArgs{\n\t\t\t\tBrowserKeyRestrictions: \u0026projects.ApiKeyRestrictionsBrowserKeyRestrictionsArgs{\n\t\t\t\t\tAllowedReferrers: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"*\"),\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\t_, err = firebase.NewWebApp(ctx, \"default\", \u0026firebase.WebAppArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name\"),\n\t\t\tApiKeyId: web.Uid,\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\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.gcp.projects.ApiKey;\nimport com.pulumi.gcp.projects.ApiKeyArgs;\nimport com.pulumi.gcp.projects.inputs.ApiKeyRestrictionsArgs;\nimport com.pulumi.gcp.projects.inputs.ApiKeyRestrictionsBrowserKeyRestrictionsArgs;\nimport com.pulumi.gcp.firebase.WebApp;\nimport com.pulumi.gcp.firebase.WebAppArgs;\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 web = new ApiKey(\"web\", ApiKeyArgs.builder()\n .project(\"my-project-name\")\n .name(\"api-key\")\n .displayName(\"Display Name\")\n .restrictions(ApiKeyRestrictionsArgs.builder()\n .browserKeyRestrictions(ApiKeyRestrictionsBrowserKeyRestrictionsArgs.builder()\n .allowedReferrers(\"*\")\n .build())\n .build())\n .build());\n\n var default_ = new WebApp(\"default\", WebAppArgs.builder()\n .project(\"my-project-name\")\n .displayName(\"Display Name\")\n .apiKeyId(web.uid())\n .deletionPolicy(\"DELETE\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:firebase:WebApp\n properties:\n project: my-project-name\n displayName: Display Name\n apiKeyId: ${web.uid}\n deletionPolicy: DELETE\n web:\n type: gcp:projects:ApiKey\n properties:\n project: my-project-name\n name: api-key\n displayName: Display Name\n restrictions:\n browserKeyRestrictions:\n allowedReferrers:\n - '*'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nWebApp can be imported using any of these accepted formats:\n\n* `{{project}} projects/{{project}}/webApps/{{app_id}}`\n\n* `projects/{{project}}/webApps/{{app_id}}`\n\n* `{{project}}/{{project}}/{{app_id}}`\n\n* `webApps/{{app_id}}`\n\n* `{{app_id}}`\n\nWhen using the `pulumi import` command, WebApp can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firebase/webApp:WebApp default {{project}} projects/{{project}}/webApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/webApp:WebApp default projects/{{project}}/webApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/webApp:WebApp default {{project}}/{{project}}/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/webApp:WebApp default webApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/webApp:WebApp default {{app_id}}\n```\n\n", + "description": "A Google Cloud Firebase web application instance\n\nTo get more information about WebApp, see:\n\n* [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.webApps)\n* How-to Guides\n * [Official Documentation](https://firebase.google.com/)\n\n## Example Usage\n\n### Firebase Web App Custom Api Key\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst web = new gcp.projects.ApiKey(\"web\", {\n project: \"my-project-name\",\n name: \"api-key\",\n displayName: \"Display Name\",\n restrictions: {\n browserKeyRestrictions: {\n allowedReferrers: [\"*\"],\n },\n },\n});\nconst _default = new gcp.firebase.WebApp(\"default\", {\n project: \"my-project-name\",\n displayName: \"Display Name\",\n apiKeyId: web.uid,\n deletionPolicy: \"DELETE\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nweb = gcp.projects.ApiKey(\"web\",\n project=\"my-project-name\",\n name=\"api-key\",\n display_name=\"Display Name\",\n restrictions={\n \"browser_key_restrictions\": {\n \"allowed_referrers\": [\"*\"],\n },\n })\ndefault = gcp.firebase.WebApp(\"default\",\n project=\"my-project-name\",\n display_name=\"Display Name\",\n api_key_id=web.uid,\n deletion_policy=\"DELETE\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var web = new Gcp.Projects.ApiKey(\"web\", new()\n {\n Project = \"my-project-name\",\n Name = \"api-key\",\n DisplayName = \"Display Name\",\n Restrictions = new Gcp.Projects.Inputs.ApiKeyRestrictionsArgs\n {\n BrowserKeyRestrictions = new Gcp.Projects.Inputs.ApiKeyRestrictionsBrowserKeyRestrictionsArgs\n {\n AllowedReferrers = new[]\n {\n \"*\",\n },\n },\n },\n });\n\n var @default = new Gcp.Firebase.WebApp(\"default\", new()\n {\n Project = \"my-project-name\",\n DisplayName = \"Display Name\",\n ApiKeyId = web.Uid,\n DeletionPolicy = \"DELETE\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firebase\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tweb, err := projects.NewApiKey(ctx, \"web\", \u0026projects.ApiKeyArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"api-key\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name\"),\n\t\t\tRestrictions: \u0026projects.ApiKeyRestrictionsArgs{\n\t\t\t\tBrowserKeyRestrictions: \u0026projects.ApiKeyRestrictionsBrowserKeyRestrictionsArgs{\n\t\t\t\t\tAllowedReferrers: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"*\"),\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\t_, err = firebase.NewWebApp(ctx, \"default\", \u0026firebase.WebAppArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDisplayName: pulumi.String(\"Display Name\"),\n\t\t\tApiKeyId: web.Uid,\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\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.gcp.projects.ApiKey;\nimport com.pulumi.gcp.projects.ApiKeyArgs;\nimport com.pulumi.gcp.projects.inputs.ApiKeyRestrictionsArgs;\nimport com.pulumi.gcp.projects.inputs.ApiKeyRestrictionsBrowserKeyRestrictionsArgs;\nimport com.pulumi.gcp.firebase.WebApp;\nimport com.pulumi.gcp.firebase.WebAppArgs;\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 web = new ApiKey(\"web\", ApiKeyArgs.builder()\n .project(\"my-project-name\")\n .name(\"api-key\")\n .displayName(\"Display Name\")\n .restrictions(ApiKeyRestrictionsArgs.builder()\n .browserKeyRestrictions(ApiKeyRestrictionsBrowserKeyRestrictionsArgs.builder()\n .allowedReferrers(\"*\")\n .build())\n .build())\n .build());\n\n var default_ = new WebApp(\"default\", WebAppArgs.builder()\n .project(\"my-project-name\")\n .displayName(\"Display Name\")\n .apiKeyId(web.uid())\n .deletionPolicy(\"DELETE\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:firebase:WebApp\n properties:\n project: my-project-name\n displayName: Display Name\n apiKeyId: ${web.uid}\n deletionPolicy: DELETE\n web:\n type: gcp:projects:ApiKey\n properties:\n project: my-project-name\n name: api-key\n displayName: Display Name\n restrictions:\n browserKeyRestrictions:\n allowedReferrers:\n - '*'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nWebApp can be imported using any of these accepted formats:\n\n* `{{project}} projects/{{project}}/webApps/{{app_id}}`\n\n* `projects/{{project}}/webApps/{{app_id}}`\n\n* `{{project}}/{{project}}/{{app_id}}`\n\n* `webApps/{{app_id}}`\n\n* `{{app_id}}`\n\nWhen using the `pulumi import` command, WebApp can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firebase/webApp:WebApp default \"{{project}} projects/{{project}}/webApps/{{app_id}}\"\n```\n\n```sh\n$ pulumi import gcp:firebase/webApp:WebApp default projects/{{project}}/webApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/webApp:WebApp default {{project}}/{{project}}/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/webApp:WebApp default webApps/{{app_id}}\n```\n\n```sh\n$ pulumi import gcp:firebase/webApp:WebApp default {{app_id}}\n```\n\n", "properties": { "apiKeyId": { "type": "string", @@ -211038,7 +213778,7 @@ } }, "gcp:firestore/index:Index": { - "description": "Cloud Firestore indexes enable simple and complex queries against documents in a database.\n Both Firestore Native and Datastore Mode indexes are supported.\n This resource manages composite indexes and not single field indexes.\n To manage single field indexes, use the `gcp.firestore.Field` resource instead.\n\n\nTo get more information about Index, see:\n\n* [API documentation](https://cloud.google.com/firestore/docs/reference/rest/v1/projects.databases.collectionGroups.indexes)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/firestore/docs/query-data/indexing)\n\n\u003e **Warning:** This resource creates a Firestore Index on a project that already has\na Firestore database. If you haven't already created it, you may\ncreate a `gcp.firestore.Database` resource and `location_id` set\nto your chosen location. If you wish to use App Engine, you may\ninstead create a `gcp.appengine.Application` resource.\nYour Firestore location will be the same as the App Engine location specified.\n\n## Example Usage\n\n### Firestore Index Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_DISABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst my_index = new gcp.firestore.Index(\"my-index\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"atestcollection\",\n fields: [\n {\n fieldPath: \"name\",\n order: \"ASCENDING\",\n },\n {\n fieldPath: \"description\",\n order: \"DESCENDING\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_DISABLED\",\n deletion_policy=\"DELETE\")\nmy_index = gcp.firestore.Index(\"my-index\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"atestcollection\",\n fields=[\n {\n \"field_path\": \"name\",\n \"order\": \"ASCENDING\",\n },\n {\n \"field_path\": \"description\",\n \"order\": \"DESCENDING\",\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_DISABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var my_index = new Gcp.Firestore.Index(\"my-index\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"atestcollection\",\n Fields = new[]\n {\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"name\",\n Order = \"ASCENDING\",\n },\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"description\",\n Order = \"DESCENDING\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_DISABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewIndex(ctx, \"my-index\", \u0026firestore.IndexArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"atestcollection\"),\n\t\t\tFields: firestore.IndexFieldArray{\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"name\"),\n\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t},\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"description\"),\n\t\t\t\t\tOrder: pulumi.String(\"DESCENDING\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Index;\nimport com.pulumi.gcp.firestore.IndexArgs;\nimport com.pulumi.gcp.firestore.inputs.IndexFieldArgs;\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 database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_DISABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var my_index = new Index(\"my-index\", IndexArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"atestcollection\")\n .fields( \n IndexFieldArgs.builder()\n .fieldPath(\"name\")\n .order(\"ASCENDING\")\n .build(),\n IndexFieldArgs.builder()\n .fieldPath(\"description\")\n .order(\"DESCENDING\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_DISABLED\n deletionPolicy: DELETE\n my-index:\n type: gcp:firestore:Index\n properties:\n project: my-project-name\n database: ${database.name}\n collection: atestcollection\n fields:\n - fieldPath: name\n order: ASCENDING\n - fieldPath: description\n order: DESCENDING\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore Index Datastore Mode\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id-dm\",\n locationId: \"nam5\",\n type: \"DATASTORE_MODE\",\n deleteProtectionState: \"DELETE_PROTECTION_DISABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst my_index = new gcp.firestore.Index(\"my-index\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"atestcollection\",\n queryScope: \"COLLECTION_RECURSIVE\",\n apiScope: \"DATASTORE_MODE_API\",\n fields: [\n {\n fieldPath: \"name\",\n order: \"ASCENDING\",\n },\n {\n fieldPath: \"description\",\n order: \"DESCENDING\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id-dm\",\n location_id=\"nam5\",\n type=\"DATASTORE_MODE\",\n delete_protection_state=\"DELETE_PROTECTION_DISABLED\",\n deletion_policy=\"DELETE\")\nmy_index = gcp.firestore.Index(\"my-index\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"atestcollection\",\n query_scope=\"COLLECTION_RECURSIVE\",\n api_scope=\"DATASTORE_MODE_API\",\n fields=[\n {\n \"field_path\": \"name\",\n \"order\": \"ASCENDING\",\n },\n {\n \"field_path\": \"description\",\n \"order\": \"DESCENDING\",\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id-dm\",\n LocationId = \"nam5\",\n Type = \"DATASTORE_MODE\",\n DeleteProtectionState = \"DELETE_PROTECTION_DISABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var my_index = new Gcp.Firestore.Index(\"my-index\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"atestcollection\",\n QueryScope = \"COLLECTION_RECURSIVE\",\n ApiScope = \"DATASTORE_MODE_API\",\n Fields = new[]\n {\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"name\",\n Order = \"ASCENDING\",\n },\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"description\",\n Order = \"DESCENDING\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id-dm\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"DATASTORE_MODE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_DISABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewIndex(ctx, \"my-index\", \u0026firestore.IndexArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"atestcollection\"),\n\t\t\tQueryScope: pulumi.String(\"COLLECTION_RECURSIVE\"),\n\t\t\tApiScope: pulumi.String(\"DATASTORE_MODE_API\"),\n\t\t\tFields: firestore.IndexFieldArray{\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"name\"),\n\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t},\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"description\"),\n\t\t\t\t\tOrder: pulumi.String(\"DESCENDING\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Index;\nimport com.pulumi.gcp.firestore.IndexArgs;\nimport com.pulumi.gcp.firestore.inputs.IndexFieldArgs;\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 database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id-dm\")\n .locationId(\"nam5\")\n .type(\"DATASTORE_MODE\")\n .deleteProtectionState(\"DELETE_PROTECTION_DISABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var my_index = new Index(\"my-index\", IndexArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"atestcollection\")\n .queryScope(\"COLLECTION_RECURSIVE\")\n .apiScope(\"DATASTORE_MODE_API\")\n .fields( \n IndexFieldArgs.builder()\n .fieldPath(\"name\")\n .order(\"ASCENDING\")\n .build(),\n IndexFieldArgs.builder()\n .fieldPath(\"description\")\n .order(\"DESCENDING\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id-dm\n locationId: nam5\n type: DATASTORE_MODE\n deleteProtectionState: DELETE_PROTECTION_DISABLED\n deletionPolicy: DELETE\n my-index:\n type: gcp:firestore:Index\n properties:\n project: my-project-name\n database: ${database.name}\n collection: atestcollection\n queryScope: COLLECTION_RECURSIVE\n apiScope: DATASTORE_MODE_API\n fields:\n - fieldPath: name\n order: ASCENDING\n - fieldPath: description\n order: DESCENDING\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore Index Vector\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id-vector\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_DISABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst my_index = new gcp.firestore.Index(\"my-index\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"atestcollection\",\n fields: [\n {\n fieldPath: \"field_name\",\n order: \"ASCENDING\",\n },\n {\n fieldPath: \"__name__\",\n order: \"ASCENDING\",\n },\n {\n fieldPath: \"description\",\n vectorConfig: {\n dimension: 128,\n flat: {},\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id-vector\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_DISABLED\",\n deletion_policy=\"DELETE\")\nmy_index = gcp.firestore.Index(\"my-index\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"atestcollection\",\n fields=[\n {\n \"field_path\": \"field_name\",\n \"order\": \"ASCENDING\",\n },\n {\n \"field_path\": \"__name__\",\n \"order\": \"ASCENDING\",\n },\n {\n \"field_path\": \"description\",\n \"vector_config\": {\n \"dimension\": 128,\n \"flat\": {},\n },\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id-vector\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_DISABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var my_index = new Gcp.Firestore.Index(\"my-index\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"atestcollection\",\n Fields = new[]\n {\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"field_name\",\n Order = \"ASCENDING\",\n },\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"__name__\",\n Order = \"ASCENDING\",\n },\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"description\",\n VectorConfig = new Gcp.Firestore.Inputs.IndexFieldVectorConfigArgs\n {\n Dimension = 128,\n Flat = null,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id-vector\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_DISABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewIndex(ctx, \"my-index\", \u0026firestore.IndexArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"atestcollection\"),\n\t\t\tFields: firestore.IndexFieldArray{\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"field_name\"),\n\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t},\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"__name__\"),\n\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t},\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"description\"),\n\t\t\t\t\tVectorConfig: \u0026firestore.IndexFieldVectorConfigArgs{\n\t\t\t\t\t\tDimension: pulumi.Int(128),\n\t\t\t\t\t\tFlat: \u0026firestore.IndexFieldVectorConfigFlatArgs{},\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\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.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Index;\nimport com.pulumi.gcp.firestore.IndexArgs;\nimport com.pulumi.gcp.firestore.inputs.IndexFieldArgs;\nimport com.pulumi.gcp.firestore.inputs.IndexFieldVectorConfigArgs;\nimport com.pulumi.gcp.firestore.inputs.IndexFieldVectorConfigFlatArgs;\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 database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id-vector\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_DISABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var my_index = new Index(\"my-index\", IndexArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"atestcollection\")\n .fields( \n IndexFieldArgs.builder()\n .fieldPath(\"field_name\")\n .order(\"ASCENDING\")\n .build(),\n IndexFieldArgs.builder()\n .fieldPath(\"__name__\")\n .order(\"ASCENDING\")\n .build(),\n IndexFieldArgs.builder()\n .fieldPath(\"description\")\n .vectorConfig(IndexFieldVectorConfigArgs.builder()\n .dimension(128)\n .flat()\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id-vector\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_DISABLED\n deletionPolicy: DELETE\n my-index:\n type: gcp:firestore:Index\n properties:\n project: my-project-name\n database: ${database.name}\n collection: atestcollection\n fields:\n - fieldPath: field_name\n order: ASCENDING\n - fieldPath: __name__\n order: ASCENDING\n - fieldPath: description\n vectorConfig:\n dimension: 128\n flat: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nIndex can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Index can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firestore/index:Index default {{name}}\n```\n\n", + "description": "Cloud Firestore indexes enable simple and complex queries against documents in a database.\n Both Firestore Native and Datastore Mode indexes are supported.\n This resource manages composite indexes and not single field indexes.\n To manage single field indexes, use the `gcp.firestore.Field` resource instead.\n\n\nTo get more information about Index, see:\n\n* [API documentation](https://cloud.google.com/firestore/docs/reference/rest/v1/projects.databases.collectionGroups.indexes)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/firestore/docs/query-data/indexing)\n\n\u003e **Warning:** This resource creates a Firestore Index on a project that already has\na Firestore database. If you haven't already created it, you may\ncreate a `gcp.firestore.Database` resource and `location_id` set\nto your chosen location. If you wish to use App Engine, you may\ninstead create a `gcp.appengine.Application` resource.\nYour Firestore location will be the same as the App Engine location specified.\n\n## Example Usage\n\n### Firestore Index Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_DISABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst my_index = new gcp.firestore.Index(\"my-index\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"atestcollection\",\n fields: [\n {\n fieldPath: \"name\",\n order: \"ASCENDING\",\n },\n {\n fieldPath: \"description\",\n order: \"DESCENDING\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_DISABLED\",\n deletion_policy=\"DELETE\")\nmy_index = gcp.firestore.Index(\"my-index\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"atestcollection\",\n fields=[\n {\n \"field_path\": \"name\",\n \"order\": \"ASCENDING\",\n },\n {\n \"field_path\": \"description\",\n \"order\": \"DESCENDING\",\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_DISABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var my_index = new Gcp.Firestore.Index(\"my-index\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"atestcollection\",\n Fields = new[]\n {\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"name\",\n Order = \"ASCENDING\",\n },\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"description\",\n Order = \"DESCENDING\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_DISABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewIndex(ctx, \"my-index\", \u0026firestore.IndexArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"atestcollection\"),\n\t\t\tFields: firestore.IndexFieldArray{\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"name\"),\n\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t},\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"description\"),\n\t\t\t\t\tOrder: pulumi.String(\"DESCENDING\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Index;\nimport com.pulumi.gcp.firestore.IndexArgs;\nimport com.pulumi.gcp.firestore.inputs.IndexFieldArgs;\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 database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_DISABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var my_index = new Index(\"my-index\", IndexArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"atestcollection\")\n .fields( \n IndexFieldArgs.builder()\n .fieldPath(\"name\")\n .order(\"ASCENDING\")\n .build(),\n IndexFieldArgs.builder()\n .fieldPath(\"description\")\n .order(\"DESCENDING\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_DISABLED\n deletionPolicy: DELETE\n my-index:\n type: gcp:firestore:Index\n properties:\n project: my-project-name\n database: ${database.name}\n collection: atestcollection\n fields:\n - fieldPath: name\n order: ASCENDING\n - fieldPath: description\n order: DESCENDING\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore Index Datastore Mode\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id-dm\",\n locationId: \"nam5\",\n type: \"DATASTORE_MODE\",\n deleteProtectionState: \"DELETE_PROTECTION_DISABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst my_index = new gcp.firestore.Index(\"my-index\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"atestcollection\",\n queryScope: \"COLLECTION_RECURSIVE\",\n apiScope: \"DATASTORE_MODE_API\",\n fields: [\n {\n fieldPath: \"name\",\n order: \"ASCENDING\",\n },\n {\n fieldPath: \"description\",\n order: \"DESCENDING\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id-dm\",\n location_id=\"nam5\",\n type=\"DATASTORE_MODE\",\n delete_protection_state=\"DELETE_PROTECTION_DISABLED\",\n deletion_policy=\"DELETE\")\nmy_index = gcp.firestore.Index(\"my-index\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"atestcollection\",\n query_scope=\"COLLECTION_RECURSIVE\",\n api_scope=\"DATASTORE_MODE_API\",\n fields=[\n {\n \"field_path\": \"name\",\n \"order\": \"ASCENDING\",\n },\n {\n \"field_path\": \"description\",\n \"order\": \"DESCENDING\",\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id-dm\",\n LocationId = \"nam5\",\n Type = \"DATASTORE_MODE\",\n DeleteProtectionState = \"DELETE_PROTECTION_DISABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var my_index = new Gcp.Firestore.Index(\"my-index\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"atestcollection\",\n QueryScope = \"COLLECTION_RECURSIVE\",\n ApiScope = \"DATASTORE_MODE_API\",\n Fields = new[]\n {\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"name\",\n Order = \"ASCENDING\",\n },\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"description\",\n Order = \"DESCENDING\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id-dm\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"DATASTORE_MODE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_DISABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewIndex(ctx, \"my-index\", \u0026firestore.IndexArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"atestcollection\"),\n\t\t\tQueryScope: pulumi.String(\"COLLECTION_RECURSIVE\"),\n\t\t\tApiScope: pulumi.String(\"DATASTORE_MODE_API\"),\n\t\t\tFields: firestore.IndexFieldArray{\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"name\"),\n\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t},\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"description\"),\n\t\t\t\t\tOrder: pulumi.String(\"DESCENDING\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Index;\nimport com.pulumi.gcp.firestore.IndexArgs;\nimport com.pulumi.gcp.firestore.inputs.IndexFieldArgs;\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 database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id-dm\")\n .locationId(\"nam5\")\n .type(\"DATASTORE_MODE\")\n .deleteProtectionState(\"DELETE_PROTECTION_DISABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var my_index = new Index(\"my-index\", IndexArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"atestcollection\")\n .queryScope(\"COLLECTION_RECURSIVE\")\n .apiScope(\"DATASTORE_MODE_API\")\n .fields( \n IndexFieldArgs.builder()\n .fieldPath(\"name\")\n .order(\"ASCENDING\")\n .build(),\n IndexFieldArgs.builder()\n .fieldPath(\"description\")\n .order(\"DESCENDING\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id-dm\n locationId: nam5\n type: DATASTORE_MODE\n deleteProtectionState: DELETE_PROTECTION_DISABLED\n deletionPolicy: DELETE\n my-index:\n type: gcp:firestore:Index\n properties:\n project: my-project-name\n database: ${database.name}\n collection: atestcollection\n queryScope: COLLECTION_RECURSIVE\n apiScope: DATASTORE_MODE_API\n fields:\n - fieldPath: name\n order: ASCENDING\n - fieldPath: description\n order: DESCENDING\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore Index Vector\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id-vector\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_DISABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst my_index = new gcp.firestore.Index(\"my-index\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"atestcollection\",\n fields: [\n {\n fieldPath: \"field_name\",\n order: \"ASCENDING\",\n },\n {\n fieldPath: \"__name__\",\n order: \"ASCENDING\",\n },\n {\n fieldPath: \"description\",\n vectorConfig: {\n dimension: 128,\n flat: {},\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id-vector\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_DISABLED\",\n deletion_policy=\"DELETE\")\nmy_index = gcp.firestore.Index(\"my-index\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"atestcollection\",\n fields=[\n {\n \"field_path\": \"field_name\",\n \"order\": \"ASCENDING\",\n },\n {\n \"field_path\": \"__name__\",\n \"order\": \"ASCENDING\",\n },\n {\n \"field_path\": \"description\",\n \"vector_config\": {\n \"dimension\": 128,\n \"flat\": {},\n },\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id-vector\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_DISABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var my_index = new Gcp.Firestore.Index(\"my-index\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"atestcollection\",\n Fields = new[]\n {\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"field_name\",\n Order = \"ASCENDING\",\n },\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"__name__\",\n Order = \"ASCENDING\",\n },\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"description\",\n VectorConfig = new Gcp.Firestore.Inputs.IndexFieldVectorConfigArgs\n {\n Dimension = 128,\n Flat = null,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id-vector\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_DISABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewIndex(ctx, \"my-index\", \u0026firestore.IndexArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"atestcollection\"),\n\t\t\tFields: firestore.IndexFieldArray{\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"field_name\"),\n\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t},\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"__name__\"),\n\t\t\t\t\tOrder: pulumi.String(\"ASCENDING\"),\n\t\t\t\t},\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"description\"),\n\t\t\t\t\tVectorConfig: \u0026firestore.IndexFieldVectorConfigArgs{\n\t\t\t\t\t\tDimension: pulumi.Int(128),\n\t\t\t\t\t\tFlat: \u0026firestore.IndexFieldVectorConfigFlatArgs{},\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\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.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Index;\nimport com.pulumi.gcp.firestore.IndexArgs;\nimport com.pulumi.gcp.firestore.inputs.IndexFieldArgs;\nimport com.pulumi.gcp.firestore.inputs.IndexFieldVectorConfigArgs;\nimport com.pulumi.gcp.firestore.inputs.IndexFieldVectorConfigFlatArgs;\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 database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id-vector\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_DISABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var my_index = new Index(\"my-index\", IndexArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"atestcollection\")\n .fields( \n IndexFieldArgs.builder()\n .fieldPath(\"field_name\")\n .order(\"ASCENDING\")\n .build(),\n IndexFieldArgs.builder()\n .fieldPath(\"__name__\")\n .order(\"ASCENDING\")\n .build(),\n IndexFieldArgs.builder()\n .fieldPath(\"description\")\n .vectorConfig(IndexFieldVectorConfigArgs.builder()\n .dimension(128)\n .flat()\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id-vector\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_DISABLED\n deletionPolicy: DELETE\n my-index:\n type: gcp:firestore:Index\n properties:\n project: my-project-name\n database: ${database.name}\n collection: atestcollection\n fields:\n - fieldPath: field_name\n order: ASCENDING\n - fieldPath: __name__\n order: ASCENDING\n - fieldPath: description\n vectorConfig:\n dimension: 128\n flat: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Firestore Index Name Descending\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst database = new gcp.firestore.Database(\"database\", {\n project: \"my-project-name\",\n name: \"database-id\",\n locationId: \"nam5\",\n type: \"FIRESTORE_NATIVE\",\n deleteProtectionState: \"DELETE_PROTECTION_DISABLED\",\n deletionPolicy: \"DELETE\",\n});\nconst my_index = new gcp.firestore.Index(\"my-index\", {\n project: \"my-project-name\",\n database: database.name,\n collection: \"atestcollection\",\n fields: [{\n fieldPath: \"__name__\",\n order: \"DESCENDING\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndatabase = gcp.firestore.Database(\"database\",\n project=\"my-project-name\",\n name=\"database-id\",\n location_id=\"nam5\",\n type=\"FIRESTORE_NATIVE\",\n delete_protection_state=\"DELETE_PROTECTION_DISABLED\",\n deletion_policy=\"DELETE\")\nmy_index = gcp.firestore.Index(\"my-index\",\n project=\"my-project-name\",\n database=database.name,\n collection=\"atestcollection\",\n fields=[{\n \"field_path\": \"__name__\",\n \"order\": \"DESCENDING\",\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var database = new Gcp.Firestore.Database(\"database\", new()\n {\n Project = \"my-project-name\",\n Name = \"database-id\",\n LocationId = \"nam5\",\n Type = \"FIRESTORE_NATIVE\",\n DeleteProtectionState = \"DELETE_PROTECTION_DISABLED\",\n DeletionPolicy = \"DELETE\",\n });\n\n var my_index = new Gcp.Firestore.Index(\"my-index\", new()\n {\n Project = \"my-project-name\",\n Database = database.Name,\n Collection = \"atestcollection\",\n Fields = new[]\n {\n new Gcp.Firestore.Inputs.IndexFieldArgs\n {\n FieldPath = \"__name__\",\n Order = \"DESCENDING\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/firestore\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdatabase, err := firestore.NewDatabase(ctx, \"database\", \u0026firestore.DatabaseArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tName: pulumi.String(\"database-id\"),\n\t\t\tLocationId: pulumi.String(\"nam5\"),\n\t\t\tType: pulumi.String(\"FIRESTORE_NATIVE\"),\n\t\t\tDeleteProtectionState: pulumi.String(\"DELETE_PROTECTION_DISABLED\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firestore.NewIndex(ctx, \"my-index\", \u0026firestore.IndexArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDatabase: database.Name,\n\t\t\tCollection: pulumi.String(\"atestcollection\"),\n\t\t\tFields: firestore.IndexFieldArray{\n\t\t\t\t\u0026firestore.IndexFieldArgs{\n\t\t\t\t\tFieldPath: pulumi.String(\"__name__\"),\n\t\t\t\t\tOrder: pulumi.String(\"DESCENDING\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.firestore.Database;\nimport com.pulumi.gcp.firestore.DatabaseArgs;\nimport com.pulumi.gcp.firestore.Index;\nimport com.pulumi.gcp.firestore.IndexArgs;\nimport com.pulumi.gcp.firestore.inputs.IndexFieldArgs;\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 database = new Database(\"database\", DatabaseArgs.builder()\n .project(\"my-project-name\")\n .name(\"database-id\")\n .locationId(\"nam5\")\n .type(\"FIRESTORE_NATIVE\")\n .deleteProtectionState(\"DELETE_PROTECTION_DISABLED\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var my_index = new Index(\"my-index\", IndexArgs.builder()\n .project(\"my-project-name\")\n .database(database.name())\n .collection(\"atestcollection\")\n .fields(IndexFieldArgs.builder()\n .fieldPath(\"__name__\")\n .order(\"DESCENDING\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n database:\n type: gcp:firestore:Database\n properties:\n project: my-project-name\n name: database-id\n locationId: nam5\n type: FIRESTORE_NATIVE\n deleteProtectionState: DELETE_PROTECTION_DISABLED\n deletionPolicy: DELETE\n my-index:\n type: gcp:firestore:Index\n properties:\n project: my-project-name\n database: ${database.name}\n collection: atestcollection\n fields:\n - fieldPath: __name__\n order: DESCENDING\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nIndex can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Index can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:firestore/index:Index default {{name}}\n```\n\n", "properties": { "apiScope": { "type": "string", @@ -217369,7 +220109,7 @@ "properties": { "encryptionSpec": { "$ref": "#/types/gcp:healthcare/DatasetEncryptionSpec:DatasetEncryptionSpec", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "location": { "type": "string", @@ -217403,7 +220143,7 @@ "inputProperties": { "encryptionSpec": { "$ref": "#/types/gcp:healthcare/DatasetEncryptionSpec:DatasetEncryptionSpec", - "description": "A nested object resource\nStructure is documented below.\n", + "description": "A nested object resource.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "location": { @@ -217434,7 +220174,7 @@ "properties": { "encryptionSpec": { "$ref": "#/types/gcp:healthcare/DatasetEncryptionSpec:DatasetEncryptionSpec", - "description": "A nested object resource\nStructure is documented below.\n", + "description": "A nested object resource.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "location": { @@ -217725,7 +220465,7 @@ }, "notificationConfig": { "$ref": "#/types/gcp:healthcare/DicomStoreNotificationConfig:DicomStoreNotificationConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "pulumiLabels": { "type": "object", @@ -217774,7 +220514,7 @@ }, "notificationConfig": { "$ref": "#/types/gcp:healthcare/DicomStoreNotificationConfig:DicomStoreNotificationConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "streamConfigs": { "type": "array", @@ -217817,7 +220557,7 @@ }, "notificationConfig": { "$ref": "#/types/gcp:healthcare/DicomStoreNotificationConfig:DicomStoreNotificationConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "pulumiLabels": { "type": "object", @@ -218131,7 +220871,7 @@ }, "notificationConfig": { "$ref": "#/types/gcp:healthcare/FhirStoreNotificationConfig:FhirStoreNotificationConfig", - "description": "(Optional, Deprecated)\nA nested object resource\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", + "description": "(Optional, Deprecated)\nA nested object resource.\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", "deprecationMessage": "`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead." }, "notificationConfigs": { @@ -218224,7 +220964,7 @@ }, "notificationConfig": { "$ref": "#/types/gcp:healthcare/FhirStoreNotificationConfig:FhirStoreNotificationConfig", - "description": "(Optional, Deprecated)\nA nested object resource\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", + "description": "(Optional, Deprecated)\nA nested object resource.\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", "deprecationMessage": "`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead." }, "notificationConfigs": { @@ -218311,7 +221051,7 @@ }, "notificationConfig": { "$ref": "#/types/gcp:healthcare/FhirStoreNotificationConfig:FhirStoreNotificationConfig", - "description": "(Optional, Deprecated)\nA nested object resource\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", + "description": "(Optional, Deprecated)\nA nested object resource.\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", "deprecationMessage": "`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead." }, "notificationConfigs": { @@ -218610,7 +221350,7 @@ }, "notificationConfig": { "$ref": "#/types/gcp:healthcare/Hl7StoreNotificationConfig:Hl7StoreNotificationConfig", - "description": "(Optional, Deprecated)\nA nested object resource\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", + "description": "(Optional, Deprecated)\nA nested object resource.\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", "deprecationMessage": "`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead." }, "notificationConfigs": { @@ -218622,7 +221362,7 @@ }, "parserConfig": { "$ref": "#/types/gcp:healthcare/Hl7StoreParserConfig:Hl7StoreParserConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "pulumiLabels": { "type": "object", @@ -218669,7 +221409,7 @@ }, "notificationConfig": { "$ref": "#/types/gcp:healthcare/Hl7StoreNotificationConfig:Hl7StoreNotificationConfig", - "description": "(Optional, Deprecated)\nA nested object resource\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", + "description": "(Optional, Deprecated)\nA nested object resource.\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", "deprecationMessage": "`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead." }, "notificationConfigs": { @@ -218681,7 +221421,7 @@ }, "parserConfig": { "$ref": "#/types/gcp:healthcare/Hl7StoreParserConfig:Hl7StoreParserConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "rejectDuplicateMessage": { "type": "boolean", @@ -218721,7 +221461,7 @@ }, "notificationConfig": { "$ref": "#/types/gcp:healthcare/Hl7StoreNotificationConfig:Hl7StoreNotificationConfig", - "description": "(Optional, Deprecated)\nA nested object resource\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", + "description": "(Optional, Deprecated)\nA nested object resource.\nStructure is documented below.\n\n\u003e **Warning:** `notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead.\n", "deprecationMessage": "`notification_config` is deprecated and will be removed in a future major release. Use `notification_configs` instead." }, "notificationConfigs": { @@ -218733,7 +221473,7 @@ }, "parserConfig": { "$ref": "#/types/gcp:healthcare/Hl7StoreParserConfig:Hl7StoreParserConfig", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "A nested object resource.\nStructure is documented below.\n" }, "pulumiLabels": { "type": "object", @@ -219363,7 +222103,99 @@ "rules": { "type": "array", "items": { - "$ref": "#/types/gcp:iam/AccessBoundaryPolicyRule:AccessBoundaryPolicyRule" + "$ref": "#/types/gcp:iam/AccessBoundaryPolicyRule:AccessBoundaryPolicyRule" + }, + "description": "Rules to be applied.\nStructure is documented below.\n" + } + }, + "type": "object" + } + }, + "gcp:iam/denyPolicy:DenyPolicy": { + "description": "Represents a collection of denial policies to apply to a given resource.\n\n\nTo get more information about DenyPolicy, see:\n\n* [API documentation](https://cloud.google.com/iam/docs/reference/rest/v2/policies)\n* How-to Guides\n * [Permissions supported in deny policies](https://cloud.google.com/iam/docs/deny-permissions-support)\n\n## Example Usage\n\n### Iam Deny Policy Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst project = new gcp.organizations.Project(\"project\", {\n projectId: \"my-project\",\n name: \"my-project\",\n orgId: \"123456789\",\n billingAccount: \"000000-0000000-0000000-000000\",\n deletionPolicy: \"DELETE\",\n});\nconst test_account = new gcp.serviceaccount.Account(\"test-account\", {\n accountId: \"svc-acc\",\n displayName: \"Test Service Account\",\n project: project.projectId,\n});\nconst example = new gcp.iam.DenyPolicy(\"example\", {\n parent: std.urlencodeOutput({\n input: pulumi.interpolate`cloudresourcemanager.googleapis.com/projects/${project.projectId}`,\n }).apply(invoke =\u003e invoke.result),\n name: \"my-deny-policy\",\n displayName: \"A deny rule\",\n rules: [\n {\n description: \"First rule\",\n denyRule: {\n deniedPrincipals: [\"principalSet://goog/public:all\"],\n denialCondition: {\n title: \"Some expr\",\n expression: \"!resource.matchTag('12345678/env', 'test')\",\n },\n deniedPermissions: [\"cloudresourcemanager.googleapis.com/projects.update\"],\n },\n },\n {\n description: \"Second rule\",\n denyRule: {\n deniedPrincipals: [\"principalSet://goog/public:all\"],\n denialCondition: {\n title: \"Some expr\",\n expression: \"!resource.matchTag('12345678/env', 'test')\",\n },\n deniedPermissions: [\"cloudresourcemanager.googleapis.com/projects.update\"],\n exceptionPrincipals: [pulumi.interpolate`principal://iam.googleapis.com/projects/-/serviceAccounts/${test_account.email}`],\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\nproject = gcp.organizations.Project(\"project\",\n project_id=\"my-project\",\n name=\"my-project\",\n org_id=\"123456789\",\n billing_account=\"000000-0000000-0000000-000000\",\n deletion_policy=\"DELETE\")\ntest_account = gcp.serviceaccount.Account(\"test-account\",\n account_id=\"svc-acc\",\n display_name=\"Test Service Account\",\n project=project.project_id)\nexample = gcp.iam.DenyPolicy(\"example\",\n parent=std.urlencode_output(input=project.project_id.apply(lambda project_id: f\"cloudresourcemanager.googleapis.com/projects/{project_id}\")).apply(lambda invoke: invoke.result),\n name=\"my-deny-policy\",\n display_name=\"A deny rule\",\n rules=[\n {\n \"description\": \"First rule\",\n \"deny_rule\": {\n \"denied_principals\": [\"principalSet://goog/public:all\"],\n \"denial_condition\": {\n \"title\": \"Some expr\",\n \"expression\": \"!resource.matchTag('12345678/env', 'test')\",\n },\n \"denied_permissions\": [\"cloudresourcemanager.googleapis.com/projects.update\"],\n },\n },\n {\n \"description\": \"Second rule\",\n \"deny_rule\": {\n \"denied_principals\": [\"principalSet://goog/public:all\"],\n \"denial_condition\": {\n \"title\": \"Some expr\",\n \"expression\": \"!resource.matchTag('12345678/env', 'test')\",\n },\n \"denied_permissions\": [\"cloudresourcemanager.googleapis.com/projects.update\"],\n \"exception_principals\": [test_account.email.apply(lambda email: f\"principal://iam.googleapis.com/projects/-/serviceAccounts/{email}\")],\n },\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n ProjectId = \"my-project\",\n Name = \"my-project\",\n OrgId = \"123456789\",\n BillingAccount = \"000000-0000000-0000000-000000\",\n DeletionPolicy = \"DELETE\",\n });\n\n var test_account = new Gcp.ServiceAccount.Account(\"test-account\", new()\n {\n AccountId = \"svc-acc\",\n DisplayName = \"Test Service Account\",\n Project = project.ProjectId,\n });\n\n var example = new Gcp.Iam.DenyPolicy(\"example\", new()\n {\n Parent = Std.Urlencode.Invoke(new()\n {\n Input = project.ProjectId.Apply(projectId =\u003e $\"cloudresourcemanager.googleapis.com/projects/{projectId}\"),\n }).Apply(invoke =\u003e invoke.Result),\n Name = \"my-deny-policy\",\n DisplayName = \"A deny rule\",\n Rules = new[]\n {\n new Gcp.Iam.Inputs.DenyPolicyRuleArgs\n {\n Description = \"First rule\",\n DenyRule = new Gcp.Iam.Inputs.DenyPolicyRuleDenyRuleArgs\n {\n DeniedPrincipals = new[]\n {\n \"principalSet://goog/public:all\",\n },\n DenialCondition = new Gcp.Iam.Inputs.DenyPolicyRuleDenyRuleDenialConditionArgs\n {\n Title = \"Some expr\",\n Expression = \"!resource.matchTag('12345678/env', 'test')\",\n },\n DeniedPermissions = new[]\n {\n \"cloudresourcemanager.googleapis.com/projects.update\",\n },\n },\n },\n new Gcp.Iam.Inputs.DenyPolicyRuleArgs\n {\n Description = \"Second rule\",\n DenyRule = new Gcp.Iam.Inputs.DenyPolicyRuleDenyRuleArgs\n {\n DeniedPrincipals = new[]\n {\n \"principalSet://goog/public:all\",\n },\n DenialCondition = new Gcp.Iam.Inputs.DenyPolicyRuleDenyRuleDenialConditionArgs\n {\n Title = \"Some expr\",\n Expression = \"!resource.matchTag('12345678/env', 'test')\",\n },\n DeniedPermissions = new[]\n {\n \"cloudresourcemanager.googleapis.com/projects.update\",\n },\n ExceptionPrincipals = new[]\n {\n test_account.Email.Apply(email =\u003e $\"principal://iam.googleapis.com/projects/-/serviceAccounts/{email}\"),\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"my-project\"),\n\t\t\tName: pulumi.String(\"my-project\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceaccount.NewAccount(ctx, \"test-account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"svc-acc\"),\n\t\t\tDisplayName: pulumi.String(\"Test Service Account\"),\n\t\t\tProject: project.ProjectId,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewDenyPolicy(ctx, \"example\", \u0026iam.DenyPolicyArgs{\n\t\t\tParent: pulumi.String(std.UrlencodeOutput(ctx, std.UrlencodeOutputArgs{\n\t\t\t\tInput: project.ProjectId.ApplyT(func(projectId string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"cloudresourcemanager.googleapis.com/projects/%v\", projectId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t}, nil).ApplyT(func(invoke std.UrlencodeResult) (*string, error) {\n\t\t\t\treturn invoke.Result, nil\n\t\t\t}).(pulumi.StringPtrOutput)),\n\t\t\tName: pulumi.String(\"my-deny-policy\"),\n\t\t\tDisplayName: pulumi.String(\"A deny rule\"),\n\t\t\tRules: iam.DenyPolicyRuleArray{\n\t\t\t\t\u0026iam.DenyPolicyRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"First rule\"),\n\t\t\t\t\tDenyRule: \u0026iam.DenyPolicyRuleDenyRuleArgs{\n\t\t\t\t\t\tDeniedPrincipals: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"principalSet://goog/public:all\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDenialCondition: \u0026iam.DenyPolicyRuleDenyRuleDenialConditionArgs{\n\t\t\t\t\t\t\tTitle: pulumi.String(\"Some expr\"),\n\t\t\t\t\t\t\tExpression: pulumi.String(\"!resource.matchTag('12345678/env', 'test')\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDeniedPermissions: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"cloudresourcemanager.googleapis.com/projects.update\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026iam.DenyPolicyRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"Second rule\"),\n\t\t\t\t\tDenyRule: \u0026iam.DenyPolicyRuleDenyRuleArgs{\n\t\t\t\t\t\tDeniedPrincipals: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"principalSet://goog/public:all\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDenialCondition: \u0026iam.DenyPolicyRuleDenyRuleDenialConditionArgs{\n\t\t\t\t\t\t\tTitle: pulumi.String(\"Some expr\"),\n\t\t\t\t\t\t\tExpression: pulumi.String(\"!resource.matchTag('12345678/env', 'test')\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDeniedPermissions: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"cloudresourcemanager.googleapis.com/projects.update\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExceptionPrincipals: pulumi.StringArray{\n\t\t\t\t\t\t\ttest_account.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\t\t\t\t\treturn fmt.Sprintf(\"principal://iam.googleapis.com/projects/-/serviceAccounts/%v\", email), nil\n\t\t\t\t\t\t\t}).(pulumi.StringOutput),\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\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.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.iam.DenyPolicy;\nimport com.pulumi.gcp.iam.DenyPolicyArgs;\nimport com.pulumi.gcp.iam.inputs.DenyPolicyRuleArgs;\nimport com.pulumi.gcp.iam.inputs.DenyPolicyRuleDenyRuleArgs;\nimport com.pulumi.gcp.iam.inputs.DenyPolicyRuleDenyRuleDenialConditionArgs;\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 project = new Project(\"project\", ProjectArgs.builder()\n .projectId(\"my-project\")\n .name(\"my-project\")\n .orgId(\"123456789\")\n .billingAccount(\"000000-0000000-0000000-000000\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var test_account = new Account(\"test-account\", AccountArgs.builder()\n .accountId(\"svc-acc\")\n .displayName(\"Test Service Account\")\n .project(project.projectId())\n .build());\n\n var example = new DenyPolicy(\"example\", DenyPolicyArgs.builder()\n .parent(StdFunctions.urlencode().applyValue(invoke -\u003e invoke.result()))\n .name(\"my-deny-policy\")\n .displayName(\"A deny rule\")\n .rules( \n DenyPolicyRuleArgs.builder()\n .description(\"First rule\")\n .denyRule(DenyPolicyRuleDenyRuleArgs.builder()\n .deniedPrincipals(\"principalSet://goog/public:all\")\n .denialCondition(DenyPolicyRuleDenyRuleDenialConditionArgs.builder()\n .title(\"Some expr\")\n .expression(\"!resource.matchTag('12345678/env', 'test')\")\n .build())\n .deniedPermissions(\"cloudresourcemanager.googleapis.com/projects.update\")\n .build())\n .build(),\n DenyPolicyRuleArgs.builder()\n .description(\"Second rule\")\n .denyRule(DenyPolicyRuleDenyRuleArgs.builder()\n .deniedPrincipals(\"principalSet://goog/public:all\")\n .denialCondition(DenyPolicyRuleDenyRuleDenialConditionArgs.builder()\n .title(\"Some expr\")\n .expression(\"!resource.matchTag('12345678/env', 'test')\")\n .build())\n .deniedPermissions(\"cloudresourcemanager.googleapis.com/projects.update\")\n .exceptionPrincipals(test_account.email().applyValue(email -\u003e String.format(\"principal://iam.googleapis.com/projects/-/serviceAccounts/%s\", email)))\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: my-project\n name: my-project\n orgId: '123456789'\n billingAccount: 000000-0000000-0000000-000000\n deletionPolicy: DELETE\n example:\n type: gcp:iam:DenyPolicy\n properties:\n parent:\n fn::invoke:\n Function: std:urlencode\n Arguments:\n input: cloudresourcemanager.googleapis.com/projects/${project.projectId}\n Return: result\n name: my-deny-policy\n displayName: A deny rule\n rules:\n - description: First rule\n denyRule:\n deniedPrincipals:\n - principalSet://goog/public:all\n denialCondition:\n title: Some expr\n expression: '!resource.matchTag(''12345678/env'', ''test'')'\n deniedPermissions:\n - cloudresourcemanager.googleapis.com/projects.update\n - description: Second rule\n denyRule:\n deniedPrincipals:\n - principalSet://goog/public:all\n denialCondition:\n title: Some expr\n expression: '!resource.matchTag(''12345678/env'', ''test'')'\n deniedPermissions:\n - cloudresourcemanager.googleapis.com/projects.update\n exceptionPrincipals:\n - principal://iam.googleapis.com/projects/-/serviceAccounts/${[\"test-account\"].email}\n test-account:\n type: gcp:serviceaccount:Account\n properties:\n accountId: svc-acc\n displayName: Test Service Account\n project: ${project.projectId}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDenyPolicy can be imported using any of these accepted formats:\n\n* `{{parent}}/{{name}}`\n\nWhen using the `pulumi import` command, DenyPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iam/denyPolicy:DenyPolicy default {{parent}}/{{name}}\n```\n\n", + "properties": { + "displayName": { + "type": "string", + "description": "The display name of the rule.\n" + }, + "etag": { + "type": "string", + "description": "The hash of the resource. Used internally during updates.\n" + }, + "name": { + "type": "string", + "description": "The name of the policy.\n" + }, + "parent": { + "type": "string", + "description": "The attachment point is identified by its URL-encoded full resource name.\n" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:iam/DenyPolicyRule:DenyPolicyRule" + }, + "description": "Rules to be applied.\nStructure is documented below.\n" + } + }, + "required": [ + "etag", + "name", + "parent", + "rules" + ], + "inputProperties": { + "displayName": { + "type": "string", + "description": "The display name of the rule.\n" + }, + "name": { + "type": "string", + "description": "The name of the policy.\n", + "willReplaceOnChanges": true + }, + "parent": { + "type": "string", + "description": "The attachment point is identified by its URL-encoded full resource name.\n", + "willReplaceOnChanges": true + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:iam/DenyPolicyRule:DenyPolicyRule" + }, + "description": "Rules to be applied.\nStructure is documented below.\n" + } + }, + "requiredInputs": [ + "parent", + "rules" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering DenyPolicy resources.\n", + "properties": { + "displayName": { + "type": "string", + "description": "The display name of the rule.\n" + }, + "etag": { + "type": "string", + "description": "The hash of the resource. Used internally during updates.\n" + }, + "name": { + "type": "string", + "description": "The name of the policy.\n", + "willReplaceOnChanges": true + }, + "parent": { + "type": "string", + "description": "The attachment point is identified by its URL-encoded full resource name.\n", + "willReplaceOnChanges": true + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:iam/DenyPolicyRule:DenyPolicyRule" }, "description": "Rules to be applied.\nStructure is documented below.\n" } @@ -219371,93 +222203,170 @@ "type": "object" } }, - "gcp:iam/denyPolicy:DenyPolicy": { - "description": "Represents a collection of denial policies to apply to a given resource.\n\n\nTo get more information about DenyPolicy, see:\n\n* [API documentation](https://cloud.google.com/iam/docs/reference/rest/v2/policies)\n* How-to Guides\n * [Permissions supported in deny policies](https://cloud.google.com/iam/docs/deny-permissions-support)\n\n## Example Usage\n\n### Iam Deny Policy Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst project = new gcp.organizations.Project(\"project\", {\n projectId: \"my-project\",\n name: \"my-project\",\n orgId: \"123456789\",\n billingAccount: \"000000-0000000-0000000-000000\",\n deletionPolicy: \"DELETE\",\n});\nconst test_account = new gcp.serviceaccount.Account(\"test-account\", {\n accountId: \"svc-acc\",\n displayName: \"Test Service Account\",\n project: project.projectId,\n});\nconst example = new gcp.iam.DenyPolicy(\"example\", {\n parent: std.urlencodeOutput({\n input: pulumi.interpolate`cloudresourcemanager.googleapis.com/projects/${project.projectId}`,\n }).apply(invoke =\u003e invoke.result),\n name: \"my-deny-policy\",\n displayName: \"A deny rule\",\n rules: [\n {\n description: \"First rule\",\n denyRule: {\n deniedPrincipals: [\"principalSet://goog/public:all\"],\n denialCondition: {\n title: \"Some expr\",\n expression: \"!resource.matchTag('12345678/env', 'test')\",\n },\n deniedPermissions: [\"cloudresourcemanager.googleapis.com/projects.update\"],\n },\n },\n {\n description: \"Second rule\",\n denyRule: {\n deniedPrincipals: [\"principalSet://goog/public:all\"],\n denialCondition: {\n title: \"Some expr\",\n expression: \"!resource.matchTag('12345678/env', 'test')\",\n },\n deniedPermissions: [\"cloudresourcemanager.googleapis.com/projects.update\"],\n exceptionPrincipals: [pulumi.interpolate`principal://iam.googleapis.com/projects/-/serviceAccounts/${test_account.email}`],\n },\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\nproject = gcp.organizations.Project(\"project\",\n project_id=\"my-project\",\n name=\"my-project\",\n org_id=\"123456789\",\n billing_account=\"000000-0000000-0000000-000000\",\n deletion_policy=\"DELETE\")\ntest_account = gcp.serviceaccount.Account(\"test-account\",\n account_id=\"svc-acc\",\n display_name=\"Test Service Account\",\n project=project.project_id)\nexample = gcp.iam.DenyPolicy(\"example\",\n parent=std.urlencode_output(input=project.project_id.apply(lambda project_id: f\"cloudresourcemanager.googleapis.com/projects/{project_id}\")).apply(lambda invoke: invoke.result),\n name=\"my-deny-policy\",\n display_name=\"A deny rule\",\n rules=[\n {\n \"description\": \"First rule\",\n \"deny_rule\": {\n \"denied_principals\": [\"principalSet://goog/public:all\"],\n \"denial_condition\": {\n \"title\": \"Some expr\",\n \"expression\": \"!resource.matchTag('12345678/env', 'test')\",\n },\n \"denied_permissions\": [\"cloudresourcemanager.googleapis.com/projects.update\"],\n },\n },\n {\n \"description\": \"Second rule\",\n \"deny_rule\": {\n \"denied_principals\": [\"principalSet://goog/public:all\"],\n \"denial_condition\": {\n \"title\": \"Some expr\",\n \"expression\": \"!resource.matchTag('12345678/env', 'test')\",\n },\n \"denied_permissions\": [\"cloudresourcemanager.googleapis.com/projects.update\"],\n \"exception_principals\": [test_account.email.apply(lambda email: f\"principal://iam.googleapis.com/projects/-/serviceAccounts/{email}\")],\n },\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n ProjectId = \"my-project\",\n Name = \"my-project\",\n OrgId = \"123456789\",\n BillingAccount = \"000000-0000000-0000000-000000\",\n DeletionPolicy = \"DELETE\",\n });\n\n var test_account = new Gcp.ServiceAccount.Account(\"test-account\", new()\n {\n AccountId = \"svc-acc\",\n DisplayName = \"Test Service Account\",\n Project = project.ProjectId,\n });\n\n var example = new Gcp.Iam.DenyPolicy(\"example\", new()\n {\n Parent = Std.Urlencode.Invoke(new()\n {\n Input = project.ProjectId.Apply(projectId =\u003e $\"cloudresourcemanager.googleapis.com/projects/{projectId}\"),\n }).Apply(invoke =\u003e invoke.Result),\n Name = \"my-deny-policy\",\n DisplayName = \"A deny rule\",\n Rules = new[]\n {\n new Gcp.Iam.Inputs.DenyPolicyRuleArgs\n {\n Description = \"First rule\",\n DenyRule = new Gcp.Iam.Inputs.DenyPolicyRuleDenyRuleArgs\n {\n DeniedPrincipals = new[]\n {\n \"principalSet://goog/public:all\",\n },\n DenialCondition = new Gcp.Iam.Inputs.DenyPolicyRuleDenyRuleDenialConditionArgs\n {\n Title = \"Some expr\",\n Expression = \"!resource.matchTag('12345678/env', 'test')\",\n },\n DeniedPermissions = new[]\n {\n \"cloudresourcemanager.googleapis.com/projects.update\",\n },\n },\n },\n new Gcp.Iam.Inputs.DenyPolicyRuleArgs\n {\n Description = \"Second rule\",\n DenyRule = new Gcp.Iam.Inputs.DenyPolicyRuleDenyRuleArgs\n {\n DeniedPrincipals = new[]\n {\n \"principalSet://goog/public:all\",\n },\n DenialCondition = new Gcp.Iam.Inputs.DenyPolicyRuleDenyRuleDenialConditionArgs\n {\n Title = \"Some expr\",\n Expression = \"!resource.matchTag('12345678/env', 'test')\",\n },\n DeniedPermissions = new[]\n {\n \"cloudresourcemanager.googleapis.com/projects.update\",\n },\n ExceptionPrincipals = new[]\n {\n test_account.Email.Apply(email =\u003e $\"principal://iam.googleapis.com/projects/-/serviceAccounts/{email}\"),\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"my-project\"),\n\t\t\tName: pulumi.String(\"my-project\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceaccount.NewAccount(ctx, \"test-account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"svc-acc\"),\n\t\t\tDisplayName: pulumi.String(\"Test Service Account\"),\n\t\t\tProject: project.ProjectId,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewDenyPolicy(ctx, \"example\", \u0026iam.DenyPolicyArgs{\n\t\t\tParent: pulumi.String(std.UrlencodeOutput(ctx, std.UrlencodeOutputArgs{\n\t\t\t\tInput: project.ProjectId.ApplyT(func(projectId string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"cloudresourcemanager.googleapis.com/projects/%v\", projectId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t}, nil).ApplyT(func(invoke std.UrlencodeResult) (*string, error) {\n\t\t\t\treturn invoke.Result, nil\n\t\t\t}).(pulumi.StringPtrOutput)),\n\t\t\tName: pulumi.String(\"my-deny-policy\"),\n\t\t\tDisplayName: pulumi.String(\"A deny rule\"),\n\t\t\tRules: iam.DenyPolicyRuleArray{\n\t\t\t\t\u0026iam.DenyPolicyRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"First rule\"),\n\t\t\t\t\tDenyRule: \u0026iam.DenyPolicyRuleDenyRuleArgs{\n\t\t\t\t\t\tDeniedPrincipals: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"principalSet://goog/public:all\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDenialCondition: \u0026iam.DenyPolicyRuleDenyRuleDenialConditionArgs{\n\t\t\t\t\t\t\tTitle: pulumi.String(\"Some expr\"),\n\t\t\t\t\t\t\tExpression: pulumi.String(\"!resource.matchTag('12345678/env', 'test')\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDeniedPermissions: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"cloudresourcemanager.googleapis.com/projects.update\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026iam.DenyPolicyRuleArgs{\n\t\t\t\t\tDescription: pulumi.String(\"Second rule\"),\n\t\t\t\t\tDenyRule: \u0026iam.DenyPolicyRuleDenyRuleArgs{\n\t\t\t\t\t\tDeniedPrincipals: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"principalSet://goog/public:all\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDenialCondition: \u0026iam.DenyPolicyRuleDenyRuleDenialConditionArgs{\n\t\t\t\t\t\t\tTitle: pulumi.String(\"Some expr\"),\n\t\t\t\t\t\t\tExpression: pulumi.String(\"!resource.matchTag('12345678/env', 'test')\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDeniedPermissions: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"cloudresourcemanager.googleapis.com/projects.update\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExceptionPrincipals: pulumi.StringArray{\n\t\t\t\t\t\t\ttest_account.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\t\t\t\t\treturn fmt.Sprintf(\"principal://iam.googleapis.com/projects/-/serviceAccounts/%v\", email), nil\n\t\t\t\t\t\t\t}).(pulumi.StringOutput),\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\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.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.iam.DenyPolicy;\nimport com.pulumi.gcp.iam.DenyPolicyArgs;\nimport com.pulumi.gcp.iam.inputs.DenyPolicyRuleArgs;\nimport com.pulumi.gcp.iam.inputs.DenyPolicyRuleDenyRuleArgs;\nimport com.pulumi.gcp.iam.inputs.DenyPolicyRuleDenyRuleDenialConditionArgs;\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 project = new Project(\"project\", ProjectArgs.builder()\n .projectId(\"my-project\")\n .name(\"my-project\")\n .orgId(\"123456789\")\n .billingAccount(\"000000-0000000-0000000-000000\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var test_account = new Account(\"test-account\", AccountArgs.builder()\n .accountId(\"svc-acc\")\n .displayName(\"Test Service Account\")\n .project(project.projectId())\n .build());\n\n var example = new DenyPolicy(\"example\", DenyPolicyArgs.builder()\n .parent(StdFunctions.urlencode().applyValue(invoke -\u003e invoke.result()))\n .name(\"my-deny-policy\")\n .displayName(\"A deny rule\")\n .rules( \n DenyPolicyRuleArgs.builder()\n .description(\"First rule\")\n .denyRule(DenyPolicyRuleDenyRuleArgs.builder()\n .deniedPrincipals(\"principalSet://goog/public:all\")\n .denialCondition(DenyPolicyRuleDenyRuleDenialConditionArgs.builder()\n .title(\"Some expr\")\n .expression(\"!resource.matchTag('12345678/env', 'test')\")\n .build())\n .deniedPermissions(\"cloudresourcemanager.googleapis.com/projects.update\")\n .build())\n .build(),\n DenyPolicyRuleArgs.builder()\n .description(\"Second rule\")\n .denyRule(DenyPolicyRuleDenyRuleArgs.builder()\n .deniedPrincipals(\"principalSet://goog/public:all\")\n .denialCondition(DenyPolicyRuleDenyRuleDenialConditionArgs.builder()\n .title(\"Some expr\")\n .expression(\"!resource.matchTag('12345678/env', 'test')\")\n .build())\n .deniedPermissions(\"cloudresourcemanager.googleapis.com/projects.update\")\n .exceptionPrincipals(test_account.email().applyValue(email -\u003e String.format(\"principal://iam.googleapis.com/projects/-/serviceAccounts/%s\", email)))\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: my-project\n name: my-project\n orgId: '123456789'\n billingAccount: 000000-0000000-0000000-000000\n deletionPolicy: DELETE\n example:\n type: gcp:iam:DenyPolicy\n properties:\n parent:\n fn::invoke:\n Function: std:urlencode\n Arguments:\n input: cloudresourcemanager.googleapis.com/projects/${project.projectId}\n Return: result\n name: my-deny-policy\n displayName: A deny rule\n rules:\n - description: First rule\n denyRule:\n deniedPrincipals:\n - principalSet://goog/public:all\n denialCondition:\n title: Some expr\n expression: '!resource.matchTag(''12345678/env'', ''test'')'\n deniedPermissions:\n - cloudresourcemanager.googleapis.com/projects.update\n - description: Second rule\n denyRule:\n deniedPrincipals:\n - principalSet://goog/public:all\n denialCondition:\n title: Some expr\n expression: '!resource.matchTag(''12345678/env'', ''test'')'\n deniedPermissions:\n - cloudresourcemanager.googleapis.com/projects.update\n exceptionPrincipals:\n - principal://iam.googleapis.com/projects/-/serviceAccounts/${[\"test-account\"].email}\n test-account:\n type: gcp:serviceaccount:Account\n properties:\n accountId: svc-acc\n displayName: Test Service Account\n project: ${project.projectId}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDenyPolicy can be imported using any of these accepted formats:\n\n* `{{parent}}/{{name}}`\n\nWhen using the `pulumi import` command, DenyPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iam/denyPolicy:DenyPolicy default {{parent}}/{{name}}\n```\n\n", + "gcp:iam/principalAccessBoundaryPolicy:PrincipalAccessBoundaryPolicy": { + "description": "## Example Usage\n\n### Iam Principal Access Boundary Policy\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_pab_policy = new gcp.iam.PrincipalAccessBoundaryPolicy(\"my-pab-policy\", {\n organization: \"123456789\",\n location: \"global\",\n displayName: \"test pab policy\",\n principalAccessBoundaryPolicyId: \"test-pab-policy\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_pab_policy = gcp.iam.PrincipalAccessBoundaryPolicy(\"my-pab-policy\",\n organization=\"123456789\",\n location=\"global\",\n display_name=\"test pab policy\",\n principal_access_boundary_policy_id=\"test-pab-policy\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_pab_policy = new Gcp.Iam.PrincipalAccessBoundaryPolicy(\"my-pab-policy\", new()\n {\n Organization = \"123456789\",\n Location = \"global\",\n DisplayName = \"test pab policy\",\n PrincipalAccessBoundaryPolicyId = \"test-pab-policy\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.NewPrincipalAccessBoundaryPolicy(ctx, \"my-pab-policy\", \u0026iam.PrincipalAccessBoundaryPolicyArgs{\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDisplayName: pulumi.String(\"test pab policy\"),\n\t\t\tPrincipalAccessBoundaryPolicyId: pulumi.String(\"test-pab-policy\"),\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.gcp.iam.PrincipalAccessBoundaryPolicy;\nimport com.pulumi.gcp.iam.PrincipalAccessBoundaryPolicyArgs;\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 my_pab_policy = new PrincipalAccessBoundaryPolicy(\"my-pab-policy\", PrincipalAccessBoundaryPolicyArgs.builder()\n .organization(\"123456789\")\n .location(\"global\")\n .displayName(\"test pab policy\")\n .principalAccessBoundaryPolicyId(\"test-pab-policy\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-pab-policy:\n type: gcp:iam:PrincipalAccessBoundaryPolicy\n properties:\n organization: '123456789'\n location: global\n displayName: test pab policy\n principalAccessBoundaryPolicyId: test-pab-policy\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nPrincipalAccessBoundaryPolicy can be imported using any of these accepted formats:\n\n* `organizations/{{organization}}/locations/{{location}}/principalAccessBoundaryPolicies/{{principal_access_boundary_policy_id}}`\n\n* `{{organization}}/{{location}}/{{principal_access_boundary_policy_id}}`\n\nWhen using the `pulumi import` command, PrincipalAccessBoundaryPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:iam/principalAccessBoundaryPolicy:PrincipalAccessBoundaryPolicy default organizations/{{organization}}/locations/{{location}}/principalAccessBoundaryPolicies/{{principal_access_boundary_policy_id}}\n```\n\n```sh\n$ pulumi import gcp:iam/principalAccessBoundaryPolicy:PrincipalAccessBoundaryPolicy default {{organization}}/{{location}}/{{principal_access_boundary_policy_id}}\n```\n\n", "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User defined annotations. See https://google.aip.dev/148#annotations\nfor more details such as format and size limitations\n\n**Note**: This field is non-authoritative, and will only manage the annotations present in your configuration.\nPlease refer to the field `effective_annotations` for all of the annotations present on the resource.\n" + }, + "createTime": { + "type": "string", + "description": "Output only. The time when the principal access boundary policy was created.\n" + }, + "details": { + "$ref": "#/types/gcp:iam/PrincipalAccessBoundaryPolicyDetails:PrincipalAccessBoundaryPolicyDetails", + "description": "Principal access boundary policy details\nStructure is documented below.\n" + }, "displayName": { "type": "string", - "description": "The display name of the rule.\n" + "description": "The description of the principal access boundary policy. Must be less than or equal to 63 characters.\n" + }, + "effectiveAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } }, "etag": { "type": "string", - "description": "The hash of the resource. Used internally during updates.\n" + "description": "The etag for the principal access boundary. If this is provided on update, it must match the server's etag.\n" + }, + "location": { + "type": "string", + "description": "The location the principal access boundary policy is in.\n" }, "name": { "type": "string", - "description": "The name of the policy.\n" + "description": "Identifier. The resource name of the principal access boundary policy. The following format is supported:\n`organizations/{organization_id}/locations/{location}/principalAccessBoundaryPolicies/{policy_id}`\n" }, - "parent": { + "organization": { "type": "string", - "description": "The attachment point is identified by its URL-encoded full resource name.\n" + "description": "The parent organization of the principal access boundary policy.\n" }, - "rules": { - "type": "array", - "items": { - "$ref": "#/types/gcp:iam/DenyPolicyRule:DenyPolicyRule" - }, - "description": "Rules to be applied.\nStructure is documented below.\n" + "principalAccessBoundaryPolicyId": { + "type": "string", + "description": "The ID to use to create the principal access boundary policy.\nThis value must start with a lowercase letter followed by up to 62 lowercase letters, numbers, hyphens, or dots. Pattern, /a-z{2,62}/.\n\n\n- - -\n" + }, + "uid": { + "type": "string", + "description": "Output only. The globally unique ID of the principal access boundary policy.\n" + }, + "updateTime": { + "type": "string", + "description": "Output only. The time when the principal access boundary policy was most recently updated.\n" } }, "required": [ + "createTime", + "details", + "effectiveAnnotations", "etag", + "location", "name", - "parent", - "rules" + "organization", + "principalAccessBoundaryPolicyId", + "uid", + "updateTime" ], "inputProperties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User defined annotations. See https://google.aip.dev/148#annotations\nfor more details such as format and size limitations\n\n**Note**: This field is non-authoritative, and will only manage the annotations present in your configuration.\nPlease refer to the field `effective_annotations` for all of the annotations present on the resource.\n" + }, + "details": { + "$ref": "#/types/gcp:iam/PrincipalAccessBoundaryPolicyDetails:PrincipalAccessBoundaryPolicyDetails", + "description": "Principal access boundary policy details\nStructure is documented below.\n" + }, "displayName": { "type": "string", - "description": "The display name of the rule.\n" + "description": "The description of the principal access boundary policy. Must be less than or equal to 63 characters.\n" }, - "name": { + "location": { "type": "string", - "description": "The name of the policy.\n", + "description": "The location the principal access boundary policy is in.\n", "willReplaceOnChanges": true }, - "parent": { + "organization": { "type": "string", - "description": "The attachment point is identified by its URL-encoded full resource name.\n", + "description": "The parent organization of the principal access boundary policy.\n", "willReplaceOnChanges": true }, - "rules": { - "type": "array", - "items": { - "$ref": "#/types/gcp:iam/DenyPolicyRule:DenyPolicyRule" - }, - "description": "Rules to be applied.\nStructure is documented below.\n" + "principalAccessBoundaryPolicyId": { + "type": "string", + "description": "The ID to use to create the principal access boundary policy.\nThis value must start with a lowercase letter followed by up to 62 lowercase letters, numbers, hyphens, or dots. Pattern, /a-z{2,62}/.\n\n\n- - -\n", + "willReplaceOnChanges": true } }, "requiredInputs": [ - "parent", - "rules" + "location", + "organization", + "principalAccessBoundaryPolicyId" ], "stateInputs": { - "description": "Input properties used for looking up and filtering DenyPolicy resources.\n", + "description": "Input properties used for looking up and filtering PrincipalAccessBoundaryPolicy resources.\n", "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "User defined annotations. See https://google.aip.dev/148#annotations\nfor more details such as format and size limitations\n\n**Note**: This field is non-authoritative, and will only manage the annotations present in your configuration.\nPlease refer to the field `effective_annotations` for all of the annotations present on the resource.\n" + }, + "createTime": { + "type": "string", + "description": "Output only. The time when the principal access boundary policy was created.\n" + }, + "details": { + "$ref": "#/types/gcp:iam/PrincipalAccessBoundaryPolicyDetails:PrincipalAccessBoundaryPolicyDetails", + "description": "Principal access boundary policy details\nStructure is documented below.\n" + }, "displayName": { "type": "string", - "description": "The display name of the rule.\n" + "description": "The description of the principal access boundary policy. Must be less than or equal to 63 characters.\n" + }, + "effectiveAnnotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } }, "etag": { "type": "string", - "description": "The hash of the resource. Used internally during updates.\n" + "description": "The etag for the principal access boundary. If this is provided on update, it must match the server's etag.\n" + }, + "location": { + "type": "string", + "description": "The location the principal access boundary policy is in.\n", + "willReplaceOnChanges": true }, "name": { "type": "string", - "description": "The name of the policy.\n", + "description": "Identifier. The resource name of the principal access boundary policy. The following format is supported:\n`organizations/{organization_id}/locations/{location}/principalAccessBoundaryPolicies/{policy_id}`\n" + }, + "organization": { + "type": "string", + "description": "The parent organization of the principal access boundary policy.\n", "willReplaceOnChanges": true }, - "parent": { + "principalAccessBoundaryPolicyId": { "type": "string", - "description": "The attachment point is identified by its URL-encoded full resource name.\n", + "description": "The ID to use to create the principal access boundary policy.\nThis value must start with a lowercase letter followed by up to 62 lowercase letters, numbers, hyphens, or dots. Pattern, /a-z{2,62}/.\n\n\n- - -\n", "willReplaceOnChanges": true }, - "rules": { - "type": "array", - "items": { - "$ref": "#/types/gcp:iam/DenyPolicyRule:DenyPolicyRule" - }, - "description": "Rules to be applied.\nStructure is documented below.\n" + "uid": { + "type": "string", + "description": "Output only. The globally unique ID of the principal access boundary policy.\n" + }, + "updateTime": { + "type": "string", + "description": "Output only. The time when the principal access boundary policy was most recently updated.\n" } }, "type": "object" @@ -228345,7 +231254,7 @@ } }, "gcp:logging/metric:Metric": { - "description": "Logs-based metric can also be used to extract values from logs and create a a distribution\nof the values. The distribution records the statistics of the extracted values along with\nan optional histogram of the values as specified by the bucket options.\n\n\nTo get more information about Metric, see:\n\n* [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.metrics/create)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/logging/docs/apis)\n\n## Example Usage\n\n### Logging Metric Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst loggingMetric = new gcp.logging.Metric(\"logging_metric\", {\n name: \"my-(custom)/metric\",\n filter: \"resource.type=gae_app AND severity\u003e=ERROR\",\n metricDescriptor: {\n metricKind: \"DELTA\",\n valueType: \"DISTRIBUTION\",\n unit: \"1\",\n labels: [\n {\n key: \"mass\",\n valueType: \"STRING\",\n description: \"amount of matter\",\n },\n {\n key: \"sku\",\n valueType: \"INT64\",\n description: \"Identifying number for item\",\n },\n ],\n displayName: \"My metric\",\n },\n valueExtractor: \"EXTRACT(jsonPayload.request)\",\n labelExtractors: {\n mass: \"EXTRACT(jsonPayload.request)\",\n sku: \"EXTRACT(jsonPayload.id)\",\n },\n bucketOptions: {\n linearBuckets: {\n numFiniteBuckets: 3,\n width: 1,\n offset: 1,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nlogging_metric = gcp.logging.Metric(\"logging_metric\",\n name=\"my-(custom)/metric\",\n filter=\"resource.type=gae_app AND severity\u003e=ERROR\",\n metric_descriptor={\n \"metric_kind\": \"DELTA\",\n \"value_type\": \"DISTRIBUTION\",\n \"unit\": \"1\",\n \"labels\": [\n {\n \"key\": \"mass\",\n \"value_type\": \"STRING\",\n \"description\": \"amount of matter\",\n },\n {\n \"key\": \"sku\",\n \"value_type\": \"INT64\",\n \"description\": \"Identifying number for item\",\n },\n ],\n \"display_name\": \"My metric\",\n },\n value_extractor=\"EXTRACT(jsonPayload.request)\",\n label_extractors={\n \"mass\": \"EXTRACT(jsonPayload.request)\",\n \"sku\": \"EXTRACT(jsonPayload.id)\",\n },\n bucket_options={\n \"linear_buckets\": {\n \"num_finite_buckets\": 3,\n \"width\": 1,\n \"offset\": 1,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var loggingMetric = new Gcp.Logging.Metric(\"logging_metric\", new()\n {\n Name = \"my-(custom)/metric\",\n Filter = \"resource.type=gae_app AND severity\u003e=ERROR\",\n MetricDescriptor = new Gcp.Logging.Inputs.MetricMetricDescriptorArgs\n {\n MetricKind = \"DELTA\",\n ValueType = \"DISTRIBUTION\",\n Unit = \"1\",\n Labels = new[]\n {\n new Gcp.Logging.Inputs.MetricMetricDescriptorLabelArgs\n {\n Key = \"mass\",\n ValueType = \"STRING\",\n Description = \"amount of matter\",\n },\n new Gcp.Logging.Inputs.MetricMetricDescriptorLabelArgs\n {\n Key = \"sku\",\n ValueType = \"INT64\",\n Description = \"Identifying number for item\",\n },\n },\n DisplayName = \"My metric\",\n },\n ValueExtractor = \"EXTRACT(jsonPayload.request)\",\n LabelExtractors = \n {\n { \"mass\", \"EXTRACT(jsonPayload.request)\" },\n { \"sku\", \"EXTRACT(jsonPayload.id)\" },\n },\n BucketOptions = new Gcp.Logging.Inputs.MetricBucketOptionsArgs\n {\n LinearBuckets = new Gcp.Logging.Inputs.MetricBucketOptionsLinearBucketsArgs\n {\n NumFiniteBuckets = 3,\n Width = 1,\n Offset = 1,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewMetric(ctx, \"logging_metric\", \u0026logging.MetricArgs{\n\t\t\tName: pulumi.String(\"my-(custom)/metric\"),\n\t\t\tFilter: pulumi.String(\"resource.type=gae_app AND severity\u003e=ERROR\"),\n\t\t\tMetricDescriptor: \u0026logging.MetricMetricDescriptorArgs{\n\t\t\t\tMetricKind: pulumi.String(\"DELTA\"),\n\t\t\t\tValueType: pulumi.String(\"DISTRIBUTION\"),\n\t\t\t\tUnit: pulumi.String(\"1\"),\n\t\t\t\tLabels: logging.MetricMetricDescriptorLabelArray{\n\t\t\t\t\t\u0026logging.MetricMetricDescriptorLabelArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"mass\"),\n\t\t\t\t\t\tValueType: pulumi.String(\"STRING\"),\n\t\t\t\t\t\tDescription: pulumi.String(\"amount of matter\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026logging.MetricMetricDescriptorLabelArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"sku\"),\n\t\t\t\t\t\tValueType: pulumi.String(\"INT64\"),\n\t\t\t\t\t\tDescription: pulumi.String(\"Identifying number for item\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tDisplayName: pulumi.String(\"My metric\"),\n\t\t\t},\n\t\t\tValueExtractor: pulumi.String(\"EXTRACT(jsonPayload.request)\"),\n\t\t\tLabelExtractors: pulumi.StringMap{\n\t\t\t\t\"mass\": pulumi.String(\"EXTRACT(jsonPayload.request)\"),\n\t\t\t\t\"sku\": pulumi.String(\"EXTRACT(jsonPayload.id)\"),\n\t\t\t},\n\t\t\tBucketOptions: \u0026logging.MetricBucketOptionsArgs{\n\t\t\t\tLinearBuckets: \u0026logging.MetricBucketOptionsLinearBucketsArgs{\n\t\t\t\t\tNumFiniteBuckets: pulumi.Int(3),\n\t\t\t\t\tWidth: pulumi.Float64(1),\n\t\t\t\t\tOffset: pulumi.Float64(1),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.Metric;\nimport com.pulumi.gcp.logging.MetricArgs;\nimport com.pulumi.gcp.logging.inputs.MetricMetricDescriptorArgs;\nimport com.pulumi.gcp.logging.inputs.MetricBucketOptionsArgs;\nimport com.pulumi.gcp.logging.inputs.MetricBucketOptionsLinearBucketsArgs;\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 loggingMetric = new Metric(\"loggingMetric\", MetricArgs.builder()\n .name(\"my-(custom)/metric\")\n .filter(\"resource.type=gae_app AND severity\u003e=ERROR\")\n .metricDescriptor(MetricMetricDescriptorArgs.builder()\n .metricKind(\"DELTA\")\n .valueType(\"DISTRIBUTION\")\n .unit(\"1\")\n .labels( \n MetricMetricDescriptorLabelArgs.builder()\n .key(\"mass\")\n .valueType(\"STRING\")\n .description(\"amount of matter\")\n .build(),\n MetricMetricDescriptorLabelArgs.builder()\n .key(\"sku\")\n .valueType(\"INT64\")\n .description(\"Identifying number for item\")\n .build())\n .displayName(\"My metric\")\n .build())\n .valueExtractor(\"EXTRACT(jsonPayload.request)\")\n .labelExtractors(Map.ofEntries(\n Map.entry(\"mass\", \"EXTRACT(jsonPayload.request)\"),\n Map.entry(\"sku\", \"EXTRACT(jsonPayload.id)\")\n ))\n .bucketOptions(MetricBucketOptionsArgs.builder()\n .linearBuckets(MetricBucketOptionsLinearBucketsArgs.builder()\n .numFiniteBuckets(3)\n .width(1)\n .offset(1)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n loggingMetric:\n type: gcp:logging:Metric\n name: logging_metric\n properties:\n name: my-(custom)/metric\n filter: resource.type=gae_app AND severity\u003e=ERROR\n metricDescriptor:\n metricKind: DELTA\n valueType: DISTRIBUTION\n unit: '1'\n labels:\n - key: mass\n valueType: STRING\n description: amount of matter\n - key: sku\n valueType: INT64\n description: Identifying number for item\n displayName: My metric\n valueExtractor: EXTRACT(jsonPayload.request)\n labelExtractors:\n mass: EXTRACT(jsonPayload.request)\n sku: EXTRACT(jsonPayload.id)\n bucketOptions:\n linearBuckets:\n numFiniteBuckets: 3\n width: 1\n offset: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Logging Metric Counter Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst loggingMetric = new gcp.logging.Metric(\"logging_metric\", {\n name: \"my-(custom)/metric\",\n filter: \"resource.type=gae_app AND severity\u003e=ERROR\",\n metricDescriptor: {\n metricKind: \"DELTA\",\n valueType: \"INT64\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nlogging_metric = gcp.logging.Metric(\"logging_metric\",\n name=\"my-(custom)/metric\",\n filter=\"resource.type=gae_app AND severity\u003e=ERROR\",\n metric_descriptor={\n \"metric_kind\": \"DELTA\",\n \"value_type\": \"INT64\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var loggingMetric = new Gcp.Logging.Metric(\"logging_metric\", new()\n {\n Name = \"my-(custom)/metric\",\n Filter = \"resource.type=gae_app AND severity\u003e=ERROR\",\n MetricDescriptor = new Gcp.Logging.Inputs.MetricMetricDescriptorArgs\n {\n MetricKind = \"DELTA\",\n ValueType = \"INT64\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewMetric(ctx, \"logging_metric\", \u0026logging.MetricArgs{\n\t\t\tName: pulumi.String(\"my-(custom)/metric\"),\n\t\t\tFilter: pulumi.String(\"resource.type=gae_app AND severity\u003e=ERROR\"),\n\t\t\tMetricDescriptor: \u0026logging.MetricMetricDescriptorArgs{\n\t\t\t\tMetricKind: pulumi.String(\"DELTA\"),\n\t\t\t\tValueType: pulumi.String(\"INT64\"),\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.gcp.logging.Metric;\nimport com.pulumi.gcp.logging.MetricArgs;\nimport com.pulumi.gcp.logging.inputs.MetricMetricDescriptorArgs;\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 loggingMetric = new Metric(\"loggingMetric\", MetricArgs.builder()\n .name(\"my-(custom)/metric\")\n .filter(\"resource.type=gae_app AND severity\u003e=ERROR\")\n .metricDescriptor(MetricMetricDescriptorArgs.builder()\n .metricKind(\"DELTA\")\n .valueType(\"INT64\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n loggingMetric:\n type: gcp:logging:Metric\n name: logging_metric\n properties:\n name: my-(custom)/metric\n filter: resource.type=gae_app AND severity\u003e=ERROR\n metricDescriptor:\n metricKind: DELTA\n valueType: INT64\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Logging Metric Counter Labels\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst loggingMetric = new gcp.logging.Metric(\"logging_metric\", {\n name: \"my-(custom)/metric\",\n filter: \"resource.type=gae_app AND severity\u003e=ERROR\",\n metricDescriptor: {\n metricKind: \"DELTA\",\n valueType: \"INT64\",\n labels: [{\n key: \"mass\",\n valueType: \"STRING\",\n description: \"amount of matter\",\n }],\n },\n labelExtractors: {\n mass: \"EXTRACT(jsonPayload.request)\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nlogging_metric = gcp.logging.Metric(\"logging_metric\",\n name=\"my-(custom)/metric\",\n filter=\"resource.type=gae_app AND severity\u003e=ERROR\",\n metric_descriptor={\n \"metric_kind\": \"DELTA\",\n \"value_type\": \"INT64\",\n \"labels\": [{\n \"key\": \"mass\",\n \"value_type\": \"STRING\",\n \"description\": \"amount of matter\",\n }],\n },\n label_extractors={\n \"mass\": \"EXTRACT(jsonPayload.request)\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var loggingMetric = new Gcp.Logging.Metric(\"logging_metric\", new()\n {\n Name = \"my-(custom)/metric\",\n Filter = \"resource.type=gae_app AND severity\u003e=ERROR\",\n MetricDescriptor = new Gcp.Logging.Inputs.MetricMetricDescriptorArgs\n {\n MetricKind = \"DELTA\",\n ValueType = \"INT64\",\n Labels = new[]\n {\n new Gcp.Logging.Inputs.MetricMetricDescriptorLabelArgs\n {\n Key = \"mass\",\n ValueType = \"STRING\",\n Description = \"amount of matter\",\n },\n },\n },\n LabelExtractors = \n {\n { \"mass\", \"EXTRACT(jsonPayload.request)\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewMetric(ctx, \"logging_metric\", \u0026logging.MetricArgs{\n\t\t\tName: pulumi.String(\"my-(custom)/metric\"),\n\t\t\tFilter: pulumi.String(\"resource.type=gae_app AND severity\u003e=ERROR\"),\n\t\t\tMetricDescriptor: \u0026logging.MetricMetricDescriptorArgs{\n\t\t\t\tMetricKind: pulumi.String(\"DELTA\"),\n\t\t\t\tValueType: pulumi.String(\"INT64\"),\n\t\t\t\tLabels: logging.MetricMetricDescriptorLabelArray{\n\t\t\t\t\t\u0026logging.MetricMetricDescriptorLabelArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"mass\"),\n\t\t\t\t\t\tValueType: pulumi.String(\"STRING\"),\n\t\t\t\t\t\tDescription: pulumi.String(\"amount of matter\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabelExtractors: pulumi.StringMap{\n\t\t\t\t\"mass\": pulumi.String(\"EXTRACT(jsonPayload.request)\"),\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.gcp.logging.Metric;\nimport com.pulumi.gcp.logging.MetricArgs;\nimport com.pulumi.gcp.logging.inputs.MetricMetricDescriptorArgs;\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 loggingMetric = new Metric(\"loggingMetric\", MetricArgs.builder()\n .name(\"my-(custom)/metric\")\n .filter(\"resource.type=gae_app AND severity\u003e=ERROR\")\n .metricDescriptor(MetricMetricDescriptorArgs.builder()\n .metricKind(\"DELTA\")\n .valueType(\"INT64\")\n .labels(MetricMetricDescriptorLabelArgs.builder()\n .key(\"mass\")\n .valueType(\"STRING\")\n .description(\"amount of matter\")\n .build())\n .build())\n .labelExtractors(Map.of(\"mass\", \"EXTRACT(jsonPayload.request)\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n loggingMetric:\n type: gcp:logging:Metric\n name: logging_metric\n properties:\n name: my-(custom)/metric\n filter: resource.type=gae_app AND severity\u003e=ERROR\n metricDescriptor:\n metricKind: DELTA\n valueType: INT64\n labels:\n - key: mass\n valueType: STRING\n description: amount of matter\n labelExtractors:\n mass: EXTRACT(jsonPayload.request)\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Logging Metric Logging Bucket\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst loggingMetric = new gcp.logging.ProjectBucketConfig(\"logging_metric\", {\n location: \"global\",\n project: \"my-project-name\",\n bucketId: \"_Default\",\n});\nconst loggingMetricMetric = new gcp.logging.Metric(\"logging_metric\", {\n name: \"my-(custom)/metric\",\n filter: \"resource.type=gae_app AND severity\u003e=ERROR\",\n bucketName: loggingMetric.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nlogging_metric = gcp.logging.ProjectBucketConfig(\"logging_metric\",\n location=\"global\",\n project=\"my-project-name\",\n bucket_id=\"_Default\")\nlogging_metric_metric = gcp.logging.Metric(\"logging_metric\",\n name=\"my-(custom)/metric\",\n filter=\"resource.type=gae_app AND severity\u003e=ERROR\",\n bucket_name=logging_metric.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var loggingMetric = new Gcp.Logging.ProjectBucketConfig(\"logging_metric\", new()\n {\n Location = \"global\",\n Project = \"my-project-name\",\n BucketId = \"_Default\",\n });\n\n var loggingMetricMetric = new Gcp.Logging.Metric(\"logging_metric\", new()\n {\n Name = \"my-(custom)/metric\",\n Filter = \"resource.type=gae_app AND severity\u003e=ERROR\",\n BucketName = loggingMetric.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tloggingMetric, err := logging.NewProjectBucketConfig(ctx, \"logging_metric\", \u0026logging.ProjectBucketConfigArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tBucketId: pulumi.String(\"_Default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewMetric(ctx, \"logging_metric\", \u0026logging.MetricArgs{\n\t\t\tName: pulumi.String(\"my-(custom)/metric\"),\n\t\t\tFilter: pulumi.String(\"resource.type=gae_app AND severity\u003e=ERROR\"),\n\t\t\tBucketName: loggingMetric.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.ProjectBucketConfig;\nimport com.pulumi.gcp.logging.ProjectBucketConfigArgs;\nimport com.pulumi.gcp.logging.Metric;\nimport com.pulumi.gcp.logging.MetricArgs;\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 loggingMetric = new ProjectBucketConfig(\"loggingMetric\", ProjectBucketConfigArgs.builder()\n .location(\"global\")\n .project(\"my-project-name\")\n .bucketId(\"_Default\")\n .build());\n\n var loggingMetricMetric = new Metric(\"loggingMetricMetric\", MetricArgs.builder()\n .name(\"my-(custom)/metric\")\n .filter(\"resource.type=gae_app AND severity\u003e=ERROR\")\n .bucketName(loggingMetric.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n loggingMetric:\n type: gcp:logging:ProjectBucketConfig\n name: logging_metric\n properties:\n location: global\n project: my-project-name\n bucketId: _Default\n loggingMetricMetric:\n type: gcp:logging:Metric\n name: logging_metric\n properties:\n name: my-(custom)/metric\n filter: resource.type=gae_app AND severity\u003e=ERROR\n bucketName: ${loggingMetric.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Logging Metric Disabled\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst loggingMetric = new gcp.logging.Metric(\"logging_metric\", {\n name: \"my-(custom)/metric\",\n filter: \"resource.type=gae_app AND severity\u003e=ERROR\",\n metricDescriptor: {\n metricKind: \"DELTA\",\n valueType: \"INT64\",\n },\n disabled: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nlogging_metric = gcp.logging.Metric(\"logging_metric\",\n name=\"my-(custom)/metric\",\n filter=\"resource.type=gae_app AND severity\u003e=ERROR\",\n metric_descriptor={\n \"metric_kind\": \"DELTA\",\n \"value_type\": \"INT64\",\n },\n disabled=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var loggingMetric = new Gcp.Logging.Metric(\"logging_metric\", new()\n {\n Name = \"my-(custom)/metric\",\n Filter = \"resource.type=gae_app AND severity\u003e=ERROR\",\n MetricDescriptor = new Gcp.Logging.Inputs.MetricMetricDescriptorArgs\n {\n MetricKind = \"DELTA\",\n ValueType = \"INT64\",\n },\n Disabled = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewMetric(ctx, \"logging_metric\", \u0026logging.MetricArgs{\n\t\t\tName: pulumi.String(\"my-(custom)/metric\"),\n\t\t\tFilter: pulumi.String(\"resource.type=gae_app AND severity\u003e=ERROR\"),\n\t\t\tMetricDescriptor: \u0026logging.MetricMetricDescriptorArgs{\n\t\t\t\tMetricKind: pulumi.String(\"DELTA\"),\n\t\t\t\tValueType: pulumi.String(\"INT64\"),\n\t\t\t},\n\t\t\tDisabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.Metric;\nimport com.pulumi.gcp.logging.MetricArgs;\nimport com.pulumi.gcp.logging.inputs.MetricMetricDescriptorArgs;\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 loggingMetric = new Metric(\"loggingMetric\", MetricArgs.builder()\n .name(\"my-(custom)/metric\")\n .filter(\"resource.type=gae_app AND severity\u003e=ERROR\")\n .metricDescriptor(MetricMetricDescriptorArgs.builder()\n .metricKind(\"DELTA\")\n .valueType(\"INT64\")\n .build())\n .disabled(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n loggingMetric:\n type: gcp:logging:Metric\n name: logging_metric\n properties:\n name: my-(custom)/metric\n filter: resource.type=gae_app AND severity\u003e=ERROR\n metricDescriptor:\n metricKind: DELTA\n valueType: INT64\n disabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMetric can be imported using any of these accepted formats:\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Metric can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:logging/metric:Metric default {{project}} {{name}}\n```\n\n```sh\n$ pulumi import gcp:logging/metric:Metric default {{name}}\n```\n\n", + "description": "Logs-based metric can also be used to extract values from logs and create a a distribution\nof the values. The distribution records the statistics of the extracted values along with\nan optional histogram of the values as specified by the bucket options.\n\n\nTo get more information about Metric, see:\n\n* [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.metrics/create)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/logging/docs/apis)\n\n## Example Usage\n\n### Logging Metric Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst loggingMetric = new gcp.logging.Metric(\"logging_metric\", {\n name: \"my-(custom)/metric\",\n filter: \"resource.type=gae_app AND severity\u003e=ERROR\",\n metricDescriptor: {\n metricKind: \"DELTA\",\n valueType: \"DISTRIBUTION\",\n unit: \"1\",\n labels: [\n {\n key: \"mass\",\n valueType: \"STRING\",\n description: \"amount of matter\",\n },\n {\n key: \"sku\",\n valueType: \"INT64\",\n description: \"Identifying number for item\",\n },\n ],\n displayName: \"My metric\",\n },\n valueExtractor: \"EXTRACT(jsonPayload.request)\",\n labelExtractors: {\n mass: \"EXTRACT(jsonPayload.request)\",\n sku: \"EXTRACT(jsonPayload.id)\",\n },\n bucketOptions: {\n linearBuckets: {\n numFiniteBuckets: 3,\n width: 1,\n offset: 1,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nlogging_metric = gcp.logging.Metric(\"logging_metric\",\n name=\"my-(custom)/metric\",\n filter=\"resource.type=gae_app AND severity\u003e=ERROR\",\n metric_descriptor={\n \"metric_kind\": \"DELTA\",\n \"value_type\": \"DISTRIBUTION\",\n \"unit\": \"1\",\n \"labels\": [\n {\n \"key\": \"mass\",\n \"value_type\": \"STRING\",\n \"description\": \"amount of matter\",\n },\n {\n \"key\": \"sku\",\n \"value_type\": \"INT64\",\n \"description\": \"Identifying number for item\",\n },\n ],\n \"display_name\": \"My metric\",\n },\n value_extractor=\"EXTRACT(jsonPayload.request)\",\n label_extractors={\n \"mass\": \"EXTRACT(jsonPayload.request)\",\n \"sku\": \"EXTRACT(jsonPayload.id)\",\n },\n bucket_options={\n \"linear_buckets\": {\n \"num_finite_buckets\": 3,\n \"width\": 1,\n \"offset\": 1,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var loggingMetric = new Gcp.Logging.Metric(\"logging_metric\", new()\n {\n Name = \"my-(custom)/metric\",\n Filter = \"resource.type=gae_app AND severity\u003e=ERROR\",\n MetricDescriptor = new Gcp.Logging.Inputs.MetricMetricDescriptorArgs\n {\n MetricKind = \"DELTA\",\n ValueType = \"DISTRIBUTION\",\n Unit = \"1\",\n Labels = new[]\n {\n new Gcp.Logging.Inputs.MetricMetricDescriptorLabelArgs\n {\n Key = \"mass\",\n ValueType = \"STRING\",\n Description = \"amount of matter\",\n },\n new Gcp.Logging.Inputs.MetricMetricDescriptorLabelArgs\n {\n Key = \"sku\",\n ValueType = \"INT64\",\n Description = \"Identifying number for item\",\n },\n },\n DisplayName = \"My metric\",\n },\n ValueExtractor = \"EXTRACT(jsonPayload.request)\",\n LabelExtractors = \n {\n { \"mass\", \"EXTRACT(jsonPayload.request)\" },\n { \"sku\", \"EXTRACT(jsonPayload.id)\" },\n },\n BucketOptions = new Gcp.Logging.Inputs.MetricBucketOptionsArgs\n {\n LinearBuckets = new Gcp.Logging.Inputs.MetricBucketOptionsLinearBucketsArgs\n {\n NumFiniteBuckets = 3,\n Width = 1,\n Offset = 1,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewMetric(ctx, \"logging_metric\", \u0026logging.MetricArgs{\n\t\t\tName: pulumi.String(\"my-(custom)/metric\"),\n\t\t\tFilter: pulumi.String(\"resource.type=gae_app AND severity\u003e=ERROR\"),\n\t\t\tMetricDescriptor: \u0026logging.MetricMetricDescriptorArgs{\n\t\t\t\tMetricKind: pulumi.String(\"DELTA\"),\n\t\t\t\tValueType: pulumi.String(\"DISTRIBUTION\"),\n\t\t\t\tUnit: pulumi.String(\"1\"),\n\t\t\t\tLabels: logging.MetricMetricDescriptorLabelArray{\n\t\t\t\t\t\u0026logging.MetricMetricDescriptorLabelArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"mass\"),\n\t\t\t\t\t\tValueType: pulumi.String(\"STRING\"),\n\t\t\t\t\t\tDescription: pulumi.String(\"amount of matter\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026logging.MetricMetricDescriptorLabelArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"sku\"),\n\t\t\t\t\t\tValueType: pulumi.String(\"INT64\"),\n\t\t\t\t\t\tDescription: pulumi.String(\"Identifying number for item\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tDisplayName: pulumi.String(\"My metric\"),\n\t\t\t},\n\t\t\tValueExtractor: pulumi.String(\"EXTRACT(jsonPayload.request)\"),\n\t\t\tLabelExtractors: pulumi.StringMap{\n\t\t\t\t\"mass\": pulumi.String(\"EXTRACT(jsonPayload.request)\"),\n\t\t\t\t\"sku\": pulumi.String(\"EXTRACT(jsonPayload.id)\"),\n\t\t\t},\n\t\t\tBucketOptions: \u0026logging.MetricBucketOptionsArgs{\n\t\t\t\tLinearBuckets: \u0026logging.MetricBucketOptionsLinearBucketsArgs{\n\t\t\t\t\tNumFiniteBuckets: pulumi.Int(3),\n\t\t\t\t\tWidth: pulumi.Float64(1),\n\t\t\t\t\tOffset: pulumi.Float64(1),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.Metric;\nimport com.pulumi.gcp.logging.MetricArgs;\nimport com.pulumi.gcp.logging.inputs.MetricMetricDescriptorArgs;\nimport com.pulumi.gcp.logging.inputs.MetricBucketOptionsArgs;\nimport com.pulumi.gcp.logging.inputs.MetricBucketOptionsLinearBucketsArgs;\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 loggingMetric = new Metric(\"loggingMetric\", MetricArgs.builder()\n .name(\"my-(custom)/metric\")\n .filter(\"resource.type=gae_app AND severity\u003e=ERROR\")\n .metricDescriptor(MetricMetricDescriptorArgs.builder()\n .metricKind(\"DELTA\")\n .valueType(\"DISTRIBUTION\")\n .unit(\"1\")\n .labels( \n MetricMetricDescriptorLabelArgs.builder()\n .key(\"mass\")\n .valueType(\"STRING\")\n .description(\"amount of matter\")\n .build(),\n MetricMetricDescriptorLabelArgs.builder()\n .key(\"sku\")\n .valueType(\"INT64\")\n .description(\"Identifying number for item\")\n .build())\n .displayName(\"My metric\")\n .build())\n .valueExtractor(\"EXTRACT(jsonPayload.request)\")\n .labelExtractors(Map.ofEntries(\n Map.entry(\"mass\", \"EXTRACT(jsonPayload.request)\"),\n Map.entry(\"sku\", \"EXTRACT(jsonPayload.id)\")\n ))\n .bucketOptions(MetricBucketOptionsArgs.builder()\n .linearBuckets(MetricBucketOptionsLinearBucketsArgs.builder()\n .numFiniteBuckets(3)\n .width(1)\n .offset(1)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n loggingMetric:\n type: gcp:logging:Metric\n name: logging_metric\n properties:\n name: my-(custom)/metric\n filter: resource.type=gae_app AND severity\u003e=ERROR\n metricDescriptor:\n metricKind: DELTA\n valueType: DISTRIBUTION\n unit: '1'\n labels:\n - key: mass\n valueType: STRING\n description: amount of matter\n - key: sku\n valueType: INT64\n description: Identifying number for item\n displayName: My metric\n valueExtractor: EXTRACT(jsonPayload.request)\n labelExtractors:\n mass: EXTRACT(jsonPayload.request)\n sku: EXTRACT(jsonPayload.id)\n bucketOptions:\n linearBuckets:\n numFiniteBuckets: 3\n width: 1\n offset: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Logging Metric Counter Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst loggingMetric = new gcp.logging.Metric(\"logging_metric\", {\n name: \"my-(custom)/metric\",\n filter: \"resource.type=gae_app AND severity\u003e=ERROR\",\n metricDescriptor: {\n metricKind: \"DELTA\",\n valueType: \"INT64\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nlogging_metric = gcp.logging.Metric(\"logging_metric\",\n name=\"my-(custom)/metric\",\n filter=\"resource.type=gae_app AND severity\u003e=ERROR\",\n metric_descriptor={\n \"metric_kind\": \"DELTA\",\n \"value_type\": \"INT64\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var loggingMetric = new Gcp.Logging.Metric(\"logging_metric\", new()\n {\n Name = \"my-(custom)/metric\",\n Filter = \"resource.type=gae_app AND severity\u003e=ERROR\",\n MetricDescriptor = new Gcp.Logging.Inputs.MetricMetricDescriptorArgs\n {\n MetricKind = \"DELTA\",\n ValueType = \"INT64\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewMetric(ctx, \"logging_metric\", \u0026logging.MetricArgs{\n\t\t\tName: pulumi.String(\"my-(custom)/metric\"),\n\t\t\tFilter: pulumi.String(\"resource.type=gae_app AND severity\u003e=ERROR\"),\n\t\t\tMetricDescriptor: \u0026logging.MetricMetricDescriptorArgs{\n\t\t\t\tMetricKind: pulumi.String(\"DELTA\"),\n\t\t\t\tValueType: pulumi.String(\"INT64\"),\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.gcp.logging.Metric;\nimport com.pulumi.gcp.logging.MetricArgs;\nimport com.pulumi.gcp.logging.inputs.MetricMetricDescriptorArgs;\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 loggingMetric = new Metric(\"loggingMetric\", MetricArgs.builder()\n .name(\"my-(custom)/metric\")\n .filter(\"resource.type=gae_app AND severity\u003e=ERROR\")\n .metricDescriptor(MetricMetricDescriptorArgs.builder()\n .metricKind(\"DELTA\")\n .valueType(\"INT64\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n loggingMetric:\n type: gcp:logging:Metric\n name: logging_metric\n properties:\n name: my-(custom)/metric\n filter: resource.type=gae_app AND severity\u003e=ERROR\n metricDescriptor:\n metricKind: DELTA\n valueType: INT64\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Logging Metric Counter Labels\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst loggingMetric = new gcp.logging.Metric(\"logging_metric\", {\n name: \"my-(custom)/metric\",\n filter: \"resource.type=gae_app AND severity\u003e=ERROR\",\n metricDescriptor: {\n metricKind: \"DELTA\",\n valueType: \"INT64\",\n labels: [{\n key: \"mass\",\n valueType: \"STRING\",\n description: \"amount of matter\",\n }],\n },\n labelExtractors: {\n mass: \"EXTRACT(jsonPayload.request)\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nlogging_metric = gcp.logging.Metric(\"logging_metric\",\n name=\"my-(custom)/metric\",\n filter=\"resource.type=gae_app AND severity\u003e=ERROR\",\n metric_descriptor={\n \"metric_kind\": \"DELTA\",\n \"value_type\": \"INT64\",\n \"labels\": [{\n \"key\": \"mass\",\n \"value_type\": \"STRING\",\n \"description\": \"amount of matter\",\n }],\n },\n label_extractors={\n \"mass\": \"EXTRACT(jsonPayload.request)\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var loggingMetric = new Gcp.Logging.Metric(\"logging_metric\", new()\n {\n Name = \"my-(custom)/metric\",\n Filter = \"resource.type=gae_app AND severity\u003e=ERROR\",\n MetricDescriptor = new Gcp.Logging.Inputs.MetricMetricDescriptorArgs\n {\n MetricKind = \"DELTA\",\n ValueType = \"INT64\",\n Labels = new[]\n {\n new Gcp.Logging.Inputs.MetricMetricDescriptorLabelArgs\n {\n Key = \"mass\",\n ValueType = \"STRING\",\n Description = \"amount of matter\",\n },\n },\n },\n LabelExtractors = \n {\n { \"mass\", \"EXTRACT(jsonPayload.request)\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewMetric(ctx, \"logging_metric\", \u0026logging.MetricArgs{\n\t\t\tName: pulumi.String(\"my-(custom)/metric\"),\n\t\t\tFilter: pulumi.String(\"resource.type=gae_app AND severity\u003e=ERROR\"),\n\t\t\tMetricDescriptor: \u0026logging.MetricMetricDescriptorArgs{\n\t\t\t\tMetricKind: pulumi.String(\"DELTA\"),\n\t\t\t\tValueType: pulumi.String(\"INT64\"),\n\t\t\t\tLabels: logging.MetricMetricDescriptorLabelArray{\n\t\t\t\t\t\u0026logging.MetricMetricDescriptorLabelArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"mass\"),\n\t\t\t\t\t\tValueType: pulumi.String(\"STRING\"),\n\t\t\t\t\t\tDescription: pulumi.String(\"amount of matter\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabelExtractors: pulumi.StringMap{\n\t\t\t\t\"mass\": pulumi.String(\"EXTRACT(jsonPayload.request)\"),\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.gcp.logging.Metric;\nimport com.pulumi.gcp.logging.MetricArgs;\nimport com.pulumi.gcp.logging.inputs.MetricMetricDescriptorArgs;\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 loggingMetric = new Metric(\"loggingMetric\", MetricArgs.builder()\n .name(\"my-(custom)/metric\")\n .filter(\"resource.type=gae_app AND severity\u003e=ERROR\")\n .metricDescriptor(MetricMetricDescriptorArgs.builder()\n .metricKind(\"DELTA\")\n .valueType(\"INT64\")\n .labels(MetricMetricDescriptorLabelArgs.builder()\n .key(\"mass\")\n .valueType(\"STRING\")\n .description(\"amount of matter\")\n .build())\n .build())\n .labelExtractors(Map.of(\"mass\", \"EXTRACT(jsonPayload.request)\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n loggingMetric:\n type: gcp:logging:Metric\n name: logging_metric\n properties:\n name: my-(custom)/metric\n filter: resource.type=gae_app AND severity\u003e=ERROR\n metricDescriptor:\n metricKind: DELTA\n valueType: INT64\n labels:\n - key: mass\n valueType: STRING\n description: amount of matter\n labelExtractors:\n mass: EXTRACT(jsonPayload.request)\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Logging Metric Logging Bucket\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst loggingMetric = new gcp.logging.ProjectBucketConfig(\"logging_metric\", {\n location: \"global\",\n project: \"my-project-name\",\n bucketId: \"_Default\",\n});\nconst loggingMetricMetric = new gcp.logging.Metric(\"logging_metric\", {\n name: \"my-(custom)/metric\",\n filter: \"resource.type=gae_app AND severity\u003e=ERROR\",\n bucketName: loggingMetric.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nlogging_metric = gcp.logging.ProjectBucketConfig(\"logging_metric\",\n location=\"global\",\n project=\"my-project-name\",\n bucket_id=\"_Default\")\nlogging_metric_metric = gcp.logging.Metric(\"logging_metric\",\n name=\"my-(custom)/metric\",\n filter=\"resource.type=gae_app AND severity\u003e=ERROR\",\n bucket_name=logging_metric.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var loggingMetric = new Gcp.Logging.ProjectBucketConfig(\"logging_metric\", new()\n {\n Location = \"global\",\n Project = \"my-project-name\",\n BucketId = \"_Default\",\n });\n\n var loggingMetricMetric = new Gcp.Logging.Metric(\"logging_metric\", new()\n {\n Name = \"my-(custom)/metric\",\n Filter = \"resource.type=gae_app AND severity\u003e=ERROR\",\n BucketName = loggingMetric.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tloggingMetric, err := logging.NewProjectBucketConfig(ctx, \"logging_metric\", \u0026logging.ProjectBucketConfigArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tBucketId: pulumi.String(\"_Default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewMetric(ctx, \"logging_metric\", \u0026logging.MetricArgs{\n\t\t\tName: pulumi.String(\"my-(custom)/metric\"),\n\t\t\tFilter: pulumi.String(\"resource.type=gae_app AND severity\u003e=ERROR\"),\n\t\t\tBucketName: loggingMetric.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.ProjectBucketConfig;\nimport com.pulumi.gcp.logging.ProjectBucketConfigArgs;\nimport com.pulumi.gcp.logging.Metric;\nimport com.pulumi.gcp.logging.MetricArgs;\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 loggingMetric = new ProjectBucketConfig(\"loggingMetric\", ProjectBucketConfigArgs.builder()\n .location(\"global\")\n .project(\"my-project-name\")\n .bucketId(\"_Default\")\n .build());\n\n var loggingMetricMetric = new Metric(\"loggingMetricMetric\", MetricArgs.builder()\n .name(\"my-(custom)/metric\")\n .filter(\"resource.type=gae_app AND severity\u003e=ERROR\")\n .bucketName(loggingMetric.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n loggingMetric:\n type: gcp:logging:ProjectBucketConfig\n name: logging_metric\n properties:\n location: global\n project: my-project-name\n bucketId: _Default\n loggingMetricMetric:\n type: gcp:logging:Metric\n name: logging_metric\n properties:\n name: my-(custom)/metric\n filter: resource.type=gae_app AND severity\u003e=ERROR\n bucketName: ${loggingMetric.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Logging Metric Disabled\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst loggingMetric = new gcp.logging.Metric(\"logging_metric\", {\n name: \"my-(custom)/metric\",\n filter: \"resource.type=gae_app AND severity\u003e=ERROR\",\n metricDescriptor: {\n metricKind: \"DELTA\",\n valueType: \"INT64\",\n },\n disabled: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nlogging_metric = gcp.logging.Metric(\"logging_metric\",\n name=\"my-(custom)/metric\",\n filter=\"resource.type=gae_app AND severity\u003e=ERROR\",\n metric_descriptor={\n \"metric_kind\": \"DELTA\",\n \"value_type\": \"INT64\",\n },\n disabled=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var loggingMetric = new Gcp.Logging.Metric(\"logging_metric\", new()\n {\n Name = \"my-(custom)/metric\",\n Filter = \"resource.type=gae_app AND severity\u003e=ERROR\",\n MetricDescriptor = new Gcp.Logging.Inputs.MetricMetricDescriptorArgs\n {\n MetricKind = \"DELTA\",\n ValueType = \"INT64\",\n },\n Disabled = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewMetric(ctx, \"logging_metric\", \u0026logging.MetricArgs{\n\t\t\tName: pulumi.String(\"my-(custom)/metric\"),\n\t\t\tFilter: pulumi.String(\"resource.type=gae_app AND severity\u003e=ERROR\"),\n\t\t\tMetricDescriptor: \u0026logging.MetricMetricDescriptorArgs{\n\t\t\t\tMetricKind: pulumi.String(\"DELTA\"),\n\t\t\t\tValueType: pulumi.String(\"INT64\"),\n\t\t\t},\n\t\t\tDisabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.Metric;\nimport com.pulumi.gcp.logging.MetricArgs;\nimport com.pulumi.gcp.logging.inputs.MetricMetricDescriptorArgs;\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 loggingMetric = new Metric(\"loggingMetric\", MetricArgs.builder()\n .name(\"my-(custom)/metric\")\n .filter(\"resource.type=gae_app AND severity\u003e=ERROR\")\n .metricDescriptor(MetricMetricDescriptorArgs.builder()\n .metricKind(\"DELTA\")\n .valueType(\"INT64\")\n .build())\n .disabled(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n loggingMetric:\n type: gcp:logging:Metric\n name: logging_metric\n properties:\n name: my-(custom)/metric\n filter: resource.type=gae_app AND severity\u003e=ERROR\n metricDescriptor:\n metricKind: DELTA\n valueType: INT64\n disabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMetric can be imported using any of these accepted formats:\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Metric can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:logging/metric:Metric default \"{{project}} {{name}}\"\n```\n\n```sh\n$ pulumi import gcp:logging/metric:Metric default {{name}}\n```\n\n", "properties": { "bucketName": { "type": "string", @@ -229406,11 +232315,11 @@ "properties": { "adminSettings": { "$ref": "#/types/gcp:looker/InstanceAdminSettings:InstanceAdminSettings", - "description": "Looker instance Admin settings.\nStructure is documented below.\n" + "description": "Looker instance Admin settings.\n" }, "consumerNetwork": { "type": "string", - "description": "Network name in the consumer project in the format of: projects/{project}/global/networks/{network}\nNote that the consumer network may be in a different GCP project than the consumer\nproject that is hosting the Looker Instance.\n" + "description": "Network name in the consumer project in the format of: projects/{project}/global/networks/{network} Note that the\nconsumer network may be in a different GCP project than the consumer project that is hosting the Looker Instance.\n" }, "createTime": { "type": "string", @@ -229418,15 +232327,15 @@ }, "customDomain": { "$ref": "#/types/gcp:looker/InstanceCustomDomain:InstanceCustomDomain", - "description": "Custom domain settings for a Looker instance.\nStructure is documented below.\n" + "description": "Custom domain settings for a Looker instance.\n" }, "deletionPolicy": { "type": "string", - "description": "Policy to determine if the cluster should be deleted forcefully.\nIf setting deletion_policy = \"FORCE\", the Looker instance will be deleted regardless\nof its nested resources. If set to \"DEFAULT\", Looker instances that still have\nnested resources will return an error. Possible values: DEFAULT, FORCE\n" + "description": "Policy to determine if the cluster should be deleted forcefully. If setting deletion_policy = \"FORCE\", the Looker\ninstance will be deleted regardless of its nested resources. If set to \"DEFAULT\", Looker instances that still have\nnested resources will return an error. Possible values: DEFAULT, FORCE\n" }, "denyMaintenancePeriod": { "$ref": "#/types/gcp:looker/InstanceDenyMaintenancePeriod:InstanceDenyMaintenancePeriod", - "description": "Maintenance denial period for this instance.\nYou must allow at least 14 days of maintenance availability\nbetween any two deny maintenance periods.\nStructure is documented below.\n" + "description": "Maintenance denial period for this instance. You must allow at least 14 days of maintenance availability between any two\ndeny maintenance periods.\n" }, "egressPublicIp": { "type": "string", @@ -229434,7 +232343,7 @@ }, "encryptionConfig": { "$ref": "#/types/gcp:looker/InstanceEncryptionConfig:InstanceEncryptionConfig", - "description": "Looker instance encryption settings.\nStructure is documented below.\n" + "description": "Looker instance encryption settings.\n" }, "fipsEnabled": { "type": "boolean", @@ -229458,11 +232367,11 @@ }, "maintenanceWindow": { "$ref": "#/types/gcp:looker/InstanceMaintenanceWindow:InstanceMaintenanceWindow", - "description": "Maintenance window for an instance.\nMaintenance of your instance takes place once a month, and will require\nyour instance to be restarted during updates, which will temporarily\ndisrupt service.\nStructure is documented below.\n" + "description": "Maintenance window for an instance. Maintenance of your instance takes place once a month, and will require your\ninstance to be restarted during updates, which will temporarily disrupt service.\n" }, "name": { "type": "string", - "description": "The ID of the instance or a fully qualified identifier for the instance.\n\n\n- - -\n" + "description": "The ID of the instance or a fully qualified identifier for the instance.\n" }, "oauthConfig": { "$ref": "#/types/gcp:looker/InstanceOauthConfig:InstanceOauthConfig", @@ -229470,19 +232379,18 @@ }, "platformEdition": { "type": "string", - "description": "Platform editions for a Looker instance. Each edition maps to a set of instance features, like its size. Must be one of these values:\n- LOOKER_CORE_TRIAL: trial instance (Currently Unavailable)\n- LOOKER_CORE_STANDARD: pay as you go standard instance (Currently Unavailable)\n- LOOKER_CORE_STANDARD_ANNUAL: subscription standard instance\n- LOOKER_CORE_ENTERPRISE_ANNUAL: subscription enterprise instance\n- LOOKER_CORE_EMBED_ANNUAL: subscription embed instance\nDefault value is `LOOKER_CORE_TRIAL`.\nPossible values are: `LOOKER_CORE_TRIAL`, `LOOKER_CORE_STANDARD`, `LOOKER_CORE_STANDARD_ANNUAL`, `LOOKER_CORE_ENTERPRISE_ANNUAL`, `LOOKER_CORE_EMBED_ANNUAL`.\n" + "description": "Platform editions for a Looker instance. Each edition maps to a set of instance features, like its size. Must be one of\nthese values: - LOOKER_CORE_TRIAL: trial instance (Currently Unavailable) - LOOKER_CORE_STANDARD: pay as you go standard\ninstance (Currently Unavailable) - LOOKER_CORE_STANDARD_ANNUAL: subscription standard instance -\nLOOKER_CORE_ENTERPRISE_ANNUAL: subscription enterprise instance - LOOKER_CORE_EMBED_ANNUAL: subscription embed instance\nDefault value: \"LOOKER_CORE_TRIAL\" Possible values: [\"LOOKER_CORE_TRIAL\", \"LOOKER_CORE_STANDARD\",\n\"LOOKER_CORE_STANDARD_ANNUAL\", \"LOOKER_CORE_ENTERPRISE_ANNUAL\", \"LOOKER_CORE_EMBED_ANNUAL\"]\n" }, "privateIpEnabled": { "type": "boolean", "description": "Whether private IP is enabled on the Looker instance.\n" }, "project": { - "type": "string", - "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n" + "type": "string" }, "pscConfig": { "$ref": "#/types/gcp:looker/InstancePscConfig:InstancePscConfig", - "description": "Information for Private Service Connect (PSC) setup for a Looker instance.\nStructure is documented below.\n" + "description": "Information for Private Service Connect (PSC) setup for a Looker instance.\n" }, "pscEnabled": { "type": "boolean", @@ -229498,7 +232406,7 @@ }, "reservedRange": { "type": "string", - "description": "Name of a reserved IP address range within the consumer network, to be used for\nprivate service access connection. User may or may not specify this in a request.\n" + "description": "Name of a reserved IP address range within the consumer network, to be used for private service access connection. User\nmay or may not specify this in a request.\n" }, "updateTime": { "type": "string", @@ -229506,7 +232414,7 @@ }, "userMetadata": { "$ref": "#/types/gcp:looker/InstanceUserMetadata:InstanceUserMetadata", - "description": "Metadata about users for a Looker instance.\nThese settings are only available when platform edition LOOKER_CORE_STANDARD is set.\nThere are ten Standard and two Developer users included in the cost of the product.\nYou can allocate additional Standard, Viewer, and Developer users for this instance.\nIt is an optional step and can be modified later.\nWith the Standard edition of Looker (Google Cloud core), you can provision up to 50\ntotal users, distributed across Viewer, Standard, and Developer.\nStructure is documented below.\n" + "description": "Metadata about users for a Looker instance. These settings are only available when platform edition LOOKER_CORE_STANDARD\nis set. There are ten Standard and two Developer users included in the cost of the product. You can allocate additional\nStandard, Viewer, and Developer users for this instance. It is an optional step and can be modified later. With the\nStandard edition of Looker (Google Cloud core), you can provision up to 50 total users, distributed across Viewer,\nStandard, and Developer.\n" } }, "required": [ @@ -229518,6 +232426,7 @@ "lookerUri", "lookerVersion", "name", + "oauthConfig", "project", "region", "updateTime" @@ -229525,27 +232434,27 @@ "inputProperties": { "adminSettings": { "$ref": "#/types/gcp:looker/InstanceAdminSettings:InstanceAdminSettings", - "description": "Looker instance Admin settings.\nStructure is documented below.\n" + "description": "Looker instance Admin settings.\n" }, "consumerNetwork": { "type": "string", - "description": "Network name in the consumer project in the format of: projects/{project}/global/networks/{network}\nNote that the consumer network may be in a different GCP project than the consumer\nproject that is hosting the Looker Instance.\n" + "description": "Network name in the consumer project in the format of: projects/{project}/global/networks/{network} Note that the\nconsumer network may be in a different GCP project than the consumer project that is hosting the Looker Instance.\n" }, "customDomain": { "$ref": "#/types/gcp:looker/InstanceCustomDomain:InstanceCustomDomain", - "description": "Custom domain settings for a Looker instance.\nStructure is documented below.\n" + "description": "Custom domain settings for a Looker instance.\n" }, "deletionPolicy": { "type": "string", - "description": "Policy to determine if the cluster should be deleted forcefully.\nIf setting deletion_policy = \"FORCE\", the Looker instance will be deleted regardless\nof its nested resources. If set to \"DEFAULT\", Looker instances that still have\nnested resources will return an error. Possible values: DEFAULT, FORCE\n" + "description": "Policy to determine if the cluster should be deleted forcefully. If setting deletion_policy = \"FORCE\", the Looker\ninstance will be deleted regardless of its nested resources. If set to \"DEFAULT\", Looker instances that still have\nnested resources will return an error. Possible values: DEFAULT, FORCE\n" }, "denyMaintenancePeriod": { "$ref": "#/types/gcp:looker/InstanceDenyMaintenancePeriod:InstanceDenyMaintenancePeriod", - "description": "Maintenance denial period for this instance.\nYou must allow at least 14 days of maintenance availability\nbetween any two deny maintenance periods.\nStructure is documented below.\n" + "description": "Maintenance denial period for this instance. You must allow at least 14 days of maintenance availability between any two\ndeny maintenance periods.\n" }, "encryptionConfig": { "$ref": "#/types/gcp:looker/InstanceEncryptionConfig:InstanceEncryptionConfig", - "description": "Looker instance encryption settings.\nStructure is documented below.\n" + "description": "Looker instance encryption settings.\n" }, "fipsEnabled": { "type": "boolean", @@ -229553,11 +232462,11 @@ }, "maintenanceWindow": { "$ref": "#/types/gcp:looker/InstanceMaintenanceWindow:InstanceMaintenanceWindow", - "description": "Maintenance window for an instance.\nMaintenance of your instance takes place once a month, and will require\nyour instance to be restarted during updates, which will temporarily\ndisrupt service.\nStructure is documented below.\n" + "description": "Maintenance window for an instance. Maintenance of your instance takes place once a month, and will require your\ninstance to be restarted during updates, which will temporarily disrupt service.\n" }, "name": { "type": "string", - "description": "The ID of the instance or a fully qualified identifier for the instance.\n\n\n- - -\n", + "description": "The ID of the instance or a fully qualified identifier for the instance.\n", "willReplaceOnChanges": true }, "oauthConfig": { @@ -229566,7 +232475,7 @@ }, "platformEdition": { "type": "string", - "description": "Platform editions for a Looker instance. Each edition maps to a set of instance features, like its size. Must be one of these values:\n- LOOKER_CORE_TRIAL: trial instance (Currently Unavailable)\n- LOOKER_CORE_STANDARD: pay as you go standard instance (Currently Unavailable)\n- LOOKER_CORE_STANDARD_ANNUAL: subscription standard instance\n- LOOKER_CORE_ENTERPRISE_ANNUAL: subscription enterprise instance\n- LOOKER_CORE_EMBED_ANNUAL: subscription embed instance\nDefault value is `LOOKER_CORE_TRIAL`.\nPossible values are: `LOOKER_CORE_TRIAL`, `LOOKER_CORE_STANDARD`, `LOOKER_CORE_STANDARD_ANNUAL`, `LOOKER_CORE_ENTERPRISE_ANNUAL`, `LOOKER_CORE_EMBED_ANNUAL`.\n", + "description": "Platform editions for a Looker instance. Each edition maps to a set of instance features, like its size. Must be one of\nthese values: - LOOKER_CORE_TRIAL: trial instance (Currently Unavailable) - LOOKER_CORE_STANDARD: pay as you go standard\ninstance (Currently Unavailable) - LOOKER_CORE_STANDARD_ANNUAL: subscription standard instance -\nLOOKER_CORE_ENTERPRISE_ANNUAL: subscription enterprise instance - LOOKER_CORE_EMBED_ANNUAL: subscription embed instance\nDefault value: \"LOOKER_CORE_TRIAL\" Possible values: [\"LOOKER_CORE_TRIAL\", \"LOOKER_CORE_STANDARD\",\n\"LOOKER_CORE_STANDARD_ANNUAL\", \"LOOKER_CORE_ENTERPRISE_ANNUAL\", \"LOOKER_CORE_EMBED_ANNUAL\"]\n", "willReplaceOnChanges": true }, "privateIpEnabled": { @@ -229575,12 +232484,11 @@ }, "project": { "type": "string", - "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", "willReplaceOnChanges": true }, "pscConfig": { "$ref": "#/types/gcp:looker/InstancePscConfig:InstancePscConfig", - "description": "Information for Private Service Connect (PSC) setup for a Looker instance.\nStructure is documented below.\n" + "description": "Information for Private Service Connect (PSC) setup for a Looker instance.\n" }, "pscEnabled": { "type": "boolean", @@ -229597,23 +232505,26 @@ }, "reservedRange": { "type": "string", - "description": "Name of a reserved IP address range within the consumer network, to be used for\nprivate service access connection. User may or may not specify this in a request.\n" + "description": "Name of a reserved IP address range within the consumer network, to be used for private service access connection. User\nmay or may not specify this in a request.\n" }, "userMetadata": { "$ref": "#/types/gcp:looker/InstanceUserMetadata:InstanceUserMetadata", - "description": "Metadata about users for a Looker instance.\nThese settings are only available when platform edition LOOKER_CORE_STANDARD is set.\nThere are ten Standard and two Developer users included in the cost of the product.\nYou can allocate additional Standard, Viewer, and Developer users for this instance.\nIt is an optional step and can be modified later.\nWith the Standard edition of Looker (Google Cloud core), you can provision up to 50\ntotal users, distributed across Viewer, Standard, and Developer.\nStructure is documented below.\n" + "description": "Metadata about users for a Looker instance. These settings are only available when platform edition LOOKER_CORE_STANDARD\nis set. There are ten Standard and two Developer users included in the cost of the product. You can allocate additional\nStandard, Viewer, and Developer users for this instance. It is an optional step and can be modified later. With the\nStandard edition of Looker (Google Cloud core), you can provision up to 50 total users, distributed across Viewer,\nStandard, and Developer.\n" } }, + "requiredInputs": [ + "oauthConfig" + ], "stateInputs": { "description": "Input properties used for looking up and filtering Instance resources.\n", "properties": { "adminSettings": { "$ref": "#/types/gcp:looker/InstanceAdminSettings:InstanceAdminSettings", - "description": "Looker instance Admin settings.\nStructure is documented below.\n" + "description": "Looker instance Admin settings.\n" }, "consumerNetwork": { "type": "string", - "description": "Network name in the consumer project in the format of: projects/{project}/global/networks/{network}\nNote that the consumer network may be in a different GCP project than the consumer\nproject that is hosting the Looker Instance.\n" + "description": "Network name in the consumer project in the format of: projects/{project}/global/networks/{network} Note that the\nconsumer network may be in a different GCP project than the consumer project that is hosting the Looker Instance.\n" }, "createTime": { "type": "string", @@ -229621,15 +232532,15 @@ }, "customDomain": { "$ref": "#/types/gcp:looker/InstanceCustomDomain:InstanceCustomDomain", - "description": "Custom domain settings for a Looker instance.\nStructure is documented below.\n" + "description": "Custom domain settings for a Looker instance.\n" }, "deletionPolicy": { "type": "string", - "description": "Policy to determine if the cluster should be deleted forcefully.\nIf setting deletion_policy = \"FORCE\", the Looker instance will be deleted regardless\nof its nested resources. If set to \"DEFAULT\", Looker instances that still have\nnested resources will return an error. Possible values: DEFAULT, FORCE\n" + "description": "Policy to determine if the cluster should be deleted forcefully. If setting deletion_policy = \"FORCE\", the Looker\ninstance will be deleted regardless of its nested resources. If set to \"DEFAULT\", Looker instances that still have\nnested resources will return an error. Possible values: DEFAULT, FORCE\n" }, "denyMaintenancePeriod": { "$ref": "#/types/gcp:looker/InstanceDenyMaintenancePeriod:InstanceDenyMaintenancePeriod", - "description": "Maintenance denial period for this instance.\nYou must allow at least 14 days of maintenance availability\nbetween any two deny maintenance periods.\nStructure is documented below.\n" + "description": "Maintenance denial period for this instance. You must allow at least 14 days of maintenance availability between any two\ndeny maintenance periods.\n" }, "egressPublicIp": { "type": "string", @@ -229637,7 +232548,7 @@ }, "encryptionConfig": { "$ref": "#/types/gcp:looker/InstanceEncryptionConfig:InstanceEncryptionConfig", - "description": "Looker instance encryption settings.\nStructure is documented below.\n" + "description": "Looker instance encryption settings.\n" }, "fipsEnabled": { "type": "boolean", @@ -229661,11 +232572,11 @@ }, "maintenanceWindow": { "$ref": "#/types/gcp:looker/InstanceMaintenanceWindow:InstanceMaintenanceWindow", - "description": "Maintenance window for an instance.\nMaintenance of your instance takes place once a month, and will require\nyour instance to be restarted during updates, which will temporarily\ndisrupt service.\nStructure is documented below.\n" + "description": "Maintenance window for an instance. Maintenance of your instance takes place once a month, and will require your\ninstance to be restarted during updates, which will temporarily disrupt service.\n" }, "name": { "type": "string", - "description": "The ID of the instance or a fully qualified identifier for the instance.\n\n\n- - -\n", + "description": "The ID of the instance or a fully qualified identifier for the instance.\n", "willReplaceOnChanges": true }, "oauthConfig": { @@ -229674,7 +232585,7 @@ }, "platformEdition": { "type": "string", - "description": "Platform editions for a Looker instance. Each edition maps to a set of instance features, like its size. Must be one of these values:\n- LOOKER_CORE_TRIAL: trial instance (Currently Unavailable)\n- LOOKER_CORE_STANDARD: pay as you go standard instance (Currently Unavailable)\n- LOOKER_CORE_STANDARD_ANNUAL: subscription standard instance\n- LOOKER_CORE_ENTERPRISE_ANNUAL: subscription enterprise instance\n- LOOKER_CORE_EMBED_ANNUAL: subscription embed instance\nDefault value is `LOOKER_CORE_TRIAL`.\nPossible values are: `LOOKER_CORE_TRIAL`, `LOOKER_CORE_STANDARD`, `LOOKER_CORE_STANDARD_ANNUAL`, `LOOKER_CORE_ENTERPRISE_ANNUAL`, `LOOKER_CORE_EMBED_ANNUAL`.\n", + "description": "Platform editions for a Looker instance. Each edition maps to a set of instance features, like its size. Must be one of\nthese values: - LOOKER_CORE_TRIAL: trial instance (Currently Unavailable) - LOOKER_CORE_STANDARD: pay as you go standard\ninstance (Currently Unavailable) - LOOKER_CORE_STANDARD_ANNUAL: subscription standard instance -\nLOOKER_CORE_ENTERPRISE_ANNUAL: subscription enterprise instance - LOOKER_CORE_EMBED_ANNUAL: subscription embed instance\nDefault value: \"LOOKER_CORE_TRIAL\" Possible values: [\"LOOKER_CORE_TRIAL\", \"LOOKER_CORE_STANDARD\",\n\"LOOKER_CORE_STANDARD_ANNUAL\", \"LOOKER_CORE_ENTERPRISE_ANNUAL\", \"LOOKER_CORE_EMBED_ANNUAL\"]\n", "willReplaceOnChanges": true }, "privateIpEnabled": { @@ -229683,12 +232594,11 @@ }, "project": { "type": "string", - "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", "willReplaceOnChanges": true }, "pscConfig": { "$ref": "#/types/gcp:looker/InstancePscConfig:InstancePscConfig", - "description": "Information for Private Service Connect (PSC) setup for a Looker instance.\nStructure is documented below.\n" + "description": "Information for Private Service Connect (PSC) setup for a Looker instance.\n" }, "pscEnabled": { "type": "boolean", @@ -229705,7 +232615,7 @@ }, "reservedRange": { "type": "string", - "description": "Name of a reserved IP address range within the consumer network, to be used for\nprivate service access connection. User may or may not specify this in a request.\n" + "description": "Name of a reserved IP address range within the consumer network, to be used for private service access connection. User\nmay or may not specify this in a request.\n" }, "updateTime": { "type": "string", @@ -229713,7 +232623,7 @@ }, "userMetadata": { "$ref": "#/types/gcp:looker/InstanceUserMetadata:InstanceUserMetadata", - "description": "Metadata about users for a Looker instance.\nThese settings are only available when platform edition LOOKER_CORE_STANDARD is set.\nThere are ten Standard and two Developer users included in the cost of the product.\nYou can allocate additional Standard, Viewer, and Developer users for this instance.\nIt is an optional step and can be modified later.\nWith the Standard edition of Looker (Google Cloud core), you can provision up to 50\ntotal users, distributed across Viewer, Standard, and Developer.\nStructure is documented below.\n" + "description": "Metadata about users for a Looker instance. These settings are only available when platform edition LOOKER_CORE_STANDARD\nis set. There are ten Standard and two Developer users included in the cost of the product. You can allocate additional\nStandard, Viewer, and Developer users for this instance. It is an optional step and can be modified later. With the\nStandard edition of Looker (Google Cloud core), you can provision up to 50 total users, distributed across Viewer,\nStandard, and Developer.\n" } }, "type": "object" @@ -230364,7 +233274,7 @@ } }, "gcp:memorystore/instance:Instance": { - "description": "## Example Usage\n\n### Memorystore Instance Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"my-network\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"my-subnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"my-policy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst project = gcp.organizations.getProject({});\nconst instance_basic = new gcp.memorystore.Instance(\"instance-basic\", {\n instanceId: \"basic-instance\",\n shardCount: 3,\n desiredPscAutoConnections: [{\n network: producerNet.id,\n projectId: project.then(project =\u003e project.projectId),\n }],\n location: \"us-central1\",\n deletionProtectionEnabled: false,\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"my-network\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"my-subnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"my-policy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\nproject = gcp.organizations.get_project()\ninstance_basic = gcp.memorystore.Instance(\"instance-basic\",\n instance_id=\"basic-instance\",\n shard_count=3,\n desired_psc_auto_connections=[{\n \"network\": producer_net.id,\n \"project_id\": project.project_id,\n }],\n location=\"us-central1\",\n deletion_protection_enabled=False,\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"my-network\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"my-subnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"my-policy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var instance_basic = new Gcp.MemoryStore.Instance(\"instance-basic\", new()\n {\n InstanceId = \"basic-instance\",\n ShardCount = 3,\n DesiredPscAutoConnections = new[]\n {\n new Gcp.MemoryStore.Inputs.InstanceDesiredPscAutoConnectionArgs\n {\n Network = producerNet.Id,\n ProjectId = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n },\n Location = \"us-central1\",\n DeletionProtectionEnabled = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/memorystore\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"my-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"my-subnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"my-policy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = memorystore.NewInstance(ctx, \"instance-basic\", \u0026memorystore.InstanceArgs{\n\t\t\tInstanceId: pulumi.String(\"basic-instance\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tDesiredPscAutoConnections: memorystore.InstanceDesiredPscAutoConnectionArray{\n\t\t\t\t\u0026memorystore.InstanceDesiredPscAutoConnectionArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t\tProjectId: pulumi.String(project.ProjectId),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.memorystore.Instance;\nimport com.pulumi.gcp.memorystore.InstanceArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstanceDesiredPscAutoConnectionArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"my-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"my-subnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"my-policy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var instance_basic = new Instance(\"instance-basic\", InstanceArgs.builder()\n .instanceId(\"basic-instance\")\n .shardCount(3)\n .desiredPscAutoConnections(InstanceDesiredPscAutoConnectionArgs.builder()\n .network(producerNet.id())\n .projectId(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .build())\n .location(\"us-central1\")\n .deletionProtectionEnabled(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance-basic:\n type: gcp:memorystore:Instance\n properties:\n instanceId: basic-instance\n shardCount: 3\n desiredPscAutoConnections:\n - network: ${producerNet.id}\n projectId: ${project.projectId}\n location: us-central1\n deletionProtectionEnabled: false\n options:\n dependson:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: my-policy\n location: us-central1\n serviceClass: gcp-memorystore\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: my-subnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: my-network\n autoCreateSubnetworks: false\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Memorystore Instance Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"my-network\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"my-subnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"my-policy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst project = gcp.organizations.getProject({});\nconst instance_full = new gcp.memorystore.Instance(\"instance-full\", {\n instanceId: \"full-instance\",\n shardCount: 3,\n desiredPscAutoConnections: [{\n network: producerNet.id,\n projectId: project.then(project =\u003e project.projectId),\n }],\n location: \"us-central1\",\n replicaCount: 2,\n nodeType: \"SHARED_CORE_NANO\",\n transitEncryptionMode: \"TRANSIT_ENCRYPTION_DISABLED\",\n authorizationMode: \"AUTH_DISABLED\",\n engineConfigs: {\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n zoneDistributionConfig: {\n mode: \"SINGLE_ZONE\",\n zone: \"us-central1-b\",\n },\n engineVersion: \"VALKEY_7_2\",\n deletionProtectionEnabled: false,\n mode: \"CLUSTER\",\n persistenceConfig: {\n mode: \"RDB\",\n rdbConfig: {\n rdbSnapshotPeriod: \"ONE_HOUR\",\n rdbSnapshotStartTime: \"2024-10-02T15:01:23Z\",\n },\n },\n labels: {\n abc: \"xyz\",\n },\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"my-network\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"my-subnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"my-policy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\nproject = gcp.organizations.get_project()\ninstance_full = gcp.memorystore.Instance(\"instance-full\",\n instance_id=\"full-instance\",\n shard_count=3,\n desired_psc_auto_connections=[{\n \"network\": producer_net.id,\n \"project_id\": project.project_id,\n }],\n location=\"us-central1\",\n replica_count=2,\n node_type=\"SHARED_CORE_NANO\",\n transit_encryption_mode=\"TRANSIT_ENCRYPTION_DISABLED\",\n authorization_mode=\"AUTH_DISABLED\",\n engine_configs={\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n zone_distribution_config={\n \"mode\": \"SINGLE_ZONE\",\n \"zone\": \"us-central1-b\",\n },\n engine_version=\"VALKEY_7_2\",\n deletion_protection_enabled=False,\n mode=\"CLUSTER\",\n persistence_config={\n \"mode\": \"RDB\",\n \"rdb_config\": {\n \"rdb_snapshot_period\": \"ONE_HOUR\",\n \"rdb_snapshot_start_time\": \"2024-10-02T15:01:23Z\",\n },\n },\n labels={\n \"abc\": \"xyz\",\n },\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"my-network\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"my-subnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"my-policy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var instance_full = new Gcp.MemoryStore.Instance(\"instance-full\", new()\n {\n InstanceId = \"full-instance\",\n ShardCount = 3,\n DesiredPscAutoConnections = new[]\n {\n new Gcp.MemoryStore.Inputs.InstanceDesiredPscAutoConnectionArgs\n {\n Network = producerNet.Id,\n ProjectId = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n },\n Location = \"us-central1\",\n ReplicaCount = 2,\n NodeType = \"SHARED_CORE_NANO\",\n TransitEncryptionMode = \"TRANSIT_ENCRYPTION_DISABLED\",\n AuthorizationMode = \"AUTH_DISABLED\",\n EngineConfigs = \n {\n { \"maxmemory-policy\", \"volatile-ttl\" },\n },\n ZoneDistributionConfig = new Gcp.MemoryStore.Inputs.InstanceZoneDistributionConfigArgs\n {\n Mode = \"SINGLE_ZONE\",\n Zone = \"us-central1-b\",\n },\n EngineVersion = \"VALKEY_7_2\",\n DeletionProtectionEnabled = false,\n Mode = \"CLUSTER\",\n PersistenceConfig = new Gcp.MemoryStore.Inputs.InstancePersistenceConfigArgs\n {\n Mode = \"RDB\",\n RdbConfig = new Gcp.MemoryStore.Inputs.InstancePersistenceConfigRdbConfigArgs\n {\n RdbSnapshotPeriod = \"ONE_HOUR\",\n RdbSnapshotStartTime = \"2024-10-02T15:01:23Z\",\n },\n },\n Labels = \n {\n { \"abc\", \"xyz\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/memorystore\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"my-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"my-subnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"my-policy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = memorystore.NewInstance(ctx, \"instance-full\", \u0026memorystore.InstanceArgs{\n\t\t\tInstanceId: pulumi.String(\"full-instance\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tDesiredPscAutoConnections: memorystore.InstanceDesiredPscAutoConnectionArray{\n\t\t\t\t\u0026memorystore.InstanceDesiredPscAutoConnectionArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t\tProjectId: pulumi.String(project.ProjectId),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tReplicaCount: pulumi.Int(2),\n\t\t\tNodeType: pulumi.String(\"SHARED_CORE_NANO\"),\n\t\t\tTransitEncryptionMode: pulumi.String(\"TRANSIT_ENCRYPTION_DISABLED\"),\n\t\t\tAuthorizationMode: pulumi.String(\"AUTH_DISABLED\"),\n\t\t\tEngineConfigs: pulumi.StringMap{\n\t\t\t\t\"maxmemory-policy\": pulumi.String(\"volatile-ttl\"),\n\t\t\t},\n\t\t\tZoneDistributionConfig: \u0026memorystore.InstanceZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"SINGLE_ZONE\"),\n\t\t\t\tZone: pulumi.String(\"us-central1-b\"),\n\t\t\t},\n\t\t\tEngineVersion: pulumi.String(\"VALKEY_7_2\"),\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(false),\n\t\t\tMode: pulumi.String(\"CLUSTER\"),\n\t\t\tPersistenceConfig: \u0026memorystore.InstancePersistenceConfigArgs{\n\t\t\t\tMode: pulumi.String(\"RDB\"),\n\t\t\t\tRdbConfig: \u0026memorystore.InstancePersistenceConfigRdbConfigArgs{\n\t\t\t\t\tRdbSnapshotPeriod: pulumi.String(\"ONE_HOUR\"),\n\t\t\t\t\tRdbSnapshotStartTime: pulumi.String(\"2024-10-02T15:01:23Z\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"abc\": pulumi.String(\"xyz\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.memorystore.Instance;\nimport com.pulumi.gcp.memorystore.InstanceArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstanceDesiredPscAutoConnectionArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstanceZoneDistributionConfigArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstancePersistenceConfigArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstancePersistenceConfigRdbConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"my-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"my-subnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"my-policy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var instance_full = new Instance(\"instance-full\", InstanceArgs.builder()\n .instanceId(\"full-instance\")\n .shardCount(3)\n .desiredPscAutoConnections(InstanceDesiredPscAutoConnectionArgs.builder()\n .network(producerNet.id())\n .projectId(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .build())\n .location(\"us-central1\")\n .replicaCount(2)\n .nodeType(\"SHARED_CORE_NANO\")\n .transitEncryptionMode(\"TRANSIT_ENCRYPTION_DISABLED\")\n .authorizationMode(\"AUTH_DISABLED\")\n .engineConfigs(Map.of(\"maxmemory-policy\", \"volatile-ttl\"))\n .zoneDistributionConfig(InstanceZoneDistributionConfigArgs.builder()\n .mode(\"SINGLE_ZONE\")\n .zone(\"us-central1-b\")\n .build())\n .engineVersion(\"VALKEY_7_2\")\n .deletionProtectionEnabled(false)\n .mode(\"CLUSTER\")\n .persistenceConfig(InstancePersistenceConfigArgs.builder()\n .mode(\"RDB\")\n .rdbConfig(InstancePersistenceConfigRdbConfigArgs.builder()\n .rdbSnapshotPeriod(\"ONE_HOUR\")\n .rdbSnapshotStartTime(\"2024-10-02T15:01:23Z\")\n .build())\n .build())\n .labels(Map.of(\"abc\", \"xyz\"))\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance-full:\n type: gcp:memorystore:Instance\n properties:\n instanceId: full-instance\n shardCount: 3\n desiredPscAutoConnections:\n - network: ${producerNet.id}\n projectId: ${project.projectId}\n location: us-central1\n replicaCount: 2\n nodeType: SHARED_CORE_NANO\n transitEncryptionMode: TRANSIT_ENCRYPTION_DISABLED\n authorizationMode: AUTH_DISABLED\n engineConfigs:\n maxmemory-policy: volatile-ttl\n zoneDistributionConfig:\n mode: SINGLE_ZONE\n zone: us-central1-b\n engineVersion: VALKEY_7_2\n deletionProtectionEnabled: false\n mode: CLUSTER\n persistenceConfig:\n mode: RDB\n rdbConfig:\n rdbSnapshotPeriod: ONE_HOUR\n rdbSnapshotStartTime: 2024-10-02T15:01:23Z\n labels:\n abc: xyz\n options:\n dependson:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: my-policy\n location: us-central1\n serviceClass: gcp-memorystore\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: my-subnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: my-network\n autoCreateSubnetworks: false\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Memorystore Instance Persistence Aof\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"my-network\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"my-subnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"my-policy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst project = gcp.organizations.getProject({});\nconst instance_persistence_aof = new gcp.memorystore.Instance(\"instance-persistence-aof\", {\n instanceId: \"aof-instance\",\n shardCount: 3,\n desiredPscAutoConnections: [{\n network: producerNet.id,\n projectId: project.then(project =\u003e project.projectId),\n }],\n location: \"us-central1\",\n persistenceConfig: {\n mode: \"AOF\",\n aofConfig: {\n appendFsync: \"EVERY_SEC\",\n },\n },\n deletionProtectionEnabled: false,\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"my-network\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"my-subnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"my-policy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\nproject = gcp.organizations.get_project()\ninstance_persistence_aof = gcp.memorystore.Instance(\"instance-persistence-aof\",\n instance_id=\"aof-instance\",\n shard_count=3,\n desired_psc_auto_connections=[{\n \"network\": producer_net.id,\n \"project_id\": project.project_id,\n }],\n location=\"us-central1\",\n persistence_config={\n \"mode\": \"AOF\",\n \"aof_config\": {\n \"append_fsync\": \"EVERY_SEC\",\n },\n },\n deletion_protection_enabled=False,\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"my-network\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"my-subnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"my-policy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var instance_persistence_aof = new Gcp.MemoryStore.Instance(\"instance-persistence-aof\", new()\n {\n InstanceId = \"aof-instance\",\n ShardCount = 3,\n DesiredPscAutoConnections = new[]\n {\n new Gcp.MemoryStore.Inputs.InstanceDesiredPscAutoConnectionArgs\n {\n Network = producerNet.Id,\n ProjectId = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n },\n Location = \"us-central1\",\n PersistenceConfig = new Gcp.MemoryStore.Inputs.InstancePersistenceConfigArgs\n {\n Mode = \"AOF\",\n AofConfig = new Gcp.MemoryStore.Inputs.InstancePersistenceConfigAofConfigArgs\n {\n AppendFsync = \"EVERY_SEC\",\n },\n },\n DeletionProtectionEnabled = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/memorystore\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"my-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"my-subnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"my-policy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = memorystore.NewInstance(ctx, \"instance-persistence-aof\", \u0026memorystore.InstanceArgs{\n\t\t\tInstanceId: pulumi.String(\"aof-instance\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tDesiredPscAutoConnections: memorystore.InstanceDesiredPscAutoConnectionArray{\n\t\t\t\t\u0026memorystore.InstanceDesiredPscAutoConnectionArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t\tProjectId: pulumi.String(project.ProjectId),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tPersistenceConfig: \u0026memorystore.InstancePersistenceConfigArgs{\n\t\t\t\tMode: pulumi.String(\"AOF\"),\n\t\t\t\tAofConfig: \u0026memorystore.InstancePersistenceConfigAofConfigArgs{\n\t\t\t\t\tAppendFsync: pulumi.String(\"EVERY_SEC\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.memorystore.Instance;\nimport com.pulumi.gcp.memorystore.InstanceArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstanceDesiredPscAutoConnectionArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstancePersistenceConfigArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstancePersistenceConfigAofConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"my-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"my-subnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"my-policy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var instance_persistence_aof = new Instance(\"instance-persistence-aof\", InstanceArgs.builder()\n .instanceId(\"aof-instance\")\n .shardCount(3)\n .desiredPscAutoConnections(InstanceDesiredPscAutoConnectionArgs.builder()\n .network(producerNet.id())\n .projectId(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .build())\n .location(\"us-central1\")\n .persistenceConfig(InstancePersistenceConfigArgs.builder()\n .mode(\"AOF\")\n .aofConfig(InstancePersistenceConfigAofConfigArgs.builder()\n .appendFsync(\"EVERY_SEC\")\n .build())\n .build())\n .deletionProtectionEnabled(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance-persistence-aof:\n type: gcp:memorystore:Instance\n properties:\n instanceId: aof-instance\n shardCount: 3\n desiredPscAutoConnections:\n - network: ${producerNet.id}\n projectId: ${project.projectId}\n location: us-central1\n persistenceConfig:\n mode: AOF\n aofConfig:\n appendFsync: EVERY_SEC\n deletionProtectionEnabled: false\n options:\n dependson:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: my-policy\n location: us-central1\n serviceClass: gcp-memorystore\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: my-subnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: my-network\n autoCreateSubnetworks: false\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstance can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/instances/{{instance_id}}`\n\n* `{{project}}/{{location}}/{{instance_id}}`\n\n* `{{location}}/{{instance_id}}`\n\nWhen using the `pulumi import` command, Instance can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:memorystore/instance:Instance default projects/{{project}}/locations/{{location}}/instances/{{instance_id}}\n```\n\n```sh\n$ pulumi import gcp:memorystore/instance:Instance default {{project}}/{{location}}/{{instance_id}}\n```\n\n```sh\n$ pulumi import gcp:memorystore/instance:Instance default {{location}}/{{instance_id}}\n```\n\n", + "description": "A Google Cloud Memorystore instance.\n\n\n\n## Example Usage\n\n### Memorystore Instance Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"my-network\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"my-subnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"my-policy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst project = gcp.organizations.getProject({});\nconst instance_basic = new gcp.memorystore.Instance(\"instance-basic\", {\n instanceId: \"basic-instance\",\n shardCount: 3,\n desiredPscAutoConnections: [{\n network: producerNet.id,\n projectId: project.then(project =\u003e project.projectId),\n }],\n location: \"us-central1\",\n deletionProtectionEnabled: false,\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"my-network\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"my-subnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"my-policy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\nproject = gcp.organizations.get_project()\ninstance_basic = gcp.memorystore.Instance(\"instance-basic\",\n instance_id=\"basic-instance\",\n shard_count=3,\n desired_psc_auto_connections=[{\n \"network\": producer_net.id,\n \"project_id\": project.project_id,\n }],\n location=\"us-central1\",\n deletion_protection_enabled=False,\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"my-network\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"my-subnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"my-policy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var instance_basic = new Gcp.MemoryStore.Instance(\"instance-basic\", new()\n {\n InstanceId = \"basic-instance\",\n ShardCount = 3,\n DesiredPscAutoConnections = new[]\n {\n new Gcp.MemoryStore.Inputs.InstanceDesiredPscAutoConnectionArgs\n {\n Network = producerNet.Id,\n ProjectId = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n },\n Location = \"us-central1\",\n DeletionProtectionEnabled = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/memorystore\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"my-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"my-subnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"my-policy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = memorystore.NewInstance(ctx, \"instance-basic\", \u0026memorystore.InstanceArgs{\n\t\t\tInstanceId: pulumi.String(\"basic-instance\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tDesiredPscAutoConnections: memorystore.InstanceDesiredPscAutoConnectionArray{\n\t\t\t\t\u0026memorystore.InstanceDesiredPscAutoConnectionArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t\tProjectId: pulumi.String(project.ProjectId),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.memorystore.Instance;\nimport com.pulumi.gcp.memorystore.InstanceArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstanceDesiredPscAutoConnectionArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"my-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"my-subnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"my-policy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var instance_basic = new Instance(\"instance-basic\", InstanceArgs.builder()\n .instanceId(\"basic-instance\")\n .shardCount(3)\n .desiredPscAutoConnections(InstanceDesiredPscAutoConnectionArgs.builder()\n .network(producerNet.id())\n .projectId(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .build())\n .location(\"us-central1\")\n .deletionProtectionEnabled(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance-basic:\n type: gcp:memorystore:Instance\n properties:\n instanceId: basic-instance\n shardCount: 3\n desiredPscAutoConnections:\n - network: ${producerNet.id}\n projectId: ${project.projectId}\n location: us-central1\n deletionProtectionEnabled: false\n options:\n dependson:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: my-policy\n location: us-central1\n serviceClass: gcp-memorystore\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: my-subnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: my-network\n autoCreateSubnetworks: false\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Memorystore Instance Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"my-network\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"my-subnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"my-policy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst project = gcp.organizations.getProject({});\nconst instance_full = new gcp.memorystore.Instance(\"instance-full\", {\n instanceId: \"full-instance\",\n shardCount: 3,\n desiredPscAutoConnections: [{\n network: producerNet.id,\n projectId: project.then(project =\u003e project.projectId),\n }],\n location: \"us-central1\",\n replicaCount: 2,\n nodeType: \"SHARED_CORE_NANO\",\n transitEncryptionMode: \"TRANSIT_ENCRYPTION_DISABLED\",\n authorizationMode: \"AUTH_DISABLED\",\n engineConfigs: {\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n zoneDistributionConfig: {\n mode: \"SINGLE_ZONE\",\n zone: \"us-central1-b\",\n },\n engineVersion: \"VALKEY_7_2\",\n deletionProtectionEnabled: false,\n mode: \"CLUSTER\",\n persistenceConfig: {\n mode: \"RDB\",\n rdbConfig: {\n rdbSnapshotPeriod: \"ONE_HOUR\",\n rdbSnapshotStartTime: \"2024-10-02T15:01:23Z\",\n },\n },\n labels: {\n abc: \"xyz\",\n },\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"my-network\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"my-subnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"my-policy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\nproject = gcp.organizations.get_project()\ninstance_full = gcp.memorystore.Instance(\"instance-full\",\n instance_id=\"full-instance\",\n shard_count=3,\n desired_psc_auto_connections=[{\n \"network\": producer_net.id,\n \"project_id\": project.project_id,\n }],\n location=\"us-central1\",\n replica_count=2,\n node_type=\"SHARED_CORE_NANO\",\n transit_encryption_mode=\"TRANSIT_ENCRYPTION_DISABLED\",\n authorization_mode=\"AUTH_DISABLED\",\n engine_configs={\n \"maxmemory-policy\": \"volatile-ttl\",\n },\n zone_distribution_config={\n \"mode\": \"SINGLE_ZONE\",\n \"zone\": \"us-central1-b\",\n },\n engine_version=\"VALKEY_7_2\",\n deletion_protection_enabled=False,\n mode=\"CLUSTER\",\n persistence_config={\n \"mode\": \"RDB\",\n \"rdb_config\": {\n \"rdb_snapshot_period\": \"ONE_HOUR\",\n \"rdb_snapshot_start_time\": \"2024-10-02T15:01:23Z\",\n },\n },\n labels={\n \"abc\": \"xyz\",\n },\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"my-network\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"my-subnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"my-policy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var instance_full = new Gcp.MemoryStore.Instance(\"instance-full\", new()\n {\n InstanceId = \"full-instance\",\n ShardCount = 3,\n DesiredPscAutoConnections = new[]\n {\n new Gcp.MemoryStore.Inputs.InstanceDesiredPscAutoConnectionArgs\n {\n Network = producerNet.Id,\n ProjectId = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n },\n Location = \"us-central1\",\n ReplicaCount = 2,\n NodeType = \"SHARED_CORE_NANO\",\n TransitEncryptionMode = \"TRANSIT_ENCRYPTION_DISABLED\",\n AuthorizationMode = \"AUTH_DISABLED\",\n EngineConfigs = \n {\n { \"maxmemory-policy\", \"volatile-ttl\" },\n },\n ZoneDistributionConfig = new Gcp.MemoryStore.Inputs.InstanceZoneDistributionConfigArgs\n {\n Mode = \"SINGLE_ZONE\",\n Zone = \"us-central1-b\",\n },\n EngineVersion = \"VALKEY_7_2\",\n DeletionProtectionEnabled = false,\n Mode = \"CLUSTER\",\n PersistenceConfig = new Gcp.MemoryStore.Inputs.InstancePersistenceConfigArgs\n {\n Mode = \"RDB\",\n RdbConfig = new Gcp.MemoryStore.Inputs.InstancePersistenceConfigRdbConfigArgs\n {\n RdbSnapshotPeriod = \"ONE_HOUR\",\n RdbSnapshotStartTime = \"2024-10-02T15:01:23Z\",\n },\n },\n Labels = \n {\n { \"abc\", \"xyz\" },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/memorystore\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"my-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"my-subnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"my-policy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = memorystore.NewInstance(ctx, \"instance-full\", \u0026memorystore.InstanceArgs{\n\t\t\tInstanceId: pulumi.String(\"full-instance\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tDesiredPscAutoConnections: memorystore.InstanceDesiredPscAutoConnectionArray{\n\t\t\t\t\u0026memorystore.InstanceDesiredPscAutoConnectionArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t\tProjectId: pulumi.String(project.ProjectId),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tReplicaCount: pulumi.Int(2),\n\t\t\tNodeType: pulumi.String(\"SHARED_CORE_NANO\"),\n\t\t\tTransitEncryptionMode: pulumi.String(\"TRANSIT_ENCRYPTION_DISABLED\"),\n\t\t\tAuthorizationMode: pulumi.String(\"AUTH_DISABLED\"),\n\t\t\tEngineConfigs: pulumi.StringMap{\n\t\t\t\t\"maxmemory-policy\": pulumi.String(\"volatile-ttl\"),\n\t\t\t},\n\t\t\tZoneDistributionConfig: \u0026memorystore.InstanceZoneDistributionConfigArgs{\n\t\t\t\tMode: pulumi.String(\"SINGLE_ZONE\"),\n\t\t\t\tZone: pulumi.String(\"us-central1-b\"),\n\t\t\t},\n\t\t\tEngineVersion: pulumi.String(\"VALKEY_7_2\"),\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(false),\n\t\t\tMode: pulumi.String(\"CLUSTER\"),\n\t\t\tPersistenceConfig: \u0026memorystore.InstancePersistenceConfigArgs{\n\t\t\t\tMode: pulumi.String(\"RDB\"),\n\t\t\t\tRdbConfig: \u0026memorystore.InstancePersistenceConfigRdbConfigArgs{\n\t\t\t\t\tRdbSnapshotPeriod: pulumi.String(\"ONE_HOUR\"),\n\t\t\t\t\tRdbSnapshotStartTime: pulumi.String(\"2024-10-02T15:01:23Z\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"abc\": pulumi.String(\"xyz\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.memorystore.Instance;\nimport com.pulumi.gcp.memorystore.InstanceArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstanceDesiredPscAutoConnectionArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstanceZoneDistributionConfigArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstancePersistenceConfigArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstancePersistenceConfigRdbConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"my-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"my-subnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"my-policy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var instance_full = new Instance(\"instance-full\", InstanceArgs.builder()\n .instanceId(\"full-instance\")\n .shardCount(3)\n .desiredPscAutoConnections(InstanceDesiredPscAutoConnectionArgs.builder()\n .network(producerNet.id())\n .projectId(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .build())\n .location(\"us-central1\")\n .replicaCount(2)\n .nodeType(\"SHARED_CORE_NANO\")\n .transitEncryptionMode(\"TRANSIT_ENCRYPTION_DISABLED\")\n .authorizationMode(\"AUTH_DISABLED\")\n .engineConfigs(Map.of(\"maxmemory-policy\", \"volatile-ttl\"))\n .zoneDistributionConfig(InstanceZoneDistributionConfigArgs.builder()\n .mode(\"SINGLE_ZONE\")\n .zone(\"us-central1-b\")\n .build())\n .engineVersion(\"VALKEY_7_2\")\n .deletionProtectionEnabled(false)\n .mode(\"CLUSTER\")\n .persistenceConfig(InstancePersistenceConfigArgs.builder()\n .mode(\"RDB\")\n .rdbConfig(InstancePersistenceConfigRdbConfigArgs.builder()\n .rdbSnapshotPeriod(\"ONE_HOUR\")\n .rdbSnapshotStartTime(\"2024-10-02T15:01:23Z\")\n .build())\n .build())\n .labels(Map.of(\"abc\", \"xyz\"))\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance-full:\n type: gcp:memorystore:Instance\n properties:\n instanceId: full-instance\n shardCount: 3\n desiredPscAutoConnections:\n - network: ${producerNet.id}\n projectId: ${project.projectId}\n location: us-central1\n replicaCount: 2\n nodeType: SHARED_CORE_NANO\n transitEncryptionMode: TRANSIT_ENCRYPTION_DISABLED\n authorizationMode: AUTH_DISABLED\n engineConfigs:\n maxmemory-policy: volatile-ttl\n zoneDistributionConfig:\n mode: SINGLE_ZONE\n zone: us-central1-b\n engineVersion: VALKEY_7_2\n deletionProtectionEnabled: false\n mode: CLUSTER\n persistenceConfig:\n mode: RDB\n rdbConfig:\n rdbSnapshotPeriod: ONE_HOUR\n rdbSnapshotStartTime: 2024-10-02T15:01:23Z\n labels:\n abc: xyz\n options:\n dependson:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: my-policy\n location: us-central1\n serviceClass: gcp-memorystore\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: my-subnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: my-network\n autoCreateSubnetworks: false\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Memorystore Instance Persistence Aof\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst producerNet = new gcp.compute.Network(\"producer_net\", {\n name: \"my-network\",\n autoCreateSubnetworks: false,\n});\nconst producerSubnet = new gcp.compute.Subnetwork(\"producer_subnet\", {\n name: \"my-subnet\",\n ipCidrRange: \"10.0.0.248/29\",\n region: \"us-central1\",\n network: producerNet.id,\n});\nconst _default = new gcp.networkconnectivity.ServiceConnectionPolicy(\"default\", {\n name: \"my-policy\",\n location: \"us-central1\",\n serviceClass: \"gcp-memorystore\",\n description: \"my basic service connection policy\",\n network: producerNet.id,\n pscConfig: {\n subnetworks: [producerSubnet.id],\n },\n});\nconst project = gcp.organizations.getProject({});\nconst instance_persistence_aof = new gcp.memorystore.Instance(\"instance-persistence-aof\", {\n instanceId: \"aof-instance\",\n shardCount: 3,\n desiredPscAutoConnections: [{\n network: producerNet.id,\n projectId: project.then(project =\u003e project.projectId),\n }],\n location: \"us-central1\",\n persistenceConfig: {\n mode: \"AOF\",\n aofConfig: {\n appendFsync: \"EVERY_SEC\",\n },\n },\n deletionProtectionEnabled: false,\n}, {\n dependsOn: [_default],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproducer_net = gcp.compute.Network(\"producer_net\",\n name=\"my-network\",\n auto_create_subnetworks=False)\nproducer_subnet = gcp.compute.Subnetwork(\"producer_subnet\",\n name=\"my-subnet\",\n ip_cidr_range=\"10.0.0.248/29\",\n region=\"us-central1\",\n network=producer_net.id)\ndefault = gcp.networkconnectivity.ServiceConnectionPolicy(\"default\",\n name=\"my-policy\",\n location=\"us-central1\",\n service_class=\"gcp-memorystore\",\n description=\"my basic service connection policy\",\n network=producer_net.id,\n psc_config={\n \"subnetworks\": [producer_subnet.id],\n })\nproject = gcp.organizations.get_project()\ninstance_persistence_aof = gcp.memorystore.Instance(\"instance-persistence-aof\",\n instance_id=\"aof-instance\",\n shard_count=3,\n desired_psc_auto_connections=[{\n \"network\": producer_net.id,\n \"project_id\": project.project_id,\n }],\n location=\"us-central1\",\n persistence_config={\n \"mode\": \"AOF\",\n \"aof_config\": {\n \"append_fsync\": \"EVERY_SEC\",\n },\n },\n deletion_protection_enabled=False,\n opts = pulumi.ResourceOptions(depends_on=[default]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var producerNet = new Gcp.Compute.Network(\"producer_net\", new()\n {\n Name = \"my-network\",\n AutoCreateSubnetworks = false,\n });\n\n var producerSubnet = new Gcp.Compute.Subnetwork(\"producer_subnet\", new()\n {\n Name = \"my-subnet\",\n IpCidrRange = \"10.0.0.248/29\",\n Region = \"us-central1\",\n Network = producerNet.Id,\n });\n\n var @default = new Gcp.NetworkConnectivity.ServiceConnectionPolicy(\"default\", new()\n {\n Name = \"my-policy\",\n Location = \"us-central1\",\n ServiceClass = \"gcp-memorystore\",\n Description = \"my basic service connection policy\",\n Network = producerNet.Id,\n PscConfig = new Gcp.NetworkConnectivity.Inputs.ServiceConnectionPolicyPscConfigArgs\n {\n Subnetworks = new[]\n {\n producerSubnet.Id,\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var instance_persistence_aof = new Gcp.MemoryStore.Instance(\"instance-persistence-aof\", new()\n {\n InstanceId = \"aof-instance\",\n ShardCount = 3,\n DesiredPscAutoConnections = new[]\n {\n new Gcp.MemoryStore.Inputs.InstanceDesiredPscAutoConnectionArgs\n {\n Network = producerNet.Id,\n ProjectId = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n },\n Location = \"us-central1\",\n PersistenceConfig = new Gcp.MemoryStore.Inputs.InstancePersistenceConfigArgs\n {\n Mode = \"AOF\",\n AofConfig = new Gcp.MemoryStore.Inputs.InstancePersistenceConfigAofConfigArgs\n {\n AppendFsync = \"EVERY_SEC\",\n },\n },\n DeletionProtectionEnabled = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n @default,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/memorystore\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproducerNet, err := compute.NewNetwork(ctx, \"producer_net\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"my-network\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproducerSubnet, err := compute.NewSubnetwork(ctx, \"producer_subnet\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"my-subnet\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.248/29\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkconnectivity.NewServiceConnectionPolicy(ctx, \"default\", \u0026networkconnectivity.ServiceConnectionPolicyArgs{\n\t\t\tName: pulumi.String(\"my-policy\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tServiceClass: pulumi.String(\"gcp-memorystore\"),\n\t\t\tDescription: pulumi.String(\"my basic service connection policy\"),\n\t\t\tNetwork: producerNet.ID(),\n\t\t\tPscConfig: \u0026networkconnectivity.ServiceConnectionPolicyPscConfigArgs{\n\t\t\t\tSubnetworks: pulumi.StringArray{\n\t\t\t\t\tproducerSubnet.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = memorystore.NewInstance(ctx, \"instance-persistence-aof\", \u0026memorystore.InstanceArgs{\n\t\t\tInstanceId: pulumi.String(\"aof-instance\"),\n\t\t\tShardCount: pulumi.Int(3),\n\t\t\tDesiredPscAutoConnections: memorystore.InstanceDesiredPscAutoConnectionArray{\n\t\t\t\t\u0026memorystore.InstanceDesiredPscAutoConnectionArgs{\n\t\t\t\t\tNetwork: producerNet.ID(),\n\t\t\t\t\tProjectId: pulumi.String(project.ProjectId),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tPersistenceConfig: \u0026memorystore.InstancePersistenceConfigArgs{\n\t\t\t\tMode: pulumi.String(\"AOF\"),\n\t\t\t\tAofConfig: \u0026memorystore.InstancePersistenceConfigAofConfigArgs{\n\t\t\t\t\tAppendFsync: pulumi.String(\"EVERY_SEC\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDeletionProtectionEnabled: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\t_default,\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicy;\nimport com.pulumi.gcp.networkconnectivity.ServiceConnectionPolicyArgs;\nimport com.pulumi.gcp.networkconnectivity.inputs.ServiceConnectionPolicyPscConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.memorystore.Instance;\nimport com.pulumi.gcp.memorystore.InstanceArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstanceDesiredPscAutoConnectionArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstancePersistenceConfigArgs;\nimport com.pulumi.gcp.memorystore.inputs.InstancePersistenceConfigAofConfigArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 producerNet = new Network(\"producerNet\", NetworkArgs.builder()\n .name(\"my-network\")\n .autoCreateSubnetworks(false)\n .build());\n\n var producerSubnet = new Subnetwork(\"producerSubnet\", SubnetworkArgs.builder()\n .name(\"my-subnet\")\n .ipCidrRange(\"10.0.0.248/29\")\n .region(\"us-central1\")\n .network(producerNet.id())\n .build());\n\n var default_ = new ServiceConnectionPolicy(\"default\", ServiceConnectionPolicyArgs.builder()\n .name(\"my-policy\")\n .location(\"us-central1\")\n .serviceClass(\"gcp-memorystore\")\n .description(\"my basic service connection policy\")\n .network(producerNet.id())\n .pscConfig(ServiceConnectionPolicyPscConfigArgs.builder()\n .subnetworks(producerSubnet.id())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var instance_persistence_aof = new Instance(\"instance-persistence-aof\", InstanceArgs.builder()\n .instanceId(\"aof-instance\")\n .shardCount(3)\n .desiredPscAutoConnections(InstanceDesiredPscAutoConnectionArgs.builder()\n .network(producerNet.id())\n .projectId(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .build())\n .location(\"us-central1\")\n .persistenceConfig(InstancePersistenceConfigArgs.builder()\n .mode(\"AOF\")\n .aofConfig(InstancePersistenceConfigAofConfigArgs.builder()\n .appendFsync(\"EVERY_SEC\")\n .build())\n .build())\n .deletionProtectionEnabled(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(default_)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance-persistence-aof:\n type: gcp:memorystore:Instance\n properties:\n instanceId: aof-instance\n shardCount: 3\n desiredPscAutoConnections:\n - network: ${producerNet.id}\n projectId: ${project.projectId}\n location: us-central1\n persistenceConfig:\n mode: AOF\n aofConfig:\n appendFsync: EVERY_SEC\n deletionProtectionEnabled: false\n options:\n dependson:\n - ${default}\n default:\n type: gcp:networkconnectivity:ServiceConnectionPolicy\n properties:\n name: my-policy\n location: us-central1\n serviceClass: gcp-memorystore\n description: my basic service connection policy\n network: ${producerNet.id}\n pscConfig:\n subnetworks:\n - ${producerSubnet.id}\n producerSubnet:\n type: gcp:compute:Subnetwork\n name: producer_subnet\n properties:\n name: my-subnet\n ipCidrRange: 10.0.0.248/29\n region: us-central1\n network: ${producerNet.id}\n producerNet:\n type: gcp:compute:Network\n name: producer_net\n properties:\n name: my-network\n autoCreateSubnetworks: false\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstance can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/instances/{{instance_id}}`\n\n* `{{project}}/{{location}}/{{instance_id}}`\n\n* `{{location}}/{{instance_id}}`\n\nWhen using the `pulumi import` command, Instance can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:memorystore/instance:Instance default projects/{{project}}/locations/{{location}}/instances/{{instance_id}}\n```\n\n```sh\n$ pulumi import gcp:memorystore/instance:Instance default {{project}}/{{location}}/{{instance_id}}\n```\n\n```sh\n$ pulumi import gcp:memorystore/instance:Instance default {{location}}/{{instance_id}}\n```\n\n", "properties": { "authorizationMode": { "type": "string", @@ -231265,7 +234175,7 @@ } }, "gcp:monitoring/alertPolicy:AlertPolicy": { - "description": "A description of the conditions under which some aspect of your system is\nconsidered to be \"unhealthy\" and the ways to notify people or services\nabout this state.\n\n\nTo get more information about AlertPolicy, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.alertPolicies)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/monitoring/alerts/)\n\n## Example Usage\n\n### Monitoring Alert Policy Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst alertPolicy = new gcp.monitoring.AlertPolicy(\"alert_policy\", {\n displayName: \"My Alert Policy\",\n combiner: \"OR\",\n conditions: [{\n displayName: \"test condition\",\n conditionThreshold: {\n filter: \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n duration: \"60s\",\n comparison: \"COMPARISON_GT\",\n aggregations: [{\n alignmentPeriod: \"60s\",\n perSeriesAligner: \"ALIGN_RATE\",\n }],\n },\n }],\n userLabels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nalert_policy = gcp.monitoring.AlertPolicy(\"alert_policy\",\n display_name=\"My Alert Policy\",\n combiner=\"OR\",\n conditions=[{\n \"display_name\": \"test condition\",\n \"condition_threshold\": {\n \"filter\": \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n \"duration\": \"60s\",\n \"comparison\": \"COMPARISON_GT\",\n \"aggregations\": [{\n \"alignment_period\": \"60s\",\n \"per_series_aligner\": \"ALIGN_RATE\",\n }],\n },\n }],\n user_labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var alertPolicy = new Gcp.Monitoring.AlertPolicy(\"alert_policy\", new()\n {\n DisplayName = \"My Alert Policy\",\n Combiner = \"OR\",\n Conditions = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionArgs\n {\n DisplayName = \"test condition\",\n ConditionThreshold = new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdArgs\n {\n Filter = \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n Duration = \"60s\",\n Comparison = \"COMPARISON_GT\",\n Aggregations = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdAggregationArgs\n {\n AlignmentPeriod = \"60s\",\n PerSeriesAligner = \"ALIGN_RATE\",\n },\n },\n },\n },\n },\n UserLabels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewAlertPolicy(ctx, \"alert_policy\", \u0026monitoring.AlertPolicyArgs{\n\t\t\tDisplayName: pulumi.String(\"My Alert Policy\"),\n\t\t\tCombiner: pulumi.String(\"OR\"),\n\t\t\tConditions: monitoring.AlertPolicyConditionArray{\n\t\t\t\t\u0026monitoring.AlertPolicyConditionArgs{\n\t\t\t\t\tDisplayName: pulumi.String(\"test condition\"),\n\t\t\t\t\tConditionThreshold: \u0026monitoring.AlertPolicyConditionConditionThresholdArgs{\n\t\t\t\t\t\tFilter: pulumi.String(\"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\"),\n\t\t\t\t\t\tDuration: pulumi.String(\"60s\"),\n\t\t\t\t\t\tComparison: pulumi.String(\"COMPARISON_GT\"),\n\t\t\t\t\t\tAggregations: monitoring.AlertPolicyConditionConditionThresholdAggregationArray{\n\t\t\t\t\t\t\t\u0026monitoring.AlertPolicyConditionConditionThresholdAggregationArgs{\n\t\t\t\t\t\t\t\tAlignmentPeriod: pulumi.String(\"60s\"),\n\t\t\t\t\t\t\t\tPerSeriesAligner: pulumi.String(\"ALIGN_RATE\"),\n\t\t\t\t\t\t\t},\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\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.monitoring.AlertPolicy;\nimport com.pulumi.gcp.monitoring.AlertPolicyArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionConditionThresholdArgs;\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 alertPolicy = new AlertPolicy(\"alertPolicy\", AlertPolicyArgs.builder()\n .displayName(\"My Alert Policy\")\n .combiner(\"OR\")\n .conditions(AlertPolicyConditionArgs.builder()\n .displayName(\"test condition\")\n .conditionThreshold(AlertPolicyConditionConditionThresholdArgs.builder()\n .filter(\"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\")\n .duration(\"60s\")\n .comparison(\"COMPARISON_GT\")\n .aggregations(AlertPolicyConditionConditionThresholdAggregationArgs.builder()\n .alignmentPeriod(\"60s\")\n .perSeriesAligner(\"ALIGN_RATE\")\n .build())\n .build())\n .build())\n .userLabels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n alertPolicy:\n type: gcp:monitoring:AlertPolicy\n name: alert_policy\n properties:\n displayName: My Alert Policy\n combiner: OR\n conditions:\n - displayName: test condition\n conditionThreshold:\n filter: metric.type=\"compute.googleapis.com/instance/disk/write_bytes_count\" AND resource.type=\"gce_instance\"\n duration: 60s\n comparison: COMPARISON_GT\n aggregations:\n - alignmentPeriod: 60s\n perSeriesAligner: ALIGN_RATE\n userLabels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Alert Policy Evaluation Missing Data\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst alertPolicy = new gcp.monitoring.AlertPolicy(\"alert_policy\", {\n displayName: \"My Alert Policy\",\n combiner: \"OR\",\n conditions: [{\n displayName: \"test condition\",\n conditionThreshold: {\n filter: \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n duration: \"60s\",\n comparison: \"COMPARISON_GT\",\n aggregations: [{\n alignmentPeriod: \"60s\",\n perSeriesAligner: \"ALIGN_RATE\",\n }],\n evaluationMissingData: \"EVALUATION_MISSING_DATA_INACTIVE\",\n },\n }],\n userLabels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nalert_policy = gcp.monitoring.AlertPolicy(\"alert_policy\",\n display_name=\"My Alert Policy\",\n combiner=\"OR\",\n conditions=[{\n \"display_name\": \"test condition\",\n \"condition_threshold\": {\n \"filter\": \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n \"duration\": \"60s\",\n \"comparison\": \"COMPARISON_GT\",\n \"aggregations\": [{\n \"alignment_period\": \"60s\",\n \"per_series_aligner\": \"ALIGN_RATE\",\n }],\n \"evaluation_missing_data\": \"EVALUATION_MISSING_DATA_INACTIVE\",\n },\n }],\n user_labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var alertPolicy = new Gcp.Monitoring.AlertPolicy(\"alert_policy\", new()\n {\n DisplayName = \"My Alert Policy\",\n Combiner = \"OR\",\n Conditions = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionArgs\n {\n DisplayName = \"test condition\",\n ConditionThreshold = new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdArgs\n {\n Filter = \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n Duration = \"60s\",\n Comparison = \"COMPARISON_GT\",\n Aggregations = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdAggregationArgs\n {\n AlignmentPeriod = \"60s\",\n PerSeriesAligner = \"ALIGN_RATE\",\n },\n },\n EvaluationMissingData = \"EVALUATION_MISSING_DATA_INACTIVE\",\n },\n },\n },\n UserLabels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewAlertPolicy(ctx, \"alert_policy\", \u0026monitoring.AlertPolicyArgs{\n\t\t\tDisplayName: pulumi.String(\"My Alert Policy\"),\n\t\t\tCombiner: pulumi.String(\"OR\"),\n\t\t\tConditions: monitoring.AlertPolicyConditionArray{\n\t\t\t\t\u0026monitoring.AlertPolicyConditionArgs{\n\t\t\t\t\tDisplayName: pulumi.String(\"test condition\"),\n\t\t\t\t\tConditionThreshold: \u0026monitoring.AlertPolicyConditionConditionThresholdArgs{\n\t\t\t\t\t\tFilter: pulumi.String(\"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\"),\n\t\t\t\t\t\tDuration: pulumi.String(\"60s\"),\n\t\t\t\t\t\tComparison: pulumi.String(\"COMPARISON_GT\"),\n\t\t\t\t\t\tAggregations: monitoring.AlertPolicyConditionConditionThresholdAggregationArray{\n\t\t\t\t\t\t\t\u0026monitoring.AlertPolicyConditionConditionThresholdAggregationArgs{\n\t\t\t\t\t\t\t\tAlignmentPeriod: pulumi.String(\"60s\"),\n\t\t\t\t\t\t\t\tPerSeriesAligner: pulumi.String(\"ALIGN_RATE\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvaluationMissingData: pulumi.String(\"EVALUATION_MISSING_DATA_INACTIVE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.monitoring.AlertPolicy;\nimport com.pulumi.gcp.monitoring.AlertPolicyArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionConditionThresholdArgs;\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 alertPolicy = new AlertPolicy(\"alertPolicy\", AlertPolicyArgs.builder()\n .displayName(\"My Alert Policy\")\n .combiner(\"OR\")\n .conditions(AlertPolicyConditionArgs.builder()\n .displayName(\"test condition\")\n .conditionThreshold(AlertPolicyConditionConditionThresholdArgs.builder()\n .filter(\"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\")\n .duration(\"60s\")\n .comparison(\"COMPARISON_GT\")\n .aggregations(AlertPolicyConditionConditionThresholdAggregationArgs.builder()\n .alignmentPeriod(\"60s\")\n .perSeriesAligner(\"ALIGN_RATE\")\n .build())\n .evaluationMissingData(\"EVALUATION_MISSING_DATA_INACTIVE\")\n .build())\n .build())\n .userLabels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n alertPolicy:\n type: gcp:monitoring:AlertPolicy\n name: alert_policy\n properties:\n displayName: My Alert Policy\n combiner: OR\n conditions:\n - displayName: test condition\n conditionThreshold:\n filter: metric.type=\"compute.googleapis.com/instance/disk/write_bytes_count\" AND resource.type=\"gce_instance\"\n duration: 60s\n comparison: COMPARISON_GT\n aggregations:\n - alignmentPeriod: 60s\n perSeriesAligner: ALIGN_RATE\n evaluationMissingData: EVALUATION_MISSING_DATA_INACTIVE\n userLabels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Alert Policy Forecast Options\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst alertPolicy = new gcp.monitoring.AlertPolicy(\"alert_policy\", {\n displayName: \"My Alert Policy\",\n combiner: \"OR\",\n conditions: [{\n displayName: \"test condition\",\n conditionThreshold: {\n filter: \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n duration: \"60s\",\n forecastOptions: {\n forecastHorizon: \"3600s\",\n },\n comparison: \"COMPARISON_GT\",\n aggregations: [{\n alignmentPeriod: \"60s\",\n perSeriesAligner: \"ALIGN_RATE\",\n }],\n },\n }],\n userLabels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nalert_policy = gcp.monitoring.AlertPolicy(\"alert_policy\",\n display_name=\"My Alert Policy\",\n combiner=\"OR\",\n conditions=[{\n \"display_name\": \"test condition\",\n \"condition_threshold\": {\n \"filter\": \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n \"duration\": \"60s\",\n \"forecast_options\": {\n \"forecast_horizon\": \"3600s\",\n },\n \"comparison\": \"COMPARISON_GT\",\n \"aggregations\": [{\n \"alignment_period\": \"60s\",\n \"per_series_aligner\": \"ALIGN_RATE\",\n }],\n },\n }],\n user_labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var alertPolicy = new Gcp.Monitoring.AlertPolicy(\"alert_policy\", new()\n {\n DisplayName = \"My Alert Policy\",\n Combiner = \"OR\",\n Conditions = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionArgs\n {\n DisplayName = \"test condition\",\n ConditionThreshold = new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdArgs\n {\n Filter = \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n Duration = \"60s\",\n ForecastOptions = new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdForecastOptionsArgs\n {\n ForecastHorizon = \"3600s\",\n },\n Comparison = \"COMPARISON_GT\",\n Aggregations = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdAggregationArgs\n {\n AlignmentPeriod = \"60s\",\n PerSeriesAligner = \"ALIGN_RATE\",\n },\n },\n },\n },\n },\n UserLabels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewAlertPolicy(ctx, \"alert_policy\", \u0026monitoring.AlertPolicyArgs{\n\t\t\tDisplayName: pulumi.String(\"My Alert Policy\"),\n\t\t\tCombiner: pulumi.String(\"OR\"),\n\t\t\tConditions: monitoring.AlertPolicyConditionArray{\n\t\t\t\t\u0026monitoring.AlertPolicyConditionArgs{\n\t\t\t\t\tDisplayName: pulumi.String(\"test condition\"),\n\t\t\t\t\tConditionThreshold: \u0026monitoring.AlertPolicyConditionConditionThresholdArgs{\n\t\t\t\t\t\tFilter: pulumi.String(\"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\"),\n\t\t\t\t\t\tDuration: pulumi.String(\"60s\"),\n\t\t\t\t\t\tForecastOptions: \u0026monitoring.AlertPolicyConditionConditionThresholdForecastOptionsArgs{\n\t\t\t\t\t\t\tForecastHorizon: pulumi.String(\"3600s\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tComparison: pulumi.String(\"COMPARISON_GT\"),\n\t\t\t\t\t\tAggregations: monitoring.AlertPolicyConditionConditionThresholdAggregationArray{\n\t\t\t\t\t\t\t\u0026monitoring.AlertPolicyConditionConditionThresholdAggregationArgs{\n\t\t\t\t\t\t\t\tAlignmentPeriod: pulumi.String(\"60s\"),\n\t\t\t\t\t\t\t\tPerSeriesAligner: pulumi.String(\"ALIGN_RATE\"),\n\t\t\t\t\t\t\t},\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\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.monitoring.AlertPolicy;\nimport com.pulumi.gcp.monitoring.AlertPolicyArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionConditionThresholdArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionConditionThresholdForecastOptionsArgs;\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 alertPolicy = new AlertPolicy(\"alertPolicy\", AlertPolicyArgs.builder()\n .displayName(\"My Alert Policy\")\n .combiner(\"OR\")\n .conditions(AlertPolicyConditionArgs.builder()\n .displayName(\"test condition\")\n .conditionThreshold(AlertPolicyConditionConditionThresholdArgs.builder()\n .filter(\"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\")\n .duration(\"60s\")\n .forecastOptions(AlertPolicyConditionConditionThresholdForecastOptionsArgs.builder()\n .forecastHorizon(\"3600s\")\n .build())\n .comparison(\"COMPARISON_GT\")\n .aggregations(AlertPolicyConditionConditionThresholdAggregationArgs.builder()\n .alignmentPeriod(\"60s\")\n .perSeriesAligner(\"ALIGN_RATE\")\n .build())\n .build())\n .build())\n .userLabels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n alertPolicy:\n type: gcp:monitoring:AlertPolicy\n name: alert_policy\n properties:\n displayName: My Alert Policy\n combiner: OR\n conditions:\n - displayName: test condition\n conditionThreshold:\n filter: metric.type=\"compute.googleapis.com/instance/disk/write_bytes_count\" AND resource.type=\"gce_instance\"\n duration: 60s\n forecastOptions:\n forecastHorizon: 3600s\n comparison: COMPARISON_GT\n aggregations:\n - alignmentPeriod: 60s\n perSeriesAligner: ALIGN_RATE\n userLabels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Alert Policy Promql Condition\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst alertPolicy = new gcp.monitoring.AlertPolicy(\"alert_policy\", {\n displayName: \"My Alert Policy\",\n combiner: \"OR\",\n conditions: [{\n displayName: \"test condition\",\n conditionPrometheusQueryLanguage: {\n query: \"compute_googleapis_com:instance_cpu_usage_time \u003e 0\",\n duration: \"60s\",\n evaluationInterval: \"60s\",\n alertRule: \"AlwaysOn\",\n ruleGroup: \"a test\",\n },\n }],\n alertStrategy: {\n autoClose: \"1800s\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nalert_policy = gcp.monitoring.AlertPolicy(\"alert_policy\",\n display_name=\"My Alert Policy\",\n combiner=\"OR\",\n conditions=[{\n \"display_name\": \"test condition\",\n \"condition_prometheus_query_language\": {\n \"query\": \"compute_googleapis_com:instance_cpu_usage_time \u003e 0\",\n \"duration\": \"60s\",\n \"evaluation_interval\": \"60s\",\n \"alert_rule\": \"AlwaysOn\",\n \"rule_group\": \"a test\",\n },\n }],\n alert_strategy={\n \"auto_close\": \"1800s\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var alertPolicy = new Gcp.Monitoring.AlertPolicy(\"alert_policy\", new()\n {\n DisplayName = \"My Alert Policy\",\n Combiner = \"OR\",\n Conditions = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionArgs\n {\n DisplayName = \"test condition\",\n ConditionPrometheusQueryLanguage = new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionPrometheusQueryLanguageArgs\n {\n Query = \"compute_googleapis_com:instance_cpu_usage_time \u003e 0\",\n Duration = \"60s\",\n EvaluationInterval = \"60s\",\n AlertRule = \"AlwaysOn\",\n RuleGroup = \"a test\",\n },\n },\n },\n AlertStrategy = new Gcp.Monitoring.Inputs.AlertPolicyAlertStrategyArgs\n {\n AutoClose = \"1800s\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewAlertPolicy(ctx, \"alert_policy\", \u0026monitoring.AlertPolicyArgs{\n\t\t\tDisplayName: pulumi.String(\"My Alert Policy\"),\n\t\t\tCombiner: pulumi.String(\"OR\"),\n\t\t\tConditions: monitoring.AlertPolicyConditionArray{\n\t\t\t\t\u0026monitoring.AlertPolicyConditionArgs{\n\t\t\t\t\tDisplayName: pulumi.String(\"test condition\"),\n\t\t\t\t\tConditionPrometheusQueryLanguage: \u0026monitoring.AlertPolicyConditionConditionPrometheusQueryLanguageArgs{\n\t\t\t\t\t\tQuery: pulumi.String(\"compute_googleapis_com:instance_cpu_usage_time \u003e 0\"),\n\t\t\t\t\t\tDuration: pulumi.String(\"60s\"),\n\t\t\t\t\t\tEvaluationInterval: pulumi.String(\"60s\"),\n\t\t\t\t\t\tAlertRule: pulumi.String(\"AlwaysOn\"),\n\t\t\t\t\t\tRuleGroup: pulumi.String(\"a test\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tAlertStrategy: \u0026monitoring.AlertPolicyAlertStrategyArgs{\n\t\t\t\tAutoClose: pulumi.String(\"1800s\"),\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.gcp.monitoring.AlertPolicy;\nimport com.pulumi.gcp.monitoring.AlertPolicyArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionConditionPrometheusQueryLanguageArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyAlertStrategyArgs;\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 alertPolicy = new AlertPolicy(\"alertPolicy\", AlertPolicyArgs.builder()\n .displayName(\"My Alert Policy\")\n .combiner(\"OR\")\n .conditions(AlertPolicyConditionArgs.builder()\n .displayName(\"test condition\")\n .conditionPrometheusQueryLanguage(AlertPolicyConditionConditionPrometheusQueryLanguageArgs.builder()\n .query(\"compute_googleapis_com:instance_cpu_usage_time \u003e 0\")\n .duration(\"60s\")\n .evaluationInterval(\"60s\")\n .alertRule(\"AlwaysOn\")\n .ruleGroup(\"a test\")\n .build())\n .build())\n .alertStrategy(AlertPolicyAlertStrategyArgs.builder()\n .autoClose(\"1800s\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n alertPolicy:\n type: gcp:monitoring:AlertPolicy\n name: alert_policy\n properties:\n displayName: My Alert Policy\n combiner: OR\n conditions:\n - displayName: test condition\n conditionPrometheusQueryLanguage:\n query: compute_googleapis_com:instance_cpu_usage_time \u003e 0\n duration: 60s\n evaluationInterval: 60s\n alertRule: AlwaysOn\n ruleGroup: a test\n alertStrategy:\n autoClose: 1800s\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAlertPolicy can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, AlertPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:monitoring/alertPolicy:AlertPolicy default {{name}}\n```\n\n", + "description": "A description of the conditions under which some aspect of your system is\nconsidered to be \"unhealthy\" and the ways to notify people or services\nabout this state.\n\n\nTo get more information about AlertPolicy, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.alertPolicies)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/monitoring/alerts/)\n\n## Example Usage\n\n### Monitoring Alert Policy Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst alertPolicy = new gcp.monitoring.AlertPolicy(\"alert_policy\", {\n displayName: \"My Alert Policy\",\n combiner: \"OR\",\n conditions: [{\n displayName: \"test condition\",\n conditionThreshold: {\n filter: \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n duration: \"60s\",\n comparison: \"COMPARISON_GT\",\n aggregations: [{\n alignmentPeriod: \"60s\",\n perSeriesAligner: \"ALIGN_RATE\",\n }],\n },\n }],\n userLabels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nalert_policy = gcp.monitoring.AlertPolicy(\"alert_policy\",\n display_name=\"My Alert Policy\",\n combiner=\"OR\",\n conditions=[{\n \"display_name\": \"test condition\",\n \"condition_threshold\": {\n \"filter\": \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n \"duration\": \"60s\",\n \"comparison\": \"COMPARISON_GT\",\n \"aggregations\": [{\n \"alignment_period\": \"60s\",\n \"per_series_aligner\": \"ALIGN_RATE\",\n }],\n },\n }],\n user_labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var alertPolicy = new Gcp.Monitoring.AlertPolicy(\"alert_policy\", new()\n {\n DisplayName = \"My Alert Policy\",\n Combiner = \"OR\",\n Conditions = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionArgs\n {\n DisplayName = \"test condition\",\n ConditionThreshold = new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdArgs\n {\n Filter = \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n Duration = \"60s\",\n Comparison = \"COMPARISON_GT\",\n Aggregations = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdAggregationArgs\n {\n AlignmentPeriod = \"60s\",\n PerSeriesAligner = \"ALIGN_RATE\",\n },\n },\n },\n },\n },\n UserLabels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewAlertPolicy(ctx, \"alert_policy\", \u0026monitoring.AlertPolicyArgs{\n\t\t\tDisplayName: pulumi.String(\"My Alert Policy\"),\n\t\t\tCombiner: pulumi.String(\"OR\"),\n\t\t\tConditions: monitoring.AlertPolicyConditionArray{\n\t\t\t\t\u0026monitoring.AlertPolicyConditionArgs{\n\t\t\t\t\tDisplayName: pulumi.String(\"test condition\"),\n\t\t\t\t\tConditionThreshold: \u0026monitoring.AlertPolicyConditionConditionThresholdArgs{\n\t\t\t\t\t\tFilter: pulumi.String(\"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\"),\n\t\t\t\t\t\tDuration: pulumi.String(\"60s\"),\n\t\t\t\t\t\tComparison: pulumi.String(\"COMPARISON_GT\"),\n\t\t\t\t\t\tAggregations: monitoring.AlertPolicyConditionConditionThresholdAggregationArray{\n\t\t\t\t\t\t\t\u0026monitoring.AlertPolicyConditionConditionThresholdAggregationArgs{\n\t\t\t\t\t\t\t\tAlignmentPeriod: pulumi.String(\"60s\"),\n\t\t\t\t\t\t\t\tPerSeriesAligner: pulumi.String(\"ALIGN_RATE\"),\n\t\t\t\t\t\t\t},\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\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.monitoring.AlertPolicy;\nimport com.pulumi.gcp.monitoring.AlertPolicyArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionConditionThresholdArgs;\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 alertPolicy = new AlertPolicy(\"alertPolicy\", AlertPolicyArgs.builder()\n .displayName(\"My Alert Policy\")\n .combiner(\"OR\")\n .conditions(AlertPolicyConditionArgs.builder()\n .displayName(\"test condition\")\n .conditionThreshold(AlertPolicyConditionConditionThresholdArgs.builder()\n .filter(\"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\")\n .duration(\"60s\")\n .comparison(\"COMPARISON_GT\")\n .aggregations(AlertPolicyConditionConditionThresholdAggregationArgs.builder()\n .alignmentPeriod(\"60s\")\n .perSeriesAligner(\"ALIGN_RATE\")\n .build())\n .build())\n .build())\n .userLabels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n alertPolicy:\n type: gcp:monitoring:AlertPolicy\n name: alert_policy\n properties:\n displayName: My Alert Policy\n combiner: OR\n conditions:\n - displayName: test condition\n conditionThreshold:\n filter: metric.type=\"compute.googleapis.com/instance/disk/write_bytes_count\" AND resource.type=\"gce_instance\"\n duration: 60s\n comparison: COMPARISON_GT\n aggregations:\n - alignmentPeriod: 60s\n perSeriesAligner: ALIGN_RATE\n userLabels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Alert Policy Evaluation Missing Data\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst alertPolicy = new gcp.monitoring.AlertPolicy(\"alert_policy\", {\n displayName: \"My Alert Policy\",\n combiner: \"OR\",\n conditions: [{\n displayName: \"test condition\",\n conditionThreshold: {\n filter: \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n duration: \"60s\",\n comparison: \"COMPARISON_GT\",\n aggregations: [{\n alignmentPeriod: \"60s\",\n perSeriesAligner: \"ALIGN_RATE\",\n }],\n evaluationMissingData: \"EVALUATION_MISSING_DATA_INACTIVE\",\n },\n }],\n userLabels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nalert_policy = gcp.monitoring.AlertPolicy(\"alert_policy\",\n display_name=\"My Alert Policy\",\n combiner=\"OR\",\n conditions=[{\n \"display_name\": \"test condition\",\n \"condition_threshold\": {\n \"filter\": \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n \"duration\": \"60s\",\n \"comparison\": \"COMPARISON_GT\",\n \"aggregations\": [{\n \"alignment_period\": \"60s\",\n \"per_series_aligner\": \"ALIGN_RATE\",\n }],\n \"evaluation_missing_data\": \"EVALUATION_MISSING_DATA_INACTIVE\",\n },\n }],\n user_labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var alertPolicy = new Gcp.Monitoring.AlertPolicy(\"alert_policy\", new()\n {\n DisplayName = \"My Alert Policy\",\n Combiner = \"OR\",\n Conditions = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionArgs\n {\n DisplayName = \"test condition\",\n ConditionThreshold = new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdArgs\n {\n Filter = \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n Duration = \"60s\",\n Comparison = \"COMPARISON_GT\",\n Aggregations = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdAggregationArgs\n {\n AlignmentPeriod = \"60s\",\n PerSeriesAligner = \"ALIGN_RATE\",\n },\n },\n EvaluationMissingData = \"EVALUATION_MISSING_DATA_INACTIVE\",\n },\n },\n },\n UserLabels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewAlertPolicy(ctx, \"alert_policy\", \u0026monitoring.AlertPolicyArgs{\n\t\t\tDisplayName: pulumi.String(\"My Alert Policy\"),\n\t\t\tCombiner: pulumi.String(\"OR\"),\n\t\t\tConditions: monitoring.AlertPolicyConditionArray{\n\t\t\t\t\u0026monitoring.AlertPolicyConditionArgs{\n\t\t\t\t\tDisplayName: pulumi.String(\"test condition\"),\n\t\t\t\t\tConditionThreshold: \u0026monitoring.AlertPolicyConditionConditionThresholdArgs{\n\t\t\t\t\t\tFilter: pulumi.String(\"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\"),\n\t\t\t\t\t\tDuration: pulumi.String(\"60s\"),\n\t\t\t\t\t\tComparison: pulumi.String(\"COMPARISON_GT\"),\n\t\t\t\t\t\tAggregations: monitoring.AlertPolicyConditionConditionThresholdAggregationArray{\n\t\t\t\t\t\t\t\u0026monitoring.AlertPolicyConditionConditionThresholdAggregationArgs{\n\t\t\t\t\t\t\t\tAlignmentPeriod: pulumi.String(\"60s\"),\n\t\t\t\t\t\t\t\tPerSeriesAligner: pulumi.String(\"ALIGN_RATE\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEvaluationMissingData: pulumi.String(\"EVALUATION_MISSING_DATA_INACTIVE\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.monitoring.AlertPolicy;\nimport com.pulumi.gcp.monitoring.AlertPolicyArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionConditionThresholdArgs;\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 alertPolicy = new AlertPolicy(\"alertPolicy\", AlertPolicyArgs.builder()\n .displayName(\"My Alert Policy\")\n .combiner(\"OR\")\n .conditions(AlertPolicyConditionArgs.builder()\n .displayName(\"test condition\")\n .conditionThreshold(AlertPolicyConditionConditionThresholdArgs.builder()\n .filter(\"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\")\n .duration(\"60s\")\n .comparison(\"COMPARISON_GT\")\n .aggregations(AlertPolicyConditionConditionThresholdAggregationArgs.builder()\n .alignmentPeriod(\"60s\")\n .perSeriesAligner(\"ALIGN_RATE\")\n .build())\n .evaluationMissingData(\"EVALUATION_MISSING_DATA_INACTIVE\")\n .build())\n .build())\n .userLabels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n alertPolicy:\n type: gcp:monitoring:AlertPolicy\n name: alert_policy\n properties:\n displayName: My Alert Policy\n combiner: OR\n conditions:\n - displayName: test condition\n conditionThreshold:\n filter: metric.type=\"compute.googleapis.com/instance/disk/write_bytes_count\" AND resource.type=\"gce_instance\"\n duration: 60s\n comparison: COMPARISON_GT\n aggregations:\n - alignmentPeriod: 60s\n perSeriesAligner: ALIGN_RATE\n evaluationMissingData: EVALUATION_MISSING_DATA_INACTIVE\n userLabels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Alert Policy Forecast Options\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst alertPolicy = new gcp.monitoring.AlertPolicy(\"alert_policy\", {\n displayName: \"My Alert Policy\",\n combiner: \"OR\",\n conditions: [{\n displayName: \"test condition\",\n conditionThreshold: {\n filter: \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n duration: \"60s\",\n forecastOptions: {\n forecastHorizon: \"3600s\",\n },\n comparison: \"COMPARISON_GT\",\n aggregations: [{\n alignmentPeriod: \"60s\",\n perSeriesAligner: \"ALIGN_RATE\",\n }],\n },\n }],\n userLabels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nalert_policy = gcp.monitoring.AlertPolicy(\"alert_policy\",\n display_name=\"My Alert Policy\",\n combiner=\"OR\",\n conditions=[{\n \"display_name\": \"test condition\",\n \"condition_threshold\": {\n \"filter\": \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n \"duration\": \"60s\",\n \"forecast_options\": {\n \"forecast_horizon\": \"3600s\",\n },\n \"comparison\": \"COMPARISON_GT\",\n \"aggregations\": [{\n \"alignment_period\": \"60s\",\n \"per_series_aligner\": \"ALIGN_RATE\",\n }],\n },\n }],\n user_labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var alertPolicy = new Gcp.Monitoring.AlertPolicy(\"alert_policy\", new()\n {\n DisplayName = \"My Alert Policy\",\n Combiner = \"OR\",\n Conditions = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionArgs\n {\n DisplayName = \"test condition\",\n ConditionThreshold = new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdArgs\n {\n Filter = \"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\",\n Duration = \"60s\",\n ForecastOptions = new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdForecastOptionsArgs\n {\n ForecastHorizon = \"3600s\",\n },\n Comparison = \"COMPARISON_GT\",\n Aggregations = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdAggregationArgs\n {\n AlignmentPeriod = \"60s\",\n PerSeriesAligner = \"ALIGN_RATE\",\n },\n },\n },\n },\n },\n UserLabels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewAlertPolicy(ctx, \"alert_policy\", \u0026monitoring.AlertPolicyArgs{\n\t\t\tDisplayName: pulumi.String(\"My Alert Policy\"),\n\t\t\tCombiner: pulumi.String(\"OR\"),\n\t\t\tConditions: monitoring.AlertPolicyConditionArray{\n\t\t\t\t\u0026monitoring.AlertPolicyConditionArgs{\n\t\t\t\t\tDisplayName: pulumi.String(\"test condition\"),\n\t\t\t\t\tConditionThreshold: \u0026monitoring.AlertPolicyConditionConditionThresholdArgs{\n\t\t\t\t\t\tFilter: pulumi.String(\"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\"),\n\t\t\t\t\t\tDuration: pulumi.String(\"60s\"),\n\t\t\t\t\t\tForecastOptions: \u0026monitoring.AlertPolicyConditionConditionThresholdForecastOptionsArgs{\n\t\t\t\t\t\t\tForecastHorizon: pulumi.String(\"3600s\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tComparison: pulumi.String(\"COMPARISON_GT\"),\n\t\t\t\t\t\tAggregations: monitoring.AlertPolicyConditionConditionThresholdAggregationArray{\n\t\t\t\t\t\t\t\u0026monitoring.AlertPolicyConditionConditionThresholdAggregationArgs{\n\t\t\t\t\t\t\t\tAlignmentPeriod: pulumi.String(\"60s\"),\n\t\t\t\t\t\t\t\tPerSeriesAligner: pulumi.String(\"ALIGN_RATE\"),\n\t\t\t\t\t\t\t},\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\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.monitoring.AlertPolicy;\nimport com.pulumi.gcp.monitoring.AlertPolicyArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionConditionThresholdArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionConditionThresholdForecastOptionsArgs;\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 alertPolicy = new AlertPolicy(\"alertPolicy\", AlertPolicyArgs.builder()\n .displayName(\"My Alert Policy\")\n .combiner(\"OR\")\n .conditions(AlertPolicyConditionArgs.builder()\n .displayName(\"test condition\")\n .conditionThreshold(AlertPolicyConditionConditionThresholdArgs.builder()\n .filter(\"metric.type=\\\"compute.googleapis.com/instance/disk/write_bytes_count\\\" AND resource.type=\\\"gce_instance\\\"\")\n .duration(\"60s\")\n .forecastOptions(AlertPolicyConditionConditionThresholdForecastOptionsArgs.builder()\n .forecastHorizon(\"3600s\")\n .build())\n .comparison(\"COMPARISON_GT\")\n .aggregations(AlertPolicyConditionConditionThresholdAggregationArgs.builder()\n .alignmentPeriod(\"60s\")\n .perSeriesAligner(\"ALIGN_RATE\")\n .build())\n .build())\n .build())\n .userLabels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n alertPolicy:\n type: gcp:monitoring:AlertPolicy\n name: alert_policy\n properties:\n displayName: My Alert Policy\n combiner: OR\n conditions:\n - displayName: test condition\n conditionThreshold:\n filter: metric.type=\"compute.googleapis.com/instance/disk/write_bytes_count\" AND resource.type=\"gce_instance\"\n duration: 60s\n forecastOptions:\n forecastHorizon: 3600s\n comparison: COMPARISON_GT\n aggregations:\n - alignmentPeriod: 60s\n perSeriesAligner: ALIGN_RATE\n userLabels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Alert Policy Promql Condition\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst alertPolicy = new gcp.monitoring.AlertPolicy(\"alert_policy\", {\n displayName: \"My Alert Policy\",\n combiner: \"OR\",\n conditions: [{\n displayName: \"test condition\",\n conditionPrometheusQueryLanguage: {\n query: \"compute_googleapis_com:instance_cpu_usage_time \u003e 0\",\n duration: \"60s\",\n evaluationInterval: \"60s\",\n alertRule: \"AlwaysOn\",\n ruleGroup: \"a test\",\n },\n }],\n alertStrategy: {\n autoClose: \"1800s\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nalert_policy = gcp.monitoring.AlertPolicy(\"alert_policy\",\n display_name=\"My Alert Policy\",\n combiner=\"OR\",\n conditions=[{\n \"display_name\": \"test condition\",\n \"condition_prometheus_query_language\": {\n \"query\": \"compute_googleapis_com:instance_cpu_usage_time \u003e 0\",\n \"duration\": \"60s\",\n \"evaluation_interval\": \"60s\",\n \"alert_rule\": \"AlwaysOn\",\n \"rule_group\": \"a test\",\n },\n }],\n alert_strategy={\n \"auto_close\": \"1800s\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var alertPolicy = new Gcp.Monitoring.AlertPolicy(\"alert_policy\", new()\n {\n DisplayName = \"My Alert Policy\",\n Combiner = \"OR\",\n Conditions = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionArgs\n {\n DisplayName = \"test condition\",\n ConditionPrometheusQueryLanguage = new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionPrometheusQueryLanguageArgs\n {\n Query = \"compute_googleapis_com:instance_cpu_usage_time \u003e 0\",\n Duration = \"60s\",\n EvaluationInterval = \"60s\",\n AlertRule = \"AlwaysOn\",\n RuleGroup = \"a test\",\n },\n },\n },\n AlertStrategy = new Gcp.Monitoring.Inputs.AlertPolicyAlertStrategyArgs\n {\n AutoClose = \"1800s\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewAlertPolicy(ctx, \"alert_policy\", \u0026monitoring.AlertPolicyArgs{\n\t\t\tDisplayName: pulumi.String(\"My Alert Policy\"),\n\t\t\tCombiner: pulumi.String(\"OR\"),\n\t\t\tConditions: monitoring.AlertPolicyConditionArray{\n\t\t\t\t\u0026monitoring.AlertPolicyConditionArgs{\n\t\t\t\t\tDisplayName: pulumi.String(\"test condition\"),\n\t\t\t\t\tConditionPrometheusQueryLanguage: \u0026monitoring.AlertPolicyConditionConditionPrometheusQueryLanguageArgs{\n\t\t\t\t\t\tQuery: pulumi.String(\"compute_googleapis_com:instance_cpu_usage_time \u003e 0\"),\n\t\t\t\t\t\tDuration: pulumi.String(\"60s\"),\n\t\t\t\t\t\tEvaluationInterval: pulumi.String(\"60s\"),\n\t\t\t\t\t\tAlertRule: pulumi.String(\"AlwaysOn\"),\n\t\t\t\t\t\tRuleGroup: pulumi.String(\"a test\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tAlertStrategy: \u0026monitoring.AlertPolicyAlertStrategyArgs{\n\t\t\t\tAutoClose: pulumi.String(\"1800s\"),\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.gcp.monitoring.AlertPolicy;\nimport com.pulumi.gcp.monitoring.AlertPolicyArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionConditionPrometheusQueryLanguageArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyAlertStrategyArgs;\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 alertPolicy = new AlertPolicy(\"alertPolicy\", AlertPolicyArgs.builder()\n .displayName(\"My Alert Policy\")\n .combiner(\"OR\")\n .conditions(AlertPolicyConditionArgs.builder()\n .displayName(\"test condition\")\n .conditionPrometheusQueryLanguage(AlertPolicyConditionConditionPrometheusQueryLanguageArgs.builder()\n .query(\"compute_googleapis_com:instance_cpu_usage_time \u003e 0\")\n .duration(\"60s\")\n .evaluationInterval(\"60s\")\n .alertRule(\"AlwaysOn\")\n .ruleGroup(\"a test\")\n .build())\n .build())\n .alertStrategy(AlertPolicyAlertStrategyArgs.builder()\n .autoClose(\"1800s\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n alertPolicy:\n type: gcp:monitoring:AlertPolicy\n name: alert_policy\n properties:\n displayName: My Alert Policy\n combiner: OR\n conditions:\n - displayName: test condition\n conditionPrometheusQueryLanguage:\n query: compute_googleapis_com:instance_cpu_usage_time \u003e 0\n duration: 60s\n evaluationInterval: 60s\n alertRule: AlwaysOn\n ruleGroup: a test\n alertStrategy:\n autoClose: 1800s\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAlertPolicy can be imported using any of these accepted formats:\n\n* `{{project}}/{{name}}`\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, AlertPolicy can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:monitoring/alertPolicy:AlertPolicy default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:monitoring/alertPolicy:AlertPolicy default \"{{project}} {{name}}\"\n```\n\n```sh\n$ pulumi import gcp:monitoring/alertPolicy:AlertPolicy default {{name}}\n```\n\n", "properties": { "alertStrategy": { "$ref": "#/types/gcp:monitoring/AlertPolicyAlertStrategy:AlertPolicyAlertStrategy", @@ -231459,7 +234369,7 @@ } }, "gcp:monitoring/customService:CustomService": { - "description": "A Service is a discrete, autonomous, and network-accessible unit,\ndesigned to solve an individual concern. In Cloud Monitoring,\na Service acts as the root resource under which operational aspects of\nthe service are accessible\n\n\nTo get more information about Service, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/services)\n* How-to Guides\n * [Monitoring API Documentation](https://cloud.google.com/monitoring/api/v3/)\n * [Service Monitoring](https://cloud.google.com/monitoring/service-monitoring)\n * [Service-orientation on Wikipedia](https://en.wikipedia.org/wiki/Service-orientation)\n\n## Example Usage\n\n### Monitoring Service Custom\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst custom = new gcp.monitoring.CustomService(\"custom\", {\n serviceId: \"custom-srv\",\n displayName: \"My Custom Service custom-srv\",\n telemetry: {\n resourceName: \"//product.googleapis.com/foo/foo/services/test\",\n },\n userLabels: {\n my_key: \"my_value\",\n my_other_key: \"my_other_value\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom = gcp.monitoring.CustomService(\"custom\",\n service_id=\"custom-srv\",\n display_name=\"My Custom Service custom-srv\",\n telemetry={\n \"resource_name\": \"//product.googleapis.com/foo/foo/services/test\",\n },\n user_labels={\n \"my_key\": \"my_value\",\n \"my_other_key\": \"my_other_value\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var custom = new Gcp.Monitoring.CustomService(\"custom\", new()\n {\n ServiceId = \"custom-srv\",\n DisplayName = \"My Custom Service custom-srv\",\n Telemetry = new Gcp.Monitoring.Inputs.CustomServiceTelemetryArgs\n {\n ResourceName = \"//product.googleapis.com/foo/foo/services/test\",\n },\n UserLabels = \n {\n { \"my_key\", \"my_value\" },\n { \"my_other_key\", \"my_other_value\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewCustomService(ctx, \"custom\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service custom-srv\"),\n\t\t\tTelemetry: \u0026monitoring.CustomServiceTelemetryArgs{\n\t\t\t\tResourceName: pulumi.String(\"//product.googleapis.com/foo/foo/services/test\"),\n\t\t\t},\n\t\t\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_value\"),\n\t\t\t\t\"my_other_key\": pulumi.String(\"my_other_value\"),\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.gcp.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.inputs.CustomServiceTelemetryArgs;\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 custom = new CustomService(\"custom\", CustomServiceArgs.builder()\n .serviceId(\"custom-srv\")\n .displayName(\"My Custom Service custom-srv\")\n .telemetry(CustomServiceTelemetryArgs.builder()\n .resourceName(\"//product.googleapis.com/foo/foo/services/test\")\n .build())\n .userLabels(Map.ofEntries(\n Map.entry(\"my_key\", \"my_value\"),\n Map.entry(\"my_other_key\", \"my_other_value\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n custom:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv\n displayName: My Custom Service custom-srv\n telemetry:\n resourceName: //product.googleapis.com/foo/foo/services/test\n userLabels:\n my_key: my_value\n my_other_key: my_other_value\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nService can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Service can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:monitoring/customService:CustomService default {{name}}\n```\n\n", + "description": "A Service is a discrete, autonomous, and network-accessible unit,\ndesigned to solve an individual concern. In Cloud Monitoring,\na Service acts as the root resource under which operational aspects of\nthe service are accessible\n\n\nTo get more information about Service, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/services)\n* How-to Guides\n * [Monitoring API Documentation](https://cloud.google.com/monitoring/api/v3/)\n * [Service Monitoring](https://cloud.google.com/monitoring/service-monitoring)\n * [Service-orientation on Wikipedia](https://en.wikipedia.org/wiki/Service-orientation)\n\n## Example Usage\n\n### Monitoring Service Custom\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst custom = new gcp.monitoring.CustomService(\"custom\", {\n serviceId: \"custom-srv\",\n displayName: \"My Custom Service custom-srv\",\n telemetry: {\n resourceName: \"//product.googleapis.com/foo/foo/services/test\",\n },\n userLabels: {\n my_key: \"my_value\",\n my_other_key: \"my_other_value\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom = gcp.monitoring.CustomService(\"custom\",\n service_id=\"custom-srv\",\n display_name=\"My Custom Service custom-srv\",\n telemetry={\n \"resource_name\": \"//product.googleapis.com/foo/foo/services/test\",\n },\n user_labels={\n \"my_key\": \"my_value\",\n \"my_other_key\": \"my_other_value\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var custom = new Gcp.Monitoring.CustomService(\"custom\", new()\n {\n ServiceId = \"custom-srv\",\n DisplayName = \"My Custom Service custom-srv\",\n Telemetry = new Gcp.Monitoring.Inputs.CustomServiceTelemetryArgs\n {\n ResourceName = \"//product.googleapis.com/foo/foo/services/test\",\n },\n UserLabels = \n {\n { \"my_key\", \"my_value\" },\n { \"my_other_key\", \"my_other_value\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewCustomService(ctx, \"custom\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service custom-srv\"),\n\t\t\tTelemetry: \u0026monitoring.CustomServiceTelemetryArgs{\n\t\t\t\tResourceName: pulumi.String(\"//product.googleapis.com/foo/foo/services/test\"),\n\t\t\t},\n\t\t\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_value\"),\n\t\t\t\t\"my_other_key\": pulumi.String(\"my_other_value\"),\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.gcp.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.inputs.CustomServiceTelemetryArgs;\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 custom = new CustomService(\"custom\", CustomServiceArgs.builder()\n .serviceId(\"custom-srv\")\n .displayName(\"My Custom Service custom-srv\")\n .telemetry(CustomServiceTelemetryArgs.builder()\n .resourceName(\"//product.googleapis.com/foo/foo/services/test\")\n .build())\n .userLabels(Map.ofEntries(\n Map.entry(\"my_key\", \"my_value\"),\n Map.entry(\"my_other_key\", \"my_other_value\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n custom:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv\n displayName: My Custom Service custom-srv\n telemetry:\n resourceName: //product.googleapis.com/foo/foo/services/test\n userLabels:\n my_key: my_value\n my_other_key: my_other_value\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nService can be imported using any of these accepted formats:\n\n* `{{project}}/{{name}}`\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Service can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:monitoring/customService:CustomService default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:monitoring/customService:CustomService default \"{{project}} {{name}}\"\n```\n\n```sh\n$ pulumi import gcp:monitoring/customService:CustomService default {{name}}\n```\n\n", "properties": { "displayName": { "type": "string", @@ -231723,7 +234633,7 @@ } }, "gcp:monitoring/group:Group": { - "description": "The description of a dynamic collection of monitored resources. Each group\nhas a filter that is matched against monitored resources and their\nassociated metadata. If a group's filter matches an available monitored\nresource, then that resource is a member of that group.\n\n\nTo get more information about Group, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.groups)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/monitoring/groups/)\n\n## Example Usage\n\n### Monitoring Group Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.monitoring.Group(\"basic\", {\n displayName: \"tf-test MonitoringGroup\",\n filter: \"resource.metadata.region=\\\"europe-west2\\\"\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.monitoring.Group(\"basic\",\n display_name=\"tf-test MonitoringGroup\",\n filter=\"resource.metadata.region=\\\"europe-west2\\\"\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Monitoring.Group(\"basic\", new()\n {\n DisplayName = \"tf-test MonitoringGroup\",\n Filter = \"resource.metadata.region=\\\"europe-west2\\\"\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewGroup(ctx, \"basic\", \u0026monitoring.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"tf-test MonitoringGroup\"),\n\t\t\tFilter: pulumi.String(\"resource.metadata.region=\\\"europe-west2\\\"\"),\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.gcp.monitoring.Group;\nimport com.pulumi.gcp.monitoring.GroupArgs;\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 basic = new Group(\"basic\", GroupArgs.builder()\n .displayName(\"tf-test MonitoringGroup\")\n .filter(\"resource.metadata.region=\\\"europe-west2\\\"\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:monitoring:Group\n properties:\n displayName: tf-test MonitoringGroup\n filter: resource.metadata.region=\"europe-west2\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Group Subgroup\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst parent = new gcp.monitoring.Group(\"parent\", {\n displayName: \"tf-test MonitoringParentGroup\",\n filter: \"resource.metadata.region=\\\"europe-west2\\\"\",\n});\nconst subgroup = new gcp.monitoring.Group(\"subgroup\", {\n displayName: \"tf-test MonitoringSubGroup\",\n filter: \"resource.metadata.region=\\\"europe-west2\\\"\",\n parentName: parent.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nparent = gcp.monitoring.Group(\"parent\",\n display_name=\"tf-test MonitoringParentGroup\",\n filter=\"resource.metadata.region=\\\"europe-west2\\\"\")\nsubgroup = gcp.monitoring.Group(\"subgroup\",\n display_name=\"tf-test MonitoringSubGroup\",\n filter=\"resource.metadata.region=\\\"europe-west2\\\"\",\n parent_name=parent.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var parent = new Gcp.Monitoring.Group(\"parent\", new()\n {\n DisplayName = \"tf-test MonitoringParentGroup\",\n Filter = \"resource.metadata.region=\\\"europe-west2\\\"\",\n });\n\n var subgroup = new Gcp.Monitoring.Group(\"subgroup\", new()\n {\n DisplayName = \"tf-test MonitoringSubGroup\",\n Filter = \"resource.metadata.region=\\\"europe-west2\\\"\",\n ParentName = parent.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tparent, err := monitoring.NewGroup(ctx, \"parent\", \u0026monitoring.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"tf-test MonitoringParentGroup\"),\n\t\t\tFilter: pulumi.String(\"resource.metadata.region=\\\"europe-west2\\\"\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewGroup(ctx, \"subgroup\", \u0026monitoring.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"tf-test MonitoringSubGroup\"),\n\t\t\tFilter: pulumi.String(\"resource.metadata.region=\\\"europe-west2\\\"\"),\n\t\t\tParentName: parent.Name,\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.gcp.monitoring.Group;\nimport com.pulumi.gcp.monitoring.GroupArgs;\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 parent = new Group(\"parent\", GroupArgs.builder()\n .displayName(\"tf-test MonitoringParentGroup\")\n .filter(\"resource.metadata.region=\\\"europe-west2\\\"\")\n .build());\n\n var subgroup = new Group(\"subgroup\", GroupArgs.builder()\n .displayName(\"tf-test MonitoringSubGroup\")\n .filter(\"resource.metadata.region=\\\"europe-west2\\\"\")\n .parentName(parent.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n parent:\n type: gcp:monitoring:Group\n properties:\n displayName: tf-test MonitoringParentGroup\n filter: resource.metadata.region=\"europe-west2\"\n subgroup:\n type: gcp:monitoring:Group\n properties:\n displayName: tf-test MonitoringSubGroup\n filter: resource.metadata.region=\"europe-west2\"\n parentName: ${parent.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nGroup can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Group can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:monitoring/group:Group default {{name}}\n```\n\n", + "description": "The description of a dynamic collection of monitored resources. Each group\nhas a filter that is matched against monitored resources and their\nassociated metadata. If a group's filter matches an available monitored\nresource, then that resource is a member of that group.\n\n\nTo get more information about Group, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.groups)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/monitoring/groups/)\n\n## Example Usage\n\n### Monitoring Group Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.monitoring.Group(\"basic\", {\n displayName: \"tf-test MonitoringGroup\",\n filter: \"resource.metadata.region=\\\"europe-west2\\\"\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.monitoring.Group(\"basic\",\n display_name=\"tf-test MonitoringGroup\",\n filter=\"resource.metadata.region=\\\"europe-west2\\\"\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Monitoring.Group(\"basic\", new()\n {\n DisplayName = \"tf-test MonitoringGroup\",\n Filter = \"resource.metadata.region=\\\"europe-west2\\\"\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewGroup(ctx, \"basic\", \u0026monitoring.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"tf-test MonitoringGroup\"),\n\t\t\tFilter: pulumi.String(\"resource.metadata.region=\\\"europe-west2\\\"\"),\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.gcp.monitoring.Group;\nimport com.pulumi.gcp.monitoring.GroupArgs;\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 basic = new Group(\"basic\", GroupArgs.builder()\n .displayName(\"tf-test MonitoringGroup\")\n .filter(\"resource.metadata.region=\\\"europe-west2\\\"\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:monitoring:Group\n properties:\n displayName: tf-test MonitoringGroup\n filter: resource.metadata.region=\"europe-west2\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Group Subgroup\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst parent = new gcp.monitoring.Group(\"parent\", {\n displayName: \"tf-test MonitoringParentGroup\",\n filter: \"resource.metadata.region=\\\"europe-west2\\\"\",\n});\nconst subgroup = new gcp.monitoring.Group(\"subgroup\", {\n displayName: \"tf-test MonitoringSubGroup\",\n filter: \"resource.metadata.region=\\\"europe-west2\\\"\",\n parentName: parent.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nparent = gcp.monitoring.Group(\"parent\",\n display_name=\"tf-test MonitoringParentGroup\",\n filter=\"resource.metadata.region=\\\"europe-west2\\\"\")\nsubgroup = gcp.monitoring.Group(\"subgroup\",\n display_name=\"tf-test MonitoringSubGroup\",\n filter=\"resource.metadata.region=\\\"europe-west2\\\"\",\n parent_name=parent.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var parent = new Gcp.Monitoring.Group(\"parent\", new()\n {\n DisplayName = \"tf-test MonitoringParentGroup\",\n Filter = \"resource.metadata.region=\\\"europe-west2\\\"\",\n });\n\n var subgroup = new Gcp.Monitoring.Group(\"subgroup\", new()\n {\n DisplayName = \"tf-test MonitoringSubGroup\",\n Filter = \"resource.metadata.region=\\\"europe-west2\\\"\",\n ParentName = parent.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tparent, err := monitoring.NewGroup(ctx, \"parent\", \u0026monitoring.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"tf-test MonitoringParentGroup\"),\n\t\t\tFilter: pulumi.String(\"resource.metadata.region=\\\"europe-west2\\\"\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewGroup(ctx, \"subgroup\", \u0026monitoring.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"tf-test MonitoringSubGroup\"),\n\t\t\tFilter: pulumi.String(\"resource.metadata.region=\\\"europe-west2\\\"\"),\n\t\t\tParentName: parent.Name,\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.gcp.monitoring.Group;\nimport com.pulumi.gcp.monitoring.GroupArgs;\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 parent = new Group(\"parent\", GroupArgs.builder()\n .displayName(\"tf-test MonitoringParentGroup\")\n .filter(\"resource.metadata.region=\\\"europe-west2\\\"\")\n .build());\n\n var subgroup = new Group(\"subgroup\", GroupArgs.builder()\n .displayName(\"tf-test MonitoringSubGroup\")\n .filter(\"resource.metadata.region=\\\"europe-west2\\\"\")\n .parentName(parent.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n parent:\n type: gcp:monitoring:Group\n properties:\n displayName: tf-test MonitoringParentGroup\n filter: resource.metadata.region=\"europe-west2\"\n subgroup:\n type: gcp:monitoring:Group\n properties:\n displayName: tf-test MonitoringSubGroup\n filter: resource.metadata.region=\"europe-west2\"\n parentName: ${parent.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nGroup can be imported using any of these accepted formats:\n\n* `{{project}}/{{name}}`\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Group can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:monitoring/group:Group default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:monitoring/group:Group default \"{{project}} {{name}}\"\n```\n\n```sh\n$ pulumi import gcp:monitoring/group:Group default {{name}}\n```\n\n", "properties": { "displayName": { "type": "string", @@ -231816,7 +234726,7 @@ } }, "gcp:monitoring/metricDescriptor:MetricDescriptor": { - "description": "Defines a metric type and its schema. Once a metric descriptor is created, deleting or altering it stops data collection and makes the metric type's existing data unusable.\n\n\nTo get more information about MetricDescriptor, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.metricDescriptors)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/monitoring/custom-metrics/)\n\n## Example Usage\n\n### Monitoring Metric Descriptor Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.monitoring.MetricDescriptor(\"basic\", {\n description: \"Daily sales records from all branch stores.\",\n displayName: \"metric-descriptor\",\n type: \"custom.googleapis.com/stores/daily_sales\",\n metricKind: \"GAUGE\",\n valueType: \"DOUBLE\",\n unit: \"{USD}\",\n labels: [{\n key: \"store_id\",\n valueType: \"STRING\",\n description: \"The ID of the store.\",\n }],\n launchStage: \"BETA\",\n metadata: {\n samplePeriod: \"60s\",\n ingestDelay: \"30s\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.monitoring.MetricDescriptor(\"basic\",\n description=\"Daily sales records from all branch stores.\",\n display_name=\"metric-descriptor\",\n type=\"custom.googleapis.com/stores/daily_sales\",\n metric_kind=\"GAUGE\",\n value_type=\"DOUBLE\",\n unit=\"{USD}\",\n labels=[{\n \"key\": \"store_id\",\n \"value_type\": \"STRING\",\n \"description\": \"The ID of the store.\",\n }],\n launch_stage=\"BETA\",\n metadata={\n \"sample_period\": \"60s\",\n \"ingest_delay\": \"30s\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Monitoring.MetricDescriptor(\"basic\", new()\n {\n Description = \"Daily sales records from all branch stores.\",\n DisplayName = \"metric-descriptor\",\n Type = \"custom.googleapis.com/stores/daily_sales\",\n MetricKind = \"GAUGE\",\n ValueType = \"DOUBLE\",\n Unit = \"{USD}\",\n Labels = new[]\n {\n new Gcp.Monitoring.Inputs.MetricDescriptorLabelArgs\n {\n Key = \"store_id\",\n ValueType = \"STRING\",\n Description = \"The ID of the store.\",\n },\n },\n LaunchStage = \"BETA\",\n Metadata = new Gcp.Monitoring.Inputs.MetricDescriptorMetadataArgs\n {\n SamplePeriod = \"60s\",\n IngestDelay = \"30s\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewMetricDescriptor(ctx, \"basic\", \u0026monitoring.MetricDescriptorArgs{\n\t\t\tDescription: pulumi.String(\"Daily sales records from all branch stores.\"),\n\t\t\tDisplayName: pulumi.String(\"metric-descriptor\"),\n\t\t\tType: pulumi.String(\"custom.googleapis.com/stores/daily_sales\"),\n\t\t\tMetricKind: pulumi.String(\"GAUGE\"),\n\t\t\tValueType: pulumi.String(\"DOUBLE\"),\n\t\t\tUnit: pulumi.String(\"{USD}\"),\n\t\t\tLabels: monitoring.MetricDescriptorLabelArray{\n\t\t\t\t\u0026monitoring.MetricDescriptorLabelArgs{\n\t\t\t\t\tKey: pulumi.String(\"store_id\"),\n\t\t\t\t\tValueType: pulumi.String(\"STRING\"),\n\t\t\t\t\tDescription: pulumi.String(\"The ID of the store.\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tMetadata: \u0026monitoring.MetricDescriptorMetadataArgs{\n\t\t\t\tSamplePeriod: pulumi.String(\"60s\"),\n\t\t\t\tIngestDelay: pulumi.String(\"30s\"),\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.gcp.monitoring.MetricDescriptor;\nimport com.pulumi.gcp.monitoring.MetricDescriptorArgs;\nimport com.pulumi.gcp.monitoring.inputs.MetricDescriptorLabelArgs;\nimport com.pulumi.gcp.monitoring.inputs.MetricDescriptorMetadataArgs;\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 basic = new MetricDescriptor(\"basic\", MetricDescriptorArgs.builder()\n .description(\"Daily sales records from all branch stores.\")\n .displayName(\"metric-descriptor\")\n .type(\"custom.googleapis.com/stores/daily_sales\")\n .metricKind(\"GAUGE\")\n .valueType(\"DOUBLE\")\n .unit(\"{USD}\")\n .labels(MetricDescriptorLabelArgs.builder()\n .key(\"store_id\")\n .valueType(\"STRING\")\n .description(\"The ID of the store.\")\n .build())\n .launchStage(\"BETA\")\n .metadata(MetricDescriptorMetadataArgs.builder()\n .samplePeriod(\"60s\")\n .ingestDelay(\"30s\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:monitoring:MetricDescriptor\n properties:\n description: Daily sales records from all branch stores.\n displayName: metric-descriptor\n type: custom.googleapis.com/stores/daily_sales\n metricKind: GAUGE\n valueType: DOUBLE\n unit: '{USD}'\n labels:\n - key: store_id\n valueType: STRING\n description: The ID of the store.\n launchStage: BETA\n metadata:\n samplePeriod: 60s\n ingestDelay: 30s\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Metric Descriptor Alert\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst withAlert = new gcp.monitoring.MetricDescriptor(\"with_alert\", {\n description: \"Daily sales records from all branch stores.\",\n displayName: \"metric-descriptor\",\n type: \"custom.googleapis.com/stores/daily_sales\",\n metricKind: \"GAUGE\",\n valueType: \"DOUBLE\",\n unit: \"{USD}\",\n});\nconst alertPolicy = new gcp.monitoring.AlertPolicy(\"alert_policy\", {\n displayName: \"metric-descriptor\",\n combiner: \"OR\",\n conditions: [{\n displayName: \"test condition\",\n conditionThreshold: {\n filter: pulumi.interpolate`metric.type=\"${withAlert.type}\" AND resource.type=\"gce_instance\"`,\n duration: \"60s\",\n comparison: \"COMPARISON_GT\",\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nwith_alert = gcp.monitoring.MetricDescriptor(\"with_alert\",\n description=\"Daily sales records from all branch stores.\",\n display_name=\"metric-descriptor\",\n type=\"custom.googleapis.com/stores/daily_sales\",\n metric_kind=\"GAUGE\",\n value_type=\"DOUBLE\",\n unit=\"{USD}\")\nalert_policy = gcp.monitoring.AlertPolicy(\"alert_policy\",\n display_name=\"metric-descriptor\",\n combiner=\"OR\",\n conditions=[{\n \"display_name\": \"test condition\",\n \"condition_threshold\": {\n \"filter\": with_alert.type.apply(lambda type: f\"metric.type=\\\"{type}\\\" AND resource.type=\\\"gce_instance\\\"\"),\n \"duration\": \"60s\",\n \"comparison\": \"COMPARISON_GT\",\n },\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var withAlert = new Gcp.Monitoring.MetricDescriptor(\"with_alert\", new()\n {\n Description = \"Daily sales records from all branch stores.\",\n DisplayName = \"metric-descriptor\",\n Type = \"custom.googleapis.com/stores/daily_sales\",\n MetricKind = \"GAUGE\",\n ValueType = \"DOUBLE\",\n Unit = \"{USD}\",\n });\n\n var alertPolicy = new Gcp.Monitoring.AlertPolicy(\"alert_policy\", new()\n {\n DisplayName = \"metric-descriptor\",\n Combiner = \"OR\",\n Conditions = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionArgs\n {\n DisplayName = \"test condition\",\n ConditionThreshold = new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdArgs\n {\n Filter = withAlert.Type.Apply(type =\u003e $\"metric.type=\\\"{type}\\\" AND resource.type=\\\"gce_instance\\\"\"),\n Duration = \"60s\",\n Comparison = \"COMPARISON_GT\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\twithAlert, err := monitoring.NewMetricDescriptor(ctx, \"with_alert\", \u0026monitoring.MetricDescriptorArgs{\n\t\t\tDescription: pulumi.String(\"Daily sales records from all branch stores.\"),\n\t\t\tDisplayName: pulumi.String(\"metric-descriptor\"),\n\t\t\tType: pulumi.String(\"custom.googleapis.com/stores/daily_sales\"),\n\t\t\tMetricKind: pulumi.String(\"GAUGE\"),\n\t\t\tValueType: pulumi.String(\"DOUBLE\"),\n\t\t\tUnit: pulumi.String(\"{USD}\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewAlertPolicy(ctx, \"alert_policy\", \u0026monitoring.AlertPolicyArgs{\n\t\t\tDisplayName: pulumi.String(\"metric-descriptor\"),\n\t\t\tCombiner: pulumi.String(\"OR\"),\n\t\t\tConditions: monitoring.AlertPolicyConditionArray{\n\t\t\t\t\u0026monitoring.AlertPolicyConditionArgs{\n\t\t\t\t\tDisplayName: pulumi.String(\"test condition\"),\n\t\t\t\t\tConditionThreshold: \u0026monitoring.AlertPolicyConditionConditionThresholdArgs{\n\t\t\t\t\t\tFilter: withAlert.Type.ApplyT(func(_type string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"metric.type=\\\"%v\\\" AND resource.type=\\\"gce_instance\\\"\", _type), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t\tDuration: pulumi.String(\"60s\"),\n\t\t\t\t\t\tComparison: pulumi.String(\"COMPARISON_GT\"),\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\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.gcp.monitoring.MetricDescriptor;\nimport com.pulumi.gcp.monitoring.MetricDescriptorArgs;\nimport com.pulumi.gcp.monitoring.AlertPolicy;\nimport com.pulumi.gcp.monitoring.AlertPolicyArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionConditionThresholdArgs;\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 withAlert = new MetricDescriptor(\"withAlert\", MetricDescriptorArgs.builder()\n .description(\"Daily sales records from all branch stores.\")\n .displayName(\"metric-descriptor\")\n .type(\"custom.googleapis.com/stores/daily_sales\")\n .metricKind(\"GAUGE\")\n .valueType(\"DOUBLE\")\n .unit(\"{USD}\")\n .build());\n\n var alertPolicy = new AlertPolicy(\"alertPolicy\", AlertPolicyArgs.builder()\n .displayName(\"metric-descriptor\")\n .combiner(\"OR\")\n .conditions(AlertPolicyConditionArgs.builder()\n .displayName(\"test condition\")\n .conditionThreshold(AlertPolicyConditionConditionThresholdArgs.builder()\n .filter(withAlert.type().applyValue(type -\u003e String.format(\"metric.type=\\\"%s\\\" AND resource.type=\\\"gce_instance\\\"\", type)))\n .duration(\"60s\")\n .comparison(\"COMPARISON_GT\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n withAlert:\n type: gcp:monitoring:MetricDescriptor\n name: with_alert\n properties:\n description: Daily sales records from all branch stores.\n displayName: metric-descriptor\n type: custom.googleapis.com/stores/daily_sales\n metricKind: GAUGE\n valueType: DOUBLE\n unit: '{USD}'\n alertPolicy:\n type: gcp:monitoring:AlertPolicy\n name: alert_policy\n properties:\n displayName: metric-descriptor\n combiner: OR\n conditions:\n - displayName: test condition\n conditionThreshold:\n filter: metric.type=\"${withAlert.type}\" AND resource.type=\"gce_instance\"\n duration: 60s\n comparison: COMPARISON_GT\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMetricDescriptor can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, MetricDescriptor can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:monitoring/metricDescriptor:MetricDescriptor default {{name}}\n```\n\n", + "description": "Defines a metric type and its schema. Once a metric descriptor is created, deleting or altering it stops data collection and makes the metric type's existing data unusable.\n\n\nTo get more information about MetricDescriptor, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.metricDescriptors)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/monitoring/custom-metrics/)\n\n## Example Usage\n\n### Monitoring Metric Descriptor Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.monitoring.MetricDescriptor(\"basic\", {\n description: \"Daily sales records from all branch stores.\",\n displayName: \"metric-descriptor\",\n type: \"custom.googleapis.com/stores/daily_sales\",\n metricKind: \"GAUGE\",\n valueType: \"DOUBLE\",\n unit: \"{USD}\",\n labels: [{\n key: \"store_id\",\n valueType: \"STRING\",\n description: \"The ID of the store.\",\n }],\n launchStage: \"BETA\",\n metadata: {\n samplePeriod: \"60s\",\n ingestDelay: \"30s\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.monitoring.MetricDescriptor(\"basic\",\n description=\"Daily sales records from all branch stores.\",\n display_name=\"metric-descriptor\",\n type=\"custom.googleapis.com/stores/daily_sales\",\n metric_kind=\"GAUGE\",\n value_type=\"DOUBLE\",\n unit=\"{USD}\",\n labels=[{\n \"key\": \"store_id\",\n \"value_type\": \"STRING\",\n \"description\": \"The ID of the store.\",\n }],\n launch_stage=\"BETA\",\n metadata={\n \"sample_period\": \"60s\",\n \"ingest_delay\": \"30s\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Monitoring.MetricDescriptor(\"basic\", new()\n {\n Description = \"Daily sales records from all branch stores.\",\n DisplayName = \"metric-descriptor\",\n Type = \"custom.googleapis.com/stores/daily_sales\",\n MetricKind = \"GAUGE\",\n ValueType = \"DOUBLE\",\n Unit = \"{USD}\",\n Labels = new[]\n {\n new Gcp.Monitoring.Inputs.MetricDescriptorLabelArgs\n {\n Key = \"store_id\",\n ValueType = \"STRING\",\n Description = \"The ID of the store.\",\n },\n },\n LaunchStage = \"BETA\",\n Metadata = new Gcp.Monitoring.Inputs.MetricDescriptorMetadataArgs\n {\n SamplePeriod = \"60s\",\n IngestDelay = \"30s\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewMetricDescriptor(ctx, \"basic\", \u0026monitoring.MetricDescriptorArgs{\n\t\t\tDescription: pulumi.String(\"Daily sales records from all branch stores.\"),\n\t\t\tDisplayName: pulumi.String(\"metric-descriptor\"),\n\t\t\tType: pulumi.String(\"custom.googleapis.com/stores/daily_sales\"),\n\t\t\tMetricKind: pulumi.String(\"GAUGE\"),\n\t\t\tValueType: pulumi.String(\"DOUBLE\"),\n\t\t\tUnit: pulumi.String(\"{USD}\"),\n\t\t\tLabels: monitoring.MetricDescriptorLabelArray{\n\t\t\t\t\u0026monitoring.MetricDescriptorLabelArgs{\n\t\t\t\t\tKey: pulumi.String(\"store_id\"),\n\t\t\t\t\tValueType: pulumi.String(\"STRING\"),\n\t\t\t\t\tDescription: pulumi.String(\"The ID of the store.\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tMetadata: \u0026monitoring.MetricDescriptorMetadataArgs{\n\t\t\t\tSamplePeriod: pulumi.String(\"60s\"),\n\t\t\t\tIngestDelay: pulumi.String(\"30s\"),\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.gcp.monitoring.MetricDescriptor;\nimport com.pulumi.gcp.monitoring.MetricDescriptorArgs;\nimport com.pulumi.gcp.monitoring.inputs.MetricDescriptorLabelArgs;\nimport com.pulumi.gcp.monitoring.inputs.MetricDescriptorMetadataArgs;\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 basic = new MetricDescriptor(\"basic\", MetricDescriptorArgs.builder()\n .description(\"Daily sales records from all branch stores.\")\n .displayName(\"metric-descriptor\")\n .type(\"custom.googleapis.com/stores/daily_sales\")\n .metricKind(\"GAUGE\")\n .valueType(\"DOUBLE\")\n .unit(\"{USD}\")\n .labels(MetricDescriptorLabelArgs.builder()\n .key(\"store_id\")\n .valueType(\"STRING\")\n .description(\"The ID of the store.\")\n .build())\n .launchStage(\"BETA\")\n .metadata(MetricDescriptorMetadataArgs.builder()\n .samplePeriod(\"60s\")\n .ingestDelay(\"30s\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:monitoring:MetricDescriptor\n properties:\n description: Daily sales records from all branch stores.\n displayName: metric-descriptor\n type: custom.googleapis.com/stores/daily_sales\n metricKind: GAUGE\n valueType: DOUBLE\n unit: '{USD}'\n labels:\n - key: store_id\n valueType: STRING\n description: The ID of the store.\n launchStage: BETA\n metadata:\n samplePeriod: 60s\n ingestDelay: 30s\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Metric Descriptor Alert\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst withAlert = new gcp.monitoring.MetricDescriptor(\"with_alert\", {\n description: \"Daily sales records from all branch stores.\",\n displayName: \"metric-descriptor\",\n type: \"custom.googleapis.com/stores/daily_sales\",\n metricKind: \"GAUGE\",\n valueType: \"DOUBLE\",\n unit: \"{USD}\",\n});\nconst alertPolicy = new gcp.monitoring.AlertPolicy(\"alert_policy\", {\n displayName: \"metric-descriptor\",\n combiner: \"OR\",\n conditions: [{\n displayName: \"test condition\",\n conditionThreshold: {\n filter: pulumi.interpolate`metric.type=\"${withAlert.type}\" AND resource.type=\"gce_instance\"`,\n duration: \"60s\",\n comparison: \"COMPARISON_GT\",\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nwith_alert = gcp.monitoring.MetricDescriptor(\"with_alert\",\n description=\"Daily sales records from all branch stores.\",\n display_name=\"metric-descriptor\",\n type=\"custom.googleapis.com/stores/daily_sales\",\n metric_kind=\"GAUGE\",\n value_type=\"DOUBLE\",\n unit=\"{USD}\")\nalert_policy = gcp.monitoring.AlertPolicy(\"alert_policy\",\n display_name=\"metric-descriptor\",\n combiner=\"OR\",\n conditions=[{\n \"display_name\": \"test condition\",\n \"condition_threshold\": {\n \"filter\": with_alert.type.apply(lambda type: f\"metric.type=\\\"{type}\\\" AND resource.type=\\\"gce_instance\\\"\"),\n \"duration\": \"60s\",\n \"comparison\": \"COMPARISON_GT\",\n },\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var withAlert = new Gcp.Monitoring.MetricDescriptor(\"with_alert\", new()\n {\n Description = \"Daily sales records from all branch stores.\",\n DisplayName = \"metric-descriptor\",\n Type = \"custom.googleapis.com/stores/daily_sales\",\n MetricKind = \"GAUGE\",\n ValueType = \"DOUBLE\",\n Unit = \"{USD}\",\n });\n\n var alertPolicy = new Gcp.Monitoring.AlertPolicy(\"alert_policy\", new()\n {\n DisplayName = \"metric-descriptor\",\n Combiner = \"OR\",\n Conditions = new[]\n {\n new Gcp.Monitoring.Inputs.AlertPolicyConditionArgs\n {\n DisplayName = \"test condition\",\n ConditionThreshold = new Gcp.Monitoring.Inputs.AlertPolicyConditionConditionThresholdArgs\n {\n Filter = withAlert.Type.Apply(type =\u003e $\"metric.type=\\\"{type}\\\" AND resource.type=\\\"gce_instance\\\"\"),\n Duration = \"60s\",\n Comparison = \"COMPARISON_GT\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\twithAlert, err := monitoring.NewMetricDescriptor(ctx, \"with_alert\", \u0026monitoring.MetricDescriptorArgs{\n\t\t\tDescription: pulumi.String(\"Daily sales records from all branch stores.\"),\n\t\t\tDisplayName: pulumi.String(\"metric-descriptor\"),\n\t\t\tType: pulumi.String(\"custom.googleapis.com/stores/daily_sales\"),\n\t\t\tMetricKind: pulumi.String(\"GAUGE\"),\n\t\t\tValueType: pulumi.String(\"DOUBLE\"),\n\t\t\tUnit: pulumi.String(\"{USD}\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewAlertPolicy(ctx, \"alert_policy\", \u0026monitoring.AlertPolicyArgs{\n\t\t\tDisplayName: pulumi.String(\"metric-descriptor\"),\n\t\t\tCombiner: pulumi.String(\"OR\"),\n\t\t\tConditions: monitoring.AlertPolicyConditionArray{\n\t\t\t\t\u0026monitoring.AlertPolicyConditionArgs{\n\t\t\t\t\tDisplayName: pulumi.String(\"test condition\"),\n\t\t\t\t\tConditionThreshold: \u0026monitoring.AlertPolicyConditionConditionThresholdArgs{\n\t\t\t\t\t\tFilter: withAlert.Type.ApplyT(func(_type string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"metric.type=\\\"%v\\\" AND resource.type=\\\"gce_instance\\\"\", _type), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t\tDuration: pulumi.String(\"60s\"),\n\t\t\t\t\t\tComparison: pulumi.String(\"COMPARISON_GT\"),\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\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.gcp.monitoring.MetricDescriptor;\nimport com.pulumi.gcp.monitoring.MetricDescriptorArgs;\nimport com.pulumi.gcp.monitoring.AlertPolicy;\nimport com.pulumi.gcp.monitoring.AlertPolicyArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionArgs;\nimport com.pulumi.gcp.monitoring.inputs.AlertPolicyConditionConditionThresholdArgs;\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 withAlert = new MetricDescriptor(\"withAlert\", MetricDescriptorArgs.builder()\n .description(\"Daily sales records from all branch stores.\")\n .displayName(\"metric-descriptor\")\n .type(\"custom.googleapis.com/stores/daily_sales\")\n .metricKind(\"GAUGE\")\n .valueType(\"DOUBLE\")\n .unit(\"{USD}\")\n .build());\n\n var alertPolicy = new AlertPolicy(\"alertPolicy\", AlertPolicyArgs.builder()\n .displayName(\"metric-descriptor\")\n .combiner(\"OR\")\n .conditions(AlertPolicyConditionArgs.builder()\n .displayName(\"test condition\")\n .conditionThreshold(AlertPolicyConditionConditionThresholdArgs.builder()\n .filter(withAlert.type().applyValue(type -\u003e String.format(\"metric.type=\\\"%s\\\" AND resource.type=\\\"gce_instance\\\"\", type)))\n .duration(\"60s\")\n .comparison(\"COMPARISON_GT\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n withAlert:\n type: gcp:monitoring:MetricDescriptor\n name: with_alert\n properties:\n description: Daily sales records from all branch stores.\n displayName: metric-descriptor\n type: custom.googleapis.com/stores/daily_sales\n metricKind: GAUGE\n valueType: DOUBLE\n unit: '{USD}'\n alertPolicy:\n type: gcp:monitoring:AlertPolicy\n name: alert_policy\n properties:\n displayName: metric-descriptor\n combiner: OR\n conditions:\n - displayName: test condition\n conditionThreshold:\n filter: metric.type=\"${withAlert.type}\" AND resource.type=\"gce_instance\"\n duration: 60s\n comparison: COMPARISON_GT\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nMetricDescriptor can be imported using any of these accepted formats:\n\n* `{{project}}/{{name}}`\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, MetricDescriptor can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:monitoring/metricDescriptor:MetricDescriptor default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:monitoring/metricDescriptor:MetricDescriptor default \"{{project}} {{name}}\"\n```\n\n```sh\n$ pulumi import gcp:monitoring/metricDescriptor:MetricDescriptor default {{name}}\n```\n\n", "properties": { "description": { "type": "string", @@ -232238,7 +235148,7 @@ } }, "gcp:monitoring/slo:Slo": { - "description": "A Service-Level Objective (SLO) describes the level of desired good\nservice. It consists of a service-level indicator (SLI), a performance\ngoal, and a period over which the objective is to be evaluated against\nthat goal. The SLO can use SLIs defined in a number of different manners.\nTypical SLOs might include \"99% of requests in each rolling week have\nlatency below 200 milliseconds\" or \"99.5% of requests in each calendar\nmonth return successfully.\"\n\n\nTo get more information about Slo, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/services.serviceLevelObjectives)\n* How-to Guides\n * [Monitoring API Documentation](https://cloud.google.com/monitoring/api/v3/)\n * [Service Monitoring](https://cloud.google.com/monitoring/service-monitoring)\n\n## Example Usage\n\n### Monitoring Slo Appengine\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.monitoring.getAppEngineService({\n moduleId: \"default\",\n});\nconst appengSlo = new gcp.monitoring.Slo(\"appeng_slo\", {\n service: _default.then(_default =\u003e _default.serviceId),\n sloId: \"ae-slo\",\n displayName: \"Test SLO for App Engine\",\n goal: 0.9,\n calendarPeriod: \"DAY\",\n basicSli: {\n latency: {\n threshold: \"1s\",\n },\n },\n userLabels: {\n my_key: \"my_value\",\n my_other_key: \"my_other_value\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.monitoring.get_app_engine_service(module_id=\"default\")\nappeng_slo = gcp.monitoring.Slo(\"appeng_slo\",\n service=default.service_id,\n slo_id=\"ae-slo\",\n display_name=\"Test SLO for App Engine\",\n goal=0.9,\n calendar_period=\"DAY\",\n basic_sli={\n \"latency\": {\n \"threshold\": \"1s\",\n },\n },\n user_labels={\n \"my_key\": \"my_value\",\n \"my_other_key\": \"my_other_value\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Monitoring.GetAppEngineService.Invoke(new()\n {\n ModuleId = \"default\",\n });\n\n var appengSlo = new Gcp.Monitoring.Slo(\"appeng_slo\", new()\n {\n Service = @default.Apply(@default =\u003e @default.Apply(getAppEngineServiceResult =\u003e getAppEngineServiceResult.ServiceId)),\n SloId = \"ae-slo\",\n DisplayName = \"Test SLO for App Engine\",\n Goal = 0.9,\n CalendarPeriod = \"DAY\",\n BasicSli = new Gcp.Monitoring.Inputs.SloBasicSliArgs\n {\n Latency = new Gcp.Monitoring.Inputs.SloBasicSliLatencyArgs\n {\n Threshold = \"1s\",\n },\n },\n UserLabels = \n {\n { \"my_key\", \"my_value\" },\n { \"my_other_key\", \"my_other_value\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := monitoring.GetAppEngineService(ctx, \u0026monitoring.GetAppEngineServiceArgs{\n\t\t\tModuleId: \"default\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"appeng_slo\", \u0026monitoring.SloArgs{\n\t\t\tService: pulumi.String(_default.ServiceId),\n\t\t\tSloId: pulumi.String(\"ae-slo\"),\n\t\t\tDisplayName: pulumi.String(\"Test SLO for App Engine\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tCalendarPeriod: pulumi.String(\"DAY\"),\n\t\t\tBasicSli: \u0026monitoring.SloBasicSliArgs{\n\t\t\t\tLatency: \u0026monitoring.SloBasicSliLatencyArgs{\n\t\t\t\t\tThreshold: pulumi.String(\"1s\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_value\"),\n\t\t\t\t\"my_other_key\": pulumi.String(\"my_other_value\"),\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.gcp.monitoring.MonitoringFunctions;\nimport com.pulumi.gcp.monitoring.inputs.GetAppEngineServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloBasicSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloBasicSliLatencyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = MonitoringFunctions.getAppEngineService(GetAppEngineServiceArgs.builder()\n .moduleId(\"default\")\n .build());\n\n var appengSlo = new Slo(\"appengSlo\", SloArgs.builder()\n .service(default_.serviceId())\n .sloId(\"ae-slo\")\n .displayName(\"Test SLO for App Engine\")\n .goal(0.9)\n .calendarPeriod(\"DAY\")\n .basicSli(SloBasicSliArgs.builder()\n .latency(SloBasicSliLatencyArgs.builder()\n .threshold(\"1s\")\n .build())\n .build())\n .userLabels(Map.ofEntries(\n Map.entry(\"my_key\", \"my_value\"),\n Map.entry(\"my_other_key\", \"my_other_value\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n appengSlo:\n type: gcp:monitoring:Slo\n name: appeng_slo\n properties:\n service: ${default.serviceId}\n sloId: ae-slo\n displayName: Test SLO for App Engine\n goal: 0.9\n calendarPeriod: DAY\n basicSli:\n latency:\n threshold: 1s\n userLabels:\n my_key: my_value\n my_other_key: my_other_value\nvariables:\n default:\n fn::invoke:\n Function: gcp:monitoring:getAppEngineService\n Arguments:\n moduleId: default\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Slo Request Based\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customsrv = new gcp.monitoring.CustomService(\"customsrv\", {\n serviceId: \"custom-srv-request-slos\",\n displayName: \"My Custom Service\",\n});\nconst requestBasedSlo = new gcp.monitoring.Slo(\"request_based_slo\", {\n service: customsrv.serviceId,\n sloId: \"consumed-api-slo\",\n displayName: \"Test SLO with request based SLI (good total ratio)\",\n goal: 0.9,\n rollingPeriodDays: 30,\n requestBasedSli: {\n distributionCut: {\n distributionFilter: \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \",\n range: {\n max: 0.5,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustomsrv = gcp.monitoring.CustomService(\"customsrv\",\n service_id=\"custom-srv-request-slos\",\n display_name=\"My Custom Service\")\nrequest_based_slo = gcp.monitoring.Slo(\"request_based_slo\",\n service=customsrv.service_id,\n slo_id=\"consumed-api-slo\",\n display_name=\"Test SLO with request based SLI (good total ratio)\",\n goal=0.9,\n rolling_period_days=30,\n request_based_sli={\n \"distribution_cut\": {\n \"distribution_filter\": \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \",\n \"range\": {\n \"max\": 0.5,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customsrv = new Gcp.Monitoring.CustomService(\"customsrv\", new()\n {\n ServiceId = \"custom-srv-request-slos\",\n DisplayName = \"My Custom Service\",\n });\n\n var requestBasedSlo = new Gcp.Monitoring.Slo(\"request_based_slo\", new()\n {\n Service = customsrv.ServiceId,\n SloId = \"consumed-api-slo\",\n DisplayName = \"Test SLO with request based SLI (good total ratio)\",\n Goal = 0.9,\n RollingPeriodDays = 30,\n RequestBasedSli = new Gcp.Monitoring.Inputs.SloRequestBasedSliArgs\n {\n DistributionCut = new Gcp.Monitoring.Inputs.SloRequestBasedSliDistributionCutArgs\n {\n DistributionFilter = \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \",\n Range = new Gcp.Monitoring.Inputs.SloRequestBasedSliDistributionCutRangeArgs\n {\n Max = 0.5,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomsrv, err := monitoring.NewCustomService(ctx, \"customsrv\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv-request-slos\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"request_based_slo\", \u0026monitoring.SloArgs{\n\t\t\tService: customsrv.ServiceId,\n\t\t\tSloId: pulumi.String(\"consumed-api-slo\"),\n\t\t\tDisplayName: pulumi.String(\"Test SLO with request based SLI (good total ratio)\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tRollingPeriodDays: pulumi.Int(30),\n\t\t\tRequestBasedSli: \u0026monitoring.SloRequestBasedSliArgs{\n\t\t\t\tDistributionCut: \u0026monitoring.SloRequestBasedSliDistributionCutArgs{\n\t\t\t\t\tDistributionFilter: pulumi.String(\"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \"),\n\t\t\t\t\tRange: \u0026monitoring.SloRequestBasedSliDistributionCutRangeArgs{\n\t\t\t\t\t\tMax: pulumi.Float64(0.5),\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\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.gcp.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliDistributionCutArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliDistributionCutRangeArgs;\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 customsrv = new CustomService(\"customsrv\", CustomServiceArgs.builder()\n .serviceId(\"custom-srv-request-slos\")\n .displayName(\"My Custom Service\")\n .build());\n\n var requestBasedSlo = new Slo(\"requestBasedSlo\", SloArgs.builder()\n .service(customsrv.serviceId())\n .sloId(\"consumed-api-slo\")\n .displayName(\"Test SLO with request based SLI (good total ratio)\")\n .goal(0.9)\n .rollingPeriodDays(30)\n .requestBasedSli(SloRequestBasedSliArgs.builder()\n .distributionCut(SloRequestBasedSliDistributionCutArgs.builder()\n .distributionFilter(\"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \")\n .range(SloRequestBasedSliDistributionCutRangeArgs.builder()\n .max(0.5)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customsrv:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv-request-slos\n displayName: My Custom Service\n requestBasedSlo:\n type: gcp:monitoring:Slo\n name: request_based_slo\n properties:\n service: ${customsrv.serviceId}\n sloId: consumed-api-slo\n displayName: Test SLO with request based SLI (good total ratio)\n goal: 0.9\n rollingPeriodDays: 30\n requestBasedSli:\n distributionCut:\n distributionFilter: 'metric.type=\"serviceruntime.googleapis.com/api/request_latencies\" resource.type=\"api\" '\n range:\n max: 0.5\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Slo Windows Based Good Bad Metric Filter\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst customsrv = new gcp.monitoring.CustomService(\"customsrv\", {\n serviceId: \"custom-srv-windows-slos\",\n displayName: \"My Custom Service\",\n});\nconst windowsBased = new gcp.monitoring.Slo(\"windows_based\", {\n service: customsrv.serviceId,\n displayName: \"Test SLO with window based SLI\",\n goal: 0.95,\n calendarPeriod: \"FORTNIGHT\",\n windowsBasedSli: {\n windowPeriod: \"400s\",\n goodBadMetricFilter: std.join({\n separator: \" AND \",\n input: [\n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/check_passed\\\"\",\n \"resource.type=\\\"uptime_url\\\"\",\n ],\n }).then(invoke =\u003e invoke.result),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\ncustomsrv = gcp.monitoring.CustomService(\"customsrv\",\n service_id=\"custom-srv-windows-slos\",\n display_name=\"My Custom Service\")\nwindows_based = gcp.monitoring.Slo(\"windows_based\",\n service=customsrv.service_id,\n display_name=\"Test SLO with window based SLI\",\n goal=0.95,\n calendar_period=\"FORTNIGHT\",\n windows_based_sli={\n \"window_period\": \"400s\",\n \"good_bad_metric_filter\": std.join(separator=\" AND \",\n input=[\n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/check_passed\\\"\",\n \"resource.type=\\\"uptime_url\\\"\",\n ]).result,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customsrv = new Gcp.Monitoring.CustomService(\"customsrv\", new()\n {\n ServiceId = \"custom-srv-windows-slos\",\n DisplayName = \"My Custom Service\",\n });\n\n var windowsBased = new Gcp.Monitoring.Slo(\"windows_based\", new()\n {\n Service = customsrv.ServiceId,\n DisplayName = \"Test SLO with window based SLI\",\n Goal = 0.95,\n CalendarPeriod = \"FORTNIGHT\",\n WindowsBasedSli = new Gcp.Monitoring.Inputs.SloWindowsBasedSliArgs\n {\n WindowPeriod = \"400s\",\n GoodBadMetricFilter = Std.Join.Invoke(new()\n {\n Separator = \" AND \",\n Input = new[]\n {\n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/check_passed\\\"\",\n \"resource.type=\\\"uptime_url\\\"\",\n },\n }).Apply(invoke =\u003e invoke.Result),\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomsrv, err := monitoring.NewCustomService(ctx, \"customsrv\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv-windows-slos\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeJoin, err := std.Join(ctx, \u0026std.JoinArgs{\n\t\t\tSeparator: \" AND \",\n\t\t\tInput: []string{\n\t\t\t\t\"metric.type=\\\"monitoring.googleapis.com/uptime_check/check_passed\\\"\",\n\t\t\t\t\"resource.type=\\\"uptime_url\\\"\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"windows_based\", \u0026monitoring.SloArgs{\n\t\t\tService: customsrv.ServiceId,\n\t\t\tDisplayName: pulumi.String(\"Test SLO with window based SLI\"),\n\t\t\tGoal: pulumi.Float64(0.95),\n\t\t\tCalendarPeriod: pulumi.String(\"FORTNIGHT\"),\n\t\t\tWindowsBasedSli: \u0026monitoring.SloWindowsBasedSliArgs{\n\t\t\t\tWindowPeriod: pulumi.String(\"400s\"),\n\t\t\t\tGoodBadMetricFilter: pulumi.String(invokeJoin.Result),\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.gcp.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliArgs;\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 customsrv = new CustomService(\"customsrv\", CustomServiceArgs.builder()\n .serviceId(\"custom-srv-windows-slos\")\n .displayName(\"My Custom Service\")\n .build());\n\n var windowsBased = new Slo(\"windowsBased\", SloArgs.builder()\n .service(customsrv.serviceId())\n .displayName(\"Test SLO with window based SLI\")\n .goal(0.95)\n .calendarPeriod(\"FORTNIGHT\")\n .windowsBasedSli(SloWindowsBasedSliArgs.builder()\n .windowPeriod(\"400s\")\n .goodBadMetricFilter(StdFunctions.join(JoinArgs.builder()\n .separator(\" AND \")\n .input( \n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/check_passed\\\"\",\n \"resource.type=\\\"uptime_url\\\"\")\n .build()).result())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customsrv:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv-windows-slos\n displayName: My Custom Service\n windowsBased:\n type: gcp:monitoring:Slo\n name: windows_based\n properties:\n service: ${customsrv.serviceId}\n displayName: Test SLO with window based SLI\n goal: 0.95\n calendarPeriod: FORTNIGHT\n windowsBasedSli:\n windowPeriod: 400s\n goodBadMetricFilter:\n fn::invoke:\n Function: std:join\n Arguments:\n separator: ' AND '\n input:\n - metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"\n - resource.type=\"uptime_url\"\n Return: result\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Slo Windows Based Metric Mean\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst customsrv = new gcp.monitoring.CustomService(\"customsrv\", {\n serviceId: \"custom-srv-windows-slos\",\n displayName: \"My Custom Service\",\n});\nconst windowsBased = new gcp.monitoring.Slo(\"windows_based\", {\n service: customsrv.serviceId,\n displayName: \"Test SLO with window based SLI\",\n goal: 0.9,\n rollingPeriodDays: 20,\n windowsBasedSli: {\n windowPeriod: \"600s\",\n metricMeanInRange: {\n timeSeries: std.join({\n separator: \" AND \",\n input: [\n \"metric.type=\\\"agent.googleapis.com/cassandra/client_request/latency/95p\\\"\",\n \"resource.type=\\\"gce_instance\\\"\",\n ],\n }).then(invoke =\u003e invoke.result),\n range: {\n max: 5,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\ncustomsrv = gcp.monitoring.CustomService(\"customsrv\",\n service_id=\"custom-srv-windows-slos\",\n display_name=\"My Custom Service\")\nwindows_based = gcp.monitoring.Slo(\"windows_based\",\n service=customsrv.service_id,\n display_name=\"Test SLO with window based SLI\",\n goal=0.9,\n rolling_period_days=20,\n windows_based_sli={\n \"window_period\": \"600s\",\n \"metric_mean_in_range\": {\n \"time_series\": std.join(separator=\" AND \",\n input=[\n \"metric.type=\\\"agent.googleapis.com/cassandra/client_request/latency/95p\\\"\",\n \"resource.type=\\\"gce_instance\\\"\",\n ]).result,\n \"range\": {\n \"max\": 5,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customsrv = new Gcp.Monitoring.CustomService(\"customsrv\", new()\n {\n ServiceId = \"custom-srv-windows-slos\",\n DisplayName = \"My Custom Service\",\n });\n\n var windowsBased = new Gcp.Monitoring.Slo(\"windows_based\", new()\n {\n Service = customsrv.ServiceId,\n DisplayName = \"Test SLO with window based SLI\",\n Goal = 0.9,\n RollingPeriodDays = 20,\n WindowsBasedSli = new Gcp.Monitoring.Inputs.SloWindowsBasedSliArgs\n {\n WindowPeriod = \"600s\",\n MetricMeanInRange = new Gcp.Monitoring.Inputs.SloWindowsBasedSliMetricMeanInRangeArgs\n {\n TimeSeries = Std.Join.Invoke(new()\n {\n Separator = \" AND \",\n Input = new[]\n {\n \"metric.type=\\\"agent.googleapis.com/cassandra/client_request/latency/95p\\\"\",\n \"resource.type=\\\"gce_instance\\\"\",\n },\n }).Apply(invoke =\u003e invoke.Result),\n Range = new Gcp.Monitoring.Inputs.SloWindowsBasedSliMetricMeanInRangeRangeArgs\n {\n Max = 5,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomsrv, err := monitoring.NewCustomService(ctx, \"customsrv\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv-windows-slos\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeJoin, err := std.Join(ctx, \u0026std.JoinArgs{\n\t\t\tSeparator: \" AND \",\n\t\t\tInput: []string{\n\t\t\t\t\"metric.type=\\\"agent.googleapis.com/cassandra/client_request/latency/95p\\\"\",\n\t\t\t\t\"resource.type=\\\"gce_instance\\\"\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"windows_based\", \u0026monitoring.SloArgs{\n\t\t\tService: customsrv.ServiceId,\n\t\t\tDisplayName: pulumi.String(\"Test SLO with window based SLI\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tRollingPeriodDays: pulumi.Int(20),\n\t\t\tWindowsBasedSli: \u0026monitoring.SloWindowsBasedSliArgs{\n\t\t\t\tWindowPeriod: pulumi.String(\"600s\"),\n\t\t\t\tMetricMeanInRange: \u0026monitoring.SloWindowsBasedSliMetricMeanInRangeArgs{\n\t\t\t\t\tTimeSeries: pulumi.String(invokeJoin.Result),\n\t\t\t\t\tRange: \u0026monitoring.SloWindowsBasedSliMetricMeanInRangeRangeArgs{\n\t\t\t\t\t\tMax: pulumi.Float64(5),\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\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.gcp.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliMetricMeanInRangeArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliMetricMeanInRangeRangeArgs;\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 customsrv = new CustomService(\"customsrv\", CustomServiceArgs.builder()\n .serviceId(\"custom-srv-windows-slos\")\n .displayName(\"My Custom Service\")\n .build());\n\n var windowsBased = new Slo(\"windowsBased\", SloArgs.builder()\n .service(customsrv.serviceId())\n .displayName(\"Test SLO with window based SLI\")\n .goal(0.9)\n .rollingPeriodDays(20)\n .windowsBasedSli(SloWindowsBasedSliArgs.builder()\n .windowPeriod(\"600s\")\n .metricMeanInRange(SloWindowsBasedSliMetricMeanInRangeArgs.builder()\n .timeSeries(StdFunctions.join(JoinArgs.builder()\n .separator(\" AND \")\n .input( \n \"metric.type=\\\"agent.googleapis.com/cassandra/client_request/latency/95p\\\"\",\n \"resource.type=\\\"gce_instance\\\"\")\n .build()).result())\n .range(SloWindowsBasedSliMetricMeanInRangeRangeArgs.builder()\n .max(5)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customsrv:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv-windows-slos\n displayName: My Custom Service\n windowsBased:\n type: gcp:monitoring:Slo\n name: windows_based\n properties:\n service: ${customsrv.serviceId}\n displayName: Test SLO with window based SLI\n goal: 0.9\n rollingPeriodDays: 20\n windowsBasedSli:\n windowPeriod: 600s\n metricMeanInRange:\n timeSeries:\n fn::invoke:\n Function: std:join\n Arguments:\n separator: ' AND '\n input:\n - metric.type=\"agent.googleapis.com/cassandra/client_request/latency/95p\"\n - resource.type=\"gce_instance\"\n Return: result\n range:\n max: 5\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Slo Windows Based Metric Sum\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst customsrv = new gcp.monitoring.CustomService(\"customsrv\", {\n serviceId: \"custom-srv-windows-slos\",\n displayName: \"My Custom Service\",\n});\nconst windowsBased = new gcp.monitoring.Slo(\"windows_based\", {\n service: customsrv.serviceId,\n displayName: \"Test SLO with window based SLI\",\n goal: 0.9,\n rollingPeriodDays: 20,\n windowsBasedSli: {\n windowPeriod: \"400s\",\n metricSumInRange: {\n timeSeries: std.join({\n separator: \" AND \",\n input: [\n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/request_latency\\\"\",\n \"resource.type=\\\"uptime_url\\\"\",\n ],\n }).then(invoke =\u003e invoke.result),\n range: {\n max: 5000,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\ncustomsrv = gcp.monitoring.CustomService(\"customsrv\",\n service_id=\"custom-srv-windows-slos\",\n display_name=\"My Custom Service\")\nwindows_based = gcp.monitoring.Slo(\"windows_based\",\n service=customsrv.service_id,\n display_name=\"Test SLO with window based SLI\",\n goal=0.9,\n rolling_period_days=20,\n windows_based_sli={\n \"window_period\": \"400s\",\n \"metric_sum_in_range\": {\n \"time_series\": std.join(separator=\" AND \",\n input=[\n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/request_latency\\\"\",\n \"resource.type=\\\"uptime_url\\\"\",\n ]).result,\n \"range\": {\n \"max\": 5000,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customsrv = new Gcp.Monitoring.CustomService(\"customsrv\", new()\n {\n ServiceId = \"custom-srv-windows-slos\",\n DisplayName = \"My Custom Service\",\n });\n\n var windowsBased = new Gcp.Monitoring.Slo(\"windows_based\", new()\n {\n Service = customsrv.ServiceId,\n DisplayName = \"Test SLO with window based SLI\",\n Goal = 0.9,\n RollingPeriodDays = 20,\n WindowsBasedSli = new Gcp.Monitoring.Inputs.SloWindowsBasedSliArgs\n {\n WindowPeriod = \"400s\",\n MetricSumInRange = new Gcp.Monitoring.Inputs.SloWindowsBasedSliMetricSumInRangeArgs\n {\n TimeSeries = Std.Join.Invoke(new()\n {\n Separator = \" AND \",\n Input = new[]\n {\n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/request_latency\\\"\",\n \"resource.type=\\\"uptime_url\\\"\",\n },\n }).Apply(invoke =\u003e invoke.Result),\n Range = new Gcp.Monitoring.Inputs.SloWindowsBasedSliMetricSumInRangeRangeArgs\n {\n Max = 5000,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomsrv, err := monitoring.NewCustomService(ctx, \"customsrv\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv-windows-slos\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeJoin, err := std.Join(ctx, \u0026std.JoinArgs{\n\t\t\tSeparator: \" AND \",\n\t\t\tInput: []string{\n\t\t\t\t\"metric.type=\\\"monitoring.googleapis.com/uptime_check/request_latency\\\"\",\n\t\t\t\t\"resource.type=\\\"uptime_url\\\"\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"windows_based\", \u0026monitoring.SloArgs{\n\t\t\tService: customsrv.ServiceId,\n\t\t\tDisplayName: pulumi.String(\"Test SLO with window based SLI\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tRollingPeriodDays: pulumi.Int(20),\n\t\t\tWindowsBasedSli: \u0026monitoring.SloWindowsBasedSliArgs{\n\t\t\t\tWindowPeriod: pulumi.String(\"400s\"),\n\t\t\t\tMetricSumInRange: \u0026monitoring.SloWindowsBasedSliMetricSumInRangeArgs{\n\t\t\t\t\tTimeSeries: pulumi.String(invokeJoin.Result),\n\t\t\t\t\tRange: \u0026monitoring.SloWindowsBasedSliMetricSumInRangeRangeArgs{\n\t\t\t\t\t\tMax: pulumi.Float64(5000),\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\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.gcp.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliMetricSumInRangeArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliMetricSumInRangeRangeArgs;\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 customsrv = new CustomService(\"customsrv\", CustomServiceArgs.builder()\n .serviceId(\"custom-srv-windows-slos\")\n .displayName(\"My Custom Service\")\n .build());\n\n var windowsBased = new Slo(\"windowsBased\", SloArgs.builder()\n .service(customsrv.serviceId())\n .displayName(\"Test SLO with window based SLI\")\n .goal(0.9)\n .rollingPeriodDays(20)\n .windowsBasedSli(SloWindowsBasedSliArgs.builder()\n .windowPeriod(\"400s\")\n .metricSumInRange(SloWindowsBasedSliMetricSumInRangeArgs.builder()\n .timeSeries(StdFunctions.join(JoinArgs.builder()\n .separator(\" AND \")\n .input( \n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/request_latency\\\"\",\n \"resource.type=\\\"uptime_url\\\"\")\n .build()).result())\n .range(SloWindowsBasedSliMetricSumInRangeRangeArgs.builder()\n .max(5000)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customsrv:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv-windows-slos\n displayName: My Custom Service\n windowsBased:\n type: gcp:monitoring:Slo\n name: windows_based\n properties:\n service: ${customsrv.serviceId}\n displayName: Test SLO with window based SLI\n goal: 0.9\n rollingPeriodDays: 20\n windowsBasedSli:\n windowPeriod: 400s\n metricSumInRange:\n timeSeries:\n fn::invoke:\n Function: std:join\n Arguments:\n separator: ' AND '\n input:\n - metric.type=\"monitoring.googleapis.com/uptime_check/request_latency\"\n - resource.type=\"uptime_url\"\n Return: result\n range:\n max: 5000\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Slo Windows Based Ratio Threshold\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst customsrv = new gcp.monitoring.CustomService(\"customsrv\", {\n serviceId: \"custom-srv-windows-slos\",\n displayName: \"My Custom Service\",\n});\nconst windowsBased = new gcp.monitoring.Slo(\"windows_based\", {\n service: customsrv.serviceId,\n displayName: \"Test SLO with window based SLI\",\n goal: 0.9,\n rollingPeriodDays: 20,\n windowsBasedSli: {\n windowPeriod: \"100s\",\n goodTotalRatioThreshold: {\n threshold: 0.1,\n performance: {\n distributionCut: {\n distributionFilter: std.join({\n separator: \" AND \",\n input: [\n \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\"\",\n \"resource.type=\\\"consumed_api\\\"\",\n ],\n }).then(invoke =\u003e invoke.result),\n range: {\n min: 1,\n max: 9,\n },\n },\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\ncustomsrv = gcp.monitoring.CustomService(\"customsrv\",\n service_id=\"custom-srv-windows-slos\",\n display_name=\"My Custom Service\")\nwindows_based = gcp.monitoring.Slo(\"windows_based\",\n service=customsrv.service_id,\n display_name=\"Test SLO with window based SLI\",\n goal=0.9,\n rolling_period_days=20,\n windows_based_sli={\n \"window_period\": \"100s\",\n \"good_total_ratio_threshold\": {\n \"threshold\": 0.1,\n \"performance\": {\n \"distribution_cut\": {\n \"distribution_filter\": std.join(separator=\" AND \",\n input=[\n \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\"\",\n \"resource.type=\\\"consumed_api\\\"\",\n ]).result,\n \"range\": {\n \"min\": 1,\n \"max\": 9,\n },\n },\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customsrv = new Gcp.Monitoring.CustomService(\"customsrv\", new()\n {\n ServiceId = \"custom-srv-windows-slos\",\n DisplayName = \"My Custom Service\",\n });\n\n var windowsBased = new Gcp.Monitoring.Slo(\"windows_based\", new()\n {\n Service = customsrv.ServiceId,\n DisplayName = \"Test SLO with window based SLI\",\n Goal = 0.9,\n RollingPeriodDays = 20,\n WindowsBasedSli = new Gcp.Monitoring.Inputs.SloWindowsBasedSliArgs\n {\n WindowPeriod = \"100s\",\n GoodTotalRatioThreshold = new Gcp.Monitoring.Inputs.SloWindowsBasedSliGoodTotalRatioThresholdArgs\n {\n Threshold = 0.1,\n Performance = new Gcp.Monitoring.Inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceArgs\n {\n DistributionCut = new Gcp.Monitoring.Inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutArgs\n {\n DistributionFilter = Std.Join.Invoke(new()\n {\n Separator = \" AND \",\n Input = new[]\n {\n \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\"\",\n \"resource.type=\\\"consumed_api\\\"\",\n },\n }).Apply(invoke =\u003e invoke.Result),\n Range = new Gcp.Monitoring.Inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutRangeArgs\n {\n Min = 1,\n Max = 9,\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomsrv, err := monitoring.NewCustomService(ctx, \"customsrv\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv-windows-slos\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeJoin, err := std.Join(ctx, \u0026std.JoinArgs{\n\t\t\tSeparator: \" AND \",\n\t\t\tInput: []string{\n\t\t\t\t\"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\"\",\n\t\t\t\t\"resource.type=\\\"consumed_api\\\"\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"windows_based\", \u0026monitoring.SloArgs{\n\t\t\tService: customsrv.ServiceId,\n\t\t\tDisplayName: pulumi.String(\"Test SLO with window based SLI\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tRollingPeriodDays: pulumi.Int(20),\n\t\t\tWindowsBasedSli: \u0026monitoring.SloWindowsBasedSliArgs{\n\t\t\t\tWindowPeriod: pulumi.String(\"100s\"),\n\t\t\t\tGoodTotalRatioThreshold: \u0026monitoring.SloWindowsBasedSliGoodTotalRatioThresholdArgs{\n\t\t\t\t\tThreshold: pulumi.Float64(0.1),\n\t\t\t\t\tPerformance: \u0026monitoring.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceArgs{\n\t\t\t\t\t\tDistributionCut: \u0026monitoring.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutArgs{\n\t\t\t\t\t\t\tDistributionFilter: pulumi.String(invokeJoin.Result),\n\t\t\t\t\t\t\tRange: \u0026monitoring.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutRangeArgs{\n\t\t\t\t\t\t\t\tMin: pulumi.Float64(1),\n\t\t\t\t\t\t\t\tMax: pulumi.Float64(9),\n\t\t\t\t\t\t\t},\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\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.gcp.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliGoodTotalRatioThresholdArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutRangeArgs;\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 customsrv = new CustomService(\"customsrv\", CustomServiceArgs.builder()\n .serviceId(\"custom-srv-windows-slos\")\n .displayName(\"My Custom Service\")\n .build());\n\n var windowsBased = new Slo(\"windowsBased\", SloArgs.builder()\n .service(customsrv.serviceId())\n .displayName(\"Test SLO with window based SLI\")\n .goal(0.9)\n .rollingPeriodDays(20)\n .windowsBasedSli(SloWindowsBasedSliArgs.builder()\n .windowPeriod(\"100s\")\n .goodTotalRatioThreshold(SloWindowsBasedSliGoodTotalRatioThresholdArgs.builder()\n .threshold(0.1)\n .performance(SloWindowsBasedSliGoodTotalRatioThresholdPerformanceArgs.builder()\n .distributionCut(SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutArgs.builder()\n .distributionFilter(StdFunctions.join(JoinArgs.builder()\n .separator(\" AND \")\n .input( \n \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\"\",\n \"resource.type=\\\"consumed_api\\\"\")\n .build()).result())\n .range(SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutRangeArgs.builder()\n .min(1)\n .max(9)\n .build())\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customsrv:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv-windows-slos\n displayName: My Custom Service\n windowsBased:\n type: gcp:monitoring:Slo\n name: windows_based\n properties:\n service: ${customsrv.serviceId}\n displayName: Test SLO with window based SLI\n goal: 0.9\n rollingPeriodDays: 20\n windowsBasedSli:\n windowPeriod: 100s\n goodTotalRatioThreshold:\n threshold: 0.1\n performance:\n distributionCut:\n distributionFilter:\n fn::invoke:\n Function: std:join\n Arguments:\n separator: ' AND '\n input:\n - metric.type=\"serviceruntime.googleapis.com/api/request_latencies\"\n - resource.type=\"consumed_api\"\n Return: result\n range:\n min: 1\n max: 9\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nSlo can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Slo can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:monitoring/slo:Slo default {{name}}\n```\n\n", + "description": "A Service-Level Objective (SLO) describes the level of desired good\nservice. It consists of a service-level indicator (SLI), a performance\ngoal, and a period over which the objective is to be evaluated against\nthat goal. The SLO can use SLIs defined in a number of different manners.\nTypical SLOs might include \"99% of requests in each rolling week have\nlatency below 200 milliseconds\" or \"99.5% of requests in each calendar\nmonth return successfully.\"\n\n\nTo get more information about Slo, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/services.serviceLevelObjectives)\n* How-to Guides\n * [Monitoring API Documentation](https://cloud.google.com/monitoring/api/v3/)\n * [Service Monitoring](https://cloud.google.com/monitoring/service-monitoring)\n\n## Example Usage\n\n### Monitoring Slo Appengine\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.monitoring.getAppEngineService({\n moduleId: \"default\",\n});\nconst appengSlo = new gcp.monitoring.Slo(\"appeng_slo\", {\n service: _default.then(_default =\u003e _default.serviceId),\n sloId: \"ae-slo\",\n displayName: \"Test SLO for App Engine\",\n goal: 0.9,\n calendarPeriod: \"DAY\",\n basicSli: {\n latency: {\n threshold: \"1s\",\n },\n },\n userLabels: {\n my_key: \"my_value\",\n my_other_key: \"my_other_value\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.monitoring.get_app_engine_service(module_id=\"default\")\nappeng_slo = gcp.monitoring.Slo(\"appeng_slo\",\n service=default.service_id,\n slo_id=\"ae-slo\",\n display_name=\"Test SLO for App Engine\",\n goal=0.9,\n calendar_period=\"DAY\",\n basic_sli={\n \"latency\": {\n \"threshold\": \"1s\",\n },\n },\n user_labels={\n \"my_key\": \"my_value\",\n \"my_other_key\": \"my_other_value\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Monitoring.GetAppEngineService.Invoke(new()\n {\n ModuleId = \"default\",\n });\n\n var appengSlo = new Gcp.Monitoring.Slo(\"appeng_slo\", new()\n {\n Service = @default.Apply(@default =\u003e @default.Apply(getAppEngineServiceResult =\u003e getAppEngineServiceResult.ServiceId)),\n SloId = \"ae-slo\",\n DisplayName = \"Test SLO for App Engine\",\n Goal = 0.9,\n CalendarPeriod = \"DAY\",\n BasicSli = new Gcp.Monitoring.Inputs.SloBasicSliArgs\n {\n Latency = new Gcp.Monitoring.Inputs.SloBasicSliLatencyArgs\n {\n Threshold = \"1s\",\n },\n },\n UserLabels = \n {\n { \"my_key\", \"my_value\" },\n { \"my_other_key\", \"my_other_value\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := monitoring.GetAppEngineService(ctx, \u0026monitoring.GetAppEngineServiceArgs{\n\t\t\tModuleId: \"default\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"appeng_slo\", \u0026monitoring.SloArgs{\n\t\t\tService: pulumi.String(_default.ServiceId),\n\t\t\tSloId: pulumi.String(\"ae-slo\"),\n\t\t\tDisplayName: pulumi.String(\"Test SLO for App Engine\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tCalendarPeriod: pulumi.String(\"DAY\"),\n\t\t\tBasicSli: \u0026monitoring.SloBasicSliArgs{\n\t\t\t\tLatency: \u0026monitoring.SloBasicSliLatencyArgs{\n\t\t\t\t\tThreshold: pulumi.String(\"1s\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_value\"),\n\t\t\t\t\"my_other_key\": pulumi.String(\"my_other_value\"),\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.gcp.monitoring.MonitoringFunctions;\nimport com.pulumi.gcp.monitoring.inputs.GetAppEngineServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloBasicSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloBasicSliLatencyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = MonitoringFunctions.getAppEngineService(GetAppEngineServiceArgs.builder()\n .moduleId(\"default\")\n .build());\n\n var appengSlo = new Slo(\"appengSlo\", SloArgs.builder()\n .service(default_.serviceId())\n .sloId(\"ae-slo\")\n .displayName(\"Test SLO for App Engine\")\n .goal(0.9)\n .calendarPeriod(\"DAY\")\n .basicSli(SloBasicSliArgs.builder()\n .latency(SloBasicSliLatencyArgs.builder()\n .threshold(\"1s\")\n .build())\n .build())\n .userLabels(Map.ofEntries(\n Map.entry(\"my_key\", \"my_value\"),\n Map.entry(\"my_other_key\", \"my_other_value\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n appengSlo:\n type: gcp:monitoring:Slo\n name: appeng_slo\n properties:\n service: ${default.serviceId}\n sloId: ae-slo\n displayName: Test SLO for App Engine\n goal: 0.9\n calendarPeriod: DAY\n basicSli:\n latency:\n threshold: 1s\n userLabels:\n my_key: my_value\n my_other_key: my_other_value\nvariables:\n default:\n fn::invoke:\n Function: gcp:monitoring:getAppEngineService\n Arguments:\n moduleId: default\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Slo Request Based\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customsrv = new gcp.monitoring.CustomService(\"customsrv\", {\n serviceId: \"custom-srv-request-slos\",\n displayName: \"My Custom Service\",\n});\nconst requestBasedSlo = new gcp.monitoring.Slo(\"request_based_slo\", {\n service: customsrv.serviceId,\n sloId: \"consumed-api-slo\",\n displayName: \"Test SLO with request based SLI (good total ratio)\",\n goal: 0.9,\n rollingPeriodDays: 30,\n requestBasedSli: {\n distributionCut: {\n distributionFilter: \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \",\n range: {\n max: 0.5,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustomsrv = gcp.monitoring.CustomService(\"customsrv\",\n service_id=\"custom-srv-request-slos\",\n display_name=\"My Custom Service\")\nrequest_based_slo = gcp.monitoring.Slo(\"request_based_slo\",\n service=customsrv.service_id,\n slo_id=\"consumed-api-slo\",\n display_name=\"Test SLO with request based SLI (good total ratio)\",\n goal=0.9,\n rolling_period_days=30,\n request_based_sli={\n \"distribution_cut\": {\n \"distribution_filter\": \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \",\n \"range\": {\n \"max\": 0.5,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customsrv = new Gcp.Monitoring.CustomService(\"customsrv\", new()\n {\n ServiceId = \"custom-srv-request-slos\",\n DisplayName = \"My Custom Service\",\n });\n\n var requestBasedSlo = new Gcp.Monitoring.Slo(\"request_based_slo\", new()\n {\n Service = customsrv.ServiceId,\n SloId = \"consumed-api-slo\",\n DisplayName = \"Test SLO with request based SLI (good total ratio)\",\n Goal = 0.9,\n RollingPeriodDays = 30,\n RequestBasedSli = new Gcp.Monitoring.Inputs.SloRequestBasedSliArgs\n {\n DistributionCut = new Gcp.Monitoring.Inputs.SloRequestBasedSliDistributionCutArgs\n {\n DistributionFilter = \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \",\n Range = new Gcp.Monitoring.Inputs.SloRequestBasedSliDistributionCutRangeArgs\n {\n Max = 0.5,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomsrv, err := monitoring.NewCustomService(ctx, \"customsrv\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv-request-slos\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"request_based_slo\", \u0026monitoring.SloArgs{\n\t\t\tService: customsrv.ServiceId,\n\t\t\tSloId: pulumi.String(\"consumed-api-slo\"),\n\t\t\tDisplayName: pulumi.String(\"Test SLO with request based SLI (good total ratio)\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tRollingPeriodDays: pulumi.Int(30),\n\t\t\tRequestBasedSli: \u0026monitoring.SloRequestBasedSliArgs{\n\t\t\t\tDistributionCut: \u0026monitoring.SloRequestBasedSliDistributionCutArgs{\n\t\t\t\t\tDistributionFilter: pulumi.String(\"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \"),\n\t\t\t\t\tRange: \u0026monitoring.SloRequestBasedSliDistributionCutRangeArgs{\n\t\t\t\t\t\tMax: pulumi.Float64(0.5),\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\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.gcp.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliDistributionCutArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliDistributionCutRangeArgs;\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 customsrv = new CustomService(\"customsrv\", CustomServiceArgs.builder()\n .serviceId(\"custom-srv-request-slos\")\n .displayName(\"My Custom Service\")\n .build());\n\n var requestBasedSlo = new Slo(\"requestBasedSlo\", SloArgs.builder()\n .service(customsrv.serviceId())\n .sloId(\"consumed-api-slo\")\n .displayName(\"Test SLO with request based SLI (good total ratio)\")\n .goal(0.9)\n .rollingPeriodDays(30)\n .requestBasedSli(SloRequestBasedSliArgs.builder()\n .distributionCut(SloRequestBasedSliDistributionCutArgs.builder()\n .distributionFilter(\"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \")\n .range(SloRequestBasedSliDistributionCutRangeArgs.builder()\n .max(0.5)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customsrv:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv-request-slos\n displayName: My Custom Service\n requestBasedSlo:\n type: gcp:monitoring:Slo\n name: request_based_slo\n properties:\n service: ${customsrv.serviceId}\n sloId: consumed-api-slo\n displayName: Test SLO with request based SLI (good total ratio)\n goal: 0.9\n rollingPeriodDays: 30\n requestBasedSli:\n distributionCut:\n distributionFilter: 'metric.type=\"serviceruntime.googleapis.com/api/request_latencies\" resource.type=\"api\" '\n range:\n max: 0.5\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Slo Windows Based Good Bad Metric Filter\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst customsrv = new gcp.monitoring.CustomService(\"customsrv\", {\n serviceId: \"custom-srv-windows-slos\",\n displayName: \"My Custom Service\",\n});\nconst windowsBased = new gcp.monitoring.Slo(\"windows_based\", {\n service: customsrv.serviceId,\n displayName: \"Test SLO with window based SLI\",\n goal: 0.95,\n calendarPeriod: \"FORTNIGHT\",\n windowsBasedSli: {\n windowPeriod: \"400s\",\n goodBadMetricFilter: std.join({\n separator: \" AND \",\n input: [\n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/check_passed\\\"\",\n \"resource.type=\\\"uptime_url\\\"\",\n ],\n }).then(invoke =\u003e invoke.result),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\ncustomsrv = gcp.monitoring.CustomService(\"customsrv\",\n service_id=\"custom-srv-windows-slos\",\n display_name=\"My Custom Service\")\nwindows_based = gcp.monitoring.Slo(\"windows_based\",\n service=customsrv.service_id,\n display_name=\"Test SLO with window based SLI\",\n goal=0.95,\n calendar_period=\"FORTNIGHT\",\n windows_based_sli={\n \"window_period\": \"400s\",\n \"good_bad_metric_filter\": std.join(separator=\" AND \",\n input=[\n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/check_passed\\\"\",\n \"resource.type=\\\"uptime_url\\\"\",\n ]).result,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customsrv = new Gcp.Monitoring.CustomService(\"customsrv\", new()\n {\n ServiceId = \"custom-srv-windows-slos\",\n DisplayName = \"My Custom Service\",\n });\n\n var windowsBased = new Gcp.Monitoring.Slo(\"windows_based\", new()\n {\n Service = customsrv.ServiceId,\n DisplayName = \"Test SLO with window based SLI\",\n Goal = 0.95,\n CalendarPeriod = \"FORTNIGHT\",\n WindowsBasedSli = new Gcp.Monitoring.Inputs.SloWindowsBasedSliArgs\n {\n WindowPeriod = \"400s\",\n GoodBadMetricFilter = Std.Join.Invoke(new()\n {\n Separator = \" AND \",\n Input = new[]\n {\n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/check_passed\\\"\",\n \"resource.type=\\\"uptime_url\\\"\",\n },\n }).Apply(invoke =\u003e invoke.Result),\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomsrv, err := monitoring.NewCustomService(ctx, \"customsrv\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv-windows-slos\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeJoin, err := std.Join(ctx, \u0026std.JoinArgs{\n\t\t\tSeparator: \" AND \",\n\t\t\tInput: []string{\n\t\t\t\t\"metric.type=\\\"monitoring.googleapis.com/uptime_check/check_passed\\\"\",\n\t\t\t\t\"resource.type=\\\"uptime_url\\\"\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"windows_based\", \u0026monitoring.SloArgs{\n\t\t\tService: customsrv.ServiceId,\n\t\t\tDisplayName: pulumi.String(\"Test SLO with window based SLI\"),\n\t\t\tGoal: pulumi.Float64(0.95),\n\t\t\tCalendarPeriod: pulumi.String(\"FORTNIGHT\"),\n\t\t\tWindowsBasedSli: \u0026monitoring.SloWindowsBasedSliArgs{\n\t\t\t\tWindowPeriod: pulumi.String(\"400s\"),\n\t\t\t\tGoodBadMetricFilter: pulumi.String(invokeJoin.Result),\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.gcp.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliArgs;\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 customsrv = new CustomService(\"customsrv\", CustomServiceArgs.builder()\n .serviceId(\"custom-srv-windows-slos\")\n .displayName(\"My Custom Service\")\n .build());\n\n var windowsBased = new Slo(\"windowsBased\", SloArgs.builder()\n .service(customsrv.serviceId())\n .displayName(\"Test SLO with window based SLI\")\n .goal(0.95)\n .calendarPeriod(\"FORTNIGHT\")\n .windowsBasedSli(SloWindowsBasedSliArgs.builder()\n .windowPeriod(\"400s\")\n .goodBadMetricFilter(StdFunctions.join(JoinArgs.builder()\n .separator(\" AND \")\n .input( \n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/check_passed\\\"\",\n \"resource.type=\\\"uptime_url\\\"\")\n .build()).result())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customsrv:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv-windows-slos\n displayName: My Custom Service\n windowsBased:\n type: gcp:monitoring:Slo\n name: windows_based\n properties:\n service: ${customsrv.serviceId}\n displayName: Test SLO with window based SLI\n goal: 0.95\n calendarPeriod: FORTNIGHT\n windowsBasedSli:\n windowPeriod: 400s\n goodBadMetricFilter:\n fn::invoke:\n Function: std:join\n Arguments:\n separator: ' AND '\n input:\n - metric.type=\"monitoring.googleapis.com/uptime_check/check_passed\"\n - resource.type=\"uptime_url\"\n Return: result\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Slo Windows Based Metric Mean\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst customsrv = new gcp.monitoring.CustomService(\"customsrv\", {\n serviceId: \"custom-srv-windows-slos\",\n displayName: \"My Custom Service\",\n});\nconst windowsBased = new gcp.monitoring.Slo(\"windows_based\", {\n service: customsrv.serviceId,\n displayName: \"Test SLO with window based SLI\",\n goal: 0.9,\n rollingPeriodDays: 20,\n windowsBasedSli: {\n windowPeriod: \"600s\",\n metricMeanInRange: {\n timeSeries: std.join({\n separator: \" AND \",\n input: [\n \"metric.type=\\\"agent.googleapis.com/cassandra/client_request/latency/95p\\\"\",\n \"resource.type=\\\"gce_instance\\\"\",\n ],\n }).then(invoke =\u003e invoke.result),\n range: {\n max: 5,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\ncustomsrv = gcp.monitoring.CustomService(\"customsrv\",\n service_id=\"custom-srv-windows-slos\",\n display_name=\"My Custom Service\")\nwindows_based = gcp.monitoring.Slo(\"windows_based\",\n service=customsrv.service_id,\n display_name=\"Test SLO with window based SLI\",\n goal=0.9,\n rolling_period_days=20,\n windows_based_sli={\n \"window_period\": \"600s\",\n \"metric_mean_in_range\": {\n \"time_series\": std.join(separator=\" AND \",\n input=[\n \"metric.type=\\\"agent.googleapis.com/cassandra/client_request/latency/95p\\\"\",\n \"resource.type=\\\"gce_instance\\\"\",\n ]).result,\n \"range\": {\n \"max\": 5,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customsrv = new Gcp.Monitoring.CustomService(\"customsrv\", new()\n {\n ServiceId = \"custom-srv-windows-slos\",\n DisplayName = \"My Custom Service\",\n });\n\n var windowsBased = new Gcp.Monitoring.Slo(\"windows_based\", new()\n {\n Service = customsrv.ServiceId,\n DisplayName = \"Test SLO with window based SLI\",\n Goal = 0.9,\n RollingPeriodDays = 20,\n WindowsBasedSli = new Gcp.Monitoring.Inputs.SloWindowsBasedSliArgs\n {\n WindowPeriod = \"600s\",\n MetricMeanInRange = new Gcp.Monitoring.Inputs.SloWindowsBasedSliMetricMeanInRangeArgs\n {\n TimeSeries = Std.Join.Invoke(new()\n {\n Separator = \" AND \",\n Input = new[]\n {\n \"metric.type=\\\"agent.googleapis.com/cassandra/client_request/latency/95p\\\"\",\n \"resource.type=\\\"gce_instance\\\"\",\n },\n }).Apply(invoke =\u003e invoke.Result),\n Range = new Gcp.Monitoring.Inputs.SloWindowsBasedSliMetricMeanInRangeRangeArgs\n {\n Max = 5,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomsrv, err := monitoring.NewCustomService(ctx, \"customsrv\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv-windows-slos\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeJoin, err := std.Join(ctx, \u0026std.JoinArgs{\n\t\t\tSeparator: \" AND \",\n\t\t\tInput: []string{\n\t\t\t\t\"metric.type=\\\"agent.googleapis.com/cassandra/client_request/latency/95p\\\"\",\n\t\t\t\t\"resource.type=\\\"gce_instance\\\"\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"windows_based\", \u0026monitoring.SloArgs{\n\t\t\tService: customsrv.ServiceId,\n\t\t\tDisplayName: pulumi.String(\"Test SLO with window based SLI\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tRollingPeriodDays: pulumi.Int(20),\n\t\t\tWindowsBasedSli: \u0026monitoring.SloWindowsBasedSliArgs{\n\t\t\t\tWindowPeriod: pulumi.String(\"600s\"),\n\t\t\t\tMetricMeanInRange: \u0026monitoring.SloWindowsBasedSliMetricMeanInRangeArgs{\n\t\t\t\t\tTimeSeries: pulumi.String(invokeJoin.Result),\n\t\t\t\t\tRange: \u0026monitoring.SloWindowsBasedSliMetricMeanInRangeRangeArgs{\n\t\t\t\t\t\tMax: pulumi.Float64(5),\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\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.gcp.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliMetricMeanInRangeArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliMetricMeanInRangeRangeArgs;\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 customsrv = new CustomService(\"customsrv\", CustomServiceArgs.builder()\n .serviceId(\"custom-srv-windows-slos\")\n .displayName(\"My Custom Service\")\n .build());\n\n var windowsBased = new Slo(\"windowsBased\", SloArgs.builder()\n .service(customsrv.serviceId())\n .displayName(\"Test SLO with window based SLI\")\n .goal(0.9)\n .rollingPeriodDays(20)\n .windowsBasedSli(SloWindowsBasedSliArgs.builder()\n .windowPeriod(\"600s\")\n .metricMeanInRange(SloWindowsBasedSliMetricMeanInRangeArgs.builder()\n .timeSeries(StdFunctions.join(JoinArgs.builder()\n .separator(\" AND \")\n .input( \n \"metric.type=\\\"agent.googleapis.com/cassandra/client_request/latency/95p\\\"\",\n \"resource.type=\\\"gce_instance\\\"\")\n .build()).result())\n .range(SloWindowsBasedSliMetricMeanInRangeRangeArgs.builder()\n .max(5)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customsrv:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv-windows-slos\n displayName: My Custom Service\n windowsBased:\n type: gcp:monitoring:Slo\n name: windows_based\n properties:\n service: ${customsrv.serviceId}\n displayName: Test SLO with window based SLI\n goal: 0.9\n rollingPeriodDays: 20\n windowsBasedSli:\n windowPeriod: 600s\n metricMeanInRange:\n timeSeries:\n fn::invoke:\n Function: std:join\n Arguments:\n separator: ' AND '\n input:\n - metric.type=\"agent.googleapis.com/cassandra/client_request/latency/95p\"\n - resource.type=\"gce_instance\"\n Return: result\n range:\n max: 5\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Slo Windows Based Metric Sum\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst customsrv = new gcp.monitoring.CustomService(\"customsrv\", {\n serviceId: \"custom-srv-windows-slos\",\n displayName: \"My Custom Service\",\n});\nconst windowsBased = new gcp.monitoring.Slo(\"windows_based\", {\n service: customsrv.serviceId,\n displayName: \"Test SLO with window based SLI\",\n goal: 0.9,\n rollingPeriodDays: 20,\n windowsBasedSli: {\n windowPeriod: \"400s\",\n metricSumInRange: {\n timeSeries: std.join({\n separator: \" AND \",\n input: [\n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/request_latency\\\"\",\n \"resource.type=\\\"uptime_url\\\"\",\n ],\n }).then(invoke =\u003e invoke.result),\n range: {\n max: 5000,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\ncustomsrv = gcp.monitoring.CustomService(\"customsrv\",\n service_id=\"custom-srv-windows-slos\",\n display_name=\"My Custom Service\")\nwindows_based = gcp.monitoring.Slo(\"windows_based\",\n service=customsrv.service_id,\n display_name=\"Test SLO with window based SLI\",\n goal=0.9,\n rolling_period_days=20,\n windows_based_sli={\n \"window_period\": \"400s\",\n \"metric_sum_in_range\": {\n \"time_series\": std.join(separator=\" AND \",\n input=[\n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/request_latency\\\"\",\n \"resource.type=\\\"uptime_url\\\"\",\n ]).result,\n \"range\": {\n \"max\": 5000,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customsrv = new Gcp.Monitoring.CustomService(\"customsrv\", new()\n {\n ServiceId = \"custom-srv-windows-slos\",\n DisplayName = \"My Custom Service\",\n });\n\n var windowsBased = new Gcp.Monitoring.Slo(\"windows_based\", new()\n {\n Service = customsrv.ServiceId,\n DisplayName = \"Test SLO with window based SLI\",\n Goal = 0.9,\n RollingPeriodDays = 20,\n WindowsBasedSli = new Gcp.Monitoring.Inputs.SloWindowsBasedSliArgs\n {\n WindowPeriod = \"400s\",\n MetricSumInRange = new Gcp.Monitoring.Inputs.SloWindowsBasedSliMetricSumInRangeArgs\n {\n TimeSeries = Std.Join.Invoke(new()\n {\n Separator = \" AND \",\n Input = new[]\n {\n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/request_latency\\\"\",\n \"resource.type=\\\"uptime_url\\\"\",\n },\n }).Apply(invoke =\u003e invoke.Result),\n Range = new Gcp.Monitoring.Inputs.SloWindowsBasedSliMetricSumInRangeRangeArgs\n {\n Max = 5000,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomsrv, err := monitoring.NewCustomService(ctx, \"customsrv\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv-windows-slos\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeJoin, err := std.Join(ctx, \u0026std.JoinArgs{\n\t\t\tSeparator: \" AND \",\n\t\t\tInput: []string{\n\t\t\t\t\"metric.type=\\\"monitoring.googleapis.com/uptime_check/request_latency\\\"\",\n\t\t\t\t\"resource.type=\\\"uptime_url\\\"\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"windows_based\", \u0026monitoring.SloArgs{\n\t\t\tService: customsrv.ServiceId,\n\t\t\tDisplayName: pulumi.String(\"Test SLO with window based SLI\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tRollingPeriodDays: pulumi.Int(20),\n\t\t\tWindowsBasedSli: \u0026monitoring.SloWindowsBasedSliArgs{\n\t\t\t\tWindowPeriod: pulumi.String(\"400s\"),\n\t\t\t\tMetricSumInRange: \u0026monitoring.SloWindowsBasedSliMetricSumInRangeArgs{\n\t\t\t\t\tTimeSeries: pulumi.String(invokeJoin.Result),\n\t\t\t\t\tRange: \u0026monitoring.SloWindowsBasedSliMetricSumInRangeRangeArgs{\n\t\t\t\t\t\tMax: pulumi.Float64(5000),\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\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.gcp.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliMetricSumInRangeArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliMetricSumInRangeRangeArgs;\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 customsrv = new CustomService(\"customsrv\", CustomServiceArgs.builder()\n .serviceId(\"custom-srv-windows-slos\")\n .displayName(\"My Custom Service\")\n .build());\n\n var windowsBased = new Slo(\"windowsBased\", SloArgs.builder()\n .service(customsrv.serviceId())\n .displayName(\"Test SLO with window based SLI\")\n .goal(0.9)\n .rollingPeriodDays(20)\n .windowsBasedSli(SloWindowsBasedSliArgs.builder()\n .windowPeriod(\"400s\")\n .metricSumInRange(SloWindowsBasedSliMetricSumInRangeArgs.builder()\n .timeSeries(StdFunctions.join(JoinArgs.builder()\n .separator(\" AND \")\n .input( \n \"metric.type=\\\"monitoring.googleapis.com/uptime_check/request_latency\\\"\",\n \"resource.type=\\\"uptime_url\\\"\")\n .build()).result())\n .range(SloWindowsBasedSliMetricSumInRangeRangeArgs.builder()\n .max(5000)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customsrv:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv-windows-slos\n displayName: My Custom Service\n windowsBased:\n type: gcp:monitoring:Slo\n name: windows_based\n properties:\n service: ${customsrv.serviceId}\n displayName: Test SLO with window based SLI\n goal: 0.9\n rollingPeriodDays: 20\n windowsBasedSli:\n windowPeriod: 400s\n metricSumInRange:\n timeSeries:\n fn::invoke:\n Function: std:join\n Arguments:\n separator: ' AND '\n input:\n - metric.type=\"monitoring.googleapis.com/uptime_check/request_latency\"\n - resource.type=\"uptime_url\"\n Return: result\n range:\n max: 5000\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Monitoring Slo Windows Based Ratio Threshold\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as std from \"@pulumi/std\";\n\nconst customsrv = new gcp.monitoring.CustomService(\"customsrv\", {\n serviceId: \"custom-srv-windows-slos\",\n displayName: \"My Custom Service\",\n});\nconst windowsBased = new gcp.monitoring.Slo(\"windows_based\", {\n service: customsrv.serviceId,\n displayName: \"Test SLO with window based SLI\",\n goal: 0.9,\n rollingPeriodDays: 20,\n windowsBasedSli: {\n windowPeriod: \"100s\",\n goodTotalRatioThreshold: {\n threshold: 0.1,\n performance: {\n distributionCut: {\n distributionFilter: std.join({\n separator: \" AND \",\n input: [\n \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\"\",\n \"resource.type=\\\"consumed_api\\\"\",\n ],\n }).then(invoke =\u003e invoke.result),\n range: {\n min: 1,\n max: 9,\n },\n },\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_std as std\n\ncustomsrv = gcp.monitoring.CustomService(\"customsrv\",\n service_id=\"custom-srv-windows-slos\",\n display_name=\"My Custom Service\")\nwindows_based = gcp.monitoring.Slo(\"windows_based\",\n service=customsrv.service_id,\n display_name=\"Test SLO with window based SLI\",\n goal=0.9,\n rolling_period_days=20,\n windows_based_sli={\n \"window_period\": \"100s\",\n \"good_total_ratio_threshold\": {\n \"threshold\": 0.1,\n \"performance\": {\n \"distribution_cut\": {\n \"distribution_filter\": std.join(separator=\" AND \",\n input=[\n \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\"\",\n \"resource.type=\\\"consumed_api\\\"\",\n ]).result,\n \"range\": {\n \"min\": 1,\n \"max\": 9,\n },\n },\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Std = Pulumi.Std;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customsrv = new Gcp.Monitoring.CustomService(\"customsrv\", new()\n {\n ServiceId = \"custom-srv-windows-slos\",\n DisplayName = \"My Custom Service\",\n });\n\n var windowsBased = new Gcp.Monitoring.Slo(\"windows_based\", new()\n {\n Service = customsrv.ServiceId,\n DisplayName = \"Test SLO with window based SLI\",\n Goal = 0.9,\n RollingPeriodDays = 20,\n WindowsBasedSli = new Gcp.Monitoring.Inputs.SloWindowsBasedSliArgs\n {\n WindowPeriod = \"100s\",\n GoodTotalRatioThreshold = new Gcp.Monitoring.Inputs.SloWindowsBasedSliGoodTotalRatioThresholdArgs\n {\n Threshold = 0.1,\n Performance = new Gcp.Monitoring.Inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceArgs\n {\n DistributionCut = new Gcp.Monitoring.Inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutArgs\n {\n DistributionFilter = Std.Join.Invoke(new()\n {\n Separator = \" AND \",\n Input = new[]\n {\n \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\"\",\n \"resource.type=\\\"consumed_api\\\"\",\n },\n }).Apply(invoke =\u003e invoke.Result),\n Range = new Gcp.Monitoring.Inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutRangeArgs\n {\n Min = 1,\n Max = 9,\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi-std/sdk/go/std\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomsrv, err := monitoring.NewCustomService(ctx, \"customsrv\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv-windows-slos\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinvokeJoin, err := std.Join(ctx, \u0026std.JoinArgs{\n\t\t\tSeparator: \" AND \",\n\t\t\tInput: []string{\n\t\t\t\t\"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\"\",\n\t\t\t\t\"resource.type=\\\"consumed_api\\\"\",\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"windows_based\", \u0026monitoring.SloArgs{\n\t\t\tService: customsrv.ServiceId,\n\t\t\tDisplayName: pulumi.String(\"Test SLO with window based SLI\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tRollingPeriodDays: pulumi.Int(20),\n\t\t\tWindowsBasedSli: \u0026monitoring.SloWindowsBasedSliArgs{\n\t\t\t\tWindowPeriod: pulumi.String(\"100s\"),\n\t\t\t\tGoodTotalRatioThreshold: \u0026monitoring.SloWindowsBasedSliGoodTotalRatioThresholdArgs{\n\t\t\t\t\tThreshold: pulumi.Float64(0.1),\n\t\t\t\t\tPerformance: \u0026monitoring.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceArgs{\n\t\t\t\t\t\tDistributionCut: \u0026monitoring.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutArgs{\n\t\t\t\t\t\t\tDistributionFilter: pulumi.String(invokeJoin.Result),\n\t\t\t\t\t\t\tRange: \u0026monitoring.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutRangeArgs{\n\t\t\t\t\t\t\t\tMin: pulumi.Float64(1),\n\t\t\t\t\t\t\t\tMax: pulumi.Float64(9),\n\t\t\t\t\t\t\t},\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\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.gcp.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliGoodTotalRatioThresholdArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutRangeArgs;\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 customsrv = new CustomService(\"customsrv\", CustomServiceArgs.builder()\n .serviceId(\"custom-srv-windows-slos\")\n .displayName(\"My Custom Service\")\n .build());\n\n var windowsBased = new Slo(\"windowsBased\", SloArgs.builder()\n .service(customsrv.serviceId())\n .displayName(\"Test SLO with window based SLI\")\n .goal(0.9)\n .rollingPeriodDays(20)\n .windowsBasedSli(SloWindowsBasedSliArgs.builder()\n .windowPeriod(\"100s\")\n .goodTotalRatioThreshold(SloWindowsBasedSliGoodTotalRatioThresholdArgs.builder()\n .threshold(0.1)\n .performance(SloWindowsBasedSliGoodTotalRatioThresholdPerformanceArgs.builder()\n .distributionCut(SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutArgs.builder()\n .distributionFilter(StdFunctions.join(JoinArgs.builder()\n .separator(\" AND \")\n .input( \n \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\"\",\n \"resource.type=\\\"consumed_api\\\"\")\n .build()).result())\n .range(SloWindowsBasedSliGoodTotalRatioThresholdPerformanceDistributionCutRangeArgs.builder()\n .min(1)\n .max(9)\n .build())\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customsrv:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv-windows-slos\n displayName: My Custom Service\n windowsBased:\n type: gcp:monitoring:Slo\n name: windows_based\n properties:\n service: ${customsrv.serviceId}\n displayName: Test SLO with window based SLI\n goal: 0.9\n rollingPeriodDays: 20\n windowsBasedSli:\n windowPeriod: 100s\n goodTotalRatioThreshold:\n threshold: 0.1\n performance:\n distributionCut:\n distributionFilter:\n fn::invoke:\n Function: std:join\n Arguments:\n separator: ' AND '\n input:\n - metric.type=\"serviceruntime.googleapis.com/api/request_latencies\"\n - resource.type=\"consumed_api\"\n Return: result\n range:\n min: 1\n max: 9\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nSlo can be imported using any of these accepted formats:\n\n* `{{project}}/{{name}}`\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Slo can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:monitoring/slo:Slo default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:monitoring/slo:Slo default \"{{project}} {{name}}\"\n```\n\n```sh\n$ pulumi import gcp:monitoring/slo:Slo default {{name}}\n```\n\n", "properties": { "basicSli": { "$ref": "#/types/gcp:monitoring/SloBasicSli:SloBasicSli", @@ -232417,7 +235327,7 @@ } }, "gcp:monitoring/uptimeCheckConfig:UptimeCheckConfig": { - "description": "This message configures which resources and services to monitor for availability.\n\n\nTo get more information about UptimeCheckConfig, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.uptimeCheckConfigs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/monitoring/uptime-checks/)\n\n\n\n## Example Usage\n\n### Uptime Check Config Http\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst http = new gcp.monitoring.UptimeCheckConfig(\"http\", {\n displayName: \"http-uptime-check\",\n timeout: \"60s\",\n userLabels: {\n \"example-key\": \"example-value\",\n },\n httpCheck: {\n path: \"some-path\",\n port: 8010,\n requestMethod: \"POST\",\n contentType: \"USER_PROVIDED\",\n customContentType: \"application/json\",\n body: \"Zm9vJTI1M0RiYXI=\",\n pingConfig: {\n pingsCount: 1,\n },\n },\n monitoredResource: {\n type: \"uptime_url\",\n labels: {\n project_id: \"my-project-name\",\n host: \"192.168.1.1\",\n },\n },\n contentMatchers: [{\n content: \"\\\"example\\\"\",\n matcher: \"MATCHES_JSON_PATH\",\n jsonPathMatcher: {\n jsonPath: \"$.path\",\n jsonMatcher: \"EXACT_MATCH\",\n },\n }],\n checkerType: \"STATIC_IP_CHECKERS\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhttp = gcp.monitoring.UptimeCheckConfig(\"http\",\n display_name=\"http-uptime-check\",\n timeout=\"60s\",\n user_labels={\n \"example-key\": \"example-value\",\n },\n http_check={\n \"path\": \"some-path\",\n \"port\": 8010,\n \"request_method\": \"POST\",\n \"content_type\": \"USER_PROVIDED\",\n \"custom_content_type\": \"application/json\",\n \"body\": \"Zm9vJTI1M0RiYXI=\",\n \"ping_config\": {\n \"pings_count\": 1,\n },\n },\n monitored_resource={\n \"type\": \"uptime_url\",\n \"labels\": {\n \"project_id\": \"my-project-name\",\n \"host\": \"192.168.1.1\",\n },\n },\n content_matchers=[{\n \"content\": \"\\\"example\\\"\",\n \"matcher\": \"MATCHES_JSON_PATH\",\n \"json_path_matcher\": {\n \"json_path\": \"$.path\",\n \"json_matcher\": \"EXACT_MATCH\",\n },\n }],\n checker_type=\"STATIC_IP_CHECKERS\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var http = new Gcp.Monitoring.UptimeCheckConfig(\"http\", new()\n {\n DisplayName = \"http-uptime-check\",\n Timeout = \"60s\",\n UserLabels = \n {\n { \"example-key\", \"example-value\" },\n },\n HttpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckArgs\n {\n Path = \"some-path\",\n Port = 8010,\n RequestMethod = \"POST\",\n ContentType = \"USER_PROVIDED\",\n CustomContentType = \"application/json\",\n Body = \"Zm9vJTI1M0RiYXI=\",\n PingConfig = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckPingConfigArgs\n {\n PingsCount = 1,\n },\n },\n MonitoredResource = new Gcp.Monitoring.Inputs.UptimeCheckConfigMonitoredResourceArgs\n {\n Type = \"uptime_url\",\n Labels = \n {\n { \"project_id\", \"my-project-name\" },\n { \"host\", \"192.168.1.1\" },\n },\n },\n ContentMatchers = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherArgs\n {\n Content = \"\\\"example\\\"\",\n Matcher = \"MATCHES_JSON_PATH\",\n JsonPathMatcher = new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs\n {\n JsonPath = \"$.path\",\n JsonMatcher = \"EXACT_MATCH\",\n },\n },\n },\n CheckerType = \"STATIC_IP_CHECKERS\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewUptimeCheckConfig(ctx, \"http\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"http-uptime-check\"),\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"example-key\": pulumi.String(\"example-value\"),\n\t\t\t},\n\t\t\tHttpCheck: \u0026monitoring.UptimeCheckConfigHttpCheckArgs{\n\t\t\t\tPath: pulumi.String(\"some-path\"),\n\t\t\t\tPort: pulumi.Int(8010),\n\t\t\t\tRequestMethod: pulumi.String(\"POST\"),\n\t\t\t\tContentType: pulumi.String(\"USER_PROVIDED\"),\n\t\t\t\tCustomContentType: pulumi.String(\"application/json\"),\n\t\t\t\tBody: pulumi.String(\"Zm9vJTI1M0RiYXI=\"),\n\t\t\t\tPingConfig: \u0026monitoring.UptimeCheckConfigHttpCheckPingConfigArgs{\n\t\t\t\t\tPingsCount: pulumi.Int(1),\n\t\t\t\t},\n\t\t\t},\n\t\t\tMonitoredResource: \u0026monitoring.UptimeCheckConfigMonitoredResourceArgs{\n\t\t\t\tType: pulumi.String(\"uptime_url\"),\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"project_id\": pulumi.String(\"my-project-name\"),\n\t\t\t\t\t\"host\": pulumi.String(\"192.168.1.1\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tContentMatchers: monitoring.UptimeCheckConfigContentMatcherArray{\n\t\t\t\t\u0026monitoring.UptimeCheckConfigContentMatcherArgs{\n\t\t\t\t\tContent: pulumi.String(\"\\\"example\\\"\"),\n\t\t\t\t\tMatcher: pulumi.String(\"MATCHES_JSON_PATH\"),\n\t\t\t\t\tJsonPathMatcher: \u0026monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs{\n\t\t\t\t\t\tJsonPath: pulumi.String(\"$.path\"),\n\t\t\t\t\t\tJsonMatcher: pulumi.String(\"EXACT_MATCH\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCheckerType: pulumi.String(\"STATIC_IP_CHECKERS\"),\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.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckPingConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigMonitoredResourceArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs;\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 http = new UptimeCheckConfig(\"http\", UptimeCheckConfigArgs.builder()\n .displayName(\"http-uptime-check\")\n .timeout(\"60s\")\n .userLabels(Map.of(\"example-key\", \"example-value\"))\n .httpCheck(UptimeCheckConfigHttpCheckArgs.builder()\n .path(\"some-path\")\n .port(\"8010\")\n .requestMethod(\"POST\")\n .contentType(\"USER_PROVIDED\")\n .customContentType(\"application/json\")\n .body(\"Zm9vJTI1M0RiYXI=\")\n .pingConfig(UptimeCheckConfigHttpCheckPingConfigArgs.builder()\n .pingsCount(1)\n .build())\n .build())\n .monitoredResource(UptimeCheckConfigMonitoredResourceArgs.builder()\n .type(\"uptime_url\")\n .labels(Map.ofEntries(\n Map.entry(\"project_id\", \"my-project-name\"),\n Map.entry(\"host\", \"192.168.1.1\")\n ))\n .build())\n .contentMatchers(UptimeCheckConfigContentMatcherArgs.builder()\n .content(\"\\\"example\\\"\")\n .matcher(\"MATCHES_JSON_PATH\")\n .jsonPathMatcher(UptimeCheckConfigContentMatcherJsonPathMatcherArgs.builder()\n .jsonPath(\"$.path\")\n .jsonMatcher(\"EXACT_MATCH\")\n .build())\n .build())\n .checkerType(\"STATIC_IP_CHECKERS\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n http:\n type: gcp:monitoring:UptimeCheckConfig\n properties:\n displayName: http-uptime-check\n timeout: 60s\n userLabels:\n example-key: example-value\n httpCheck:\n path: some-path\n port: '8010'\n requestMethod: POST\n contentType: USER_PROVIDED\n customContentType: application/json\n body: Zm9vJTI1M0RiYXI=\n pingConfig:\n pingsCount: 1\n monitoredResource:\n type: uptime_url\n labels:\n project_id: my-project-name\n host: 192.168.1.1\n contentMatchers:\n - content: '\"example\"'\n matcher: MATCHES_JSON_PATH\n jsonPathMatcher:\n jsonPath: $.path\n jsonMatcher: EXACT_MATCH\n checkerType: STATIC_IP_CHECKERS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Uptime Check Config Status Code\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst statusCode = new gcp.monitoring.UptimeCheckConfig(\"status_code\", {\n displayName: \"http-uptime-check\",\n timeout: \"60s\",\n httpCheck: {\n path: \"some-path\",\n port: 8010,\n requestMethod: \"POST\",\n contentType: \"URL_ENCODED\",\n body: \"Zm9vJTI1M0RiYXI=\",\n acceptedResponseStatusCodes: [\n {\n statusClass: \"STATUS_CLASS_2XX\",\n },\n {\n statusValue: 301,\n },\n {\n statusValue: 302,\n },\n ],\n },\n monitoredResource: {\n type: \"uptime_url\",\n labels: {\n project_id: \"my-project-name\",\n host: \"192.168.1.1\",\n },\n },\n contentMatchers: [{\n content: \"\\\"example\\\"\",\n matcher: \"MATCHES_JSON_PATH\",\n jsonPathMatcher: {\n jsonPath: \"$.path\",\n jsonMatcher: \"EXACT_MATCH\",\n },\n }],\n checkerType: \"STATIC_IP_CHECKERS\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nstatus_code = gcp.monitoring.UptimeCheckConfig(\"status_code\",\n display_name=\"http-uptime-check\",\n timeout=\"60s\",\n http_check={\n \"path\": \"some-path\",\n \"port\": 8010,\n \"request_method\": \"POST\",\n \"content_type\": \"URL_ENCODED\",\n \"body\": \"Zm9vJTI1M0RiYXI=\",\n \"accepted_response_status_codes\": [\n {\n \"status_class\": \"STATUS_CLASS_2XX\",\n },\n {\n \"status_value\": 301,\n },\n {\n \"status_value\": 302,\n },\n ],\n },\n monitored_resource={\n \"type\": \"uptime_url\",\n \"labels\": {\n \"project_id\": \"my-project-name\",\n \"host\": \"192.168.1.1\",\n },\n },\n content_matchers=[{\n \"content\": \"\\\"example\\\"\",\n \"matcher\": \"MATCHES_JSON_PATH\",\n \"json_path_matcher\": {\n \"json_path\": \"$.path\",\n \"json_matcher\": \"EXACT_MATCH\",\n },\n }],\n checker_type=\"STATIC_IP_CHECKERS\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var statusCode = new Gcp.Monitoring.UptimeCheckConfig(\"status_code\", new()\n {\n DisplayName = \"http-uptime-check\",\n Timeout = \"60s\",\n HttpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckArgs\n {\n Path = \"some-path\",\n Port = 8010,\n RequestMethod = \"POST\",\n ContentType = \"URL_ENCODED\",\n Body = \"Zm9vJTI1M0RiYXI=\",\n AcceptedResponseStatusCodes = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs\n {\n StatusClass = \"STATUS_CLASS_2XX\",\n },\n new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs\n {\n StatusValue = 301,\n },\n new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs\n {\n StatusValue = 302,\n },\n },\n },\n MonitoredResource = new Gcp.Monitoring.Inputs.UptimeCheckConfigMonitoredResourceArgs\n {\n Type = \"uptime_url\",\n Labels = \n {\n { \"project_id\", \"my-project-name\" },\n { \"host\", \"192.168.1.1\" },\n },\n },\n ContentMatchers = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherArgs\n {\n Content = \"\\\"example\\\"\",\n Matcher = \"MATCHES_JSON_PATH\",\n JsonPathMatcher = new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs\n {\n JsonPath = \"$.path\",\n JsonMatcher = \"EXACT_MATCH\",\n },\n },\n },\n CheckerType = \"STATIC_IP_CHECKERS\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewUptimeCheckConfig(ctx, \"status_code\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"http-uptime-check\"),\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t\tHttpCheck: \u0026monitoring.UptimeCheckConfigHttpCheckArgs{\n\t\t\t\tPath: pulumi.String(\"some-path\"),\n\t\t\t\tPort: pulumi.Int(8010),\n\t\t\t\tRequestMethod: pulumi.String(\"POST\"),\n\t\t\t\tContentType: pulumi.String(\"URL_ENCODED\"),\n\t\t\t\tBody: pulumi.String(\"Zm9vJTI1M0RiYXI=\"),\n\t\t\t\tAcceptedResponseStatusCodes: monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArray{\n\t\t\t\t\t\u0026monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs{\n\t\t\t\t\t\tStatusClass: pulumi.String(\"STATUS_CLASS_2XX\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs{\n\t\t\t\t\t\tStatusValue: pulumi.Int(301),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs{\n\t\t\t\t\t\tStatusValue: pulumi.Int(302),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMonitoredResource: \u0026monitoring.UptimeCheckConfigMonitoredResourceArgs{\n\t\t\t\tType: pulumi.String(\"uptime_url\"),\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"project_id\": pulumi.String(\"my-project-name\"),\n\t\t\t\t\t\"host\": pulumi.String(\"192.168.1.1\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tContentMatchers: monitoring.UptimeCheckConfigContentMatcherArray{\n\t\t\t\t\u0026monitoring.UptimeCheckConfigContentMatcherArgs{\n\t\t\t\t\tContent: pulumi.String(\"\\\"example\\\"\"),\n\t\t\t\t\tMatcher: pulumi.String(\"MATCHES_JSON_PATH\"),\n\t\t\t\t\tJsonPathMatcher: \u0026monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs{\n\t\t\t\t\t\tJsonPath: pulumi.String(\"$.path\"),\n\t\t\t\t\t\tJsonMatcher: pulumi.String(\"EXACT_MATCH\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCheckerType: pulumi.String(\"STATIC_IP_CHECKERS\"),\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.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigMonitoredResourceArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs;\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 statusCode = new UptimeCheckConfig(\"statusCode\", UptimeCheckConfigArgs.builder()\n .displayName(\"http-uptime-check\")\n .timeout(\"60s\")\n .httpCheck(UptimeCheckConfigHttpCheckArgs.builder()\n .path(\"some-path\")\n .port(\"8010\")\n .requestMethod(\"POST\")\n .contentType(\"URL_ENCODED\")\n .body(\"Zm9vJTI1M0RiYXI=\")\n .acceptedResponseStatusCodes( \n UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs.builder()\n .statusClass(\"STATUS_CLASS_2XX\")\n .build(),\n UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs.builder()\n .statusValue(301)\n .build(),\n UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs.builder()\n .statusValue(302)\n .build())\n .build())\n .monitoredResource(UptimeCheckConfigMonitoredResourceArgs.builder()\n .type(\"uptime_url\")\n .labels(Map.ofEntries(\n Map.entry(\"project_id\", \"my-project-name\"),\n Map.entry(\"host\", \"192.168.1.1\")\n ))\n .build())\n .contentMatchers(UptimeCheckConfigContentMatcherArgs.builder()\n .content(\"\\\"example\\\"\")\n .matcher(\"MATCHES_JSON_PATH\")\n .jsonPathMatcher(UptimeCheckConfigContentMatcherJsonPathMatcherArgs.builder()\n .jsonPath(\"$.path\")\n .jsonMatcher(\"EXACT_MATCH\")\n .build())\n .build())\n .checkerType(\"STATIC_IP_CHECKERS\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n statusCode:\n type: gcp:monitoring:UptimeCheckConfig\n name: status_code\n properties:\n displayName: http-uptime-check\n timeout: 60s\n httpCheck:\n path: some-path\n port: '8010'\n requestMethod: POST\n contentType: URL_ENCODED\n body: Zm9vJTI1M0RiYXI=\n acceptedResponseStatusCodes:\n - statusClass: STATUS_CLASS_2XX\n - statusValue: 301\n - statusValue: 302\n monitoredResource:\n type: uptime_url\n labels:\n project_id: my-project-name\n host: 192.168.1.1\n contentMatchers:\n - content: '\"example\"'\n matcher: MATCHES_JSON_PATH\n jsonPathMatcher:\n jsonPath: $.path\n jsonMatcher: EXACT_MATCH\n checkerType: STATIC_IP_CHECKERS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Uptime Check Config Https\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst https = new gcp.monitoring.UptimeCheckConfig(\"https\", {\n displayName: \"https-uptime-check\",\n timeout: \"60s\",\n httpCheck: {\n path: \"/some-path\",\n port: 443,\n useSsl: true,\n validateSsl: true,\n serviceAgentAuthentication: {\n type: \"OIDC_TOKEN\",\n },\n },\n monitoredResource: {\n type: \"uptime_url\",\n labels: {\n project_id: \"my-project-name\",\n host: \"192.168.1.1\",\n },\n },\n contentMatchers: [{\n content: \"example\",\n matcher: \"MATCHES_JSON_PATH\",\n jsonPathMatcher: {\n jsonPath: \"$.path\",\n jsonMatcher: \"REGEX_MATCH\",\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhttps = gcp.monitoring.UptimeCheckConfig(\"https\",\n display_name=\"https-uptime-check\",\n timeout=\"60s\",\n http_check={\n \"path\": \"/some-path\",\n \"port\": 443,\n \"use_ssl\": True,\n \"validate_ssl\": True,\n \"service_agent_authentication\": {\n \"type\": \"OIDC_TOKEN\",\n },\n },\n monitored_resource={\n \"type\": \"uptime_url\",\n \"labels\": {\n \"project_id\": \"my-project-name\",\n \"host\": \"192.168.1.1\",\n },\n },\n content_matchers=[{\n \"content\": \"example\",\n \"matcher\": \"MATCHES_JSON_PATH\",\n \"json_path_matcher\": {\n \"json_path\": \"$.path\",\n \"json_matcher\": \"REGEX_MATCH\",\n },\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var https = new Gcp.Monitoring.UptimeCheckConfig(\"https\", new()\n {\n DisplayName = \"https-uptime-check\",\n Timeout = \"60s\",\n HttpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckArgs\n {\n Path = \"/some-path\",\n Port = 443,\n UseSsl = true,\n ValidateSsl = true,\n ServiceAgentAuthentication = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckServiceAgentAuthenticationArgs\n {\n Type = \"OIDC_TOKEN\",\n },\n },\n MonitoredResource = new Gcp.Monitoring.Inputs.UptimeCheckConfigMonitoredResourceArgs\n {\n Type = \"uptime_url\",\n Labels = \n {\n { \"project_id\", \"my-project-name\" },\n { \"host\", \"192.168.1.1\" },\n },\n },\n ContentMatchers = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherArgs\n {\n Content = \"example\",\n Matcher = \"MATCHES_JSON_PATH\",\n JsonPathMatcher = new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs\n {\n JsonPath = \"$.path\",\n JsonMatcher = \"REGEX_MATCH\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewUptimeCheckConfig(ctx, \"https\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"https-uptime-check\"),\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t\tHttpCheck: \u0026monitoring.UptimeCheckConfigHttpCheckArgs{\n\t\t\t\tPath: pulumi.String(\"/some-path\"),\n\t\t\t\tPort: pulumi.Int(443),\n\t\t\t\tUseSsl: pulumi.Bool(true),\n\t\t\t\tValidateSsl: pulumi.Bool(true),\n\t\t\t\tServiceAgentAuthentication: \u0026monitoring.UptimeCheckConfigHttpCheckServiceAgentAuthenticationArgs{\n\t\t\t\t\tType: pulumi.String(\"OIDC_TOKEN\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tMonitoredResource: \u0026monitoring.UptimeCheckConfigMonitoredResourceArgs{\n\t\t\t\tType: pulumi.String(\"uptime_url\"),\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"project_id\": pulumi.String(\"my-project-name\"),\n\t\t\t\t\t\"host\": pulumi.String(\"192.168.1.1\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tContentMatchers: monitoring.UptimeCheckConfigContentMatcherArray{\n\t\t\t\t\u0026monitoring.UptimeCheckConfigContentMatcherArgs{\n\t\t\t\t\tContent: pulumi.String(\"example\"),\n\t\t\t\t\tMatcher: pulumi.String(\"MATCHES_JSON_PATH\"),\n\t\t\t\t\tJsonPathMatcher: \u0026monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs{\n\t\t\t\t\t\tJsonPath: pulumi.String(\"$.path\"),\n\t\t\t\t\t\tJsonMatcher: pulumi.String(\"REGEX_MATCH\"),\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\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.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckServiceAgentAuthenticationArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigMonitoredResourceArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs;\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 https = new UptimeCheckConfig(\"https\", UptimeCheckConfigArgs.builder()\n .displayName(\"https-uptime-check\")\n .timeout(\"60s\")\n .httpCheck(UptimeCheckConfigHttpCheckArgs.builder()\n .path(\"/some-path\")\n .port(\"443\")\n .useSsl(true)\n .validateSsl(true)\n .serviceAgentAuthentication(UptimeCheckConfigHttpCheckServiceAgentAuthenticationArgs.builder()\n .type(\"OIDC_TOKEN\")\n .build())\n .build())\n .monitoredResource(UptimeCheckConfigMonitoredResourceArgs.builder()\n .type(\"uptime_url\")\n .labels(Map.ofEntries(\n Map.entry(\"project_id\", \"my-project-name\"),\n Map.entry(\"host\", \"192.168.1.1\")\n ))\n .build())\n .contentMatchers(UptimeCheckConfigContentMatcherArgs.builder()\n .content(\"example\")\n .matcher(\"MATCHES_JSON_PATH\")\n .jsonPathMatcher(UptimeCheckConfigContentMatcherJsonPathMatcherArgs.builder()\n .jsonPath(\"$.path\")\n .jsonMatcher(\"REGEX_MATCH\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n https:\n type: gcp:monitoring:UptimeCheckConfig\n properties:\n displayName: https-uptime-check\n timeout: 60s\n httpCheck:\n path: /some-path\n port: '443'\n useSsl: true\n validateSsl: true\n serviceAgentAuthentication:\n type: OIDC_TOKEN\n monitoredResource:\n type: uptime_url\n labels:\n project_id: my-project-name\n host: 192.168.1.1\n contentMatchers:\n - content: example\n matcher: MATCHES_JSON_PATH\n jsonPathMatcher:\n jsonPath: $.path\n jsonMatcher: REGEX_MATCH\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Uptime Check Tcp\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst check = new gcp.monitoring.Group(\"check\", {\n displayName: \"uptime-check-group\",\n filter: \"resource.metadata.name=has_substring(\\\"foo\\\")\",\n});\nconst tcpGroup = new gcp.monitoring.UptimeCheckConfig(\"tcp_group\", {\n displayName: \"tcp-uptime-check\",\n timeout: \"60s\",\n tcpCheck: {\n port: 888,\n pingConfig: {\n pingsCount: 2,\n },\n },\n resourceGroup: {\n resourceType: \"INSTANCE\",\n groupId: check.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncheck = gcp.monitoring.Group(\"check\",\n display_name=\"uptime-check-group\",\n filter=\"resource.metadata.name=has_substring(\\\"foo\\\")\")\ntcp_group = gcp.monitoring.UptimeCheckConfig(\"tcp_group\",\n display_name=\"tcp-uptime-check\",\n timeout=\"60s\",\n tcp_check={\n \"port\": 888,\n \"ping_config\": {\n \"pings_count\": 2,\n },\n },\n resource_group={\n \"resource_type\": \"INSTANCE\",\n \"group_id\": check.name,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var check = new Gcp.Monitoring.Group(\"check\", new()\n {\n DisplayName = \"uptime-check-group\",\n Filter = \"resource.metadata.name=has_substring(\\\"foo\\\")\",\n });\n\n var tcpGroup = new Gcp.Monitoring.UptimeCheckConfig(\"tcp_group\", new()\n {\n DisplayName = \"tcp-uptime-check\",\n Timeout = \"60s\",\n TcpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigTcpCheckArgs\n {\n Port = 888,\n PingConfig = new Gcp.Monitoring.Inputs.UptimeCheckConfigTcpCheckPingConfigArgs\n {\n PingsCount = 2,\n },\n },\n ResourceGroup = new Gcp.Monitoring.Inputs.UptimeCheckConfigResourceGroupArgs\n {\n ResourceType = \"INSTANCE\",\n GroupId = check.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcheck, err := monitoring.NewGroup(ctx, \"check\", \u0026monitoring.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"uptime-check-group\"),\n\t\t\tFilter: pulumi.String(\"resource.metadata.name=has_substring(\\\"foo\\\")\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewUptimeCheckConfig(ctx, \"tcp_group\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"tcp-uptime-check\"),\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t\tTcpCheck: \u0026monitoring.UptimeCheckConfigTcpCheckArgs{\n\t\t\t\tPort: pulumi.Int(888),\n\t\t\t\tPingConfig: \u0026monitoring.UptimeCheckConfigTcpCheckPingConfigArgs{\n\t\t\t\t\tPingsCount: pulumi.Int(2),\n\t\t\t\t},\n\t\t\t},\n\t\t\tResourceGroup: \u0026monitoring.UptimeCheckConfigResourceGroupArgs{\n\t\t\t\tResourceType: pulumi.String(\"INSTANCE\"),\n\t\t\t\tGroupId: check.Name,\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.gcp.monitoring.Group;\nimport com.pulumi.gcp.monitoring.GroupArgs;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigTcpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigTcpCheckPingConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigResourceGroupArgs;\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 check = new Group(\"check\", GroupArgs.builder()\n .displayName(\"uptime-check-group\")\n .filter(\"resource.metadata.name=has_substring(\\\"foo\\\")\")\n .build());\n\n var tcpGroup = new UptimeCheckConfig(\"tcpGroup\", UptimeCheckConfigArgs.builder()\n .displayName(\"tcp-uptime-check\")\n .timeout(\"60s\")\n .tcpCheck(UptimeCheckConfigTcpCheckArgs.builder()\n .port(888)\n .pingConfig(UptimeCheckConfigTcpCheckPingConfigArgs.builder()\n .pingsCount(2)\n .build())\n .build())\n .resourceGroup(UptimeCheckConfigResourceGroupArgs.builder()\n .resourceType(\"INSTANCE\")\n .groupId(check.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tcpGroup:\n type: gcp:monitoring:UptimeCheckConfig\n name: tcp_group\n properties:\n displayName: tcp-uptime-check\n timeout: 60s\n tcpCheck:\n port: 888\n pingConfig:\n pingsCount: 2\n resourceGroup:\n resourceType: INSTANCE\n groupId: ${check.name}\n check:\n type: gcp:monitoring:Group\n properties:\n displayName: uptime-check-group\n filter: resource.metadata.name=has_substring(\"foo\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Uptime Check Config Synthetic Monitor\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n name: \"my-project-name-gcf-source\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst object = new gcp.storage.BucketObject(\"object\", {\n name: \"function-source.zip\",\n bucket: bucket.name,\n source: new pulumi.asset.FileAsset(\"synthetic-fn-source.zip\"),\n});\nconst _function = new gcp.cloudfunctionsv2.Function(\"function\", {\n name: \"synthetic_function\",\n location: \"us-central1\",\n buildConfig: {\n runtime: \"nodejs16\",\n entryPoint: \"SyntheticFunction\",\n source: {\n storageSource: {\n bucket: bucket.name,\n object: object.name,\n },\n },\n },\n serviceConfig: {\n maxInstanceCount: 1,\n availableMemory: \"256M\",\n timeoutSeconds: 60,\n },\n});\nconst syntheticMonitor = new gcp.monitoring.UptimeCheckConfig(\"synthetic_monitor\", {\n displayName: \"synthetic_monitor\",\n timeout: \"60s\",\n syntheticMonitor: {\n cloudFunctionV2: {\n name: _function.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbucket = gcp.storage.Bucket(\"bucket\",\n name=\"my-project-name-gcf-source\",\n location=\"US\",\n uniform_bucket_level_access=True)\nobject = gcp.storage.BucketObject(\"object\",\n name=\"function-source.zip\",\n bucket=bucket.name,\n source=pulumi.FileAsset(\"synthetic-fn-source.zip\"))\nfunction = gcp.cloudfunctionsv2.Function(\"function\",\n name=\"synthetic_function\",\n location=\"us-central1\",\n build_config={\n \"runtime\": \"nodejs16\",\n \"entry_point\": \"SyntheticFunction\",\n \"source\": {\n \"storage_source\": {\n \"bucket\": bucket.name,\n \"object\": object.name,\n },\n },\n },\n service_config={\n \"max_instance_count\": 1,\n \"available_memory\": \"256M\",\n \"timeout_seconds\": 60,\n })\nsynthetic_monitor = gcp.monitoring.UptimeCheckConfig(\"synthetic_monitor\",\n display_name=\"synthetic_monitor\",\n timeout=\"60s\",\n synthetic_monitor={\n \"cloud_function_v2\": {\n \"name\": function.id,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Name = \"my-project-name-gcf-source\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var @object = new Gcp.Storage.BucketObject(\"object\", new()\n {\n Name = \"function-source.zip\",\n Bucket = bucket.Name,\n Source = new FileAsset(\"synthetic-fn-source.zip\"),\n });\n\n var function = new Gcp.CloudFunctionsV2.Function(\"function\", new()\n {\n Name = \"synthetic_function\",\n Location = \"us-central1\",\n BuildConfig = new Gcp.CloudFunctionsV2.Inputs.FunctionBuildConfigArgs\n {\n Runtime = \"nodejs16\",\n EntryPoint = \"SyntheticFunction\",\n Source = new Gcp.CloudFunctionsV2.Inputs.FunctionBuildConfigSourceArgs\n {\n StorageSource = new Gcp.CloudFunctionsV2.Inputs.FunctionBuildConfigSourceStorageSourceArgs\n {\n Bucket = bucket.Name,\n Object = @object.Name,\n },\n },\n },\n ServiceConfig = new Gcp.CloudFunctionsV2.Inputs.FunctionServiceConfigArgs\n {\n MaxInstanceCount = 1,\n AvailableMemory = \"256M\",\n TimeoutSeconds = 60,\n },\n });\n\n var syntheticMonitor = new Gcp.Monitoring.UptimeCheckConfig(\"synthetic_monitor\", new()\n {\n DisplayName = \"synthetic_monitor\",\n Timeout = \"60s\",\n SyntheticMonitor = new Gcp.Monitoring.Inputs.UptimeCheckConfigSyntheticMonitorArgs\n {\n CloudFunctionV2 = new Gcp.Monitoring.Inputs.UptimeCheckConfigSyntheticMonitorCloudFunctionV2Args\n {\n Name = function.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudfunctionsv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"my-project-name-gcf-source\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tobject, err := storage.NewBucketObject(ctx, \"object\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"function-source.zip\"),\n\t\t\tBucket: bucket.Name,\n\t\t\tSource: pulumi.NewFileAsset(\"synthetic-fn-source.zip\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfunction, err := cloudfunctionsv2.NewFunction(ctx, \"function\", \u0026cloudfunctionsv2.FunctionArgs{\n\t\t\tName: pulumi.String(\"synthetic_function\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBuildConfig: \u0026cloudfunctionsv2.FunctionBuildConfigArgs{\n\t\t\t\tRuntime: pulumi.String(\"nodejs16\"),\n\t\t\t\tEntryPoint: pulumi.String(\"SyntheticFunction\"),\n\t\t\t\tSource: \u0026cloudfunctionsv2.FunctionBuildConfigSourceArgs{\n\t\t\t\t\tStorageSource: \u0026cloudfunctionsv2.FunctionBuildConfigSourceStorageSourceArgs{\n\t\t\t\t\t\tBucket: bucket.Name,\n\t\t\t\t\t\tObject: object.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tServiceConfig: \u0026cloudfunctionsv2.FunctionServiceConfigArgs{\n\t\t\t\tMaxInstanceCount: pulumi.Int(1),\n\t\t\t\tAvailableMemory: pulumi.String(\"256M\"),\n\t\t\t\tTimeoutSeconds: pulumi.Int(60),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewUptimeCheckConfig(ctx, \"synthetic_monitor\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"synthetic_monitor\"),\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t\tSyntheticMonitor: \u0026monitoring.UptimeCheckConfigSyntheticMonitorArgs{\n\t\t\t\tCloudFunctionV2: \u0026monitoring.UptimeCheckConfigSyntheticMonitorCloudFunctionV2Args{\n\t\t\t\t\tName: function.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.cloudfunctionsv2.Function;\nimport com.pulumi.gcp.cloudfunctionsv2.FunctionArgs;\nimport com.pulumi.gcp.cloudfunctionsv2.inputs.FunctionBuildConfigArgs;\nimport com.pulumi.gcp.cloudfunctionsv2.inputs.FunctionBuildConfigSourceArgs;\nimport com.pulumi.gcp.cloudfunctionsv2.inputs.FunctionBuildConfigSourceStorageSourceArgs;\nimport com.pulumi.gcp.cloudfunctionsv2.inputs.FunctionServiceConfigArgs;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigSyntheticMonitorArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigSyntheticMonitorCloudFunctionV2Args;\nimport com.pulumi.asset.FileAsset;\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 bucket = new Bucket(\"bucket\", BucketArgs.builder()\n .name(\"my-project-name-gcf-source\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var object = new BucketObject(\"object\", BucketObjectArgs.builder()\n .name(\"function-source.zip\")\n .bucket(bucket.name())\n .source(new FileAsset(\"synthetic-fn-source.zip\"))\n .build());\n\n var function = new Function(\"function\", FunctionArgs.builder()\n .name(\"synthetic_function\")\n .location(\"us-central1\")\n .buildConfig(FunctionBuildConfigArgs.builder()\n .runtime(\"nodejs16\")\n .entryPoint(\"SyntheticFunction\")\n .source(FunctionBuildConfigSourceArgs.builder()\n .storageSource(FunctionBuildConfigSourceStorageSourceArgs.builder()\n .bucket(bucket.name())\n .object(object.name())\n .build())\n .build())\n .build())\n .serviceConfig(FunctionServiceConfigArgs.builder()\n .maxInstanceCount(1)\n .availableMemory(\"256M\")\n .timeoutSeconds(60)\n .build())\n .build());\n\n var syntheticMonitor = new UptimeCheckConfig(\"syntheticMonitor\", UptimeCheckConfigArgs.builder()\n .displayName(\"synthetic_monitor\")\n .timeout(\"60s\")\n .syntheticMonitor(UptimeCheckConfigSyntheticMonitorArgs.builder()\n .cloudFunctionV2(UptimeCheckConfigSyntheticMonitorCloudFunctionV2Args.builder()\n .name(function.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n bucket:\n type: gcp:storage:Bucket\n properties:\n name: my-project-name-gcf-source\n location: US\n uniformBucketLevelAccess: true\n object:\n type: gcp:storage:BucketObject\n properties:\n name: function-source.zip\n bucket: ${bucket.name}\n source:\n fn::FileAsset: synthetic-fn-source.zip\n function:\n type: gcp:cloudfunctionsv2:Function\n properties:\n name: synthetic_function\n location: us-central1\n buildConfig:\n runtime: nodejs16\n entryPoint: SyntheticFunction\n source:\n storageSource:\n bucket: ${bucket.name}\n object: ${object.name}\n serviceConfig:\n maxInstanceCount: 1\n availableMemory: 256M\n timeoutSeconds: 60\n syntheticMonitor:\n type: gcp:monitoring:UptimeCheckConfig\n name: synthetic_monitor\n properties:\n displayName: synthetic_monitor\n timeout: 60s\n syntheticMonitor:\n cloudFunctionV2:\n name: ${function.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nUptimeCheckConfig can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, UptimeCheckConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:monitoring/uptimeCheckConfig:UptimeCheckConfig default {{name}}\n```\n\n", + "description": "This message configures which resources and services to monitor for availability.\n\n\nTo get more information about UptimeCheckConfig, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.uptimeCheckConfigs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/monitoring/uptime-checks/)\n\n\n\n## Example Usage\n\n### Uptime Check Config Http\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst http = new gcp.monitoring.UptimeCheckConfig(\"http\", {\n displayName: \"http-uptime-check\",\n timeout: \"60s\",\n userLabels: {\n \"example-key\": \"example-value\",\n },\n httpCheck: {\n path: \"some-path\",\n port: 8010,\n requestMethod: \"POST\",\n contentType: \"USER_PROVIDED\",\n customContentType: \"application/json\",\n body: \"Zm9vJTI1M0RiYXI=\",\n pingConfig: {\n pingsCount: 1,\n },\n },\n monitoredResource: {\n type: \"uptime_url\",\n labels: {\n project_id: \"my-project-name\",\n host: \"192.168.1.1\",\n },\n },\n contentMatchers: [{\n content: \"\\\"example\\\"\",\n matcher: \"MATCHES_JSON_PATH\",\n jsonPathMatcher: {\n jsonPath: \"$.path\",\n jsonMatcher: \"EXACT_MATCH\",\n },\n }],\n checkerType: \"STATIC_IP_CHECKERS\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhttp = gcp.monitoring.UptimeCheckConfig(\"http\",\n display_name=\"http-uptime-check\",\n timeout=\"60s\",\n user_labels={\n \"example-key\": \"example-value\",\n },\n http_check={\n \"path\": \"some-path\",\n \"port\": 8010,\n \"request_method\": \"POST\",\n \"content_type\": \"USER_PROVIDED\",\n \"custom_content_type\": \"application/json\",\n \"body\": \"Zm9vJTI1M0RiYXI=\",\n \"ping_config\": {\n \"pings_count\": 1,\n },\n },\n monitored_resource={\n \"type\": \"uptime_url\",\n \"labels\": {\n \"project_id\": \"my-project-name\",\n \"host\": \"192.168.1.1\",\n },\n },\n content_matchers=[{\n \"content\": \"\\\"example\\\"\",\n \"matcher\": \"MATCHES_JSON_PATH\",\n \"json_path_matcher\": {\n \"json_path\": \"$.path\",\n \"json_matcher\": \"EXACT_MATCH\",\n },\n }],\n checker_type=\"STATIC_IP_CHECKERS\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var http = new Gcp.Monitoring.UptimeCheckConfig(\"http\", new()\n {\n DisplayName = \"http-uptime-check\",\n Timeout = \"60s\",\n UserLabels = \n {\n { \"example-key\", \"example-value\" },\n },\n HttpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckArgs\n {\n Path = \"some-path\",\n Port = 8010,\n RequestMethod = \"POST\",\n ContentType = \"USER_PROVIDED\",\n CustomContentType = \"application/json\",\n Body = \"Zm9vJTI1M0RiYXI=\",\n PingConfig = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckPingConfigArgs\n {\n PingsCount = 1,\n },\n },\n MonitoredResource = new Gcp.Monitoring.Inputs.UptimeCheckConfigMonitoredResourceArgs\n {\n Type = \"uptime_url\",\n Labels = \n {\n { \"project_id\", \"my-project-name\" },\n { \"host\", \"192.168.1.1\" },\n },\n },\n ContentMatchers = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherArgs\n {\n Content = \"\\\"example\\\"\",\n Matcher = \"MATCHES_JSON_PATH\",\n JsonPathMatcher = new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs\n {\n JsonPath = \"$.path\",\n JsonMatcher = \"EXACT_MATCH\",\n },\n },\n },\n CheckerType = \"STATIC_IP_CHECKERS\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewUptimeCheckConfig(ctx, \"http\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"http-uptime-check\"),\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"example-key\": pulumi.String(\"example-value\"),\n\t\t\t},\n\t\t\tHttpCheck: \u0026monitoring.UptimeCheckConfigHttpCheckArgs{\n\t\t\t\tPath: pulumi.String(\"some-path\"),\n\t\t\t\tPort: pulumi.Int(8010),\n\t\t\t\tRequestMethod: pulumi.String(\"POST\"),\n\t\t\t\tContentType: pulumi.String(\"USER_PROVIDED\"),\n\t\t\t\tCustomContentType: pulumi.String(\"application/json\"),\n\t\t\t\tBody: pulumi.String(\"Zm9vJTI1M0RiYXI=\"),\n\t\t\t\tPingConfig: \u0026monitoring.UptimeCheckConfigHttpCheckPingConfigArgs{\n\t\t\t\t\tPingsCount: pulumi.Int(1),\n\t\t\t\t},\n\t\t\t},\n\t\t\tMonitoredResource: \u0026monitoring.UptimeCheckConfigMonitoredResourceArgs{\n\t\t\t\tType: pulumi.String(\"uptime_url\"),\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"project_id\": pulumi.String(\"my-project-name\"),\n\t\t\t\t\t\"host\": pulumi.String(\"192.168.1.1\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tContentMatchers: monitoring.UptimeCheckConfigContentMatcherArray{\n\t\t\t\t\u0026monitoring.UptimeCheckConfigContentMatcherArgs{\n\t\t\t\t\tContent: pulumi.String(\"\\\"example\\\"\"),\n\t\t\t\t\tMatcher: pulumi.String(\"MATCHES_JSON_PATH\"),\n\t\t\t\t\tJsonPathMatcher: \u0026monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs{\n\t\t\t\t\t\tJsonPath: pulumi.String(\"$.path\"),\n\t\t\t\t\t\tJsonMatcher: pulumi.String(\"EXACT_MATCH\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCheckerType: pulumi.String(\"STATIC_IP_CHECKERS\"),\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.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckPingConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigMonitoredResourceArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs;\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 http = new UptimeCheckConfig(\"http\", UptimeCheckConfigArgs.builder()\n .displayName(\"http-uptime-check\")\n .timeout(\"60s\")\n .userLabels(Map.of(\"example-key\", \"example-value\"))\n .httpCheck(UptimeCheckConfigHttpCheckArgs.builder()\n .path(\"some-path\")\n .port(\"8010\")\n .requestMethod(\"POST\")\n .contentType(\"USER_PROVIDED\")\n .customContentType(\"application/json\")\n .body(\"Zm9vJTI1M0RiYXI=\")\n .pingConfig(UptimeCheckConfigHttpCheckPingConfigArgs.builder()\n .pingsCount(1)\n .build())\n .build())\n .monitoredResource(UptimeCheckConfigMonitoredResourceArgs.builder()\n .type(\"uptime_url\")\n .labels(Map.ofEntries(\n Map.entry(\"project_id\", \"my-project-name\"),\n Map.entry(\"host\", \"192.168.1.1\")\n ))\n .build())\n .contentMatchers(UptimeCheckConfigContentMatcherArgs.builder()\n .content(\"\\\"example\\\"\")\n .matcher(\"MATCHES_JSON_PATH\")\n .jsonPathMatcher(UptimeCheckConfigContentMatcherJsonPathMatcherArgs.builder()\n .jsonPath(\"$.path\")\n .jsonMatcher(\"EXACT_MATCH\")\n .build())\n .build())\n .checkerType(\"STATIC_IP_CHECKERS\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n http:\n type: gcp:monitoring:UptimeCheckConfig\n properties:\n displayName: http-uptime-check\n timeout: 60s\n userLabels:\n example-key: example-value\n httpCheck:\n path: some-path\n port: '8010'\n requestMethod: POST\n contentType: USER_PROVIDED\n customContentType: application/json\n body: Zm9vJTI1M0RiYXI=\n pingConfig:\n pingsCount: 1\n monitoredResource:\n type: uptime_url\n labels:\n project_id: my-project-name\n host: 192.168.1.1\n contentMatchers:\n - content: '\"example\"'\n matcher: MATCHES_JSON_PATH\n jsonPathMatcher:\n jsonPath: $.path\n jsonMatcher: EXACT_MATCH\n checkerType: STATIC_IP_CHECKERS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Uptime Check Config Status Code\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst statusCode = new gcp.monitoring.UptimeCheckConfig(\"status_code\", {\n displayName: \"http-uptime-check\",\n timeout: \"60s\",\n httpCheck: {\n path: \"some-path\",\n port: 8010,\n requestMethod: \"POST\",\n contentType: \"URL_ENCODED\",\n body: \"Zm9vJTI1M0RiYXI=\",\n acceptedResponseStatusCodes: [\n {\n statusClass: \"STATUS_CLASS_2XX\",\n },\n {\n statusValue: 301,\n },\n {\n statusValue: 302,\n },\n ],\n },\n monitoredResource: {\n type: \"uptime_url\",\n labels: {\n project_id: \"my-project-name\",\n host: \"192.168.1.1\",\n },\n },\n contentMatchers: [{\n content: \"\\\"example\\\"\",\n matcher: \"MATCHES_JSON_PATH\",\n jsonPathMatcher: {\n jsonPath: \"$.path\",\n jsonMatcher: \"EXACT_MATCH\",\n },\n }],\n checkerType: \"STATIC_IP_CHECKERS\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nstatus_code = gcp.monitoring.UptimeCheckConfig(\"status_code\",\n display_name=\"http-uptime-check\",\n timeout=\"60s\",\n http_check={\n \"path\": \"some-path\",\n \"port\": 8010,\n \"request_method\": \"POST\",\n \"content_type\": \"URL_ENCODED\",\n \"body\": \"Zm9vJTI1M0RiYXI=\",\n \"accepted_response_status_codes\": [\n {\n \"status_class\": \"STATUS_CLASS_2XX\",\n },\n {\n \"status_value\": 301,\n },\n {\n \"status_value\": 302,\n },\n ],\n },\n monitored_resource={\n \"type\": \"uptime_url\",\n \"labels\": {\n \"project_id\": \"my-project-name\",\n \"host\": \"192.168.1.1\",\n },\n },\n content_matchers=[{\n \"content\": \"\\\"example\\\"\",\n \"matcher\": \"MATCHES_JSON_PATH\",\n \"json_path_matcher\": {\n \"json_path\": \"$.path\",\n \"json_matcher\": \"EXACT_MATCH\",\n },\n }],\n checker_type=\"STATIC_IP_CHECKERS\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var statusCode = new Gcp.Monitoring.UptimeCheckConfig(\"status_code\", new()\n {\n DisplayName = \"http-uptime-check\",\n Timeout = \"60s\",\n HttpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckArgs\n {\n Path = \"some-path\",\n Port = 8010,\n RequestMethod = \"POST\",\n ContentType = \"URL_ENCODED\",\n Body = \"Zm9vJTI1M0RiYXI=\",\n AcceptedResponseStatusCodes = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs\n {\n StatusClass = \"STATUS_CLASS_2XX\",\n },\n new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs\n {\n StatusValue = 301,\n },\n new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs\n {\n StatusValue = 302,\n },\n },\n },\n MonitoredResource = new Gcp.Monitoring.Inputs.UptimeCheckConfigMonitoredResourceArgs\n {\n Type = \"uptime_url\",\n Labels = \n {\n { \"project_id\", \"my-project-name\" },\n { \"host\", \"192.168.1.1\" },\n },\n },\n ContentMatchers = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherArgs\n {\n Content = \"\\\"example\\\"\",\n Matcher = \"MATCHES_JSON_PATH\",\n JsonPathMatcher = new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs\n {\n JsonPath = \"$.path\",\n JsonMatcher = \"EXACT_MATCH\",\n },\n },\n },\n CheckerType = \"STATIC_IP_CHECKERS\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewUptimeCheckConfig(ctx, \"status_code\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"http-uptime-check\"),\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t\tHttpCheck: \u0026monitoring.UptimeCheckConfigHttpCheckArgs{\n\t\t\t\tPath: pulumi.String(\"some-path\"),\n\t\t\t\tPort: pulumi.Int(8010),\n\t\t\t\tRequestMethod: pulumi.String(\"POST\"),\n\t\t\t\tContentType: pulumi.String(\"URL_ENCODED\"),\n\t\t\t\tBody: pulumi.String(\"Zm9vJTI1M0RiYXI=\"),\n\t\t\t\tAcceptedResponseStatusCodes: monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArray{\n\t\t\t\t\t\u0026monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs{\n\t\t\t\t\t\tStatusClass: pulumi.String(\"STATUS_CLASS_2XX\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs{\n\t\t\t\t\t\tStatusValue: pulumi.Int(301),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs{\n\t\t\t\t\t\tStatusValue: pulumi.Int(302),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMonitoredResource: \u0026monitoring.UptimeCheckConfigMonitoredResourceArgs{\n\t\t\t\tType: pulumi.String(\"uptime_url\"),\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"project_id\": pulumi.String(\"my-project-name\"),\n\t\t\t\t\t\"host\": pulumi.String(\"192.168.1.1\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tContentMatchers: monitoring.UptimeCheckConfigContentMatcherArray{\n\t\t\t\t\u0026monitoring.UptimeCheckConfigContentMatcherArgs{\n\t\t\t\t\tContent: pulumi.String(\"\\\"example\\\"\"),\n\t\t\t\t\tMatcher: pulumi.String(\"MATCHES_JSON_PATH\"),\n\t\t\t\t\tJsonPathMatcher: \u0026monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs{\n\t\t\t\t\t\tJsonPath: pulumi.String(\"$.path\"),\n\t\t\t\t\t\tJsonMatcher: pulumi.String(\"EXACT_MATCH\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tCheckerType: pulumi.String(\"STATIC_IP_CHECKERS\"),\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.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigMonitoredResourceArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs;\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 statusCode = new UptimeCheckConfig(\"statusCode\", UptimeCheckConfigArgs.builder()\n .displayName(\"http-uptime-check\")\n .timeout(\"60s\")\n .httpCheck(UptimeCheckConfigHttpCheckArgs.builder()\n .path(\"some-path\")\n .port(\"8010\")\n .requestMethod(\"POST\")\n .contentType(\"URL_ENCODED\")\n .body(\"Zm9vJTI1M0RiYXI=\")\n .acceptedResponseStatusCodes( \n UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs.builder()\n .statusClass(\"STATUS_CLASS_2XX\")\n .build(),\n UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs.builder()\n .statusValue(301)\n .build(),\n UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs.builder()\n .statusValue(302)\n .build())\n .build())\n .monitoredResource(UptimeCheckConfigMonitoredResourceArgs.builder()\n .type(\"uptime_url\")\n .labels(Map.ofEntries(\n Map.entry(\"project_id\", \"my-project-name\"),\n Map.entry(\"host\", \"192.168.1.1\")\n ))\n .build())\n .contentMatchers(UptimeCheckConfigContentMatcherArgs.builder()\n .content(\"\\\"example\\\"\")\n .matcher(\"MATCHES_JSON_PATH\")\n .jsonPathMatcher(UptimeCheckConfigContentMatcherJsonPathMatcherArgs.builder()\n .jsonPath(\"$.path\")\n .jsonMatcher(\"EXACT_MATCH\")\n .build())\n .build())\n .checkerType(\"STATIC_IP_CHECKERS\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n statusCode:\n type: gcp:monitoring:UptimeCheckConfig\n name: status_code\n properties:\n displayName: http-uptime-check\n timeout: 60s\n httpCheck:\n path: some-path\n port: '8010'\n requestMethod: POST\n contentType: URL_ENCODED\n body: Zm9vJTI1M0RiYXI=\n acceptedResponseStatusCodes:\n - statusClass: STATUS_CLASS_2XX\n - statusValue: 301\n - statusValue: 302\n monitoredResource:\n type: uptime_url\n labels:\n project_id: my-project-name\n host: 192.168.1.1\n contentMatchers:\n - content: '\"example\"'\n matcher: MATCHES_JSON_PATH\n jsonPathMatcher:\n jsonPath: $.path\n jsonMatcher: EXACT_MATCH\n checkerType: STATIC_IP_CHECKERS\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Uptime Check Config Https\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst https = new gcp.monitoring.UptimeCheckConfig(\"https\", {\n displayName: \"https-uptime-check\",\n timeout: \"60s\",\n httpCheck: {\n path: \"/some-path\",\n port: 443,\n useSsl: true,\n validateSsl: true,\n serviceAgentAuthentication: {\n type: \"OIDC_TOKEN\",\n },\n },\n monitoredResource: {\n type: \"uptime_url\",\n labels: {\n project_id: \"my-project-name\",\n host: \"192.168.1.1\",\n },\n },\n contentMatchers: [{\n content: \"example\",\n matcher: \"MATCHES_JSON_PATH\",\n jsonPathMatcher: {\n jsonPath: \"$.path\",\n jsonMatcher: \"REGEX_MATCH\",\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhttps = gcp.monitoring.UptimeCheckConfig(\"https\",\n display_name=\"https-uptime-check\",\n timeout=\"60s\",\n http_check={\n \"path\": \"/some-path\",\n \"port\": 443,\n \"use_ssl\": True,\n \"validate_ssl\": True,\n \"service_agent_authentication\": {\n \"type\": \"OIDC_TOKEN\",\n },\n },\n monitored_resource={\n \"type\": \"uptime_url\",\n \"labels\": {\n \"project_id\": \"my-project-name\",\n \"host\": \"192.168.1.1\",\n },\n },\n content_matchers=[{\n \"content\": \"example\",\n \"matcher\": \"MATCHES_JSON_PATH\",\n \"json_path_matcher\": {\n \"json_path\": \"$.path\",\n \"json_matcher\": \"REGEX_MATCH\",\n },\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var https = new Gcp.Monitoring.UptimeCheckConfig(\"https\", new()\n {\n DisplayName = \"https-uptime-check\",\n Timeout = \"60s\",\n HttpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckArgs\n {\n Path = \"/some-path\",\n Port = 443,\n UseSsl = true,\n ValidateSsl = true,\n ServiceAgentAuthentication = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckServiceAgentAuthenticationArgs\n {\n Type = \"OIDC_TOKEN\",\n },\n },\n MonitoredResource = new Gcp.Monitoring.Inputs.UptimeCheckConfigMonitoredResourceArgs\n {\n Type = \"uptime_url\",\n Labels = \n {\n { \"project_id\", \"my-project-name\" },\n { \"host\", \"192.168.1.1\" },\n },\n },\n ContentMatchers = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherArgs\n {\n Content = \"example\",\n Matcher = \"MATCHES_JSON_PATH\",\n JsonPathMatcher = new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs\n {\n JsonPath = \"$.path\",\n JsonMatcher = \"REGEX_MATCH\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewUptimeCheckConfig(ctx, \"https\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"https-uptime-check\"),\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t\tHttpCheck: \u0026monitoring.UptimeCheckConfigHttpCheckArgs{\n\t\t\t\tPath: pulumi.String(\"/some-path\"),\n\t\t\t\tPort: pulumi.Int(443),\n\t\t\t\tUseSsl: pulumi.Bool(true),\n\t\t\t\tValidateSsl: pulumi.Bool(true),\n\t\t\t\tServiceAgentAuthentication: \u0026monitoring.UptimeCheckConfigHttpCheckServiceAgentAuthenticationArgs{\n\t\t\t\t\tType: pulumi.String(\"OIDC_TOKEN\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tMonitoredResource: \u0026monitoring.UptimeCheckConfigMonitoredResourceArgs{\n\t\t\t\tType: pulumi.String(\"uptime_url\"),\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"project_id\": pulumi.String(\"my-project-name\"),\n\t\t\t\t\t\"host\": pulumi.String(\"192.168.1.1\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tContentMatchers: monitoring.UptimeCheckConfigContentMatcherArray{\n\t\t\t\t\u0026monitoring.UptimeCheckConfigContentMatcherArgs{\n\t\t\t\t\tContent: pulumi.String(\"example\"),\n\t\t\t\t\tMatcher: pulumi.String(\"MATCHES_JSON_PATH\"),\n\t\t\t\t\tJsonPathMatcher: \u0026monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs{\n\t\t\t\t\t\tJsonPath: pulumi.String(\"$.path\"),\n\t\t\t\t\t\tJsonMatcher: pulumi.String(\"REGEX_MATCH\"),\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\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.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckServiceAgentAuthenticationArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigMonitoredResourceArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs;\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 https = new UptimeCheckConfig(\"https\", UptimeCheckConfigArgs.builder()\n .displayName(\"https-uptime-check\")\n .timeout(\"60s\")\n .httpCheck(UptimeCheckConfigHttpCheckArgs.builder()\n .path(\"/some-path\")\n .port(\"443\")\n .useSsl(true)\n .validateSsl(true)\n .serviceAgentAuthentication(UptimeCheckConfigHttpCheckServiceAgentAuthenticationArgs.builder()\n .type(\"OIDC_TOKEN\")\n .build())\n .build())\n .monitoredResource(UptimeCheckConfigMonitoredResourceArgs.builder()\n .type(\"uptime_url\")\n .labels(Map.ofEntries(\n Map.entry(\"project_id\", \"my-project-name\"),\n Map.entry(\"host\", \"192.168.1.1\")\n ))\n .build())\n .contentMatchers(UptimeCheckConfigContentMatcherArgs.builder()\n .content(\"example\")\n .matcher(\"MATCHES_JSON_PATH\")\n .jsonPathMatcher(UptimeCheckConfigContentMatcherJsonPathMatcherArgs.builder()\n .jsonPath(\"$.path\")\n .jsonMatcher(\"REGEX_MATCH\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n https:\n type: gcp:monitoring:UptimeCheckConfig\n properties:\n displayName: https-uptime-check\n timeout: 60s\n httpCheck:\n path: /some-path\n port: '443'\n useSsl: true\n validateSsl: true\n serviceAgentAuthentication:\n type: OIDC_TOKEN\n monitoredResource:\n type: uptime_url\n labels:\n project_id: my-project-name\n host: 192.168.1.1\n contentMatchers:\n - content: example\n matcher: MATCHES_JSON_PATH\n jsonPathMatcher:\n jsonPath: $.path\n jsonMatcher: REGEX_MATCH\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Uptime Check Tcp\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst check = new gcp.monitoring.Group(\"check\", {\n displayName: \"uptime-check-group\",\n filter: \"resource.metadata.name=has_substring(\\\"foo\\\")\",\n});\nconst tcpGroup = new gcp.monitoring.UptimeCheckConfig(\"tcp_group\", {\n displayName: \"tcp-uptime-check\",\n timeout: \"60s\",\n tcpCheck: {\n port: 888,\n pingConfig: {\n pingsCount: 2,\n },\n },\n resourceGroup: {\n resourceType: \"INSTANCE\",\n groupId: check.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncheck = gcp.monitoring.Group(\"check\",\n display_name=\"uptime-check-group\",\n filter=\"resource.metadata.name=has_substring(\\\"foo\\\")\")\ntcp_group = gcp.monitoring.UptimeCheckConfig(\"tcp_group\",\n display_name=\"tcp-uptime-check\",\n timeout=\"60s\",\n tcp_check={\n \"port\": 888,\n \"ping_config\": {\n \"pings_count\": 2,\n },\n },\n resource_group={\n \"resource_type\": \"INSTANCE\",\n \"group_id\": check.name,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var check = new Gcp.Monitoring.Group(\"check\", new()\n {\n DisplayName = \"uptime-check-group\",\n Filter = \"resource.metadata.name=has_substring(\\\"foo\\\")\",\n });\n\n var tcpGroup = new Gcp.Monitoring.UptimeCheckConfig(\"tcp_group\", new()\n {\n DisplayName = \"tcp-uptime-check\",\n Timeout = \"60s\",\n TcpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigTcpCheckArgs\n {\n Port = 888,\n PingConfig = new Gcp.Monitoring.Inputs.UptimeCheckConfigTcpCheckPingConfigArgs\n {\n PingsCount = 2,\n },\n },\n ResourceGroup = new Gcp.Monitoring.Inputs.UptimeCheckConfigResourceGroupArgs\n {\n ResourceType = \"INSTANCE\",\n GroupId = check.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcheck, err := monitoring.NewGroup(ctx, \"check\", \u0026monitoring.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"uptime-check-group\"),\n\t\t\tFilter: pulumi.String(\"resource.metadata.name=has_substring(\\\"foo\\\")\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewUptimeCheckConfig(ctx, \"tcp_group\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"tcp-uptime-check\"),\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t\tTcpCheck: \u0026monitoring.UptimeCheckConfigTcpCheckArgs{\n\t\t\t\tPort: pulumi.Int(888),\n\t\t\t\tPingConfig: \u0026monitoring.UptimeCheckConfigTcpCheckPingConfigArgs{\n\t\t\t\t\tPingsCount: pulumi.Int(2),\n\t\t\t\t},\n\t\t\t},\n\t\t\tResourceGroup: \u0026monitoring.UptimeCheckConfigResourceGroupArgs{\n\t\t\t\tResourceType: pulumi.String(\"INSTANCE\"),\n\t\t\t\tGroupId: check.Name,\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.gcp.monitoring.Group;\nimport com.pulumi.gcp.monitoring.GroupArgs;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigTcpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigTcpCheckPingConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigResourceGroupArgs;\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 check = new Group(\"check\", GroupArgs.builder()\n .displayName(\"uptime-check-group\")\n .filter(\"resource.metadata.name=has_substring(\\\"foo\\\")\")\n .build());\n\n var tcpGroup = new UptimeCheckConfig(\"tcpGroup\", UptimeCheckConfigArgs.builder()\n .displayName(\"tcp-uptime-check\")\n .timeout(\"60s\")\n .tcpCheck(UptimeCheckConfigTcpCheckArgs.builder()\n .port(888)\n .pingConfig(UptimeCheckConfigTcpCheckPingConfigArgs.builder()\n .pingsCount(2)\n .build())\n .build())\n .resourceGroup(UptimeCheckConfigResourceGroupArgs.builder()\n .resourceType(\"INSTANCE\")\n .groupId(check.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tcpGroup:\n type: gcp:monitoring:UptimeCheckConfig\n name: tcp_group\n properties:\n displayName: tcp-uptime-check\n timeout: 60s\n tcpCheck:\n port: 888\n pingConfig:\n pingsCount: 2\n resourceGroup:\n resourceType: INSTANCE\n groupId: ${check.name}\n check:\n type: gcp:monitoring:Group\n properties:\n displayName: uptime-check-group\n filter: resource.metadata.name=has_substring(\"foo\")\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Uptime Check Config Synthetic Monitor\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n name: \"my-project-name-gcf-source\",\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst object = new gcp.storage.BucketObject(\"object\", {\n name: \"function-source.zip\",\n bucket: bucket.name,\n source: new pulumi.asset.FileAsset(\"synthetic-fn-source.zip\"),\n});\nconst _function = new gcp.cloudfunctionsv2.Function(\"function\", {\n name: \"synthetic_function\",\n location: \"us-central1\",\n buildConfig: {\n runtime: \"nodejs16\",\n entryPoint: \"SyntheticFunction\",\n source: {\n storageSource: {\n bucket: bucket.name,\n object: object.name,\n },\n },\n },\n serviceConfig: {\n maxInstanceCount: 1,\n availableMemory: \"256M\",\n timeoutSeconds: 60,\n },\n});\nconst syntheticMonitor = new gcp.monitoring.UptimeCheckConfig(\"synthetic_monitor\", {\n displayName: \"synthetic_monitor\",\n timeout: \"60s\",\n syntheticMonitor: {\n cloudFunctionV2: {\n name: _function.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbucket = gcp.storage.Bucket(\"bucket\",\n name=\"my-project-name-gcf-source\",\n location=\"US\",\n uniform_bucket_level_access=True)\nobject = gcp.storage.BucketObject(\"object\",\n name=\"function-source.zip\",\n bucket=bucket.name,\n source=pulumi.FileAsset(\"synthetic-fn-source.zip\"))\nfunction = gcp.cloudfunctionsv2.Function(\"function\",\n name=\"synthetic_function\",\n location=\"us-central1\",\n build_config={\n \"runtime\": \"nodejs16\",\n \"entry_point\": \"SyntheticFunction\",\n \"source\": {\n \"storage_source\": {\n \"bucket\": bucket.name,\n \"object\": object.name,\n },\n },\n },\n service_config={\n \"max_instance_count\": 1,\n \"available_memory\": \"256M\",\n \"timeout_seconds\": 60,\n })\nsynthetic_monitor = gcp.monitoring.UptimeCheckConfig(\"synthetic_monitor\",\n display_name=\"synthetic_monitor\",\n timeout=\"60s\",\n synthetic_monitor={\n \"cloud_function_v2\": {\n \"name\": function.id,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Name = \"my-project-name-gcf-source\",\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var @object = new Gcp.Storage.BucketObject(\"object\", new()\n {\n Name = \"function-source.zip\",\n Bucket = bucket.Name,\n Source = new FileAsset(\"synthetic-fn-source.zip\"),\n });\n\n var function = new Gcp.CloudFunctionsV2.Function(\"function\", new()\n {\n Name = \"synthetic_function\",\n Location = \"us-central1\",\n BuildConfig = new Gcp.CloudFunctionsV2.Inputs.FunctionBuildConfigArgs\n {\n Runtime = \"nodejs16\",\n EntryPoint = \"SyntheticFunction\",\n Source = new Gcp.CloudFunctionsV2.Inputs.FunctionBuildConfigSourceArgs\n {\n StorageSource = new Gcp.CloudFunctionsV2.Inputs.FunctionBuildConfigSourceStorageSourceArgs\n {\n Bucket = bucket.Name,\n Object = @object.Name,\n },\n },\n },\n ServiceConfig = new Gcp.CloudFunctionsV2.Inputs.FunctionServiceConfigArgs\n {\n MaxInstanceCount = 1,\n AvailableMemory = \"256M\",\n TimeoutSeconds = 60,\n },\n });\n\n var syntheticMonitor = new Gcp.Monitoring.UptimeCheckConfig(\"synthetic_monitor\", new()\n {\n DisplayName = \"synthetic_monitor\",\n Timeout = \"60s\",\n SyntheticMonitor = new Gcp.Monitoring.Inputs.UptimeCheckConfigSyntheticMonitorArgs\n {\n CloudFunctionV2 = new Gcp.Monitoring.Inputs.UptimeCheckConfigSyntheticMonitorCloudFunctionV2Args\n {\n Name = function.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/cloudfunctionsv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"my-project-name-gcf-source\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tobject, err := storage.NewBucketObject(ctx, \"object\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"function-source.zip\"),\n\t\t\tBucket: bucket.Name,\n\t\t\tSource: pulumi.NewFileAsset(\"synthetic-fn-source.zip\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfunction, err := cloudfunctionsv2.NewFunction(ctx, \"function\", \u0026cloudfunctionsv2.FunctionArgs{\n\t\t\tName: pulumi.String(\"synthetic_function\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tBuildConfig: \u0026cloudfunctionsv2.FunctionBuildConfigArgs{\n\t\t\t\tRuntime: pulumi.String(\"nodejs16\"),\n\t\t\t\tEntryPoint: pulumi.String(\"SyntheticFunction\"),\n\t\t\t\tSource: \u0026cloudfunctionsv2.FunctionBuildConfigSourceArgs{\n\t\t\t\t\tStorageSource: \u0026cloudfunctionsv2.FunctionBuildConfigSourceStorageSourceArgs{\n\t\t\t\t\t\tBucket: bucket.Name,\n\t\t\t\t\t\tObject: object.Name,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tServiceConfig: \u0026cloudfunctionsv2.FunctionServiceConfigArgs{\n\t\t\t\tMaxInstanceCount: pulumi.Int(1),\n\t\t\t\tAvailableMemory: pulumi.String(\"256M\"),\n\t\t\t\tTimeoutSeconds: pulumi.Int(60),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewUptimeCheckConfig(ctx, \"synthetic_monitor\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"synthetic_monitor\"),\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t\tSyntheticMonitor: \u0026monitoring.UptimeCheckConfigSyntheticMonitorArgs{\n\t\t\t\tCloudFunctionV2: \u0026monitoring.UptimeCheckConfigSyntheticMonitorCloudFunctionV2Args{\n\t\t\t\t\tName: function.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.cloudfunctionsv2.Function;\nimport com.pulumi.gcp.cloudfunctionsv2.FunctionArgs;\nimport com.pulumi.gcp.cloudfunctionsv2.inputs.FunctionBuildConfigArgs;\nimport com.pulumi.gcp.cloudfunctionsv2.inputs.FunctionBuildConfigSourceArgs;\nimport com.pulumi.gcp.cloudfunctionsv2.inputs.FunctionBuildConfigSourceStorageSourceArgs;\nimport com.pulumi.gcp.cloudfunctionsv2.inputs.FunctionServiceConfigArgs;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigSyntheticMonitorArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigSyntheticMonitorCloudFunctionV2Args;\nimport com.pulumi.asset.FileAsset;\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 bucket = new Bucket(\"bucket\", BucketArgs.builder()\n .name(\"my-project-name-gcf-source\")\n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var object = new BucketObject(\"object\", BucketObjectArgs.builder()\n .name(\"function-source.zip\")\n .bucket(bucket.name())\n .source(new FileAsset(\"synthetic-fn-source.zip\"))\n .build());\n\n var function = new Function(\"function\", FunctionArgs.builder()\n .name(\"synthetic_function\")\n .location(\"us-central1\")\n .buildConfig(FunctionBuildConfigArgs.builder()\n .runtime(\"nodejs16\")\n .entryPoint(\"SyntheticFunction\")\n .source(FunctionBuildConfigSourceArgs.builder()\n .storageSource(FunctionBuildConfigSourceStorageSourceArgs.builder()\n .bucket(bucket.name())\n .object(object.name())\n .build())\n .build())\n .build())\n .serviceConfig(FunctionServiceConfigArgs.builder()\n .maxInstanceCount(1)\n .availableMemory(\"256M\")\n .timeoutSeconds(60)\n .build())\n .build());\n\n var syntheticMonitor = new UptimeCheckConfig(\"syntheticMonitor\", UptimeCheckConfigArgs.builder()\n .displayName(\"synthetic_monitor\")\n .timeout(\"60s\")\n .syntheticMonitor(UptimeCheckConfigSyntheticMonitorArgs.builder()\n .cloudFunctionV2(UptimeCheckConfigSyntheticMonitorCloudFunctionV2Args.builder()\n .name(function.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n bucket:\n type: gcp:storage:Bucket\n properties:\n name: my-project-name-gcf-source\n location: US\n uniformBucketLevelAccess: true\n object:\n type: gcp:storage:BucketObject\n properties:\n name: function-source.zip\n bucket: ${bucket.name}\n source:\n fn::FileAsset: synthetic-fn-source.zip\n function:\n type: gcp:cloudfunctionsv2:Function\n properties:\n name: synthetic_function\n location: us-central1\n buildConfig:\n runtime: nodejs16\n entryPoint: SyntheticFunction\n source:\n storageSource:\n bucket: ${bucket.name}\n object: ${object.name}\n serviceConfig:\n maxInstanceCount: 1\n availableMemory: 256M\n timeoutSeconds: 60\n syntheticMonitor:\n type: gcp:monitoring:UptimeCheckConfig\n name: synthetic_monitor\n properties:\n displayName: synthetic_monitor\n timeout: 60s\n syntheticMonitor:\n cloudFunctionV2:\n name: ${function.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nUptimeCheckConfig can be imported using any of these accepted formats:\n\n* `{{project}}/{{name}}`\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, UptimeCheckConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:monitoring/uptimeCheckConfig:UptimeCheckConfig default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:monitoring/uptimeCheckConfig:UptimeCheckConfig default \"{{project}} {{name}}\"\n```\n\n```sh\n$ pulumi import gcp:monitoring/uptimeCheckConfig:UptimeCheckConfig default {{name}}\n```\n\n", "properties": { "checkerType": { "type": "string", @@ -236815,6 +239725,273 @@ "type": "object" } }, + "gcp:networkmanagement/vpcFlowLogsConfig:VpcFlowLogsConfig": { + "description": "## Example Usage\n\n### Network Management Vpc Flow Logs Config Interconnect Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst network = new gcp.compute.Network(\"network\", {name: \"full-interconnect-test-network\"});\nconst router = new gcp.compute.Router(\"router\", {\n name: \"full-interconnect-test-router\",\n network: network.name,\n bgp: {\n asn: 16550,\n },\n});\nconst attachment = new gcp.compute.InterconnectAttachment(\"attachment\", {\n name: \"full-interconnect-test-id\",\n edgeAvailabilityDomain: \"AVAILABILITY_DOMAIN_1\",\n type: \"PARTNER\",\n router: router.id,\n mtu: \"1500\",\n});\nconst interconnect_test = new gcp.networkmanagement.VpcFlowLogsConfig(\"interconnect-test\", {\n vpcFlowLogsConfigId: \"full-interconnect-test-id\",\n location: \"global\",\n interconnectAttachment: pulumi.all([project, attachment.name]).apply(([project, name]) =\u003e `projects/${project.number}/regions/us-east4/interconnectAttachments/${name}`),\n state: \"ENABLED\",\n aggregationInterval: \"INTERVAL_5_SEC\",\n description: \"VPC Flow Logs over a VPN Gateway.\",\n flowSampling: 0.5,\n metadata: \"INCLUDE_ALL_METADATA\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nnetwork = gcp.compute.Network(\"network\", name=\"full-interconnect-test-network\")\nrouter = gcp.compute.Router(\"router\",\n name=\"full-interconnect-test-router\",\n network=network.name,\n bgp={\n \"asn\": 16550,\n })\nattachment = gcp.compute.InterconnectAttachment(\"attachment\",\n name=\"full-interconnect-test-id\",\n edge_availability_domain=\"AVAILABILITY_DOMAIN_1\",\n type=\"PARTNER\",\n router=router.id,\n mtu=\"1500\")\ninterconnect_test = gcp.networkmanagement.VpcFlowLogsConfig(\"interconnect-test\",\n vpc_flow_logs_config_id=\"full-interconnect-test-id\",\n location=\"global\",\n interconnect_attachment=attachment.name.apply(lambda name: f\"projects/{project.number}/regions/us-east4/interconnectAttachments/{name}\"),\n state=\"ENABLED\",\n aggregation_interval=\"INTERVAL_5_SEC\",\n description=\"VPC Flow Logs over a VPN Gateway.\",\n flow_sampling=0.5,\n metadata=\"INCLUDE_ALL_METADATA\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"full-interconnect-test-network\",\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Name = \"full-interconnect-test-router\",\n Network = network.Name,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 16550,\n },\n });\n\n var attachment = new Gcp.Compute.InterconnectAttachment(\"attachment\", new()\n {\n Name = \"full-interconnect-test-id\",\n EdgeAvailabilityDomain = \"AVAILABILITY_DOMAIN_1\",\n Type = \"PARTNER\",\n Router = router.Id,\n Mtu = \"1500\",\n });\n\n var interconnect_test = new Gcp.NetworkManagement.VpcFlowLogsConfig(\"interconnect-test\", new()\n {\n VpcFlowLogsConfigId = \"full-interconnect-test-id\",\n Location = \"global\",\n InterconnectAttachment = Output.Tuple(project, attachment.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/regions/us-east4/interconnectAttachments/{name}\";\n }),\n State = \"ENABLED\",\n AggregationInterval = \"INTERVAL_5_SEC\",\n Description = \"VPC Flow Logs over a VPN Gateway.\",\n FlowSampling = 0.5,\n Metadata = \"INCLUDE_ALL_METADATA\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkmanagement\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"full-interconnect-test-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter, err := compute.NewRouter(ctx, \"router\", \u0026compute.RouterArgs{\n\t\t\tName: pulumi.String(\"full-interconnect-test-router\"),\n\t\t\tNetwork: network.Name,\n\t\t\tBgp: \u0026compute.RouterBgpArgs{\n\t\t\t\tAsn: pulumi.Int(16550),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tattachment, err := compute.NewInterconnectAttachment(ctx, \"attachment\", \u0026compute.InterconnectAttachmentArgs{\n\t\t\tName: pulumi.String(\"full-interconnect-test-id\"),\n\t\t\tEdgeAvailabilityDomain: pulumi.String(\"AVAILABILITY_DOMAIN_1\"),\n\t\t\tType: pulumi.String(\"PARTNER\"),\n\t\t\tRouter: router.ID(),\n\t\t\tMtu: pulumi.String(\"1500\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkmanagement.NewVpcFlowLogsConfig(ctx, \"interconnect-test\", \u0026networkmanagement.VpcFlowLogsConfigArgs{\n\t\t\tVpcFlowLogsConfigId: pulumi.String(\"full-interconnect-test-id\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tInterconnectAttachment: attachment.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/regions/us-east4/interconnectAttachments/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tState: pulumi.String(\"ENABLED\"),\n\t\t\tAggregationInterval: pulumi.String(\"INTERVAL_5_SEC\"),\n\t\t\tDescription: pulumi.String(\"VPC Flow Logs over a VPN Gateway.\"),\n\t\t\tFlowSampling: pulumi.Float64(0.5),\n\t\t\tMetadata: pulumi.String(\"INCLUDE_ALL_METADATA\"),\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.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Router;\nimport com.pulumi.gcp.compute.RouterArgs;\nimport com.pulumi.gcp.compute.inputs.RouterBgpArgs;\nimport com.pulumi.gcp.compute.InterconnectAttachment;\nimport com.pulumi.gcp.compute.InterconnectAttachmentArgs;\nimport com.pulumi.gcp.networkmanagement.VpcFlowLogsConfig;\nimport com.pulumi.gcp.networkmanagement.VpcFlowLogsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"full-interconnect-test-network\")\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder()\n .name(\"full-interconnect-test-router\")\n .network(network.name())\n .bgp(RouterBgpArgs.builder()\n .asn(16550)\n .build())\n .build());\n\n var attachment = new InterconnectAttachment(\"attachment\", InterconnectAttachmentArgs.builder()\n .name(\"full-interconnect-test-id\")\n .edgeAvailabilityDomain(\"AVAILABILITY_DOMAIN_1\")\n .type(\"PARTNER\")\n .router(router.id())\n .mtu(1500)\n .build());\n\n var interconnect_test = new VpcFlowLogsConfig(\"interconnect-test\", VpcFlowLogsConfigArgs.builder()\n .vpcFlowLogsConfigId(\"full-interconnect-test-id\")\n .location(\"global\")\n .interconnectAttachment(attachment.name().applyValue(name -\u003e String.format(\"projects/%s/regions/us-east4/interconnectAttachments/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .state(\"ENABLED\")\n .aggregationInterval(\"INTERVAL_5_SEC\")\n .description(\"VPC Flow Logs over a VPN Gateway.\")\n .flowSampling(0.5)\n .metadata(\"INCLUDE_ALL_METADATA\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n interconnect-test:\n type: gcp:networkmanagement:VpcFlowLogsConfig\n properties:\n vpcFlowLogsConfigId: full-interconnect-test-id\n location: global\n interconnectAttachment: projects/${project.number}/regions/us-east4/interconnectAttachments/${attachment.name}\n state: ENABLED\n aggregationInterval: INTERVAL_5_SEC\n description: VPC Flow Logs over a VPN Gateway.\n flowSampling: 0.5\n metadata: INCLUDE_ALL_METADATA\n network:\n type: gcp:compute:Network\n properties:\n name: full-interconnect-test-network\n router:\n type: gcp:compute:Router\n properties:\n name: full-interconnect-test-router\n network: ${network.name}\n bgp:\n asn: 16550\n attachment:\n type: gcp:compute:InterconnectAttachment\n properties:\n name: full-interconnect-test-id\n edgeAvailabilityDomain: AVAILABILITY_DOMAIN_1\n type: PARTNER\n router: ${router.id}\n mtu: 1500\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Management Vpc Flow Logs Config Interconnect Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst network = new gcp.compute.Network(\"network\", {name: \"basic-interconnect-test-network\"});\nconst router = new gcp.compute.Router(\"router\", {\n name: \"basic-interconnect-test-router\",\n network: network.name,\n bgp: {\n asn: 16550,\n },\n});\nconst attachment = new gcp.compute.InterconnectAttachment(\"attachment\", {\n name: \"basic-interconnect-test-id\",\n edgeAvailabilityDomain: \"AVAILABILITY_DOMAIN_1\",\n type: \"PARTNER\",\n router: router.id,\n mtu: \"1500\",\n});\nconst interconnect_test = new gcp.networkmanagement.VpcFlowLogsConfig(\"interconnect-test\", {\n vpcFlowLogsConfigId: \"basic-interconnect-test-id\",\n location: \"global\",\n interconnectAttachment: pulumi.all([project, attachment.name]).apply(([project, name]) =\u003e `projects/${project.number}/regions/us-east4/interconnectAttachments/${name}`),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nnetwork = gcp.compute.Network(\"network\", name=\"basic-interconnect-test-network\")\nrouter = gcp.compute.Router(\"router\",\n name=\"basic-interconnect-test-router\",\n network=network.name,\n bgp={\n \"asn\": 16550,\n })\nattachment = gcp.compute.InterconnectAttachment(\"attachment\",\n name=\"basic-interconnect-test-id\",\n edge_availability_domain=\"AVAILABILITY_DOMAIN_1\",\n type=\"PARTNER\",\n router=router.id,\n mtu=\"1500\")\ninterconnect_test = gcp.networkmanagement.VpcFlowLogsConfig(\"interconnect-test\",\n vpc_flow_logs_config_id=\"basic-interconnect-test-id\",\n location=\"global\",\n interconnect_attachment=attachment.name.apply(lambda name: f\"projects/{project.number}/regions/us-east4/interconnectAttachments/{name}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"basic-interconnect-test-network\",\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Name = \"basic-interconnect-test-router\",\n Network = network.Name,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 16550,\n },\n });\n\n var attachment = new Gcp.Compute.InterconnectAttachment(\"attachment\", new()\n {\n Name = \"basic-interconnect-test-id\",\n EdgeAvailabilityDomain = \"AVAILABILITY_DOMAIN_1\",\n Type = \"PARTNER\",\n Router = router.Id,\n Mtu = \"1500\",\n });\n\n var interconnect_test = new Gcp.NetworkManagement.VpcFlowLogsConfig(\"interconnect-test\", new()\n {\n VpcFlowLogsConfigId = \"basic-interconnect-test-id\",\n Location = \"global\",\n InterconnectAttachment = Output.Tuple(project, attachment.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/regions/us-east4/interconnectAttachments/{name}\";\n }),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkmanagement\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"basic-interconnect-test-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter, err := compute.NewRouter(ctx, \"router\", \u0026compute.RouterArgs{\n\t\t\tName: pulumi.String(\"basic-interconnect-test-router\"),\n\t\t\tNetwork: network.Name,\n\t\t\tBgp: \u0026compute.RouterBgpArgs{\n\t\t\t\tAsn: pulumi.Int(16550),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tattachment, err := compute.NewInterconnectAttachment(ctx, \"attachment\", \u0026compute.InterconnectAttachmentArgs{\n\t\t\tName: pulumi.String(\"basic-interconnect-test-id\"),\n\t\t\tEdgeAvailabilityDomain: pulumi.String(\"AVAILABILITY_DOMAIN_1\"),\n\t\t\tType: pulumi.String(\"PARTNER\"),\n\t\t\tRouter: router.ID(),\n\t\t\tMtu: pulumi.String(\"1500\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkmanagement.NewVpcFlowLogsConfig(ctx, \"interconnect-test\", \u0026networkmanagement.VpcFlowLogsConfigArgs{\n\t\t\tVpcFlowLogsConfigId: pulumi.String(\"basic-interconnect-test-id\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tInterconnectAttachment: attachment.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/regions/us-east4/interconnectAttachments/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\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.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Router;\nimport com.pulumi.gcp.compute.RouterArgs;\nimport com.pulumi.gcp.compute.inputs.RouterBgpArgs;\nimport com.pulumi.gcp.compute.InterconnectAttachment;\nimport com.pulumi.gcp.compute.InterconnectAttachmentArgs;\nimport com.pulumi.gcp.networkmanagement.VpcFlowLogsConfig;\nimport com.pulumi.gcp.networkmanagement.VpcFlowLogsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"basic-interconnect-test-network\")\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder()\n .name(\"basic-interconnect-test-router\")\n .network(network.name())\n .bgp(RouterBgpArgs.builder()\n .asn(16550)\n .build())\n .build());\n\n var attachment = new InterconnectAttachment(\"attachment\", InterconnectAttachmentArgs.builder()\n .name(\"basic-interconnect-test-id\")\n .edgeAvailabilityDomain(\"AVAILABILITY_DOMAIN_1\")\n .type(\"PARTNER\")\n .router(router.id())\n .mtu(1500)\n .build());\n\n var interconnect_test = new VpcFlowLogsConfig(\"interconnect-test\", VpcFlowLogsConfigArgs.builder()\n .vpcFlowLogsConfigId(\"basic-interconnect-test-id\")\n .location(\"global\")\n .interconnectAttachment(attachment.name().applyValue(name -\u003e String.format(\"projects/%s/regions/us-east4/interconnectAttachments/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n interconnect-test:\n type: gcp:networkmanagement:VpcFlowLogsConfig\n properties:\n vpcFlowLogsConfigId: basic-interconnect-test-id\n location: global\n interconnectAttachment: projects/${project.number}/regions/us-east4/interconnectAttachments/${attachment.name}\n network:\n type: gcp:compute:Network\n properties:\n name: basic-interconnect-test-network\n router:\n type: gcp:compute:Router\n properties:\n name: basic-interconnect-test-router\n network: ${network.name}\n bgp:\n asn: 16550\n attachment:\n type: gcp:compute:InterconnectAttachment\n properties:\n name: basic-interconnect-test-id\n edgeAvailabilityDomain: AVAILABILITY_DOMAIN_1\n type: PARTNER\n router: ${router.id}\n mtu: 1500\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Management Vpc Flow Logs Config Vpn Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst network = new gcp.compute.Network(\"network\", {name: \"basic-test-network\"});\nconst targetGateway = new gcp.compute.VPNGateway(\"target_gateway\", {\n name: \"basic-test-gateway\",\n network: network.id,\n});\nconst vpnStaticIp = new gcp.compute.Address(\"vpn_static_ip\", {name: \"basic-test-address\"});\nconst frEsp = new gcp.compute.ForwardingRule(\"fr_esp\", {\n name: \"basic-test-fresp\",\n ipProtocol: \"ESP\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n});\nconst frUdp500 = new gcp.compute.ForwardingRule(\"fr_udp500\", {\n name: \"basic-test-fr500\",\n ipProtocol: \"UDP\",\n portRange: \"500\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n});\nconst frUdp4500 = new gcp.compute.ForwardingRule(\"fr_udp4500\", {\n name: \"basic-test-fr4500\",\n ipProtocol: \"UDP\",\n portRange: \"4500\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n});\nconst tunnel = new gcp.compute.VPNTunnel(\"tunnel\", {\n name: \"basic-test-tunnel\",\n peerIp: \"15.0.0.120\",\n sharedSecret: \"a secret message\",\n targetVpnGateway: targetGateway.id,\n}, {\n dependsOn: [\n frEsp,\n frUdp500,\n frUdp4500,\n ],\n});\nconst vpn_test = new gcp.networkmanagement.VpcFlowLogsConfig(\"vpn-test\", {\n vpcFlowLogsConfigId: \"basic-test-id\",\n location: \"global\",\n vpnTunnel: pulumi.all([project, tunnel.name]).apply(([project, name]) =\u003e `projects/${project.number}/regions/us-central1/vpnTunnels/${name}`),\n});\nconst route = new gcp.compute.Route(\"route\", {\n name: \"basic-test-route\",\n network: network.name,\n destRange: \"15.0.0.0/24\",\n priority: 1000,\n nextHopVpnTunnel: tunnel.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nnetwork = gcp.compute.Network(\"network\", name=\"basic-test-network\")\ntarget_gateway = gcp.compute.VPNGateway(\"target_gateway\",\n name=\"basic-test-gateway\",\n network=network.id)\nvpn_static_ip = gcp.compute.Address(\"vpn_static_ip\", name=\"basic-test-address\")\nfr_esp = gcp.compute.ForwardingRule(\"fr_esp\",\n name=\"basic-test-fresp\",\n ip_protocol=\"ESP\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id)\nfr_udp500 = gcp.compute.ForwardingRule(\"fr_udp500\",\n name=\"basic-test-fr500\",\n ip_protocol=\"UDP\",\n port_range=\"500\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id)\nfr_udp4500 = gcp.compute.ForwardingRule(\"fr_udp4500\",\n name=\"basic-test-fr4500\",\n ip_protocol=\"UDP\",\n port_range=\"4500\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id)\ntunnel = gcp.compute.VPNTunnel(\"tunnel\",\n name=\"basic-test-tunnel\",\n peer_ip=\"15.0.0.120\",\n shared_secret=\"a secret message\",\n target_vpn_gateway=target_gateway.id,\n opts = pulumi.ResourceOptions(depends_on=[\n fr_esp,\n fr_udp500,\n fr_udp4500,\n ]))\nvpn_test = gcp.networkmanagement.VpcFlowLogsConfig(\"vpn-test\",\n vpc_flow_logs_config_id=\"basic-test-id\",\n location=\"global\",\n vpn_tunnel=tunnel.name.apply(lambda name: f\"projects/{project.number}/regions/us-central1/vpnTunnels/{name}\"))\nroute = gcp.compute.Route(\"route\",\n name=\"basic-test-route\",\n network=network.name,\n dest_range=\"15.0.0.0/24\",\n priority=1000,\n next_hop_vpn_tunnel=tunnel.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"basic-test-network\",\n });\n\n var targetGateway = new Gcp.Compute.VPNGateway(\"target_gateway\", new()\n {\n Name = \"basic-test-gateway\",\n Network = network.Id,\n });\n\n var vpnStaticIp = new Gcp.Compute.Address(\"vpn_static_ip\", new()\n {\n Name = \"basic-test-address\",\n });\n\n var frEsp = new Gcp.Compute.ForwardingRule(\"fr_esp\", new()\n {\n Name = \"basic-test-fresp\",\n IpProtocol = \"ESP\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n });\n\n var frUdp500 = new Gcp.Compute.ForwardingRule(\"fr_udp500\", new()\n {\n Name = \"basic-test-fr500\",\n IpProtocol = \"UDP\",\n PortRange = \"500\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n });\n\n var frUdp4500 = new Gcp.Compute.ForwardingRule(\"fr_udp4500\", new()\n {\n Name = \"basic-test-fr4500\",\n IpProtocol = \"UDP\",\n PortRange = \"4500\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n });\n\n var tunnel = new Gcp.Compute.VPNTunnel(\"tunnel\", new()\n {\n Name = \"basic-test-tunnel\",\n PeerIp = \"15.0.0.120\",\n SharedSecret = \"a secret message\",\n TargetVpnGateway = targetGateway.Id,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n frEsp,\n frUdp500,\n frUdp4500,\n },\n });\n\n var vpn_test = new Gcp.NetworkManagement.VpcFlowLogsConfig(\"vpn-test\", new()\n {\n VpcFlowLogsConfigId = \"basic-test-id\",\n Location = \"global\",\n VpnTunnel = Output.Tuple(project, tunnel.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/regions/us-central1/vpnTunnels/{name}\";\n }),\n });\n\n var route = new Gcp.Compute.Route(\"route\", new()\n {\n Name = \"basic-test-route\",\n Network = network.Name,\n DestRange = \"15.0.0.0/24\",\n Priority = 1000,\n NextHopVpnTunnel = tunnel.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkmanagement\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"basic-test-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttargetGateway, err := compute.NewVPNGateway(ctx, \"target_gateway\", \u0026compute.VPNGatewayArgs{\n\t\t\tName: pulumi.String(\"basic-test-gateway\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvpnStaticIp, err := compute.NewAddress(ctx, \"vpn_static_ip\", \u0026compute.AddressArgs{\n\t\t\tName: pulumi.String(\"basic-test-address\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrEsp, err := compute.NewForwardingRule(ctx, \"fr_esp\", \u0026compute.ForwardingRuleArgs{\n\t\t\tName: pulumi.String(\"basic-test-fresp\"),\n\t\t\tIpProtocol: pulumi.String(\"ESP\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrUdp500, err := compute.NewForwardingRule(ctx, \"fr_udp500\", \u0026compute.ForwardingRuleArgs{\n\t\t\tName: pulumi.String(\"basic-test-fr500\"),\n\t\t\tIpProtocol: pulumi.String(\"UDP\"),\n\t\t\tPortRange: pulumi.String(\"500\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrUdp4500, err := compute.NewForwardingRule(ctx, \"fr_udp4500\", \u0026compute.ForwardingRuleArgs{\n\t\t\tName: pulumi.String(\"basic-test-fr4500\"),\n\t\t\tIpProtocol: pulumi.String(\"UDP\"),\n\t\t\tPortRange: pulumi.String(\"4500\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttunnel, err := compute.NewVPNTunnel(ctx, \"tunnel\", \u0026compute.VPNTunnelArgs{\n\t\t\tName: pulumi.String(\"basic-test-tunnel\"),\n\t\t\tPeerIp: pulumi.String(\"15.0.0.120\"),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tTargetVpnGateway: targetGateway.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfrEsp,\n\t\t\tfrUdp500,\n\t\t\tfrUdp4500,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkmanagement.NewVpcFlowLogsConfig(ctx, \"vpn-test\", \u0026networkmanagement.VpcFlowLogsConfigArgs{\n\t\t\tVpcFlowLogsConfigId: pulumi.String(\"basic-test-id\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tVpnTunnel: tunnel.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/regions/us-central1/vpnTunnels/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRoute(ctx, \"route\", \u0026compute.RouteArgs{\n\t\t\tName: pulumi.String(\"basic-test-route\"),\n\t\t\tNetwork: network.Name,\n\t\t\tDestRange: pulumi.String(\"15.0.0.0/24\"),\n\t\t\tPriority: pulumi.Int(1000),\n\t\t\tNextHopVpnTunnel: tunnel.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.VPNGateway;\nimport com.pulumi.gcp.compute.VPNGatewayArgs;\nimport com.pulumi.gcp.compute.Address;\nimport com.pulumi.gcp.compute.AddressArgs;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.compute.VPNTunnel;\nimport com.pulumi.gcp.compute.VPNTunnelArgs;\nimport com.pulumi.gcp.networkmanagement.VpcFlowLogsConfig;\nimport com.pulumi.gcp.networkmanagement.VpcFlowLogsConfigArgs;\nimport com.pulumi.gcp.compute.Route;\nimport com.pulumi.gcp.compute.RouteArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"basic-test-network\")\n .build());\n\n var targetGateway = new VPNGateway(\"targetGateway\", VPNGatewayArgs.builder()\n .name(\"basic-test-gateway\")\n .network(network.id())\n .build());\n\n var vpnStaticIp = new Address(\"vpnStaticIp\", AddressArgs.builder()\n .name(\"basic-test-address\")\n .build());\n\n var frEsp = new ForwardingRule(\"frEsp\", ForwardingRuleArgs.builder()\n .name(\"basic-test-fresp\")\n .ipProtocol(\"ESP\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build());\n\n var frUdp500 = new ForwardingRule(\"frUdp500\", ForwardingRuleArgs.builder()\n .name(\"basic-test-fr500\")\n .ipProtocol(\"UDP\")\n .portRange(\"500\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build());\n\n var frUdp4500 = new ForwardingRule(\"frUdp4500\", ForwardingRuleArgs.builder()\n .name(\"basic-test-fr4500\")\n .ipProtocol(\"UDP\")\n .portRange(\"4500\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build());\n\n var tunnel = new VPNTunnel(\"tunnel\", VPNTunnelArgs.builder()\n .name(\"basic-test-tunnel\")\n .peerIp(\"15.0.0.120\")\n .sharedSecret(\"a secret message\")\n .targetVpnGateway(targetGateway.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n frEsp,\n frUdp500,\n frUdp4500)\n .build());\n\n var vpn_test = new VpcFlowLogsConfig(\"vpn-test\", VpcFlowLogsConfigArgs.builder()\n .vpcFlowLogsConfigId(\"basic-test-id\")\n .location(\"global\")\n .vpnTunnel(tunnel.name().applyValue(name -\u003e String.format(\"projects/%s/regions/us-central1/vpnTunnels/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .build());\n\n var route = new Route(\"route\", RouteArgs.builder()\n .name(\"basic-test-route\")\n .network(network.name())\n .destRange(\"15.0.0.0/24\")\n .priority(1000)\n .nextHopVpnTunnel(tunnel.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n vpn-test:\n type: gcp:networkmanagement:VpcFlowLogsConfig\n properties:\n vpcFlowLogsConfigId: basic-test-id\n location: global\n vpnTunnel: projects/${project.number}/regions/us-central1/vpnTunnels/${tunnel.name}\n tunnel:\n type: gcp:compute:VPNTunnel\n properties:\n name: basic-test-tunnel\n peerIp: 15.0.0.120\n sharedSecret: a secret message\n targetVpnGateway: ${targetGateway.id}\n options:\n dependson:\n - ${frEsp}\n - ${frUdp500}\n - ${frUdp4500}\n targetGateway:\n type: gcp:compute:VPNGateway\n name: target_gateway\n properties:\n name: basic-test-gateway\n network: ${network.id}\n network:\n type: gcp:compute:Network\n properties:\n name: basic-test-network\n vpnStaticIp:\n type: gcp:compute:Address\n name: vpn_static_ip\n properties:\n name: basic-test-address\n frEsp:\n type: gcp:compute:ForwardingRule\n name: fr_esp\n properties:\n name: basic-test-fresp\n ipProtocol: ESP\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n frUdp500:\n type: gcp:compute:ForwardingRule\n name: fr_udp500\n properties:\n name: basic-test-fr500\n ipProtocol: UDP\n portRange: '500'\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n frUdp4500:\n type: gcp:compute:ForwardingRule\n name: fr_udp4500\n properties:\n name: basic-test-fr4500\n ipProtocol: UDP\n portRange: '4500'\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n route:\n type: gcp:compute:Route\n properties:\n name: basic-test-route\n network: ${network.name}\n destRange: 15.0.0.0/24\n priority: 1000\n nextHopVpnTunnel: ${tunnel.id}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Management Vpc Flow Logs Config Vpn Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst network = new gcp.compute.Network(\"network\", {name: \"full-test-network\"});\nconst targetGateway = new gcp.compute.VPNGateway(\"target_gateway\", {\n name: \"full-test-gateway\",\n network: network.id,\n});\nconst vpnStaticIp = new gcp.compute.Address(\"vpn_static_ip\", {name: \"full-test-address\"});\nconst frEsp = new gcp.compute.ForwardingRule(\"fr_esp\", {\n name: \"full-test-fresp\",\n ipProtocol: \"ESP\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n});\nconst frUdp500 = new gcp.compute.ForwardingRule(\"fr_udp500\", {\n name: \"full-test-fr500\",\n ipProtocol: \"UDP\",\n portRange: \"500\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n});\nconst frUdp4500 = new gcp.compute.ForwardingRule(\"fr_udp4500\", {\n name: \"full-test-fr4500\",\n ipProtocol: \"UDP\",\n portRange: \"4500\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n});\nconst tunnel = new gcp.compute.VPNTunnel(\"tunnel\", {\n name: \"full-test-tunnel\",\n peerIp: \"15.0.0.120\",\n sharedSecret: \"a secret message\",\n targetVpnGateway: targetGateway.id,\n}, {\n dependsOn: [\n frEsp,\n frUdp500,\n frUdp4500,\n ],\n});\nconst vpn_test = new gcp.networkmanagement.VpcFlowLogsConfig(\"vpn-test\", {\n vpcFlowLogsConfigId: \"full-test-id\",\n location: \"global\",\n vpnTunnel: pulumi.all([project, tunnel.name]).apply(([project, name]) =\u003e `projects/${project.number}/regions/us-central1/vpnTunnels/${name}`),\n state: \"ENABLED\",\n aggregationInterval: \"INTERVAL_5_SEC\",\n description: \"VPC Flow Logs over a VPN Gateway.\",\n flowSampling: 0.5,\n metadata: \"INCLUDE_ALL_METADATA\",\n});\nconst route = new gcp.compute.Route(\"route\", {\n name: \"full-test-route\",\n network: network.name,\n destRange: \"15.0.0.0/24\",\n priority: 1000,\n nextHopVpnTunnel: tunnel.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nnetwork = gcp.compute.Network(\"network\", name=\"full-test-network\")\ntarget_gateway = gcp.compute.VPNGateway(\"target_gateway\",\n name=\"full-test-gateway\",\n network=network.id)\nvpn_static_ip = gcp.compute.Address(\"vpn_static_ip\", name=\"full-test-address\")\nfr_esp = gcp.compute.ForwardingRule(\"fr_esp\",\n name=\"full-test-fresp\",\n ip_protocol=\"ESP\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id)\nfr_udp500 = gcp.compute.ForwardingRule(\"fr_udp500\",\n name=\"full-test-fr500\",\n ip_protocol=\"UDP\",\n port_range=\"500\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id)\nfr_udp4500 = gcp.compute.ForwardingRule(\"fr_udp4500\",\n name=\"full-test-fr4500\",\n ip_protocol=\"UDP\",\n port_range=\"4500\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id)\ntunnel = gcp.compute.VPNTunnel(\"tunnel\",\n name=\"full-test-tunnel\",\n peer_ip=\"15.0.0.120\",\n shared_secret=\"a secret message\",\n target_vpn_gateway=target_gateway.id,\n opts = pulumi.ResourceOptions(depends_on=[\n fr_esp,\n fr_udp500,\n fr_udp4500,\n ]))\nvpn_test = gcp.networkmanagement.VpcFlowLogsConfig(\"vpn-test\",\n vpc_flow_logs_config_id=\"full-test-id\",\n location=\"global\",\n vpn_tunnel=tunnel.name.apply(lambda name: f\"projects/{project.number}/regions/us-central1/vpnTunnels/{name}\"),\n state=\"ENABLED\",\n aggregation_interval=\"INTERVAL_5_SEC\",\n description=\"VPC Flow Logs over a VPN Gateway.\",\n flow_sampling=0.5,\n metadata=\"INCLUDE_ALL_METADATA\")\nroute = gcp.compute.Route(\"route\",\n name=\"full-test-route\",\n network=network.name,\n dest_range=\"15.0.0.0/24\",\n priority=1000,\n next_hop_vpn_tunnel=tunnel.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Name = \"full-test-network\",\n });\n\n var targetGateway = new Gcp.Compute.VPNGateway(\"target_gateway\", new()\n {\n Name = \"full-test-gateway\",\n Network = network.Id,\n });\n\n var vpnStaticIp = new Gcp.Compute.Address(\"vpn_static_ip\", new()\n {\n Name = \"full-test-address\",\n });\n\n var frEsp = new Gcp.Compute.ForwardingRule(\"fr_esp\", new()\n {\n Name = \"full-test-fresp\",\n IpProtocol = \"ESP\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n });\n\n var frUdp500 = new Gcp.Compute.ForwardingRule(\"fr_udp500\", new()\n {\n Name = \"full-test-fr500\",\n IpProtocol = \"UDP\",\n PortRange = \"500\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n });\n\n var frUdp4500 = new Gcp.Compute.ForwardingRule(\"fr_udp4500\", new()\n {\n Name = \"full-test-fr4500\",\n IpProtocol = \"UDP\",\n PortRange = \"4500\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n });\n\n var tunnel = new Gcp.Compute.VPNTunnel(\"tunnel\", new()\n {\n Name = \"full-test-tunnel\",\n PeerIp = \"15.0.0.120\",\n SharedSecret = \"a secret message\",\n TargetVpnGateway = targetGateway.Id,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n frEsp,\n frUdp500,\n frUdp4500,\n },\n });\n\n var vpn_test = new Gcp.NetworkManagement.VpcFlowLogsConfig(\"vpn-test\", new()\n {\n VpcFlowLogsConfigId = \"full-test-id\",\n Location = \"global\",\n VpnTunnel = Output.Tuple(project, tunnel.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/regions/us-central1/vpnTunnels/{name}\";\n }),\n State = \"ENABLED\",\n AggregationInterval = \"INTERVAL_5_SEC\",\n Description = \"VPC Flow Logs over a VPN Gateway.\",\n FlowSampling = 0.5,\n Metadata = \"INCLUDE_ALL_METADATA\",\n });\n\n var route = new Gcp.Compute.Route(\"route\", new()\n {\n Name = \"full-test-route\",\n Network = network.Name,\n DestRange = \"15.0.0.0/24\",\n Priority = 1000,\n NextHopVpnTunnel = tunnel.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkmanagement\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"full-test-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttargetGateway, err := compute.NewVPNGateway(ctx, \"target_gateway\", \u0026compute.VPNGatewayArgs{\n\t\t\tName: pulumi.String(\"full-test-gateway\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvpnStaticIp, err := compute.NewAddress(ctx, \"vpn_static_ip\", \u0026compute.AddressArgs{\n\t\t\tName: pulumi.String(\"full-test-address\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrEsp, err := compute.NewForwardingRule(ctx, \"fr_esp\", \u0026compute.ForwardingRuleArgs{\n\t\t\tName: pulumi.String(\"full-test-fresp\"),\n\t\t\tIpProtocol: pulumi.String(\"ESP\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrUdp500, err := compute.NewForwardingRule(ctx, \"fr_udp500\", \u0026compute.ForwardingRuleArgs{\n\t\t\tName: pulumi.String(\"full-test-fr500\"),\n\t\t\tIpProtocol: pulumi.String(\"UDP\"),\n\t\t\tPortRange: pulumi.String(\"500\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrUdp4500, err := compute.NewForwardingRule(ctx, \"fr_udp4500\", \u0026compute.ForwardingRuleArgs{\n\t\t\tName: pulumi.String(\"full-test-fr4500\"),\n\t\t\tIpProtocol: pulumi.String(\"UDP\"),\n\t\t\tPortRange: pulumi.String(\"4500\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttunnel, err := compute.NewVPNTunnel(ctx, \"tunnel\", \u0026compute.VPNTunnelArgs{\n\t\t\tName: pulumi.String(\"full-test-tunnel\"),\n\t\t\tPeerIp: pulumi.String(\"15.0.0.120\"),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tTargetVpnGateway: targetGateway.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfrEsp,\n\t\t\tfrUdp500,\n\t\t\tfrUdp4500,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = networkmanagement.NewVpcFlowLogsConfig(ctx, \"vpn-test\", \u0026networkmanagement.VpcFlowLogsConfigArgs{\n\t\t\tVpcFlowLogsConfigId: pulumi.String(\"full-test-id\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tVpnTunnel: tunnel.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/regions/us-central1/vpnTunnels/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tState: pulumi.String(\"ENABLED\"),\n\t\t\tAggregationInterval: pulumi.String(\"INTERVAL_5_SEC\"),\n\t\t\tDescription: pulumi.String(\"VPC Flow Logs over a VPN Gateway.\"),\n\t\t\tFlowSampling: pulumi.Float64(0.5),\n\t\t\tMetadata: pulumi.String(\"INCLUDE_ALL_METADATA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRoute(ctx, \"route\", \u0026compute.RouteArgs{\n\t\t\tName: pulumi.String(\"full-test-route\"),\n\t\t\tNetwork: network.Name,\n\t\t\tDestRange: pulumi.String(\"15.0.0.0/24\"),\n\t\t\tPriority: pulumi.Int(1000),\n\t\t\tNextHopVpnTunnel: tunnel.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.VPNGateway;\nimport com.pulumi.gcp.compute.VPNGatewayArgs;\nimport com.pulumi.gcp.compute.Address;\nimport com.pulumi.gcp.compute.AddressArgs;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.compute.VPNTunnel;\nimport com.pulumi.gcp.compute.VPNTunnelArgs;\nimport com.pulumi.gcp.networkmanagement.VpcFlowLogsConfig;\nimport com.pulumi.gcp.networkmanagement.VpcFlowLogsConfigArgs;\nimport com.pulumi.gcp.compute.Route;\nimport com.pulumi.gcp.compute.RouteArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var network = new Network(\"network\", NetworkArgs.builder()\n .name(\"full-test-network\")\n .build());\n\n var targetGateway = new VPNGateway(\"targetGateway\", VPNGatewayArgs.builder()\n .name(\"full-test-gateway\")\n .network(network.id())\n .build());\n\n var vpnStaticIp = new Address(\"vpnStaticIp\", AddressArgs.builder()\n .name(\"full-test-address\")\n .build());\n\n var frEsp = new ForwardingRule(\"frEsp\", ForwardingRuleArgs.builder()\n .name(\"full-test-fresp\")\n .ipProtocol(\"ESP\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build());\n\n var frUdp500 = new ForwardingRule(\"frUdp500\", ForwardingRuleArgs.builder()\n .name(\"full-test-fr500\")\n .ipProtocol(\"UDP\")\n .portRange(\"500\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build());\n\n var frUdp4500 = new ForwardingRule(\"frUdp4500\", ForwardingRuleArgs.builder()\n .name(\"full-test-fr4500\")\n .ipProtocol(\"UDP\")\n .portRange(\"4500\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build());\n\n var tunnel = new VPNTunnel(\"tunnel\", VPNTunnelArgs.builder()\n .name(\"full-test-tunnel\")\n .peerIp(\"15.0.0.120\")\n .sharedSecret(\"a secret message\")\n .targetVpnGateway(targetGateway.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n frEsp,\n frUdp500,\n frUdp4500)\n .build());\n\n var vpn_test = new VpcFlowLogsConfig(\"vpn-test\", VpcFlowLogsConfigArgs.builder()\n .vpcFlowLogsConfigId(\"full-test-id\")\n .location(\"global\")\n .vpnTunnel(tunnel.name().applyValue(name -\u003e String.format(\"projects/%s/regions/us-central1/vpnTunnels/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .state(\"ENABLED\")\n .aggregationInterval(\"INTERVAL_5_SEC\")\n .description(\"VPC Flow Logs over a VPN Gateway.\")\n .flowSampling(0.5)\n .metadata(\"INCLUDE_ALL_METADATA\")\n .build());\n\n var route = new Route(\"route\", RouteArgs.builder()\n .name(\"full-test-route\")\n .network(network.name())\n .destRange(\"15.0.0.0/24\")\n .priority(1000)\n .nextHopVpnTunnel(tunnel.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n vpn-test:\n type: gcp:networkmanagement:VpcFlowLogsConfig\n properties:\n vpcFlowLogsConfigId: full-test-id\n location: global\n vpnTunnel: projects/${project.number}/regions/us-central1/vpnTunnels/${tunnel.name}\n state: ENABLED\n aggregationInterval: INTERVAL_5_SEC\n description: VPC Flow Logs over a VPN Gateway.\n flowSampling: 0.5\n metadata: INCLUDE_ALL_METADATA\n tunnel:\n type: gcp:compute:VPNTunnel\n properties:\n name: full-test-tunnel\n peerIp: 15.0.0.120\n sharedSecret: a secret message\n targetVpnGateway: ${targetGateway.id}\n options:\n dependson:\n - ${frEsp}\n - ${frUdp500}\n - ${frUdp4500}\n targetGateway:\n type: gcp:compute:VPNGateway\n name: target_gateway\n properties:\n name: full-test-gateway\n network: ${network.id}\n network:\n type: gcp:compute:Network\n properties:\n name: full-test-network\n vpnStaticIp:\n type: gcp:compute:Address\n name: vpn_static_ip\n properties:\n name: full-test-address\n frEsp:\n type: gcp:compute:ForwardingRule\n name: fr_esp\n properties:\n name: full-test-fresp\n ipProtocol: ESP\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n frUdp500:\n type: gcp:compute:ForwardingRule\n name: fr_udp500\n properties:\n name: full-test-fr500\n ipProtocol: UDP\n portRange: '500'\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n frUdp4500:\n type: gcp:compute:ForwardingRule\n name: fr_udp4500\n properties:\n name: full-test-fr4500\n ipProtocol: UDP\n portRange: '4500'\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n route:\n type: gcp:compute:Route\n properties:\n name: full-test-route\n network: ${network.name}\n destRange: 15.0.0.0/24\n priority: 1000\n nextHopVpnTunnel: ${tunnel.id}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nVpcFlowLogsConfig can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/vpcFlowLogsConfigs/{{vpc_flow_logs_config_id}}`\n\n* `{{project}}/{{location}}/{{vpc_flow_logs_config_id}}`\n\n* `{{location}}/{{vpc_flow_logs_config_id}}`\n\nWhen using the `pulumi import` command, VpcFlowLogsConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networkmanagement/vpcFlowLogsConfig:VpcFlowLogsConfig default projects/{{project}}/locations/{{location}}/vpcFlowLogsConfigs/{{vpc_flow_logs_config_id}}\n```\n\n```sh\n$ pulumi import gcp:networkmanagement/vpcFlowLogsConfig:VpcFlowLogsConfig default {{project}}/{{location}}/{{vpc_flow_logs_config_id}}\n```\n\n```sh\n$ pulumi import gcp:networkmanagement/vpcFlowLogsConfig:VpcFlowLogsConfig default {{location}}/{{vpc_flow_logs_config_id}}\n```\n\n", + "properties": { + "aggregationInterval": { + "type": "string", + "description": "Optional. The aggregation interval for the logs. Default value is\nINTERVAL_5_SEC. Possible values: AGGREGATION_INTERVAL_UNSPECIFIED INTERVAL_5_SEC INTERVAL_30_SEC INTERVAL_1_MIN INTERVAL_5_MIN INTERVAL_10_MIN INTERVAL_15_MIN\"\n" + }, + "createTime": { + "type": "string", + "description": "Output only. The time the config was created.\n" + }, + "description": { + "type": "string", + "description": "Optional. The user-supplied description of the VPC Flow Logs configuration. Maximum\nof 512 characters.\n" + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "filterExpr": { + "type": "string", + "description": "Optional. Export filter used to define which VPC Flow Logs should be logged.\n" + }, + "flowSampling": { + "type": "number", + "description": "Optional. The value of the field must be in (0, 1]. The sampling rate\nof VPC Flow Logs where 1.0 means all collected logs are reported. Setting the\nsampling rate to 0.0 is not allowed. If you want to disable VPC Flow Logs, use\nthe state field instead. Default value is 1.0.\n" + }, + "interconnectAttachment": { + "type": "string", + "description": "Traffic will be logged from the Interconnect Attachment. Format: projects/{project_id}/regions/{region}/interconnectAttachments/{name}\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional. Resource labels to represent user-provided metadata.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "Resource ID segment making up resource `name`. It identifies the resource\nwithin its parent collection as described in https://google.aip.dev/122. See documentation\nfor resource type `networkmanagement.googleapis.com/VpcFlowLogsConfig`.\n" + }, + "metadata": { + "type": "string", + "description": "Optional. Configures whether all, none or a subset of metadata fields\nshould be added to the reported VPC flow logs. Default value is INCLUDE_ALL_METADATA.\nPossible values: METADATA_UNSPECIFIED INCLUDE_ALL_METADATA EXCLUDE_ALL_METADATA CUSTOM_METADATA\n" + }, + "metadataFields": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Optional. Custom metadata fields to include in the reported VPC flow\nlogs. Can only be specified if \\\"metadata\\\" was set to CUSTOM_METADATA.\n" + }, + "name": { + "type": "string", + "description": "Identifier. Unique name of the configuration using the form: `projects/{project_id}/locations/global/vpcFlowLogsConfigs/{vpc_flow_logs_config_id}`\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n" + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "state": { + "type": "string", + "description": "Optional. The state of the VPC Flow Log configuration. Default value\nis ENABLED. When creating a new configuration, it must be enabled. Possible\n" + }, + "updateTime": { + "type": "string", + "description": "Output only. The time the config was updated.\n" + }, + "vpcFlowLogsConfigId": { + "type": "string", + "description": "Required. ID of the `VpcFlowLogsConfig`.\n\n\n- - -\n" + }, + "vpnTunnel": { + "type": "string", + "description": "Traffic will be logged from the VPN Tunnel. Format: projects/{project_id}/regions/{region}/vpnTunnels/{name}\n" + } + }, + "required": [ + "aggregationInterval", + "createTime", + "effectiveLabels", + "flowSampling", + "location", + "metadata", + "name", + "project", + "state", + "pulumiLabels", + "updateTime", + "vpcFlowLogsConfigId" + ], + "inputProperties": { + "aggregationInterval": { + "type": "string", + "description": "Optional. The aggregation interval for the logs. Default value is\nINTERVAL_5_SEC. Possible values: AGGREGATION_INTERVAL_UNSPECIFIED INTERVAL_5_SEC INTERVAL_30_SEC INTERVAL_1_MIN INTERVAL_5_MIN INTERVAL_10_MIN INTERVAL_15_MIN\"\n" + }, + "description": { + "type": "string", + "description": "Optional. The user-supplied description of the VPC Flow Logs configuration. Maximum\nof 512 characters.\n" + }, + "filterExpr": { + "type": "string", + "description": "Optional. Export filter used to define which VPC Flow Logs should be logged.\n" + }, + "flowSampling": { + "type": "number", + "description": "Optional. The value of the field must be in (0, 1]. The sampling rate\nof VPC Flow Logs where 1.0 means all collected logs are reported. Setting the\nsampling rate to 0.0 is not allowed. If you want to disable VPC Flow Logs, use\nthe state field instead. Default value is 1.0.\n" + }, + "interconnectAttachment": { + "type": "string", + "description": "Traffic will be logged from the Interconnect Attachment. Format: projects/{project_id}/regions/{region}/interconnectAttachments/{name}\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional. Resource labels to represent user-provided metadata.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "Resource ID segment making up resource `name`. It identifies the resource\nwithin its parent collection as described in https://google.aip.dev/122. See documentation\nfor resource type `networkmanagement.googleapis.com/VpcFlowLogsConfig`.\n", + "willReplaceOnChanges": true + }, + "metadata": { + "type": "string", + "description": "Optional. Configures whether all, none or a subset of metadata fields\nshould be added to the reported VPC flow logs. Default value is INCLUDE_ALL_METADATA.\nPossible values: METADATA_UNSPECIFIED INCLUDE_ALL_METADATA EXCLUDE_ALL_METADATA CUSTOM_METADATA\n" + }, + "metadataFields": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Optional. Custom metadata fields to include in the reported VPC flow\nlogs. Can only be specified if \\\"metadata\\\" was set to CUSTOM_METADATA.\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "state": { + "type": "string", + "description": "Optional. The state of the VPC Flow Log configuration. Default value\nis ENABLED. When creating a new configuration, it must be enabled. Possible\n" + }, + "vpcFlowLogsConfigId": { + "type": "string", + "description": "Required. ID of the `VpcFlowLogsConfig`.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "vpnTunnel": { + "type": "string", + "description": "Traffic will be logged from the VPN Tunnel. Format: projects/{project_id}/regions/{region}/vpnTunnels/{name}\n" + } + }, + "requiredInputs": [ + "location", + "vpcFlowLogsConfigId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering VpcFlowLogsConfig resources.\n", + "properties": { + "aggregationInterval": { + "type": "string", + "description": "Optional. The aggregation interval for the logs. Default value is\nINTERVAL_5_SEC. Possible values: AGGREGATION_INTERVAL_UNSPECIFIED INTERVAL_5_SEC INTERVAL_30_SEC INTERVAL_1_MIN INTERVAL_5_MIN INTERVAL_10_MIN INTERVAL_15_MIN\"\n" + }, + "createTime": { + "type": "string", + "description": "Output only. The time the config was created.\n" + }, + "description": { + "type": "string", + "description": "Optional. The user-supplied description of the VPC Flow Logs configuration. Maximum\nof 512 characters.\n" + }, + "effectiveLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.\n", + "secret": true + }, + "filterExpr": { + "type": "string", + "description": "Optional. Export filter used to define which VPC Flow Logs should be logged.\n" + }, + "flowSampling": { + "type": "number", + "description": "Optional. The value of the field must be in (0, 1]. The sampling rate\nof VPC Flow Logs where 1.0 means all collected logs are reported. Setting the\nsampling rate to 0.0 is not allowed. If you want to disable VPC Flow Logs, use\nthe state field instead. Default value is 1.0.\n" + }, + "interconnectAttachment": { + "type": "string", + "description": "Traffic will be logged from the Interconnect Attachment. Format: projects/{project_id}/regions/{region}/interconnectAttachments/{name}\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Optional. Resource labels to represent user-provided metadata.\n\n**Note**: This field is non-authoritative, and will only manage the labels present in your configuration.\nPlease refer to the field `effective_labels` for all of the labels present on the resource.\n" + }, + "location": { + "type": "string", + "description": "Resource ID segment making up resource `name`. It identifies the resource\nwithin its parent collection as described in https://google.aip.dev/122. See documentation\nfor resource type `networkmanagement.googleapis.com/VpcFlowLogsConfig`.\n", + "willReplaceOnChanges": true + }, + "metadata": { + "type": "string", + "description": "Optional. Configures whether all, none or a subset of metadata fields\nshould be added to the reported VPC flow logs. Default value is INCLUDE_ALL_METADATA.\nPossible values: METADATA_UNSPECIFIED INCLUDE_ALL_METADATA EXCLUDE_ALL_METADATA CUSTOM_METADATA\n" + }, + "metadataFields": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Optional. Custom metadata fields to include in the reported VPC flow\nlogs. Can only be specified if \\\"metadata\\\" was set to CUSTOM_METADATA.\n" + }, + "name": { + "type": "string", + "description": "Identifier. Unique name of the configuration using the form: `projects/{project_id}/locations/global/vpcFlowLogsConfigs/{vpc_flow_logs_config_id}`\n" + }, + "project": { + "type": "string", + "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", + "willReplaceOnChanges": true + }, + "pulumiLabels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "The combination of labels configured directly on the resource\nand default labels configured on the provider.\n", + "secret": true + }, + "state": { + "type": "string", + "description": "Optional. The state of the VPC Flow Log configuration. Default value\nis ENABLED. When creating a new configuration, it must be enabled. Possible\n" + }, + "updateTime": { + "type": "string", + "description": "Output only. The time the config was updated.\n" + }, + "vpcFlowLogsConfigId": { + "type": "string", + "description": "Required. ID of the `VpcFlowLogsConfig`.\n\n\n- - -\n", + "willReplaceOnChanges": true + }, + "vpnTunnel": { + "type": "string", + "description": "Traffic will be logged from the VPN Tunnel. Format: projects/{project_id}/regions/{region}/vpnTunnels/{name}\n" + } + }, + "type": "object" + } + }, "gcp:networksecurity/addressGroup:AddressGroup": { "description": "AddressGroup is a resource that specifies how a collection of IP/DNS used in Firewall Policy.\n\n\nTo get more information about AddressGroup, see:\n\n* [API documentation](https://cloud.google.com/traffic-director/docs/reference/network-security/rest/v1beta1/organizations.locations.addressGroups)\n* How-to Guides\n * [Use AddressGroups](https://cloud.google.com/vpc/docs/use-address-groups-firewall-policies)\n\n## Example Usage\n\n### Network Security Address Groups Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.networksecurity.AddressGroup(\"default\", {\n name: \"my-address-groups\",\n parent: \"projects/my-project-name\",\n location: \"us-central1\",\n type: \"IPV4\",\n capacity: 100,\n items: [\"208.80.154.224/32\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.networksecurity.AddressGroup(\"default\",\n name=\"my-address-groups\",\n parent=\"projects/my-project-name\",\n location=\"us-central1\",\n type=\"IPV4\",\n capacity=100,\n items=[\"208.80.154.224/32\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.NetworkSecurity.AddressGroup(\"default\", new()\n {\n Name = \"my-address-groups\",\n Parent = \"projects/my-project-name\",\n Location = \"us-central1\",\n Type = \"IPV4\",\n Capacity = 100,\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networksecurity.NewAddressGroup(ctx, \"default\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"my-address-groups\"),\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\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.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\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 default_ = new AddressGroup(\"default\", AddressGroupArgs.builder()\n .name(\"my-address-groups\")\n .parent(\"projects/my-project-name\")\n .location(\"us-central1\")\n .type(\"IPV4\")\n .capacity(\"100\")\n .items(\"208.80.154.224/32\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:networksecurity:AddressGroup\n properties:\n name: my-address-groups\n parent: projects/my-project-name\n location: us-central1\n type: IPV4\n capacity: '100'\n items:\n - 208.80.154.224/32\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Security Address Groups Organization Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.networksecurity.AddressGroup(\"default\", {\n name: \"my-address-groups\",\n parent: \"organizations/123456789\",\n location: \"us-central1\",\n type: \"IPV4\",\n capacity: 100,\n items: [\"208.80.154.224/32\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.networksecurity.AddressGroup(\"default\",\n name=\"my-address-groups\",\n parent=\"organizations/123456789\",\n location=\"us-central1\",\n type=\"IPV4\",\n capacity=100,\n items=[\"208.80.154.224/32\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.NetworkSecurity.AddressGroup(\"default\", new()\n {\n Name = \"my-address-groups\",\n Parent = \"organizations/123456789\",\n Location = \"us-central1\",\n Type = \"IPV4\",\n Capacity = 100,\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networksecurity.NewAddressGroup(ctx, \"default\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"my-address-groups\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\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.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\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 default_ = new AddressGroup(\"default\", AddressGroupArgs.builder()\n .name(\"my-address-groups\")\n .parent(\"organizations/123456789\")\n .location(\"us-central1\")\n .type(\"IPV4\")\n .capacity(\"100\")\n .items(\"208.80.154.224/32\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:networksecurity:AddressGroup\n properties:\n name: my-address-groups\n parent: organizations/123456789\n location: us-central1\n type: IPV4\n capacity: '100'\n items:\n - 208.80.154.224/32\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Security Address Groups Advanced\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.networksecurity.AddressGroup(\"default\", {\n name: \"my-address-groups\",\n parent: \"projects/my-project-name\",\n location: \"us-central1\",\n description: \"my description\",\n type: \"IPV4\",\n capacity: 100,\n items: [\"208.80.154.224/32\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.networksecurity.AddressGroup(\"default\",\n name=\"my-address-groups\",\n parent=\"projects/my-project-name\",\n location=\"us-central1\",\n description=\"my description\",\n type=\"IPV4\",\n capacity=100,\n items=[\"208.80.154.224/32\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.NetworkSecurity.AddressGroup(\"default\", new()\n {\n Name = \"my-address-groups\",\n Parent = \"projects/my-project-name\",\n Location = \"us-central1\",\n Description = \"my description\",\n Type = \"IPV4\",\n Capacity = 100,\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networksecurity.NewAddressGroup(ctx, \"default\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"my-address-groups\"),\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"my description\"),\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\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.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\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 default_ = new AddressGroup(\"default\", AddressGroupArgs.builder()\n .name(\"my-address-groups\")\n .parent(\"projects/my-project-name\")\n .location(\"us-central1\")\n .description(\"my description\")\n .type(\"IPV4\")\n .capacity(\"100\")\n .items(\"208.80.154.224/32\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:networksecurity:AddressGroup\n properties:\n name: my-address-groups\n parent: projects/my-project-name\n location: us-central1\n description: my description\n type: IPV4\n capacity: '100'\n items:\n - 208.80.154.224/32\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Network Security Address Groups Cloud Armor\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.networksecurity.AddressGroup(\"default\", {\n name: \"my-address-groups\",\n parent: \"projects/my-project-name\",\n location: \"global\",\n type: \"IPV4\",\n capacity: 100,\n purposes: [\"CLOUD_ARMOR\"],\n items: [\"208.80.154.224/32\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.networksecurity.AddressGroup(\"default\",\n name=\"my-address-groups\",\n parent=\"projects/my-project-name\",\n location=\"global\",\n type=\"IPV4\",\n capacity=100,\n purposes=[\"CLOUD_ARMOR\"],\n items=[\"208.80.154.224/32\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.NetworkSecurity.AddressGroup(\"default\", new()\n {\n Name = \"my-address-groups\",\n Parent = \"projects/my-project-name\",\n Location = \"global\",\n Type = \"IPV4\",\n Capacity = 100,\n Purposes = new[]\n {\n \"CLOUD_ARMOR\",\n },\n Items = new[]\n {\n \"208.80.154.224/32\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networksecurity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := networksecurity.NewAddressGroup(ctx, \"default\", \u0026networksecurity.AddressGroupArgs{\n\t\t\tName: pulumi.String(\"my-address-groups\"),\n\t\t\tParent: pulumi.String(\"projects/my-project-name\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tType: pulumi.String(\"IPV4\"),\n\t\t\tCapacity: pulumi.Int(100),\n\t\t\tPurposes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"CLOUD_ARMOR\"),\n\t\t\t},\n\t\t\tItems: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"208.80.154.224/32\"),\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.gcp.networksecurity.AddressGroup;\nimport com.pulumi.gcp.networksecurity.AddressGroupArgs;\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 default_ = new AddressGroup(\"default\", AddressGroupArgs.builder()\n .name(\"my-address-groups\")\n .parent(\"projects/my-project-name\")\n .location(\"global\")\n .type(\"IPV4\")\n .capacity(\"100\")\n .purposes(\"CLOUD_ARMOR\")\n .items(\"208.80.154.224/32\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:networksecurity:AddressGroup\n properties:\n name: my-address-groups\n parent: projects/my-project-name\n location: global\n type: IPV4\n capacity: '100'\n purposes:\n - CLOUD_ARMOR\n items:\n - 208.80.154.224/32\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nAddressGroup can be imported using any of these accepted formats:\n\n* `{{parent}}/locations/{{location}}/addressGroups/{{name}}`\n\nWhen using the `pulumi import` command, AddressGroup can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:networksecurity/addressGroup:AddressGroup default {{parent}}/locations/{{location}}/addressGroups/{{name}}\n```\n\n", "properties": { @@ -245952,7 +249129,7 @@ } }, "gcp:osconfig/patchDeployment:PatchDeployment": { - "description": "Patch deployments are configurations that individual patch jobs use to complete a patch.\nThese configurations include instance filter, package repository settings, and a schedule.\n\n\nTo get more information about PatchDeployment, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/osconfig/rest)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/os-patch-management)\n\n## Example Usage\n\n### Os Config Patch Deployment Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst patch = new gcp.osconfig.PatchDeployment(\"patch\", {\n patchDeploymentId: \"patch-deploy\",\n instanceFilter: {\n all: true,\n },\n oneTimeSchedule: {\n executeTime: \"2999-10-10T10:10:10.045123456Z\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npatch = gcp.osconfig.PatchDeployment(\"patch\",\n patch_deployment_id=\"patch-deploy\",\n instance_filter={\n \"all\": True,\n },\n one_time_schedule={\n \"execute_time\": \"2999-10-10T10:10:10.045123456Z\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var patch = new Gcp.OsConfig.PatchDeployment(\"patch\", new()\n {\n PatchDeploymentId = \"patch-deploy\",\n InstanceFilter = new Gcp.OsConfig.Inputs.PatchDeploymentInstanceFilterArgs\n {\n All = true,\n },\n OneTimeSchedule = new Gcp.OsConfig.Inputs.PatchDeploymentOneTimeScheduleArgs\n {\n ExecuteTime = \"2999-10-10T10:10:10.045123456Z\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := osconfig.NewPatchDeployment(ctx, \"patch\", \u0026osconfig.PatchDeploymentArgs{\n\t\t\tPatchDeploymentId: pulumi.String(\"patch-deploy\"),\n\t\t\tInstanceFilter: \u0026osconfig.PatchDeploymentInstanceFilterArgs{\n\t\t\t\tAll: pulumi.Bool(true),\n\t\t\t},\n\t\t\tOneTimeSchedule: \u0026osconfig.PatchDeploymentOneTimeScheduleArgs{\n\t\t\t\tExecuteTime: pulumi.String(\"2999-10-10T10:10:10.045123456Z\"),\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.gcp.osconfig.PatchDeployment;\nimport com.pulumi.gcp.osconfig.PatchDeploymentArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentInstanceFilterArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentOneTimeScheduleArgs;\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 patch = new PatchDeployment(\"patch\", PatchDeploymentArgs.builder()\n .patchDeploymentId(\"patch-deploy\")\n .instanceFilter(PatchDeploymentInstanceFilterArgs.builder()\n .all(true)\n .build())\n .oneTimeSchedule(PatchDeploymentOneTimeScheduleArgs.builder()\n .executeTime(\"2999-10-10T10:10:10.045123456Z\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n patch:\n type: gcp:osconfig:PatchDeployment\n properties:\n patchDeploymentId: patch-deploy\n instanceFilter:\n all: true\n oneTimeSchedule:\n executeTime: 2999-10-10T10:10:10.045123456Z\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Os Config Patch Deployment Daily\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst patch = new gcp.osconfig.PatchDeployment(\"patch\", {\n patchDeploymentId: \"patch-deploy\",\n instanceFilter: {\n all: true,\n },\n recurringSchedule: {\n timeZone: {\n id: \"America/New_York\",\n },\n timeOfDay: {\n hours: 0,\n minutes: 30,\n seconds: 30,\n nanos: 20,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npatch = gcp.osconfig.PatchDeployment(\"patch\",\n patch_deployment_id=\"patch-deploy\",\n instance_filter={\n \"all\": True,\n },\n recurring_schedule={\n \"time_zone\": {\n \"id\": \"America/New_York\",\n },\n \"time_of_day\": {\n \"hours\": 0,\n \"minutes\": 30,\n \"seconds\": 30,\n \"nanos\": 20,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var patch = new Gcp.OsConfig.PatchDeployment(\"patch\", new()\n {\n PatchDeploymentId = \"patch-deploy\",\n InstanceFilter = new Gcp.OsConfig.Inputs.PatchDeploymentInstanceFilterArgs\n {\n All = true,\n },\n RecurringSchedule = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleArgs\n {\n TimeZone = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeZoneArgs\n {\n Id = \"America/New_York\",\n },\n TimeOfDay = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs\n {\n Hours = 0,\n Minutes = 30,\n Seconds = 30,\n Nanos = 20,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := osconfig.NewPatchDeployment(ctx, \"patch\", \u0026osconfig.PatchDeploymentArgs{\n\t\t\tPatchDeploymentId: pulumi.String(\"patch-deploy\"),\n\t\t\tInstanceFilter: \u0026osconfig.PatchDeploymentInstanceFilterArgs{\n\t\t\t\tAll: pulumi.Bool(true),\n\t\t\t},\n\t\t\tRecurringSchedule: \u0026osconfig.PatchDeploymentRecurringScheduleArgs{\n\t\t\t\tTimeZone: \u0026osconfig.PatchDeploymentRecurringScheduleTimeZoneArgs{\n\t\t\t\t\tId: pulumi.String(\"America/New_York\"),\n\t\t\t\t},\n\t\t\t\tTimeOfDay: \u0026osconfig.PatchDeploymentRecurringScheduleTimeOfDayArgs{\n\t\t\t\t\tHours: pulumi.Int(0),\n\t\t\t\t\tMinutes: pulumi.Int(30),\n\t\t\t\t\tSeconds: pulumi.Int(30),\n\t\t\t\t\tNanos: pulumi.Int(20),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.osconfig.PatchDeployment;\nimport com.pulumi.gcp.osconfig.PatchDeploymentArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentInstanceFilterArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeZoneArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs;\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 patch = new PatchDeployment(\"patch\", PatchDeploymentArgs.builder()\n .patchDeploymentId(\"patch-deploy\")\n .instanceFilter(PatchDeploymentInstanceFilterArgs.builder()\n .all(true)\n .build())\n .recurringSchedule(PatchDeploymentRecurringScheduleArgs.builder()\n .timeZone(PatchDeploymentRecurringScheduleTimeZoneArgs.builder()\n .id(\"America/New_York\")\n .build())\n .timeOfDay(PatchDeploymentRecurringScheduleTimeOfDayArgs.builder()\n .hours(0)\n .minutes(30)\n .seconds(30)\n .nanos(20)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n patch:\n type: gcp:osconfig:PatchDeployment\n properties:\n patchDeploymentId: patch-deploy\n instanceFilter:\n all: true\n recurringSchedule:\n timeZone:\n id: America/New_York\n timeOfDay:\n hours: 0\n minutes: 30\n seconds: 30\n nanos: 20\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Os Config Patch Deployment Daily Midnight\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst patch = new gcp.osconfig.PatchDeployment(\"patch\", {\n patchDeploymentId: \"patch-deploy\",\n instanceFilter: {\n all: true,\n },\n recurringSchedule: {\n timeZone: {\n id: \"America/New_York\",\n },\n timeOfDay: {\n hours: 0,\n minutes: 0,\n seconds: 0,\n nanos: 0,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npatch = gcp.osconfig.PatchDeployment(\"patch\",\n patch_deployment_id=\"patch-deploy\",\n instance_filter={\n \"all\": True,\n },\n recurring_schedule={\n \"time_zone\": {\n \"id\": \"America/New_York\",\n },\n \"time_of_day\": {\n \"hours\": 0,\n \"minutes\": 0,\n \"seconds\": 0,\n \"nanos\": 0,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var patch = new Gcp.OsConfig.PatchDeployment(\"patch\", new()\n {\n PatchDeploymentId = \"patch-deploy\",\n InstanceFilter = new Gcp.OsConfig.Inputs.PatchDeploymentInstanceFilterArgs\n {\n All = true,\n },\n RecurringSchedule = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleArgs\n {\n TimeZone = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeZoneArgs\n {\n Id = \"America/New_York\",\n },\n TimeOfDay = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs\n {\n Hours = 0,\n Minutes = 0,\n Seconds = 0,\n Nanos = 0,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := osconfig.NewPatchDeployment(ctx, \"patch\", \u0026osconfig.PatchDeploymentArgs{\n\t\t\tPatchDeploymentId: pulumi.String(\"patch-deploy\"),\n\t\t\tInstanceFilter: \u0026osconfig.PatchDeploymentInstanceFilterArgs{\n\t\t\t\tAll: pulumi.Bool(true),\n\t\t\t},\n\t\t\tRecurringSchedule: \u0026osconfig.PatchDeploymentRecurringScheduleArgs{\n\t\t\t\tTimeZone: \u0026osconfig.PatchDeploymentRecurringScheduleTimeZoneArgs{\n\t\t\t\t\tId: pulumi.String(\"America/New_York\"),\n\t\t\t\t},\n\t\t\t\tTimeOfDay: \u0026osconfig.PatchDeploymentRecurringScheduleTimeOfDayArgs{\n\t\t\t\t\tHours: pulumi.Int(0),\n\t\t\t\t\tMinutes: pulumi.Int(0),\n\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.osconfig.PatchDeployment;\nimport com.pulumi.gcp.osconfig.PatchDeploymentArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentInstanceFilterArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeZoneArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs;\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 patch = new PatchDeployment(\"patch\", PatchDeploymentArgs.builder()\n .patchDeploymentId(\"patch-deploy\")\n .instanceFilter(PatchDeploymentInstanceFilterArgs.builder()\n .all(true)\n .build())\n .recurringSchedule(PatchDeploymentRecurringScheduleArgs.builder()\n .timeZone(PatchDeploymentRecurringScheduleTimeZoneArgs.builder()\n .id(\"America/New_York\")\n .build())\n .timeOfDay(PatchDeploymentRecurringScheduleTimeOfDayArgs.builder()\n .hours(0)\n .minutes(0)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n patch:\n type: gcp:osconfig:PatchDeployment\n properties:\n patchDeploymentId: patch-deploy\n instanceFilter:\n all: true\n recurringSchedule:\n timeZone:\n id: America/New_York\n timeOfDay:\n hours: 0\n minutes: 0\n seconds: 0\n nanos: 0\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Os Config Patch Deployment Instance\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myImage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst foobar = new gcp.compute.Instance(\"foobar\", {\n name: \"patch-deploy-inst\",\n machineType: \"e2-medium\",\n zone: \"us-central1-a\",\n canIpForward: false,\n tags: [\n \"foo\",\n \"bar\",\n ],\n bootDisk: {\n initializeParams: {\n image: myImage.then(myImage =\u003e myImage.selfLink),\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n metadata: {\n foo: \"bar\",\n },\n});\nconst patch = new gcp.osconfig.PatchDeployment(\"patch\", {\n patchDeploymentId: \"patch-deploy\",\n instanceFilter: {\n instances: [foobar.id],\n },\n patchConfig: {\n yum: {\n security: true,\n minimal: true,\n excludes: [\"bash\"],\n },\n },\n recurringSchedule: {\n timeZone: {\n id: \"America/New_York\",\n },\n timeOfDay: {\n hours: 0,\n minutes: 30,\n seconds: 30,\n nanos: 20,\n },\n monthly: {\n monthDay: 1,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_image = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\nfoobar = gcp.compute.Instance(\"foobar\",\n name=\"patch-deploy-inst\",\n machine_type=\"e2-medium\",\n zone=\"us-central1-a\",\n can_ip_forward=False,\n tags=[\n \"foo\",\n \"bar\",\n ],\n boot_disk={\n \"initialize_params\": {\n \"image\": my_image.self_link,\n },\n },\n network_interfaces=[{\n \"network\": \"default\",\n }],\n metadata={\n \"foo\": \"bar\",\n })\npatch = gcp.osconfig.PatchDeployment(\"patch\",\n patch_deployment_id=\"patch-deploy\",\n instance_filter={\n \"instances\": [foobar.id],\n },\n patch_config={\n \"yum\": {\n \"security\": True,\n \"minimal\": True,\n \"excludes\": [\"bash\"],\n },\n },\n recurring_schedule={\n \"time_zone\": {\n \"id\": \"America/New_York\",\n },\n \"time_of_day\": {\n \"hours\": 0,\n \"minutes\": 30,\n \"seconds\": 30,\n \"nanos\": 20,\n },\n \"monthly\": {\n \"month_day\": 1,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myImage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var foobar = new Gcp.Compute.Instance(\"foobar\", new()\n {\n Name = \"patch-deploy-inst\",\n MachineType = \"e2-medium\",\n Zone = \"us-central1-a\",\n CanIpForward = false,\n Tags = new[]\n {\n \"foo\",\n \"bar\",\n },\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = myImage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n Metadata = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n var patch = new Gcp.OsConfig.PatchDeployment(\"patch\", new()\n {\n PatchDeploymentId = \"patch-deploy\",\n InstanceFilter = new Gcp.OsConfig.Inputs.PatchDeploymentInstanceFilterArgs\n {\n Instances = new[]\n {\n foobar.Id,\n },\n },\n PatchConfig = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigArgs\n {\n Yum = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigYumArgs\n {\n Security = true,\n Minimal = true,\n Excludes = new[]\n {\n \"bash\",\n },\n },\n },\n RecurringSchedule = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleArgs\n {\n TimeZone = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeZoneArgs\n {\n Id = \"America/New_York\",\n },\n TimeOfDay = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs\n {\n Hours = 0,\n Minutes = 30,\n Seconds = 30,\n Nanos = 20,\n },\n Monthly = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleMonthlyArgs\n {\n MonthDay = 1,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyImage, err := compute.LookupImage(ctx, \u0026compute.LookupImageArgs{\n\t\t\tFamily: pulumi.StringRef(\"debian-11\"),\n\t\t\tProject: pulumi.StringRef(\"debian-cloud\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfoobar, err := compute.NewInstance(ctx, \"foobar\", \u0026compute.InstanceArgs{\n\t\t\tName: pulumi.String(\"patch-deploy-inst\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tCanIpForward: pulumi.Bool(false),\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"foo\"),\n\t\t\t\tpulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(myImage.SelfLink),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceNetworkInterfaceArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = osconfig.NewPatchDeployment(ctx, \"patch\", \u0026osconfig.PatchDeploymentArgs{\n\t\t\tPatchDeploymentId: pulumi.String(\"patch-deploy\"),\n\t\t\tInstanceFilter: \u0026osconfig.PatchDeploymentInstanceFilterArgs{\n\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\tfoobar.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPatchConfig: \u0026osconfig.PatchDeploymentPatchConfigArgs{\n\t\t\t\tYum: \u0026osconfig.PatchDeploymentPatchConfigYumArgs{\n\t\t\t\t\tSecurity: pulumi.Bool(true),\n\t\t\t\t\tMinimal: pulumi.Bool(true),\n\t\t\t\t\tExcludes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"bash\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tRecurringSchedule: \u0026osconfig.PatchDeploymentRecurringScheduleArgs{\n\t\t\t\tTimeZone: \u0026osconfig.PatchDeploymentRecurringScheduleTimeZoneArgs{\n\t\t\t\t\tId: pulumi.String(\"America/New_York\"),\n\t\t\t\t},\n\t\t\t\tTimeOfDay: \u0026osconfig.PatchDeploymentRecurringScheduleTimeOfDayArgs{\n\t\t\t\t\tHours: pulumi.Int(0),\n\t\t\t\t\tMinutes: pulumi.Int(30),\n\t\t\t\t\tSeconds: pulumi.Int(30),\n\t\t\t\t\tNanos: pulumi.Int(20),\n\t\t\t\t},\n\t\t\t\tMonthly: \u0026osconfig.PatchDeploymentRecurringScheduleMonthlyArgs{\n\t\t\t\t\tMonthDay: pulumi.Int(1),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.osconfig.PatchDeployment;\nimport com.pulumi.gcp.osconfig.PatchDeploymentArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentInstanceFilterArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigYumArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeZoneArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleMonthlyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var myImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var foobar = new Instance(\"foobar\", InstanceArgs.builder()\n .name(\"patch-deploy-inst\")\n .machineType(\"e2-medium\")\n .zone(\"us-central1-a\")\n .canIpForward(false)\n .tags( \n \"foo\",\n \"bar\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(myImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .metadata(Map.of(\"foo\", \"bar\"))\n .build());\n\n var patch = new PatchDeployment(\"patch\", PatchDeploymentArgs.builder()\n .patchDeploymentId(\"patch-deploy\")\n .instanceFilter(PatchDeploymentInstanceFilterArgs.builder()\n .instances(foobar.id())\n .build())\n .patchConfig(PatchDeploymentPatchConfigArgs.builder()\n .yum(PatchDeploymentPatchConfigYumArgs.builder()\n .security(true)\n .minimal(true)\n .excludes(\"bash\")\n .build())\n .build())\n .recurringSchedule(PatchDeploymentRecurringScheduleArgs.builder()\n .timeZone(PatchDeploymentRecurringScheduleTimeZoneArgs.builder()\n .id(\"America/New_York\")\n .build())\n .timeOfDay(PatchDeploymentRecurringScheduleTimeOfDayArgs.builder()\n .hours(0)\n .minutes(30)\n .seconds(30)\n .nanos(20)\n .build())\n .monthly(PatchDeploymentRecurringScheduleMonthlyArgs.builder()\n .monthDay(1)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n foobar:\n type: gcp:compute:Instance\n properties:\n name: patch-deploy-inst\n machineType: e2-medium\n zone: us-central1-a\n canIpForward: false\n tags:\n - foo\n - bar\n bootDisk:\n initializeParams:\n image: ${myImage.selfLink}\n networkInterfaces:\n - network: default\n metadata:\n foo: bar\n patch:\n type: gcp:osconfig:PatchDeployment\n properties:\n patchDeploymentId: patch-deploy\n instanceFilter:\n instances:\n - ${foobar.id}\n patchConfig:\n yum:\n security: true\n minimal: true\n excludes:\n - bash\n recurringSchedule:\n timeZone:\n id: America/New_York\n timeOfDay:\n hours: 0\n minutes: 30\n seconds: 30\n nanos: 20\n monthly:\n monthDay: 1\nvariables:\n myImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Os Config Patch Deployment Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst patch = new gcp.osconfig.PatchDeployment(\"patch\", {\n patchDeploymentId: \"patch-deploy\",\n instanceFilter: {\n groupLabels: [{\n labels: {\n env: \"dev\",\n app: \"web\",\n },\n }],\n instanceNamePrefixes: [\"test-\"],\n zones: [\n \"us-central1-a\",\n \"us-central-1c\",\n ],\n },\n patchConfig: {\n migInstancesAllowed: true,\n rebootConfig: \"ALWAYS\",\n apt: {\n type: \"DIST\",\n excludes: [\"python\"],\n },\n yum: {\n security: true,\n minimal: true,\n excludes: [\"bash\"],\n },\n goo: {\n enabled: true,\n },\n zypper: {\n categories: [\"security\"],\n },\n windowsUpdate: {\n classifications: [\n \"CRITICAL\",\n \"SECURITY\",\n \"UPDATE\",\n ],\n excludes: [\"5012170\"],\n },\n preStep: {\n linuxExecStepConfig: {\n allowedSuccessCodes: [\n 0,\n 3,\n ],\n localPath: \"/tmp/pre_patch_script.sh\",\n },\n windowsExecStepConfig: {\n interpreter: \"SHELL\",\n allowedSuccessCodes: [\n 0,\n 2,\n ],\n localPath: \"C:\\\\Users\\\\user\\\\pre-patch-script.cmd\",\n },\n },\n postStep: {\n linuxExecStepConfig: {\n gcsObject: {\n bucket: \"my-patch-scripts\",\n generationNumber: \"1523477886880\",\n object: \"linux/post_patch_script\",\n },\n },\n windowsExecStepConfig: {\n interpreter: \"POWERSHELL\",\n gcsObject: {\n bucket: \"my-patch-scripts\",\n generationNumber: \"135920493447\",\n object: \"windows/post_patch_script.ps1\",\n },\n },\n },\n },\n duration: \"10s\",\n recurringSchedule: {\n timeZone: {\n id: \"America/New_York\",\n },\n timeOfDay: {\n hours: 0,\n minutes: 30,\n seconds: 30,\n nanos: 20,\n },\n monthly: {\n weekDayOfMonth: {\n weekOrdinal: -1,\n dayOfWeek: \"TUESDAY\",\n dayOffset: 3,\n },\n },\n },\n rollout: {\n mode: \"ZONE_BY_ZONE\",\n disruptionBudget: {\n fixed: 1,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npatch = gcp.osconfig.PatchDeployment(\"patch\",\n patch_deployment_id=\"patch-deploy\",\n instance_filter={\n \"group_labels\": [{\n \"labels\": {\n \"env\": \"dev\",\n \"app\": \"web\",\n },\n }],\n \"instance_name_prefixes\": [\"test-\"],\n \"zones\": [\n \"us-central1-a\",\n \"us-central-1c\",\n ],\n },\n patch_config={\n \"mig_instances_allowed\": True,\n \"reboot_config\": \"ALWAYS\",\n \"apt\": {\n \"type\": \"DIST\",\n \"excludes\": [\"python\"],\n },\n \"yum\": {\n \"security\": True,\n \"minimal\": True,\n \"excludes\": [\"bash\"],\n },\n \"goo\": {\n \"enabled\": True,\n },\n \"zypper\": {\n \"categories\": [\"security\"],\n },\n \"windows_update\": {\n \"classifications\": [\n \"CRITICAL\",\n \"SECURITY\",\n \"UPDATE\",\n ],\n \"excludes\": [\"5012170\"],\n },\n \"pre_step\": {\n \"linux_exec_step_config\": {\n \"allowed_success_codes\": [\n 0,\n 3,\n ],\n \"local_path\": \"/tmp/pre_patch_script.sh\",\n },\n \"windows_exec_step_config\": {\n \"interpreter\": \"SHELL\",\n \"allowed_success_codes\": [\n 0,\n 2,\n ],\n \"local_path\": \"C:\\\\Users\\\\user\\\\pre-patch-script.cmd\",\n },\n },\n \"post_step\": {\n \"linux_exec_step_config\": {\n \"gcs_object\": {\n \"bucket\": \"my-patch-scripts\",\n \"generation_number\": \"1523477886880\",\n \"object\": \"linux/post_patch_script\",\n },\n },\n \"windows_exec_step_config\": {\n \"interpreter\": \"POWERSHELL\",\n \"gcs_object\": {\n \"bucket\": \"my-patch-scripts\",\n \"generation_number\": \"135920493447\",\n \"object\": \"windows/post_patch_script.ps1\",\n },\n },\n },\n },\n duration=\"10s\",\n recurring_schedule={\n \"time_zone\": {\n \"id\": \"America/New_York\",\n },\n \"time_of_day\": {\n \"hours\": 0,\n \"minutes\": 30,\n \"seconds\": 30,\n \"nanos\": 20,\n },\n \"monthly\": {\n \"week_day_of_month\": {\n \"week_ordinal\": -1,\n \"day_of_week\": \"TUESDAY\",\n \"day_offset\": 3,\n },\n },\n },\n rollout={\n \"mode\": \"ZONE_BY_ZONE\",\n \"disruption_budget\": {\n \"fixed\": 1,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var patch = new Gcp.OsConfig.PatchDeployment(\"patch\", new()\n {\n PatchDeploymentId = \"patch-deploy\",\n InstanceFilter = new Gcp.OsConfig.Inputs.PatchDeploymentInstanceFilterArgs\n {\n GroupLabels = new[]\n {\n new Gcp.OsConfig.Inputs.PatchDeploymentInstanceFilterGroupLabelArgs\n {\n Labels = \n {\n { \"env\", \"dev\" },\n { \"app\", \"web\" },\n },\n },\n },\n InstanceNamePrefixes = new[]\n {\n \"test-\",\n },\n Zones = new[]\n {\n \"us-central1-a\",\n \"us-central-1c\",\n },\n },\n PatchConfig = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigArgs\n {\n MigInstancesAllowed = true,\n RebootConfig = \"ALWAYS\",\n Apt = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigAptArgs\n {\n Type = \"DIST\",\n Excludes = new[]\n {\n \"python\",\n },\n },\n Yum = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigYumArgs\n {\n Security = true,\n Minimal = true,\n Excludes = new[]\n {\n \"bash\",\n },\n },\n Goo = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigGooArgs\n {\n Enabled = true,\n },\n Zypper = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigZypperArgs\n {\n Categories = new[]\n {\n \"security\",\n },\n },\n WindowsUpdate = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigWindowsUpdateArgs\n {\n Classifications = new[]\n {\n \"CRITICAL\",\n \"SECURITY\",\n \"UPDATE\",\n },\n Excludes = new[]\n {\n \"5012170\",\n },\n },\n PreStep = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPreStepArgs\n {\n LinuxExecStepConfig = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs\n {\n AllowedSuccessCodes = new[]\n {\n 0,\n 3,\n },\n LocalPath = \"/tmp/pre_patch_script.sh\",\n },\n WindowsExecStepConfig = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs\n {\n Interpreter = \"SHELL\",\n AllowedSuccessCodes = new[]\n {\n 0,\n 2,\n },\n LocalPath = \"C:\\\\Users\\\\user\\\\pre-patch-script.cmd\",\n },\n },\n PostStep = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPostStepArgs\n {\n LinuxExecStepConfig = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs\n {\n GcsObject = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs\n {\n Bucket = \"my-patch-scripts\",\n GenerationNumber = \"1523477886880\",\n Object = \"linux/post_patch_script\",\n },\n },\n WindowsExecStepConfig = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs\n {\n Interpreter = \"POWERSHELL\",\n GcsObject = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs\n {\n Bucket = \"my-patch-scripts\",\n GenerationNumber = \"135920493447\",\n Object = \"windows/post_patch_script.ps1\",\n },\n },\n },\n },\n Duration = \"10s\",\n RecurringSchedule = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleArgs\n {\n TimeZone = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeZoneArgs\n {\n Id = \"America/New_York\",\n },\n TimeOfDay = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs\n {\n Hours = 0,\n Minutes = 30,\n Seconds = 30,\n Nanos = 20,\n },\n Monthly = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleMonthlyArgs\n {\n WeekDayOfMonth = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs\n {\n WeekOrdinal = -1,\n DayOfWeek = \"TUESDAY\",\n DayOffset = 3,\n },\n },\n },\n Rollout = new Gcp.OsConfig.Inputs.PatchDeploymentRolloutArgs\n {\n Mode = \"ZONE_BY_ZONE\",\n DisruptionBudget = new Gcp.OsConfig.Inputs.PatchDeploymentRolloutDisruptionBudgetArgs\n {\n Fixed = 1,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := osconfig.NewPatchDeployment(ctx, \"patch\", \u0026osconfig.PatchDeploymentArgs{\n\t\t\tPatchDeploymentId: pulumi.String(\"patch-deploy\"),\n\t\t\tInstanceFilter: \u0026osconfig.PatchDeploymentInstanceFilterArgs{\n\t\t\t\tGroupLabels: osconfig.PatchDeploymentInstanceFilterGroupLabelArray{\n\t\t\t\t\t\u0026osconfig.PatchDeploymentInstanceFilterGroupLabelArgs{\n\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\"env\": pulumi.String(\"dev\"),\n\t\t\t\t\t\t\t\"app\": pulumi.String(\"web\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tInstanceNamePrefixes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test-\"),\n\t\t\t\t},\n\t\t\t\tZones: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"us-central1-a\"),\n\t\t\t\t\tpulumi.String(\"us-central-1c\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPatchConfig: \u0026osconfig.PatchDeploymentPatchConfigArgs{\n\t\t\t\tMigInstancesAllowed: pulumi.Bool(true),\n\t\t\t\tRebootConfig: pulumi.String(\"ALWAYS\"),\n\t\t\t\tApt: \u0026osconfig.PatchDeploymentPatchConfigAptArgs{\n\t\t\t\t\tType: pulumi.String(\"DIST\"),\n\t\t\t\t\tExcludes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"python\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tYum: \u0026osconfig.PatchDeploymentPatchConfigYumArgs{\n\t\t\t\t\tSecurity: pulumi.Bool(true),\n\t\t\t\t\tMinimal: pulumi.Bool(true),\n\t\t\t\t\tExcludes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"bash\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tGoo: \u0026osconfig.PatchDeploymentPatchConfigGooArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tZypper: \u0026osconfig.PatchDeploymentPatchConfigZypperArgs{\n\t\t\t\t\tCategories: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"security\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tWindowsUpdate: \u0026osconfig.PatchDeploymentPatchConfigWindowsUpdateArgs{\n\t\t\t\t\tClassifications: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"CRITICAL\"),\n\t\t\t\t\t\tpulumi.String(\"SECURITY\"),\n\t\t\t\t\t\tpulumi.String(\"UPDATE\"),\n\t\t\t\t\t},\n\t\t\t\t\tExcludes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"5012170\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPreStep: \u0026osconfig.PatchDeploymentPatchConfigPreStepArgs{\n\t\t\t\t\tLinuxExecStepConfig: \u0026osconfig.PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs{\n\t\t\t\t\t\tAllowedSuccessCodes: pulumi.IntArray{\n\t\t\t\t\t\t\tpulumi.Int(0),\n\t\t\t\t\t\t\tpulumi.Int(3),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLocalPath: pulumi.String(\"/tmp/pre_patch_script.sh\"),\n\t\t\t\t\t},\n\t\t\t\t\tWindowsExecStepConfig: \u0026osconfig.PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs{\n\t\t\t\t\t\tInterpreter: pulumi.String(\"SHELL\"),\n\t\t\t\t\t\tAllowedSuccessCodes: pulumi.IntArray{\n\t\t\t\t\t\t\tpulumi.Int(0),\n\t\t\t\t\t\t\tpulumi.Int(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLocalPath: pulumi.String(\"C:\\\\Users\\\\user\\\\pre-patch-script.cmd\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPostStep: \u0026osconfig.PatchDeploymentPatchConfigPostStepArgs{\n\t\t\t\t\tLinuxExecStepConfig: \u0026osconfig.PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs{\n\t\t\t\t\t\tGcsObject: \u0026osconfig.PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs{\n\t\t\t\t\t\t\tBucket: pulumi.String(\"my-patch-scripts\"),\n\t\t\t\t\t\t\tGenerationNumber: pulumi.String(\"1523477886880\"),\n\t\t\t\t\t\t\tObject: pulumi.String(\"linux/post_patch_script\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tWindowsExecStepConfig: \u0026osconfig.PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs{\n\t\t\t\t\t\tInterpreter: pulumi.String(\"POWERSHELL\"),\n\t\t\t\t\t\tGcsObject: \u0026osconfig.PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs{\n\t\t\t\t\t\t\tBucket: pulumi.String(\"my-patch-scripts\"),\n\t\t\t\t\t\t\tGenerationNumber: pulumi.String(\"135920493447\"),\n\t\t\t\t\t\t\tObject: pulumi.String(\"windows/post_patch_script.ps1\"),\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\tDuration: pulumi.String(\"10s\"),\n\t\t\tRecurringSchedule: \u0026osconfig.PatchDeploymentRecurringScheduleArgs{\n\t\t\t\tTimeZone: \u0026osconfig.PatchDeploymentRecurringScheduleTimeZoneArgs{\n\t\t\t\t\tId: pulumi.String(\"America/New_York\"),\n\t\t\t\t},\n\t\t\t\tTimeOfDay: \u0026osconfig.PatchDeploymentRecurringScheduleTimeOfDayArgs{\n\t\t\t\t\tHours: pulumi.Int(0),\n\t\t\t\t\tMinutes: pulumi.Int(30),\n\t\t\t\t\tSeconds: pulumi.Int(30),\n\t\t\t\t\tNanos: pulumi.Int(20),\n\t\t\t\t},\n\t\t\t\tMonthly: \u0026osconfig.PatchDeploymentRecurringScheduleMonthlyArgs{\n\t\t\t\t\tWeekDayOfMonth: \u0026osconfig.PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs{\n\t\t\t\t\t\tWeekOrdinal: pulumi.Int(-1),\n\t\t\t\t\t\tDayOfWeek: pulumi.String(\"TUESDAY\"),\n\t\t\t\t\t\tDayOffset: pulumi.Int(3),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tRollout: \u0026osconfig.PatchDeploymentRolloutArgs{\n\t\t\t\tMode: pulumi.String(\"ZONE_BY_ZONE\"),\n\t\t\t\tDisruptionBudget: \u0026osconfig.PatchDeploymentRolloutDisruptionBudgetArgs{\n\t\t\t\t\tFixed: pulumi.Int(1),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.osconfig.PatchDeployment;\nimport com.pulumi.gcp.osconfig.PatchDeploymentArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentInstanceFilterArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigAptArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigYumArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigGooArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigZypperArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigWindowsUpdateArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPreStepArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPostStepArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeZoneArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleMonthlyArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRolloutArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRolloutDisruptionBudgetArgs;\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 patch = new PatchDeployment(\"patch\", PatchDeploymentArgs.builder()\n .patchDeploymentId(\"patch-deploy\")\n .instanceFilter(PatchDeploymentInstanceFilterArgs.builder()\n .groupLabels(PatchDeploymentInstanceFilterGroupLabelArgs.builder()\n .labels(Map.ofEntries(\n Map.entry(\"env\", \"dev\"),\n Map.entry(\"app\", \"web\")\n ))\n .build())\n .instanceNamePrefixes(\"test-\")\n .zones( \n \"us-central1-a\",\n \"us-central-1c\")\n .build())\n .patchConfig(PatchDeploymentPatchConfigArgs.builder()\n .migInstancesAllowed(true)\n .rebootConfig(\"ALWAYS\")\n .apt(PatchDeploymentPatchConfigAptArgs.builder()\n .type(\"DIST\")\n .excludes(\"python\")\n .build())\n .yum(PatchDeploymentPatchConfigYumArgs.builder()\n .security(true)\n .minimal(true)\n .excludes(\"bash\")\n .build())\n .goo(PatchDeploymentPatchConfigGooArgs.builder()\n .enabled(true)\n .build())\n .zypper(PatchDeploymentPatchConfigZypperArgs.builder()\n .categories(\"security\")\n .build())\n .windowsUpdate(PatchDeploymentPatchConfigWindowsUpdateArgs.builder()\n .classifications( \n \"CRITICAL\",\n \"SECURITY\",\n \"UPDATE\")\n .excludes(\"5012170\")\n .build())\n .preStep(PatchDeploymentPatchConfigPreStepArgs.builder()\n .linuxExecStepConfig(PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs.builder()\n .allowedSuccessCodes( \n 0,\n 3)\n .localPath(\"/tmp/pre_patch_script.sh\")\n .build())\n .windowsExecStepConfig(PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs.builder()\n .interpreter(\"SHELL\")\n .allowedSuccessCodes( \n 0,\n 2)\n .localPath(\"C:\\\\Users\\\\user\\\\pre-patch-script.cmd\")\n .build())\n .build())\n .postStep(PatchDeploymentPatchConfigPostStepArgs.builder()\n .linuxExecStepConfig(PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs.builder()\n .gcsObject(PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs.builder()\n .bucket(\"my-patch-scripts\")\n .generationNumber(\"1523477886880\")\n .object(\"linux/post_patch_script\")\n .build())\n .build())\n .windowsExecStepConfig(PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs.builder()\n .interpreter(\"POWERSHELL\")\n .gcsObject(PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs.builder()\n .bucket(\"my-patch-scripts\")\n .generationNumber(\"135920493447\")\n .object(\"windows/post_patch_script.ps1\")\n .build())\n .build())\n .build())\n .build())\n .duration(\"10s\")\n .recurringSchedule(PatchDeploymentRecurringScheduleArgs.builder()\n .timeZone(PatchDeploymentRecurringScheduleTimeZoneArgs.builder()\n .id(\"America/New_York\")\n .build())\n .timeOfDay(PatchDeploymentRecurringScheduleTimeOfDayArgs.builder()\n .hours(0)\n .minutes(30)\n .seconds(30)\n .nanos(20)\n .build())\n .monthly(PatchDeploymentRecurringScheduleMonthlyArgs.builder()\n .weekDayOfMonth(PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs.builder()\n .weekOrdinal(-1)\n .dayOfWeek(\"TUESDAY\")\n .dayOffset(3)\n .build())\n .build())\n .build())\n .rollout(PatchDeploymentRolloutArgs.builder()\n .mode(\"ZONE_BY_ZONE\")\n .disruptionBudget(PatchDeploymentRolloutDisruptionBudgetArgs.builder()\n .fixed(1)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n patch:\n type: gcp:osconfig:PatchDeployment\n properties:\n patchDeploymentId: patch-deploy\n instanceFilter:\n groupLabels:\n - labels:\n env: dev\n app: web\n instanceNamePrefixes:\n - test-\n zones:\n - us-central1-a\n - us-central-1c\n patchConfig:\n migInstancesAllowed: true\n rebootConfig: ALWAYS\n apt:\n type: DIST\n excludes:\n - python\n yum:\n security: true\n minimal: true\n excludes:\n - bash\n goo:\n enabled: true\n zypper:\n categories:\n - security\n windowsUpdate:\n classifications:\n - CRITICAL\n - SECURITY\n - UPDATE\n excludes:\n - '5012170'\n preStep:\n linuxExecStepConfig:\n allowedSuccessCodes:\n - 0\n - 3\n localPath: /tmp/pre_patch_script.sh\n windowsExecStepConfig:\n interpreter: SHELL\n allowedSuccessCodes:\n - 0\n - 2\n localPath: C:\\Users\\user\\pre-patch-script.cmd\n postStep:\n linuxExecStepConfig:\n gcsObject:\n bucket: my-patch-scripts\n generationNumber: '1523477886880'\n object: linux/post_patch_script\n windowsExecStepConfig:\n interpreter: POWERSHELL\n gcsObject:\n bucket: my-patch-scripts\n generationNumber: '135920493447'\n object: windows/post_patch_script.ps1\n duration: 10s\n recurringSchedule:\n timeZone:\n id: America/New_York\n timeOfDay:\n hours: 0\n minutes: 30\n seconds: 30\n nanos: 20\n monthly:\n weekDayOfMonth:\n weekOrdinal: -1\n dayOfWeek: TUESDAY\n dayOffset: 3\n rollout:\n mode: ZONE_BY_ZONE\n disruptionBudget:\n fixed: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nPatchDeployment can be imported using any of these accepted formats:\n\n* `projects/{{project}}/patchDeployments/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, PatchDeployment can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:osconfig/patchDeployment:PatchDeployment default projects/{{project}}/patchDeployments/{{name}}\n```\n\n```sh\n$ pulumi import gcp:osconfig/patchDeployment:PatchDeployment default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:osconfig/patchDeployment:PatchDeployment default {{name}}\n```\n\n", + "description": "Patch deployments are configurations that individual patch jobs use to complete a patch.\nThese configurations include instance filter, package repository settings, and a schedule.\n\n\nTo get more information about PatchDeployment, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/osconfig/rest)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/os-patch-management)\n\n## Example Usage\n\n### Os Config Patch Deployment Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst patch = new gcp.osconfig.PatchDeployment(\"patch\", {\n patchDeploymentId: \"patch-deploy\",\n instanceFilter: {\n all: true,\n },\n oneTimeSchedule: {\n executeTime: \"2999-10-10T10:10:10.045123456Z\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npatch = gcp.osconfig.PatchDeployment(\"patch\",\n patch_deployment_id=\"patch-deploy\",\n instance_filter={\n \"all\": True,\n },\n one_time_schedule={\n \"execute_time\": \"2999-10-10T10:10:10.045123456Z\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var patch = new Gcp.OsConfig.PatchDeployment(\"patch\", new()\n {\n PatchDeploymentId = \"patch-deploy\",\n InstanceFilter = new Gcp.OsConfig.Inputs.PatchDeploymentInstanceFilterArgs\n {\n All = true,\n },\n OneTimeSchedule = new Gcp.OsConfig.Inputs.PatchDeploymentOneTimeScheduleArgs\n {\n ExecuteTime = \"2999-10-10T10:10:10.045123456Z\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := osconfig.NewPatchDeployment(ctx, \"patch\", \u0026osconfig.PatchDeploymentArgs{\n\t\t\tPatchDeploymentId: pulumi.String(\"patch-deploy\"),\n\t\t\tInstanceFilter: \u0026osconfig.PatchDeploymentInstanceFilterArgs{\n\t\t\t\tAll: pulumi.Bool(true),\n\t\t\t},\n\t\t\tOneTimeSchedule: \u0026osconfig.PatchDeploymentOneTimeScheduleArgs{\n\t\t\t\tExecuteTime: pulumi.String(\"2999-10-10T10:10:10.045123456Z\"),\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.gcp.osconfig.PatchDeployment;\nimport com.pulumi.gcp.osconfig.PatchDeploymentArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentInstanceFilterArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentOneTimeScheduleArgs;\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 patch = new PatchDeployment(\"patch\", PatchDeploymentArgs.builder()\n .patchDeploymentId(\"patch-deploy\")\n .instanceFilter(PatchDeploymentInstanceFilterArgs.builder()\n .all(true)\n .build())\n .oneTimeSchedule(PatchDeploymentOneTimeScheduleArgs.builder()\n .executeTime(\"2999-10-10T10:10:10.045123456Z\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n patch:\n type: gcp:osconfig:PatchDeployment\n properties:\n patchDeploymentId: patch-deploy\n instanceFilter:\n all: true\n oneTimeSchedule:\n executeTime: 2999-10-10T10:10:10.045123456Z\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Os Config Patch Deployment Daily\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst patch = new gcp.osconfig.PatchDeployment(\"patch\", {\n patchDeploymentId: \"patch-deploy\",\n instanceFilter: {\n all: true,\n },\n recurringSchedule: {\n timeZone: {\n id: \"America/New_York\",\n },\n timeOfDay: {\n hours: 0,\n minutes: 30,\n seconds: 30,\n nanos: 20,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npatch = gcp.osconfig.PatchDeployment(\"patch\",\n patch_deployment_id=\"patch-deploy\",\n instance_filter={\n \"all\": True,\n },\n recurring_schedule={\n \"time_zone\": {\n \"id\": \"America/New_York\",\n },\n \"time_of_day\": {\n \"hours\": 0,\n \"minutes\": 30,\n \"seconds\": 30,\n \"nanos\": 20,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var patch = new Gcp.OsConfig.PatchDeployment(\"patch\", new()\n {\n PatchDeploymentId = \"patch-deploy\",\n InstanceFilter = new Gcp.OsConfig.Inputs.PatchDeploymentInstanceFilterArgs\n {\n All = true,\n },\n RecurringSchedule = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleArgs\n {\n TimeZone = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeZoneArgs\n {\n Id = \"America/New_York\",\n },\n TimeOfDay = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs\n {\n Hours = 0,\n Minutes = 30,\n Seconds = 30,\n Nanos = 20,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := osconfig.NewPatchDeployment(ctx, \"patch\", \u0026osconfig.PatchDeploymentArgs{\n\t\t\tPatchDeploymentId: pulumi.String(\"patch-deploy\"),\n\t\t\tInstanceFilter: \u0026osconfig.PatchDeploymentInstanceFilterArgs{\n\t\t\t\tAll: pulumi.Bool(true),\n\t\t\t},\n\t\t\tRecurringSchedule: \u0026osconfig.PatchDeploymentRecurringScheduleArgs{\n\t\t\t\tTimeZone: \u0026osconfig.PatchDeploymentRecurringScheduleTimeZoneArgs{\n\t\t\t\t\tId: pulumi.String(\"America/New_York\"),\n\t\t\t\t},\n\t\t\t\tTimeOfDay: \u0026osconfig.PatchDeploymentRecurringScheduleTimeOfDayArgs{\n\t\t\t\t\tHours: pulumi.Int(0),\n\t\t\t\t\tMinutes: pulumi.Int(30),\n\t\t\t\t\tSeconds: pulumi.Int(30),\n\t\t\t\t\tNanos: pulumi.Int(20),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.osconfig.PatchDeployment;\nimport com.pulumi.gcp.osconfig.PatchDeploymentArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentInstanceFilterArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeZoneArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs;\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 patch = new PatchDeployment(\"patch\", PatchDeploymentArgs.builder()\n .patchDeploymentId(\"patch-deploy\")\n .instanceFilter(PatchDeploymentInstanceFilterArgs.builder()\n .all(true)\n .build())\n .recurringSchedule(PatchDeploymentRecurringScheduleArgs.builder()\n .timeZone(PatchDeploymentRecurringScheduleTimeZoneArgs.builder()\n .id(\"America/New_York\")\n .build())\n .timeOfDay(PatchDeploymentRecurringScheduleTimeOfDayArgs.builder()\n .hours(0)\n .minutes(30)\n .seconds(30)\n .nanos(20)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n patch:\n type: gcp:osconfig:PatchDeployment\n properties:\n patchDeploymentId: patch-deploy\n instanceFilter:\n all: true\n recurringSchedule:\n timeZone:\n id: America/New_York\n timeOfDay:\n hours: 0\n minutes: 30\n seconds: 30\n nanos: 20\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Os Config Patch Deployment Daily Midnight\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst patch = new gcp.osconfig.PatchDeployment(\"patch\", {\n patchDeploymentId: \"patch-deploy\",\n instanceFilter: {\n all: true,\n },\n recurringSchedule: {\n timeZone: {\n id: \"America/New_York\",\n },\n timeOfDay: {\n hours: 0,\n minutes: 0,\n seconds: 0,\n nanos: 0,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npatch = gcp.osconfig.PatchDeployment(\"patch\",\n patch_deployment_id=\"patch-deploy\",\n instance_filter={\n \"all\": True,\n },\n recurring_schedule={\n \"time_zone\": {\n \"id\": \"America/New_York\",\n },\n \"time_of_day\": {\n \"hours\": 0,\n \"minutes\": 0,\n \"seconds\": 0,\n \"nanos\": 0,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var patch = new Gcp.OsConfig.PatchDeployment(\"patch\", new()\n {\n PatchDeploymentId = \"patch-deploy\",\n InstanceFilter = new Gcp.OsConfig.Inputs.PatchDeploymentInstanceFilterArgs\n {\n All = true,\n },\n RecurringSchedule = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleArgs\n {\n TimeZone = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeZoneArgs\n {\n Id = \"America/New_York\",\n },\n TimeOfDay = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs\n {\n Hours = 0,\n Minutes = 0,\n Seconds = 0,\n Nanos = 0,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := osconfig.NewPatchDeployment(ctx, \"patch\", \u0026osconfig.PatchDeploymentArgs{\n\t\t\tPatchDeploymentId: pulumi.String(\"patch-deploy\"),\n\t\t\tInstanceFilter: \u0026osconfig.PatchDeploymentInstanceFilterArgs{\n\t\t\t\tAll: pulumi.Bool(true),\n\t\t\t},\n\t\t\tRecurringSchedule: \u0026osconfig.PatchDeploymentRecurringScheduleArgs{\n\t\t\t\tTimeZone: \u0026osconfig.PatchDeploymentRecurringScheduleTimeZoneArgs{\n\t\t\t\t\tId: pulumi.String(\"America/New_York\"),\n\t\t\t\t},\n\t\t\t\tTimeOfDay: \u0026osconfig.PatchDeploymentRecurringScheduleTimeOfDayArgs{\n\t\t\t\t\tHours: pulumi.Int(0),\n\t\t\t\t\tMinutes: pulumi.Int(0),\n\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.osconfig.PatchDeployment;\nimport com.pulumi.gcp.osconfig.PatchDeploymentArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentInstanceFilterArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeZoneArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs;\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 patch = new PatchDeployment(\"patch\", PatchDeploymentArgs.builder()\n .patchDeploymentId(\"patch-deploy\")\n .instanceFilter(PatchDeploymentInstanceFilterArgs.builder()\n .all(true)\n .build())\n .recurringSchedule(PatchDeploymentRecurringScheduleArgs.builder()\n .timeZone(PatchDeploymentRecurringScheduleTimeZoneArgs.builder()\n .id(\"America/New_York\")\n .build())\n .timeOfDay(PatchDeploymentRecurringScheduleTimeOfDayArgs.builder()\n .hours(0)\n .minutes(0)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n patch:\n type: gcp:osconfig:PatchDeployment\n properties:\n patchDeploymentId: patch-deploy\n instanceFilter:\n all: true\n recurringSchedule:\n timeZone:\n id: America/New_York\n timeOfDay:\n hours: 0\n minutes: 0\n seconds: 0\n nanos: 0\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Os Config Patch Deployment Instance\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myImage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst foobar = new gcp.compute.Instance(\"foobar\", {\n name: \"patch-deploy-inst\",\n machineType: \"e2-medium\",\n zone: \"us-central1-a\",\n canIpForward: false,\n tags: [\n \"foo\",\n \"bar\",\n ],\n bootDisk: {\n initializeParams: {\n image: myImage.then(myImage =\u003e myImage.selfLink),\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n metadata: {\n foo: \"bar\",\n },\n});\nconst patch = new gcp.osconfig.PatchDeployment(\"patch\", {\n patchDeploymentId: \"patch-deploy\",\n instanceFilter: {\n instances: [foobar.id],\n },\n patchConfig: {\n yum: {\n security: true,\n minimal: true,\n excludes: [\"bash\"],\n },\n },\n recurringSchedule: {\n timeZone: {\n id: \"America/New_York\",\n },\n timeOfDay: {\n hours: 0,\n minutes: 30,\n seconds: 30,\n nanos: 20,\n },\n monthly: {\n monthDay: 1,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_image = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\nfoobar = gcp.compute.Instance(\"foobar\",\n name=\"patch-deploy-inst\",\n machine_type=\"e2-medium\",\n zone=\"us-central1-a\",\n can_ip_forward=False,\n tags=[\n \"foo\",\n \"bar\",\n ],\n boot_disk={\n \"initialize_params\": {\n \"image\": my_image.self_link,\n },\n },\n network_interfaces=[{\n \"network\": \"default\",\n }],\n metadata={\n \"foo\": \"bar\",\n })\npatch = gcp.osconfig.PatchDeployment(\"patch\",\n patch_deployment_id=\"patch-deploy\",\n instance_filter={\n \"instances\": [foobar.id],\n },\n patch_config={\n \"yum\": {\n \"security\": True,\n \"minimal\": True,\n \"excludes\": [\"bash\"],\n },\n },\n recurring_schedule={\n \"time_zone\": {\n \"id\": \"America/New_York\",\n },\n \"time_of_day\": {\n \"hours\": 0,\n \"minutes\": 30,\n \"seconds\": 30,\n \"nanos\": 20,\n },\n \"monthly\": {\n \"month_day\": 1,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myImage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var foobar = new Gcp.Compute.Instance(\"foobar\", new()\n {\n Name = \"patch-deploy-inst\",\n MachineType = \"e2-medium\",\n Zone = \"us-central1-a\",\n CanIpForward = false,\n Tags = new[]\n {\n \"foo\",\n \"bar\",\n },\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = myImage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n Metadata = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n var patch = new Gcp.OsConfig.PatchDeployment(\"patch\", new()\n {\n PatchDeploymentId = \"patch-deploy\",\n InstanceFilter = new Gcp.OsConfig.Inputs.PatchDeploymentInstanceFilterArgs\n {\n Instances = new[]\n {\n foobar.Id,\n },\n },\n PatchConfig = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigArgs\n {\n Yum = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigYumArgs\n {\n Security = true,\n Minimal = true,\n Excludes = new[]\n {\n \"bash\",\n },\n },\n },\n RecurringSchedule = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleArgs\n {\n TimeZone = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeZoneArgs\n {\n Id = \"America/New_York\",\n },\n TimeOfDay = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs\n {\n Hours = 0,\n Minutes = 30,\n Seconds = 30,\n Nanos = 20,\n },\n Monthly = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleMonthlyArgs\n {\n MonthDay = 1,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyImage, err := compute.LookupImage(ctx, \u0026compute.LookupImageArgs{\n\t\t\tFamily: pulumi.StringRef(\"debian-11\"),\n\t\t\tProject: pulumi.StringRef(\"debian-cloud\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfoobar, err := compute.NewInstance(ctx, \"foobar\", \u0026compute.InstanceArgs{\n\t\t\tName: pulumi.String(\"patch-deploy-inst\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tCanIpForward: pulumi.Bool(false),\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"foo\"),\n\t\t\t\tpulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(myImage.SelfLink),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.InstanceNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceNetworkInterfaceArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = osconfig.NewPatchDeployment(ctx, \"patch\", \u0026osconfig.PatchDeploymentArgs{\n\t\t\tPatchDeploymentId: pulumi.String(\"patch-deploy\"),\n\t\t\tInstanceFilter: \u0026osconfig.PatchDeploymentInstanceFilterArgs{\n\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\tfoobar.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPatchConfig: \u0026osconfig.PatchDeploymentPatchConfigArgs{\n\t\t\t\tYum: \u0026osconfig.PatchDeploymentPatchConfigYumArgs{\n\t\t\t\t\tSecurity: pulumi.Bool(true),\n\t\t\t\t\tMinimal: pulumi.Bool(true),\n\t\t\t\t\tExcludes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"bash\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tRecurringSchedule: \u0026osconfig.PatchDeploymentRecurringScheduleArgs{\n\t\t\t\tTimeZone: \u0026osconfig.PatchDeploymentRecurringScheduleTimeZoneArgs{\n\t\t\t\t\tId: pulumi.String(\"America/New_York\"),\n\t\t\t\t},\n\t\t\t\tTimeOfDay: \u0026osconfig.PatchDeploymentRecurringScheduleTimeOfDayArgs{\n\t\t\t\t\tHours: pulumi.Int(0),\n\t\t\t\t\tMinutes: pulumi.Int(30),\n\t\t\t\t\tSeconds: pulumi.Int(30),\n\t\t\t\t\tNanos: pulumi.Int(20),\n\t\t\t\t},\n\t\t\t\tMonthly: \u0026osconfig.PatchDeploymentRecurringScheduleMonthlyArgs{\n\t\t\t\t\tMonthDay: pulumi.Int(1),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.Instance;\nimport com.pulumi.gcp.compute.InstanceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;\nimport com.pulumi.gcp.osconfig.PatchDeployment;\nimport com.pulumi.gcp.osconfig.PatchDeploymentArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentInstanceFilterArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigYumArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeZoneArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleMonthlyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var myImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var foobar = new Instance(\"foobar\", InstanceArgs.builder()\n .name(\"patch-deploy-inst\")\n .machineType(\"e2-medium\")\n .zone(\"us-central1-a\")\n .canIpForward(false)\n .tags( \n \"foo\",\n \"bar\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(myImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .metadata(Map.of(\"foo\", \"bar\"))\n .build());\n\n var patch = new PatchDeployment(\"patch\", PatchDeploymentArgs.builder()\n .patchDeploymentId(\"patch-deploy\")\n .instanceFilter(PatchDeploymentInstanceFilterArgs.builder()\n .instances(foobar.id())\n .build())\n .patchConfig(PatchDeploymentPatchConfigArgs.builder()\n .yum(PatchDeploymentPatchConfigYumArgs.builder()\n .security(true)\n .minimal(true)\n .excludes(\"bash\")\n .build())\n .build())\n .recurringSchedule(PatchDeploymentRecurringScheduleArgs.builder()\n .timeZone(PatchDeploymentRecurringScheduleTimeZoneArgs.builder()\n .id(\"America/New_York\")\n .build())\n .timeOfDay(PatchDeploymentRecurringScheduleTimeOfDayArgs.builder()\n .hours(0)\n .minutes(30)\n .seconds(30)\n .nanos(20)\n .build())\n .monthly(PatchDeploymentRecurringScheduleMonthlyArgs.builder()\n .monthDay(1)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n foobar:\n type: gcp:compute:Instance\n properties:\n name: patch-deploy-inst\n machineType: e2-medium\n zone: us-central1-a\n canIpForward: false\n tags:\n - foo\n - bar\n bootDisk:\n initializeParams:\n image: ${myImage.selfLink}\n networkInterfaces:\n - network: default\n metadata:\n foo: bar\n patch:\n type: gcp:osconfig:PatchDeployment\n properties:\n patchDeploymentId: patch-deploy\n instanceFilter:\n instances:\n - ${foobar.id}\n patchConfig:\n yum:\n security: true\n minimal: true\n excludes:\n - bash\n recurringSchedule:\n timeZone:\n id: America/New_York\n timeOfDay:\n hours: 0\n minutes: 30\n seconds: 30\n nanos: 20\n monthly:\n monthDay: 1\nvariables:\n myImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Os Config Patch Deployment Full\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst patch = new gcp.osconfig.PatchDeployment(\"patch\", {\n patchDeploymentId: \"patch-deploy\",\n instanceFilter: {\n groupLabels: [{\n labels: {\n env: \"dev\",\n app: \"web\",\n },\n }],\n instanceNamePrefixes: [\"test-\"],\n zones: [\n \"us-central1-a\",\n \"us-central-1c\",\n ],\n },\n patchConfig: {\n migInstancesAllowed: true,\n rebootConfig: \"ALWAYS\",\n apt: {\n type: \"DIST\",\n excludes: [\"python\"],\n },\n yum: {\n security: true,\n minimal: true,\n excludes: [\"bash\"],\n },\n goo: {\n enabled: true,\n },\n zypper: {\n categories: [\"security\"],\n },\n windowsUpdate: {\n classifications: [\n \"CRITICAL\",\n \"SECURITY\",\n \"UPDATE\",\n ],\n excludes: [\"5012170\"],\n },\n preStep: {\n linuxExecStepConfig: {\n allowedSuccessCodes: [\n 0,\n 3,\n ],\n localPath: \"/tmp/pre_patch_script.sh\",\n },\n windowsExecStepConfig: {\n interpreter: \"SHELL\",\n allowedSuccessCodes: [\n 0,\n 2,\n ],\n localPath: \"C:\\\\Users\\\\user\\\\pre-patch-script.cmd\",\n },\n },\n postStep: {\n linuxExecStepConfig: {\n gcsObject: {\n bucket: \"my-patch-scripts\",\n generationNumber: \"1523477886880\",\n object: \"linux/post_patch_script\",\n },\n },\n windowsExecStepConfig: {\n interpreter: \"POWERSHELL\",\n gcsObject: {\n bucket: \"my-patch-scripts\",\n generationNumber: \"135920493447\",\n object: \"windows/post_patch_script.ps1\",\n },\n },\n },\n },\n duration: \"10s\",\n recurringSchedule: {\n timeZone: {\n id: \"America/New_York\",\n },\n timeOfDay: {\n hours: 0,\n minutes: 30,\n seconds: 30,\n nanos: 20,\n },\n monthly: {\n weekDayOfMonth: {\n weekOrdinal: -1,\n dayOfWeek: \"TUESDAY\",\n dayOffset: 3,\n },\n },\n },\n rollout: {\n mode: \"ZONE_BY_ZONE\",\n disruptionBudget: {\n fixed: 1,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npatch = gcp.osconfig.PatchDeployment(\"patch\",\n patch_deployment_id=\"patch-deploy\",\n instance_filter={\n \"group_labels\": [{\n \"labels\": {\n \"env\": \"dev\",\n \"app\": \"web\",\n },\n }],\n \"instance_name_prefixes\": [\"test-\"],\n \"zones\": [\n \"us-central1-a\",\n \"us-central-1c\",\n ],\n },\n patch_config={\n \"mig_instances_allowed\": True,\n \"reboot_config\": \"ALWAYS\",\n \"apt\": {\n \"type\": \"DIST\",\n \"excludes\": [\"python\"],\n },\n \"yum\": {\n \"security\": True,\n \"minimal\": True,\n \"excludes\": [\"bash\"],\n },\n \"goo\": {\n \"enabled\": True,\n },\n \"zypper\": {\n \"categories\": [\"security\"],\n },\n \"windows_update\": {\n \"classifications\": [\n \"CRITICAL\",\n \"SECURITY\",\n \"UPDATE\",\n ],\n \"excludes\": [\"5012170\"],\n },\n \"pre_step\": {\n \"linux_exec_step_config\": {\n \"allowed_success_codes\": [\n 0,\n 3,\n ],\n \"local_path\": \"/tmp/pre_patch_script.sh\",\n },\n \"windows_exec_step_config\": {\n \"interpreter\": \"SHELL\",\n \"allowed_success_codes\": [\n 0,\n 2,\n ],\n \"local_path\": \"C:\\\\Users\\\\user\\\\pre-patch-script.cmd\",\n },\n },\n \"post_step\": {\n \"linux_exec_step_config\": {\n \"gcs_object\": {\n \"bucket\": \"my-patch-scripts\",\n \"generation_number\": \"1523477886880\",\n \"object\": \"linux/post_patch_script\",\n },\n },\n \"windows_exec_step_config\": {\n \"interpreter\": \"POWERSHELL\",\n \"gcs_object\": {\n \"bucket\": \"my-patch-scripts\",\n \"generation_number\": \"135920493447\",\n \"object\": \"windows/post_patch_script.ps1\",\n },\n },\n },\n },\n duration=\"10s\",\n recurring_schedule={\n \"time_zone\": {\n \"id\": \"America/New_York\",\n },\n \"time_of_day\": {\n \"hours\": 0,\n \"minutes\": 30,\n \"seconds\": 30,\n \"nanos\": 20,\n },\n \"monthly\": {\n \"week_day_of_month\": {\n \"week_ordinal\": -1,\n \"day_of_week\": \"TUESDAY\",\n \"day_offset\": 3,\n },\n },\n },\n rollout={\n \"mode\": \"ZONE_BY_ZONE\",\n \"disruption_budget\": {\n \"fixed\": 1,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var patch = new Gcp.OsConfig.PatchDeployment(\"patch\", new()\n {\n PatchDeploymentId = \"patch-deploy\",\n InstanceFilter = new Gcp.OsConfig.Inputs.PatchDeploymentInstanceFilterArgs\n {\n GroupLabels = new[]\n {\n new Gcp.OsConfig.Inputs.PatchDeploymentInstanceFilterGroupLabelArgs\n {\n Labels = \n {\n { \"env\", \"dev\" },\n { \"app\", \"web\" },\n },\n },\n },\n InstanceNamePrefixes = new[]\n {\n \"test-\",\n },\n Zones = new[]\n {\n \"us-central1-a\",\n \"us-central-1c\",\n },\n },\n PatchConfig = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigArgs\n {\n MigInstancesAllowed = true,\n RebootConfig = \"ALWAYS\",\n Apt = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigAptArgs\n {\n Type = \"DIST\",\n Excludes = new[]\n {\n \"python\",\n },\n },\n Yum = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigYumArgs\n {\n Security = true,\n Minimal = true,\n Excludes = new[]\n {\n \"bash\",\n },\n },\n Goo = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigGooArgs\n {\n Enabled = true,\n },\n Zypper = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigZypperArgs\n {\n Categories = new[]\n {\n \"security\",\n },\n },\n WindowsUpdate = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigWindowsUpdateArgs\n {\n Classifications = new[]\n {\n \"CRITICAL\",\n \"SECURITY\",\n \"UPDATE\",\n },\n Excludes = new[]\n {\n \"5012170\",\n },\n },\n PreStep = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPreStepArgs\n {\n LinuxExecStepConfig = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs\n {\n AllowedSuccessCodes = new[]\n {\n 0,\n 3,\n },\n LocalPath = \"/tmp/pre_patch_script.sh\",\n },\n WindowsExecStepConfig = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs\n {\n Interpreter = \"SHELL\",\n AllowedSuccessCodes = new[]\n {\n 0,\n 2,\n },\n LocalPath = \"C:\\\\Users\\\\user\\\\pre-patch-script.cmd\",\n },\n },\n PostStep = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPostStepArgs\n {\n LinuxExecStepConfig = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs\n {\n GcsObject = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs\n {\n Bucket = \"my-patch-scripts\",\n GenerationNumber = \"1523477886880\",\n Object = \"linux/post_patch_script\",\n },\n },\n WindowsExecStepConfig = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs\n {\n Interpreter = \"POWERSHELL\",\n GcsObject = new Gcp.OsConfig.Inputs.PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs\n {\n Bucket = \"my-patch-scripts\",\n GenerationNumber = \"135920493447\",\n Object = \"windows/post_patch_script.ps1\",\n },\n },\n },\n },\n Duration = \"10s\",\n RecurringSchedule = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleArgs\n {\n TimeZone = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeZoneArgs\n {\n Id = \"America/New_York\",\n },\n TimeOfDay = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs\n {\n Hours = 0,\n Minutes = 30,\n Seconds = 30,\n Nanos = 20,\n },\n Monthly = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleMonthlyArgs\n {\n WeekDayOfMonth = new Gcp.OsConfig.Inputs.PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs\n {\n WeekOrdinal = -1,\n DayOfWeek = \"TUESDAY\",\n DayOffset = 3,\n },\n },\n },\n Rollout = new Gcp.OsConfig.Inputs.PatchDeploymentRolloutArgs\n {\n Mode = \"ZONE_BY_ZONE\",\n DisruptionBudget = new Gcp.OsConfig.Inputs.PatchDeploymentRolloutDisruptionBudgetArgs\n {\n Fixed = 1,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := osconfig.NewPatchDeployment(ctx, \"patch\", \u0026osconfig.PatchDeploymentArgs{\n\t\t\tPatchDeploymentId: pulumi.String(\"patch-deploy\"),\n\t\t\tInstanceFilter: \u0026osconfig.PatchDeploymentInstanceFilterArgs{\n\t\t\t\tGroupLabels: osconfig.PatchDeploymentInstanceFilterGroupLabelArray{\n\t\t\t\t\t\u0026osconfig.PatchDeploymentInstanceFilterGroupLabelArgs{\n\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\"env\": pulumi.String(\"dev\"),\n\t\t\t\t\t\t\t\"app\": pulumi.String(\"web\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tInstanceNamePrefixes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test-\"),\n\t\t\t\t},\n\t\t\t\tZones: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"us-central1-a\"),\n\t\t\t\t\tpulumi.String(\"us-central-1c\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPatchConfig: \u0026osconfig.PatchDeploymentPatchConfigArgs{\n\t\t\t\tMigInstancesAllowed: pulumi.Bool(true),\n\t\t\t\tRebootConfig: pulumi.String(\"ALWAYS\"),\n\t\t\t\tApt: \u0026osconfig.PatchDeploymentPatchConfigAptArgs{\n\t\t\t\t\tType: pulumi.String(\"DIST\"),\n\t\t\t\t\tExcludes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"python\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tYum: \u0026osconfig.PatchDeploymentPatchConfigYumArgs{\n\t\t\t\t\tSecurity: pulumi.Bool(true),\n\t\t\t\t\tMinimal: pulumi.Bool(true),\n\t\t\t\t\tExcludes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"bash\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tGoo: \u0026osconfig.PatchDeploymentPatchConfigGooArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tZypper: \u0026osconfig.PatchDeploymentPatchConfigZypperArgs{\n\t\t\t\t\tCategories: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"security\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tWindowsUpdate: \u0026osconfig.PatchDeploymentPatchConfigWindowsUpdateArgs{\n\t\t\t\t\tClassifications: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"CRITICAL\"),\n\t\t\t\t\t\tpulumi.String(\"SECURITY\"),\n\t\t\t\t\t\tpulumi.String(\"UPDATE\"),\n\t\t\t\t\t},\n\t\t\t\t\tExcludes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"5012170\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPreStep: \u0026osconfig.PatchDeploymentPatchConfigPreStepArgs{\n\t\t\t\t\tLinuxExecStepConfig: \u0026osconfig.PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs{\n\t\t\t\t\t\tAllowedSuccessCodes: pulumi.IntArray{\n\t\t\t\t\t\t\tpulumi.Int(0),\n\t\t\t\t\t\t\tpulumi.Int(3),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLocalPath: pulumi.String(\"/tmp/pre_patch_script.sh\"),\n\t\t\t\t\t},\n\t\t\t\t\tWindowsExecStepConfig: \u0026osconfig.PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs{\n\t\t\t\t\t\tInterpreter: pulumi.String(\"SHELL\"),\n\t\t\t\t\t\tAllowedSuccessCodes: pulumi.IntArray{\n\t\t\t\t\t\t\tpulumi.Int(0),\n\t\t\t\t\t\t\tpulumi.Int(2),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tLocalPath: pulumi.String(\"C:\\\\Users\\\\user\\\\pre-patch-script.cmd\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPostStep: \u0026osconfig.PatchDeploymentPatchConfigPostStepArgs{\n\t\t\t\t\tLinuxExecStepConfig: \u0026osconfig.PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs{\n\t\t\t\t\t\tGcsObject: \u0026osconfig.PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs{\n\t\t\t\t\t\t\tBucket: pulumi.String(\"my-patch-scripts\"),\n\t\t\t\t\t\t\tGenerationNumber: pulumi.String(\"1523477886880\"),\n\t\t\t\t\t\t\tObject: pulumi.String(\"linux/post_patch_script\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tWindowsExecStepConfig: \u0026osconfig.PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs{\n\t\t\t\t\t\tInterpreter: pulumi.String(\"POWERSHELL\"),\n\t\t\t\t\t\tGcsObject: \u0026osconfig.PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs{\n\t\t\t\t\t\t\tBucket: pulumi.String(\"my-patch-scripts\"),\n\t\t\t\t\t\t\tGenerationNumber: pulumi.String(\"135920493447\"),\n\t\t\t\t\t\t\tObject: pulumi.String(\"windows/post_patch_script.ps1\"),\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\tDuration: pulumi.String(\"10s\"),\n\t\t\tRecurringSchedule: \u0026osconfig.PatchDeploymentRecurringScheduleArgs{\n\t\t\t\tTimeZone: \u0026osconfig.PatchDeploymentRecurringScheduleTimeZoneArgs{\n\t\t\t\t\tId: pulumi.String(\"America/New_York\"),\n\t\t\t\t},\n\t\t\t\tTimeOfDay: \u0026osconfig.PatchDeploymentRecurringScheduleTimeOfDayArgs{\n\t\t\t\t\tHours: pulumi.Int(0),\n\t\t\t\t\tMinutes: pulumi.Int(30),\n\t\t\t\t\tSeconds: pulumi.Int(30),\n\t\t\t\t\tNanos: pulumi.Int(20),\n\t\t\t\t},\n\t\t\t\tMonthly: \u0026osconfig.PatchDeploymentRecurringScheduleMonthlyArgs{\n\t\t\t\t\tWeekDayOfMonth: \u0026osconfig.PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs{\n\t\t\t\t\t\tWeekOrdinal: pulumi.Int(-1),\n\t\t\t\t\t\tDayOfWeek: pulumi.String(\"TUESDAY\"),\n\t\t\t\t\t\tDayOffset: pulumi.Int(3),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tRollout: \u0026osconfig.PatchDeploymentRolloutArgs{\n\t\t\t\tMode: pulumi.String(\"ZONE_BY_ZONE\"),\n\t\t\t\tDisruptionBudget: \u0026osconfig.PatchDeploymentRolloutDisruptionBudgetArgs{\n\t\t\t\t\tFixed: pulumi.Int(1),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.osconfig.PatchDeployment;\nimport com.pulumi.gcp.osconfig.PatchDeploymentArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentInstanceFilterArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigAptArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigYumArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigGooArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigZypperArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigWindowsUpdateArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPreStepArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPostStepArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeZoneArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleTimeOfDayArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleMonthlyArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRolloutArgs;\nimport com.pulumi.gcp.osconfig.inputs.PatchDeploymentRolloutDisruptionBudgetArgs;\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 patch = new PatchDeployment(\"patch\", PatchDeploymentArgs.builder()\n .patchDeploymentId(\"patch-deploy\")\n .instanceFilter(PatchDeploymentInstanceFilterArgs.builder()\n .groupLabels(PatchDeploymentInstanceFilterGroupLabelArgs.builder()\n .labels(Map.ofEntries(\n Map.entry(\"env\", \"dev\"),\n Map.entry(\"app\", \"web\")\n ))\n .build())\n .instanceNamePrefixes(\"test-\")\n .zones( \n \"us-central1-a\",\n \"us-central-1c\")\n .build())\n .patchConfig(PatchDeploymentPatchConfigArgs.builder()\n .migInstancesAllowed(true)\n .rebootConfig(\"ALWAYS\")\n .apt(PatchDeploymentPatchConfigAptArgs.builder()\n .type(\"DIST\")\n .excludes(\"python\")\n .build())\n .yum(PatchDeploymentPatchConfigYumArgs.builder()\n .security(true)\n .minimal(true)\n .excludes(\"bash\")\n .build())\n .goo(PatchDeploymentPatchConfigGooArgs.builder()\n .enabled(true)\n .build())\n .zypper(PatchDeploymentPatchConfigZypperArgs.builder()\n .categories(\"security\")\n .build())\n .windowsUpdate(PatchDeploymentPatchConfigWindowsUpdateArgs.builder()\n .classifications( \n \"CRITICAL\",\n \"SECURITY\",\n \"UPDATE\")\n .excludes(\"5012170\")\n .build())\n .preStep(PatchDeploymentPatchConfigPreStepArgs.builder()\n .linuxExecStepConfig(PatchDeploymentPatchConfigPreStepLinuxExecStepConfigArgs.builder()\n .allowedSuccessCodes( \n 0,\n 3)\n .localPath(\"/tmp/pre_patch_script.sh\")\n .build())\n .windowsExecStepConfig(PatchDeploymentPatchConfigPreStepWindowsExecStepConfigArgs.builder()\n .interpreter(\"SHELL\")\n .allowedSuccessCodes( \n 0,\n 2)\n .localPath(\"C:\\\\Users\\\\user\\\\pre-patch-script.cmd\")\n .build())\n .build())\n .postStep(PatchDeploymentPatchConfigPostStepArgs.builder()\n .linuxExecStepConfig(PatchDeploymentPatchConfigPostStepLinuxExecStepConfigArgs.builder()\n .gcsObject(PatchDeploymentPatchConfigPostStepLinuxExecStepConfigGcsObjectArgs.builder()\n .bucket(\"my-patch-scripts\")\n .generationNumber(\"1523477886880\")\n .object(\"linux/post_patch_script\")\n .build())\n .build())\n .windowsExecStepConfig(PatchDeploymentPatchConfigPostStepWindowsExecStepConfigArgs.builder()\n .interpreter(\"POWERSHELL\")\n .gcsObject(PatchDeploymentPatchConfigPostStepWindowsExecStepConfigGcsObjectArgs.builder()\n .bucket(\"my-patch-scripts\")\n .generationNumber(\"135920493447\")\n .object(\"windows/post_patch_script.ps1\")\n .build())\n .build())\n .build())\n .build())\n .duration(\"10s\")\n .recurringSchedule(PatchDeploymentRecurringScheduleArgs.builder()\n .timeZone(PatchDeploymentRecurringScheduleTimeZoneArgs.builder()\n .id(\"America/New_York\")\n .build())\n .timeOfDay(PatchDeploymentRecurringScheduleTimeOfDayArgs.builder()\n .hours(0)\n .minutes(30)\n .seconds(30)\n .nanos(20)\n .build())\n .monthly(PatchDeploymentRecurringScheduleMonthlyArgs.builder()\n .weekDayOfMonth(PatchDeploymentRecurringScheduleMonthlyWeekDayOfMonthArgs.builder()\n .weekOrdinal(-1)\n .dayOfWeek(\"TUESDAY\")\n .dayOffset(3)\n .build())\n .build())\n .build())\n .rollout(PatchDeploymentRolloutArgs.builder()\n .mode(\"ZONE_BY_ZONE\")\n .disruptionBudget(PatchDeploymentRolloutDisruptionBudgetArgs.builder()\n .fixed(1)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n patch:\n type: gcp:osconfig:PatchDeployment\n properties:\n patchDeploymentId: patch-deploy\n instanceFilter:\n groupLabels:\n - labels:\n env: dev\n app: web\n instanceNamePrefixes:\n - test-\n zones:\n - us-central1-a\n - us-central-1c\n patchConfig:\n migInstancesAllowed: true\n rebootConfig: ALWAYS\n apt:\n type: DIST\n excludes:\n - python\n yum:\n security: true\n minimal: true\n excludes:\n - bash\n goo:\n enabled: true\n zypper:\n categories:\n - security\n windowsUpdate:\n classifications:\n - CRITICAL\n - SECURITY\n - UPDATE\n excludes:\n - '5012170'\n preStep:\n linuxExecStepConfig:\n allowedSuccessCodes:\n - 0\n - 3\n localPath: /tmp/pre_patch_script.sh\n windowsExecStepConfig:\n interpreter: SHELL\n allowedSuccessCodes:\n - 0\n - 2\n localPath: C:\\Users\\user\\pre-patch-script.cmd\n postStep:\n linuxExecStepConfig:\n gcsObject:\n bucket: my-patch-scripts\n generationNumber: '1523477886880'\n object: linux/post_patch_script\n windowsExecStepConfig:\n interpreter: POWERSHELL\n gcsObject:\n bucket: my-patch-scripts\n generationNumber: '135920493447'\n object: windows/post_patch_script.ps1\n duration: 10s\n recurringSchedule:\n timeZone:\n id: America/New_York\n timeOfDay:\n hours: 0\n minutes: 30\n seconds: 30\n nanos: 20\n monthly:\n weekDayOfMonth:\n weekOrdinal: -1\n dayOfWeek: TUESDAY\n dayOffset: 3\n rollout:\n mode: ZONE_BY_ZONE\n disruptionBudget:\n fixed: 1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nPatchDeployment can be imported using any of these accepted formats:\n\n* `{{project}}/{{name}}`\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, PatchDeployment can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:osconfig/patchDeployment:PatchDeployment default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:osconfig/patchDeployment:PatchDeployment default \"{{project}} {{name}}\"\n```\n\n```sh\n$ pulumi import gcp:osconfig/patchDeployment:PatchDeployment default {{name}}\n```\n\n", "properties": { "createTime": { "type": "string", @@ -254931,7 +258108,7 @@ } }, "gcp:securitycenter/notificationConfig:NotificationConfig": { - "description": "A Cloud Security Command Center (Cloud SCC) notification configs. A\nnotification config is a Cloud SCC resource that contains the\nconfiguration to send notifications for create/update events of\nfindings, assets and etc.\n\u003e **Note:** In order to use Cloud SCC resources, your organization must be enrolled\nin [SCC Standard/Premium](https://cloud.google.com/security-command-center/docs/quickstart-security-command-center).\nWithout doing so, you may run into errors during resource creation.\n\n\nTo get more information about NotificationConfig, see:\n\n* [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v1/organizations.notificationConfigs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/security-command-center/docs)\n\n## Example Usage\n\n### Scc Notification Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sccNotification = new gcp.pubsub.Topic(\"scc_notification\", {name: \"my-topic\"});\nconst customNotificationConfig = new gcp.securitycenter.NotificationConfig(\"custom_notification_config\", {\n configId: \"my-config\",\n organization: \"123456789\",\n description: \"My custom Cloud Security Command Center Finding Notification Configuration\",\n pubsubTopic: sccNotification.id,\n streamingConfig: {\n filter: \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscc_notification = gcp.pubsub.Topic(\"scc_notification\", name=\"my-topic\")\ncustom_notification_config = gcp.securitycenter.NotificationConfig(\"custom_notification_config\",\n config_id=\"my-config\",\n organization=\"123456789\",\n description=\"My custom Cloud Security Command Center Finding Notification Configuration\",\n pubsub_topic=scc_notification.id,\n streaming_config={\n \"filter\": \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sccNotification = new Gcp.PubSub.Topic(\"scc_notification\", new()\n {\n Name = \"my-topic\",\n });\n\n var customNotificationConfig = new Gcp.SecurityCenter.NotificationConfig(\"custom_notification_config\", new()\n {\n ConfigId = \"my-config\",\n Organization = \"123456789\",\n Description = \"My custom Cloud Security Command Center Finding Notification Configuration\",\n PubsubTopic = sccNotification.Id,\n StreamingConfig = new Gcp.SecurityCenter.Inputs.NotificationConfigStreamingConfigArgs\n {\n Filter = \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsccNotification, err := pubsub.NewTopic(ctx, \"scc_notification\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"my-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = securitycenter.NewNotificationConfig(ctx, \"custom_notification_config\", \u0026securitycenter.NotificationConfigArgs{\n\t\t\tConfigId: pulumi.String(\"my-config\"),\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tDescription: pulumi.String(\"My custom Cloud Security Command Center Finding Notification Configuration\"),\n\t\t\tPubsubTopic: sccNotification.ID(),\n\t\t\tStreamingConfig: \u0026securitycenter.NotificationConfigStreamingConfigArgs{\n\t\t\t\tFilter: pulumi.String(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\"),\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.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.securitycenter.NotificationConfig;\nimport com.pulumi.gcp.securitycenter.NotificationConfigArgs;\nimport com.pulumi.gcp.securitycenter.inputs.NotificationConfigStreamingConfigArgs;\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 sccNotification = new Topic(\"sccNotification\", TopicArgs.builder()\n .name(\"my-topic\")\n .build());\n\n var customNotificationConfig = new NotificationConfig(\"customNotificationConfig\", NotificationConfigArgs.builder()\n .configId(\"my-config\")\n .organization(\"123456789\")\n .description(\"My custom Cloud Security Command Center Finding Notification Configuration\")\n .pubsubTopic(sccNotification.id())\n .streamingConfig(NotificationConfigStreamingConfigArgs.builder()\n .filter(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sccNotification:\n type: gcp:pubsub:Topic\n name: scc_notification\n properties:\n name: my-topic\n customNotificationConfig:\n type: gcp:securitycenter:NotificationConfig\n name: custom_notification_config\n properties:\n configId: my-config\n organization: '123456789'\n description: My custom Cloud Security Command Center Finding Notification Configuration\n pubsubTopic: ${sccNotification.id}\n streamingConfig:\n filter: category = \"OPEN_FIREWALL\" AND state = \"ACTIVE\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNotificationConfig can be imported using any of these accepted formats:\n\n* `organizations/{{organization}}/notificationConfigs/{{name}}`\n\n* `{{organization}}/{{name}}`\n\nWhen using the `pulumi import` command, NotificationConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securitycenter/notificationConfig:NotificationConfig default organizations/{{organization}}/notificationConfigs/{{name}}\n```\n\n```sh\n$ pulumi import gcp:securitycenter/notificationConfig:NotificationConfig default {{organization}}/{{name}}\n```\n\n", + "description": "A Cloud Security Command Center (Cloud SCC) notification configs. A\nnotification config is a Cloud SCC resource that contains the\nconfiguration to send notifications for create/update events of\nfindings, assets and etc.\n\u003e **Note:** In order to use Cloud SCC resources, your organization must be enrolled\nin [SCC Standard/Premium](https://cloud.google.com/security-command-center/docs/quickstart-security-command-center).\nWithout doing so, you may run into errors during resource creation.\n\n\nTo get more information about NotificationConfig, see:\n\n* [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v1/organizations.notificationConfigs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/security-command-center/docs)\n\n## Example Usage\n\n### Scc Notification Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sccNotification = new gcp.pubsub.Topic(\"scc_notification\", {name: \"my-topic\"});\nconst customNotificationConfig = new gcp.securitycenter.NotificationConfig(\"custom_notification_config\", {\n configId: \"my-config\",\n organization: \"123456789\",\n description: \"My custom Cloud Security Command Center Finding Notification Configuration\",\n pubsubTopic: sccNotification.id,\n streamingConfig: {\n filter: \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscc_notification = gcp.pubsub.Topic(\"scc_notification\", name=\"my-topic\")\ncustom_notification_config = gcp.securitycenter.NotificationConfig(\"custom_notification_config\",\n config_id=\"my-config\",\n organization=\"123456789\",\n description=\"My custom Cloud Security Command Center Finding Notification Configuration\",\n pubsub_topic=scc_notification.id,\n streaming_config={\n \"filter\": \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sccNotification = new Gcp.PubSub.Topic(\"scc_notification\", new()\n {\n Name = \"my-topic\",\n });\n\n var customNotificationConfig = new Gcp.SecurityCenter.NotificationConfig(\"custom_notification_config\", new()\n {\n ConfigId = \"my-config\",\n Organization = \"123456789\",\n Description = \"My custom Cloud Security Command Center Finding Notification Configuration\",\n PubsubTopic = sccNotification.Id,\n StreamingConfig = new Gcp.SecurityCenter.Inputs.NotificationConfigStreamingConfigArgs\n {\n Filter = \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsccNotification, err := pubsub.NewTopic(ctx, \"scc_notification\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"my-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = securitycenter.NewNotificationConfig(ctx, \"custom_notification_config\", \u0026securitycenter.NotificationConfigArgs{\n\t\t\tConfigId: pulumi.String(\"my-config\"),\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tDescription: pulumi.String(\"My custom Cloud Security Command Center Finding Notification Configuration\"),\n\t\t\tPubsubTopic: sccNotification.ID(),\n\t\t\tStreamingConfig: \u0026securitycenter.NotificationConfigStreamingConfigArgs{\n\t\t\t\tFilter: pulumi.String(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\"),\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.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.securitycenter.NotificationConfig;\nimport com.pulumi.gcp.securitycenter.NotificationConfigArgs;\nimport com.pulumi.gcp.securitycenter.inputs.NotificationConfigStreamingConfigArgs;\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 sccNotification = new Topic(\"sccNotification\", TopicArgs.builder()\n .name(\"my-topic\")\n .build());\n\n var customNotificationConfig = new NotificationConfig(\"customNotificationConfig\", NotificationConfigArgs.builder()\n .configId(\"my-config\")\n .organization(\"123456789\")\n .description(\"My custom Cloud Security Command Center Finding Notification Configuration\")\n .pubsubTopic(sccNotification.id())\n .streamingConfig(NotificationConfigStreamingConfigArgs.builder()\n .filter(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sccNotification:\n type: gcp:pubsub:Topic\n name: scc_notification\n properties:\n name: my-topic\n customNotificationConfig:\n type: gcp:securitycenter:NotificationConfig\n name: custom_notification_config\n properties:\n configId: my-config\n organization: '123456789'\n description: My custom Cloud Security Command Center Finding Notification Configuration\n pubsubTopic: ${sccNotification.id}\n streamingConfig:\n filter: category = \"OPEN_FIREWALL\" AND state = \"ACTIVE\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nNotificationConfig can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, NotificationConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securitycenter/notificationConfig:NotificationConfig default {{name}}\n```\n\n", "properties": { "configId": { "type": "string", @@ -255390,7 +258567,7 @@ } }, "gcp:securitycenter/projectNotificationConfig:ProjectNotificationConfig": { - "description": "A Cloud Security Command Center (Cloud SCC) notification configs. A\nnotification config is a Cloud SCC resource that contains the\nconfiguration to send notifications for create/update events of\nfindings, assets and etc.\n\u003e **Note:** In order to use Cloud SCC resources, your organization must be enrolled\nin [SCC Standard/Premium](https://cloud.google.com/security-command-center/docs/quickstart-security-command-center).\nWithout doing so, you may run into errors during resource creation.\n\n\nTo get more information about ProjectNotificationConfig, see:\n\n* [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v1/projects.notificationConfigs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/security-command-center/docs)\n\n## Example Usage\n\n### Scc Project Notification Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sccProjectNotification = new gcp.pubsub.Topic(\"scc_project_notification\", {name: \"my-topic\"});\nconst customNotificationConfig = new gcp.securitycenter.ProjectNotificationConfig(\"custom_notification_config\", {\n configId: \"my-config\",\n project: \"my-project-name\",\n description: \"My custom Cloud Security Command Center Finding Notification Configuration\",\n pubsubTopic: sccProjectNotification.id,\n streamingConfig: {\n filter: \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscc_project_notification = gcp.pubsub.Topic(\"scc_project_notification\", name=\"my-topic\")\ncustom_notification_config = gcp.securitycenter.ProjectNotificationConfig(\"custom_notification_config\",\n config_id=\"my-config\",\n project=\"my-project-name\",\n description=\"My custom Cloud Security Command Center Finding Notification Configuration\",\n pubsub_topic=scc_project_notification.id,\n streaming_config={\n \"filter\": \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sccProjectNotification = new Gcp.PubSub.Topic(\"scc_project_notification\", new()\n {\n Name = \"my-topic\",\n });\n\n var customNotificationConfig = new Gcp.SecurityCenter.ProjectNotificationConfig(\"custom_notification_config\", new()\n {\n ConfigId = \"my-config\",\n Project = \"my-project-name\",\n Description = \"My custom Cloud Security Command Center Finding Notification Configuration\",\n PubsubTopic = sccProjectNotification.Id,\n StreamingConfig = new Gcp.SecurityCenter.Inputs.ProjectNotificationConfigStreamingConfigArgs\n {\n Filter = \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsccProjectNotification, err := pubsub.NewTopic(ctx, \"scc_project_notification\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"my-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = securitycenter.NewProjectNotificationConfig(ctx, \"custom_notification_config\", \u0026securitycenter.ProjectNotificationConfigArgs{\n\t\t\tConfigId: pulumi.String(\"my-config\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDescription: pulumi.String(\"My custom Cloud Security Command Center Finding Notification Configuration\"),\n\t\t\tPubsubTopic: sccProjectNotification.ID(),\n\t\t\tStreamingConfig: \u0026securitycenter.ProjectNotificationConfigStreamingConfigArgs{\n\t\t\t\tFilter: pulumi.String(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\"),\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.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.securitycenter.ProjectNotificationConfig;\nimport com.pulumi.gcp.securitycenter.ProjectNotificationConfigArgs;\nimport com.pulumi.gcp.securitycenter.inputs.ProjectNotificationConfigStreamingConfigArgs;\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 sccProjectNotification = new Topic(\"sccProjectNotification\", TopicArgs.builder()\n .name(\"my-topic\")\n .build());\n\n var customNotificationConfig = new ProjectNotificationConfig(\"customNotificationConfig\", ProjectNotificationConfigArgs.builder()\n .configId(\"my-config\")\n .project(\"my-project-name\")\n .description(\"My custom Cloud Security Command Center Finding Notification Configuration\")\n .pubsubTopic(sccProjectNotification.id())\n .streamingConfig(ProjectNotificationConfigStreamingConfigArgs.builder()\n .filter(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sccProjectNotification:\n type: gcp:pubsub:Topic\n name: scc_project_notification\n properties:\n name: my-topic\n customNotificationConfig:\n type: gcp:securitycenter:ProjectNotificationConfig\n name: custom_notification_config\n properties:\n configId: my-config\n project: my-project-name\n description: My custom Cloud Security Command Center Finding Notification Configuration\n pubsubTopic: ${sccProjectNotification.id}\n streamingConfig:\n filter: category = \"OPEN_FIREWALL\" AND state = \"ACTIVE\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nProjectNotificationConfig can be imported using any of these accepted formats:\n\n* `projects/{{project}}/notificationConfigs/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, ProjectNotificationConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securitycenter/projectNotificationConfig:ProjectNotificationConfig default projects/{{project}}/notificationConfigs/{{name}}\n```\n\n```sh\n$ pulumi import gcp:securitycenter/projectNotificationConfig:ProjectNotificationConfig default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:securitycenter/projectNotificationConfig:ProjectNotificationConfig default {{name}}\n```\n\n", + "description": "A Cloud Security Command Center (Cloud SCC) notification configs. A\nnotification config is a Cloud SCC resource that contains the\nconfiguration to send notifications for create/update events of\nfindings, assets and etc.\n\u003e **Note:** In order to use Cloud SCC resources, your organization must be enrolled\nin [SCC Standard/Premium](https://cloud.google.com/security-command-center/docs/quickstart-security-command-center).\nWithout doing so, you may run into errors during resource creation.\n\n\nTo get more information about ProjectNotificationConfig, see:\n\n* [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v1/projects.notificationConfigs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/security-command-center/docs)\n\n## Example Usage\n\n### Scc Project Notification Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sccProjectNotification = new gcp.pubsub.Topic(\"scc_project_notification\", {name: \"my-topic\"});\nconst customNotificationConfig = new gcp.securitycenter.ProjectNotificationConfig(\"custom_notification_config\", {\n configId: \"my-config\",\n project: \"my-project-name\",\n description: \"My custom Cloud Security Command Center Finding Notification Configuration\",\n pubsubTopic: sccProjectNotification.id,\n streamingConfig: {\n filter: \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscc_project_notification = gcp.pubsub.Topic(\"scc_project_notification\", name=\"my-topic\")\ncustom_notification_config = gcp.securitycenter.ProjectNotificationConfig(\"custom_notification_config\",\n config_id=\"my-config\",\n project=\"my-project-name\",\n description=\"My custom Cloud Security Command Center Finding Notification Configuration\",\n pubsub_topic=scc_project_notification.id,\n streaming_config={\n \"filter\": \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sccProjectNotification = new Gcp.PubSub.Topic(\"scc_project_notification\", new()\n {\n Name = \"my-topic\",\n });\n\n var customNotificationConfig = new Gcp.SecurityCenter.ProjectNotificationConfig(\"custom_notification_config\", new()\n {\n ConfigId = \"my-config\",\n Project = \"my-project-name\",\n Description = \"My custom Cloud Security Command Center Finding Notification Configuration\",\n PubsubTopic = sccProjectNotification.Id,\n StreamingConfig = new Gcp.SecurityCenter.Inputs.ProjectNotificationConfigStreamingConfigArgs\n {\n Filter = \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsccProjectNotification, err := pubsub.NewTopic(ctx, \"scc_project_notification\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"my-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = securitycenter.NewProjectNotificationConfig(ctx, \"custom_notification_config\", \u0026securitycenter.ProjectNotificationConfigArgs{\n\t\t\tConfigId: pulumi.String(\"my-config\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tDescription: pulumi.String(\"My custom Cloud Security Command Center Finding Notification Configuration\"),\n\t\t\tPubsubTopic: sccProjectNotification.ID(),\n\t\t\tStreamingConfig: \u0026securitycenter.ProjectNotificationConfigStreamingConfigArgs{\n\t\t\t\tFilter: pulumi.String(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\"),\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.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.securitycenter.ProjectNotificationConfig;\nimport com.pulumi.gcp.securitycenter.ProjectNotificationConfigArgs;\nimport com.pulumi.gcp.securitycenter.inputs.ProjectNotificationConfigStreamingConfigArgs;\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 sccProjectNotification = new Topic(\"sccProjectNotification\", TopicArgs.builder()\n .name(\"my-topic\")\n .build());\n\n var customNotificationConfig = new ProjectNotificationConfig(\"customNotificationConfig\", ProjectNotificationConfigArgs.builder()\n .configId(\"my-config\")\n .project(\"my-project-name\")\n .description(\"My custom Cloud Security Command Center Finding Notification Configuration\")\n .pubsubTopic(sccProjectNotification.id())\n .streamingConfig(ProjectNotificationConfigStreamingConfigArgs.builder()\n .filter(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sccProjectNotification:\n type: gcp:pubsub:Topic\n name: scc_project_notification\n properties:\n name: my-topic\n customNotificationConfig:\n type: gcp:securitycenter:ProjectNotificationConfig\n name: custom_notification_config\n properties:\n configId: my-config\n project: my-project-name\n description: My custom Cloud Security Command Center Finding Notification Configuration\n pubsubTopic: ${sccProjectNotification.id}\n streamingConfig:\n filter: category = \"OPEN_FIREWALL\" AND state = \"ACTIVE\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nProjectNotificationConfig can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, ProjectNotificationConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securitycenter/projectNotificationConfig:ProjectNotificationConfig default {{name}}\n```\n\n", "properties": { "configId": { "type": "string", @@ -256484,7 +259661,7 @@ } }, "gcp:securitycenter/v2OrganizationNotificationConfig:V2OrganizationNotificationConfig": { - "description": "A Cloud Security Command Center (Cloud SCC) notification configs. A\nnotification config is a Cloud SCC resource that contains the\nconfiguration to send notifications for create/update events of\nfindings, assets and etc.\n\u003e **Note:** In order to use Cloud SCC resources, your organization must be enrolled\nin [SCC Standard/Premium](https://cloud.google.com/security-command-center/docs/quickstart-security-command-center).\nWithout doing so, you may run into errors during resource creation.\n\n\nTo get more information about OrganizationNotificationConfig, see:\n\n* [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v2/organizations.locations.notificationConfigs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/security-command-center/docs)\n\n## Example Usage\n\n### Scc V2 Organization Notification Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sccV2OrganizationNotificationConfig = new gcp.pubsub.Topic(\"scc_v2_organization_notification_config\", {name: \"my-topic\"});\nconst customOrganizationNotificationConfig = new gcp.securitycenter.V2OrganizationNotificationConfig(\"custom_organization_notification_config\", {\n configId: \"my-config\",\n organization: \"123456789\",\n location: \"global\",\n description: \"My custom Cloud Security Command Center Finding Organization Notification Configuration\",\n pubsubTopic: sccV2OrganizationNotificationConfig.id,\n streamingConfig: {\n filter: \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscc_v2_organization_notification_config = gcp.pubsub.Topic(\"scc_v2_organization_notification_config\", name=\"my-topic\")\ncustom_organization_notification_config = gcp.securitycenter.V2OrganizationNotificationConfig(\"custom_organization_notification_config\",\n config_id=\"my-config\",\n organization=\"123456789\",\n location=\"global\",\n description=\"My custom Cloud Security Command Center Finding Organization Notification Configuration\",\n pubsub_topic=scc_v2_organization_notification_config.id,\n streaming_config={\n \"filter\": \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sccV2OrganizationNotificationConfig = new Gcp.PubSub.Topic(\"scc_v2_organization_notification_config\", new()\n {\n Name = \"my-topic\",\n });\n\n var customOrganizationNotificationConfig = new Gcp.SecurityCenter.V2OrganizationNotificationConfig(\"custom_organization_notification_config\", new()\n {\n ConfigId = \"my-config\",\n Organization = \"123456789\",\n Location = \"global\",\n Description = \"My custom Cloud Security Command Center Finding Organization Notification Configuration\",\n PubsubTopic = sccV2OrganizationNotificationConfig.Id,\n StreamingConfig = new Gcp.SecurityCenter.Inputs.V2OrganizationNotificationConfigStreamingConfigArgs\n {\n Filter = \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsccV2OrganizationNotificationConfig, err := pubsub.NewTopic(ctx, \"scc_v2_organization_notification_config\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"my-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = securitycenter.NewV2OrganizationNotificationConfig(ctx, \"custom_organization_notification_config\", \u0026securitycenter.V2OrganizationNotificationConfigArgs{\n\t\t\tConfigId: pulumi.String(\"my-config\"),\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"My custom Cloud Security Command Center Finding Organization Notification Configuration\"),\n\t\t\tPubsubTopic: sccV2OrganizationNotificationConfig.ID(),\n\t\t\tStreamingConfig: \u0026securitycenter.V2OrganizationNotificationConfigStreamingConfigArgs{\n\t\t\t\tFilter: pulumi.String(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\"),\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.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.securitycenter.V2OrganizationNotificationConfig;\nimport com.pulumi.gcp.securitycenter.V2OrganizationNotificationConfigArgs;\nimport com.pulumi.gcp.securitycenter.inputs.V2OrganizationNotificationConfigStreamingConfigArgs;\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 sccV2OrganizationNotificationConfig = new Topic(\"sccV2OrganizationNotificationConfig\", TopicArgs.builder()\n .name(\"my-topic\")\n .build());\n\n var customOrganizationNotificationConfig = new V2OrganizationNotificationConfig(\"customOrganizationNotificationConfig\", V2OrganizationNotificationConfigArgs.builder()\n .configId(\"my-config\")\n .organization(\"123456789\")\n .location(\"global\")\n .description(\"My custom Cloud Security Command Center Finding Organization Notification Configuration\")\n .pubsubTopic(sccV2OrganizationNotificationConfig.id())\n .streamingConfig(V2OrganizationNotificationConfigStreamingConfigArgs.builder()\n .filter(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sccV2OrganizationNotificationConfig:\n type: gcp:pubsub:Topic\n name: scc_v2_organization_notification_config\n properties:\n name: my-topic\n customOrganizationNotificationConfig:\n type: gcp:securitycenter:V2OrganizationNotificationConfig\n name: custom_organization_notification_config\n properties:\n configId: my-config\n organization: '123456789'\n location: global\n description: My custom Cloud Security Command Center Finding Organization Notification Configuration\n pubsubTopic: ${sccV2OrganizationNotificationConfig.id}\n streamingConfig:\n filter: category = \"OPEN_FIREWALL\" AND state = \"ACTIVE\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nOrganizationNotificationConfig can be imported using any of these accepted formats:\n\n* `organizations/{{organization}}/locations/{{location}}/notificationConfigs/{{name}}`\n\n* `{{organization}}/{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, OrganizationNotificationConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securitycenter/v2OrganizationNotificationConfig:V2OrganizationNotificationConfig default organizations/{{organization}}/locations/{{location}}/notificationConfigs/{{name}}\n```\n\n```sh\n$ pulumi import gcp:securitycenter/v2OrganizationNotificationConfig:V2OrganizationNotificationConfig default {{organization}}/{{location}}/{{name}}\n```\n\n", + "description": "A Cloud Security Command Center (Cloud SCC) notification configs. A\nnotification config is a Cloud SCC resource that contains the\nconfiguration to send notifications for create/update events of\nfindings, assets and etc.\n\u003e **Note:** In order to use Cloud SCC resources, your organization must be enrolled\nin [SCC Standard/Premium](https://cloud.google.com/security-command-center/docs/quickstart-security-command-center).\nWithout doing so, you may run into errors during resource creation.\n\n\nTo get more information about OrganizationNotificationConfig, see:\n\n* [API documentation](https://cloud.google.com/security-command-center/docs/reference/rest/v2/organizations.locations.notificationConfigs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/security-command-center/docs)\n\n## Example Usage\n\n### Scc V2 Organization Notification Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sccV2OrganizationNotificationConfig = new gcp.pubsub.Topic(\"scc_v2_organization_notification_config\", {name: \"my-topic\"});\nconst customOrganizationNotificationConfig = new gcp.securitycenter.V2OrganizationNotificationConfig(\"custom_organization_notification_config\", {\n configId: \"my-config\",\n organization: \"123456789\",\n location: \"global\",\n description: \"My custom Cloud Security Command Center Finding Organization Notification Configuration\",\n pubsubTopic: sccV2OrganizationNotificationConfig.id,\n streamingConfig: {\n filter: \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscc_v2_organization_notification_config = gcp.pubsub.Topic(\"scc_v2_organization_notification_config\", name=\"my-topic\")\ncustom_organization_notification_config = gcp.securitycenter.V2OrganizationNotificationConfig(\"custom_organization_notification_config\",\n config_id=\"my-config\",\n organization=\"123456789\",\n location=\"global\",\n description=\"My custom Cloud Security Command Center Finding Organization Notification Configuration\",\n pubsub_topic=scc_v2_organization_notification_config.id,\n streaming_config={\n \"filter\": \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sccV2OrganizationNotificationConfig = new Gcp.PubSub.Topic(\"scc_v2_organization_notification_config\", new()\n {\n Name = \"my-topic\",\n });\n\n var customOrganizationNotificationConfig = new Gcp.SecurityCenter.V2OrganizationNotificationConfig(\"custom_organization_notification_config\", new()\n {\n ConfigId = \"my-config\",\n Organization = \"123456789\",\n Location = \"global\",\n Description = \"My custom Cloud Security Command Center Finding Organization Notification Configuration\",\n PubsubTopic = sccV2OrganizationNotificationConfig.Id,\n StreamingConfig = new Gcp.SecurityCenter.Inputs.V2OrganizationNotificationConfigStreamingConfigArgs\n {\n Filter = \"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/securitycenter\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsccV2OrganizationNotificationConfig, err := pubsub.NewTopic(ctx, \"scc_v2_organization_notification_config\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"my-topic\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = securitycenter.NewV2OrganizationNotificationConfig(ctx, \"custom_organization_notification_config\", \u0026securitycenter.V2OrganizationNotificationConfigArgs{\n\t\t\tConfigId: pulumi.String(\"my-config\"),\n\t\t\tOrganization: pulumi.String(\"123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tDescription: pulumi.String(\"My custom Cloud Security Command Center Finding Organization Notification Configuration\"),\n\t\t\tPubsubTopic: sccV2OrganizationNotificationConfig.ID(),\n\t\t\tStreamingConfig: \u0026securitycenter.V2OrganizationNotificationConfigStreamingConfigArgs{\n\t\t\t\tFilter: pulumi.String(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\"),\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.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.securitycenter.V2OrganizationNotificationConfig;\nimport com.pulumi.gcp.securitycenter.V2OrganizationNotificationConfigArgs;\nimport com.pulumi.gcp.securitycenter.inputs.V2OrganizationNotificationConfigStreamingConfigArgs;\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 sccV2OrganizationNotificationConfig = new Topic(\"sccV2OrganizationNotificationConfig\", TopicArgs.builder()\n .name(\"my-topic\")\n .build());\n\n var customOrganizationNotificationConfig = new V2OrganizationNotificationConfig(\"customOrganizationNotificationConfig\", V2OrganizationNotificationConfigArgs.builder()\n .configId(\"my-config\")\n .organization(\"123456789\")\n .location(\"global\")\n .description(\"My custom Cloud Security Command Center Finding Organization Notification Configuration\")\n .pubsubTopic(sccV2OrganizationNotificationConfig.id())\n .streamingConfig(V2OrganizationNotificationConfigStreamingConfigArgs.builder()\n .filter(\"category = \\\"OPEN_FIREWALL\\\" AND state = \\\"ACTIVE\\\"\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sccV2OrganizationNotificationConfig:\n type: gcp:pubsub:Topic\n name: scc_v2_organization_notification_config\n properties:\n name: my-topic\n customOrganizationNotificationConfig:\n type: gcp:securitycenter:V2OrganizationNotificationConfig\n name: custom_organization_notification_config\n properties:\n configId: my-config\n organization: '123456789'\n location: global\n description: My custom Cloud Security Command Center Finding Organization Notification Configuration\n pubsubTopic: ${sccV2OrganizationNotificationConfig.id}\n streamingConfig:\n filter: category = \"OPEN_FIREWALL\" AND state = \"ACTIVE\"\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nOrganizationNotificationConfig can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, OrganizationNotificationConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:securitycenter/v2OrganizationNotificationConfig:V2OrganizationNotificationConfig default {{name}}\n```\n\n", "properties": { "configId": { "type": "string", @@ -260879,7 +264056,7 @@ } }, "gcp:spanner/instance:Instance": { - "description": "An isolated set of Cloud Spanner resources on which databases can be\nhosted.\n\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/spanner/)\n\n## Example Usage\n\n### Spanner Instance Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.spanner.Instance(\"example\", {\n config: \"regional-us-central1\",\n displayName: \"Test Spanner Instance\",\n numNodes: 2,\n edition: \"STANDARD\",\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.spanner.Instance(\"example\",\n config=\"regional-us-central1\",\n display_name=\"Test Spanner Instance\",\n num_nodes=2,\n edition=\"STANDARD\",\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Spanner.Instance(\"example\", new()\n {\n Config = \"regional-us-central1\",\n DisplayName = \"Test Spanner Instance\",\n NumNodes = 2,\n Edition = \"STANDARD\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/spanner\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := spanner.NewInstance(ctx, \"example\", \u0026spanner.InstanceArgs{\n\t\t\tConfig: pulumi.String(\"regional-us-central1\"),\n\t\t\tDisplayName: pulumi.String(\"Test Spanner Instance\"),\n\t\t\tNumNodes: pulumi.Int(2),\n\t\t\tEdition: pulumi.String(\"STANDARD\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.spanner.Instance;\nimport com.pulumi.gcp.spanner.InstanceArgs;\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 example = new Instance(\"example\", InstanceArgs.builder()\n .config(\"regional-us-central1\")\n .displayName(\"Test Spanner Instance\")\n .numNodes(2)\n .edition(\"STANDARD\")\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:spanner:Instance\n properties:\n config: regional-us-central1\n displayName: Test Spanner Instance\n numNodes: 2\n edition: STANDARD\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Spanner Instance Processing Units\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.spanner.Instance(\"example\", {\n config: \"regional-us-central1\",\n displayName: \"Test Spanner Instance\",\n processingUnits: 200,\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.spanner.Instance(\"example\",\n config=\"regional-us-central1\",\n display_name=\"Test Spanner Instance\",\n processing_units=200,\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Spanner.Instance(\"example\", new()\n {\n Config = \"regional-us-central1\",\n DisplayName = \"Test Spanner Instance\",\n ProcessingUnits = 200,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/spanner\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := spanner.NewInstance(ctx, \"example\", \u0026spanner.InstanceArgs{\n\t\t\tConfig: pulumi.String(\"regional-us-central1\"),\n\t\t\tDisplayName: pulumi.String(\"Test Spanner Instance\"),\n\t\t\tProcessingUnits: pulumi.Int(200),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.spanner.Instance;\nimport com.pulumi.gcp.spanner.InstanceArgs;\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 example = new Instance(\"example\", InstanceArgs.builder()\n .config(\"regional-us-central1\")\n .displayName(\"Test Spanner Instance\")\n .processingUnits(200)\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:spanner:Instance\n properties:\n config: regional-us-central1\n displayName: Test Spanner Instance\n processingUnits: 200\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Spanner Instance With Autoscaling\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.spanner.Instance(\"example\", {\n config: \"regional-us-central1\",\n displayName: \"Test Spanner Instance\",\n autoscalingConfig: {\n autoscalingLimits: {\n maxProcessingUnits: 3000,\n minProcessingUnits: 2000,\n },\n autoscalingTargets: {\n highPriorityCpuUtilizationPercent: 75,\n storageUtilizationPercent: 90,\n },\n },\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.spanner.Instance(\"example\",\n config=\"regional-us-central1\",\n display_name=\"Test Spanner Instance\",\n autoscaling_config={\n \"autoscaling_limits\": {\n \"max_processing_units\": 3000,\n \"min_processing_units\": 2000,\n },\n \"autoscaling_targets\": {\n \"high_priority_cpu_utilization_percent\": 75,\n \"storage_utilization_percent\": 90,\n },\n },\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Spanner.Instance(\"example\", new()\n {\n Config = \"regional-us-central1\",\n DisplayName = \"Test Spanner Instance\",\n AutoscalingConfig = new Gcp.Spanner.Inputs.InstanceAutoscalingConfigArgs\n {\n AutoscalingLimits = new Gcp.Spanner.Inputs.InstanceAutoscalingConfigAutoscalingLimitsArgs\n {\n MaxProcessingUnits = 3000,\n MinProcessingUnits = 2000,\n },\n AutoscalingTargets = new Gcp.Spanner.Inputs.InstanceAutoscalingConfigAutoscalingTargetsArgs\n {\n HighPriorityCpuUtilizationPercent = 75,\n StorageUtilizationPercent = 90,\n },\n },\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/spanner\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := spanner.NewInstance(ctx, \"example\", \u0026spanner.InstanceArgs{\n\t\t\tConfig: pulumi.String(\"regional-us-central1\"),\n\t\t\tDisplayName: pulumi.String(\"Test Spanner Instance\"),\n\t\t\tAutoscalingConfig: \u0026spanner.InstanceAutoscalingConfigArgs{\n\t\t\t\tAutoscalingLimits: \u0026spanner.InstanceAutoscalingConfigAutoscalingLimitsArgs{\n\t\t\t\t\tMaxProcessingUnits: pulumi.Int(3000),\n\t\t\t\t\tMinProcessingUnits: pulumi.Int(2000),\n\t\t\t\t},\n\t\t\t\tAutoscalingTargets: \u0026spanner.InstanceAutoscalingConfigAutoscalingTargetsArgs{\n\t\t\t\t\tHighPriorityCpuUtilizationPercent: pulumi.Int(75),\n\t\t\t\t\tStorageUtilizationPercent: pulumi.Int(90),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.spanner.Instance;\nimport com.pulumi.gcp.spanner.InstanceArgs;\nimport com.pulumi.gcp.spanner.inputs.InstanceAutoscalingConfigArgs;\nimport com.pulumi.gcp.spanner.inputs.InstanceAutoscalingConfigAutoscalingLimitsArgs;\nimport com.pulumi.gcp.spanner.inputs.InstanceAutoscalingConfigAutoscalingTargetsArgs;\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 example = new Instance(\"example\", InstanceArgs.builder()\n .config(\"regional-us-central1\")\n .displayName(\"Test Spanner Instance\")\n .autoscalingConfig(InstanceAutoscalingConfigArgs.builder()\n .autoscalingLimits(InstanceAutoscalingConfigAutoscalingLimitsArgs.builder()\n .maxProcessingUnits(3000)\n .minProcessingUnits(2000)\n .build())\n .autoscalingTargets(InstanceAutoscalingConfigAutoscalingTargetsArgs.builder()\n .highPriorityCpuUtilizationPercent(75)\n .storageUtilizationPercent(90)\n .build())\n .build())\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:spanner:Instance\n properties:\n config: regional-us-central1\n displayName: Test Spanner Instance\n autoscalingConfig:\n autoscalingLimits:\n maxProcessingUnits: 3000\n minProcessingUnits: 2000\n autoscalingTargets:\n highPriorityCpuUtilizationPercent: 75\n storageUtilizationPercent: 90\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Spanner Instance Multi Regional\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.spanner.Instance(\"example\", {\n config: \"nam-eur-asia1\",\n displayName: \"Multi Regional Instance\",\n numNodes: 2,\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.spanner.Instance(\"example\",\n config=\"nam-eur-asia1\",\n display_name=\"Multi Regional Instance\",\n num_nodes=2,\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Spanner.Instance(\"example\", new()\n {\n Config = \"nam-eur-asia1\",\n DisplayName = \"Multi Regional Instance\",\n NumNodes = 2,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/spanner\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := spanner.NewInstance(ctx, \"example\", \u0026spanner.InstanceArgs{\n\t\t\tConfig: pulumi.String(\"nam-eur-asia1\"),\n\t\t\tDisplayName: pulumi.String(\"Multi Regional Instance\"),\n\t\t\tNumNodes: pulumi.Int(2),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.spanner.Instance;\nimport com.pulumi.gcp.spanner.InstanceArgs;\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 example = new Instance(\"example\", InstanceArgs.builder()\n .config(\"nam-eur-asia1\")\n .displayName(\"Multi Regional Instance\")\n .numNodes(2)\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:spanner:Instance\n properties:\n config: nam-eur-asia1\n displayName: Multi Regional Instance\n numNodes: 2\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstance can be imported using any of these accepted formats:\n\n* `projects/{{project}}/instances/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Instance can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:spanner/instance:Instance default projects/{{project}}/instances/{{name}}\n```\n\n```sh\n$ pulumi import gcp:spanner/instance:Instance default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:spanner/instance:Instance default {{name}}\n```\n\n", + "description": "An isolated set of Cloud Spanner resources on which databases can be\nhosted.\n\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/spanner/)\n\n## Example Usage\n\n### Spanner Instance Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.spanner.Instance(\"example\", {\n config: \"regional-us-central1\",\n displayName: \"Test Spanner Instance\",\n numNodes: 2,\n edition: \"STANDARD\",\n defaultBackupScheduleType: \"AUTOMATIC\",\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.spanner.Instance(\"example\",\n config=\"regional-us-central1\",\n display_name=\"Test Spanner Instance\",\n num_nodes=2,\n edition=\"STANDARD\",\n default_backup_schedule_type=\"AUTOMATIC\",\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Spanner.Instance(\"example\", new()\n {\n Config = \"regional-us-central1\",\n DisplayName = \"Test Spanner Instance\",\n NumNodes = 2,\n Edition = \"STANDARD\",\n DefaultBackupScheduleType = \"AUTOMATIC\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/spanner\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := spanner.NewInstance(ctx, \"example\", \u0026spanner.InstanceArgs{\n\t\t\tConfig: pulumi.String(\"regional-us-central1\"),\n\t\t\tDisplayName: pulumi.String(\"Test Spanner Instance\"),\n\t\t\tNumNodes: pulumi.Int(2),\n\t\t\tEdition: pulumi.String(\"STANDARD\"),\n\t\t\tDefaultBackupScheduleType: pulumi.String(\"AUTOMATIC\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.spanner.Instance;\nimport com.pulumi.gcp.spanner.InstanceArgs;\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 example = new Instance(\"example\", InstanceArgs.builder()\n .config(\"regional-us-central1\")\n .displayName(\"Test Spanner Instance\")\n .numNodes(2)\n .edition(\"STANDARD\")\n .defaultBackupScheduleType(\"AUTOMATIC\")\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:spanner:Instance\n properties:\n config: regional-us-central1\n displayName: Test Spanner Instance\n numNodes: 2\n edition: STANDARD\n defaultBackupScheduleType: AUTOMATIC\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Spanner Instance Processing Units\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.spanner.Instance(\"example\", {\n config: \"regional-us-central1\",\n displayName: \"Test Spanner Instance\",\n processingUnits: 200,\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.spanner.Instance(\"example\",\n config=\"regional-us-central1\",\n display_name=\"Test Spanner Instance\",\n processing_units=200,\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Spanner.Instance(\"example\", new()\n {\n Config = \"regional-us-central1\",\n DisplayName = \"Test Spanner Instance\",\n ProcessingUnits = 200,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/spanner\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := spanner.NewInstance(ctx, \"example\", \u0026spanner.InstanceArgs{\n\t\t\tConfig: pulumi.String(\"regional-us-central1\"),\n\t\t\tDisplayName: pulumi.String(\"Test Spanner Instance\"),\n\t\t\tProcessingUnits: pulumi.Int(200),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.spanner.Instance;\nimport com.pulumi.gcp.spanner.InstanceArgs;\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 example = new Instance(\"example\", InstanceArgs.builder()\n .config(\"regional-us-central1\")\n .displayName(\"Test Spanner Instance\")\n .processingUnits(200)\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:spanner:Instance\n properties:\n config: regional-us-central1\n displayName: Test Spanner Instance\n processingUnits: 200\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Spanner Instance With Autoscaling\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.spanner.Instance(\"example\", {\n config: \"regional-us-central1\",\n displayName: \"Test Spanner Instance\",\n autoscalingConfig: {\n autoscalingLimits: {\n maxProcessingUnits: 3000,\n minProcessingUnits: 2000,\n },\n autoscalingTargets: {\n highPriorityCpuUtilizationPercent: 75,\n storageUtilizationPercent: 90,\n },\n },\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.spanner.Instance(\"example\",\n config=\"regional-us-central1\",\n display_name=\"Test Spanner Instance\",\n autoscaling_config={\n \"autoscaling_limits\": {\n \"max_processing_units\": 3000,\n \"min_processing_units\": 2000,\n },\n \"autoscaling_targets\": {\n \"high_priority_cpu_utilization_percent\": 75,\n \"storage_utilization_percent\": 90,\n },\n },\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Spanner.Instance(\"example\", new()\n {\n Config = \"regional-us-central1\",\n DisplayName = \"Test Spanner Instance\",\n AutoscalingConfig = new Gcp.Spanner.Inputs.InstanceAutoscalingConfigArgs\n {\n AutoscalingLimits = new Gcp.Spanner.Inputs.InstanceAutoscalingConfigAutoscalingLimitsArgs\n {\n MaxProcessingUnits = 3000,\n MinProcessingUnits = 2000,\n },\n AutoscalingTargets = new Gcp.Spanner.Inputs.InstanceAutoscalingConfigAutoscalingTargetsArgs\n {\n HighPriorityCpuUtilizationPercent = 75,\n StorageUtilizationPercent = 90,\n },\n },\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/spanner\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := spanner.NewInstance(ctx, \"example\", \u0026spanner.InstanceArgs{\n\t\t\tConfig: pulumi.String(\"regional-us-central1\"),\n\t\t\tDisplayName: pulumi.String(\"Test Spanner Instance\"),\n\t\t\tAutoscalingConfig: \u0026spanner.InstanceAutoscalingConfigArgs{\n\t\t\t\tAutoscalingLimits: \u0026spanner.InstanceAutoscalingConfigAutoscalingLimitsArgs{\n\t\t\t\t\tMaxProcessingUnits: pulumi.Int(3000),\n\t\t\t\t\tMinProcessingUnits: pulumi.Int(2000),\n\t\t\t\t},\n\t\t\t\tAutoscalingTargets: \u0026spanner.InstanceAutoscalingConfigAutoscalingTargetsArgs{\n\t\t\t\t\tHighPriorityCpuUtilizationPercent: pulumi.Int(75),\n\t\t\t\t\tStorageUtilizationPercent: pulumi.Int(90),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.spanner.Instance;\nimport com.pulumi.gcp.spanner.InstanceArgs;\nimport com.pulumi.gcp.spanner.inputs.InstanceAutoscalingConfigArgs;\nimport com.pulumi.gcp.spanner.inputs.InstanceAutoscalingConfigAutoscalingLimitsArgs;\nimport com.pulumi.gcp.spanner.inputs.InstanceAutoscalingConfigAutoscalingTargetsArgs;\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 example = new Instance(\"example\", InstanceArgs.builder()\n .config(\"regional-us-central1\")\n .displayName(\"Test Spanner Instance\")\n .autoscalingConfig(InstanceAutoscalingConfigArgs.builder()\n .autoscalingLimits(InstanceAutoscalingConfigAutoscalingLimitsArgs.builder()\n .maxProcessingUnits(3000)\n .minProcessingUnits(2000)\n .build())\n .autoscalingTargets(InstanceAutoscalingConfigAutoscalingTargetsArgs.builder()\n .highPriorityCpuUtilizationPercent(75)\n .storageUtilizationPercent(90)\n .build())\n .build())\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:spanner:Instance\n properties:\n config: regional-us-central1\n displayName: Test Spanner Instance\n autoscalingConfig:\n autoscalingLimits:\n maxProcessingUnits: 3000\n minProcessingUnits: 2000\n autoscalingTargets:\n highPriorityCpuUtilizationPercent: 75\n storageUtilizationPercent: 90\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Spanner Instance Multi Regional\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.spanner.Instance(\"example\", {\n config: \"nam-eur-asia1\",\n displayName: \"Multi Regional Instance\",\n numNodes: 2,\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.spanner.Instance(\"example\",\n config=\"nam-eur-asia1\",\n display_name=\"Multi Regional Instance\",\n num_nodes=2,\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.Spanner.Instance(\"example\", new()\n {\n Config = \"nam-eur-asia1\",\n DisplayName = \"Multi Regional Instance\",\n NumNodes = 2,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/spanner\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := spanner.NewInstance(ctx, \"example\", \u0026spanner.InstanceArgs{\n\t\t\tConfig: pulumi.String(\"nam-eur-asia1\"),\n\t\t\tDisplayName: pulumi.String(\"Multi Regional Instance\"),\n\t\t\tNumNodes: pulumi.Int(2),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\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.gcp.spanner.Instance;\nimport com.pulumi.gcp.spanner.InstanceArgs;\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 example = new Instance(\"example\", InstanceArgs.builder()\n .config(\"nam-eur-asia1\")\n .displayName(\"Multi Regional Instance\")\n .numNodes(2)\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:spanner:Instance\n properties:\n config: nam-eur-asia1\n displayName: Multi Regional Instance\n numNodes: 2\n labels:\n foo: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nInstance can be imported using any of these accepted formats:\n\n* `projects/{{project}}/instances/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Instance can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:spanner/instance:Instance default projects/{{project}}/instances/{{name}}\n```\n\n```sh\n$ pulumi import gcp:spanner/instance:Instance default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:spanner/instance:Instance default {{name}}\n```\n\n", "properties": { "autoscalingConfig": { "$ref": "#/types/gcp:spanner/InstanceAutoscalingConfig:InstanceAutoscalingConfig", @@ -260889,6 +264066,10 @@ "type": "string", "description": "The name of the instance's configuration (similar but not\nquite the same as a region) which defines the geographic placement and\nreplication of your databases in this instance. It determines where your data\nis stored. Values are typically of the form `regional-europe-west1` , `us-central` etc.\nIn order to obtain a valid list please consult the\n[Configuration section of the docs](https://cloud.google.com/spanner/docs/instances).\n" }, + "defaultBackupScheduleType": { + "type": "string", + "description": "Controls the default backup behavior for new databases within the instance.\nNote that `AUTOMATIC` is not permitted for free instances, as backups and backup schedules are not allowed for free instances.\nif unset or NONE, no default backup schedule will be created for new databases within the instance.\nPossible values are: `NONE`, `AUTOMATIC`.\n" + }, "displayName": { "type": "string", "description": "The descriptive name for this instance as it appears in UIs. Must be\nunique per project and between 4 and 30 characters in length.\n\n\n- - -\n" @@ -260945,6 +264126,7 @@ }, "required": [ "config", + "defaultBackupScheduleType", "displayName", "edition", "effectiveLabels", @@ -260965,6 +264147,10 @@ "description": "The name of the instance's configuration (similar but not\nquite the same as a region) which defines the geographic placement and\nreplication of your databases in this instance. It determines where your data\nis stored. Values are typically of the form `regional-europe-west1` , `us-central` etc.\nIn order to obtain a valid list please consult the\n[Configuration section of the docs](https://cloud.google.com/spanner/docs/instances).\n", "willReplaceOnChanges": true }, + "defaultBackupScheduleType": { + "type": "string", + "description": "Controls the default backup behavior for new databases within the instance.\nNote that `AUTOMATIC` is not permitted for free instances, as backups and backup schedules are not allowed for free instances.\nif unset or NONE, no default backup schedule will be created for new databases within the instance.\nPossible values are: `NONE`, `AUTOMATIC`.\n" + }, "displayName": { "type": "string", "description": "The descriptive name for this instance as it appears in UIs. Must be\nunique per project and between 4 and 30 characters in length.\n\n\n- - -\n" @@ -261017,6 +264203,10 @@ "description": "The name of the instance's configuration (similar but not\nquite the same as a region) which defines the geographic placement and\nreplication of your databases in this instance. It determines where your data\nis stored. Values are typically of the form `regional-europe-west1` , `us-central` etc.\nIn order to obtain a valid list please consult the\n[Configuration section of the docs](https://cloud.google.com/spanner/docs/instances).\n", "willReplaceOnChanges": true }, + "defaultBackupScheduleType": { + "type": "string", + "description": "Controls the default backup behavior for new databases within the instance.\nNote that `AUTOMATIC` is not permitted for free instances, as backups and backup schedules are not allowed for free instances.\nif unset or NONE, no default backup schedule will be created for new databases within the instance.\nPossible values are: `NONE`, `AUTOMATIC`.\n" + }, "displayName": { "type": "string", "description": "The descriptive name for this instance as it appears in UIs. Must be\nunique per project and between 4 and 30 characters in length.\n\n\n- - -\n" @@ -261627,7 +264817,7 @@ } }, "gcp:sql/databaseInstance:DatabaseInstance": { - "description": "Creates a new Google SQL Database Instance. For more information, see the [official documentation](https://cloud.google.com/sql/),\nor the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/instances).\n\n\u003e **NOTE on `gcp.sql.DatabaseInstance`:** - Second-generation instances include a\ndefault 'root'@'%' user with no password. This user will be deleted by the provider on\ninstance creation. You should use `gcp.sql.User` to define a custom user with\na restricted host and strong password.\n\n\u003e **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false`\n(and run `pulumi update` to write the field to state) in order to destroy an instance.\nIt is recommended to not set this field (or set it to true) until you're ready to destroy the instance and its databases.\n\n## Example Usage\n\n### SQL Second Generation Instance\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"main-instance\",\n databaseVersion: \"POSTGRES_15\",\n region: \"us-central1\",\n settings: {\n tier: \"db-f1-micro\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"main-instance\",\n database_version=\"POSTGRES_15\",\n region=\"us-central1\",\n settings={\n \"tier\": \"db-f1-micro\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"main-instance\",\n DatabaseVersion = \"POSTGRES_15\",\n Region = \"us-central1\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_15\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\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.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\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 main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"main-instance\")\n .databaseVersion(\"POSTGRES_15\")\n .region(\"us-central1\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: main-instance\n databaseVersion: POSTGRES_15\n region: us-central1\n settings:\n tier: db-f1-micro\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Private IP Instance\n\u003e **NOTE:** For private IP instance setup, note that the `gcp.sql.DatabaseInstance` does not actually interpolate values from `gcp.servicenetworking.Connection`. You must explicitly add a `depends_on`reference as shown below.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst privateNetwork = new gcp.compute.Network(\"private_network\", {name: \"private-network\"});\nconst privateIpAddress = new gcp.compute.GlobalAddress(\"private_ip_address\", {\n name: \"private-ip-address\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: privateNetwork.id,\n});\nconst privateVpcConnection = new gcp.servicenetworking.Connection(\"private_vpc_connection\", {\n network: privateNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [privateIpAddress.name],\n});\nconst dbNameSuffix = new random.RandomId(\"db_name_suffix\", {byteLength: 4});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: pulumi.interpolate`private-instance-${dbNameSuffix.hex}`,\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n ipConfiguration: {\n ipv4Enabled: false,\n privateNetwork: privateNetwork.selfLink,\n enablePrivatePathForGoogleCloudServices: true,\n },\n },\n}, {\n dependsOn: [privateVpcConnection],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\nprivate_network = gcp.compute.Network(\"private_network\", name=\"private-network\")\nprivate_ip_address = gcp.compute.GlobalAddress(\"private_ip_address\",\n name=\"private-ip-address\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=private_network.id)\nprivate_vpc_connection = gcp.servicenetworking.Connection(\"private_vpc_connection\",\n network=private_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[private_ip_address.name])\ndb_name_suffix = random.RandomId(\"db_name_suffix\", byte_length=4)\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=db_name_suffix.hex.apply(lambda hex: f\"private-instance-{hex}\"),\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings={\n \"tier\": \"db-f1-micro\",\n \"ip_configuration\": {\n \"ipv4_enabled\": False,\n \"private_network\": private_network.self_link,\n \"enable_private_path_for_google_cloud_services\": True,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[private_vpc_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var privateNetwork = new Gcp.Compute.Network(\"private_network\", new()\n {\n Name = \"private-network\",\n });\n\n var privateIpAddress = new Gcp.Compute.GlobalAddress(\"private_ip_address\", new()\n {\n Name = \"private-ip-address\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = privateNetwork.Id,\n });\n\n var privateVpcConnection = new Gcp.ServiceNetworking.Connection(\"private_vpc_connection\", new()\n {\n Network = privateNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n privateIpAddress.Name,\n },\n });\n\n var dbNameSuffix = new Random.RandomId(\"db_name_suffix\", new()\n {\n ByteLength = 4,\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = dbNameSuffix.Hex.Apply(hex =\u003e $\"private-instance-{hex}\"),\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs\n {\n Ipv4Enabled = false,\n PrivateNetwork = privateNetwork.SelfLink,\n EnablePrivatePathForGoogleCloudServices = true,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n privateVpcConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprivateNetwork, err := compute.NewNetwork(ctx, \"private_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"private-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAddress, err := compute.NewGlobalAddress(ctx, \"private_ip_address\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"private-ip-address\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: privateNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateVpcConnection, err := servicenetworking.NewConnection(ctx, \"private_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: privateNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tprivateIpAddress.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdbNameSuffix, err := random.NewRandomId(ctx, \"db_name_suffix\", \u0026random.RandomIdArgs{\n\t\t\tByteLength: pulumi.Int(4),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: dbNameSuffix.Hex.ApplyT(func(hex string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"private-instance-%v\", hex), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t\tIpConfiguration: \u0026sql.DatabaseInstanceSettingsIpConfigurationArgs{\n\t\t\t\t\tIpv4Enabled: pulumi.Bool(false),\n\t\t\t\t\tPrivateNetwork: privateNetwork.SelfLink,\n\t\t\t\t\tEnablePrivatePathForGoogleCloudServices: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprivateVpcConnection,\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.random.RandomId;\nimport com.pulumi.random.RandomIdArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 privateNetwork = new Network(\"privateNetwork\", NetworkArgs.builder()\n .name(\"private-network\")\n .build());\n\n var privateIpAddress = new GlobalAddress(\"privateIpAddress\", GlobalAddressArgs.builder()\n .name(\"private-ip-address\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(privateNetwork.id())\n .build());\n\n var privateVpcConnection = new Connection(\"privateVpcConnection\", ConnectionArgs.builder()\n .network(privateNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(privateIpAddress.name())\n .build());\n\n var dbNameSuffix = new RandomId(\"dbNameSuffix\", RandomIdArgs.builder()\n .byteLength(4)\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(dbNameSuffix.hex().applyValue(hex -\u003e String.format(\"private-instance-%s\", hex)))\n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder()\n .ipv4Enabled(false)\n .privateNetwork(privateNetwork.selfLink())\n .enablePrivatePathForGoogleCloudServices(true)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(privateVpcConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n privateNetwork:\n type: gcp:compute:Network\n name: private_network\n properties:\n name: private-network\n privateIpAddress:\n type: gcp:compute:GlobalAddress\n name: private_ip_address\n properties:\n name: private-ip-address\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${privateNetwork.id}\n privateVpcConnection:\n type: gcp:servicenetworking:Connection\n name: private_vpc_connection\n properties:\n network: ${privateNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${privateIpAddress.name}\n dbNameSuffix:\n type: random:RandomId\n name: db_name_suffix\n properties:\n byteLength: 4\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: private-instance-${dbNameSuffix.hex}\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n ipConfiguration:\n ipv4Enabled: false\n privateNetwork: ${privateNetwork.selfLink}\n enablePrivatePathForGoogleCloudServices: true\n options:\n dependson:\n - ${privateVpcConnection}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### ENTERPRISE_PLUS Instance with data_cache_config\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"enterprise-plus-main-instance\",\n databaseVersion: \"MYSQL_8_0_31\",\n settings: {\n tier: \"db-perf-optimized-N-2\",\n edition: \"ENTERPRISE_PLUS\",\n dataCacheConfig: {\n dataCacheEnabled: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"enterprise-plus-main-instance\",\n database_version=\"MYSQL_8_0_31\",\n settings={\n \"tier\": \"db-perf-optimized-N-2\",\n \"edition\": \"ENTERPRISE_PLUS\",\n \"data_cache_config\": {\n \"data_cache_enabled\": True,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"enterprise-plus-main-instance\",\n DatabaseVersion = \"MYSQL_8_0_31\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-perf-optimized-N-2\",\n Edition = \"ENTERPRISE_PLUS\",\n DataCacheConfig = new Gcp.Sql.Inputs.DatabaseInstanceSettingsDataCacheConfigArgs\n {\n DataCacheEnabled = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"enterprise-plus-main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0_31\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-perf-optimized-N-2\"),\n\t\t\t\tEdition: pulumi.String(\"ENTERPRISE_PLUS\"),\n\t\t\t\tDataCacheConfig: \u0026sql.DatabaseInstanceSettingsDataCacheConfigArgs{\n\t\t\t\t\tDataCacheEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsDataCacheConfigArgs;\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 main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"enterprise-plus-main-instance\")\n .databaseVersion(\"MYSQL_8_0_31\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-perf-optimized-N-2\")\n .edition(\"ENTERPRISE_PLUS\")\n .dataCacheConfig(DatabaseInstanceSettingsDataCacheConfigArgs.builder()\n .dataCacheEnabled(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: enterprise-plus-main-instance\n databaseVersion: MYSQL_8_0_31\n settings:\n tier: db-perf-optimized-N-2\n edition: ENTERPRISE_PLUS\n dataCacheConfig:\n dataCacheEnabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Cloud SQL Instance with PSC connectivity\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"psc-enabled-main-instance\",\n databaseVersion: \"MYSQL_8_0\",\n settings: {\n tier: \"db-f1-micro\",\n ipConfiguration: {\n pscConfigs: [{\n pscEnabled: true,\n allowedConsumerProjects: [\"allowed-consumer-project-name\"],\n }],\n ipv4Enabled: false,\n },\n backupConfiguration: {\n enabled: true,\n binaryLogEnabled: true,\n },\n availabilityType: \"REGIONAL\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"psc-enabled-main-instance\",\n database_version=\"MYSQL_8_0\",\n settings={\n \"tier\": \"db-f1-micro\",\n \"ip_configuration\": {\n \"psc_configs\": [{\n \"psc_enabled\": True,\n \"allowed_consumer_projects\": [\"allowed-consumer-project-name\"],\n }],\n \"ipv4_enabled\": False,\n },\n \"backup_configuration\": {\n \"enabled\": True,\n \"binary_log_enabled\": True,\n },\n \"availability_type\": \"REGIONAL\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"psc-enabled-main-instance\",\n DatabaseVersion = \"MYSQL_8_0\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs\n {\n PscConfigs = new[]\n {\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationPscConfigArgs\n {\n PscEnabled = true,\n AllowedConsumerProjects = new[]\n {\n \"allowed-consumer-project-name\",\n },\n },\n },\n Ipv4Enabled = false,\n },\n BackupConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsBackupConfigurationArgs\n {\n Enabled = true,\n BinaryLogEnabled = true,\n },\n AvailabilityType = \"REGIONAL\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"psc-enabled-main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t\tIpConfiguration: \u0026sql.DatabaseInstanceSettingsIpConfigurationArgs{\n\t\t\t\t\tPscConfigs: sql.DatabaseInstanceSettingsIpConfigurationPscConfigArray{\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationPscConfigArgs{\n\t\t\t\t\t\t\tPscEnabled: pulumi.Bool(true),\n\t\t\t\t\t\t\tAllowedConsumerProjects: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"allowed-consumer-project-name\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tIpv4Enabled: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t\tBackupConfiguration: \u0026sql.DatabaseInstanceSettingsBackupConfigurationArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t\tBinaryLogEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tAvailabilityType: pulumi.String(\"REGIONAL\"),\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.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsBackupConfigurationArgs;\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 main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"psc-enabled-main-instance\")\n .databaseVersion(\"MYSQL_8_0\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder()\n .pscConfigs(DatabaseInstanceSettingsIpConfigurationPscConfigArgs.builder()\n .pscEnabled(true)\n .allowedConsumerProjects(\"allowed-consumer-project-name\")\n .build())\n .ipv4Enabled(false)\n .build())\n .backupConfiguration(DatabaseInstanceSettingsBackupConfigurationArgs.builder()\n .enabled(true)\n .binaryLogEnabled(true)\n .build())\n .availabilityType(\"REGIONAL\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: psc-enabled-main-instance\n databaseVersion: MYSQL_8_0\n settings:\n tier: db-f1-micro\n ipConfiguration:\n pscConfigs:\n - pscEnabled: true\n allowedConsumerProjects:\n - allowed-consumer-project-name\n ipv4Enabled: false\n backupConfiguration:\n enabled: true\n binaryLogEnabled: true\n availabilityType: REGIONAL\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nDatabase instances can be imported using one of any of these accepted formats:\n\n* `projects/{{project}}/instances/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Database instances can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:sql/databaseInstance:DatabaseInstance default projects/{{project}}/instances/{{name}}\n```\n\n```sh\n$ pulumi import gcp:sql/databaseInstance:DatabaseInstance default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:sql/databaseInstance:DatabaseInstance default {{name}}\n```\n\nconfig and set on the server.\n\nWhen importing, double-check that your config has all the fields set that you expect- just seeing\n\nno diff isn't sufficient to know that your config could reproduce the imported resource.\n\n", + "description": "Creates a new Google SQL Database Instance. For more information, see the [official documentation](https://cloud.google.com/sql/),\nor the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/instances).\n\n\u003e **NOTE on `gcp.sql.DatabaseInstance`:** - Second-generation instances include a\ndefault 'root'@'%' user with no password. This user will be deleted by the provider on\ninstance creation. You should use `gcp.sql.User` to define a custom user with\na restricted host and strong password.\n\n\u003e **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false`\n(and run `pulumi update` to write the field to state) in order to destroy an instance.\nIt is recommended to not set this field (or set it to true) until you're ready to destroy the instance and its databases.\n\n## Example Usage\n\n### SQL Second Generation Instance\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"main-instance\",\n databaseVersion: \"POSTGRES_15\",\n region: \"us-central1\",\n settings: {\n tier: \"db-f1-micro\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"main-instance\",\n database_version=\"POSTGRES_15\",\n region=\"us-central1\",\n settings={\n \"tier\": \"db-f1-micro\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"main-instance\",\n DatabaseVersion = \"POSTGRES_15\",\n Region = \"us-central1\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_15\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\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.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\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 main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"main-instance\")\n .databaseVersion(\"POSTGRES_15\")\n .region(\"us-central1\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: main-instance\n databaseVersion: POSTGRES_15\n region: us-central1\n settings:\n tier: db-f1-micro\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Private IP Instance\n\u003e **NOTE:** For private IP instance setup, note that the `gcp.sql.DatabaseInstance` does not actually interpolate values from `gcp.servicenetworking.Connection`. You must explicitly add a `depends_on`reference as shown below.\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst privateNetwork = new gcp.compute.Network(\"private_network\", {name: \"private-network\"});\nconst privateIpAddress = new gcp.compute.GlobalAddress(\"private_ip_address\", {\n name: \"private-ip-address\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: privateNetwork.id,\n});\nconst privateVpcConnection = new gcp.servicenetworking.Connection(\"private_vpc_connection\", {\n network: privateNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [privateIpAddress.name],\n});\nconst dbNameSuffix = new random.RandomId(\"db_name_suffix\", {byteLength: 4});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n name: pulumi.interpolate`private-instance-${dbNameSuffix.hex}`,\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n ipConfiguration: {\n ipv4Enabled: false,\n privateNetwork: privateNetwork.selfLink,\n enablePrivatePathForGoogleCloudServices: true,\n },\n },\n}, {\n dependsOn: [privateVpcConnection],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\nprivate_network = gcp.compute.Network(\"private_network\", name=\"private-network\")\nprivate_ip_address = gcp.compute.GlobalAddress(\"private_ip_address\",\n name=\"private-ip-address\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=private_network.id)\nprivate_vpc_connection = gcp.servicenetworking.Connection(\"private_vpc_connection\",\n network=private_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[private_ip_address.name])\ndb_name_suffix = random.RandomId(\"db_name_suffix\", byte_length=4)\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n name=db_name_suffix.hex.apply(lambda hex: f\"private-instance-{hex}\"),\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings={\n \"tier\": \"db-f1-micro\",\n \"ip_configuration\": {\n \"ipv4_enabled\": False,\n \"private_network\": private_network.self_link,\n \"enable_private_path_for_google_cloud_services\": True,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[private_vpc_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var privateNetwork = new Gcp.Compute.Network(\"private_network\", new()\n {\n Name = \"private-network\",\n });\n\n var privateIpAddress = new Gcp.Compute.GlobalAddress(\"private_ip_address\", new()\n {\n Name = \"private-ip-address\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = privateNetwork.Id,\n });\n\n var privateVpcConnection = new Gcp.ServiceNetworking.Connection(\"private_vpc_connection\", new()\n {\n Network = privateNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n privateIpAddress.Name,\n },\n });\n\n var dbNameSuffix = new Random.RandomId(\"db_name_suffix\", new()\n {\n ByteLength = 4,\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Name = dbNameSuffix.Hex.Apply(hex =\u003e $\"private-instance-{hex}\"),\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs\n {\n Ipv4Enabled = false,\n PrivateNetwork = privateNetwork.SelfLink,\n EnablePrivatePathForGoogleCloudServices = true,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n privateVpcConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprivateNetwork, err := compute.NewNetwork(ctx, \"private_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"private-network\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAddress, err := compute.NewGlobalAddress(ctx, \"private_ip_address\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"private-ip-address\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(16),\n\t\t\tNetwork: privateNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateVpcConnection, err := servicenetworking.NewConnection(ctx, \"private_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: privateNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tprivateIpAddress.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdbNameSuffix, err := random.NewRandomId(ctx, \"db_name_suffix\", \u0026random.RandomIdArgs{\n\t\t\tByteLength: pulumi.Int(4),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: dbNameSuffix.Hex.ApplyT(func(hex string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"private-instance-%v\", hex), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_5_7\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t\tIpConfiguration: \u0026sql.DatabaseInstanceSettingsIpConfigurationArgs{\n\t\t\t\t\tIpv4Enabled: pulumi.Bool(false),\n\t\t\t\t\tPrivateNetwork: privateNetwork.SelfLink,\n\t\t\t\t\tEnablePrivatePathForGoogleCloudServices: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprivateVpcConnection,\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.random.RandomId;\nimport com.pulumi.random.RandomIdArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 privateNetwork = new Network(\"privateNetwork\", NetworkArgs.builder()\n .name(\"private-network\")\n .build());\n\n var privateIpAddress = new GlobalAddress(\"privateIpAddress\", GlobalAddressArgs.builder()\n .name(\"private-ip-address\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(privateNetwork.id())\n .build());\n\n var privateVpcConnection = new Connection(\"privateVpcConnection\", ConnectionArgs.builder()\n .network(privateNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(privateIpAddress.name())\n .build());\n\n var dbNameSuffix = new RandomId(\"dbNameSuffix\", RandomIdArgs.builder()\n .byteLength(4)\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder()\n .name(dbNameSuffix.hex().applyValue(hex -\u003e String.format(\"private-instance-%s\", hex)))\n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder()\n .ipv4Enabled(false)\n .privateNetwork(privateNetwork.selfLink())\n .enablePrivatePathForGoogleCloudServices(true)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(privateVpcConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n privateNetwork:\n type: gcp:compute:Network\n name: private_network\n properties:\n name: private-network\n privateIpAddress:\n type: gcp:compute:GlobalAddress\n name: private_ip_address\n properties:\n name: private-ip-address\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${privateNetwork.id}\n privateVpcConnection:\n type: gcp:servicenetworking:Connection\n name: private_vpc_connection\n properties:\n network: ${privateNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${privateIpAddress.name}\n dbNameSuffix:\n type: random:RandomId\n name: db_name_suffix\n properties:\n byteLength: 4\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n name: private-instance-${dbNameSuffix.hex}\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n ipConfiguration:\n ipv4Enabled: false\n privateNetwork: ${privateNetwork.selfLink}\n enablePrivatePathForGoogleCloudServices: true\n options:\n dependson:\n - ${privateVpcConnection}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### ENTERPRISE_PLUS Instance with data_cache_config\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"enterprise-plus-main-instance\",\n databaseVersion: \"MYSQL_8_0_31\",\n settings: {\n tier: \"db-perf-optimized-N-2\",\n edition: \"ENTERPRISE_PLUS\",\n dataCacheConfig: {\n dataCacheEnabled: true,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"enterprise-plus-main-instance\",\n database_version=\"MYSQL_8_0_31\",\n settings={\n \"tier\": \"db-perf-optimized-N-2\",\n \"edition\": \"ENTERPRISE_PLUS\",\n \"data_cache_config\": {\n \"data_cache_enabled\": True,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"enterprise-plus-main-instance\",\n DatabaseVersion = \"MYSQL_8_0_31\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-perf-optimized-N-2\",\n Edition = \"ENTERPRISE_PLUS\",\n DataCacheConfig = new Gcp.Sql.Inputs.DatabaseInstanceSettingsDataCacheConfigArgs\n {\n DataCacheEnabled = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"enterprise-plus-main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0_31\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-perf-optimized-N-2\"),\n\t\t\t\tEdition: pulumi.String(\"ENTERPRISE_PLUS\"),\n\t\t\t\tDataCacheConfig: \u0026sql.DatabaseInstanceSettingsDataCacheConfigArgs{\n\t\t\t\t\tDataCacheEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsDataCacheConfigArgs;\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 main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"enterprise-plus-main-instance\")\n .databaseVersion(\"MYSQL_8_0_31\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-perf-optimized-N-2\")\n .edition(\"ENTERPRISE_PLUS\")\n .dataCacheConfig(DatabaseInstanceSettingsDataCacheConfigArgs.builder()\n .dataCacheEnabled(true)\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: enterprise-plus-main-instance\n databaseVersion: MYSQL_8_0_31\n settings:\n tier: db-perf-optimized-N-2\n edition: ENTERPRISE_PLUS\n dataCacheConfig:\n dataCacheEnabled: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n### Cloud SQL Instance with PSC connectivity\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n name: \"psc-enabled-main-instance\",\n databaseVersion: \"MYSQL_8_0\",\n settings: {\n tier: \"db-f1-micro\",\n ipConfiguration: {\n pscConfigs: [{\n pscEnabled: true,\n allowedConsumerProjects: [\"allowed-consumer-project-name\"],\n }],\n ipv4Enabled: false,\n },\n backupConfiguration: {\n enabled: true,\n binaryLogEnabled: true,\n },\n availabilityType: \"REGIONAL\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.sql.DatabaseInstance(\"main\",\n name=\"psc-enabled-main-instance\",\n database_version=\"MYSQL_8_0\",\n settings={\n \"tier\": \"db-f1-micro\",\n \"ip_configuration\": {\n \"psc_configs\": [{\n \"psc_enabled\": True,\n \"allowed_consumer_projects\": [\"allowed-consumer-project-name\"],\n }],\n \"ipv4_enabled\": False,\n },\n \"backup_configuration\": {\n \"enabled\": True,\n \"binary_log_enabled\": True,\n },\n \"availability_type\": \"REGIONAL\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n Name = \"psc-enabled-main-instance\",\n DatabaseVersion = \"MYSQL_8_0\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs\n {\n PscConfigs = new[]\n {\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationPscConfigArgs\n {\n PscEnabled = true,\n AllowedConsumerProjects = new[]\n {\n \"allowed-consumer-project-name\",\n },\n },\n },\n Ipv4Enabled = false,\n },\n BackupConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsBackupConfigurationArgs\n {\n Enabled = true,\n BinaryLogEnabled = true,\n },\n AvailabilityType = \"REGIONAL\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tName: pulumi.String(\"psc-enabled-main-instance\"),\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t\tIpConfiguration: \u0026sql.DatabaseInstanceSettingsIpConfigurationArgs{\n\t\t\t\t\tPscConfigs: sql.DatabaseInstanceSettingsIpConfigurationPscConfigArray{\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationPscConfigArgs{\n\t\t\t\t\t\t\tPscEnabled: pulumi.Bool(true),\n\t\t\t\t\t\t\tAllowedConsumerProjects: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"allowed-consumer-project-name\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tIpv4Enabled: pulumi.Bool(false),\n\t\t\t\t},\n\t\t\t\tBackupConfiguration: \u0026sql.DatabaseInstanceSettingsBackupConfigurationArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t\tBinaryLogEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tAvailabilityType: pulumi.String(\"REGIONAL\"),\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.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsBackupConfigurationArgs;\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 main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder()\n .name(\"psc-enabled-main-instance\")\n .databaseVersion(\"MYSQL_8_0\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder()\n .pscConfigs(DatabaseInstanceSettingsIpConfigurationPscConfigArgs.builder()\n .pscEnabled(true)\n .allowedConsumerProjects(\"allowed-consumer-project-name\")\n .build())\n .ipv4Enabled(false)\n .build())\n .backupConfiguration(DatabaseInstanceSettingsBackupConfigurationArgs.builder()\n .enabled(true)\n .binaryLogEnabled(true)\n .build())\n .availabilityType(\"REGIONAL\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n name: psc-enabled-main-instance\n databaseVersion: MYSQL_8_0\n settings:\n tier: db-f1-micro\n ipConfiguration:\n pscConfigs:\n - pscEnabled: true\n allowedConsumerProjects:\n - allowed-consumer-project-name\n ipv4Enabled: false\n backupConfiguration:\n enabled: true\n binaryLogEnabled: true\n availabilityType: REGIONAL\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Switchover (SQL Server Only)\n\nUsers can perform a switchover on any direct `cascadable` replica by following the steps below.\n\n ~\u003e**WARNING:** Failure to follow these steps can lead to data loss (You will be warned during plan stage). To prevent data loss during a switchover, please verify your plan with the checklist below.\n\nFor a more in-depth walkthrough with example code, see the Switchover Guide\n\n### Steps to Invoke Switchover\n\nCreate a `cascadable` replica in a different region from the primary (`cascadable_replica` is set to true in `replica_configuration`)\n\n#### Invoking switchover in the replica resource:\n1. Change instance_type from `READ_REPLICA_INSTANCE` to `CLOUD_SQL_INSTANCE`\n2. Remove `master_instance_name`\n3. Remove `replica_configuration`\n4. Add current primary's name to the replica's `replica_names` list\n\n#### Updating the primary resource:\n1. Change `instance_type` from `CLOUD_SQL_INSTANCE` to `READ_REPLICA_INSTANCE`\n2. Set `master_instance_name` to the original replica (which will be primary after switchover)\n3. Set `replica_configuration` and set `cascadable_replica` to `true`\n4. Remove original replica from `replica_names`\n\n \u003e **NOTE**: Do **not** delete the replica_names field, even if it has no replicas remaining. Set replica_names = [ ] to indicate it having no replicas.\n\n#### Plan and verify that:\n- `pulumi preview` outputs **\"0 to add, 0 to destroy\"**\n- `pulumi preview` does not say **\"must be replaced\"** for any resource\n- Every resource **\"will be updated in-place\"**\n- Only the 2 instances involved in switchover have planned changes\n- (Recommended) Use `deletion_protection` on instances as a safety measure\n\n## Import\n\nDatabase instances can be imported using one of any of these accepted formats:\n\n* `projects/{{project}}/instances/{{name}}`\n\n* `{{project}}/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Database instances can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:sql/databaseInstance:DatabaseInstance default projects/{{project}}/instances/{{name}}\n```\n\n```sh\n$ pulumi import gcp:sql/databaseInstance:DatabaseInstance default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:sql/databaseInstance:DatabaseInstance default {{name}}\n```\n\nconfig and set on the server.\n\nWhen importing, double-check that your config has all the fields set that you expect- just seeing\n\nno diff isn't sufficient to know that your config could reproduce the imported resource.\n\n", "properties": { "availableMaintenanceVersions": { "type": "array", @@ -261654,7 +264844,7 @@ }, "dnsName": { "type": "string", - "description": "The dns name of the instance.\n" + "description": "The DNS name of the instance. See [Connect to an instance using Private Service Connect](https://cloud.google.com/sql/docs/mysql/configure-private-service-connect#view-summary-information-cloud-sql-instances-psc-enabled) for more details.\n" }, "encryptionKeyName": { "type": "string", @@ -261708,9 +264898,16 @@ }, "replicaConfiguration": { "$ref": "#/types/gcp:sql/DatabaseInstanceReplicaConfiguration:DatabaseInstanceReplicaConfiguration", - "description": "The configuration for replication. The\nconfiguration is detailed below. Valid only for MySQL instances.\n", + "description": "The configuration for replication. The\nconfiguration is detailed below.\n", "secret": true }, + "replicaNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of replica names. Can be updated.\n" + }, "restoreBackupContext": { "$ref": "#/types/gcp:sql/DatabaseInstanceRestoreBackupContext:DatabaseInstanceRestoreBackupContext", "description": "The context needed to restore the database to a backup run. This field will\ncause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below.\n**NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this\nblock during resource creation/update will trigger the restore action after the resource is created/updated.\n" @@ -261758,6 +264955,7 @@ "publicIpAddress", "region", "replicaConfiguration", + "replicaNames", "selfLink", "serverCaCerts", "serviceAccountEmailAddress", @@ -261810,9 +265008,16 @@ }, "replicaConfiguration": { "$ref": "#/types/gcp:sql/DatabaseInstanceReplicaConfiguration:DatabaseInstanceReplicaConfiguration", - "description": "The configuration for replication. The\nconfiguration is detailed below. Valid only for MySQL instances.\n", + "description": "The configuration for replication. The\nconfiguration is detailed below.\n", "secret": true }, + "replicaNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of replica names. Can be updated.\n" + }, "restoreBackupContext": { "$ref": "#/types/gcp:sql/DatabaseInstanceRestoreBackupContext:DatabaseInstanceRestoreBackupContext", "description": "The context needed to restore the database to a backup run. This field will\ncause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below.\n**NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this\nblock during resource creation/update will trigger the restore action after the resource is created/updated.\n" @@ -261858,7 +265063,7 @@ }, "dnsName": { "type": "string", - "description": "The dns name of the instance.\n" + "description": "The DNS name of the instance. See [Connect to an instance using Private Service Connect](https://cloud.google.com/sql/docs/mysql/configure-private-service-connect#view-summary-information-cloud-sql-instances-psc-enabled) for more details.\n" }, "encryptionKeyName": { "type": "string", @@ -261916,9 +265121,16 @@ }, "replicaConfiguration": { "$ref": "#/types/gcp:sql/DatabaseInstanceReplicaConfiguration:DatabaseInstanceReplicaConfiguration", - "description": "The configuration for replication. The\nconfiguration is detailed below. Valid only for MySQL instances.\n", + "description": "The configuration for replication. The\nconfiguration is detailed below.\n", "secret": true }, + "replicaNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of replica names. Can be updated.\n" + }, "restoreBackupContext": { "$ref": "#/types/gcp:sql/DatabaseInstanceRestoreBackupContext:DatabaseInstanceRestoreBackupContext", "description": "The context needed to restore the database to a backup run. This field will\ncause the provider to trigger the database to restore from the backup run indicated. The configuration is detailed below.\n**NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this\nblock during resource creation/update will trigger the restore action after the resource is created/updated.\n" @@ -264945,7 +268157,7 @@ } }, "gcp:tags/tagBinding:TagBinding": { - "description": "A TagBinding represents a connection between a TagValue and a cloud resource (currently project, folder, or organization). Once a TagBinding is created, the TagValue is applied to all the descendants of the cloud resource.\n\n\nTo get more information about TagBinding, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/reference/rest/v3/tagBindings)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing)\n\n## Example Usage\n\n### Tag Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.organizations.Project(\"project\", {\n projectId: \"project_id\",\n name: \"project_id\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst key = new gcp.tags.TagKey(\"key\", {\n parent: \"organizations/123456789\",\n shortName: \"keyname\",\n description: \"For keyname resources.\",\n});\nconst value = new gcp.tags.TagValue(\"value\", {\n parent: pulumi.interpolate`tagKeys/${key.name}`,\n shortName: \"valuename\",\n description: \"For valuename resources.\",\n});\nconst binding = new gcp.tags.TagBinding(\"binding\", {\n parent: pulumi.interpolate`//cloudresourcemanager.googleapis.com/projects/${project.number}`,\n tagValue: pulumi.interpolate`tagValues/${value.name}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.Project(\"project\",\n project_id=\"project_id\",\n name=\"project_id\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\nkey = gcp.tags.TagKey(\"key\",\n parent=\"organizations/123456789\",\n short_name=\"keyname\",\n description=\"For keyname resources.\")\nvalue = gcp.tags.TagValue(\"value\",\n parent=key.name.apply(lambda name: f\"tagKeys/{name}\"),\n short_name=\"valuename\",\n description=\"For valuename resources.\")\nbinding = gcp.tags.TagBinding(\"binding\",\n parent=project.number.apply(lambda number: f\"//cloudresourcemanager.googleapis.com/projects/{number}\"),\n tag_value=value.name.apply(lambda name: f\"tagValues/{name}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n ProjectId = \"project_id\",\n Name = \"project_id\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var key = new Gcp.Tags.TagKey(\"key\", new()\n {\n Parent = \"organizations/123456789\",\n ShortName = \"keyname\",\n Description = \"For keyname resources.\",\n });\n\n var @value = new Gcp.Tags.TagValue(\"value\", new()\n {\n Parent = key.Name.Apply(name =\u003e $\"tagKeys/{name}\"),\n ShortName = \"valuename\",\n Description = \"For valuename resources.\",\n });\n\n var binding = new Gcp.Tags.TagBinding(\"binding\", new()\n {\n Parent = project.Number.Apply(number =\u003e $\"//cloudresourcemanager.googleapis.com/projects/{number}\"),\n TagValue = @value.Name.Apply(name =\u003e $\"tagValues/{name}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"project_id\"),\n\t\t\tName: pulumi.String(\"project_id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkey, err := tags.NewTagKey(ctx, \"key\", \u0026tags.TagKeyArgs{\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tShortName: pulumi.String(\"keyname\"),\n\t\t\tDescription: pulumi.String(\"For keyname resources.\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvalue, err := tags.NewTagValue(ctx, \"value\", \u0026tags.TagValueArgs{\n\t\t\tParent: key.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"tagKeys/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tShortName: pulumi.String(\"valuename\"),\n\t\t\tDescription: pulumi.String(\"For valuename resources.\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = tags.NewTagBinding(ctx, \"binding\", \u0026tags.TagBindingArgs{\n\t\t\tParent: project.Number.ApplyT(func(number string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"//cloudresourcemanager.googleapis.com/projects/%v\", number), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tTagValue: value.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"tagValues/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\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.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.tags.TagBinding;\nimport com.pulumi.gcp.tags.TagBindingArgs;\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 project = new Project(\"project\", ProjectArgs.builder()\n .projectId(\"project_id\")\n .name(\"project_id\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var key = new TagKey(\"key\", TagKeyArgs.builder()\n .parent(\"organizations/123456789\")\n .shortName(\"keyname\")\n .description(\"For keyname resources.\")\n .build());\n\n var value = new TagValue(\"value\", TagValueArgs.builder()\n .parent(key.name().applyValue(name -\u003e String.format(\"tagKeys/%s\", name)))\n .shortName(\"valuename\")\n .description(\"For valuename resources.\")\n .build());\n\n var binding = new TagBinding(\"binding\", TagBindingArgs.builder()\n .parent(project.number().applyValue(number -\u003e String.format(\"//cloudresourcemanager.googleapis.com/projects/%s\", number)))\n .tagValue(value.name().applyValue(name -\u003e String.format(\"tagValues/%s\", name)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: project_id\n name: project_id\n orgId: '123456789'\n deletionPolicy: DELETE\n key:\n type: gcp:tags:TagKey\n properties:\n parent: organizations/123456789\n shortName: keyname\n description: For keyname resources.\n value:\n type: gcp:tags:TagValue\n properties:\n parent: tagKeys/${key.name}\n shortName: valuename\n description: For valuename resources.\n binding:\n type: gcp:tags:TagBinding\n properties:\n parent: //cloudresourcemanager.googleapis.com/projects/${project.number}\n tagValue: tagValues/${value.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nTagBinding can be imported using any of these accepted formats:\n\n* `tagBindings/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, TagBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:tags/tagBinding:TagBinding default tagBindings/{{name}}\n```\n\n```sh\n$ pulumi import gcp:tags/tagBinding:TagBinding default {{name}}\n```\n\n", + "description": "A TagBinding represents a connection between a TagValue and a cloud resource (currently project, folder, or organization). Once a TagBinding is created, the TagValue is applied to all the descendants of the cloud resource.\n\n\nTo get more information about TagBinding, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/reference/rest/v3/tagBindings)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing)\n\n## Example Usage\n\n### Tag Binding Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.organizations.Project(\"project\", {\n projectId: \"project_id\",\n name: \"project_id\",\n orgId: \"123456789\",\n deletionPolicy: \"DELETE\",\n});\nconst key = new gcp.tags.TagKey(\"key\", {\n parent: \"organizations/123456789\",\n shortName: \"keyname\",\n description: \"For keyname resources.\",\n});\nconst value = new gcp.tags.TagValue(\"value\", {\n parent: key.id,\n shortName: \"valuename\",\n description: \"For valuename resources.\",\n});\nconst binding = new gcp.tags.TagBinding(\"binding\", {\n parent: pulumi.interpolate`//cloudresourcemanager.googleapis.com/projects/${project.number}`,\n tagValue: value.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.Project(\"project\",\n project_id=\"project_id\",\n name=\"project_id\",\n org_id=\"123456789\",\n deletion_policy=\"DELETE\")\nkey = gcp.tags.TagKey(\"key\",\n parent=\"organizations/123456789\",\n short_name=\"keyname\",\n description=\"For keyname resources.\")\nvalue = gcp.tags.TagValue(\"value\",\n parent=key.id,\n short_name=\"valuename\",\n description=\"For valuename resources.\")\nbinding = gcp.tags.TagBinding(\"binding\",\n parent=project.number.apply(lambda number: f\"//cloudresourcemanager.googleapis.com/projects/{number}\"),\n tag_value=value.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n ProjectId = \"project_id\",\n Name = \"project_id\",\n OrgId = \"123456789\",\n DeletionPolicy = \"DELETE\",\n });\n\n var key = new Gcp.Tags.TagKey(\"key\", new()\n {\n Parent = \"organizations/123456789\",\n ShortName = \"keyname\",\n Description = \"For keyname resources.\",\n });\n\n var @value = new Gcp.Tags.TagValue(\"value\", new()\n {\n Parent = key.Id,\n ShortName = \"valuename\",\n Description = \"For valuename resources.\",\n });\n\n var binding = new Gcp.Tags.TagBinding(\"binding\", new()\n {\n Parent = project.Number.Apply(number =\u003e $\"//cloudresourcemanager.googleapis.com/projects/{number}\"),\n TagValue = @value.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"project_id\"),\n\t\t\tName: pulumi.String(\"project_id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkey, err := tags.NewTagKey(ctx, \"key\", \u0026tags.TagKeyArgs{\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tShortName: pulumi.String(\"keyname\"),\n\t\t\tDescription: pulumi.String(\"For keyname resources.\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvalue, err := tags.NewTagValue(ctx, \"value\", \u0026tags.TagValueArgs{\n\t\t\tParent: key.ID(),\n\t\t\tShortName: pulumi.String(\"valuename\"),\n\t\t\tDescription: pulumi.String(\"For valuename resources.\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = tags.NewTagBinding(ctx, \"binding\", \u0026tags.TagBindingArgs{\n\t\t\tParent: project.Number.ApplyT(func(number string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"//cloudresourcemanager.googleapis.com/projects/%v\", number), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tTagValue: value.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.tags.TagBinding;\nimport com.pulumi.gcp.tags.TagBindingArgs;\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 project = new Project(\"project\", ProjectArgs.builder()\n .projectId(\"project_id\")\n .name(\"project_id\")\n .orgId(\"123456789\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var key = new TagKey(\"key\", TagKeyArgs.builder()\n .parent(\"organizations/123456789\")\n .shortName(\"keyname\")\n .description(\"For keyname resources.\")\n .build());\n\n var value = new TagValue(\"value\", TagValueArgs.builder()\n .parent(key.id())\n .shortName(\"valuename\")\n .description(\"For valuename resources.\")\n .build());\n\n var binding = new TagBinding(\"binding\", TagBindingArgs.builder()\n .parent(project.number().applyValue(number -\u003e String.format(\"//cloudresourcemanager.googleapis.com/projects/%s\", number)))\n .tagValue(value.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: project_id\n name: project_id\n orgId: '123456789'\n deletionPolicy: DELETE\n key:\n type: gcp:tags:TagKey\n properties:\n parent: organizations/123456789\n shortName: keyname\n description: For keyname resources.\n value:\n type: gcp:tags:TagValue\n properties:\n parent: ${key.id}\n shortName: valuename\n description: For valuename resources.\n binding:\n type: gcp:tags:TagBinding\n properties:\n parent: //cloudresourcemanager.googleapis.com/projects/${project.number}\n tagValue: ${value.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nTagBinding can be imported using any of these accepted formats:\n\n* `tagBindings/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, TagBinding can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:tags/tagBinding:TagBinding default tagBindings/{{name}}\n```\n\n```sh\n$ pulumi import gcp:tags/tagBinding:TagBinding default {{name}}\n```\n\n", "properties": { "name": { "type": "string", @@ -265370,7 +268582,7 @@ } }, "gcp:tags/tagValue:TagValue": { - "description": "A TagValue is a child of a particular TagKey. TagValues are used to group cloud resources for the purpose of controlling them using policies.\n\n\nTo get more information about TagValue, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/reference/rest/v3/tagValues)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing)\n\n## Example Usage\n\n### Tag Value Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst key = new gcp.tags.TagKey(\"key\", {\n parent: \"organizations/123456789\",\n shortName: \"keyname\",\n description: \"For keyname resources.\",\n});\nconst value = new gcp.tags.TagValue(\"value\", {\n parent: pulumi.interpolate`tagKeys/${key.name}`,\n shortName: \"valuename\",\n description: \"For valuename resources.\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey = gcp.tags.TagKey(\"key\",\n parent=\"organizations/123456789\",\n short_name=\"keyname\",\n description=\"For keyname resources.\")\nvalue = gcp.tags.TagValue(\"value\",\n parent=key.name.apply(lambda name: f\"tagKeys/{name}\"),\n short_name=\"valuename\",\n description=\"For valuename resources.\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var key = new Gcp.Tags.TagKey(\"key\", new()\n {\n Parent = \"organizations/123456789\",\n ShortName = \"keyname\",\n Description = \"For keyname resources.\",\n });\n\n var @value = new Gcp.Tags.TagValue(\"value\", new()\n {\n Parent = key.Name.Apply(name =\u003e $\"tagKeys/{name}\"),\n ShortName = \"valuename\",\n Description = \"For valuename resources.\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkey, err := tags.NewTagKey(ctx, \"key\", \u0026tags.TagKeyArgs{\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tShortName: pulumi.String(\"keyname\"),\n\t\t\tDescription: pulumi.String(\"For keyname resources.\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = tags.NewTagValue(ctx, \"value\", \u0026tags.TagValueArgs{\n\t\t\tParent: key.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"tagKeys/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tShortName: pulumi.String(\"valuename\"),\n\t\t\tDescription: pulumi.String(\"For valuename resources.\"),\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.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\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 key = new TagKey(\"key\", TagKeyArgs.builder()\n .parent(\"organizations/123456789\")\n .shortName(\"keyname\")\n .description(\"For keyname resources.\")\n .build());\n\n var value = new TagValue(\"value\", TagValueArgs.builder()\n .parent(key.name().applyValue(name -\u003e String.format(\"tagKeys/%s\", name)))\n .shortName(\"valuename\")\n .description(\"For valuename resources.\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n key:\n type: gcp:tags:TagKey\n properties:\n parent: organizations/123456789\n shortName: keyname\n description: For keyname resources.\n value:\n type: gcp:tags:TagValue\n properties:\n parent: tagKeys/${key.name}\n shortName: valuename\n description: For valuename resources.\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nTagValue can be imported using any of these accepted formats:\n\n* `tagValues/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, TagValue can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:tags/tagValue:TagValue default tagValues/{{name}}\n```\n\n```sh\n$ pulumi import gcp:tags/tagValue:TagValue default {{name}}\n```\n\n", + "description": "A TagValue is a child of a particular TagKey. TagValues are used to group cloud resources for the purpose of controlling them using policies.\n\n\nTo get more information about TagValue, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/reference/rest/v3/tagValues)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing)\n\n## Example Usage\n\n### Tag Value Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst key = new gcp.tags.TagKey(\"key\", {\n parent: \"organizations/123456789\",\n shortName: \"keyname\",\n description: \"For keyname resources.\",\n});\nconst value = new gcp.tags.TagValue(\"value\", {\n parent: key.id,\n shortName: \"valuename\",\n description: \"For valuename resources.\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey = gcp.tags.TagKey(\"key\",\n parent=\"organizations/123456789\",\n short_name=\"keyname\",\n description=\"For keyname resources.\")\nvalue = gcp.tags.TagValue(\"value\",\n parent=key.id,\n short_name=\"valuename\",\n description=\"For valuename resources.\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var key = new Gcp.Tags.TagKey(\"key\", new()\n {\n Parent = \"organizations/123456789\",\n ShortName = \"keyname\",\n Description = \"For keyname resources.\",\n });\n\n var @value = new Gcp.Tags.TagValue(\"value\", new()\n {\n Parent = key.Id,\n ShortName = \"valuename\",\n Description = \"For valuename resources.\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkey, err := tags.NewTagKey(ctx, \"key\", \u0026tags.TagKeyArgs{\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tShortName: pulumi.String(\"keyname\"),\n\t\t\tDescription: pulumi.String(\"For keyname resources.\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = tags.NewTagValue(ctx, \"value\", \u0026tags.TagValueArgs{\n\t\t\tParent: key.ID(),\n\t\t\tShortName: pulumi.String(\"valuename\"),\n\t\t\tDescription: pulumi.String(\"For valuename resources.\"),\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.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\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 key = new TagKey(\"key\", TagKeyArgs.builder()\n .parent(\"organizations/123456789\")\n .shortName(\"keyname\")\n .description(\"For keyname resources.\")\n .build());\n\n var value = new TagValue(\"value\", TagValueArgs.builder()\n .parent(key.id())\n .shortName(\"valuename\")\n .description(\"For valuename resources.\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n key:\n type: gcp:tags:TagKey\n properties:\n parent: organizations/123456789\n shortName: keyname\n description: For keyname resources.\n value:\n type: gcp:tags:TagValue\n properties:\n parent: ${key.id}\n shortName: valuename\n description: For valuename resources.\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nTagValue can be imported using any of these accepted formats:\n\n* `tagValues/{{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, TagValue can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:tags/tagValue:TagValue default tagValues/{{name}}\n```\n\n```sh\n$ pulumi import gcp:tags/tagValue:TagValue default {{name}}\n```\n\n", "properties": { "createTime": { "type": "string", @@ -266339,7 +269551,7 @@ } }, "gcp:transcoder/job:Job": { - "description": "Transcoding Job Resource\n\n\nTo get more information about Job, see:\n\n* [API documentation](https://cloud.google.com/transcoder/docs/reference/rest/v1/projects.locations.jobs)\n* How-to Guides\n * [Transcoder](https://cloud.google.com/transcoder/docs/)\n\n## Example Usage\n\n### Transcoder Job Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.storage.Bucket(\"default\", {\n name: \"transcoder-job\",\n location: \"US\",\n forceDestroy: true,\n uniformBucketLevelAccess: true,\n publicAccessPrevention: \"enforced\",\n});\nconst exampleMp4 = new gcp.storage.BucketObject(\"example_mp4\", {\n name: \"example.mp4\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket: _default.name,\n});\nconst defaultJobTemplate = new gcp.transcoder.JobTemplate(\"default\", {\n jobTemplateId: \"example-job-template\",\n location: \"us-central1\",\n config: {\n inputs: [{\n key: \"input0\",\n uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,\n }],\n output: {\n uri: pulumi.interpolate`gs://${_default.name}/outputs/`,\n },\n editLists: [{\n key: \"atom0\",\n inputs: [\"input0\"],\n startTimeOffset: \"0s\",\n }],\n elementaryStreams: [\n {\n key: \"video-stream0\",\n videoStream: {\n h264: {\n widthPixels: 640,\n heightPixels: 360,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 550000,\n vbvFullnessBits: 495000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"video-stream1\",\n videoStream: {\n h264: {\n widthPixels: 1280,\n heightPixels: 720,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 2500000,\n vbvFullnessBits: 2250000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"audio-stream0\",\n audioStream: {\n codec: \"aac\",\n bitrateBps: 64000,\n channelCount: 2,\n channelLayouts: [\n \"fl\",\n \"fr\",\n ],\n sampleRateHertz: 48000,\n },\n },\n ],\n muxStreams: [\n {\n key: \"sd\",\n fileName: \"sd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"hd\",\n fileName: \"hd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n ],\n },\n labels: {\n label: \"key\",\n },\n});\nconst defaultJob = new gcp.transcoder.Job(\"default\", {\n templateId: defaultJobTemplate.name,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.storage.Bucket(\"default\",\n name=\"transcoder-job\",\n location=\"US\",\n force_destroy=True,\n uniform_bucket_level_access=True,\n public_access_prevention=\"enforced\")\nexample_mp4 = gcp.storage.BucketObject(\"example_mp4\",\n name=\"example.mp4\",\n source=pulumi.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket=default.name)\ndefault_job_template = gcp.transcoder.JobTemplate(\"default\",\n job_template_id=\"example-job-template\",\n location=\"us-central1\",\n config={\n \"inputs\": [{\n \"key\": \"input0\",\n \"uri\": pulumi.Output.all(\n defaultName=default.name,\n exampleMp4Name=example_mp4.name\n).apply(lambda resolved_outputs: f\"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}\")\n,\n }],\n \"output\": {\n \"uri\": default.name.apply(lambda name: f\"gs://{name}/outputs/\"),\n },\n \"edit_lists\": [{\n \"key\": \"atom0\",\n \"inputs\": [\"input0\"],\n \"start_time_offset\": \"0s\",\n }],\n \"elementary_streams\": [\n {\n \"key\": \"video-stream0\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 640,\n \"height_pixels\": 360,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 550000,\n \"vbv_fullness_bits\": 495000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"video-stream1\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 1280,\n \"height_pixels\": 720,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 2500000,\n \"vbv_fullness_bits\": 2250000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"audio-stream0\",\n \"audio_stream\": {\n \"codec\": \"aac\",\n \"bitrate_bps\": 64000,\n \"channel_count\": 2,\n \"channel_layouts\": [\n \"fl\",\n \"fr\",\n ],\n \"sample_rate_hertz\": 48000,\n },\n },\n ],\n \"mux_streams\": [\n {\n \"key\": \"sd\",\n \"file_name\": \"sd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"hd\",\n \"file_name\": \"hd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n ],\n },\n labels={\n \"label\": \"key\",\n })\ndefault_job = gcp.transcoder.Job(\"default\",\n template_id=default_job_template.name,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"transcoder-job\",\n Location = \"US\",\n ForceDestroy = true,\n UniformBucketLevelAccess = true,\n PublicAccessPrevention = \"enforced\",\n });\n\n var exampleMp4 = new Gcp.Storage.BucketObject(\"example_mp4\", new()\n {\n Name = \"example.mp4\",\n Source = new FileAsset(\"./test-fixtures/example.mp4\"),\n Bucket = @default.Name,\n });\n\n var defaultJobTemplate = new Gcp.Transcoder.JobTemplate(\"default\", new()\n {\n JobTemplateId = \"example-job-template\",\n Location = \"us-central1\",\n Config = new Gcp.Transcoder.Inputs.JobTemplateConfigArgs\n {\n Inputs = new[]\n {\n new Gcp.Transcoder.Inputs.JobTemplateConfigInputArgs\n {\n Key = \"input0\",\n Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =\u003e\n {\n var defaultName = values.Item1;\n var exampleMp4Name = values.Item2;\n return $\"gs://{defaultName}/{exampleMp4Name}\";\n }),\n },\n },\n Output = new Gcp.Transcoder.Inputs.JobTemplateConfigOutputArgs\n {\n Uri = @default.Name.Apply(name =\u003e $\"gs://{name}/outputs/\"),\n },\n EditLists = new[]\n {\n new Gcp.Transcoder.Inputs.JobTemplateConfigEditListArgs\n {\n Key = \"atom0\",\n Inputs = new[]\n {\n \"input0\",\n },\n StartTimeOffset = \"0s\",\n },\n },\n ElementaryStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamArgs\n {\n Key = \"video-stream0\",\n VideoStream = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 640,\n HeightPixels = 360,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 550000,\n VbvFullnessBits = 495000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamArgs\n {\n Key = \"video-stream1\",\n VideoStream = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 1280,\n HeightPixels = 720,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 2500000,\n VbvFullnessBits = 2250000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamArgs\n {\n Key = \"audio-stream0\",\n AudioStream = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamAudioStreamArgs\n {\n Codec = \"aac\",\n BitrateBps = 64000,\n ChannelCount = 2,\n ChannelLayouts = new[]\n {\n \"fl\",\n \"fr\",\n },\n SampleRateHertz = 48000,\n },\n },\n },\n MuxStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobTemplateConfigMuxStreamArgs\n {\n Key = \"sd\",\n FileName = \"sd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream0\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobTemplateConfigMuxStreamArgs\n {\n Key = \"hd\",\n FileName = \"hd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream1\",\n \"audio-stream0\",\n },\n },\n },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n });\n\n var defaultJob = new Gcp.Transcoder.Job(\"default\", new()\n {\n TemplateId = defaultJobTemplate.Name,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"transcoder-job\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tPublicAccessPrevention: pulumi.String(\"enforced\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMp4, err := storage.NewBucketObject(ctx, \"example_mp4\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"example.mp4\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/example.mp4\"),\n\t\t\tBucket: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultJobTemplate, err := transcoder.NewJobTemplate(ctx, \"default\", \u0026transcoder.JobTemplateArgs{\n\t\t\tJobTemplateId: pulumi.String(\"example-job-template\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026transcoder.JobTemplateConfigArgs{\n\t\t\t\tInputs: transcoder.JobTemplateConfigInputTypeArray{\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigInputTypeArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"input0\"),\n\t\t\t\t\t\tUri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tdefaultName := _args[0].(string)\n\t\t\t\t\t\t\texampleMp4Name := _args[1].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", defaultName, exampleMp4Name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tOutput: \u0026transcoder.JobTemplateConfigOutputTypeArgs{\n\t\t\t\t\tUri: _default.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/outputs/\", name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEditLists: transcoder.JobTemplateConfigEditListArray{\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigEditListArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"atom0\"),\n\t\t\t\t\t\tInputs: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"input0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"0s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tElementaryStreams: transcoder.JobTemplateConfigElementaryStreamArray{\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream0\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobTemplateConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobTemplateConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(640),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(360),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(495000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream1\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobTemplateConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobTemplateConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(1280),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(720),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(2500000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(2250000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\tAudioStream: \u0026transcoder.JobTemplateConfigElementaryStreamAudioStreamArgs{\n\t\t\t\t\t\t\tCodec: pulumi.String(\"aac\"),\n\t\t\t\t\t\t\tBitrateBps: pulumi.Int(64000),\n\t\t\t\t\t\t\tChannelCount: pulumi.Int(2),\n\t\t\t\t\t\t\tChannelLayouts: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"fl\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"fr\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSampleRateHertz: pulumi.Int(48000),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMuxStreams: transcoder.JobTemplateConfigMuxStreamArray{\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"sd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"sd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream0\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"hd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"hd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream1\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\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\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = transcoder.NewJob(ctx, \"default\", \u0026transcoder.JobArgs{\n\t\t\tTemplateId: defaultJobTemplate.Name,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\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.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.transcoder.JobTemplate;\nimport com.pulumi.gcp.transcoder.JobTemplateArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobTemplateConfigArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobTemplateConfigOutputArgs;\nimport com.pulumi.gcp.transcoder.Job;\nimport com.pulumi.gcp.transcoder.JobArgs;\nimport com.pulumi.asset.FileAsset;\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 default_ = new Bucket(\"default\", BucketArgs.builder()\n .name(\"transcoder-job\")\n .location(\"US\")\n .forceDestroy(true)\n .uniformBucketLevelAccess(true)\n .publicAccessPrevention(\"enforced\")\n .build());\n\n var exampleMp4 = new BucketObject(\"exampleMp4\", BucketObjectArgs.builder()\n .name(\"example.mp4\")\n .source(new FileAsset(\"./test-fixtures/example.mp4\"))\n .bucket(default_.name())\n .build());\n\n var defaultJobTemplate = new JobTemplate(\"defaultJobTemplate\", JobTemplateArgs.builder()\n .jobTemplateId(\"example-job-template\")\n .location(\"us-central1\")\n .config(JobTemplateConfigArgs.builder()\n .inputs(JobTemplateConfigInputArgs.builder()\n .key(\"input0\")\n .uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -\u003e {\n var defaultName = values.t1;\n var exampleMp4Name = values.t2;\n return String.format(\"gs://%s/%s\", defaultName,exampleMp4Name);\n }))\n .build())\n .output(JobTemplateConfigOutputArgs.builder()\n .uri(default_.name().applyValue(name -\u003e String.format(\"gs://%s/outputs/\", name)))\n .build())\n .editLists(JobTemplateConfigEditListArgs.builder()\n .key(\"atom0\")\n .inputs(\"input0\")\n .startTimeOffset(\"0s\")\n .build())\n .elementaryStreams( \n JobTemplateConfigElementaryStreamArgs.builder()\n .key(\"video-stream0\")\n .videoStream(JobTemplateConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobTemplateConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(640)\n .heightPixels(360)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(550000)\n .vbvFullnessBits(495000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobTemplateConfigElementaryStreamArgs.builder()\n .key(\"video-stream1\")\n .videoStream(JobTemplateConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobTemplateConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(1280)\n .heightPixels(720)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(2500000)\n .vbvFullnessBits(2250000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobTemplateConfigElementaryStreamArgs.builder()\n .key(\"audio-stream0\")\n .audioStream(JobTemplateConfigElementaryStreamAudioStreamArgs.builder()\n .codec(\"aac\")\n .bitrateBps(64000)\n .channelCount(2)\n .channelLayouts( \n \"fl\",\n \"fr\")\n .sampleRateHertz(48000)\n .build())\n .build())\n .muxStreams( \n JobTemplateConfigMuxStreamArgs.builder()\n .key(\"sd\")\n .fileName(\"sd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream0\",\n \"audio-stream0\")\n .build(),\n JobTemplateConfigMuxStreamArgs.builder()\n .key(\"hd\")\n .fileName(\"hd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream1\",\n \"audio-stream0\")\n .build())\n .build())\n .labels(Map.of(\"label\", \"key\"))\n .build());\n\n var defaultJob = new Job(\"defaultJob\", JobArgs.builder()\n .templateId(defaultJobTemplate.name())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:storage:Bucket\n properties:\n name: transcoder-job\n location: US\n forceDestroy: true\n uniformBucketLevelAccess: true\n publicAccessPrevention: enforced\n exampleMp4:\n type: gcp:storage:BucketObject\n name: example_mp4\n properties:\n name: example.mp4\n source:\n fn::FileAsset: ./test-fixtures/example.mp4\n bucket: ${default.name}\n defaultJob:\n type: gcp:transcoder:Job\n name: default\n properties:\n templateId: ${defaultJobTemplate.name}\n location: us-central1\n labels:\n label: key\n defaultJobTemplate:\n type: gcp:transcoder:JobTemplate\n name: default\n properties:\n jobTemplateId: example-job-template\n location: us-central1\n config:\n inputs:\n - key: input0\n uri: gs://${default.name}/${exampleMp4.name}\n output:\n uri: gs://${default.name}/outputs/\n editLists:\n - key: atom0\n inputs:\n - input0\n startTimeOffset: 0s\n elementaryStreams:\n - key: video-stream0\n videoStream:\n h264:\n widthPixels: 640\n heightPixels: 360\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 550000\n vbvFullnessBits: 495000\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: video-stream1\n videoStream:\n h264:\n widthPixels: 1280\n heightPixels: 720\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 2.5e+06\n vbvFullnessBits: 2.25e+06\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: audio-stream0\n audioStream:\n codec: aac\n bitrateBps: 64000\n channelCount: 2\n channelLayouts:\n - fl\n - fr\n sampleRateHertz: 48000\n muxStreams:\n - key: sd\n fileName: sd.mp4\n container: mp4\n elementaryStreams:\n - video-stream0\n - audio-stream0\n - key: hd\n fileName: hd.mp4\n container: mp4\n elementaryStreams:\n - video-stream1\n - audio-stream0\n labels:\n label: key\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Transcoder Job Pubsub\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.storage.Bucket(\"default\", {\n name: \"transcoder-job\",\n location: \"US\",\n forceDestroy: true,\n uniformBucketLevelAccess: true,\n publicAccessPrevention: \"enforced\",\n});\nconst exampleMp4 = new gcp.storage.BucketObject(\"example_mp4\", {\n name: \"example.mp4\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket: _default.name,\n});\nconst transcoderNotifications = new gcp.pubsub.Topic(\"transcoder_notifications\", {name: \"transcoder-notifications\"});\nconst defaultJob = new gcp.transcoder.Job(\"default\", {\n location: \"us-central1\",\n config: {\n inputs: [{\n key: \"input0\",\n uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,\n }],\n editLists: [{\n key: \"atom0\",\n inputs: [\"input0\"],\n startTimeOffset: \"0s\",\n }],\n adBreaks: [{\n startTimeOffset: \"3.500s\",\n }],\n elementaryStreams: [\n {\n key: \"video-stream0\",\n videoStream: {\n h264: {\n widthPixels: 640,\n heightPixels: 360,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 550000,\n vbvFullnessBits: 495000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"video-stream1\",\n videoStream: {\n h264: {\n widthPixels: 1280,\n heightPixels: 720,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 2500000,\n vbvFullnessBits: 2250000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"audio-stream0\",\n audioStream: {\n codec: \"aac\",\n bitrateBps: 64000,\n channelCount: 2,\n channelLayouts: [\n \"fl\",\n \"fr\",\n ],\n sampleRateHertz: 48000,\n },\n },\n ],\n muxStreams: [\n {\n key: \"sd\",\n fileName: \"sd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"hd\",\n fileName: \"hd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n ],\n pubsubDestination: {\n topic: transcoderNotifications.id,\n },\n output: {\n uri: pulumi.interpolate`gs://${_default.name}/outputs/`,\n },\n },\n labels: {\n label: \"key\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.storage.Bucket(\"default\",\n name=\"transcoder-job\",\n location=\"US\",\n force_destroy=True,\n uniform_bucket_level_access=True,\n public_access_prevention=\"enforced\")\nexample_mp4 = gcp.storage.BucketObject(\"example_mp4\",\n name=\"example.mp4\",\n source=pulumi.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket=default.name)\ntranscoder_notifications = gcp.pubsub.Topic(\"transcoder_notifications\", name=\"transcoder-notifications\")\ndefault_job = gcp.transcoder.Job(\"default\",\n location=\"us-central1\",\n config={\n \"inputs\": [{\n \"key\": \"input0\",\n \"uri\": pulumi.Output.all(\n defaultName=default.name,\n exampleMp4Name=example_mp4.name\n).apply(lambda resolved_outputs: f\"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}\")\n,\n }],\n \"edit_lists\": [{\n \"key\": \"atom0\",\n \"inputs\": [\"input0\"],\n \"start_time_offset\": \"0s\",\n }],\n \"ad_breaks\": [{\n \"start_time_offset\": \"3.500s\",\n }],\n \"elementary_streams\": [\n {\n \"key\": \"video-stream0\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 640,\n \"height_pixels\": 360,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 550000,\n \"vbv_fullness_bits\": 495000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"video-stream1\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 1280,\n \"height_pixels\": 720,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 2500000,\n \"vbv_fullness_bits\": 2250000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"audio-stream0\",\n \"audio_stream\": {\n \"codec\": \"aac\",\n \"bitrate_bps\": 64000,\n \"channel_count\": 2,\n \"channel_layouts\": [\n \"fl\",\n \"fr\",\n ],\n \"sample_rate_hertz\": 48000,\n },\n },\n ],\n \"mux_streams\": [\n {\n \"key\": \"sd\",\n \"file_name\": \"sd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"hd\",\n \"file_name\": \"hd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n ],\n \"pubsub_destination\": {\n \"topic\": transcoder_notifications.id,\n },\n \"output\": {\n \"uri\": default.name.apply(lambda name: f\"gs://{name}/outputs/\"),\n },\n },\n labels={\n \"label\": \"key\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"transcoder-job\",\n Location = \"US\",\n ForceDestroy = true,\n UniformBucketLevelAccess = true,\n PublicAccessPrevention = \"enforced\",\n });\n\n var exampleMp4 = new Gcp.Storage.BucketObject(\"example_mp4\", new()\n {\n Name = \"example.mp4\",\n Source = new FileAsset(\"./test-fixtures/example.mp4\"),\n Bucket = @default.Name,\n });\n\n var transcoderNotifications = new Gcp.PubSub.Topic(\"transcoder_notifications\", new()\n {\n Name = \"transcoder-notifications\",\n });\n\n var defaultJob = new Gcp.Transcoder.Job(\"default\", new()\n {\n Location = \"us-central1\",\n Config = new Gcp.Transcoder.Inputs.JobConfigArgs\n {\n Inputs = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigInputArgs\n {\n Key = \"input0\",\n Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =\u003e\n {\n var defaultName = values.Item1;\n var exampleMp4Name = values.Item2;\n return $\"gs://{defaultName}/{exampleMp4Name}\";\n }),\n },\n },\n EditLists = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigEditListArgs\n {\n Key = \"atom0\",\n Inputs = new[]\n {\n \"input0\",\n },\n StartTimeOffset = \"0s\",\n },\n },\n AdBreaks = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigAdBreakArgs\n {\n StartTimeOffset = \"3.500s\",\n },\n },\n ElementaryStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"video-stream0\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 640,\n HeightPixels = 360,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 550000,\n VbvFullnessBits = 495000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"video-stream1\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 1280,\n HeightPixels = 720,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 2500000,\n VbvFullnessBits = 2250000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"audio-stream0\",\n AudioStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamAudioStreamArgs\n {\n Codec = \"aac\",\n BitrateBps = 64000,\n ChannelCount = 2,\n ChannelLayouts = new[]\n {\n \"fl\",\n \"fr\",\n },\n SampleRateHertz = 48000,\n },\n },\n },\n MuxStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"sd\",\n FileName = \"sd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream0\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"hd\",\n FileName = \"hd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream1\",\n \"audio-stream0\",\n },\n },\n },\n PubsubDestination = new Gcp.Transcoder.Inputs.JobConfigPubsubDestinationArgs\n {\n Topic = transcoderNotifications.Id,\n },\n Output = new Gcp.Transcoder.Inputs.JobConfigOutputArgs\n {\n Uri = @default.Name.Apply(name =\u003e $\"gs://{name}/outputs/\"),\n },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"transcoder-job\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tPublicAccessPrevention: pulumi.String(\"enforced\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMp4, err := storage.NewBucketObject(ctx, \"example_mp4\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"example.mp4\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/example.mp4\"),\n\t\t\tBucket: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttranscoderNotifications, err := pubsub.NewTopic(ctx, \"transcoder_notifications\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"transcoder-notifications\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = transcoder.NewJob(ctx, \"default\", \u0026transcoder.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026transcoder.JobConfigArgs{\n\t\t\t\tInputs: transcoder.JobConfigInputTypeArray{\n\t\t\t\t\t\u0026transcoder.JobConfigInputTypeArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"input0\"),\n\t\t\t\t\t\tUri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tdefaultName := _args[0].(string)\n\t\t\t\t\t\t\texampleMp4Name := _args[1].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", defaultName, exampleMp4Name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEditLists: transcoder.JobConfigEditListArray{\n\t\t\t\t\t\u0026transcoder.JobConfigEditListArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"atom0\"),\n\t\t\t\t\t\tInputs: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"input0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"0s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAdBreaks: transcoder.JobConfigAdBreakArray{\n\t\t\t\t\t\u0026transcoder.JobConfigAdBreakArgs{\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"3.500s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tElementaryStreams: transcoder.JobConfigElementaryStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream0\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(640),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(360),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(495000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream1\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(1280),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(720),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(2500000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(2250000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\tAudioStream: \u0026transcoder.JobConfigElementaryStreamAudioStreamArgs{\n\t\t\t\t\t\t\tCodec: pulumi.String(\"aac\"),\n\t\t\t\t\t\t\tBitrateBps: pulumi.Int(64000),\n\t\t\t\t\t\t\tChannelCount: pulumi.Int(2),\n\t\t\t\t\t\t\tChannelLayouts: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"fl\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"fr\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSampleRateHertz: pulumi.Int(48000),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMuxStreams: transcoder.JobConfigMuxStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"sd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"sd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream0\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"hd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"hd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream1\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPubsubDestination: \u0026transcoder.JobConfigPubsubDestinationArgs{\n\t\t\t\t\tTopic: transcoderNotifications.ID(),\n\t\t\t\t},\n\t\t\t\tOutput: \u0026transcoder.JobConfigOutputTypeArgs{\n\t\t\t\t\tUri: _default.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/outputs/\", name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\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.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.transcoder.Job;\nimport com.pulumi.gcp.transcoder.JobArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigPubsubDestinationArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigOutputArgs;\nimport com.pulumi.asset.FileAsset;\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 default_ = new Bucket(\"default\", BucketArgs.builder()\n .name(\"transcoder-job\")\n .location(\"US\")\n .forceDestroy(true)\n .uniformBucketLevelAccess(true)\n .publicAccessPrevention(\"enforced\")\n .build());\n\n var exampleMp4 = new BucketObject(\"exampleMp4\", BucketObjectArgs.builder()\n .name(\"example.mp4\")\n .source(new FileAsset(\"./test-fixtures/example.mp4\"))\n .bucket(default_.name())\n .build());\n\n var transcoderNotifications = new Topic(\"transcoderNotifications\", TopicArgs.builder()\n .name(\"transcoder-notifications\")\n .build());\n\n var defaultJob = new Job(\"defaultJob\", JobArgs.builder()\n .location(\"us-central1\")\n .config(JobConfigArgs.builder()\n .inputs(JobConfigInputArgs.builder()\n .key(\"input0\")\n .uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -\u003e {\n var defaultName = values.t1;\n var exampleMp4Name = values.t2;\n return String.format(\"gs://%s/%s\", defaultName,exampleMp4Name);\n }))\n .build())\n .editLists(JobConfigEditListArgs.builder()\n .key(\"atom0\")\n .inputs(\"input0\")\n .startTimeOffset(\"0s\")\n .build())\n .adBreaks(JobConfigAdBreakArgs.builder()\n .startTimeOffset(\"3.500s\")\n .build())\n .elementaryStreams( \n JobConfigElementaryStreamArgs.builder()\n .key(\"video-stream0\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(640)\n .heightPixels(360)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(550000)\n .vbvFullnessBits(495000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"video-stream1\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(1280)\n .heightPixels(720)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(2500000)\n .vbvFullnessBits(2250000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"audio-stream0\")\n .audioStream(JobConfigElementaryStreamAudioStreamArgs.builder()\n .codec(\"aac\")\n .bitrateBps(64000)\n .channelCount(2)\n .channelLayouts( \n \"fl\",\n \"fr\")\n .sampleRateHertz(48000)\n .build())\n .build())\n .muxStreams( \n JobConfigMuxStreamArgs.builder()\n .key(\"sd\")\n .fileName(\"sd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream0\",\n \"audio-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"hd\")\n .fileName(\"hd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream1\",\n \"audio-stream0\")\n .build())\n .pubsubDestination(JobConfigPubsubDestinationArgs.builder()\n .topic(transcoderNotifications.id())\n .build())\n .output(JobConfigOutputArgs.builder()\n .uri(default_.name().applyValue(name -\u003e String.format(\"gs://%s/outputs/\", name)))\n .build())\n .build())\n .labels(Map.of(\"label\", \"key\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:storage:Bucket\n properties:\n name: transcoder-job\n location: US\n forceDestroy: true\n uniformBucketLevelAccess: true\n publicAccessPrevention: enforced\n exampleMp4:\n type: gcp:storage:BucketObject\n name: example_mp4\n properties:\n name: example.mp4\n source:\n fn::FileAsset: ./test-fixtures/example.mp4\n bucket: ${default.name}\n transcoderNotifications:\n type: gcp:pubsub:Topic\n name: transcoder_notifications\n properties:\n name: transcoder-notifications\n defaultJob:\n type: gcp:transcoder:Job\n name: default\n properties:\n location: us-central1\n config:\n inputs:\n - key: input0\n uri: gs://${default.name}/${exampleMp4.name}\n editLists:\n - key: atom0\n inputs:\n - input0\n startTimeOffset: 0s\n adBreaks:\n - startTimeOffset: 3.500s\n elementaryStreams:\n - key: video-stream0\n videoStream:\n h264:\n widthPixels: 640\n heightPixels: 360\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 550000\n vbvFullnessBits: 495000\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: video-stream1\n videoStream:\n h264:\n widthPixels: 1280\n heightPixels: 720\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 2.5e+06\n vbvFullnessBits: 2.25e+06\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: audio-stream0\n audioStream:\n codec: aac\n bitrateBps: 64000\n channelCount: 2\n channelLayouts:\n - fl\n - fr\n sampleRateHertz: 48000\n muxStreams:\n - key: sd\n fileName: sd.mp4\n container: mp4\n elementaryStreams:\n - video-stream0\n - audio-stream0\n - key: hd\n fileName: hd.mp4\n container: mp4\n elementaryStreams:\n - video-stream1\n - audio-stream0\n pubsubDestination:\n topic: ${transcoderNotifications.id}\n output:\n uri: gs://${default.name}/outputs/\n labels:\n label: key\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Transcoder Job Encryptions\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.storage.Bucket(\"default\", {\n name: \"transcoder-job\",\n location: \"US\",\n forceDestroy: true,\n uniformBucketLevelAccess: true,\n publicAccessPrevention: \"enforced\",\n});\nconst exampleMp4 = new gcp.storage.BucketObject(\"example_mp4\", {\n name: \"example.mp4\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket: _default.name,\n});\nconst encryptionKey = new gcp.secretmanager.Secret(\"encryption_key\", {\n secretId: \"transcoder-encryption-key\",\n replication: {\n auto: {},\n },\n});\nconst encryptionKeySecretVersion = new gcp.secretmanager.SecretVersion(\"encryption_key\", {\n secret: encryptionKey.name,\n secretData: \"4A67F2C1B8E93A4F6D3E7890A1BC23DF\",\n});\nconst project = gcp.organizations.getProject({});\n// this is required to allow the transcoder service identity to access the secret\nconst transcoder = new gcp.projects.ServiceIdentity(\"transcoder\", {\n project: project.then(project =\u003e project.projectId),\n service: \"transcoder.googleapis.com\",\n});\nconst transcoderEncryptionKeyAccessor = new gcp.secretmanager.SecretIamMember(\"transcoder_encryption_key_accessor\", {\n secretId: encryptionKey.secretId,\n project: encryptionKey.project,\n role: \"roles/secretmanager.secretAccessor\",\n member: pulumi.interpolate`serviceAccount:${transcoder.email}`,\n});\nconst defaultJob = new gcp.transcoder.Job(\"default\", {\n location: \"us-central1\",\n config: {\n inputs: [{\n key: \"input0\",\n uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,\n }],\n elementaryStreams: [\n {\n key: \"es_video\",\n videoStream: {\n h264: {\n profile: \"main\",\n heightPixels: 600,\n widthPixels: 800,\n bitrateBps: 1000000,\n frameRate: 60,\n },\n },\n },\n {\n key: \"es_audio\",\n audioStream: {\n codec: \"aac\",\n channelCount: 2,\n bitrateBps: 160000,\n },\n },\n ],\n encryptions: [\n {\n id: \"aes-128\",\n secretManagerKeySource: {\n secretVersion: encryptionKeySecretVersion.name,\n },\n drmSystems: {\n clearkey: {},\n },\n aes128: {},\n },\n {\n id: \"cenc\",\n secretManagerKeySource: {\n secretVersion: encryptionKeySecretVersion.name,\n },\n drmSystems: {\n widevine: {},\n },\n mpegCenc: {\n scheme: \"cenc\",\n },\n },\n {\n id: \"cbcs\",\n secretManagerKeySource: {\n secretVersion: encryptionKeySecretVersion.name,\n },\n drmSystems: {\n widevine: {},\n },\n mpegCenc: {\n scheme: \"cbcs\",\n },\n },\n ],\n muxStreams: [\n {\n key: \"ts_aes128\",\n container: \"ts\",\n elementaryStreams: [\n \"es_video\",\n \"es_audio\",\n ],\n segmentSettings: {\n segmentDuration: \"6s\",\n },\n encryptionId: \"aes-128\",\n },\n {\n key: \"fmp4_cenc_video\",\n container: \"fmp4\",\n elementaryStreams: [\"es_video\"],\n segmentSettings: {\n segmentDuration: \"6s\",\n },\n encryptionId: \"cenc\",\n },\n {\n key: \"fmp4_cenc_audio\",\n container: \"fmp4\",\n elementaryStreams: [\"es_audio\"],\n segmentSettings: {\n segmentDuration: \"6s\",\n },\n encryptionId: \"cenc\",\n },\n {\n key: \"fmp4_cbcs_video\",\n container: \"fmp4\",\n elementaryStreams: [\"es_video\"],\n segmentSettings: {\n segmentDuration: \"6s\",\n },\n encryptionId: \"cbcs\",\n },\n {\n key: \"fmp4_cbcs_audio\",\n container: \"fmp4\",\n elementaryStreams: [\"es_audio\"],\n segmentSettings: {\n segmentDuration: \"6s\",\n },\n encryptionId: \"cbcs\",\n },\n ],\n manifests: [\n {\n fileName: \"manifest_aes128.m3u8\",\n type: \"HLS\",\n muxStreams: [\"ts_aes128\"],\n },\n {\n fileName: \"manifest_cenc.mpd\",\n type: \"DASH\",\n muxStreams: [\n \"fmp4_cenc_video\",\n \"fmp4_cenc_audio\",\n ],\n },\n {\n fileName: \"manifest_cbcs.mpd\",\n type: \"DASH\",\n muxStreams: [\n \"fmp4_cbcs_video\",\n \"fmp4_cbcs_audio\",\n ],\n },\n ],\n output: {\n uri: pulumi.interpolate`gs://${_default.name}/outputs/`,\n },\n },\n labels: {\n label: \"key\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.storage.Bucket(\"default\",\n name=\"transcoder-job\",\n location=\"US\",\n force_destroy=True,\n uniform_bucket_level_access=True,\n public_access_prevention=\"enforced\")\nexample_mp4 = gcp.storage.BucketObject(\"example_mp4\",\n name=\"example.mp4\",\n source=pulumi.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket=default.name)\nencryption_key = gcp.secretmanager.Secret(\"encryption_key\",\n secret_id=\"transcoder-encryption-key\",\n replication={\n \"auto\": {},\n })\nencryption_key_secret_version = gcp.secretmanager.SecretVersion(\"encryption_key\",\n secret=encryption_key.name,\n secret_data=\"4A67F2C1B8E93A4F6D3E7890A1BC23DF\")\nproject = gcp.organizations.get_project()\n# this is required to allow the transcoder service identity to access the secret\ntranscoder = gcp.projects.ServiceIdentity(\"transcoder\",\n project=project.project_id,\n service=\"transcoder.googleapis.com\")\ntranscoder_encryption_key_accessor = gcp.secretmanager.SecretIamMember(\"transcoder_encryption_key_accessor\",\n secret_id=encryption_key.secret_id,\n project=encryption_key.project,\n role=\"roles/secretmanager.secretAccessor\",\n member=transcoder.email.apply(lambda email: f\"serviceAccount:{email}\"))\ndefault_job = gcp.transcoder.Job(\"default\",\n location=\"us-central1\",\n config={\n \"inputs\": [{\n \"key\": \"input0\",\n \"uri\": pulumi.Output.all(\n defaultName=default.name,\n exampleMp4Name=example_mp4.name\n).apply(lambda resolved_outputs: f\"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}\")\n,\n }],\n \"elementary_streams\": [\n {\n \"key\": \"es_video\",\n \"video_stream\": {\n \"h264\": {\n \"profile\": \"main\",\n \"height_pixels\": 600,\n \"width_pixels\": 800,\n \"bitrate_bps\": 1000000,\n \"frame_rate\": 60,\n },\n },\n },\n {\n \"key\": \"es_audio\",\n \"audio_stream\": {\n \"codec\": \"aac\",\n \"channel_count\": 2,\n \"bitrate_bps\": 160000,\n },\n },\n ],\n \"encryptions\": [\n {\n \"id\": \"aes-128\",\n \"secret_manager_key_source\": {\n \"secret_version\": encryption_key_secret_version.name,\n },\n \"drm_systems\": {\n \"clearkey\": {},\n },\n \"aes128\": {},\n },\n {\n \"id\": \"cenc\",\n \"secret_manager_key_source\": {\n \"secret_version\": encryption_key_secret_version.name,\n },\n \"drm_systems\": {\n \"widevine\": {},\n },\n \"mpeg_cenc\": {\n \"scheme\": \"cenc\",\n },\n },\n {\n \"id\": \"cbcs\",\n \"secret_manager_key_source\": {\n \"secret_version\": encryption_key_secret_version.name,\n },\n \"drm_systems\": {\n \"widevine\": {},\n },\n \"mpeg_cenc\": {\n \"scheme\": \"cbcs\",\n },\n },\n ],\n \"mux_streams\": [\n {\n \"key\": \"ts_aes128\",\n \"container\": \"ts\",\n \"elementary_streams\": [\n \"es_video\",\n \"es_audio\",\n ],\n \"segment_settings\": {\n \"segment_duration\": \"6s\",\n },\n \"encryption_id\": \"aes-128\",\n },\n {\n \"key\": \"fmp4_cenc_video\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"es_video\"],\n \"segment_settings\": {\n \"segment_duration\": \"6s\",\n },\n \"encryption_id\": \"cenc\",\n },\n {\n \"key\": \"fmp4_cenc_audio\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"es_audio\"],\n \"segment_settings\": {\n \"segment_duration\": \"6s\",\n },\n \"encryption_id\": \"cenc\",\n },\n {\n \"key\": \"fmp4_cbcs_video\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"es_video\"],\n \"segment_settings\": {\n \"segment_duration\": \"6s\",\n },\n \"encryption_id\": \"cbcs\",\n },\n {\n \"key\": \"fmp4_cbcs_audio\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"es_audio\"],\n \"segment_settings\": {\n \"segment_duration\": \"6s\",\n },\n \"encryption_id\": \"cbcs\",\n },\n ],\n \"manifests\": [\n {\n \"file_name\": \"manifest_aes128.m3u8\",\n \"type\": \"HLS\",\n \"mux_streams\": [\"ts_aes128\"],\n },\n {\n \"file_name\": \"manifest_cenc.mpd\",\n \"type\": \"DASH\",\n \"mux_streams\": [\n \"fmp4_cenc_video\",\n \"fmp4_cenc_audio\",\n ],\n },\n {\n \"file_name\": \"manifest_cbcs.mpd\",\n \"type\": \"DASH\",\n \"mux_streams\": [\n \"fmp4_cbcs_video\",\n \"fmp4_cbcs_audio\",\n ],\n },\n ],\n \"output\": {\n \"uri\": default.name.apply(lambda name: f\"gs://{name}/outputs/\"),\n },\n },\n labels={\n \"label\": \"key\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"transcoder-job\",\n Location = \"US\",\n ForceDestroy = true,\n UniformBucketLevelAccess = true,\n PublicAccessPrevention = \"enforced\",\n });\n\n var exampleMp4 = new Gcp.Storage.BucketObject(\"example_mp4\", new()\n {\n Name = \"example.mp4\",\n Source = new FileAsset(\"./test-fixtures/example.mp4\"),\n Bucket = @default.Name,\n });\n\n var encryptionKey = new Gcp.SecretManager.Secret(\"encryption_key\", new()\n {\n SecretId = \"transcoder-encryption-key\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var encryptionKeySecretVersion = new Gcp.SecretManager.SecretVersion(\"encryption_key\", new()\n {\n Secret = encryptionKey.Name,\n SecretData = \"4A67F2C1B8E93A4F6D3E7890A1BC23DF\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n // this is required to allow the transcoder service identity to access the secret\n var transcoder = new Gcp.Projects.ServiceIdentity(\"transcoder\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Service = \"transcoder.googleapis.com\",\n });\n\n var transcoderEncryptionKeyAccessor = new Gcp.SecretManager.SecretIamMember(\"transcoder_encryption_key_accessor\", new()\n {\n SecretId = encryptionKey.SecretId,\n Project = encryptionKey.Project,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = transcoder.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var defaultJob = new Gcp.Transcoder.Job(\"default\", new()\n {\n Location = \"us-central1\",\n Config = new Gcp.Transcoder.Inputs.JobConfigArgs\n {\n Inputs = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigInputArgs\n {\n Key = \"input0\",\n Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =\u003e\n {\n var defaultName = values.Item1;\n var exampleMp4Name = values.Item2;\n return $\"gs://{defaultName}/{exampleMp4Name}\";\n }),\n },\n },\n ElementaryStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"es_video\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n Profile = \"main\",\n HeightPixels = 600,\n WidthPixels = 800,\n BitrateBps = 1000000,\n FrameRate = 60,\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"es_audio\",\n AudioStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamAudioStreamArgs\n {\n Codec = \"aac\",\n ChannelCount = 2,\n BitrateBps = 160000,\n },\n },\n },\n Encryptions = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigEncryptionArgs\n {\n Id = \"aes-128\",\n SecretManagerKeySource = new Gcp.Transcoder.Inputs.JobConfigEncryptionSecretManagerKeySourceArgs\n {\n SecretVersion = encryptionKeySecretVersion.Name,\n },\n DrmSystems = new Gcp.Transcoder.Inputs.JobConfigEncryptionDrmSystemsArgs\n {\n Clearkey = null,\n },\n Aes128 = null,\n },\n new Gcp.Transcoder.Inputs.JobConfigEncryptionArgs\n {\n Id = \"cenc\",\n SecretManagerKeySource = new Gcp.Transcoder.Inputs.JobConfigEncryptionSecretManagerKeySourceArgs\n {\n SecretVersion = encryptionKeySecretVersion.Name,\n },\n DrmSystems = new Gcp.Transcoder.Inputs.JobConfigEncryptionDrmSystemsArgs\n {\n Widevine = null,\n },\n MpegCenc = new Gcp.Transcoder.Inputs.JobConfigEncryptionMpegCencArgs\n {\n Scheme = \"cenc\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigEncryptionArgs\n {\n Id = \"cbcs\",\n SecretManagerKeySource = new Gcp.Transcoder.Inputs.JobConfigEncryptionSecretManagerKeySourceArgs\n {\n SecretVersion = encryptionKeySecretVersion.Name,\n },\n DrmSystems = new Gcp.Transcoder.Inputs.JobConfigEncryptionDrmSystemsArgs\n {\n Widevine = null,\n },\n MpegCenc = new Gcp.Transcoder.Inputs.JobConfigEncryptionMpegCencArgs\n {\n Scheme = \"cbcs\",\n },\n },\n },\n MuxStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"ts_aes128\",\n Container = \"ts\",\n ElementaryStreams = new[]\n {\n \"es_video\",\n \"es_audio\",\n },\n SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs\n {\n SegmentDuration = \"6s\",\n },\n EncryptionId = \"aes-128\",\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"fmp4_cenc_video\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"es_video\",\n },\n SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs\n {\n SegmentDuration = \"6s\",\n },\n EncryptionId = \"cenc\",\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"fmp4_cenc_audio\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"es_audio\",\n },\n SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs\n {\n SegmentDuration = \"6s\",\n },\n EncryptionId = \"cenc\",\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"fmp4_cbcs_video\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"es_video\",\n },\n SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs\n {\n SegmentDuration = \"6s\",\n },\n EncryptionId = \"cbcs\",\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"fmp4_cbcs_audio\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"es_audio\",\n },\n SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs\n {\n SegmentDuration = \"6s\",\n },\n EncryptionId = \"cbcs\",\n },\n },\n Manifests = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigManifestArgs\n {\n FileName = \"manifest_aes128.m3u8\",\n Type = \"HLS\",\n MuxStreams = new[]\n {\n \"ts_aes128\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigManifestArgs\n {\n FileName = \"manifest_cenc.mpd\",\n Type = \"DASH\",\n MuxStreams = new[]\n {\n \"fmp4_cenc_video\",\n \"fmp4_cenc_audio\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigManifestArgs\n {\n FileName = \"manifest_cbcs.mpd\",\n Type = \"DASH\",\n MuxStreams = new[]\n {\n \"fmp4_cbcs_video\",\n \"fmp4_cbcs_audio\",\n },\n },\n },\n Output = new Gcp.Transcoder.Inputs.JobConfigOutputArgs\n {\n Uri = @default.Name.Apply(name =\u003e $\"gs://{name}/outputs/\"),\n },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"transcoder-job\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tPublicAccessPrevention: pulumi.String(\"enforced\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMp4, err := storage.NewBucketObject(ctx, \"example_mp4\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"example.mp4\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/example.mp4\"),\n\t\t\tBucket: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tencryptionKey, err := secretmanager.NewSecret(ctx, \"encryption_key\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"transcoder-encryption-key\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tencryptionKeySecretVersion, err := secretmanager.NewSecretVersion(ctx, \"encryption_key\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: encryptionKey.Name,\n\t\t\tSecretData: pulumi.String(\"4A67F2C1B8E93A4F6D3E7890A1BC23DF\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// this is required to allow the transcoder service identity to access the secret\n\t\ttranscoder, err := projects.NewServiceIdentity(ctx, \"transcoder\", \u0026projects.ServiceIdentityArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tService: pulumi.String(\"transcoder.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"transcoder_encryption_key_accessor\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: encryptionKey.SecretId,\n\t\t\tProject: encryptionKey.Project,\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: transcoder.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = transcoder.NewJob(ctx, \"default\", \u0026transcoder.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026transcoder.JobConfigArgs{\n\t\t\t\tInputs: transcoder.JobConfigInputTypeArray{\n\t\t\t\t\t\u0026transcoder.JobConfigInputTypeArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"input0\"),\n\t\t\t\t\t\tUri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tdefaultName := _args[0].(string)\n\t\t\t\t\t\t\texampleMp4Name := _args[1].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", defaultName, exampleMp4Name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tElementaryStreams: transcoder.JobConfigElementaryStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"es_video\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"main\"),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(600),\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(800),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(1000000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"es_audio\"),\n\t\t\t\t\t\tAudioStream: \u0026transcoder.JobConfigElementaryStreamAudioStreamArgs{\n\t\t\t\t\t\t\tCodec: pulumi.String(\"aac\"),\n\t\t\t\t\t\t\tChannelCount: pulumi.Int(2),\n\t\t\t\t\t\t\tBitrateBps: pulumi.Int(160000),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEncryptions: transcoder.JobConfigEncryptionArray{\n\t\t\t\t\t\u0026transcoder.JobConfigEncryptionArgs{\n\t\t\t\t\t\tId: pulumi.String(\"aes-128\"),\n\t\t\t\t\t\tSecretManagerKeySource: \u0026transcoder.JobConfigEncryptionSecretManagerKeySourceArgs{\n\t\t\t\t\t\t\tSecretVersion: encryptionKeySecretVersion.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDrmSystems: \u0026transcoder.JobConfigEncryptionDrmSystemsArgs{\n\t\t\t\t\t\t\tClearkey: \u0026transcoder.JobConfigEncryptionDrmSystemsClearkeyArgs{},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tAes128: \u0026transcoder.JobConfigEncryptionAes128Args{},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigEncryptionArgs{\n\t\t\t\t\t\tId: pulumi.String(\"cenc\"),\n\t\t\t\t\t\tSecretManagerKeySource: \u0026transcoder.JobConfigEncryptionSecretManagerKeySourceArgs{\n\t\t\t\t\t\t\tSecretVersion: encryptionKeySecretVersion.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDrmSystems: \u0026transcoder.JobConfigEncryptionDrmSystemsArgs{\n\t\t\t\t\t\t\tWidevine: \u0026transcoder.JobConfigEncryptionDrmSystemsWidevineArgs{},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMpegCenc: \u0026transcoder.JobConfigEncryptionMpegCencArgs{\n\t\t\t\t\t\t\tScheme: pulumi.String(\"cenc\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigEncryptionArgs{\n\t\t\t\t\t\tId: pulumi.String(\"cbcs\"),\n\t\t\t\t\t\tSecretManagerKeySource: \u0026transcoder.JobConfigEncryptionSecretManagerKeySourceArgs{\n\t\t\t\t\t\t\tSecretVersion: encryptionKeySecretVersion.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDrmSystems: \u0026transcoder.JobConfigEncryptionDrmSystemsArgs{\n\t\t\t\t\t\t\tWidevine: \u0026transcoder.JobConfigEncryptionDrmSystemsWidevineArgs{},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMpegCenc: \u0026transcoder.JobConfigEncryptionMpegCencArgs{\n\t\t\t\t\t\t\tScheme: pulumi.String(\"cbcs\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMuxStreams: transcoder.JobConfigMuxStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"ts_aes128\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"ts\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"es_video\"),\n\t\t\t\t\t\t\tpulumi.String(\"es_audio\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSegmentSettings: \u0026transcoder.JobConfigMuxStreamSegmentSettingsArgs{\n\t\t\t\t\t\t\tSegmentDuration: pulumi.String(\"6s\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEncryptionId: pulumi.String(\"aes-128\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"fmp4_cenc_video\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"es_video\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSegmentSettings: \u0026transcoder.JobConfigMuxStreamSegmentSettingsArgs{\n\t\t\t\t\t\t\tSegmentDuration: pulumi.String(\"6s\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEncryptionId: pulumi.String(\"cenc\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"fmp4_cenc_audio\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"es_audio\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSegmentSettings: \u0026transcoder.JobConfigMuxStreamSegmentSettingsArgs{\n\t\t\t\t\t\t\tSegmentDuration: pulumi.String(\"6s\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEncryptionId: pulumi.String(\"cenc\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"fmp4_cbcs_video\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"es_video\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSegmentSettings: \u0026transcoder.JobConfigMuxStreamSegmentSettingsArgs{\n\t\t\t\t\t\t\tSegmentDuration: pulumi.String(\"6s\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEncryptionId: pulumi.String(\"cbcs\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"fmp4_cbcs_audio\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"es_audio\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSegmentSettings: \u0026transcoder.JobConfigMuxStreamSegmentSettingsArgs{\n\t\t\t\t\t\t\tSegmentDuration: pulumi.String(\"6s\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEncryptionId: pulumi.String(\"cbcs\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tManifests: transcoder.JobConfigManifestArray{\n\t\t\t\t\t\u0026transcoder.JobConfigManifestArgs{\n\t\t\t\t\t\tFileName: pulumi.String(\"manifest_aes128.m3u8\"),\n\t\t\t\t\t\tType: pulumi.String(\"HLS\"),\n\t\t\t\t\t\tMuxStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"ts_aes128\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigManifestArgs{\n\t\t\t\t\t\tFileName: pulumi.String(\"manifest_cenc.mpd\"),\n\t\t\t\t\t\tType: pulumi.String(\"DASH\"),\n\t\t\t\t\t\tMuxStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"fmp4_cenc_video\"),\n\t\t\t\t\t\t\tpulumi.String(\"fmp4_cenc_audio\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigManifestArgs{\n\t\t\t\t\t\tFileName: pulumi.String(\"manifest_cbcs.mpd\"),\n\t\t\t\t\t\tType: pulumi.String(\"DASH\"),\n\t\t\t\t\t\tMuxStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"fmp4_cbcs_video\"),\n\t\t\t\t\t\t\tpulumi.String(\"fmp4_cbcs_audio\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tOutput: \u0026transcoder.JobConfigOutputTypeArgs{\n\t\t\t\t\tUri: _default.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/outputs/\", name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\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.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.ServiceIdentity;\nimport com.pulumi.gcp.projects.ServiceIdentityArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.transcoder.Job;\nimport com.pulumi.gcp.transcoder.JobArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigOutputArgs;\nimport com.pulumi.asset.FileAsset;\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 default_ = new Bucket(\"default\", BucketArgs.builder()\n .name(\"transcoder-job\")\n .location(\"US\")\n .forceDestroy(true)\n .uniformBucketLevelAccess(true)\n .publicAccessPrevention(\"enforced\")\n .build());\n\n var exampleMp4 = new BucketObject(\"exampleMp4\", BucketObjectArgs.builder()\n .name(\"example.mp4\")\n .source(new FileAsset(\"./test-fixtures/example.mp4\"))\n .bucket(default_.name())\n .build());\n\n var encryptionKey = new Secret(\"encryptionKey\", SecretArgs.builder()\n .secretId(\"transcoder-encryption-key\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var encryptionKeySecretVersion = new SecretVersion(\"encryptionKeySecretVersion\", SecretVersionArgs.builder()\n .secret(encryptionKey.name())\n .secretData(\"4A67F2C1B8E93A4F6D3E7890A1BC23DF\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n // this is required to allow the transcoder service identity to access the secret\n var transcoder = new ServiceIdentity(\"transcoder\", ServiceIdentityArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .service(\"transcoder.googleapis.com\")\n .build());\n\n var transcoderEncryptionKeyAccessor = new SecretIamMember(\"transcoderEncryptionKeyAccessor\", SecretIamMemberArgs.builder()\n .secretId(encryptionKey.secretId())\n .project(encryptionKey.project())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(transcoder.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var defaultJob = new Job(\"defaultJob\", JobArgs.builder()\n .location(\"us-central1\")\n .config(JobConfigArgs.builder()\n .inputs(JobConfigInputArgs.builder()\n .key(\"input0\")\n .uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -\u003e {\n var defaultName = values.t1;\n var exampleMp4Name = values.t2;\n return String.format(\"gs://%s/%s\", defaultName,exampleMp4Name);\n }))\n .build())\n .elementaryStreams( \n JobConfigElementaryStreamArgs.builder()\n .key(\"es_video\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .profile(\"main\")\n .heightPixels(600)\n .widthPixels(800)\n .bitrateBps(1000000)\n .frameRate(60)\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"es_audio\")\n .audioStream(JobConfigElementaryStreamAudioStreamArgs.builder()\n .codec(\"aac\")\n .channelCount(2)\n .bitrateBps(160000)\n .build())\n .build())\n .encryptions( \n JobConfigEncryptionArgs.builder()\n .id(\"aes-128\")\n .secretManagerKeySource(JobConfigEncryptionSecretManagerKeySourceArgs.builder()\n .secretVersion(encryptionKeySecretVersion.name())\n .build())\n .drmSystems(JobConfigEncryptionDrmSystemsArgs.builder()\n .clearkey()\n .build())\n .aes128()\n .build(),\n JobConfigEncryptionArgs.builder()\n .id(\"cenc\")\n .secretManagerKeySource(JobConfigEncryptionSecretManagerKeySourceArgs.builder()\n .secretVersion(encryptionKeySecretVersion.name())\n .build())\n .drmSystems(JobConfigEncryptionDrmSystemsArgs.builder()\n .widevine()\n .build())\n .mpegCenc(JobConfigEncryptionMpegCencArgs.builder()\n .scheme(\"cenc\")\n .build())\n .build(),\n JobConfigEncryptionArgs.builder()\n .id(\"cbcs\")\n .secretManagerKeySource(JobConfigEncryptionSecretManagerKeySourceArgs.builder()\n .secretVersion(encryptionKeySecretVersion.name())\n .build())\n .drmSystems(JobConfigEncryptionDrmSystemsArgs.builder()\n .widevine()\n .build())\n .mpegCenc(JobConfigEncryptionMpegCencArgs.builder()\n .scheme(\"cbcs\")\n .build())\n .build())\n .muxStreams( \n JobConfigMuxStreamArgs.builder()\n .key(\"ts_aes128\")\n .container(\"ts\")\n .elementaryStreams( \n \"es_video\",\n \"es_audio\")\n .segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()\n .segmentDuration(\"6s\")\n .build())\n .encryptionId(\"aes-128\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"fmp4_cenc_video\")\n .container(\"fmp4\")\n .elementaryStreams(\"es_video\")\n .segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()\n .segmentDuration(\"6s\")\n .build())\n .encryptionId(\"cenc\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"fmp4_cenc_audio\")\n .container(\"fmp4\")\n .elementaryStreams(\"es_audio\")\n .segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()\n .segmentDuration(\"6s\")\n .build())\n .encryptionId(\"cenc\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"fmp4_cbcs_video\")\n .container(\"fmp4\")\n .elementaryStreams(\"es_video\")\n .segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()\n .segmentDuration(\"6s\")\n .build())\n .encryptionId(\"cbcs\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"fmp4_cbcs_audio\")\n .container(\"fmp4\")\n .elementaryStreams(\"es_audio\")\n .segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()\n .segmentDuration(\"6s\")\n .build())\n .encryptionId(\"cbcs\")\n .build())\n .manifests( \n JobConfigManifestArgs.builder()\n .fileName(\"manifest_aes128.m3u8\")\n .type(\"HLS\")\n .muxStreams(\"ts_aes128\")\n .build(),\n JobConfigManifestArgs.builder()\n .fileName(\"manifest_cenc.mpd\")\n .type(\"DASH\")\n .muxStreams( \n \"fmp4_cenc_video\",\n \"fmp4_cenc_audio\")\n .build(),\n JobConfigManifestArgs.builder()\n .fileName(\"manifest_cbcs.mpd\")\n .type(\"DASH\")\n .muxStreams( \n \"fmp4_cbcs_video\",\n \"fmp4_cbcs_audio\")\n .build())\n .output(JobConfigOutputArgs.builder()\n .uri(default_.name().applyValue(name -\u003e String.format(\"gs://%s/outputs/\", name)))\n .build())\n .build())\n .labels(Map.of(\"label\", \"key\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:storage:Bucket\n properties:\n name: transcoder-job\n location: US\n forceDestroy: true\n uniformBucketLevelAccess: true\n publicAccessPrevention: enforced\n exampleMp4:\n type: gcp:storage:BucketObject\n name: example_mp4\n properties:\n name: example.mp4\n source:\n fn::FileAsset: ./test-fixtures/example.mp4\n bucket: ${default.name}\n encryptionKey:\n type: gcp:secretmanager:Secret\n name: encryption_key\n properties:\n secretId: transcoder-encryption-key\n replication:\n auto: {}\n encryptionKeySecretVersion:\n type: gcp:secretmanager:SecretVersion\n name: encryption_key\n properties:\n secret: ${encryptionKey.name}\n secretData: 4A67F2C1B8E93A4F6D3E7890A1BC23DF\n # this is required to allow the transcoder service identity to access the secret\n transcoder:\n type: gcp:projects:ServiceIdentity\n properties:\n project: ${project.projectId}\n service: transcoder.googleapis.com\n transcoderEncryptionKeyAccessor:\n type: gcp:secretmanager:SecretIamMember\n name: transcoder_encryption_key_accessor\n properties:\n secretId: ${encryptionKey.secretId}\n project: ${encryptionKey.project}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${transcoder.email}\n defaultJob:\n type: gcp:transcoder:Job\n name: default\n properties:\n location: us-central1\n config:\n inputs:\n - key: input0\n uri: gs://${default.name}/${exampleMp4.name}\n elementaryStreams:\n - key: es_video\n videoStream:\n h264:\n profile: main\n heightPixels: 600\n widthPixels: 800\n bitrateBps: 1e+06\n frameRate: 60\n - key: es_audio\n audioStream:\n codec: aac\n channelCount: 2\n bitrateBps: 160000\n encryptions:\n - id: aes-128\n secretManagerKeySource:\n secretVersion: ${encryptionKeySecretVersion.name}\n drmSystems:\n clearkey: {}\n aes128: {}\n - id: cenc\n secretManagerKeySource:\n secretVersion: ${encryptionKeySecretVersion.name}\n drmSystems:\n widevine: {}\n mpegCenc:\n scheme: cenc\n - id: cbcs\n secretManagerKeySource:\n secretVersion: ${encryptionKeySecretVersion.name}\n drmSystems:\n widevine: {}\n mpegCenc:\n scheme: cbcs\n muxStreams:\n - key: ts_aes128\n container: ts\n elementaryStreams:\n - es_video\n - es_audio\n segmentSettings:\n segmentDuration: 6s\n encryptionId: aes-128\n - key: fmp4_cenc_video\n container: fmp4\n elementaryStreams:\n - es_video\n segmentSettings:\n segmentDuration: 6s\n encryptionId: cenc\n - key: fmp4_cenc_audio\n container: fmp4\n elementaryStreams:\n - es_audio\n segmentSettings:\n segmentDuration: 6s\n encryptionId: cenc\n - key: fmp4_cbcs_video\n container: fmp4\n elementaryStreams:\n - es_video\n segmentSettings:\n segmentDuration: 6s\n encryptionId: cbcs\n - key: fmp4_cbcs_audio\n container: fmp4\n elementaryStreams:\n - es_audio\n segmentSettings:\n segmentDuration: 6s\n encryptionId: cbcs\n manifests:\n - fileName: manifest_aes128.m3u8\n type: HLS\n muxStreams:\n - ts_aes128\n - fileName: manifest_cenc.mpd\n type: DASH\n muxStreams:\n - fmp4_cenc_video\n - fmp4_cenc_audio\n - fileName: manifest_cbcs.mpd\n type: DASH\n muxStreams:\n - fmp4_cbcs_video\n - fmp4_cbcs_audio\n output:\n uri: gs://${default.name}/outputs/\n labels:\n label: key\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Transcoder Job Overlays\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.storage.Bucket(\"default\", {\n name: \"transcoder-job\",\n location: \"US\",\n forceDestroy: true,\n uniformBucketLevelAccess: true,\n publicAccessPrevention: \"enforced\",\n});\nconst exampleMp4 = new gcp.storage.BucketObject(\"example_mp4\", {\n name: \"example.mp4\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket: _default.name,\n});\nconst overlayPng = new gcp.storage.BucketObject(\"overlay_png\", {\n name: \"overlay.png\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/overlay.png\"),\n bucket: _default.name,\n});\nconst defaultJob = new gcp.transcoder.Job(\"default\", {\n location: \"us-central1\",\n config: {\n inputs: [{\n key: \"input0\",\n uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,\n }],\n editLists: [{\n key: \"atom0\",\n inputs: [\"input0\"],\n startTimeOffset: \"0s\",\n }],\n adBreaks: [{\n startTimeOffset: \"3.500s\",\n }],\n overlays: [{\n animations: [{\n animationFade: {\n fadeType: \"FADE_IN\",\n startTimeOffset: \"1.500s\",\n endTimeOffset: \"3.500s\",\n xy: {\n x: 1,\n y: 0.5,\n },\n },\n }],\n image: {\n uri: pulumi.interpolate`gs://${_default.name}/${overlayPng.name}`,\n },\n }],\n elementaryStreams: [\n {\n key: \"video-stream0\",\n videoStream: {\n h264: {\n widthPixels: 640,\n heightPixels: 360,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 550000,\n vbvFullnessBits: 495000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"video-stream1\",\n videoStream: {\n h264: {\n widthPixels: 1280,\n heightPixels: 720,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 2500000,\n vbvFullnessBits: 2250000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"audio-stream0\",\n audioStream: {\n codec: \"aac\",\n bitrateBps: 64000,\n channelCount: 2,\n channelLayouts: [\n \"fl\",\n \"fr\",\n ],\n sampleRateHertz: 48000,\n },\n },\n ],\n muxStreams: [\n {\n key: \"sd\",\n fileName: \"sd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"hd\",\n fileName: \"hd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n ],\n output: {\n uri: pulumi.interpolate`gs://${_default.name}/outputs/`,\n },\n },\n labels: {\n label: \"key\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.storage.Bucket(\"default\",\n name=\"transcoder-job\",\n location=\"US\",\n force_destroy=True,\n uniform_bucket_level_access=True,\n public_access_prevention=\"enforced\")\nexample_mp4 = gcp.storage.BucketObject(\"example_mp4\",\n name=\"example.mp4\",\n source=pulumi.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket=default.name)\noverlay_png = gcp.storage.BucketObject(\"overlay_png\",\n name=\"overlay.png\",\n source=pulumi.FileAsset(\"./test-fixtures/overlay.png\"),\n bucket=default.name)\ndefault_job = gcp.transcoder.Job(\"default\",\n location=\"us-central1\",\n config={\n \"inputs\": [{\n \"key\": \"input0\",\n \"uri\": pulumi.Output.all(\n defaultName=default.name,\n exampleMp4Name=example_mp4.name\n).apply(lambda resolved_outputs: f\"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}\")\n,\n }],\n \"edit_lists\": [{\n \"key\": \"atom0\",\n \"inputs\": [\"input0\"],\n \"start_time_offset\": \"0s\",\n }],\n \"ad_breaks\": [{\n \"start_time_offset\": \"3.500s\",\n }],\n \"overlays\": [{\n \"animations\": [{\n \"animation_fade\": {\n \"fade_type\": \"FADE_IN\",\n \"start_time_offset\": \"1.500s\",\n \"end_time_offset\": \"3.500s\",\n \"xy\": {\n \"x\": 1,\n \"y\": 0.5,\n },\n },\n }],\n \"image\": {\n \"uri\": pulumi.Output.all(\n defaultName=default.name,\n overlayPngName=overlay_png.name\n).apply(lambda resolved_outputs: f\"gs://{resolved_outputs['defaultName']}/{resolved_outputs['overlayPngName']}\")\n,\n },\n }],\n \"elementary_streams\": [\n {\n \"key\": \"video-stream0\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 640,\n \"height_pixels\": 360,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 550000,\n \"vbv_fullness_bits\": 495000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"video-stream1\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 1280,\n \"height_pixels\": 720,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 2500000,\n \"vbv_fullness_bits\": 2250000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"audio-stream0\",\n \"audio_stream\": {\n \"codec\": \"aac\",\n \"bitrate_bps\": 64000,\n \"channel_count\": 2,\n \"channel_layouts\": [\n \"fl\",\n \"fr\",\n ],\n \"sample_rate_hertz\": 48000,\n },\n },\n ],\n \"mux_streams\": [\n {\n \"key\": \"sd\",\n \"file_name\": \"sd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"hd\",\n \"file_name\": \"hd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n ],\n \"output\": {\n \"uri\": default.name.apply(lambda name: f\"gs://{name}/outputs/\"),\n },\n },\n labels={\n \"label\": \"key\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"transcoder-job\",\n Location = \"US\",\n ForceDestroy = true,\n UniformBucketLevelAccess = true,\n PublicAccessPrevention = \"enforced\",\n });\n\n var exampleMp4 = new Gcp.Storage.BucketObject(\"example_mp4\", new()\n {\n Name = \"example.mp4\",\n Source = new FileAsset(\"./test-fixtures/example.mp4\"),\n Bucket = @default.Name,\n });\n\n var overlayPng = new Gcp.Storage.BucketObject(\"overlay_png\", new()\n {\n Name = \"overlay.png\",\n Source = new FileAsset(\"./test-fixtures/overlay.png\"),\n Bucket = @default.Name,\n });\n\n var defaultJob = new Gcp.Transcoder.Job(\"default\", new()\n {\n Location = \"us-central1\",\n Config = new Gcp.Transcoder.Inputs.JobConfigArgs\n {\n Inputs = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigInputArgs\n {\n Key = \"input0\",\n Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =\u003e\n {\n var defaultName = values.Item1;\n var exampleMp4Name = values.Item2;\n return $\"gs://{defaultName}/{exampleMp4Name}\";\n }),\n },\n },\n EditLists = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigEditListArgs\n {\n Key = \"atom0\",\n Inputs = new[]\n {\n \"input0\",\n },\n StartTimeOffset = \"0s\",\n },\n },\n AdBreaks = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigAdBreakArgs\n {\n StartTimeOffset = \"3.500s\",\n },\n },\n Overlays = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigOverlayArgs\n {\n Animations = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigOverlayAnimationArgs\n {\n AnimationFade = new Gcp.Transcoder.Inputs.JobConfigOverlayAnimationAnimationFadeArgs\n {\n FadeType = \"FADE_IN\",\n StartTimeOffset = \"1.500s\",\n EndTimeOffset = \"3.500s\",\n Xy = new Gcp.Transcoder.Inputs.JobConfigOverlayAnimationAnimationFadeXyArgs\n {\n X = 1,\n Y = 0.5,\n },\n },\n },\n },\n Image = new Gcp.Transcoder.Inputs.JobConfigOverlayImageArgs\n {\n Uri = Output.Tuple(@default.Name, overlayPng.Name).Apply(values =\u003e\n {\n var defaultName = values.Item1;\n var overlayPngName = values.Item2;\n return $\"gs://{defaultName}/{overlayPngName}\";\n }),\n },\n },\n },\n ElementaryStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"video-stream0\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 640,\n HeightPixels = 360,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 550000,\n VbvFullnessBits = 495000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"video-stream1\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 1280,\n HeightPixels = 720,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 2500000,\n VbvFullnessBits = 2250000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"audio-stream0\",\n AudioStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamAudioStreamArgs\n {\n Codec = \"aac\",\n BitrateBps = 64000,\n ChannelCount = 2,\n ChannelLayouts = new[]\n {\n \"fl\",\n \"fr\",\n },\n SampleRateHertz = 48000,\n },\n },\n },\n MuxStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"sd\",\n FileName = \"sd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream0\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"hd\",\n FileName = \"hd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream1\",\n \"audio-stream0\",\n },\n },\n },\n Output = new Gcp.Transcoder.Inputs.JobConfigOutputArgs\n {\n Uri = @default.Name.Apply(name =\u003e $\"gs://{name}/outputs/\"),\n },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"transcoder-job\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tPublicAccessPrevention: pulumi.String(\"enforced\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMp4, err := storage.NewBucketObject(ctx, \"example_mp4\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"example.mp4\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/example.mp4\"),\n\t\t\tBucket: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\toverlayPng, err := storage.NewBucketObject(ctx, \"overlay_png\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"overlay.png\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/overlay.png\"),\n\t\t\tBucket: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = transcoder.NewJob(ctx, \"default\", \u0026transcoder.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026transcoder.JobConfigArgs{\n\t\t\t\tInputs: transcoder.JobConfigInputTypeArray{\n\t\t\t\t\t\u0026transcoder.JobConfigInputTypeArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"input0\"),\n\t\t\t\t\t\tUri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tdefaultName := _args[0].(string)\n\t\t\t\t\t\t\texampleMp4Name := _args[1].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", defaultName, exampleMp4Name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEditLists: transcoder.JobConfigEditListArray{\n\t\t\t\t\t\u0026transcoder.JobConfigEditListArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"atom0\"),\n\t\t\t\t\t\tInputs: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"input0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"0s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAdBreaks: transcoder.JobConfigAdBreakArray{\n\t\t\t\t\t\u0026transcoder.JobConfigAdBreakArgs{\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"3.500s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tOverlays: transcoder.JobConfigOverlayArray{\n\t\t\t\t\t\u0026transcoder.JobConfigOverlayArgs{\n\t\t\t\t\t\tAnimations: transcoder.JobConfigOverlayAnimationArray{\n\t\t\t\t\t\t\t\u0026transcoder.JobConfigOverlayAnimationArgs{\n\t\t\t\t\t\t\t\tAnimationFade: \u0026transcoder.JobConfigOverlayAnimationAnimationFadeArgs{\n\t\t\t\t\t\t\t\t\tFadeType: pulumi.String(\"FADE_IN\"),\n\t\t\t\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"1.500s\"),\n\t\t\t\t\t\t\t\t\tEndTimeOffset: pulumi.String(\"3.500s\"),\n\t\t\t\t\t\t\t\t\tXy: \u0026transcoder.JobConfigOverlayAnimationAnimationFadeXyArgs{\n\t\t\t\t\t\t\t\t\t\tX: pulumi.Float64(1),\n\t\t\t\t\t\t\t\t\t\tY: pulumi.Float64(0.5),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tImage: \u0026transcoder.JobConfigOverlayImageArgs{\n\t\t\t\t\t\t\tUri: pulumi.All(_default.Name, overlayPng.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\t\tdefaultName := _args[0].(string)\n\t\t\t\t\t\t\t\toverlayPngName := _args[1].(string)\n\t\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", defaultName, overlayPngName), nil\n\t\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tElementaryStreams: transcoder.JobConfigElementaryStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream0\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(640),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(360),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(495000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream1\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(1280),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(720),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(2500000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(2250000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\tAudioStream: \u0026transcoder.JobConfigElementaryStreamAudioStreamArgs{\n\t\t\t\t\t\t\tCodec: pulumi.String(\"aac\"),\n\t\t\t\t\t\t\tBitrateBps: pulumi.Int(64000),\n\t\t\t\t\t\t\tChannelCount: pulumi.Int(2),\n\t\t\t\t\t\t\tChannelLayouts: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"fl\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"fr\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSampleRateHertz: pulumi.Int(48000),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMuxStreams: transcoder.JobConfigMuxStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"sd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"sd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream0\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"hd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"hd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream1\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tOutput: \u0026transcoder.JobConfigOutputTypeArgs{\n\t\t\t\t\tUri: _default.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/outputs/\", name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\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.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.transcoder.Job;\nimport com.pulumi.gcp.transcoder.JobArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigOutputArgs;\nimport com.pulumi.asset.FileAsset;\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 default_ = new Bucket(\"default\", BucketArgs.builder()\n .name(\"transcoder-job\")\n .location(\"US\")\n .forceDestroy(true)\n .uniformBucketLevelAccess(true)\n .publicAccessPrevention(\"enforced\")\n .build());\n\n var exampleMp4 = new BucketObject(\"exampleMp4\", BucketObjectArgs.builder()\n .name(\"example.mp4\")\n .source(new FileAsset(\"./test-fixtures/example.mp4\"))\n .bucket(default_.name())\n .build());\n\n var overlayPng = new BucketObject(\"overlayPng\", BucketObjectArgs.builder()\n .name(\"overlay.png\")\n .source(new FileAsset(\"./test-fixtures/overlay.png\"))\n .bucket(default_.name())\n .build());\n\n var defaultJob = new Job(\"defaultJob\", JobArgs.builder()\n .location(\"us-central1\")\n .config(JobConfigArgs.builder()\n .inputs(JobConfigInputArgs.builder()\n .key(\"input0\")\n .uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -\u003e {\n var defaultName = values.t1;\n var exampleMp4Name = values.t2;\n return String.format(\"gs://%s/%s\", defaultName,exampleMp4Name);\n }))\n .build())\n .editLists(JobConfigEditListArgs.builder()\n .key(\"atom0\")\n .inputs(\"input0\")\n .startTimeOffset(\"0s\")\n .build())\n .adBreaks(JobConfigAdBreakArgs.builder()\n .startTimeOffset(\"3.500s\")\n .build())\n .overlays(JobConfigOverlayArgs.builder()\n .animations(JobConfigOverlayAnimationArgs.builder()\n .animationFade(JobConfigOverlayAnimationAnimationFadeArgs.builder()\n .fadeType(\"FADE_IN\")\n .startTimeOffset(\"1.500s\")\n .endTimeOffset(\"3.500s\")\n .xy(JobConfigOverlayAnimationAnimationFadeXyArgs.builder()\n .x(1)\n .y(0.5)\n .build())\n .build())\n .build())\n .image(JobConfigOverlayImageArgs.builder()\n .uri(Output.tuple(default_.name(), overlayPng.name()).applyValue(values -\u003e {\n var defaultName = values.t1;\n var overlayPngName = values.t2;\n return String.format(\"gs://%s/%s\", defaultName,overlayPngName);\n }))\n .build())\n .build())\n .elementaryStreams( \n JobConfigElementaryStreamArgs.builder()\n .key(\"video-stream0\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(640)\n .heightPixels(360)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(550000)\n .vbvFullnessBits(495000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"video-stream1\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(1280)\n .heightPixels(720)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(2500000)\n .vbvFullnessBits(2250000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"audio-stream0\")\n .audioStream(JobConfigElementaryStreamAudioStreamArgs.builder()\n .codec(\"aac\")\n .bitrateBps(64000)\n .channelCount(2)\n .channelLayouts( \n \"fl\",\n \"fr\")\n .sampleRateHertz(48000)\n .build())\n .build())\n .muxStreams( \n JobConfigMuxStreamArgs.builder()\n .key(\"sd\")\n .fileName(\"sd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream0\",\n \"audio-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"hd\")\n .fileName(\"hd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream1\",\n \"audio-stream0\")\n .build())\n .output(JobConfigOutputArgs.builder()\n .uri(default_.name().applyValue(name -\u003e String.format(\"gs://%s/outputs/\", name)))\n .build())\n .build())\n .labels(Map.of(\"label\", \"key\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:storage:Bucket\n properties:\n name: transcoder-job\n location: US\n forceDestroy: true\n uniformBucketLevelAccess: true\n publicAccessPrevention: enforced\n exampleMp4:\n type: gcp:storage:BucketObject\n name: example_mp4\n properties:\n name: example.mp4\n source:\n fn::FileAsset: ./test-fixtures/example.mp4\n bucket: ${default.name}\n overlayPng:\n type: gcp:storage:BucketObject\n name: overlay_png\n properties:\n name: overlay.png\n source:\n fn::FileAsset: ./test-fixtures/overlay.png\n bucket: ${default.name}\n defaultJob:\n type: gcp:transcoder:Job\n name: default\n properties:\n location: us-central1\n config:\n inputs:\n - key: input0\n uri: gs://${default.name}/${exampleMp4.name}\n editLists:\n - key: atom0\n inputs:\n - input0\n startTimeOffset: 0s\n adBreaks:\n - startTimeOffset: 3.500s\n overlays:\n - animations:\n - animationFade:\n fadeType: FADE_IN\n startTimeOffset: 1.500s\n endTimeOffset: 3.500s\n xy:\n x: 1\n y: 0.5\n image:\n uri: gs://${default.name}/${overlayPng.name}\n elementaryStreams:\n - key: video-stream0\n videoStream:\n h264:\n widthPixels: 640\n heightPixels: 360\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 550000\n vbvFullnessBits: 495000\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: video-stream1\n videoStream:\n h264:\n widthPixels: 1280\n heightPixels: 720\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 2.5e+06\n vbvFullnessBits: 2.25e+06\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: audio-stream0\n audioStream:\n codec: aac\n bitrateBps: 64000\n channelCount: 2\n channelLayouts:\n - fl\n - fr\n sampleRateHertz: 48000\n muxStreams:\n - key: sd\n fileName: sd.mp4\n container: mp4\n elementaryStreams:\n - video-stream0\n - audio-stream0\n - key: hd\n fileName: hd.mp4\n container: mp4\n elementaryStreams:\n - video-stream1\n - audio-stream0\n output:\n uri: gs://${default.name}/outputs/\n labels:\n label: key\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Transcoder Job Manifests\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.storage.Bucket(\"default\", {\n name: \"transcoder-job\",\n location: \"US\",\n forceDestroy: true,\n uniformBucketLevelAccess: true,\n publicAccessPrevention: \"enforced\",\n});\nconst exampleMp4 = new gcp.storage.BucketObject(\"example_mp4\", {\n name: \"example.mp4\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket: _default.name,\n});\nconst defaultJob = new gcp.transcoder.Job(\"default\", {\n location: \"us-central1\",\n config: {\n inputs: [{\n key: \"input0\",\n uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,\n }],\n editLists: [{\n key: \"atom0\",\n startTimeOffset: \"0s\",\n inputs: [\"input0\"],\n }],\n adBreaks: [{\n startTimeOffset: \"3.500s\",\n }],\n elementaryStreams: [\n {\n key: \"video-stream0\",\n videoStream: {\n h264: {\n widthPixels: 640,\n heightPixels: 360,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 550000,\n vbvFullnessBits: 495000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"video-stream1\",\n videoStream: {\n h264: {\n widthPixels: 1280,\n heightPixels: 720,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 2500000,\n vbvFullnessBits: 2250000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"audio-stream0\",\n audioStream: {\n codec: \"aac\",\n bitrateBps: 64000,\n channelCount: 2,\n channelLayouts: [\n \"fl\",\n \"fr\",\n ],\n sampleRateHertz: 48000,\n },\n },\n ],\n muxStreams: [\n {\n key: \"sd\",\n fileName: \"sd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"hd\",\n fileName: \"hd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"media-sd\",\n fileName: \"media-sd.ts\",\n container: \"ts\",\n elementaryStreams: [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"media-hd\",\n fileName: \"media-hd.ts\",\n container: \"ts\",\n elementaryStreams: [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"video-only-sd\",\n fileName: \"video-only-sd.m4s\",\n container: \"fmp4\",\n elementaryStreams: [\"video-stream0\"],\n },\n {\n key: \"video-only-hd\",\n fileName: \"video-only-hd.m4s\",\n container: \"fmp4\",\n elementaryStreams: [\"video-stream1\"],\n },\n {\n key: \"audio-only\",\n fileName: \"audio-only.m4s\",\n container: \"fmp4\",\n elementaryStreams: [\"audio-stream0\"],\n },\n ],\n manifests: [\n {\n fileName: \"manifest.m3u8\",\n type: \"HLS\",\n muxStreams: [\n \"media-sd\",\n \"media-hd\",\n ],\n },\n {\n fileName: \"manifest.mpd\",\n type: \"DASH\",\n muxStreams: [\n \"video-only-sd\",\n \"video-only-hd\",\n \"audio-only\",\n ],\n },\n ],\n output: {\n uri: pulumi.interpolate`gs://${_default.name}/outputs/`,\n },\n },\n labels: {\n label: \"key\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.storage.Bucket(\"default\",\n name=\"transcoder-job\",\n location=\"US\",\n force_destroy=True,\n uniform_bucket_level_access=True,\n public_access_prevention=\"enforced\")\nexample_mp4 = gcp.storage.BucketObject(\"example_mp4\",\n name=\"example.mp4\",\n source=pulumi.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket=default.name)\ndefault_job = gcp.transcoder.Job(\"default\",\n location=\"us-central1\",\n config={\n \"inputs\": [{\n \"key\": \"input0\",\n \"uri\": pulumi.Output.all(\n defaultName=default.name,\n exampleMp4Name=example_mp4.name\n).apply(lambda resolved_outputs: f\"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}\")\n,\n }],\n \"edit_lists\": [{\n \"key\": \"atom0\",\n \"start_time_offset\": \"0s\",\n \"inputs\": [\"input0\"],\n }],\n \"ad_breaks\": [{\n \"start_time_offset\": \"3.500s\",\n }],\n \"elementary_streams\": [\n {\n \"key\": \"video-stream0\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 640,\n \"height_pixels\": 360,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 550000,\n \"vbv_fullness_bits\": 495000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"video-stream1\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 1280,\n \"height_pixels\": 720,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 2500000,\n \"vbv_fullness_bits\": 2250000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"audio-stream0\",\n \"audio_stream\": {\n \"codec\": \"aac\",\n \"bitrate_bps\": 64000,\n \"channel_count\": 2,\n \"channel_layouts\": [\n \"fl\",\n \"fr\",\n ],\n \"sample_rate_hertz\": 48000,\n },\n },\n ],\n \"mux_streams\": [\n {\n \"key\": \"sd\",\n \"file_name\": \"sd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"hd\",\n \"file_name\": \"hd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"media-sd\",\n \"file_name\": \"media-sd.ts\",\n \"container\": \"ts\",\n \"elementary_streams\": [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"media-hd\",\n \"file_name\": \"media-hd.ts\",\n \"container\": \"ts\",\n \"elementary_streams\": [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"video-only-sd\",\n \"file_name\": \"video-only-sd.m4s\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"video-stream0\"],\n },\n {\n \"key\": \"video-only-hd\",\n \"file_name\": \"video-only-hd.m4s\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"video-stream1\"],\n },\n {\n \"key\": \"audio-only\",\n \"file_name\": \"audio-only.m4s\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"audio-stream0\"],\n },\n ],\n \"manifests\": [\n {\n \"file_name\": \"manifest.m3u8\",\n \"type\": \"HLS\",\n \"mux_streams\": [\n \"media-sd\",\n \"media-hd\",\n ],\n },\n {\n \"file_name\": \"manifest.mpd\",\n \"type\": \"DASH\",\n \"mux_streams\": [\n \"video-only-sd\",\n \"video-only-hd\",\n \"audio-only\",\n ],\n },\n ],\n \"output\": {\n \"uri\": default.name.apply(lambda name: f\"gs://{name}/outputs/\"),\n },\n },\n labels={\n \"label\": \"key\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"transcoder-job\",\n Location = \"US\",\n ForceDestroy = true,\n UniformBucketLevelAccess = true,\n PublicAccessPrevention = \"enforced\",\n });\n\n var exampleMp4 = new Gcp.Storage.BucketObject(\"example_mp4\", new()\n {\n Name = \"example.mp4\",\n Source = new FileAsset(\"./test-fixtures/example.mp4\"),\n Bucket = @default.Name,\n });\n\n var defaultJob = new Gcp.Transcoder.Job(\"default\", new()\n {\n Location = \"us-central1\",\n Config = new Gcp.Transcoder.Inputs.JobConfigArgs\n {\n Inputs = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigInputArgs\n {\n Key = \"input0\",\n Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =\u003e\n {\n var defaultName = values.Item1;\n var exampleMp4Name = values.Item2;\n return $\"gs://{defaultName}/{exampleMp4Name}\";\n }),\n },\n },\n EditLists = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigEditListArgs\n {\n Key = \"atom0\",\n StartTimeOffset = \"0s\",\n Inputs = new[]\n {\n \"input0\",\n },\n },\n },\n AdBreaks = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigAdBreakArgs\n {\n StartTimeOffset = \"3.500s\",\n },\n },\n ElementaryStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"video-stream0\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 640,\n HeightPixels = 360,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 550000,\n VbvFullnessBits = 495000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"video-stream1\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 1280,\n HeightPixels = 720,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 2500000,\n VbvFullnessBits = 2250000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"audio-stream0\",\n AudioStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamAudioStreamArgs\n {\n Codec = \"aac\",\n BitrateBps = 64000,\n ChannelCount = 2,\n ChannelLayouts = new[]\n {\n \"fl\",\n \"fr\",\n },\n SampleRateHertz = 48000,\n },\n },\n },\n MuxStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"sd\",\n FileName = \"sd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream0\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"hd\",\n FileName = \"hd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream1\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"media-sd\",\n FileName = \"media-sd.ts\",\n Container = \"ts\",\n ElementaryStreams = new[]\n {\n \"video-stream0\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"media-hd\",\n FileName = \"media-hd.ts\",\n Container = \"ts\",\n ElementaryStreams = new[]\n {\n \"video-stream1\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"video-only-sd\",\n FileName = \"video-only-sd.m4s\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"video-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"video-only-hd\",\n FileName = \"video-only-hd.m4s\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"video-stream1\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"audio-only\",\n FileName = \"audio-only.m4s\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"audio-stream0\",\n },\n },\n },\n Manifests = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigManifestArgs\n {\n FileName = \"manifest.m3u8\",\n Type = \"HLS\",\n MuxStreams = new[]\n {\n \"media-sd\",\n \"media-hd\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigManifestArgs\n {\n FileName = \"manifest.mpd\",\n Type = \"DASH\",\n MuxStreams = new[]\n {\n \"video-only-sd\",\n \"video-only-hd\",\n \"audio-only\",\n },\n },\n },\n Output = new Gcp.Transcoder.Inputs.JobConfigOutputArgs\n {\n Uri = @default.Name.Apply(name =\u003e $\"gs://{name}/outputs/\"),\n },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"transcoder-job\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tPublicAccessPrevention: pulumi.String(\"enforced\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMp4, err := storage.NewBucketObject(ctx, \"example_mp4\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"example.mp4\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/example.mp4\"),\n\t\t\tBucket: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = transcoder.NewJob(ctx, \"default\", \u0026transcoder.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026transcoder.JobConfigArgs{\n\t\t\t\tInputs: transcoder.JobConfigInputTypeArray{\n\t\t\t\t\t\u0026transcoder.JobConfigInputTypeArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"input0\"),\n\t\t\t\t\t\tUri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tdefaultName := _args[0].(string)\n\t\t\t\t\t\t\texampleMp4Name := _args[1].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", defaultName, exampleMp4Name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEditLists: transcoder.JobConfigEditListArray{\n\t\t\t\t\t\u0026transcoder.JobConfigEditListArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"atom0\"),\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"0s\"),\n\t\t\t\t\t\tInputs: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"input0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAdBreaks: transcoder.JobConfigAdBreakArray{\n\t\t\t\t\t\u0026transcoder.JobConfigAdBreakArgs{\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"3.500s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tElementaryStreams: transcoder.JobConfigElementaryStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream0\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(640),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(360),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(495000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream1\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(1280),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(720),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(2500000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(2250000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\tAudioStream: \u0026transcoder.JobConfigElementaryStreamAudioStreamArgs{\n\t\t\t\t\t\t\tCodec: pulumi.String(\"aac\"),\n\t\t\t\t\t\t\tBitrateBps: pulumi.Int(64000),\n\t\t\t\t\t\t\tChannelCount: pulumi.Int(2),\n\t\t\t\t\t\t\tChannelLayouts: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"fl\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"fr\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSampleRateHertz: pulumi.Int(48000),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMuxStreams: transcoder.JobConfigMuxStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"sd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"sd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream0\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"hd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"hd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream1\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"media-sd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"media-sd.ts\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"ts\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream0\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"media-hd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"media-hd.ts\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"ts\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream1\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-only-sd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"video-only-sd.m4s\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-only-hd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"video-only-hd.m4s\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"audio-only\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"audio-only.m4s\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tManifests: transcoder.JobConfigManifestArray{\n\t\t\t\t\t\u0026transcoder.JobConfigManifestArgs{\n\t\t\t\t\t\tFileName: pulumi.String(\"manifest.m3u8\"),\n\t\t\t\t\t\tType: pulumi.String(\"HLS\"),\n\t\t\t\t\t\tMuxStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"media-sd\"),\n\t\t\t\t\t\t\tpulumi.String(\"media-hd\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigManifestArgs{\n\t\t\t\t\t\tFileName: pulumi.String(\"manifest.mpd\"),\n\t\t\t\t\t\tType: pulumi.String(\"DASH\"),\n\t\t\t\t\t\tMuxStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-only-sd\"),\n\t\t\t\t\t\t\tpulumi.String(\"video-only-hd\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-only\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tOutput: \u0026transcoder.JobConfigOutputTypeArgs{\n\t\t\t\t\tUri: _default.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/outputs/\", name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\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.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.transcoder.Job;\nimport com.pulumi.gcp.transcoder.JobArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigOutputArgs;\nimport com.pulumi.asset.FileAsset;\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 default_ = new Bucket(\"default\", BucketArgs.builder()\n .name(\"transcoder-job\")\n .location(\"US\")\n .forceDestroy(true)\n .uniformBucketLevelAccess(true)\n .publicAccessPrevention(\"enforced\")\n .build());\n\n var exampleMp4 = new BucketObject(\"exampleMp4\", BucketObjectArgs.builder()\n .name(\"example.mp4\")\n .source(new FileAsset(\"./test-fixtures/example.mp4\"))\n .bucket(default_.name())\n .build());\n\n var defaultJob = new Job(\"defaultJob\", JobArgs.builder()\n .location(\"us-central1\")\n .config(JobConfigArgs.builder()\n .inputs(JobConfigInputArgs.builder()\n .key(\"input0\")\n .uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -\u003e {\n var defaultName = values.t1;\n var exampleMp4Name = values.t2;\n return String.format(\"gs://%s/%s\", defaultName,exampleMp4Name);\n }))\n .build())\n .editLists(JobConfigEditListArgs.builder()\n .key(\"atom0\")\n .startTimeOffset(\"0s\")\n .inputs(\"input0\")\n .build())\n .adBreaks(JobConfigAdBreakArgs.builder()\n .startTimeOffset(\"3.500s\")\n .build())\n .elementaryStreams( \n JobConfigElementaryStreamArgs.builder()\n .key(\"video-stream0\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(640)\n .heightPixels(360)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(550000)\n .vbvFullnessBits(495000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"video-stream1\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(1280)\n .heightPixels(720)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(2500000)\n .vbvFullnessBits(2250000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"audio-stream0\")\n .audioStream(JobConfigElementaryStreamAudioStreamArgs.builder()\n .codec(\"aac\")\n .bitrateBps(64000)\n .channelCount(2)\n .channelLayouts( \n \"fl\",\n \"fr\")\n .sampleRateHertz(48000)\n .build())\n .build())\n .muxStreams( \n JobConfigMuxStreamArgs.builder()\n .key(\"sd\")\n .fileName(\"sd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream0\",\n \"audio-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"hd\")\n .fileName(\"hd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream1\",\n \"audio-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"media-sd\")\n .fileName(\"media-sd.ts\")\n .container(\"ts\")\n .elementaryStreams( \n \"video-stream0\",\n \"audio-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"media-hd\")\n .fileName(\"media-hd.ts\")\n .container(\"ts\")\n .elementaryStreams( \n \"video-stream1\",\n \"audio-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"video-only-sd\")\n .fileName(\"video-only-sd.m4s\")\n .container(\"fmp4\")\n .elementaryStreams(\"video-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"video-only-hd\")\n .fileName(\"video-only-hd.m4s\")\n .container(\"fmp4\")\n .elementaryStreams(\"video-stream1\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"audio-only\")\n .fileName(\"audio-only.m4s\")\n .container(\"fmp4\")\n .elementaryStreams(\"audio-stream0\")\n .build())\n .manifests( \n JobConfigManifestArgs.builder()\n .fileName(\"manifest.m3u8\")\n .type(\"HLS\")\n .muxStreams( \n \"media-sd\",\n \"media-hd\")\n .build(),\n JobConfigManifestArgs.builder()\n .fileName(\"manifest.mpd\")\n .type(\"DASH\")\n .muxStreams( \n \"video-only-sd\",\n \"video-only-hd\",\n \"audio-only\")\n .build())\n .output(JobConfigOutputArgs.builder()\n .uri(default_.name().applyValue(name -\u003e String.format(\"gs://%s/outputs/\", name)))\n .build())\n .build())\n .labels(Map.of(\"label\", \"key\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:storage:Bucket\n properties:\n name: transcoder-job\n location: US\n forceDestroy: true\n uniformBucketLevelAccess: true\n publicAccessPrevention: enforced\n exampleMp4:\n type: gcp:storage:BucketObject\n name: example_mp4\n properties:\n name: example.mp4\n source:\n fn::FileAsset: ./test-fixtures/example.mp4\n bucket: ${default.name}\n defaultJob:\n type: gcp:transcoder:Job\n name: default\n properties:\n location: us-central1\n config:\n inputs:\n - key: input0\n uri: gs://${default.name}/${exampleMp4.name}\n editLists:\n - key: atom0\n startTimeOffset: 0s\n inputs:\n - input0\n adBreaks:\n - startTimeOffset: 3.500s\n elementaryStreams:\n - key: video-stream0\n videoStream:\n h264:\n widthPixels: 640\n heightPixels: 360\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 550000\n vbvFullnessBits: 495000\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: video-stream1\n videoStream:\n h264:\n widthPixels: 1280\n heightPixels: 720\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 2.5e+06\n vbvFullnessBits: 2.25e+06\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: audio-stream0\n audioStream:\n codec: aac\n bitrateBps: 64000\n channelCount: 2\n channelLayouts:\n - fl\n - fr\n sampleRateHertz: 48000\n muxStreams:\n - key: sd\n fileName: sd.mp4\n container: mp4\n elementaryStreams:\n - video-stream0\n - audio-stream0\n - key: hd\n fileName: hd.mp4\n container: mp4\n elementaryStreams:\n - video-stream1\n - audio-stream0\n - key: media-sd\n fileName: media-sd.ts\n container: ts\n elementaryStreams:\n - video-stream0\n - audio-stream0\n - key: media-hd\n fileName: media-hd.ts\n container: ts\n elementaryStreams:\n - video-stream1\n - audio-stream0\n - key: video-only-sd\n fileName: video-only-sd.m4s\n container: fmp4\n elementaryStreams:\n - video-stream0\n - key: video-only-hd\n fileName: video-only-hd.m4s\n container: fmp4\n elementaryStreams:\n - video-stream1\n - key: audio-only\n fileName: audio-only.m4s\n container: fmp4\n elementaryStreams:\n - audio-stream0\n manifests:\n - fileName: manifest.m3u8\n type: HLS\n muxStreams:\n - media-sd\n - media-hd\n - fileName: manifest.mpd\n type: DASH\n muxStreams:\n - video-only-sd\n - video-only-hd\n - audio-only\n output:\n uri: gs://${default.name}/outputs/\n labels:\n label: key\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nJob can be imported using any of these accepted formats:\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Job can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:transcoder/job:Job default {{name}}\n```\n\n", + "description": "Transcoding Job Resource\n\n\nTo get more information about Job, see:\n\n* [API documentation](https://cloud.google.com/transcoder/docs/reference/rest/v1/projects.locations.jobs)\n* How-to Guides\n * [Transcoder](https://cloud.google.com/transcoder/docs/)\n\n## Example Usage\n\n### Transcoder Job Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.storage.Bucket(\"default\", {\n name: \"transcoder-job\",\n location: \"US\",\n forceDestroy: true,\n uniformBucketLevelAccess: true,\n publicAccessPrevention: \"enforced\",\n});\nconst exampleMp4 = new gcp.storage.BucketObject(\"example_mp4\", {\n name: \"example.mp4\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket: _default.name,\n});\nconst defaultJobTemplate = new gcp.transcoder.JobTemplate(\"default\", {\n jobTemplateId: \"example-job-template\",\n location: \"us-central1\",\n config: {\n inputs: [{\n key: \"input0\",\n uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,\n }],\n output: {\n uri: pulumi.interpolate`gs://${_default.name}/outputs/`,\n },\n editLists: [{\n key: \"atom0\",\n inputs: [\"input0\"],\n startTimeOffset: \"0s\",\n }],\n elementaryStreams: [\n {\n key: \"video-stream0\",\n videoStream: {\n h264: {\n widthPixels: 640,\n heightPixels: 360,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 550000,\n vbvFullnessBits: 495000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"video-stream1\",\n videoStream: {\n h264: {\n widthPixels: 1280,\n heightPixels: 720,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 2500000,\n vbvFullnessBits: 2250000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"audio-stream0\",\n audioStream: {\n codec: \"aac\",\n bitrateBps: 64000,\n channelCount: 2,\n channelLayouts: [\n \"fl\",\n \"fr\",\n ],\n sampleRateHertz: 48000,\n },\n },\n ],\n muxStreams: [\n {\n key: \"sd\",\n fileName: \"sd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"hd\",\n fileName: \"hd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n ],\n },\n labels: {\n label: \"key\",\n },\n});\nconst defaultJob = new gcp.transcoder.Job(\"default\", {\n templateId: defaultJobTemplate.name,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.storage.Bucket(\"default\",\n name=\"transcoder-job\",\n location=\"US\",\n force_destroy=True,\n uniform_bucket_level_access=True,\n public_access_prevention=\"enforced\")\nexample_mp4 = gcp.storage.BucketObject(\"example_mp4\",\n name=\"example.mp4\",\n source=pulumi.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket=default.name)\ndefault_job_template = gcp.transcoder.JobTemplate(\"default\",\n job_template_id=\"example-job-template\",\n location=\"us-central1\",\n config={\n \"inputs\": [{\n \"key\": \"input0\",\n \"uri\": pulumi.Output.all(\n defaultName=default.name,\n exampleMp4Name=example_mp4.name\n).apply(lambda resolved_outputs: f\"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}\")\n,\n }],\n \"output\": {\n \"uri\": default.name.apply(lambda name: f\"gs://{name}/outputs/\"),\n },\n \"edit_lists\": [{\n \"key\": \"atom0\",\n \"inputs\": [\"input0\"],\n \"start_time_offset\": \"0s\",\n }],\n \"elementary_streams\": [\n {\n \"key\": \"video-stream0\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 640,\n \"height_pixels\": 360,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 550000,\n \"vbv_fullness_bits\": 495000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"video-stream1\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 1280,\n \"height_pixels\": 720,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 2500000,\n \"vbv_fullness_bits\": 2250000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"audio-stream0\",\n \"audio_stream\": {\n \"codec\": \"aac\",\n \"bitrate_bps\": 64000,\n \"channel_count\": 2,\n \"channel_layouts\": [\n \"fl\",\n \"fr\",\n ],\n \"sample_rate_hertz\": 48000,\n },\n },\n ],\n \"mux_streams\": [\n {\n \"key\": \"sd\",\n \"file_name\": \"sd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"hd\",\n \"file_name\": \"hd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n ],\n },\n labels={\n \"label\": \"key\",\n })\ndefault_job = gcp.transcoder.Job(\"default\",\n template_id=default_job_template.name,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"transcoder-job\",\n Location = \"US\",\n ForceDestroy = true,\n UniformBucketLevelAccess = true,\n PublicAccessPrevention = \"enforced\",\n });\n\n var exampleMp4 = new Gcp.Storage.BucketObject(\"example_mp4\", new()\n {\n Name = \"example.mp4\",\n Source = new FileAsset(\"./test-fixtures/example.mp4\"),\n Bucket = @default.Name,\n });\n\n var defaultJobTemplate = new Gcp.Transcoder.JobTemplate(\"default\", new()\n {\n JobTemplateId = \"example-job-template\",\n Location = \"us-central1\",\n Config = new Gcp.Transcoder.Inputs.JobTemplateConfigArgs\n {\n Inputs = new[]\n {\n new Gcp.Transcoder.Inputs.JobTemplateConfigInputArgs\n {\n Key = \"input0\",\n Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =\u003e\n {\n var defaultName = values.Item1;\n var exampleMp4Name = values.Item2;\n return $\"gs://{defaultName}/{exampleMp4Name}\";\n }),\n },\n },\n Output = new Gcp.Transcoder.Inputs.JobTemplateConfigOutputArgs\n {\n Uri = @default.Name.Apply(name =\u003e $\"gs://{name}/outputs/\"),\n },\n EditLists = new[]\n {\n new Gcp.Transcoder.Inputs.JobTemplateConfigEditListArgs\n {\n Key = \"atom0\",\n Inputs = new[]\n {\n \"input0\",\n },\n StartTimeOffset = \"0s\",\n },\n },\n ElementaryStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamArgs\n {\n Key = \"video-stream0\",\n VideoStream = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 640,\n HeightPixels = 360,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 550000,\n VbvFullnessBits = 495000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamArgs\n {\n Key = \"video-stream1\",\n VideoStream = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 1280,\n HeightPixels = 720,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 2500000,\n VbvFullnessBits = 2250000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamArgs\n {\n Key = \"audio-stream0\",\n AudioStream = new Gcp.Transcoder.Inputs.JobTemplateConfigElementaryStreamAudioStreamArgs\n {\n Codec = \"aac\",\n BitrateBps = 64000,\n ChannelCount = 2,\n ChannelLayouts = new[]\n {\n \"fl\",\n \"fr\",\n },\n SampleRateHertz = 48000,\n },\n },\n },\n MuxStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobTemplateConfigMuxStreamArgs\n {\n Key = \"sd\",\n FileName = \"sd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream0\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobTemplateConfigMuxStreamArgs\n {\n Key = \"hd\",\n FileName = \"hd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream1\",\n \"audio-stream0\",\n },\n },\n },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n });\n\n var defaultJob = new Gcp.Transcoder.Job(\"default\", new()\n {\n TemplateId = defaultJobTemplate.Name,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"transcoder-job\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tPublicAccessPrevention: pulumi.String(\"enforced\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMp4, err := storage.NewBucketObject(ctx, \"example_mp4\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"example.mp4\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/example.mp4\"),\n\t\t\tBucket: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultJobTemplate, err := transcoder.NewJobTemplate(ctx, \"default\", \u0026transcoder.JobTemplateArgs{\n\t\t\tJobTemplateId: pulumi.String(\"example-job-template\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026transcoder.JobTemplateConfigArgs{\n\t\t\t\tInputs: transcoder.JobTemplateConfigInputTypeArray{\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigInputTypeArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"input0\"),\n\t\t\t\t\t\tUri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tdefaultName := _args[0].(string)\n\t\t\t\t\t\t\texampleMp4Name := _args[1].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", defaultName, exampleMp4Name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tOutput: \u0026transcoder.JobTemplateConfigOutputTypeArgs{\n\t\t\t\t\tUri: _default.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/outputs/\", name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEditLists: transcoder.JobTemplateConfigEditListArray{\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigEditListArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"atom0\"),\n\t\t\t\t\t\tInputs: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"input0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"0s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tElementaryStreams: transcoder.JobTemplateConfigElementaryStreamArray{\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream0\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobTemplateConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobTemplateConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(640),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(360),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(495000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream1\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobTemplateConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobTemplateConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(1280),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(720),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(2500000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(2250000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\tAudioStream: \u0026transcoder.JobTemplateConfigElementaryStreamAudioStreamArgs{\n\t\t\t\t\t\t\tCodec: pulumi.String(\"aac\"),\n\t\t\t\t\t\t\tBitrateBps: pulumi.Int(64000),\n\t\t\t\t\t\t\tChannelCount: pulumi.Int(2),\n\t\t\t\t\t\t\tChannelLayouts: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"fl\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"fr\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSampleRateHertz: pulumi.Int(48000),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMuxStreams: transcoder.JobTemplateConfigMuxStreamArray{\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"sd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"sd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream0\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobTemplateConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"hd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"hd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream1\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\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\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = transcoder.NewJob(ctx, \"default\", \u0026transcoder.JobArgs{\n\t\t\tTemplateId: defaultJobTemplate.Name,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\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.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.transcoder.JobTemplate;\nimport com.pulumi.gcp.transcoder.JobTemplateArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobTemplateConfigArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobTemplateConfigOutputArgs;\nimport com.pulumi.gcp.transcoder.Job;\nimport com.pulumi.gcp.transcoder.JobArgs;\nimport com.pulumi.asset.FileAsset;\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 default_ = new Bucket(\"default\", BucketArgs.builder()\n .name(\"transcoder-job\")\n .location(\"US\")\n .forceDestroy(true)\n .uniformBucketLevelAccess(true)\n .publicAccessPrevention(\"enforced\")\n .build());\n\n var exampleMp4 = new BucketObject(\"exampleMp4\", BucketObjectArgs.builder()\n .name(\"example.mp4\")\n .source(new FileAsset(\"./test-fixtures/example.mp4\"))\n .bucket(default_.name())\n .build());\n\n var defaultJobTemplate = new JobTemplate(\"defaultJobTemplate\", JobTemplateArgs.builder()\n .jobTemplateId(\"example-job-template\")\n .location(\"us-central1\")\n .config(JobTemplateConfigArgs.builder()\n .inputs(JobTemplateConfigInputArgs.builder()\n .key(\"input0\")\n .uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -\u003e {\n var defaultName = values.t1;\n var exampleMp4Name = values.t2;\n return String.format(\"gs://%s/%s\", defaultName,exampleMp4Name);\n }))\n .build())\n .output(JobTemplateConfigOutputArgs.builder()\n .uri(default_.name().applyValue(name -\u003e String.format(\"gs://%s/outputs/\", name)))\n .build())\n .editLists(JobTemplateConfigEditListArgs.builder()\n .key(\"atom0\")\n .inputs(\"input0\")\n .startTimeOffset(\"0s\")\n .build())\n .elementaryStreams( \n JobTemplateConfigElementaryStreamArgs.builder()\n .key(\"video-stream0\")\n .videoStream(JobTemplateConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobTemplateConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(640)\n .heightPixels(360)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(550000)\n .vbvFullnessBits(495000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobTemplateConfigElementaryStreamArgs.builder()\n .key(\"video-stream1\")\n .videoStream(JobTemplateConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobTemplateConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(1280)\n .heightPixels(720)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(2500000)\n .vbvFullnessBits(2250000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobTemplateConfigElementaryStreamArgs.builder()\n .key(\"audio-stream0\")\n .audioStream(JobTemplateConfigElementaryStreamAudioStreamArgs.builder()\n .codec(\"aac\")\n .bitrateBps(64000)\n .channelCount(2)\n .channelLayouts( \n \"fl\",\n \"fr\")\n .sampleRateHertz(48000)\n .build())\n .build())\n .muxStreams( \n JobTemplateConfigMuxStreamArgs.builder()\n .key(\"sd\")\n .fileName(\"sd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream0\",\n \"audio-stream0\")\n .build(),\n JobTemplateConfigMuxStreamArgs.builder()\n .key(\"hd\")\n .fileName(\"hd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream1\",\n \"audio-stream0\")\n .build())\n .build())\n .labels(Map.of(\"label\", \"key\"))\n .build());\n\n var defaultJob = new Job(\"defaultJob\", JobArgs.builder()\n .templateId(defaultJobTemplate.name())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:storage:Bucket\n properties:\n name: transcoder-job\n location: US\n forceDestroy: true\n uniformBucketLevelAccess: true\n publicAccessPrevention: enforced\n exampleMp4:\n type: gcp:storage:BucketObject\n name: example_mp4\n properties:\n name: example.mp4\n source:\n fn::FileAsset: ./test-fixtures/example.mp4\n bucket: ${default.name}\n defaultJob:\n type: gcp:transcoder:Job\n name: default\n properties:\n templateId: ${defaultJobTemplate.name}\n location: us-central1\n labels:\n label: key\n defaultJobTemplate:\n type: gcp:transcoder:JobTemplate\n name: default\n properties:\n jobTemplateId: example-job-template\n location: us-central1\n config:\n inputs:\n - key: input0\n uri: gs://${default.name}/${exampleMp4.name}\n output:\n uri: gs://${default.name}/outputs/\n editLists:\n - key: atom0\n inputs:\n - input0\n startTimeOffset: 0s\n elementaryStreams:\n - key: video-stream0\n videoStream:\n h264:\n widthPixels: 640\n heightPixels: 360\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 550000\n vbvFullnessBits: 495000\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: video-stream1\n videoStream:\n h264:\n widthPixels: 1280\n heightPixels: 720\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 2.5e+06\n vbvFullnessBits: 2.25e+06\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: audio-stream0\n audioStream:\n codec: aac\n bitrateBps: 64000\n channelCount: 2\n channelLayouts:\n - fl\n - fr\n sampleRateHertz: 48000\n muxStreams:\n - key: sd\n fileName: sd.mp4\n container: mp4\n elementaryStreams:\n - video-stream0\n - audio-stream0\n - key: hd\n fileName: hd.mp4\n container: mp4\n elementaryStreams:\n - video-stream1\n - audio-stream0\n labels:\n label: key\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Transcoder Job Pubsub\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.storage.Bucket(\"default\", {\n name: \"transcoder-job\",\n location: \"US\",\n forceDestroy: true,\n uniformBucketLevelAccess: true,\n publicAccessPrevention: \"enforced\",\n});\nconst exampleMp4 = new gcp.storage.BucketObject(\"example_mp4\", {\n name: \"example.mp4\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket: _default.name,\n});\nconst transcoderNotifications = new gcp.pubsub.Topic(\"transcoder_notifications\", {name: \"transcoder-notifications\"});\nconst defaultJob = new gcp.transcoder.Job(\"default\", {\n location: \"us-central1\",\n config: {\n inputs: [{\n key: \"input0\",\n uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,\n }],\n editLists: [{\n key: \"atom0\",\n inputs: [\"input0\"],\n startTimeOffset: \"0s\",\n }],\n adBreaks: [{\n startTimeOffset: \"3.500s\",\n }],\n elementaryStreams: [\n {\n key: \"video-stream0\",\n videoStream: {\n h264: {\n widthPixels: 640,\n heightPixels: 360,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 550000,\n vbvFullnessBits: 495000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"video-stream1\",\n videoStream: {\n h264: {\n widthPixels: 1280,\n heightPixels: 720,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 2500000,\n vbvFullnessBits: 2250000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"audio-stream0\",\n audioStream: {\n codec: \"aac\",\n bitrateBps: 64000,\n channelCount: 2,\n channelLayouts: [\n \"fl\",\n \"fr\",\n ],\n sampleRateHertz: 48000,\n },\n },\n ],\n muxStreams: [\n {\n key: \"sd\",\n fileName: \"sd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"hd\",\n fileName: \"hd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n ],\n pubsubDestination: {\n topic: transcoderNotifications.id,\n },\n output: {\n uri: pulumi.interpolate`gs://${_default.name}/outputs/`,\n },\n },\n labels: {\n label: \"key\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.storage.Bucket(\"default\",\n name=\"transcoder-job\",\n location=\"US\",\n force_destroy=True,\n uniform_bucket_level_access=True,\n public_access_prevention=\"enforced\")\nexample_mp4 = gcp.storage.BucketObject(\"example_mp4\",\n name=\"example.mp4\",\n source=pulumi.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket=default.name)\ntranscoder_notifications = gcp.pubsub.Topic(\"transcoder_notifications\", name=\"transcoder-notifications\")\ndefault_job = gcp.transcoder.Job(\"default\",\n location=\"us-central1\",\n config={\n \"inputs\": [{\n \"key\": \"input0\",\n \"uri\": pulumi.Output.all(\n defaultName=default.name,\n exampleMp4Name=example_mp4.name\n).apply(lambda resolved_outputs: f\"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}\")\n,\n }],\n \"edit_lists\": [{\n \"key\": \"atom0\",\n \"inputs\": [\"input0\"],\n \"start_time_offset\": \"0s\",\n }],\n \"ad_breaks\": [{\n \"start_time_offset\": \"3.500s\",\n }],\n \"elementary_streams\": [\n {\n \"key\": \"video-stream0\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 640,\n \"height_pixels\": 360,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 550000,\n \"vbv_fullness_bits\": 495000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"video-stream1\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 1280,\n \"height_pixels\": 720,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 2500000,\n \"vbv_fullness_bits\": 2250000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"audio-stream0\",\n \"audio_stream\": {\n \"codec\": \"aac\",\n \"bitrate_bps\": 64000,\n \"channel_count\": 2,\n \"channel_layouts\": [\n \"fl\",\n \"fr\",\n ],\n \"sample_rate_hertz\": 48000,\n },\n },\n ],\n \"mux_streams\": [\n {\n \"key\": \"sd\",\n \"file_name\": \"sd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"hd\",\n \"file_name\": \"hd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n ],\n \"pubsub_destination\": {\n \"topic\": transcoder_notifications.id,\n },\n \"output\": {\n \"uri\": default.name.apply(lambda name: f\"gs://{name}/outputs/\"),\n },\n },\n labels={\n \"label\": \"key\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"transcoder-job\",\n Location = \"US\",\n ForceDestroy = true,\n UniformBucketLevelAccess = true,\n PublicAccessPrevention = \"enforced\",\n });\n\n var exampleMp4 = new Gcp.Storage.BucketObject(\"example_mp4\", new()\n {\n Name = \"example.mp4\",\n Source = new FileAsset(\"./test-fixtures/example.mp4\"),\n Bucket = @default.Name,\n });\n\n var transcoderNotifications = new Gcp.PubSub.Topic(\"transcoder_notifications\", new()\n {\n Name = \"transcoder-notifications\",\n });\n\n var defaultJob = new Gcp.Transcoder.Job(\"default\", new()\n {\n Location = \"us-central1\",\n Config = new Gcp.Transcoder.Inputs.JobConfigArgs\n {\n Inputs = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigInputArgs\n {\n Key = \"input0\",\n Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =\u003e\n {\n var defaultName = values.Item1;\n var exampleMp4Name = values.Item2;\n return $\"gs://{defaultName}/{exampleMp4Name}\";\n }),\n },\n },\n EditLists = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigEditListArgs\n {\n Key = \"atom0\",\n Inputs = new[]\n {\n \"input0\",\n },\n StartTimeOffset = \"0s\",\n },\n },\n AdBreaks = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigAdBreakArgs\n {\n StartTimeOffset = \"3.500s\",\n },\n },\n ElementaryStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"video-stream0\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 640,\n HeightPixels = 360,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 550000,\n VbvFullnessBits = 495000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"video-stream1\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 1280,\n HeightPixels = 720,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 2500000,\n VbvFullnessBits = 2250000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"audio-stream0\",\n AudioStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamAudioStreamArgs\n {\n Codec = \"aac\",\n BitrateBps = 64000,\n ChannelCount = 2,\n ChannelLayouts = new[]\n {\n \"fl\",\n \"fr\",\n },\n SampleRateHertz = 48000,\n },\n },\n },\n MuxStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"sd\",\n FileName = \"sd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream0\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"hd\",\n FileName = \"hd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream1\",\n \"audio-stream0\",\n },\n },\n },\n PubsubDestination = new Gcp.Transcoder.Inputs.JobConfigPubsubDestinationArgs\n {\n Topic = transcoderNotifications.Id,\n },\n Output = new Gcp.Transcoder.Inputs.JobConfigOutputArgs\n {\n Uri = @default.Name.Apply(name =\u003e $\"gs://{name}/outputs/\"),\n },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"transcoder-job\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tPublicAccessPrevention: pulumi.String(\"enforced\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMp4, err := storage.NewBucketObject(ctx, \"example_mp4\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"example.mp4\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/example.mp4\"),\n\t\t\tBucket: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttranscoderNotifications, err := pubsub.NewTopic(ctx, \"transcoder_notifications\", \u0026pubsub.TopicArgs{\n\t\t\tName: pulumi.String(\"transcoder-notifications\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = transcoder.NewJob(ctx, \"default\", \u0026transcoder.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026transcoder.JobConfigArgs{\n\t\t\t\tInputs: transcoder.JobConfigInputTypeArray{\n\t\t\t\t\t\u0026transcoder.JobConfigInputTypeArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"input0\"),\n\t\t\t\t\t\tUri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tdefaultName := _args[0].(string)\n\t\t\t\t\t\t\texampleMp4Name := _args[1].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", defaultName, exampleMp4Name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEditLists: transcoder.JobConfigEditListArray{\n\t\t\t\t\t\u0026transcoder.JobConfigEditListArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"atom0\"),\n\t\t\t\t\t\tInputs: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"input0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"0s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAdBreaks: transcoder.JobConfigAdBreakArray{\n\t\t\t\t\t\u0026transcoder.JobConfigAdBreakArgs{\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"3.500s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tElementaryStreams: transcoder.JobConfigElementaryStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream0\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(640),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(360),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(495000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream1\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(1280),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(720),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(2500000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(2250000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\tAudioStream: \u0026transcoder.JobConfigElementaryStreamAudioStreamArgs{\n\t\t\t\t\t\t\tCodec: pulumi.String(\"aac\"),\n\t\t\t\t\t\t\tBitrateBps: pulumi.Int(64000),\n\t\t\t\t\t\t\tChannelCount: pulumi.Int(2),\n\t\t\t\t\t\t\tChannelLayouts: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"fl\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"fr\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSampleRateHertz: pulumi.Int(48000),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMuxStreams: transcoder.JobConfigMuxStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"sd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"sd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream0\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"hd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"hd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream1\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPubsubDestination: \u0026transcoder.JobConfigPubsubDestinationArgs{\n\t\t\t\t\tTopic: transcoderNotifications.ID(),\n\t\t\t\t},\n\t\t\t\tOutput: \u0026transcoder.JobConfigOutputTypeArgs{\n\t\t\t\t\tUri: _default.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/outputs/\", name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\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.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.TopicArgs;\nimport com.pulumi.gcp.transcoder.Job;\nimport com.pulumi.gcp.transcoder.JobArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigPubsubDestinationArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigOutputArgs;\nimport com.pulumi.asset.FileAsset;\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 default_ = new Bucket(\"default\", BucketArgs.builder()\n .name(\"transcoder-job\")\n .location(\"US\")\n .forceDestroy(true)\n .uniformBucketLevelAccess(true)\n .publicAccessPrevention(\"enforced\")\n .build());\n\n var exampleMp4 = new BucketObject(\"exampleMp4\", BucketObjectArgs.builder()\n .name(\"example.mp4\")\n .source(new FileAsset(\"./test-fixtures/example.mp4\"))\n .bucket(default_.name())\n .build());\n\n var transcoderNotifications = new Topic(\"transcoderNotifications\", TopicArgs.builder()\n .name(\"transcoder-notifications\")\n .build());\n\n var defaultJob = new Job(\"defaultJob\", JobArgs.builder()\n .location(\"us-central1\")\n .config(JobConfigArgs.builder()\n .inputs(JobConfigInputArgs.builder()\n .key(\"input0\")\n .uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -\u003e {\n var defaultName = values.t1;\n var exampleMp4Name = values.t2;\n return String.format(\"gs://%s/%s\", defaultName,exampleMp4Name);\n }))\n .build())\n .editLists(JobConfigEditListArgs.builder()\n .key(\"atom0\")\n .inputs(\"input0\")\n .startTimeOffset(\"0s\")\n .build())\n .adBreaks(JobConfigAdBreakArgs.builder()\n .startTimeOffset(\"3.500s\")\n .build())\n .elementaryStreams( \n JobConfigElementaryStreamArgs.builder()\n .key(\"video-stream0\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(640)\n .heightPixels(360)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(550000)\n .vbvFullnessBits(495000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"video-stream1\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(1280)\n .heightPixels(720)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(2500000)\n .vbvFullnessBits(2250000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"audio-stream0\")\n .audioStream(JobConfigElementaryStreamAudioStreamArgs.builder()\n .codec(\"aac\")\n .bitrateBps(64000)\n .channelCount(2)\n .channelLayouts( \n \"fl\",\n \"fr\")\n .sampleRateHertz(48000)\n .build())\n .build())\n .muxStreams( \n JobConfigMuxStreamArgs.builder()\n .key(\"sd\")\n .fileName(\"sd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream0\",\n \"audio-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"hd\")\n .fileName(\"hd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream1\",\n \"audio-stream0\")\n .build())\n .pubsubDestination(JobConfigPubsubDestinationArgs.builder()\n .topic(transcoderNotifications.id())\n .build())\n .output(JobConfigOutputArgs.builder()\n .uri(default_.name().applyValue(name -\u003e String.format(\"gs://%s/outputs/\", name)))\n .build())\n .build())\n .labels(Map.of(\"label\", \"key\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:storage:Bucket\n properties:\n name: transcoder-job\n location: US\n forceDestroy: true\n uniformBucketLevelAccess: true\n publicAccessPrevention: enforced\n exampleMp4:\n type: gcp:storage:BucketObject\n name: example_mp4\n properties:\n name: example.mp4\n source:\n fn::FileAsset: ./test-fixtures/example.mp4\n bucket: ${default.name}\n transcoderNotifications:\n type: gcp:pubsub:Topic\n name: transcoder_notifications\n properties:\n name: transcoder-notifications\n defaultJob:\n type: gcp:transcoder:Job\n name: default\n properties:\n location: us-central1\n config:\n inputs:\n - key: input0\n uri: gs://${default.name}/${exampleMp4.name}\n editLists:\n - key: atom0\n inputs:\n - input0\n startTimeOffset: 0s\n adBreaks:\n - startTimeOffset: 3.500s\n elementaryStreams:\n - key: video-stream0\n videoStream:\n h264:\n widthPixels: 640\n heightPixels: 360\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 550000\n vbvFullnessBits: 495000\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: video-stream1\n videoStream:\n h264:\n widthPixels: 1280\n heightPixels: 720\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 2.5e+06\n vbvFullnessBits: 2.25e+06\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: audio-stream0\n audioStream:\n codec: aac\n bitrateBps: 64000\n channelCount: 2\n channelLayouts:\n - fl\n - fr\n sampleRateHertz: 48000\n muxStreams:\n - key: sd\n fileName: sd.mp4\n container: mp4\n elementaryStreams:\n - video-stream0\n - audio-stream0\n - key: hd\n fileName: hd.mp4\n container: mp4\n elementaryStreams:\n - video-stream1\n - audio-stream0\n pubsubDestination:\n topic: ${transcoderNotifications.id}\n output:\n uri: gs://${default.name}/outputs/\n labels:\n label: key\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Transcoder Job Encryptions\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.storage.Bucket(\"default\", {\n name: \"transcoder-job\",\n location: \"US\",\n forceDestroy: true,\n uniformBucketLevelAccess: true,\n publicAccessPrevention: \"enforced\",\n});\nconst exampleMp4 = new gcp.storage.BucketObject(\"example_mp4\", {\n name: \"example.mp4\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket: _default.name,\n});\nconst encryptionKey = new gcp.secretmanager.Secret(\"encryption_key\", {\n secretId: \"transcoder-encryption-key\",\n replication: {\n auto: {},\n },\n});\nconst encryptionKeySecretVersion = new gcp.secretmanager.SecretVersion(\"encryption_key\", {\n secret: encryptionKey.name,\n secretData: \"4A67F2C1B8E93A4F6D3E7890A1BC23DF\",\n});\nconst project = gcp.organizations.getProject({});\n// this is required to allow the transcoder service identity to access the secret\nconst transcoder = new gcp.projects.ServiceIdentity(\"transcoder\", {\n project: project.then(project =\u003e project.projectId),\n service: \"transcoder.googleapis.com\",\n});\nconst transcoderEncryptionKeyAccessor = new gcp.secretmanager.SecretIamMember(\"transcoder_encryption_key_accessor\", {\n secretId: encryptionKey.secretId,\n project: encryptionKey.project,\n role: \"roles/secretmanager.secretAccessor\",\n member: pulumi.interpolate`serviceAccount:${transcoder.email}`,\n});\nconst defaultJob = new gcp.transcoder.Job(\"default\", {\n location: \"us-central1\",\n config: {\n inputs: [{\n key: \"input0\",\n uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,\n }],\n elementaryStreams: [\n {\n key: \"es_video\",\n videoStream: {\n h264: {\n profile: \"main\",\n heightPixels: 600,\n widthPixels: 800,\n bitrateBps: 1000000,\n frameRate: 60,\n },\n },\n },\n {\n key: \"es_audio\",\n audioStream: {\n codec: \"aac\",\n channelCount: 2,\n bitrateBps: 160000,\n },\n },\n ],\n encryptions: [\n {\n id: \"aes-128\",\n secretManagerKeySource: {\n secretVersion: encryptionKeySecretVersion.name,\n },\n drmSystems: {\n clearkey: {},\n },\n aes128: {},\n },\n {\n id: \"cenc\",\n secretManagerKeySource: {\n secretVersion: encryptionKeySecretVersion.name,\n },\n drmSystems: {\n widevine: {},\n },\n mpegCenc: {\n scheme: \"cenc\",\n },\n },\n {\n id: \"cbcs\",\n secretManagerKeySource: {\n secretVersion: encryptionKeySecretVersion.name,\n },\n drmSystems: {\n widevine: {},\n },\n mpegCenc: {\n scheme: \"cbcs\",\n },\n },\n ],\n muxStreams: [\n {\n key: \"ts_aes128\",\n container: \"ts\",\n elementaryStreams: [\n \"es_video\",\n \"es_audio\",\n ],\n segmentSettings: {\n segmentDuration: \"6s\",\n },\n encryptionId: \"aes-128\",\n },\n {\n key: \"fmp4_cenc_video\",\n container: \"fmp4\",\n elementaryStreams: [\"es_video\"],\n segmentSettings: {\n segmentDuration: \"6s\",\n },\n encryptionId: \"cenc\",\n },\n {\n key: \"fmp4_cenc_audio\",\n container: \"fmp4\",\n elementaryStreams: [\"es_audio\"],\n segmentSettings: {\n segmentDuration: \"6s\",\n },\n encryptionId: \"cenc\",\n },\n {\n key: \"fmp4_cbcs_video\",\n container: \"fmp4\",\n elementaryStreams: [\"es_video\"],\n segmentSettings: {\n segmentDuration: \"6s\",\n },\n encryptionId: \"cbcs\",\n },\n {\n key: \"fmp4_cbcs_audio\",\n container: \"fmp4\",\n elementaryStreams: [\"es_audio\"],\n segmentSettings: {\n segmentDuration: \"6s\",\n },\n encryptionId: \"cbcs\",\n },\n ],\n manifests: [\n {\n fileName: \"manifest_aes128.m3u8\",\n type: \"HLS\",\n muxStreams: [\"ts_aes128\"],\n },\n {\n fileName: \"manifest_cenc.mpd\",\n type: \"DASH\",\n muxStreams: [\n \"fmp4_cenc_video\",\n \"fmp4_cenc_audio\",\n ],\n },\n {\n fileName: \"manifest_cbcs.mpd\",\n type: \"DASH\",\n muxStreams: [\n \"fmp4_cbcs_video\",\n \"fmp4_cbcs_audio\",\n ],\n },\n ],\n output: {\n uri: pulumi.interpolate`gs://${_default.name}/outputs/`,\n },\n },\n labels: {\n label: \"key\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.storage.Bucket(\"default\",\n name=\"transcoder-job\",\n location=\"US\",\n force_destroy=True,\n uniform_bucket_level_access=True,\n public_access_prevention=\"enforced\")\nexample_mp4 = gcp.storage.BucketObject(\"example_mp4\",\n name=\"example.mp4\",\n source=pulumi.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket=default.name)\nencryption_key = gcp.secretmanager.Secret(\"encryption_key\",\n secret_id=\"transcoder-encryption-key\",\n replication={\n \"auto\": {},\n })\nencryption_key_secret_version = gcp.secretmanager.SecretVersion(\"encryption_key\",\n secret=encryption_key.name,\n secret_data=\"4A67F2C1B8E93A4F6D3E7890A1BC23DF\")\nproject = gcp.organizations.get_project()\n# this is required to allow the transcoder service identity to access the secret\ntranscoder = gcp.projects.ServiceIdentity(\"transcoder\",\n project=project.project_id,\n service=\"transcoder.googleapis.com\")\ntranscoder_encryption_key_accessor = gcp.secretmanager.SecretIamMember(\"transcoder_encryption_key_accessor\",\n secret_id=encryption_key.secret_id,\n project=encryption_key.project,\n role=\"roles/secretmanager.secretAccessor\",\n member=transcoder.email.apply(lambda email: f\"serviceAccount:{email}\"))\ndefault_job = gcp.transcoder.Job(\"default\",\n location=\"us-central1\",\n config={\n \"inputs\": [{\n \"key\": \"input0\",\n \"uri\": pulumi.Output.all(\n defaultName=default.name,\n exampleMp4Name=example_mp4.name\n).apply(lambda resolved_outputs: f\"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}\")\n,\n }],\n \"elementary_streams\": [\n {\n \"key\": \"es_video\",\n \"video_stream\": {\n \"h264\": {\n \"profile\": \"main\",\n \"height_pixels\": 600,\n \"width_pixels\": 800,\n \"bitrate_bps\": 1000000,\n \"frame_rate\": 60,\n },\n },\n },\n {\n \"key\": \"es_audio\",\n \"audio_stream\": {\n \"codec\": \"aac\",\n \"channel_count\": 2,\n \"bitrate_bps\": 160000,\n },\n },\n ],\n \"encryptions\": [\n {\n \"id\": \"aes-128\",\n \"secret_manager_key_source\": {\n \"secret_version\": encryption_key_secret_version.name,\n },\n \"drm_systems\": {\n \"clearkey\": {},\n },\n \"aes128\": {},\n },\n {\n \"id\": \"cenc\",\n \"secret_manager_key_source\": {\n \"secret_version\": encryption_key_secret_version.name,\n },\n \"drm_systems\": {\n \"widevine\": {},\n },\n \"mpeg_cenc\": {\n \"scheme\": \"cenc\",\n },\n },\n {\n \"id\": \"cbcs\",\n \"secret_manager_key_source\": {\n \"secret_version\": encryption_key_secret_version.name,\n },\n \"drm_systems\": {\n \"widevine\": {},\n },\n \"mpeg_cenc\": {\n \"scheme\": \"cbcs\",\n },\n },\n ],\n \"mux_streams\": [\n {\n \"key\": \"ts_aes128\",\n \"container\": \"ts\",\n \"elementary_streams\": [\n \"es_video\",\n \"es_audio\",\n ],\n \"segment_settings\": {\n \"segment_duration\": \"6s\",\n },\n \"encryption_id\": \"aes-128\",\n },\n {\n \"key\": \"fmp4_cenc_video\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"es_video\"],\n \"segment_settings\": {\n \"segment_duration\": \"6s\",\n },\n \"encryption_id\": \"cenc\",\n },\n {\n \"key\": \"fmp4_cenc_audio\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"es_audio\"],\n \"segment_settings\": {\n \"segment_duration\": \"6s\",\n },\n \"encryption_id\": \"cenc\",\n },\n {\n \"key\": \"fmp4_cbcs_video\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"es_video\"],\n \"segment_settings\": {\n \"segment_duration\": \"6s\",\n },\n \"encryption_id\": \"cbcs\",\n },\n {\n \"key\": \"fmp4_cbcs_audio\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"es_audio\"],\n \"segment_settings\": {\n \"segment_duration\": \"6s\",\n },\n \"encryption_id\": \"cbcs\",\n },\n ],\n \"manifests\": [\n {\n \"file_name\": \"manifest_aes128.m3u8\",\n \"type\": \"HLS\",\n \"mux_streams\": [\"ts_aes128\"],\n },\n {\n \"file_name\": \"manifest_cenc.mpd\",\n \"type\": \"DASH\",\n \"mux_streams\": [\n \"fmp4_cenc_video\",\n \"fmp4_cenc_audio\",\n ],\n },\n {\n \"file_name\": \"manifest_cbcs.mpd\",\n \"type\": \"DASH\",\n \"mux_streams\": [\n \"fmp4_cbcs_video\",\n \"fmp4_cbcs_audio\",\n ],\n },\n ],\n \"output\": {\n \"uri\": default.name.apply(lambda name: f\"gs://{name}/outputs/\"),\n },\n },\n labels={\n \"label\": \"key\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"transcoder-job\",\n Location = \"US\",\n ForceDestroy = true,\n UniformBucketLevelAccess = true,\n PublicAccessPrevention = \"enforced\",\n });\n\n var exampleMp4 = new Gcp.Storage.BucketObject(\"example_mp4\", new()\n {\n Name = \"example.mp4\",\n Source = new FileAsset(\"./test-fixtures/example.mp4\"),\n Bucket = @default.Name,\n });\n\n var encryptionKey = new Gcp.SecretManager.Secret(\"encryption_key\", new()\n {\n SecretId = \"transcoder-encryption-key\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Auto = null,\n },\n });\n\n var encryptionKeySecretVersion = new Gcp.SecretManager.SecretVersion(\"encryption_key\", new()\n {\n Secret = encryptionKey.Name,\n SecretData = \"4A67F2C1B8E93A4F6D3E7890A1BC23DF\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n // this is required to allow the transcoder service identity to access the secret\n var transcoder = new Gcp.Projects.ServiceIdentity(\"transcoder\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Service = \"transcoder.googleapis.com\",\n });\n\n var transcoderEncryptionKeyAccessor = new Gcp.SecretManager.SecretIamMember(\"transcoder_encryption_key_accessor\", new()\n {\n SecretId = encryptionKey.SecretId,\n Project = encryptionKey.Project,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = transcoder.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var defaultJob = new Gcp.Transcoder.Job(\"default\", new()\n {\n Location = \"us-central1\",\n Config = new Gcp.Transcoder.Inputs.JobConfigArgs\n {\n Inputs = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigInputArgs\n {\n Key = \"input0\",\n Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =\u003e\n {\n var defaultName = values.Item1;\n var exampleMp4Name = values.Item2;\n return $\"gs://{defaultName}/{exampleMp4Name}\";\n }),\n },\n },\n ElementaryStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"es_video\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n Profile = \"main\",\n HeightPixels = 600,\n WidthPixels = 800,\n BitrateBps = 1000000,\n FrameRate = 60,\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"es_audio\",\n AudioStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamAudioStreamArgs\n {\n Codec = \"aac\",\n ChannelCount = 2,\n BitrateBps = 160000,\n },\n },\n },\n Encryptions = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigEncryptionArgs\n {\n Id = \"aes-128\",\n SecretManagerKeySource = new Gcp.Transcoder.Inputs.JobConfigEncryptionSecretManagerKeySourceArgs\n {\n SecretVersion = encryptionKeySecretVersion.Name,\n },\n DrmSystems = new Gcp.Transcoder.Inputs.JobConfigEncryptionDrmSystemsArgs\n {\n Clearkey = null,\n },\n Aes128 = null,\n },\n new Gcp.Transcoder.Inputs.JobConfigEncryptionArgs\n {\n Id = \"cenc\",\n SecretManagerKeySource = new Gcp.Transcoder.Inputs.JobConfigEncryptionSecretManagerKeySourceArgs\n {\n SecretVersion = encryptionKeySecretVersion.Name,\n },\n DrmSystems = new Gcp.Transcoder.Inputs.JobConfigEncryptionDrmSystemsArgs\n {\n Widevine = null,\n },\n MpegCenc = new Gcp.Transcoder.Inputs.JobConfigEncryptionMpegCencArgs\n {\n Scheme = \"cenc\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigEncryptionArgs\n {\n Id = \"cbcs\",\n SecretManagerKeySource = new Gcp.Transcoder.Inputs.JobConfigEncryptionSecretManagerKeySourceArgs\n {\n SecretVersion = encryptionKeySecretVersion.Name,\n },\n DrmSystems = new Gcp.Transcoder.Inputs.JobConfigEncryptionDrmSystemsArgs\n {\n Widevine = null,\n },\n MpegCenc = new Gcp.Transcoder.Inputs.JobConfigEncryptionMpegCencArgs\n {\n Scheme = \"cbcs\",\n },\n },\n },\n MuxStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"ts_aes128\",\n Container = \"ts\",\n ElementaryStreams = new[]\n {\n \"es_video\",\n \"es_audio\",\n },\n SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs\n {\n SegmentDuration = \"6s\",\n },\n EncryptionId = \"aes-128\",\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"fmp4_cenc_video\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"es_video\",\n },\n SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs\n {\n SegmentDuration = \"6s\",\n },\n EncryptionId = \"cenc\",\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"fmp4_cenc_audio\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"es_audio\",\n },\n SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs\n {\n SegmentDuration = \"6s\",\n },\n EncryptionId = \"cenc\",\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"fmp4_cbcs_video\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"es_video\",\n },\n SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs\n {\n SegmentDuration = \"6s\",\n },\n EncryptionId = \"cbcs\",\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"fmp4_cbcs_audio\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"es_audio\",\n },\n SegmentSettings = new Gcp.Transcoder.Inputs.JobConfigMuxStreamSegmentSettingsArgs\n {\n SegmentDuration = \"6s\",\n },\n EncryptionId = \"cbcs\",\n },\n },\n Manifests = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigManifestArgs\n {\n FileName = \"manifest_aes128.m3u8\",\n Type = \"HLS\",\n MuxStreams = new[]\n {\n \"ts_aes128\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigManifestArgs\n {\n FileName = \"manifest_cenc.mpd\",\n Type = \"DASH\",\n MuxStreams = new[]\n {\n \"fmp4_cenc_video\",\n \"fmp4_cenc_audio\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigManifestArgs\n {\n FileName = \"manifest_cbcs.mpd\",\n Type = \"DASH\",\n MuxStreams = new[]\n {\n \"fmp4_cbcs_video\",\n \"fmp4_cbcs_audio\",\n },\n },\n },\n Output = new Gcp.Transcoder.Inputs.JobConfigOutputArgs\n {\n Uri = @default.Name.Apply(name =\u003e $\"gs://{name}/outputs/\"),\n },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"transcoder-job\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tPublicAccessPrevention: pulumi.String(\"enforced\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMp4, err := storage.NewBucketObject(ctx, \"example_mp4\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"example.mp4\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/example.mp4\"),\n\t\t\tBucket: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tencryptionKey, err := secretmanager.NewSecret(ctx, \"encryption_key\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"transcoder-encryption-key\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAuto: \u0026secretmanager.SecretReplicationAutoArgs{},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tencryptionKeySecretVersion, err := secretmanager.NewSecretVersion(ctx, \"encryption_key\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: encryptionKey.Name,\n\t\t\tSecretData: pulumi.String(\"4A67F2C1B8E93A4F6D3E7890A1BC23DF\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// this is required to allow the transcoder service identity to access the secret\n\t\ttranscoder, err := projects.NewServiceIdentity(ctx, \"transcoder\", \u0026projects.ServiceIdentityArgs{\n\t\t\tProject: pulumi.String(project.ProjectId),\n\t\t\tService: pulumi.String(\"transcoder.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"transcoder_encryption_key_accessor\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: encryptionKey.SecretId,\n\t\t\tProject: encryptionKey.Project,\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: transcoder.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = transcoder.NewJob(ctx, \"default\", \u0026transcoder.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026transcoder.JobConfigArgs{\n\t\t\t\tInputs: transcoder.JobConfigInputTypeArray{\n\t\t\t\t\t\u0026transcoder.JobConfigInputTypeArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"input0\"),\n\t\t\t\t\t\tUri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tdefaultName := _args[0].(string)\n\t\t\t\t\t\t\texampleMp4Name := _args[1].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", defaultName, exampleMp4Name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tElementaryStreams: transcoder.JobConfigElementaryStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"es_video\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"main\"),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(600),\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(800),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(1000000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"es_audio\"),\n\t\t\t\t\t\tAudioStream: \u0026transcoder.JobConfigElementaryStreamAudioStreamArgs{\n\t\t\t\t\t\t\tCodec: pulumi.String(\"aac\"),\n\t\t\t\t\t\t\tChannelCount: pulumi.Int(2),\n\t\t\t\t\t\t\tBitrateBps: pulumi.Int(160000),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEncryptions: transcoder.JobConfigEncryptionArray{\n\t\t\t\t\t\u0026transcoder.JobConfigEncryptionArgs{\n\t\t\t\t\t\tId: pulumi.String(\"aes-128\"),\n\t\t\t\t\t\tSecretManagerKeySource: \u0026transcoder.JobConfigEncryptionSecretManagerKeySourceArgs{\n\t\t\t\t\t\t\tSecretVersion: encryptionKeySecretVersion.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDrmSystems: \u0026transcoder.JobConfigEncryptionDrmSystemsArgs{\n\t\t\t\t\t\t\tClearkey: \u0026transcoder.JobConfigEncryptionDrmSystemsClearkeyArgs{},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tAes128: \u0026transcoder.JobConfigEncryptionAes128Args{},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigEncryptionArgs{\n\t\t\t\t\t\tId: pulumi.String(\"cenc\"),\n\t\t\t\t\t\tSecretManagerKeySource: \u0026transcoder.JobConfigEncryptionSecretManagerKeySourceArgs{\n\t\t\t\t\t\t\tSecretVersion: encryptionKeySecretVersion.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDrmSystems: \u0026transcoder.JobConfigEncryptionDrmSystemsArgs{\n\t\t\t\t\t\t\tWidevine: \u0026transcoder.JobConfigEncryptionDrmSystemsWidevineArgs{},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMpegCenc: \u0026transcoder.JobConfigEncryptionMpegCencArgs{\n\t\t\t\t\t\t\tScheme: pulumi.String(\"cenc\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigEncryptionArgs{\n\t\t\t\t\t\tId: pulumi.String(\"cbcs\"),\n\t\t\t\t\t\tSecretManagerKeySource: \u0026transcoder.JobConfigEncryptionSecretManagerKeySourceArgs{\n\t\t\t\t\t\t\tSecretVersion: encryptionKeySecretVersion.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDrmSystems: \u0026transcoder.JobConfigEncryptionDrmSystemsArgs{\n\t\t\t\t\t\t\tWidevine: \u0026transcoder.JobConfigEncryptionDrmSystemsWidevineArgs{},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tMpegCenc: \u0026transcoder.JobConfigEncryptionMpegCencArgs{\n\t\t\t\t\t\t\tScheme: pulumi.String(\"cbcs\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMuxStreams: transcoder.JobConfigMuxStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"ts_aes128\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"ts\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"es_video\"),\n\t\t\t\t\t\t\tpulumi.String(\"es_audio\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSegmentSettings: \u0026transcoder.JobConfigMuxStreamSegmentSettingsArgs{\n\t\t\t\t\t\t\tSegmentDuration: pulumi.String(\"6s\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEncryptionId: pulumi.String(\"aes-128\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"fmp4_cenc_video\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"es_video\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSegmentSettings: \u0026transcoder.JobConfigMuxStreamSegmentSettingsArgs{\n\t\t\t\t\t\t\tSegmentDuration: pulumi.String(\"6s\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEncryptionId: pulumi.String(\"cenc\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"fmp4_cenc_audio\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"es_audio\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSegmentSettings: \u0026transcoder.JobConfigMuxStreamSegmentSettingsArgs{\n\t\t\t\t\t\t\tSegmentDuration: pulumi.String(\"6s\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEncryptionId: pulumi.String(\"cenc\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"fmp4_cbcs_video\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"es_video\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSegmentSettings: \u0026transcoder.JobConfigMuxStreamSegmentSettingsArgs{\n\t\t\t\t\t\t\tSegmentDuration: pulumi.String(\"6s\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEncryptionId: pulumi.String(\"cbcs\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"fmp4_cbcs_audio\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"es_audio\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tSegmentSettings: \u0026transcoder.JobConfigMuxStreamSegmentSettingsArgs{\n\t\t\t\t\t\t\tSegmentDuration: pulumi.String(\"6s\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tEncryptionId: pulumi.String(\"cbcs\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tManifests: transcoder.JobConfigManifestArray{\n\t\t\t\t\t\u0026transcoder.JobConfigManifestArgs{\n\t\t\t\t\t\tFileName: pulumi.String(\"manifest_aes128.m3u8\"),\n\t\t\t\t\t\tType: pulumi.String(\"HLS\"),\n\t\t\t\t\t\tMuxStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"ts_aes128\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigManifestArgs{\n\t\t\t\t\t\tFileName: pulumi.String(\"manifest_cenc.mpd\"),\n\t\t\t\t\t\tType: pulumi.String(\"DASH\"),\n\t\t\t\t\t\tMuxStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"fmp4_cenc_video\"),\n\t\t\t\t\t\t\tpulumi.String(\"fmp4_cenc_audio\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigManifestArgs{\n\t\t\t\t\t\tFileName: pulumi.String(\"manifest_cbcs.mpd\"),\n\t\t\t\t\t\tType: pulumi.String(\"DASH\"),\n\t\t\t\t\t\tMuxStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"fmp4_cbcs_video\"),\n\t\t\t\t\t\t\tpulumi.String(\"fmp4_cbcs_audio\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tOutput: \u0026transcoder.JobConfigOutputTypeArgs{\n\t\t\t\t\tUri: _default.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/outputs/\", name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\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.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationAutoArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.projects.ServiceIdentity;\nimport com.pulumi.gcp.projects.ServiceIdentityArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport com.pulumi.gcp.transcoder.Job;\nimport com.pulumi.gcp.transcoder.JobArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigOutputArgs;\nimport com.pulumi.asset.FileAsset;\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 default_ = new Bucket(\"default\", BucketArgs.builder()\n .name(\"transcoder-job\")\n .location(\"US\")\n .forceDestroy(true)\n .uniformBucketLevelAccess(true)\n .publicAccessPrevention(\"enforced\")\n .build());\n\n var exampleMp4 = new BucketObject(\"exampleMp4\", BucketObjectArgs.builder()\n .name(\"example.mp4\")\n .source(new FileAsset(\"./test-fixtures/example.mp4\"))\n .bucket(default_.name())\n .build());\n\n var encryptionKey = new Secret(\"encryptionKey\", SecretArgs.builder()\n .secretId(\"transcoder-encryption-key\")\n .replication(SecretReplicationArgs.builder()\n .auto()\n .build())\n .build());\n\n var encryptionKeySecretVersion = new SecretVersion(\"encryptionKeySecretVersion\", SecretVersionArgs.builder()\n .secret(encryptionKey.name())\n .secretData(\"4A67F2C1B8E93A4F6D3E7890A1BC23DF\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n // this is required to allow the transcoder service identity to access the secret\n var transcoder = new ServiceIdentity(\"transcoder\", ServiceIdentityArgs.builder()\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .service(\"transcoder.googleapis.com\")\n .build());\n\n var transcoderEncryptionKeyAccessor = new SecretIamMember(\"transcoderEncryptionKeyAccessor\", SecretIamMemberArgs.builder()\n .secretId(encryptionKey.secretId())\n .project(encryptionKey.project())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(transcoder.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var defaultJob = new Job(\"defaultJob\", JobArgs.builder()\n .location(\"us-central1\")\n .config(JobConfigArgs.builder()\n .inputs(JobConfigInputArgs.builder()\n .key(\"input0\")\n .uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -\u003e {\n var defaultName = values.t1;\n var exampleMp4Name = values.t2;\n return String.format(\"gs://%s/%s\", defaultName,exampleMp4Name);\n }))\n .build())\n .elementaryStreams( \n JobConfigElementaryStreamArgs.builder()\n .key(\"es_video\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .profile(\"main\")\n .heightPixels(600)\n .widthPixels(800)\n .bitrateBps(1000000)\n .frameRate(60)\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"es_audio\")\n .audioStream(JobConfigElementaryStreamAudioStreamArgs.builder()\n .codec(\"aac\")\n .channelCount(2)\n .bitrateBps(160000)\n .build())\n .build())\n .encryptions( \n JobConfigEncryptionArgs.builder()\n .id(\"aes-128\")\n .secretManagerKeySource(JobConfigEncryptionSecretManagerKeySourceArgs.builder()\n .secretVersion(encryptionKeySecretVersion.name())\n .build())\n .drmSystems(JobConfigEncryptionDrmSystemsArgs.builder()\n .clearkey()\n .build())\n .aes128()\n .build(),\n JobConfigEncryptionArgs.builder()\n .id(\"cenc\")\n .secretManagerKeySource(JobConfigEncryptionSecretManagerKeySourceArgs.builder()\n .secretVersion(encryptionKeySecretVersion.name())\n .build())\n .drmSystems(JobConfigEncryptionDrmSystemsArgs.builder()\n .widevine()\n .build())\n .mpegCenc(JobConfigEncryptionMpegCencArgs.builder()\n .scheme(\"cenc\")\n .build())\n .build(),\n JobConfigEncryptionArgs.builder()\n .id(\"cbcs\")\n .secretManagerKeySource(JobConfigEncryptionSecretManagerKeySourceArgs.builder()\n .secretVersion(encryptionKeySecretVersion.name())\n .build())\n .drmSystems(JobConfigEncryptionDrmSystemsArgs.builder()\n .widevine()\n .build())\n .mpegCenc(JobConfigEncryptionMpegCencArgs.builder()\n .scheme(\"cbcs\")\n .build())\n .build())\n .muxStreams( \n JobConfigMuxStreamArgs.builder()\n .key(\"ts_aes128\")\n .container(\"ts\")\n .elementaryStreams( \n \"es_video\",\n \"es_audio\")\n .segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()\n .segmentDuration(\"6s\")\n .build())\n .encryptionId(\"aes-128\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"fmp4_cenc_video\")\n .container(\"fmp4\")\n .elementaryStreams(\"es_video\")\n .segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()\n .segmentDuration(\"6s\")\n .build())\n .encryptionId(\"cenc\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"fmp4_cenc_audio\")\n .container(\"fmp4\")\n .elementaryStreams(\"es_audio\")\n .segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()\n .segmentDuration(\"6s\")\n .build())\n .encryptionId(\"cenc\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"fmp4_cbcs_video\")\n .container(\"fmp4\")\n .elementaryStreams(\"es_video\")\n .segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()\n .segmentDuration(\"6s\")\n .build())\n .encryptionId(\"cbcs\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"fmp4_cbcs_audio\")\n .container(\"fmp4\")\n .elementaryStreams(\"es_audio\")\n .segmentSettings(JobConfigMuxStreamSegmentSettingsArgs.builder()\n .segmentDuration(\"6s\")\n .build())\n .encryptionId(\"cbcs\")\n .build())\n .manifests( \n JobConfigManifestArgs.builder()\n .fileName(\"manifest_aes128.m3u8\")\n .type(\"HLS\")\n .muxStreams(\"ts_aes128\")\n .build(),\n JobConfigManifestArgs.builder()\n .fileName(\"manifest_cenc.mpd\")\n .type(\"DASH\")\n .muxStreams( \n \"fmp4_cenc_video\",\n \"fmp4_cenc_audio\")\n .build(),\n JobConfigManifestArgs.builder()\n .fileName(\"manifest_cbcs.mpd\")\n .type(\"DASH\")\n .muxStreams( \n \"fmp4_cbcs_video\",\n \"fmp4_cbcs_audio\")\n .build())\n .output(JobConfigOutputArgs.builder()\n .uri(default_.name().applyValue(name -\u003e String.format(\"gs://%s/outputs/\", name)))\n .build())\n .build())\n .labels(Map.of(\"label\", \"key\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:storage:Bucket\n properties:\n name: transcoder-job\n location: US\n forceDestroy: true\n uniformBucketLevelAccess: true\n publicAccessPrevention: enforced\n exampleMp4:\n type: gcp:storage:BucketObject\n name: example_mp4\n properties:\n name: example.mp4\n source:\n fn::FileAsset: ./test-fixtures/example.mp4\n bucket: ${default.name}\n encryptionKey:\n type: gcp:secretmanager:Secret\n name: encryption_key\n properties:\n secretId: transcoder-encryption-key\n replication:\n auto: {}\n encryptionKeySecretVersion:\n type: gcp:secretmanager:SecretVersion\n name: encryption_key\n properties:\n secret: ${encryptionKey.name}\n secretData: 4A67F2C1B8E93A4F6D3E7890A1BC23DF\n # this is required to allow the transcoder service identity to access the secret\n transcoder:\n type: gcp:projects:ServiceIdentity\n properties:\n project: ${project.projectId}\n service: transcoder.googleapis.com\n transcoderEncryptionKeyAccessor:\n type: gcp:secretmanager:SecretIamMember\n name: transcoder_encryption_key_accessor\n properties:\n secretId: ${encryptionKey.secretId}\n project: ${encryptionKey.project}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${transcoder.email}\n defaultJob:\n type: gcp:transcoder:Job\n name: default\n properties:\n location: us-central1\n config:\n inputs:\n - key: input0\n uri: gs://${default.name}/${exampleMp4.name}\n elementaryStreams:\n - key: es_video\n videoStream:\n h264:\n profile: main\n heightPixels: 600\n widthPixels: 800\n bitrateBps: 1e+06\n frameRate: 60\n - key: es_audio\n audioStream:\n codec: aac\n channelCount: 2\n bitrateBps: 160000\n encryptions:\n - id: aes-128\n secretManagerKeySource:\n secretVersion: ${encryptionKeySecretVersion.name}\n drmSystems:\n clearkey: {}\n aes128: {}\n - id: cenc\n secretManagerKeySource:\n secretVersion: ${encryptionKeySecretVersion.name}\n drmSystems:\n widevine: {}\n mpegCenc:\n scheme: cenc\n - id: cbcs\n secretManagerKeySource:\n secretVersion: ${encryptionKeySecretVersion.name}\n drmSystems:\n widevine: {}\n mpegCenc:\n scheme: cbcs\n muxStreams:\n - key: ts_aes128\n container: ts\n elementaryStreams:\n - es_video\n - es_audio\n segmentSettings:\n segmentDuration: 6s\n encryptionId: aes-128\n - key: fmp4_cenc_video\n container: fmp4\n elementaryStreams:\n - es_video\n segmentSettings:\n segmentDuration: 6s\n encryptionId: cenc\n - key: fmp4_cenc_audio\n container: fmp4\n elementaryStreams:\n - es_audio\n segmentSettings:\n segmentDuration: 6s\n encryptionId: cenc\n - key: fmp4_cbcs_video\n container: fmp4\n elementaryStreams:\n - es_video\n segmentSettings:\n segmentDuration: 6s\n encryptionId: cbcs\n - key: fmp4_cbcs_audio\n container: fmp4\n elementaryStreams:\n - es_audio\n segmentSettings:\n segmentDuration: 6s\n encryptionId: cbcs\n manifests:\n - fileName: manifest_aes128.m3u8\n type: HLS\n muxStreams:\n - ts_aes128\n - fileName: manifest_cenc.mpd\n type: DASH\n muxStreams:\n - fmp4_cenc_video\n - fmp4_cenc_audio\n - fileName: manifest_cbcs.mpd\n type: DASH\n muxStreams:\n - fmp4_cbcs_video\n - fmp4_cbcs_audio\n output:\n uri: gs://${default.name}/outputs/\n labels:\n label: key\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Transcoder Job Overlays\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.storage.Bucket(\"default\", {\n name: \"transcoder-job\",\n location: \"US\",\n forceDestroy: true,\n uniformBucketLevelAccess: true,\n publicAccessPrevention: \"enforced\",\n});\nconst exampleMp4 = new gcp.storage.BucketObject(\"example_mp4\", {\n name: \"example.mp4\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket: _default.name,\n});\nconst overlayPng = new gcp.storage.BucketObject(\"overlay_png\", {\n name: \"overlay.png\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/overlay.png\"),\n bucket: _default.name,\n});\nconst defaultJob = new gcp.transcoder.Job(\"default\", {\n location: \"us-central1\",\n config: {\n inputs: [{\n key: \"input0\",\n uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,\n }],\n editLists: [{\n key: \"atom0\",\n inputs: [\"input0\"],\n startTimeOffset: \"0s\",\n }],\n adBreaks: [{\n startTimeOffset: \"3.500s\",\n }],\n overlays: [{\n animations: [{\n animationFade: {\n fadeType: \"FADE_IN\",\n startTimeOffset: \"1.500s\",\n endTimeOffset: \"3.500s\",\n xy: {\n x: 1,\n y: 0.5,\n },\n },\n }],\n image: {\n uri: pulumi.interpolate`gs://${_default.name}/${overlayPng.name}`,\n },\n }],\n elementaryStreams: [\n {\n key: \"video-stream0\",\n videoStream: {\n h264: {\n widthPixels: 640,\n heightPixels: 360,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 550000,\n vbvFullnessBits: 495000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"video-stream1\",\n videoStream: {\n h264: {\n widthPixels: 1280,\n heightPixels: 720,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 2500000,\n vbvFullnessBits: 2250000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"audio-stream0\",\n audioStream: {\n codec: \"aac\",\n bitrateBps: 64000,\n channelCount: 2,\n channelLayouts: [\n \"fl\",\n \"fr\",\n ],\n sampleRateHertz: 48000,\n },\n },\n ],\n muxStreams: [\n {\n key: \"sd\",\n fileName: \"sd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"hd\",\n fileName: \"hd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n ],\n output: {\n uri: pulumi.interpolate`gs://${_default.name}/outputs/`,\n },\n },\n labels: {\n label: \"key\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.storage.Bucket(\"default\",\n name=\"transcoder-job\",\n location=\"US\",\n force_destroy=True,\n uniform_bucket_level_access=True,\n public_access_prevention=\"enforced\")\nexample_mp4 = gcp.storage.BucketObject(\"example_mp4\",\n name=\"example.mp4\",\n source=pulumi.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket=default.name)\noverlay_png = gcp.storage.BucketObject(\"overlay_png\",\n name=\"overlay.png\",\n source=pulumi.FileAsset(\"./test-fixtures/overlay.png\"),\n bucket=default.name)\ndefault_job = gcp.transcoder.Job(\"default\",\n location=\"us-central1\",\n config={\n \"inputs\": [{\n \"key\": \"input0\",\n \"uri\": pulumi.Output.all(\n defaultName=default.name,\n exampleMp4Name=example_mp4.name\n).apply(lambda resolved_outputs: f\"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}\")\n,\n }],\n \"edit_lists\": [{\n \"key\": \"atom0\",\n \"inputs\": [\"input0\"],\n \"start_time_offset\": \"0s\",\n }],\n \"ad_breaks\": [{\n \"start_time_offset\": \"3.500s\",\n }],\n \"overlays\": [{\n \"animations\": [{\n \"animation_fade\": {\n \"fade_type\": \"FADE_IN\",\n \"start_time_offset\": \"1.500s\",\n \"end_time_offset\": \"3.500s\",\n \"xy\": {\n \"x\": 1,\n \"y\": 0.5,\n },\n },\n }],\n \"image\": {\n \"uri\": pulumi.Output.all(\n defaultName=default.name,\n overlayPngName=overlay_png.name\n).apply(lambda resolved_outputs: f\"gs://{resolved_outputs['defaultName']}/{resolved_outputs['overlayPngName']}\")\n,\n },\n }],\n \"elementary_streams\": [\n {\n \"key\": \"video-stream0\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 640,\n \"height_pixels\": 360,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 550000,\n \"vbv_fullness_bits\": 495000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"video-stream1\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 1280,\n \"height_pixels\": 720,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 2500000,\n \"vbv_fullness_bits\": 2250000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"audio-stream0\",\n \"audio_stream\": {\n \"codec\": \"aac\",\n \"bitrate_bps\": 64000,\n \"channel_count\": 2,\n \"channel_layouts\": [\n \"fl\",\n \"fr\",\n ],\n \"sample_rate_hertz\": 48000,\n },\n },\n ],\n \"mux_streams\": [\n {\n \"key\": \"sd\",\n \"file_name\": \"sd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"hd\",\n \"file_name\": \"hd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n ],\n \"output\": {\n \"uri\": default.name.apply(lambda name: f\"gs://{name}/outputs/\"),\n },\n },\n labels={\n \"label\": \"key\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"transcoder-job\",\n Location = \"US\",\n ForceDestroy = true,\n UniformBucketLevelAccess = true,\n PublicAccessPrevention = \"enforced\",\n });\n\n var exampleMp4 = new Gcp.Storage.BucketObject(\"example_mp4\", new()\n {\n Name = \"example.mp4\",\n Source = new FileAsset(\"./test-fixtures/example.mp4\"),\n Bucket = @default.Name,\n });\n\n var overlayPng = new Gcp.Storage.BucketObject(\"overlay_png\", new()\n {\n Name = \"overlay.png\",\n Source = new FileAsset(\"./test-fixtures/overlay.png\"),\n Bucket = @default.Name,\n });\n\n var defaultJob = new Gcp.Transcoder.Job(\"default\", new()\n {\n Location = \"us-central1\",\n Config = new Gcp.Transcoder.Inputs.JobConfigArgs\n {\n Inputs = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigInputArgs\n {\n Key = \"input0\",\n Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =\u003e\n {\n var defaultName = values.Item1;\n var exampleMp4Name = values.Item2;\n return $\"gs://{defaultName}/{exampleMp4Name}\";\n }),\n },\n },\n EditLists = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigEditListArgs\n {\n Key = \"atom0\",\n Inputs = new[]\n {\n \"input0\",\n },\n StartTimeOffset = \"0s\",\n },\n },\n AdBreaks = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigAdBreakArgs\n {\n StartTimeOffset = \"3.500s\",\n },\n },\n Overlays = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigOverlayArgs\n {\n Animations = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigOverlayAnimationArgs\n {\n AnimationFade = new Gcp.Transcoder.Inputs.JobConfigOverlayAnimationAnimationFadeArgs\n {\n FadeType = \"FADE_IN\",\n StartTimeOffset = \"1.500s\",\n EndTimeOffset = \"3.500s\",\n Xy = new Gcp.Transcoder.Inputs.JobConfigOverlayAnimationAnimationFadeXyArgs\n {\n X = 1,\n Y = 0.5,\n },\n },\n },\n },\n Image = new Gcp.Transcoder.Inputs.JobConfigOverlayImageArgs\n {\n Uri = Output.Tuple(@default.Name, overlayPng.Name).Apply(values =\u003e\n {\n var defaultName = values.Item1;\n var overlayPngName = values.Item2;\n return $\"gs://{defaultName}/{overlayPngName}\";\n }),\n },\n },\n },\n ElementaryStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"video-stream0\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 640,\n HeightPixels = 360,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 550000,\n VbvFullnessBits = 495000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"video-stream1\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 1280,\n HeightPixels = 720,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 2500000,\n VbvFullnessBits = 2250000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"audio-stream0\",\n AudioStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamAudioStreamArgs\n {\n Codec = \"aac\",\n BitrateBps = 64000,\n ChannelCount = 2,\n ChannelLayouts = new[]\n {\n \"fl\",\n \"fr\",\n },\n SampleRateHertz = 48000,\n },\n },\n },\n MuxStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"sd\",\n FileName = \"sd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream0\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"hd\",\n FileName = \"hd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream1\",\n \"audio-stream0\",\n },\n },\n },\n Output = new Gcp.Transcoder.Inputs.JobConfigOutputArgs\n {\n Uri = @default.Name.Apply(name =\u003e $\"gs://{name}/outputs/\"),\n },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"transcoder-job\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tPublicAccessPrevention: pulumi.String(\"enforced\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMp4, err := storage.NewBucketObject(ctx, \"example_mp4\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"example.mp4\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/example.mp4\"),\n\t\t\tBucket: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\toverlayPng, err := storage.NewBucketObject(ctx, \"overlay_png\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"overlay.png\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/overlay.png\"),\n\t\t\tBucket: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = transcoder.NewJob(ctx, \"default\", \u0026transcoder.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026transcoder.JobConfigArgs{\n\t\t\t\tInputs: transcoder.JobConfigInputTypeArray{\n\t\t\t\t\t\u0026transcoder.JobConfigInputTypeArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"input0\"),\n\t\t\t\t\t\tUri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tdefaultName := _args[0].(string)\n\t\t\t\t\t\t\texampleMp4Name := _args[1].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", defaultName, exampleMp4Name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEditLists: transcoder.JobConfigEditListArray{\n\t\t\t\t\t\u0026transcoder.JobConfigEditListArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"atom0\"),\n\t\t\t\t\t\tInputs: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"input0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"0s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAdBreaks: transcoder.JobConfigAdBreakArray{\n\t\t\t\t\t\u0026transcoder.JobConfigAdBreakArgs{\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"3.500s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tOverlays: transcoder.JobConfigOverlayArray{\n\t\t\t\t\t\u0026transcoder.JobConfigOverlayArgs{\n\t\t\t\t\t\tAnimations: transcoder.JobConfigOverlayAnimationArray{\n\t\t\t\t\t\t\t\u0026transcoder.JobConfigOverlayAnimationArgs{\n\t\t\t\t\t\t\t\tAnimationFade: \u0026transcoder.JobConfigOverlayAnimationAnimationFadeArgs{\n\t\t\t\t\t\t\t\t\tFadeType: pulumi.String(\"FADE_IN\"),\n\t\t\t\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"1.500s\"),\n\t\t\t\t\t\t\t\t\tEndTimeOffset: pulumi.String(\"3.500s\"),\n\t\t\t\t\t\t\t\t\tXy: \u0026transcoder.JobConfigOverlayAnimationAnimationFadeXyArgs{\n\t\t\t\t\t\t\t\t\t\tX: pulumi.Float64(1),\n\t\t\t\t\t\t\t\t\t\tY: pulumi.Float64(0.5),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tImage: \u0026transcoder.JobConfigOverlayImageArgs{\n\t\t\t\t\t\t\tUri: pulumi.All(_default.Name, overlayPng.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\t\tdefaultName := _args[0].(string)\n\t\t\t\t\t\t\t\toverlayPngName := _args[1].(string)\n\t\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", defaultName, overlayPngName), nil\n\t\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tElementaryStreams: transcoder.JobConfigElementaryStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream0\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(640),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(360),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(495000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream1\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(1280),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(720),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(2500000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(2250000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\tAudioStream: \u0026transcoder.JobConfigElementaryStreamAudioStreamArgs{\n\t\t\t\t\t\t\tCodec: pulumi.String(\"aac\"),\n\t\t\t\t\t\t\tBitrateBps: pulumi.Int(64000),\n\t\t\t\t\t\t\tChannelCount: pulumi.Int(2),\n\t\t\t\t\t\t\tChannelLayouts: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"fl\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"fr\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSampleRateHertz: pulumi.Int(48000),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMuxStreams: transcoder.JobConfigMuxStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"sd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"sd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream0\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"hd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"hd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream1\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tOutput: \u0026transcoder.JobConfigOutputTypeArgs{\n\t\t\t\t\tUri: _default.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/outputs/\", name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\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.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.transcoder.Job;\nimport com.pulumi.gcp.transcoder.JobArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigOutputArgs;\nimport com.pulumi.asset.FileAsset;\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 default_ = new Bucket(\"default\", BucketArgs.builder()\n .name(\"transcoder-job\")\n .location(\"US\")\n .forceDestroy(true)\n .uniformBucketLevelAccess(true)\n .publicAccessPrevention(\"enforced\")\n .build());\n\n var exampleMp4 = new BucketObject(\"exampleMp4\", BucketObjectArgs.builder()\n .name(\"example.mp4\")\n .source(new FileAsset(\"./test-fixtures/example.mp4\"))\n .bucket(default_.name())\n .build());\n\n var overlayPng = new BucketObject(\"overlayPng\", BucketObjectArgs.builder()\n .name(\"overlay.png\")\n .source(new FileAsset(\"./test-fixtures/overlay.png\"))\n .bucket(default_.name())\n .build());\n\n var defaultJob = new Job(\"defaultJob\", JobArgs.builder()\n .location(\"us-central1\")\n .config(JobConfigArgs.builder()\n .inputs(JobConfigInputArgs.builder()\n .key(\"input0\")\n .uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -\u003e {\n var defaultName = values.t1;\n var exampleMp4Name = values.t2;\n return String.format(\"gs://%s/%s\", defaultName,exampleMp4Name);\n }))\n .build())\n .editLists(JobConfigEditListArgs.builder()\n .key(\"atom0\")\n .inputs(\"input0\")\n .startTimeOffset(\"0s\")\n .build())\n .adBreaks(JobConfigAdBreakArgs.builder()\n .startTimeOffset(\"3.500s\")\n .build())\n .overlays(JobConfigOverlayArgs.builder()\n .animations(JobConfigOverlayAnimationArgs.builder()\n .animationFade(JobConfigOverlayAnimationAnimationFadeArgs.builder()\n .fadeType(\"FADE_IN\")\n .startTimeOffset(\"1.500s\")\n .endTimeOffset(\"3.500s\")\n .xy(JobConfigOverlayAnimationAnimationFadeXyArgs.builder()\n .x(1)\n .y(0.5)\n .build())\n .build())\n .build())\n .image(JobConfigOverlayImageArgs.builder()\n .uri(Output.tuple(default_.name(), overlayPng.name()).applyValue(values -\u003e {\n var defaultName = values.t1;\n var overlayPngName = values.t2;\n return String.format(\"gs://%s/%s\", defaultName,overlayPngName);\n }))\n .build())\n .build())\n .elementaryStreams( \n JobConfigElementaryStreamArgs.builder()\n .key(\"video-stream0\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(640)\n .heightPixels(360)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(550000)\n .vbvFullnessBits(495000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"video-stream1\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(1280)\n .heightPixels(720)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(2500000)\n .vbvFullnessBits(2250000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"audio-stream0\")\n .audioStream(JobConfigElementaryStreamAudioStreamArgs.builder()\n .codec(\"aac\")\n .bitrateBps(64000)\n .channelCount(2)\n .channelLayouts( \n \"fl\",\n \"fr\")\n .sampleRateHertz(48000)\n .build())\n .build())\n .muxStreams( \n JobConfigMuxStreamArgs.builder()\n .key(\"sd\")\n .fileName(\"sd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream0\",\n \"audio-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"hd\")\n .fileName(\"hd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream1\",\n \"audio-stream0\")\n .build())\n .output(JobConfigOutputArgs.builder()\n .uri(default_.name().applyValue(name -\u003e String.format(\"gs://%s/outputs/\", name)))\n .build())\n .build())\n .labels(Map.of(\"label\", \"key\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:storage:Bucket\n properties:\n name: transcoder-job\n location: US\n forceDestroy: true\n uniformBucketLevelAccess: true\n publicAccessPrevention: enforced\n exampleMp4:\n type: gcp:storage:BucketObject\n name: example_mp4\n properties:\n name: example.mp4\n source:\n fn::FileAsset: ./test-fixtures/example.mp4\n bucket: ${default.name}\n overlayPng:\n type: gcp:storage:BucketObject\n name: overlay_png\n properties:\n name: overlay.png\n source:\n fn::FileAsset: ./test-fixtures/overlay.png\n bucket: ${default.name}\n defaultJob:\n type: gcp:transcoder:Job\n name: default\n properties:\n location: us-central1\n config:\n inputs:\n - key: input0\n uri: gs://${default.name}/${exampleMp4.name}\n editLists:\n - key: atom0\n inputs:\n - input0\n startTimeOffset: 0s\n adBreaks:\n - startTimeOffset: 3.500s\n overlays:\n - animations:\n - animationFade:\n fadeType: FADE_IN\n startTimeOffset: 1.500s\n endTimeOffset: 3.500s\n xy:\n x: 1\n y: 0.5\n image:\n uri: gs://${default.name}/${overlayPng.name}\n elementaryStreams:\n - key: video-stream0\n videoStream:\n h264:\n widthPixels: 640\n heightPixels: 360\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 550000\n vbvFullnessBits: 495000\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: video-stream1\n videoStream:\n h264:\n widthPixels: 1280\n heightPixels: 720\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 2.5e+06\n vbvFullnessBits: 2.25e+06\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: audio-stream0\n audioStream:\n codec: aac\n bitrateBps: 64000\n channelCount: 2\n channelLayouts:\n - fl\n - fr\n sampleRateHertz: 48000\n muxStreams:\n - key: sd\n fileName: sd.mp4\n container: mp4\n elementaryStreams:\n - video-stream0\n - audio-stream0\n - key: hd\n fileName: hd.mp4\n container: mp4\n elementaryStreams:\n - video-stream1\n - audio-stream0\n output:\n uri: gs://${default.name}/outputs/\n labels:\n label: key\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Transcoder Job Manifests\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.storage.Bucket(\"default\", {\n name: \"transcoder-job\",\n location: \"US\",\n forceDestroy: true,\n uniformBucketLevelAccess: true,\n publicAccessPrevention: \"enforced\",\n});\nconst exampleMp4 = new gcp.storage.BucketObject(\"example_mp4\", {\n name: \"example.mp4\",\n source: new pulumi.asset.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket: _default.name,\n});\nconst defaultJob = new gcp.transcoder.Job(\"default\", {\n location: \"us-central1\",\n config: {\n inputs: [{\n key: \"input0\",\n uri: pulumi.interpolate`gs://${_default.name}/${exampleMp4.name}`,\n }],\n editLists: [{\n key: \"atom0\",\n startTimeOffset: \"0s\",\n inputs: [\"input0\"],\n }],\n adBreaks: [{\n startTimeOffset: \"3.500s\",\n }],\n elementaryStreams: [\n {\n key: \"video-stream0\",\n videoStream: {\n h264: {\n widthPixels: 640,\n heightPixels: 360,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 550000,\n vbvFullnessBits: 495000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"video-stream1\",\n videoStream: {\n h264: {\n widthPixels: 1280,\n heightPixels: 720,\n bitrateBps: 550000,\n frameRate: 60,\n pixelFormat: \"yuv420p\",\n rateControlMode: \"vbr\",\n crfLevel: 21,\n gopDuration: \"3s\",\n vbvSizeBits: 2500000,\n vbvFullnessBits: 2250000,\n entropyCoder: \"cabac\",\n profile: \"high\",\n preset: \"veryfast\",\n },\n },\n },\n {\n key: \"audio-stream0\",\n audioStream: {\n codec: \"aac\",\n bitrateBps: 64000,\n channelCount: 2,\n channelLayouts: [\n \"fl\",\n \"fr\",\n ],\n sampleRateHertz: 48000,\n },\n },\n ],\n muxStreams: [\n {\n key: \"sd\",\n fileName: \"sd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"hd\",\n fileName: \"hd.mp4\",\n container: \"mp4\",\n elementaryStreams: [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"media-sd\",\n fileName: \"media-sd.ts\",\n container: \"ts\",\n elementaryStreams: [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"media-hd\",\n fileName: \"media-hd.ts\",\n container: \"ts\",\n elementaryStreams: [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n {\n key: \"video-only-sd\",\n fileName: \"video-only-sd.m4s\",\n container: \"fmp4\",\n elementaryStreams: [\"video-stream0\"],\n },\n {\n key: \"video-only-hd\",\n fileName: \"video-only-hd.m4s\",\n container: \"fmp4\",\n elementaryStreams: [\"video-stream1\"],\n },\n {\n key: \"audio-only\",\n fileName: \"audio-only.m4s\",\n container: \"fmp4\",\n elementaryStreams: [\"audio-stream0\"],\n },\n ],\n manifests: [\n {\n fileName: \"manifest.m3u8\",\n type: \"HLS\",\n muxStreams: [\n \"media-sd\",\n \"media-hd\",\n ],\n },\n {\n fileName: \"manifest.mpd\",\n type: \"DASH\",\n muxStreams: [\n \"video-only-sd\",\n \"video-only-hd\",\n \"audio-only\",\n ],\n },\n ],\n output: {\n uri: pulumi.interpolate`gs://${_default.name}/outputs/`,\n },\n },\n labels: {\n label: \"key\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.storage.Bucket(\"default\",\n name=\"transcoder-job\",\n location=\"US\",\n force_destroy=True,\n uniform_bucket_level_access=True,\n public_access_prevention=\"enforced\")\nexample_mp4 = gcp.storage.BucketObject(\"example_mp4\",\n name=\"example.mp4\",\n source=pulumi.FileAsset(\"./test-fixtures/example.mp4\"),\n bucket=default.name)\ndefault_job = gcp.transcoder.Job(\"default\",\n location=\"us-central1\",\n config={\n \"inputs\": [{\n \"key\": \"input0\",\n \"uri\": pulumi.Output.all(\n defaultName=default.name,\n exampleMp4Name=example_mp4.name\n).apply(lambda resolved_outputs: f\"gs://{resolved_outputs['defaultName']}/{resolved_outputs['exampleMp4Name']}\")\n,\n }],\n \"edit_lists\": [{\n \"key\": \"atom0\",\n \"start_time_offset\": \"0s\",\n \"inputs\": [\"input0\"],\n }],\n \"ad_breaks\": [{\n \"start_time_offset\": \"3.500s\",\n }],\n \"elementary_streams\": [\n {\n \"key\": \"video-stream0\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 640,\n \"height_pixels\": 360,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 550000,\n \"vbv_fullness_bits\": 495000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"video-stream1\",\n \"video_stream\": {\n \"h264\": {\n \"width_pixels\": 1280,\n \"height_pixels\": 720,\n \"bitrate_bps\": 550000,\n \"frame_rate\": 60,\n \"pixel_format\": \"yuv420p\",\n \"rate_control_mode\": \"vbr\",\n \"crf_level\": 21,\n \"gop_duration\": \"3s\",\n \"vbv_size_bits\": 2500000,\n \"vbv_fullness_bits\": 2250000,\n \"entropy_coder\": \"cabac\",\n \"profile\": \"high\",\n \"preset\": \"veryfast\",\n },\n },\n },\n {\n \"key\": \"audio-stream0\",\n \"audio_stream\": {\n \"codec\": \"aac\",\n \"bitrate_bps\": 64000,\n \"channel_count\": 2,\n \"channel_layouts\": [\n \"fl\",\n \"fr\",\n ],\n \"sample_rate_hertz\": 48000,\n },\n },\n ],\n \"mux_streams\": [\n {\n \"key\": \"sd\",\n \"file_name\": \"sd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"hd\",\n \"file_name\": \"hd.mp4\",\n \"container\": \"mp4\",\n \"elementary_streams\": [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"media-sd\",\n \"file_name\": \"media-sd.ts\",\n \"container\": \"ts\",\n \"elementary_streams\": [\n \"video-stream0\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"media-hd\",\n \"file_name\": \"media-hd.ts\",\n \"container\": \"ts\",\n \"elementary_streams\": [\n \"video-stream1\",\n \"audio-stream0\",\n ],\n },\n {\n \"key\": \"video-only-sd\",\n \"file_name\": \"video-only-sd.m4s\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"video-stream0\"],\n },\n {\n \"key\": \"video-only-hd\",\n \"file_name\": \"video-only-hd.m4s\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"video-stream1\"],\n },\n {\n \"key\": \"audio-only\",\n \"file_name\": \"audio-only.m4s\",\n \"container\": \"fmp4\",\n \"elementary_streams\": [\"audio-stream0\"],\n },\n ],\n \"manifests\": [\n {\n \"file_name\": \"manifest.m3u8\",\n \"type\": \"HLS\",\n \"mux_streams\": [\n \"media-sd\",\n \"media-hd\",\n ],\n },\n {\n \"file_name\": \"manifest.mpd\",\n \"type\": \"DASH\",\n \"mux_streams\": [\n \"video-only-sd\",\n \"video-only-hd\",\n \"audio-only\",\n ],\n },\n ],\n \"output\": {\n \"uri\": default.name.apply(lambda name: f\"gs://{name}/outputs/\"),\n },\n },\n labels={\n \"label\": \"key\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Storage.Bucket(\"default\", new()\n {\n Name = \"transcoder-job\",\n Location = \"US\",\n ForceDestroy = true,\n UniformBucketLevelAccess = true,\n PublicAccessPrevention = \"enforced\",\n });\n\n var exampleMp4 = new Gcp.Storage.BucketObject(\"example_mp4\", new()\n {\n Name = \"example.mp4\",\n Source = new FileAsset(\"./test-fixtures/example.mp4\"),\n Bucket = @default.Name,\n });\n\n var defaultJob = new Gcp.Transcoder.Job(\"default\", new()\n {\n Location = \"us-central1\",\n Config = new Gcp.Transcoder.Inputs.JobConfigArgs\n {\n Inputs = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigInputArgs\n {\n Key = \"input0\",\n Uri = Output.Tuple(@default.Name, exampleMp4.Name).Apply(values =\u003e\n {\n var defaultName = values.Item1;\n var exampleMp4Name = values.Item2;\n return $\"gs://{defaultName}/{exampleMp4Name}\";\n }),\n },\n },\n EditLists = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigEditListArgs\n {\n Key = \"atom0\",\n StartTimeOffset = \"0s\",\n Inputs = new[]\n {\n \"input0\",\n },\n },\n },\n AdBreaks = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigAdBreakArgs\n {\n StartTimeOffset = \"3.500s\",\n },\n },\n ElementaryStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"video-stream0\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 640,\n HeightPixels = 360,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 550000,\n VbvFullnessBits = 495000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"video-stream1\",\n VideoStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamArgs\n {\n H264 = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamVideoStreamH264Args\n {\n WidthPixels = 1280,\n HeightPixels = 720,\n BitrateBps = 550000,\n FrameRate = 60,\n PixelFormat = \"yuv420p\",\n RateControlMode = \"vbr\",\n CrfLevel = 21,\n GopDuration = \"3s\",\n VbvSizeBits = 2500000,\n VbvFullnessBits = 2250000,\n EntropyCoder = \"cabac\",\n Profile = \"high\",\n Preset = \"veryfast\",\n },\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigElementaryStreamArgs\n {\n Key = \"audio-stream0\",\n AudioStream = new Gcp.Transcoder.Inputs.JobConfigElementaryStreamAudioStreamArgs\n {\n Codec = \"aac\",\n BitrateBps = 64000,\n ChannelCount = 2,\n ChannelLayouts = new[]\n {\n \"fl\",\n \"fr\",\n },\n SampleRateHertz = 48000,\n },\n },\n },\n MuxStreams = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"sd\",\n FileName = \"sd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream0\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"hd\",\n FileName = \"hd.mp4\",\n Container = \"mp4\",\n ElementaryStreams = new[]\n {\n \"video-stream1\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"media-sd\",\n FileName = \"media-sd.ts\",\n Container = \"ts\",\n ElementaryStreams = new[]\n {\n \"video-stream0\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"media-hd\",\n FileName = \"media-hd.ts\",\n Container = \"ts\",\n ElementaryStreams = new[]\n {\n \"video-stream1\",\n \"audio-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"video-only-sd\",\n FileName = \"video-only-sd.m4s\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"video-stream0\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"video-only-hd\",\n FileName = \"video-only-hd.m4s\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"video-stream1\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigMuxStreamArgs\n {\n Key = \"audio-only\",\n FileName = \"audio-only.m4s\",\n Container = \"fmp4\",\n ElementaryStreams = new[]\n {\n \"audio-stream0\",\n },\n },\n },\n Manifests = new[]\n {\n new Gcp.Transcoder.Inputs.JobConfigManifestArgs\n {\n FileName = \"manifest.m3u8\",\n Type = \"HLS\",\n MuxStreams = new[]\n {\n \"media-sd\",\n \"media-hd\",\n },\n },\n new Gcp.Transcoder.Inputs.JobConfigManifestArgs\n {\n FileName = \"manifest.mpd\",\n Type = \"DASH\",\n MuxStreams = new[]\n {\n \"video-only-sd\",\n \"video-only-hd\",\n \"audio-only\",\n },\n },\n },\n Output = new Gcp.Transcoder.Inputs.JobConfigOutputArgs\n {\n Uri = @default.Name.Apply(name =\u003e $\"gs://{name}/outputs/\"),\n },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/transcoder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := storage.NewBucket(ctx, \"default\", \u0026storage.BucketArgs{\n\t\t\tName: pulumi.String(\"transcoder-job\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tForceDestroy: pulumi.Bool(true),\n\t\t\tUniformBucketLevelAccess: pulumi.Bool(true),\n\t\t\tPublicAccessPrevention: pulumi.String(\"enforced\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleMp4, err := storage.NewBucketObject(ctx, \"example_mp4\", \u0026storage.BucketObjectArgs{\n\t\t\tName: pulumi.String(\"example.mp4\"),\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/example.mp4\"),\n\t\t\tBucket: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = transcoder.NewJob(ctx, \"default\", \u0026transcoder.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026transcoder.JobConfigArgs{\n\t\t\t\tInputs: transcoder.JobConfigInputTypeArray{\n\t\t\t\t\t\u0026transcoder.JobConfigInputTypeArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"input0\"),\n\t\t\t\t\t\tUri: pulumi.All(_default.Name, exampleMp4.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tdefaultName := _args[0].(string)\n\t\t\t\t\t\t\texampleMp4Name := _args[1].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/%v\", defaultName, exampleMp4Name), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tEditLists: transcoder.JobConfigEditListArray{\n\t\t\t\t\t\u0026transcoder.JobConfigEditListArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"atom0\"),\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"0s\"),\n\t\t\t\t\t\tInputs: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"input0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAdBreaks: transcoder.JobConfigAdBreakArray{\n\t\t\t\t\t\u0026transcoder.JobConfigAdBreakArgs{\n\t\t\t\t\t\tStartTimeOffset: pulumi.String(\"3.500s\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tElementaryStreams: transcoder.JobConfigElementaryStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream0\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(640),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(360),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(495000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-stream1\"),\n\t\t\t\t\t\tVideoStream: \u0026transcoder.JobConfigElementaryStreamVideoStreamArgs{\n\t\t\t\t\t\t\tH264: \u0026transcoder.JobConfigElementaryStreamVideoStreamH264Args{\n\t\t\t\t\t\t\t\tWidthPixels: pulumi.Int(1280),\n\t\t\t\t\t\t\t\tHeightPixels: pulumi.Int(720),\n\t\t\t\t\t\t\t\tBitrateBps: pulumi.Int(550000),\n\t\t\t\t\t\t\t\tFrameRate: pulumi.Int(60),\n\t\t\t\t\t\t\t\tPixelFormat: pulumi.String(\"yuv420p\"),\n\t\t\t\t\t\t\t\tRateControlMode: pulumi.String(\"vbr\"),\n\t\t\t\t\t\t\t\tCrfLevel: pulumi.Int(21),\n\t\t\t\t\t\t\t\tGopDuration: pulumi.String(\"3s\"),\n\t\t\t\t\t\t\t\tVbvSizeBits: pulumi.Int(2500000),\n\t\t\t\t\t\t\t\tVbvFullnessBits: pulumi.Int(2250000),\n\t\t\t\t\t\t\t\tEntropyCoder: pulumi.String(\"cabac\"),\n\t\t\t\t\t\t\t\tProfile: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t\tPreset: pulumi.String(\"veryfast\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigElementaryStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\tAudioStream: \u0026transcoder.JobConfigElementaryStreamAudioStreamArgs{\n\t\t\t\t\t\t\tCodec: pulumi.String(\"aac\"),\n\t\t\t\t\t\t\tBitrateBps: pulumi.Int(64000),\n\t\t\t\t\t\t\tChannelCount: pulumi.Int(2),\n\t\t\t\t\t\t\tChannelLayouts: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"fl\"),\n\t\t\t\t\t\t\t\tpulumi.String(\"fr\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tSampleRateHertz: pulumi.Int(48000),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMuxStreams: transcoder.JobConfigMuxStreamArray{\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"sd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"sd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream0\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"hd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"hd.mp4\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"mp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream1\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"media-sd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"media-sd.ts\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"ts\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream0\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"media-hd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"media-hd.ts\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"ts\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream1\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-only-sd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"video-only-sd.m4s\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"video-only-hd\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"video-only-hd.m4s\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-stream1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigMuxStreamArgs{\n\t\t\t\t\t\tKey: pulumi.String(\"audio-only\"),\n\t\t\t\t\t\tFileName: pulumi.String(\"audio-only.m4s\"),\n\t\t\t\t\t\tContainer: pulumi.String(\"fmp4\"),\n\t\t\t\t\t\tElementaryStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"audio-stream0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tManifests: transcoder.JobConfigManifestArray{\n\t\t\t\t\t\u0026transcoder.JobConfigManifestArgs{\n\t\t\t\t\t\tFileName: pulumi.String(\"manifest.m3u8\"),\n\t\t\t\t\t\tType: pulumi.String(\"HLS\"),\n\t\t\t\t\t\tMuxStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"media-sd\"),\n\t\t\t\t\t\t\tpulumi.String(\"media-hd\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026transcoder.JobConfigManifestArgs{\n\t\t\t\t\t\tFileName: pulumi.String(\"manifest.mpd\"),\n\t\t\t\t\t\tType: pulumi.String(\"DASH\"),\n\t\t\t\t\t\tMuxStreams: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"video-only-sd\"),\n\t\t\t\t\t\t\tpulumi.String(\"video-only-hd\"),\n\t\t\t\t\t\t\tpulumi.String(\"audio-only\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tOutput: \u0026transcoder.JobConfigOutputTypeArgs{\n\t\t\t\t\tUri: _default.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"gs://%v/outputs/\", name), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\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.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.transcoder.Job;\nimport com.pulumi.gcp.transcoder.JobArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigArgs;\nimport com.pulumi.gcp.transcoder.inputs.JobConfigOutputArgs;\nimport com.pulumi.asset.FileAsset;\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 default_ = new Bucket(\"default\", BucketArgs.builder()\n .name(\"transcoder-job\")\n .location(\"US\")\n .forceDestroy(true)\n .uniformBucketLevelAccess(true)\n .publicAccessPrevention(\"enforced\")\n .build());\n\n var exampleMp4 = new BucketObject(\"exampleMp4\", BucketObjectArgs.builder()\n .name(\"example.mp4\")\n .source(new FileAsset(\"./test-fixtures/example.mp4\"))\n .bucket(default_.name())\n .build());\n\n var defaultJob = new Job(\"defaultJob\", JobArgs.builder()\n .location(\"us-central1\")\n .config(JobConfigArgs.builder()\n .inputs(JobConfigInputArgs.builder()\n .key(\"input0\")\n .uri(Output.tuple(default_.name(), exampleMp4.name()).applyValue(values -\u003e {\n var defaultName = values.t1;\n var exampleMp4Name = values.t2;\n return String.format(\"gs://%s/%s\", defaultName,exampleMp4Name);\n }))\n .build())\n .editLists(JobConfigEditListArgs.builder()\n .key(\"atom0\")\n .startTimeOffset(\"0s\")\n .inputs(\"input0\")\n .build())\n .adBreaks(JobConfigAdBreakArgs.builder()\n .startTimeOffset(\"3.500s\")\n .build())\n .elementaryStreams( \n JobConfigElementaryStreamArgs.builder()\n .key(\"video-stream0\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(640)\n .heightPixels(360)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(550000)\n .vbvFullnessBits(495000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"video-stream1\")\n .videoStream(JobConfigElementaryStreamVideoStreamArgs.builder()\n .h264(JobConfigElementaryStreamVideoStreamH264Args.builder()\n .widthPixels(1280)\n .heightPixels(720)\n .bitrateBps(550000)\n .frameRate(60)\n .pixelFormat(\"yuv420p\")\n .rateControlMode(\"vbr\")\n .crfLevel(21)\n .gopDuration(\"3s\")\n .vbvSizeBits(2500000)\n .vbvFullnessBits(2250000)\n .entropyCoder(\"cabac\")\n .profile(\"high\")\n .preset(\"veryfast\")\n .build())\n .build())\n .build(),\n JobConfigElementaryStreamArgs.builder()\n .key(\"audio-stream0\")\n .audioStream(JobConfigElementaryStreamAudioStreamArgs.builder()\n .codec(\"aac\")\n .bitrateBps(64000)\n .channelCount(2)\n .channelLayouts( \n \"fl\",\n \"fr\")\n .sampleRateHertz(48000)\n .build())\n .build())\n .muxStreams( \n JobConfigMuxStreamArgs.builder()\n .key(\"sd\")\n .fileName(\"sd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream0\",\n \"audio-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"hd\")\n .fileName(\"hd.mp4\")\n .container(\"mp4\")\n .elementaryStreams( \n \"video-stream1\",\n \"audio-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"media-sd\")\n .fileName(\"media-sd.ts\")\n .container(\"ts\")\n .elementaryStreams( \n \"video-stream0\",\n \"audio-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"media-hd\")\n .fileName(\"media-hd.ts\")\n .container(\"ts\")\n .elementaryStreams( \n \"video-stream1\",\n \"audio-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"video-only-sd\")\n .fileName(\"video-only-sd.m4s\")\n .container(\"fmp4\")\n .elementaryStreams(\"video-stream0\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"video-only-hd\")\n .fileName(\"video-only-hd.m4s\")\n .container(\"fmp4\")\n .elementaryStreams(\"video-stream1\")\n .build(),\n JobConfigMuxStreamArgs.builder()\n .key(\"audio-only\")\n .fileName(\"audio-only.m4s\")\n .container(\"fmp4\")\n .elementaryStreams(\"audio-stream0\")\n .build())\n .manifests( \n JobConfigManifestArgs.builder()\n .fileName(\"manifest.m3u8\")\n .type(\"HLS\")\n .muxStreams( \n \"media-sd\",\n \"media-hd\")\n .build(),\n JobConfigManifestArgs.builder()\n .fileName(\"manifest.mpd\")\n .type(\"DASH\")\n .muxStreams( \n \"video-only-sd\",\n \"video-only-hd\",\n \"audio-only\")\n .build())\n .output(JobConfigOutputArgs.builder()\n .uri(default_.name().applyValue(name -\u003e String.format(\"gs://%s/outputs/\", name)))\n .build())\n .build())\n .labels(Map.of(\"label\", \"key\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:storage:Bucket\n properties:\n name: transcoder-job\n location: US\n forceDestroy: true\n uniformBucketLevelAccess: true\n publicAccessPrevention: enforced\n exampleMp4:\n type: gcp:storage:BucketObject\n name: example_mp4\n properties:\n name: example.mp4\n source:\n fn::FileAsset: ./test-fixtures/example.mp4\n bucket: ${default.name}\n defaultJob:\n type: gcp:transcoder:Job\n name: default\n properties:\n location: us-central1\n config:\n inputs:\n - key: input0\n uri: gs://${default.name}/${exampleMp4.name}\n editLists:\n - key: atom0\n startTimeOffset: 0s\n inputs:\n - input0\n adBreaks:\n - startTimeOffset: 3.500s\n elementaryStreams:\n - key: video-stream0\n videoStream:\n h264:\n widthPixels: 640\n heightPixels: 360\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 550000\n vbvFullnessBits: 495000\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: video-stream1\n videoStream:\n h264:\n widthPixels: 1280\n heightPixels: 720\n bitrateBps: 550000\n frameRate: 60\n pixelFormat: yuv420p\n rateControlMode: vbr\n crfLevel: 21\n gopDuration: 3s\n vbvSizeBits: 2.5e+06\n vbvFullnessBits: 2.25e+06\n entropyCoder: cabac\n profile: high\n preset: veryfast\n - key: audio-stream0\n audioStream:\n codec: aac\n bitrateBps: 64000\n channelCount: 2\n channelLayouts:\n - fl\n - fr\n sampleRateHertz: 48000\n muxStreams:\n - key: sd\n fileName: sd.mp4\n container: mp4\n elementaryStreams:\n - video-stream0\n - audio-stream0\n - key: hd\n fileName: hd.mp4\n container: mp4\n elementaryStreams:\n - video-stream1\n - audio-stream0\n - key: media-sd\n fileName: media-sd.ts\n container: ts\n elementaryStreams:\n - video-stream0\n - audio-stream0\n - key: media-hd\n fileName: media-hd.ts\n container: ts\n elementaryStreams:\n - video-stream1\n - audio-stream0\n - key: video-only-sd\n fileName: video-only-sd.m4s\n container: fmp4\n elementaryStreams:\n - video-stream0\n - key: video-only-hd\n fileName: video-only-hd.m4s\n container: fmp4\n elementaryStreams:\n - video-stream1\n - key: audio-only\n fileName: audio-only.m4s\n container: fmp4\n elementaryStreams:\n - audio-stream0\n manifests:\n - fileName: manifest.m3u8\n type: HLS\n muxStreams:\n - media-sd\n - media-hd\n - fileName: manifest.mpd\n type: DASH\n muxStreams:\n - video-only-sd\n - video-only-hd\n - audio-only\n output:\n uri: gs://${default.name}/outputs/\n labels:\n label: key\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nJob can be imported using any of these accepted formats:\n\n* `{{project}}/{{name}}`\n\n* `{{project}} {{name}}`\n\n* `{{name}}`\n\nWhen using the `pulumi import` command, Job can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:transcoder/job:Job default {{project}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:transcoder/job:Job default \"{{project}} {{name}}\"\n```\n\n```sh\n$ pulumi import gcp:transcoder/job:Job default {{name}}\n```\n\n", "properties": { "config": { "$ref": "#/types/gcp:transcoder/JobConfig:JobConfig", @@ -266917,12 +270129,20 @@ } }, "gcp:vertex/aiEndpoint:AiEndpoint": { - "description": "Models are deployed into it, and afterwards Endpoint is called to obtain predictions and explanations.\n\n\nTo get more information about Endpoint, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1beta1/projects.locations.endpoints)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/vertex-ai/docs)\n\n## Example Usage\n\n### Vertex Ai Endpoint Network\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vertexNetwork = new gcp.compute.Network(\"vertex_network\", {name: \"network-name\"});\nconst vertexRange = new gcp.compute.GlobalAddress(\"vertex_range\", {\n name: \"address-name\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 24,\n network: vertexNetwork.id,\n});\nconst vertexVpcConnection = new gcp.servicenetworking.Connection(\"vertex_vpc_connection\", {\n network: vertexNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [vertexRange.name],\n});\nconst project = gcp.organizations.getProject({});\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n network: pulumi.all([project, vertexNetwork.name]).apply(([project, name]) =\u003e `projects/${project.number}/global/networks/${name}`),\n encryptionSpec: {\n kmsKeyName: \"kms-name\",\n },\n}, {\n dependsOn: [vertexVpcConnection],\n});\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"crypto_key\", {\n cryptoKeyId: \"kms-name\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nvertex_network = gcp.compute.Network(\"vertex_network\", name=\"network-name\")\nvertex_range = gcp.compute.GlobalAddress(\"vertex_range\",\n name=\"address-name\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=24,\n network=vertex_network.id)\nvertex_vpc_connection = gcp.servicenetworking.Connection(\"vertex_vpc_connection\",\n network=vertex_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[vertex_range.name])\nproject = gcp.organizations.get_project()\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n network=vertex_network.name.apply(lambda name: f\"projects/{project.number}/global/networks/{name}\"),\n encryption_spec={\n \"kms_key_name\": \"kms-name\",\n },\n opts = pulumi.ResourceOptions(depends_on=[vertex_vpc_connection]))\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"crypto_key\",\n crypto_key_id=\"kms-name\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vertexNetwork = new Gcp.Compute.Network(\"vertex_network\", new()\n {\n Name = \"network-name\",\n });\n\n var vertexRange = new Gcp.Compute.GlobalAddress(\"vertex_range\", new()\n {\n Name = \"address-name\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 24,\n Network = vertexNetwork.Id,\n });\n\n var vertexVpcConnection = new Gcp.ServiceNetworking.Connection(\"vertex_vpc_connection\", new()\n {\n Network = vertexNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n vertexRange.Name,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Network = Output.Tuple(project, vertexNetwork.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/global/networks/{name}\";\n }),\n EncryptionSpec = new Gcp.Vertex.Inputs.AiEndpointEncryptionSpecArgs\n {\n KmsKeyName = \"kms-name\",\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexVpcConnection,\n },\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key\", new()\n {\n CryptoKeyId = \"kms-name\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-aiplatform.iam.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tvertexNetwork, err := compute.NewNetwork(ctx, \"vertex_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexRange, err := compute.NewGlobalAddress(ctx, \"vertex_range\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"address-name\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(24),\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexVpcConnection, err := servicenetworking.NewConnection(ctx, \"vertex_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tvertexRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tNetwork: vertexNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/global/networks/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tEncryptionSpec: \u0026vertex.AiEndpointEncryptionSpecArgs{\n\t\t\t\tKmsKeyName: pulumi.String(\"kms-name\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewCryptoKeyIAMMember(ctx, \"crypto_key\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"kms-name\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-aiplatform.iam.gserviceaccount.com\", project.Number),\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointEncryptionSpecArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.resources.CustomResourceOptions;\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 vertexNetwork = new Network(\"vertexNetwork\", NetworkArgs.builder()\n .name(\"network-name\")\n .build());\n\n var vertexRange = new GlobalAddress(\"vertexRange\", GlobalAddressArgs.builder()\n .name(\"address-name\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(24)\n .network(vertexNetwork.id())\n .build());\n\n var vertexVpcConnection = new Connection(\"vertexVpcConnection\", ConnectionArgs.builder()\n .network(vertexNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(vertexRange.name())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .network(vertexNetwork.name().applyValue(name -\u003e String.format(\"projects/%s/global/networks/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .encryptionSpec(AiEndpointEncryptionSpecArgs.builder()\n .kmsKeyName(\"kms-name\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexVpcConnection)\n .build());\n\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"kms-name\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-aiplatform.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n network: projects/${project.number}/global/networks/${vertexNetwork.name}\n encryptionSpec:\n kmsKeyName: kms-name\n options:\n dependson:\n - ${vertexVpcConnection}\n vertexVpcConnection:\n type: gcp:servicenetworking:Connection\n name: vertex_vpc_connection\n properties:\n network: ${vertexNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${vertexRange.name}\n vertexRange:\n type: gcp:compute:GlobalAddress\n name: vertex_range\n properties:\n name: address-name\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 24\n network: ${vertexNetwork.id}\n vertexNetwork:\n type: gcp:compute:Network\n name: vertex_network\n properties:\n name: network-name\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key\n properties:\n cryptoKeyId: kms-name\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nEndpoint can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/endpoints/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Endpoint can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default projects/{{project}}/locations/{{location}}/endpoints/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default {{location}}/{{name}}\n```\n\n", + "description": "Models are deployed into it, and afterwards Endpoint is called to obtain predictions and explanations.\n\n\nTo get more information about Endpoint, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1beta1/projects.locations.endpoints)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/vertex-ai/docs)\n\n## Example Usage\n\n### Vertex Ai Endpoint Network\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vertexNetwork = new gcp.compute.Network(\"vertex_network\", {name: \"network-name\"});\nconst vertexRange = new gcp.compute.GlobalAddress(\"vertex_range\", {\n name: \"address-name\",\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 24,\n network: vertexNetwork.id,\n});\nconst vertexVpcConnection = new gcp.servicenetworking.Connection(\"vertex_vpc_connection\", {\n network: vertexNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [vertexRange.name],\n});\nconst bqDataset = new gcp.bigquery.Dataset(\"bq_dataset\", {\n datasetId: \"some_dataset\",\n friendlyName: \"logging dataset\",\n description: \"This is a dataset that requests are logged to\",\n location: \"US\",\n deleteContentsOnDestroy: true,\n});\nconst project = gcp.organizations.getProject({});\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n network: pulumi.all([project, vertexNetwork.name]).apply(([project, name]) =\u003e `projects/${project.number}/global/networks/${name}`),\n encryptionSpec: {\n kmsKeyName: \"kms-name\",\n },\n predictRequestResponseLoggingConfig: {\n bigqueryDestination: {\n outputUri: pulumi.all([project, bqDataset.datasetId]).apply(([project, datasetId]) =\u003e `bq://${project.projectId}.${datasetId}.request_response_logging`),\n },\n enabled: true,\n samplingRate: 0.1,\n },\n trafficSplit: JSON.stringify({\n \"12345\": 100,\n }),\n}, {\n dependsOn: [vertexVpcConnection],\n});\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"crypto_key\", {\n cryptoKeyId: \"kms-name\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com`),\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\nvertex_network = gcp.compute.Network(\"vertex_network\", name=\"network-name\")\nvertex_range = gcp.compute.GlobalAddress(\"vertex_range\",\n name=\"address-name\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=24,\n network=vertex_network.id)\nvertex_vpc_connection = gcp.servicenetworking.Connection(\"vertex_vpc_connection\",\n network=vertex_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[vertex_range.name])\nbq_dataset = gcp.bigquery.Dataset(\"bq_dataset\",\n dataset_id=\"some_dataset\",\n friendly_name=\"logging dataset\",\n description=\"This is a dataset that requests are logged to\",\n location=\"US\",\n delete_contents_on_destroy=True)\nproject = gcp.organizations.get_project()\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n network=vertex_network.name.apply(lambda name: f\"projects/{project.number}/global/networks/{name}\"),\n encryption_spec={\n \"kms_key_name\": \"kms-name\",\n },\n predict_request_response_logging_config={\n \"bigquery_destination\": {\n \"output_uri\": bq_dataset.dataset_id.apply(lambda dataset_id: f\"bq://{project.project_id}.{dataset_id}.request_response_logging\"),\n },\n \"enabled\": True,\n \"sampling_rate\": 0.1,\n },\n traffic_split=json.dumps({\n \"12345\": 100,\n }),\n opts = pulumi.ResourceOptions(depends_on=[vertex_vpc_connection]))\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"crypto_key\",\n crypto_key_id=\"kms-name\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vertexNetwork = new Gcp.Compute.Network(\"vertex_network\", new()\n {\n Name = \"network-name\",\n });\n\n var vertexRange = new Gcp.Compute.GlobalAddress(\"vertex_range\", new()\n {\n Name = \"address-name\",\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 24,\n Network = vertexNetwork.Id,\n });\n\n var vertexVpcConnection = new Gcp.ServiceNetworking.Connection(\"vertex_vpc_connection\", new()\n {\n Network = vertexNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n vertexRange.Name,\n },\n });\n\n var bqDataset = new Gcp.BigQuery.Dataset(\"bq_dataset\", new()\n {\n DatasetId = \"some_dataset\",\n FriendlyName = \"logging dataset\",\n Description = \"This is a dataset that requests are logged to\",\n Location = \"US\",\n DeleteContentsOnDestroy = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Network = Output.Tuple(project, vertexNetwork.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/global/networks/{name}\";\n }),\n EncryptionSpec = new Gcp.Vertex.Inputs.AiEndpointEncryptionSpecArgs\n {\n KmsKeyName = \"kms-name\",\n },\n PredictRequestResponseLoggingConfig = new Gcp.Vertex.Inputs.AiEndpointPredictRequestResponseLoggingConfigArgs\n {\n BigqueryDestination = new Gcp.Vertex.Inputs.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs\n {\n OutputUri = Output.Tuple(project, bqDataset.DatasetId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n return $\"bq://{project.Apply(getProjectResult =\u003e getProjectResult.ProjectId)}.{datasetId}.request_response_logging\";\n }),\n },\n Enabled = true,\n SamplingRate = 0.1,\n },\n TrafficSplit = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"12345\"] = 100,\n }),\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexVpcConnection,\n },\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"crypto_key\", new()\n {\n CryptoKeyId = \"kms-name\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-aiplatform.iam.gserviceaccount.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tvertexNetwork, err := compute.NewNetwork(ctx, \"vertex_network\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"network-name\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexRange, err := compute.NewGlobalAddress(ctx, \"vertex_range\", \u0026compute.GlobalAddressArgs{\n\t\t\tName: pulumi.String(\"address-name\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(24),\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexVpcConnection, err := servicenetworking.NewConnection(ctx, \"vertex_vpc_connection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: vertexNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tvertexRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqDataset, err := bigquery.NewDataset(ctx, \"bq_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"some_dataset\"),\n\t\t\tFriendlyName: pulumi.String(\"logging dataset\"),\n\t\t\tDescription: pulumi.String(\"This is a dataset that requests are logged to\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tDeleteContentsOnDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"12345\": 100,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tNetwork: vertexNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/global/networks/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tEncryptionSpec: \u0026vertex.AiEndpointEncryptionSpecArgs{\n\t\t\t\tKmsKeyName: pulumi.String(\"kms-name\"),\n\t\t\t},\n\t\t\tPredictRequestResponseLoggingConfig: \u0026vertex.AiEndpointPredictRequestResponseLoggingConfigArgs{\n\t\t\t\tBigqueryDestination: \u0026vertex.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs{\n\t\t\t\t\tOutputUri: bqDataset.DatasetId.ApplyT(func(datasetId string) (string, error) {\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.request_response_logging\", project.ProjectId, datasetId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tSamplingRate: pulumi.Float64(0.1),\n\t\t\t},\n\t\t\tTrafficSplit: pulumi.String(json0),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewCryptoKeyIAMMember(ctx, \"crypto_key\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"kms-name\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.Sprintf(\"serviceAccount:service-%v@gcp-sa-aiplatform.iam.gserviceaccount.com\", project.Number),\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointEncryptionSpecArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPredictRequestResponseLoggingConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport com.pulumi.resources.CustomResourceOptions;\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 vertexNetwork = new Network(\"vertexNetwork\", NetworkArgs.builder()\n .name(\"network-name\")\n .build());\n\n var vertexRange = new GlobalAddress(\"vertexRange\", GlobalAddressArgs.builder()\n .name(\"address-name\")\n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(24)\n .network(vertexNetwork.id())\n .build());\n\n var vertexVpcConnection = new Connection(\"vertexVpcConnection\", ConnectionArgs.builder()\n .network(vertexNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(vertexRange.name())\n .build());\n\n var bqDataset = new Dataset(\"bqDataset\", DatasetArgs.builder()\n .datasetId(\"some_dataset\")\n .friendlyName(\"logging dataset\")\n .description(\"This is a dataset that requests are logged to\")\n .location(\"US\")\n .deleteContentsOnDestroy(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .network(vertexNetwork.name().applyValue(name -\u003e String.format(\"projects/%s/global/networks/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .encryptionSpec(AiEndpointEncryptionSpecArgs.builder()\n .kmsKeyName(\"kms-name\")\n .build())\n .predictRequestResponseLoggingConfig(AiEndpointPredictRequestResponseLoggingConfigArgs.builder()\n .bigqueryDestination(AiEndpointPredictRequestResponseLoggingConfigBigqueryDestinationArgs.builder()\n .outputUri(bqDataset.datasetId().applyValue(datasetId -\u003e String.format(\"bq://%s.%s.request_response_logging\", project.applyValue(getProjectResult -\u003e getProjectResult.projectId()),datasetId)))\n .build())\n .enabled(true)\n .samplingRate(0.1)\n .build())\n .trafficSplit(serializeJson(\n jsonObject(\n jsonProperty(\"12345\", 100)\n )))\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexVpcConnection)\n .build());\n\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder()\n .cryptoKeyId(\"kms-name\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-aiplatform.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n network: projects/${project.number}/global/networks/${vertexNetwork.name}\n encryptionSpec:\n kmsKeyName: kms-name\n predictRequestResponseLoggingConfig:\n bigqueryDestination:\n outputUri: bq://${project.projectId}.${bqDataset.datasetId}.request_response_logging\n enabled: true\n samplingRate: 0.1\n trafficSplit:\n fn::toJSON:\n '12345': 100\n options:\n dependson:\n - ${vertexVpcConnection}\n vertexVpcConnection:\n type: gcp:servicenetworking:Connection\n name: vertex_vpc_connection\n properties:\n network: ${vertexNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${vertexRange.name}\n vertexRange:\n type: gcp:compute:GlobalAddress\n name: vertex_range\n properties:\n name: address-name\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 24\n network: ${vertexNetwork.id}\n vertexNetwork:\n type: gcp:compute:Network\n name: vertex_network\n properties:\n name: network-name\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n name: crypto_key\n properties:\n cryptoKeyId: kms-name\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\n bqDataset:\n type: gcp:bigquery:Dataset\n name: bq_dataset\n properties:\n datasetId: some_dataset\n friendlyName: logging dataset\n description: This is a dataset that requests are logged to\n location: US\n deleteContentsOnDestroy: true\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Endpoint Private Service Connect\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name_69391\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n privateServiceConnectConfig: {\n enablePrivateServiceConnect: true,\n projectAllowlists: [project.then(project =\u003e project.projectId)],\n enableSecurePrivateServiceConnect: false,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name_69391\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n private_service_connect_config={\n \"enable_private_service_connect\": True,\n \"project_allowlists\": [project.project_id],\n \"enable_secure_private_service_connect\": False,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name_69391\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n PrivateServiceConnectConfig = new Gcp.Vertex.Inputs.AiEndpointPrivateServiceConnectConfigArgs\n {\n EnablePrivateServiceConnect = true,\n ProjectAllowlists = new[]\n {\n project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n },\n EnableSecurePrivateServiceConnect = false,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tproject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name_69391\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tPrivateServiceConnectConfig: \u0026vertex.AiEndpointPrivateServiceConnectConfigArgs{\n\t\t\t\tEnablePrivateServiceConnect: pulumi.Bool(true),\n\t\t\t\tProjectAllowlists: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(project.ProjectId),\n\t\t\t\t},\n\t\t\t\tEnableSecurePrivateServiceConnect: pulumi.Bool(false),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\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.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.vertex.inputs.AiEndpointPrivateServiceConnectConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var project = OrganizationsFunctions.getProject();\n\n var endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name_69391\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .privateServiceConnectConfig(AiEndpointPrivateServiceConnectConfigArgs.builder()\n .enablePrivateServiceConnect(true)\n .projectAllowlists(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .enableSecurePrivateServiceConnect(false)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name_69391\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n privateServiceConnectConfig:\n enablePrivateServiceConnect: true\n projectAllowlists:\n - ${project.projectId}\n enableSecurePrivateServiceConnect: false\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Endpoint Dedicated Endpoint\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst endpoint = new gcp.vertex.AiEndpoint(\"endpoint\", {\n name: \"endpoint-name_8270\",\n displayName: \"sample-endpoint\",\n description: \"A sample vertex endpoint\",\n location: \"us-central1\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n dedicatedEndpointEnabled: true,\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nendpoint = gcp.vertex.AiEndpoint(\"endpoint\",\n name=\"endpoint-name_8270\",\n display_name=\"sample-endpoint\",\n description=\"A sample vertex endpoint\",\n location=\"us-central1\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n dedicated_endpoint_enabled=True)\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var endpoint = new Gcp.Vertex.AiEndpoint(\"endpoint\", new()\n {\n Name = \"endpoint-name_8270\",\n DisplayName = \"sample-endpoint\",\n Description = \"A sample vertex endpoint\",\n Location = \"us-central1\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n DedicatedEndpointEnabled = true,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := vertex.NewAiEndpoint(ctx, \"endpoint\", \u0026vertex.AiEndpointArgs{\n\t\t\tName: pulumi.String(\"endpoint-name_8270\"),\n\t\t\tDisplayName: pulumi.String(\"sample-endpoint\"),\n\t\t\tDescription: pulumi.String(\"A sample vertex endpoint\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tDedicatedEndpointEnabled: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiEndpoint;\nimport com.pulumi.gcp.vertex.AiEndpointArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\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 endpoint = new AiEndpoint(\"endpoint\", AiEndpointArgs.builder()\n .name(\"endpoint-name_8270\")\n .displayName(\"sample-endpoint\")\n .description(\"A sample vertex endpoint\")\n .location(\"us-central1\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .dedicatedEndpointEnabled(true)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n endpoint:\n type: gcp:vertex:AiEndpoint\n properties:\n name: endpoint-name_8270\n displayName: sample-endpoint\n description: A sample vertex endpoint\n location: us-central1\n region: us-central1\n labels:\n label-one: value-one\n dedicatedEndpointEnabled: true\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nEndpoint can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/endpoints/{{name}}`\n\n* `{{project}}/{{location}}/{{name}}`\n\n* `{{location}}/{{name}}`\n\nWhen using the `pulumi import` command, Endpoint can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default projects/{{project}}/locations/{{location}}/endpoints/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default {{project}}/{{location}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiEndpoint:AiEndpoint default {{location}}/{{name}}\n```\n\n", "properties": { "createTime": { "type": "string", "description": "(Output)\nOutput only. Timestamp when the DeployedModel was created.\n" }, + "dedicatedEndpointDns": { + "type": "string", + "description": "Output only. DNS of the dedicated endpoint. Will only be populated if dedicatedEndpointEnabled is true. Format: `https://{endpointId}.{region}-{projectNumber}.prediction.vertexai.goog`.\n" + }, + "dedicatedEndpointEnabled": { + "type": "boolean", + "description": "If true, the endpoint will be exposed through a dedicated DNS [Endpoint.dedicated_endpoint_dns]. Your request to the dedicated DNS will be isolated from other users' traffic and will have better performance and reliability. Note: Once you enabled dedicated endpoint, you won't be able to send request to the shared DNS {region}-aiplatform.googleapis.com. The limitation will be removed soon.\n" + }, "deployedModels": { "type": "array", "items": { @@ -266975,7 +270195,15 @@ }, "network": { "type": "string", - "description": "The full name of the Google Compute Engine [network](https://cloud.google.com//compute/docs/networks-and-firewalls#networks) to which the Endpoint should be peered. Private services access must already be configured for the network. If left unspecified, the Endpoint is not peered with any network. Only one of the fields, network or enable_private_service_connect, can be set. [Format](https://cloud.google.com/compute/docs/reference/rest/v1/networks/insert): `projects/{project}/global/networks/{network}`. Where `{project}` is a project number, as in `12345`, and `{network}` is network name.\n" + "description": "The full name of the Google Compute Engine [network](https://cloud.google.com//compute/docs/networks-and-firewalls#networks) to which the Endpoint should be peered. Private services access must already be configured for the network. If left unspecified, the Endpoint is not peered with any network. Only one of the fields, network or enable_private_service_connect, can be set. [Format](https://cloud.google.com/compute/docs/reference/rest/v1/networks/insert): `projects/{project}/global/networks/{network}`. Where `{project}` is a project number, as in `12345`, and `{network}` is network name. Only one of the fields, `network` or `privateServiceConnectConfig`, can be set.\n" + }, + "predictRequestResponseLoggingConfig": { + "$ref": "#/types/gcp:vertex/AiEndpointPredictRequestResponseLoggingConfig:AiEndpointPredictRequestResponseLoggingConfig", + "description": "Configures the request-response logging for online prediction.\nStructure is documented below.\n" + }, + "privateServiceConnectConfig": { + "$ref": "#/types/gcp:vertex/AiEndpointPrivateServiceConnectConfig:AiEndpointPrivateServiceConnectConfig", + "description": "Configuration for private service connect. `network` and `privateServiceConnectConfig` are mutually exclusive.\nStructure is documented below.\n" }, "project": { "type": "string", @@ -266993,6 +270221,10 @@ "type": "string", "description": "The region for the resource\n" }, + "trafficSplit": { + "type": "string", + "description": "A map from a DeployedModel's id to the percentage of this Endpoint's traffic that should be forwarded to that DeployedModel.\nIf a DeployedModel's id is not listed in this map, then it receives no traffic.\nThe traffic percentage values must add up to 100, or map must be empty if the Endpoint is to not accept any traffic at a moment.\n\u003e **Note:** The `traffic_split` setting only applies after a model has been deployed to the endpoint. Re-applying a `gcp.vertex.AiEndpoint`\nresource without updating the `traffic_split` post-deployment may lead to your deployed `traffic_split` being lost; see\nthe `deployModel` [example](https://cloud.google.com/vertex-ai/docs/general/deployment#deploy_a_model_to_an_endpoint) and\n[documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1beta1/projects.locations.endpoints/deployModel) for details.\n" + }, "updateTime": { "type": "string", "description": "Output only. Timestamp when this Endpoint was last updated.\n" @@ -267000,6 +270232,7 @@ }, "required": [ "createTime", + "dedicatedEndpointDns", "deployedModels", "displayName", "effectiveLabels", @@ -267012,6 +270245,10 @@ "updateTime" ], "inputProperties": { + "dedicatedEndpointEnabled": { + "type": "boolean", + "description": "If true, the endpoint will be exposed through a dedicated DNS [Endpoint.dedicated_endpoint_dns]. Your request to the dedicated DNS will be isolated from other users' traffic and will have better performance and reliability. Note: Once you enabled dedicated endpoint, you won't be able to send request to the shared DNS {region}-aiplatform.googleapis.com. The limitation will be removed soon.\n" + }, "description": { "type": "string", "description": "The description of the Endpoint.\n" @@ -267044,9 +270281,17 @@ }, "network": { "type": "string", - "description": "The full name of the Google Compute Engine [network](https://cloud.google.com//compute/docs/networks-and-firewalls#networks) to which the Endpoint should be peered. Private services access must already be configured for the network. If left unspecified, the Endpoint is not peered with any network. Only one of the fields, network or enable_private_service_connect, can be set. [Format](https://cloud.google.com/compute/docs/reference/rest/v1/networks/insert): `projects/{project}/global/networks/{network}`. Where `{project}` is a project number, as in `12345`, and `{network}` is network name.\n", + "description": "The full name of the Google Compute Engine [network](https://cloud.google.com//compute/docs/networks-and-firewalls#networks) to which the Endpoint should be peered. Private services access must already be configured for the network. If left unspecified, the Endpoint is not peered with any network. Only one of the fields, network or enable_private_service_connect, can be set. [Format](https://cloud.google.com/compute/docs/reference/rest/v1/networks/insert): `projects/{project}/global/networks/{network}`. Where `{project}` is a project number, as in `12345`, and `{network}` is network name. Only one of the fields, `network` or `privateServiceConnectConfig`, can be set.\n", "willReplaceOnChanges": true }, + "predictRequestResponseLoggingConfig": { + "$ref": "#/types/gcp:vertex/AiEndpointPredictRequestResponseLoggingConfig:AiEndpointPredictRequestResponseLoggingConfig", + "description": "Configures the request-response logging for online prediction.\nStructure is documented below.\n" + }, + "privateServiceConnectConfig": { + "$ref": "#/types/gcp:vertex/AiEndpointPrivateServiceConnectConfig:AiEndpointPrivateServiceConnectConfig", + "description": "Configuration for private service connect. `network` and `privateServiceConnectConfig` are mutually exclusive.\nStructure is documented below.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", @@ -267056,6 +270301,10 @@ "type": "string", "description": "The region for the resource\n", "willReplaceOnChanges": true + }, + "trafficSplit": { + "type": "string", + "description": "A map from a DeployedModel's id to the percentage of this Endpoint's traffic that should be forwarded to that DeployedModel.\nIf a DeployedModel's id is not listed in this map, then it receives no traffic.\nThe traffic percentage values must add up to 100, or map must be empty if the Endpoint is to not accept any traffic at a moment.\n\u003e **Note:** The `traffic_split` setting only applies after a model has been deployed to the endpoint. Re-applying a `gcp.vertex.AiEndpoint`\nresource without updating the `traffic_split` post-deployment may lead to your deployed `traffic_split` being lost; see\nthe `deployModel` [example](https://cloud.google.com/vertex-ai/docs/general/deployment#deploy_a_model_to_an_endpoint) and\n[documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1beta1/projects.locations.endpoints/deployModel) for details.\n" } }, "requiredInputs": [ @@ -267069,6 +270318,14 @@ "type": "string", "description": "(Output)\nOutput only. Timestamp when the DeployedModel was created.\n" }, + "dedicatedEndpointDns": { + "type": "string", + "description": "Output only. DNS of the dedicated endpoint. Will only be populated if dedicatedEndpointEnabled is true. Format: `https://{endpointId}.{region}-{projectNumber}.prediction.vertexai.goog`.\n" + }, + "dedicatedEndpointEnabled": { + "type": "boolean", + "description": "If true, the endpoint will be exposed through a dedicated DNS [Endpoint.dedicated_endpoint_dns]. Your request to the dedicated DNS will be isolated from other users' traffic and will have better performance and reliability. Note: Once you enabled dedicated endpoint, you won't be able to send request to the shared DNS {region}-aiplatform.googleapis.com. The limitation will be removed soon.\n" + }, "deployedModels": { "type": "array", "items": { @@ -267124,9 +270381,17 @@ }, "network": { "type": "string", - "description": "The full name of the Google Compute Engine [network](https://cloud.google.com//compute/docs/networks-and-firewalls#networks) to which the Endpoint should be peered. Private services access must already be configured for the network. If left unspecified, the Endpoint is not peered with any network. Only one of the fields, network or enable_private_service_connect, can be set. [Format](https://cloud.google.com/compute/docs/reference/rest/v1/networks/insert): `projects/{project}/global/networks/{network}`. Where `{project}` is a project number, as in `12345`, and `{network}` is network name.\n", + "description": "The full name of the Google Compute Engine [network](https://cloud.google.com//compute/docs/networks-and-firewalls#networks) to which the Endpoint should be peered. Private services access must already be configured for the network. If left unspecified, the Endpoint is not peered with any network. Only one of the fields, network or enable_private_service_connect, can be set. [Format](https://cloud.google.com/compute/docs/reference/rest/v1/networks/insert): `projects/{project}/global/networks/{network}`. Where `{project}` is a project number, as in `12345`, and `{network}` is network name. Only one of the fields, `network` or `privateServiceConnectConfig`, can be set.\n", "willReplaceOnChanges": true }, + "predictRequestResponseLoggingConfig": { + "$ref": "#/types/gcp:vertex/AiEndpointPredictRequestResponseLoggingConfig:AiEndpointPredictRequestResponseLoggingConfig", + "description": "Configures the request-response logging for online prediction.\nStructure is documented below.\n" + }, + "privateServiceConnectConfig": { + "$ref": "#/types/gcp:vertex/AiEndpointPrivateServiceConnectConfig:AiEndpointPrivateServiceConnectConfig", + "description": "Configuration for private service connect. `network` and `privateServiceConnectConfig` are mutually exclusive.\nStructure is documented below.\n" + }, "project": { "type": "string", "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", @@ -267145,6 +270410,10 @@ "description": "The region for the resource\n", "willReplaceOnChanges": true }, + "trafficSplit": { + "type": "string", + "description": "A map from a DeployedModel's id to the percentage of this Endpoint's traffic that should be forwarded to that DeployedModel.\nIf a DeployedModel's id is not listed in this map, then it receives no traffic.\nThe traffic percentage values must add up to 100, or map must be empty if the Endpoint is to not accept any traffic at a moment.\n\u003e **Note:** The `traffic_split` setting only applies after a model has been deployed to the endpoint. Re-applying a `gcp.vertex.AiEndpoint`\nresource without updating the `traffic_split` post-deployment may lead to your deployed `traffic_split` being lost; see\nthe `deployModel` [example](https://cloud.google.com/vertex-ai/docs/general/deployment#deploy_a_model_to_an_endpoint) and\n[documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1beta1/projects.locations.endpoints/deployModel) for details.\n" + }, "updateTime": { "type": "string", "description": "Output only. Timestamp when this Endpoint was last updated.\n" @@ -267982,7 +271251,7 @@ } }, "gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview": { - "description": "FeatureView is representation of values that the FeatureOnlineStore will serve based on its syncConfig.\n\n\nTo get more information about FeatureOnlineStoreFeatureview, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featureOnlineStores.featureViews)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/vertex-ai/docs)\n\n## Example Usage\n\n### Vertex Ai Featureonlinestore Featureview\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n});\nconst tf_test_dataset = new gcp.bigquery.Dataset(\"tf-test-dataset\", {\n datasetId: \"example_feature_view\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst tf_test_table = new gcp.bigquery.Table(\"tf-test-table\", {\n deletionProtection: false,\n datasetId: tf_test_dataset.datasetId,\n tableId: \"example_feature_view\",\n schema: ` [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n`,\n});\nconst featureview = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview\", {\n name: \"example_feature_view\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n bigQuerySource: {\n uri: pulumi.interpolate`bq://${tf_test_table.project}.${tf_test_table.datasetId}.${tf_test_table.tableId}`,\n entityIdColumns: [\"test_entity_column\"],\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n })\ntf_test_dataset = gcp.bigquery.Dataset(\"tf-test-dataset\",\n dataset_id=\"example_feature_view\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntf_test_table = gcp.bigquery.Table(\"tf-test-table\",\n deletion_protection=False,\n dataset_id=tf_test_dataset.dataset_id,\n table_id=\"example_feature_view\",\n schema=\"\"\" [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n\"\"\")\nfeatureview = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview\",\n name=\"example_feature_view\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n big_query_source={\n \"uri\": pulumi.Output.all(\n project=tf_test_table.project,\n dataset_id=tf_test_table.dataset_id,\n table_id=tf_test_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"entity_id_columns\": [\"test_entity_column\"],\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n });\n\n var tf_test_dataset = new Gcp.BigQuery.Dataset(\"tf-test-dataset\", new()\n {\n DatasetId = \"example_feature_view\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var tf_test_table = new Gcp.BigQuery.Table(\"tf-test-table\", new()\n {\n DeletionProtection = false,\n DatasetId = tf_test_dataset.DatasetId,\n TableId = \"example_feature_view\",\n Schema = @\" [\n {\n \"\"name\"\": \"\"entity_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"Test default entity_id\"\"\n },\n {\n \"\"name\"\": \"\"test_entity_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"test secondary entity column\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"description\"\": \"\"Default timestamp value\"\"\n }\n]\n\",\n });\n\n var featureview = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview\", new()\n {\n Name = \"example_feature_view\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs\n {\n Uri = Output.Tuple(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n EntityIdColumns = new[]\n {\n \"test_entity_column\",\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\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\t_, err = bigquery.NewDataset(ctx, \"tf-test-dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"tf-test-table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: tf_test_dataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view\"),\n\t\t\tSchema: pulumi.String(` [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tBigQuerySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs{\n\t\t\t\tUri: pulumi.All(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test_entity_column\"),\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\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\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 featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build());\n\n var tf_test_dataset = new Dataset(\"tf-test-dataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var tf_test_table = new Table(\"tf-test-table\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(tf_test_dataset.datasetId())\n .tableId(\"example_feature_view\")\n .schema(\"\"\"\n [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n \"\"\")\n .build());\n\n var featureview = new AiFeatureOnlineStoreFeatureview(\"featureview\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .bigQuerySource(AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs.builder()\n .uri(Output.tuple(tf_test_table.project(), tf_test_table.datasetId(), tf_test_table.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .entityIdColumns(\"test_entity_column\")\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n tf-test-dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_feature_view\n friendlyName: test\n description: This is a test description\n location: US\n tf-test-table:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"tf-test-dataset\"].datasetId}\n tableId: example_feature_view\n schema: |2\n [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n ]\n featureview:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n properties:\n name: example_feature_view\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n bigQuerySource:\n uri: bq://${[\"tf-test-table\"].project}.${[\"tf-test-table\"].datasetId}.${[\"tf-test-table\"].tableId}\n entityIdColumns:\n - test_entity_column\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview Feature Registry\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view_feature_registry\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n});\nconst sampleDataset = new gcp.bigquery.Dataset(\"sample_dataset\", {\n datasetId: \"example_feature_view_feature_registry\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst sampleTable = new gcp.bigquery.Table(\"sample_table\", {\n deletionProtection: false,\n datasetId: sampleDataset.datasetId,\n tableId: \"example_feature_view_feature_registry\",\n schema: `[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst sampleFeatureGroup = new gcp.vertex.AiFeatureGroup(\"sample_feature_group\", {\n name: \"example_feature_view_feature_registry\",\n description: \"A sample feature group\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n bigQuery: {\n bigQuerySource: {\n inputUri: pulumi.interpolate`bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}`,\n },\n entityIdColumns: [\"feature_id\"],\n },\n});\nconst sampleFeature = new gcp.vertex.AiFeatureGroupFeature(\"sample_feature\", {\n name: \"example_feature_view_feature_registry\",\n region: \"us-central1\",\n featureGroup: sampleFeatureGroup.name,\n description: \"A sample feature\",\n labels: {\n \"label-one\": \"value-one\",\n },\n});\nconst featureviewFeatureregistry = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\", {\n name: \"example_feature_view_feature_registry\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n featureRegistrySource: {\n featureGroups: [{\n featureGroupId: sampleFeatureGroup.name,\n featureIds: [sampleFeature.name],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view_feature_registry\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n })\nsample_dataset = gcp.bigquery.Dataset(\"sample_dataset\",\n dataset_id=\"example_feature_view_feature_registry\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nsample_table = gcp.bigquery.Table(\"sample_table\",\n deletion_protection=False,\n dataset_id=sample_dataset.dataset_id,\n table_id=\"example_feature_view_feature_registry\",\n schema=\"\"\"[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\nsample_feature_group = gcp.vertex.AiFeatureGroup(\"sample_feature_group\",\n name=\"example_feature_view_feature_registry\",\n description=\"A sample feature group\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n big_query={\n \"big_query_source\": {\n \"input_uri\": pulumi.Output.all(\n project=sample_table.project,\n dataset_id=sample_table.dataset_id,\n table_id=sample_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n },\n \"entity_id_columns\": [\"feature_id\"],\n })\nsample_feature = gcp.vertex.AiFeatureGroupFeature(\"sample_feature\",\n name=\"example_feature_view_feature_registry\",\n region=\"us-central1\",\n feature_group=sample_feature_group.name,\n description=\"A sample feature\",\n labels={\n \"label-one\": \"value-one\",\n })\nfeatureview_featureregistry = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\",\n name=\"example_feature_view_feature_registry\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n feature_registry_source={\n \"feature_groups\": [{\n \"feature_group_id\": sample_feature_group.name,\n \"feature_ids\": [sample_feature.name],\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n });\n\n var sampleDataset = new Gcp.BigQuery.Dataset(\"sample_dataset\", new()\n {\n DatasetId = \"example_feature_view_feature_registry\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var sampleTable = new Gcp.BigQuery.Table(\"sample_table\", new()\n {\n DeletionProtection = false,\n DatasetId = sampleDataset.DatasetId,\n TableId = \"example_feature_view_feature_registry\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"feature_id\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"example_feature_view_feature_registry\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var sampleFeatureGroup = new Gcp.Vertex.AiFeatureGroup(\"sample_feature_group\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Description = \"A sample feature group\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n BigQuery = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryArgs\n {\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryBigQuerySourceArgs\n {\n InputUri = Output.Tuple(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n },\n EntityIdColumns = new[]\n {\n \"feature_id\",\n },\n },\n });\n\n var sampleFeature = new Gcp.Vertex.AiFeatureGroupFeature(\"sample_feature\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Region = \"us-central1\",\n FeatureGroup = sampleFeatureGroup.Name,\n Description = \"A sample feature\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var featureviewFeatureregistry = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n FeatureRegistrySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs\n {\n FeatureGroups = new[]\n {\n new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs\n {\n FeatureGroupId = sampleFeatureGroup.Name,\n FeatureIds = new[]\n {\n sampleFeature.Name,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\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\tsampleDataset, err := bigquery.NewDataset(ctx, \"sample_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleTable, err := bigquery.NewTable(ctx, \"sample_table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeatureGroup, err := vertex.NewAiFeatureGroup(ctx, \"sample_feature_group\", \u0026vertex.AiFeatureGroupArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tDescription: pulumi.String(\"A sample feature group\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tBigQuery: \u0026vertex.AiFeatureGroupBigQueryArgs{\n\t\t\t\tBigQuerySource: \u0026vertex.AiFeatureGroupBigQueryBigQuerySourceArgs{\n\t\t\t\t\tInputUri: pulumi.All(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"feature_id\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeature, err := vertex.NewAiFeatureGroupFeature(ctx, \"sample_feature\", \u0026vertex.AiFeatureGroupFeatureArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureGroup: sampleFeatureGroup.Name,\n\t\t\tDescription: pulumi.String(\"A sample feature\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview_featureregistry\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tFeatureRegistrySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs{\n\t\t\t\tFeatureGroups: vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArray{\n\t\t\t\t\t\u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs{\n\t\t\t\t\t\tFeatureGroupId: sampleFeatureGroup.Name,\n\t\t\t\t\t\tFeatureIds: pulumi.StringArray{\n\t\t\t\t\t\t\tsampleFeature.Name,\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\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.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroup;\nimport com.pulumi.gcp.vertex.AiFeatureGroupArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeature;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeatureArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs;\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 featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build());\n\n var sampleDataset = new Dataset(\"sampleDataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view_feature_registry\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var sampleTable = new Table(\"sampleTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(sampleDataset.datasetId())\n .tableId(\"example_feature_view_feature_registry\")\n .schema(\"\"\"\n[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var sampleFeatureGroup = new AiFeatureGroup(\"sampleFeatureGroup\", AiFeatureGroupArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .description(\"A sample feature group\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .bigQuery(AiFeatureGroupBigQueryArgs.builder()\n .bigQuerySource(AiFeatureGroupBigQueryBigQuerySourceArgs.builder()\n .inputUri(Output.tuple(sampleTable.project(), sampleTable.datasetId(), sampleTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .entityIdColumns(\"feature_id\")\n .build())\n .build());\n\n var sampleFeature = new AiFeatureGroupFeature(\"sampleFeature\", AiFeatureGroupFeatureArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .region(\"us-central1\")\n .featureGroup(sampleFeatureGroup.name())\n .description(\"A sample feature\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var featureviewFeatureregistry = new AiFeatureOnlineStoreFeatureview(\"featureviewFeatureregistry\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .featureRegistrySource(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs.builder()\n .featureGroups(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs.builder()\n .featureGroupId(sampleFeatureGroup.name())\n .featureIds(sampleFeature.name())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view_feature_registry\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n sampleDataset:\n type: gcp:bigquery:Dataset\n name: sample_dataset\n properties:\n datasetId: example_feature_view_feature_registry\n friendlyName: test\n description: This is a test description\n location: US\n sampleTable:\n type: gcp:bigquery:Table\n name: sample_table\n properties:\n deletionProtection: false\n datasetId: ${sampleDataset.datasetId}\n tableId: example_feature_view_feature_registry\n schema: |\n [\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n ]\n sampleFeatureGroup:\n type: gcp:vertex:AiFeatureGroup\n name: sample_feature_group\n properties:\n name: example_feature_view_feature_registry\n description: A sample feature group\n region: us-central1\n labels:\n label-one: value-one\n bigQuery:\n bigQuerySource:\n inputUri: bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}\n entityIdColumns:\n - feature_id\n sampleFeature:\n type: gcp:vertex:AiFeatureGroupFeature\n name: sample_feature\n properties:\n name: example_feature_view_feature_registry\n region: us-central1\n featureGroup: ${sampleFeatureGroup.name}\n description: A sample feature\n labels:\n label-one: value-one\n featureviewFeatureregistry:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: featureview_featureregistry\n properties:\n name: example_feature_view_feature_registry\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n featureRegistrySource:\n featureGroups:\n - featureGroupId: ${sampleFeatureGroup.name}\n featureIds:\n - ${sampleFeature.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview Cross Project\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as time from \"@pulumi/time\";\n\nconst testProject = gcp.organizations.getProject({});\nconst project = new gcp.organizations.Project(\"project\", {\n projectId: \"tf-test_69391\",\n name: \"tf-test_8270\",\n orgId: \"123456789\",\n billingAccount: \"000000-0000000-0000000-000000\",\n deletionPolicy: \"DELETE\",\n});\nconst wait60Seconds = new time.index.Sleep(\"wait_60_seconds\", {createDuration: \"60s\"}, {\n dependsOn: [project],\n});\nconst vertexai = new gcp.projects.Service(\"vertexai\", {\n service: \"aiplatform.googleapis.com\",\n project: project.projectId,\n disableOnDestroy: false,\n}, {\n dependsOn: [wait60Seconds],\n});\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_cross_project_featureview\",\n project: project.projectId,\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n}, {\n dependsOn: [vertexai],\n});\nconst sampleDataset = new gcp.bigquery.Dataset(\"sample_dataset\", {\n datasetId: \"example_cross_project_featureview\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst viewer = new gcp.bigquery.DatasetIamMember(\"viewer\", {\n project: testProject.then(testProject =\u003e testProject.projectId),\n datasetId: sampleDataset.datasetId,\n role: \"roles/bigquery.dataViewer\",\n member: pulumi.interpolate`serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com`,\n}, {\n dependsOn: [featureonlinestore],\n});\nconst wait30Seconds = new time.index.Sleep(\"wait_30_seconds\", {createDuration: \"30s\"}, {\n dependsOn: [viewer],\n});\nconst sampleTable = new gcp.bigquery.Table(\"sample_table\", {\n deletionProtection: false,\n datasetId: sampleDataset.datasetId,\n tableId: \"example_cross_project_featureview\",\n schema: `[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst sampleFeatureGroup = new gcp.vertex.AiFeatureGroup(\"sample_feature_group\", {\n name: \"example_cross_project_featureview\",\n description: \"A sample feature group\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n bigQuery: {\n bigQuerySource: {\n inputUri: pulumi.interpolate`bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}`,\n },\n entityIdColumns: [\"feature_id\"],\n },\n});\nconst sampleFeature = new gcp.vertex.AiFeatureGroupFeature(\"sample_feature\", {\n name: \"example_cross_project_featureview\",\n region: \"us-central1\",\n featureGroup: sampleFeatureGroup.name,\n description: \"A sample feature\",\n labels: {\n \"label-one\": \"value-one\",\n },\n});\nconst crossProjectFeatureview = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\", {\n name: \"example_cross_project_featureview\",\n project: project.projectId,\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n featureRegistrySource: {\n featureGroups: [{\n featureGroupId: sampleFeatureGroup.name,\n featureIds: [sampleFeature.name],\n }],\n projectNumber: testProject.then(testProject =\u003e testProject.number),\n },\n}, {\n dependsOn: [\n vertexai,\n wait30Seconds,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_time as time\n\ntest_project = gcp.organizations.get_project()\nproject = gcp.organizations.Project(\"project\",\n project_id=\"tf-test_69391\",\n name=\"tf-test_8270\",\n org_id=\"123456789\",\n billing_account=\"000000-0000000-0000000-000000\",\n deletion_policy=\"DELETE\")\nwait60_seconds = time.index.Sleep(\"wait_60_seconds\", create_duration=60s,\nopts = pulumi.ResourceOptions(depends_on=[project]))\nvertexai = gcp.projects.Service(\"vertexai\",\n service=\"aiplatform.googleapis.com\",\n project=project.project_id,\n disable_on_destroy=False,\n opts = pulumi.ResourceOptions(depends_on=[wait60_seconds]))\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_cross_project_featureview\",\n project=project.project_id,\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[vertexai]))\nsample_dataset = gcp.bigquery.Dataset(\"sample_dataset\",\n dataset_id=\"example_cross_project_featureview\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nviewer = gcp.bigquery.DatasetIamMember(\"viewer\",\n project=test_project.project_id,\n dataset_id=sample_dataset.dataset_id,\n role=\"roles/bigquery.dataViewer\",\n member=project.number.apply(lambda number: f\"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com\"),\n opts = pulumi.ResourceOptions(depends_on=[featureonlinestore]))\nwait30_seconds = time.index.Sleep(\"wait_30_seconds\", create_duration=30s,\nopts = pulumi.ResourceOptions(depends_on=[viewer]))\nsample_table = gcp.bigquery.Table(\"sample_table\",\n deletion_protection=False,\n dataset_id=sample_dataset.dataset_id,\n table_id=\"example_cross_project_featureview\",\n schema=\"\"\"[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\nsample_feature_group = gcp.vertex.AiFeatureGroup(\"sample_feature_group\",\n name=\"example_cross_project_featureview\",\n description=\"A sample feature group\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n big_query={\n \"big_query_source\": {\n \"input_uri\": pulumi.Output.all(\n project=sample_table.project,\n dataset_id=sample_table.dataset_id,\n table_id=sample_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n },\n \"entity_id_columns\": [\"feature_id\"],\n })\nsample_feature = gcp.vertex.AiFeatureGroupFeature(\"sample_feature\",\n name=\"example_cross_project_featureview\",\n region=\"us-central1\",\n feature_group=sample_feature_group.name,\n description=\"A sample feature\",\n labels={\n \"label-one\": \"value-one\",\n })\ncross_project_featureview = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\",\n name=\"example_cross_project_featureview\",\n project=project.project_id,\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n feature_registry_source={\n \"feature_groups\": [{\n \"feature_group_id\": sample_feature_group.name,\n \"feature_ids\": [sample_feature.name],\n }],\n \"project_number\": test_project.number,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n vertexai,\n wait30_seconds,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Time = Pulumi.Time;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n ProjectId = \"tf-test_69391\",\n Name = \"tf-test_8270\",\n OrgId = \"123456789\",\n BillingAccount = \"000000-0000000-0000000-000000\",\n DeletionPolicy = \"DELETE\",\n });\n\n var wait60Seconds = new Time.Index.Sleep(\"wait_60_seconds\", new()\n {\n CreateDuration = \"60s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n project,\n },\n });\n\n var vertexai = new Gcp.Projects.Service(\"vertexai\", new()\n {\n ServiceName = \"aiplatform.googleapis.com\",\n Project = project.ProjectId,\n DisableOnDestroy = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n wait60Seconds,\n },\n });\n\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_cross_project_featureview\",\n Project = project.ProjectId,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexai,\n },\n });\n\n var sampleDataset = new Gcp.BigQuery.Dataset(\"sample_dataset\", new()\n {\n DatasetId = \"example_cross_project_featureview\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var viewer = new Gcp.BigQuery.DatasetIamMember(\"viewer\", new()\n {\n Project = testProject.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n DatasetId = sampleDataset.DatasetId,\n Role = \"roles/bigquery.dataViewer\",\n Member = project.Number.Apply(number =\u003e $\"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com\"),\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n featureonlinestore,\n },\n });\n\n var wait30Seconds = new Time.Index.Sleep(\"wait_30_seconds\", new()\n {\n CreateDuration = \"30s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n viewer,\n },\n });\n\n var sampleTable = new Gcp.BigQuery.Table(\"sample_table\", new()\n {\n DeletionProtection = false,\n DatasetId = sampleDataset.DatasetId,\n TableId = \"example_cross_project_featureview\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"feature_id\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"example_cross_project_featureview\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var sampleFeatureGroup = new Gcp.Vertex.AiFeatureGroup(\"sample_feature_group\", new()\n {\n Name = \"example_cross_project_featureview\",\n Description = \"A sample feature group\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n BigQuery = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryArgs\n {\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryBigQuerySourceArgs\n {\n InputUri = Output.Tuple(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n },\n EntityIdColumns = new[]\n {\n \"feature_id\",\n },\n },\n });\n\n var sampleFeature = new Gcp.Vertex.AiFeatureGroupFeature(\"sample_feature\", new()\n {\n Name = \"example_cross_project_featureview\",\n Region = \"us-central1\",\n FeatureGroup = sampleFeatureGroup.Name,\n Description = \"A sample feature\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var crossProjectFeatureview = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\", new()\n {\n Name = \"example_cross_project_featureview\",\n Project = project.ProjectId,\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n FeatureRegistrySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs\n {\n FeatureGroups = new[]\n {\n new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs\n {\n FeatureGroupId = sampleFeatureGroup.Name,\n FeatureIds = new[]\n {\n sampleFeature.Name,\n },\n },\n },\n ProjectNumber = testProject.Apply(getProjectResult =\u003e getProjectResult.Number),\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexai,\n wait30Seconds,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi-time/sdk/go/time\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test_69391\"),\n\t\t\tName: pulumi.String(\"tf-test_8270\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait60Seconds, err := time.NewSleep(ctx, \"wait_60_seconds\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"60s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tproject,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexai, err := projects.NewService(ctx, \"vertexai\", \u0026projects.ServiceArgs{\n\t\t\tService: pulumi.String(\"aiplatform.googleapis.com\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tDisableOnDestroy: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\twait60Seconds,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexai,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleDataset, err := bigquery.NewDataset(ctx, \"sample_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tviewer, err := bigquery.NewDatasetIamMember(ctx, \"viewer\", \u0026bigquery.DatasetIamMemberArgs{\n\t\t\tProject: pulumi.String(testProject.ProjectId),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tRole: pulumi.String(\"roles/bigquery.dataViewer\"),\n\t\t\tMember: project.Number.ApplyT(func(number string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-aiplatform.iam.gserviceaccount.com\", number), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfeatureonlinestore,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait30Seconds, err := time.NewSleep(ctx, \"wait_30_seconds\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"30s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tviewer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleTable, err := bigquery.NewTable(ctx, \"sample_table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeatureGroup, err := vertex.NewAiFeatureGroup(ctx, \"sample_feature_group\", \u0026vertex.AiFeatureGroupArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tDescription: pulumi.String(\"A sample feature group\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tBigQuery: \u0026vertex.AiFeatureGroupBigQueryArgs{\n\t\t\t\tBigQuerySource: \u0026vertex.AiFeatureGroupBigQueryBigQuerySourceArgs{\n\t\t\t\t\tInputUri: pulumi.All(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"feature_id\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeature, err := vertex.NewAiFeatureGroupFeature(ctx, \"sample_feature\", \u0026vertex.AiFeatureGroupFeatureArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureGroup: sampleFeatureGroup.Name,\n\t\t\tDescription: pulumi.String(\"A sample feature\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"cross_project_featureview\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tFeatureRegistrySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs{\n\t\t\t\tFeatureGroups: vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArray{\n\t\t\t\t\t\u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs{\n\t\t\t\t\t\tFeatureGroupId: sampleFeatureGroup.Name,\n\t\t\t\t\t\tFeatureIds: pulumi.StringArray{\n\t\t\t\t\t\t\tsampleFeature.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tProjectNumber: pulumi.String(testProject.Number),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexai,\n\t\t\twait30Seconds,\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.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.time.sleep;\nimport com.pulumi.time.SleepArgs;\nimport com.pulumi.gcp.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.DatasetIamMember;\nimport com.pulumi.gcp.bigquery.DatasetIamMemberArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroup;\nimport com.pulumi.gcp.vertex.AiFeatureGroupArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeature;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeatureArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testProject = OrganizationsFunctions.getProject();\n\n var project = new Project(\"project\", ProjectArgs.builder()\n .projectId(\"tf-test_69391\")\n .name(\"tf-test_8270\")\n .orgId(\"123456789\")\n .billingAccount(\"000000-0000000-0000000-000000\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var wait60Seconds = new Sleep(\"wait60Seconds\", SleepArgs.builder()\n .createDuration(\"60s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(project)\n .build());\n\n var vertexai = new Service(\"vertexai\", ServiceArgs.builder()\n .service(\"aiplatform.googleapis.com\")\n .project(project.projectId())\n .disableOnDestroy(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(wait60Seconds)\n .build());\n\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_cross_project_featureview\")\n .project(project.projectId())\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexai)\n .build());\n\n var sampleDataset = new Dataset(\"sampleDataset\", DatasetArgs.builder()\n .datasetId(\"example_cross_project_featureview\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var viewer = new DatasetIamMember(\"viewer\", DatasetIamMemberArgs.builder()\n .project(testProject.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .datasetId(sampleDataset.datasetId())\n .role(\"roles/bigquery.dataViewer\")\n .member(project.number().applyValue(number -\u003e String.format(\"serviceAccount:service-%s@gcp-sa-aiplatform.iam.gserviceaccount.com\", number)))\n .build(), CustomResourceOptions.builder()\n .dependsOn(featureonlinestore)\n .build());\n\n var wait30Seconds = new Sleep(\"wait30Seconds\", SleepArgs.builder()\n .createDuration(\"30s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(viewer)\n .build());\n\n var sampleTable = new Table(\"sampleTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(sampleDataset.datasetId())\n .tableId(\"example_cross_project_featureview\")\n .schema(\"\"\"\n[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var sampleFeatureGroup = new AiFeatureGroup(\"sampleFeatureGroup\", AiFeatureGroupArgs.builder()\n .name(\"example_cross_project_featureview\")\n .description(\"A sample feature group\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .bigQuery(AiFeatureGroupBigQueryArgs.builder()\n .bigQuerySource(AiFeatureGroupBigQueryBigQuerySourceArgs.builder()\n .inputUri(Output.tuple(sampleTable.project(), sampleTable.datasetId(), sampleTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .entityIdColumns(\"feature_id\")\n .build())\n .build());\n\n var sampleFeature = new AiFeatureGroupFeature(\"sampleFeature\", AiFeatureGroupFeatureArgs.builder()\n .name(\"example_cross_project_featureview\")\n .region(\"us-central1\")\n .featureGroup(sampleFeatureGroup.name())\n .description(\"A sample feature\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var crossProjectFeatureview = new AiFeatureOnlineStoreFeatureview(\"crossProjectFeatureview\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_cross_project_featureview\")\n .project(project.projectId())\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .featureRegistrySource(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs.builder()\n .featureGroups(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs.builder()\n .featureGroupId(sampleFeatureGroup.name())\n .featureIds(sampleFeature.name())\n .build())\n .projectNumber(testProject.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n vertexai,\n wait30Seconds)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test_69391\n name: tf-test_8270\n orgId: '123456789'\n billingAccount: 000000-0000000-0000000-000000\n deletionPolicy: DELETE\n wait60Seconds:\n type: time:sleep\n name: wait_60_seconds\n properties:\n createDuration: 60s\n options:\n dependson:\n - ${project}\n wait30Seconds:\n type: time:sleep\n name: wait_30_seconds\n properties:\n createDuration: 30s\n options:\n dependson:\n - ${viewer}\n vertexai:\n type: gcp:projects:Service\n properties:\n service: aiplatform.googleapis.com\n project: ${project.projectId}\n disableOnDestroy: false # Needed for CI tests for permissions to propagate, should not be needed for actual usage\n options:\n dependson:\n - ${wait60Seconds}\n viewer:\n type: gcp:bigquery:DatasetIamMember\n properties:\n project: ${testProject.projectId}\n datasetId: ${sampleDataset.datasetId}\n role: roles/bigquery.dataViewer\n member: serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\n options:\n dependson:\n - ${featureonlinestore}\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_cross_project_featureview\n project: ${project.projectId}\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n options:\n dependson:\n - ${vertexai}\n sampleDataset:\n type: gcp:bigquery:Dataset\n name: sample_dataset\n properties:\n datasetId: example_cross_project_featureview\n friendlyName: test\n description: This is a test description\n location: US\n sampleTable:\n type: gcp:bigquery:Table\n name: sample_table\n properties:\n deletionProtection: false\n datasetId: ${sampleDataset.datasetId}\n tableId: example_cross_project_featureview\n schema: |\n [\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n ]\n sampleFeatureGroup:\n type: gcp:vertex:AiFeatureGroup\n name: sample_feature_group\n properties:\n name: example_cross_project_featureview\n description: A sample feature group\n region: us-central1\n labels:\n label-one: value-one\n bigQuery:\n bigQuerySource:\n inputUri: bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}\n entityIdColumns:\n - feature_id\n sampleFeature:\n type: gcp:vertex:AiFeatureGroupFeature\n name: sample_feature\n properties:\n name: example_cross_project_featureview\n region: us-central1\n featureGroup: ${sampleFeatureGroup.name}\n description: A sample feature\n labels:\n label-one: value-one\n crossProjectFeatureview:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: cross_project_featureview\n properties:\n name: example_cross_project_featureview\n project: ${project.projectId}\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n featureRegistrySource:\n featureGroups:\n - featureGroupId: ${sampleFeatureGroup.name}\n featureIds:\n - ${sampleFeature.name}\n projectNumber: ${testProject.number}\n options:\n dependson:\n - ${vertexai}\n - ${wait30Seconds}\nvariables:\n testProject:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview With Vector Search\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view_vector_search\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n embeddingManagement: {\n enabled: true,\n },\n});\nconst tf_test_dataset = new gcp.bigquery.Dataset(\"tf-test-dataset\", {\n datasetId: \"example_feature_view_vector_search\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst tf_test_table = new gcp.bigquery.Table(\"tf-test-table\", {\n deletionProtection: false,\n datasetId: tf_test_dataset.datasetId,\n tableId: \"example_feature_view_vector_search\",\n schema: `[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n`,\n});\nconst featureviewVectorSearch = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\", {\n name: \"example_feature_view_vector_search\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n bigQuerySource: {\n uri: pulumi.interpolate`bq://${tf_test_table.project}.${tf_test_table.datasetId}.${tf_test_table.tableId}`,\n entityIdColumns: [\"test_entity_column\"],\n },\n vectorSearchConfig: {\n embeddingColumn: \"embedding\",\n filterColumns: [\"country\"],\n crowdingColumn: \"test_crowding_column\",\n distanceMeasureType: \"DOT_PRODUCT_DISTANCE\",\n treeAhConfig: {\n leafNodeEmbeddingCount: \"1000\",\n },\n embeddingDimension: 2,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view_vector_search\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n },\n embedding_management={\n \"enabled\": True,\n })\ntf_test_dataset = gcp.bigquery.Dataset(\"tf-test-dataset\",\n dataset_id=\"example_feature_view_vector_search\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntf_test_table = gcp.bigquery.Table(\"tf-test-table\",\n deletion_protection=False,\n dataset_id=tf_test_dataset.dataset_id,\n table_id=\"example_feature_view_vector_search\",\n schema=\"\"\"[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n\"\"\")\nfeatureview_vector_search = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\",\n name=\"example_feature_view_vector_search\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n big_query_source={\n \"uri\": pulumi.Output.all(\n project=tf_test_table.project,\n dataset_id=tf_test_table.dataset_id,\n table_id=tf_test_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"entity_id_columns\": [\"test_entity_column\"],\n },\n vector_search_config={\n \"embedding_column\": \"embedding\",\n \"filter_columns\": [\"country\"],\n \"crowding_column\": \"test_crowding_column\",\n \"distance_measure_type\": \"DOT_PRODUCT_DISTANCE\",\n \"tree_ah_config\": {\n \"leaf_node_embedding_count\": \"1000\",\n },\n \"embedding_dimension\": 2,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view_vector_search\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n EmbeddingManagement = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreEmbeddingManagementArgs\n {\n Enabled = true,\n },\n });\n\n var tf_test_dataset = new Gcp.BigQuery.Dataset(\"tf-test-dataset\", new()\n {\n DatasetId = \"example_feature_view_vector_search\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var tf_test_table = new Gcp.BigQuery.Table(\"tf-test-table\", new()\n {\n DeletionProtection = false,\n DatasetId = tf_test_dataset.DatasetId,\n TableId = \"example_feature_view_vector_search\",\n Schema = @\"[\n{\n \"\"name\"\": \"\"test_primary_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"primary test id\"\"\n},\n{\n \"\"name\"\": \"\"embedding\"\",\n \"\"mode\"\": \"\"REPEATED\"\",\n \"\"type\"\": \"\"FLOAT\"\",\n \"\"description\"\": \"\"embedding column for primary_id column\"\"\n},\n{\n \"\"name\"\": \"\"country\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"country\"\"\n},\n{\n \"\"name\"\": \"\"test_crowding_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"INTEGER\"\",\n \"\"description\"\": \"\"test crowding column\"\"\n},\n{\n \"\"name\"\": \"\"entity_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"Test default entity_id\"\"\n},\n{\n \"\"name\"\": \"\"test_entity_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"test secondary entity column\"\"\n},\n{\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"description\"\": \"\"Default timestamp value\"\"\n}\n]\n\",\n });\n\n var featureviewVectorSearch = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\", new()\n {\n Name = \"example_feature_view_vector_search\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs\n {\n Uri = Output.Tuple(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n EntityIdColumns = new[]\n {\n \"test_entity_column\",\n },\n },\n VectorSearchConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs\n {\n EmbeddingColumn = \"embedding\",\n FilterColumns = new[]\n {\n \"country\",\n },\n CrowdingColumn = \"test_crowding_column\",\n DistanceMeasureType = \"DOT_PRODUCT_DISTANCE\",\n TreeAhConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs\n {\n LeafNodeEmbeddingCount = \"1000\",\n },\n EmbeddingDimension = 2,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEmbeddingManagement: \u0026vertex.AiFeatureOnlineStoreEmbeddingManagementArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"tf-test-dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"tf-test-table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: tf_test_dataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tSchema: pulumi.String(`[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview_vector_search\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tBigQuerySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs{\n\t\t\t\tUri: pulumi.All(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test_entity_column\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tVectorSearchConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs{\n\t\t\t\tEmbeddingColumn: pulumi.String(\"embedding\"),\n\t\t\t\tFilterColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"country\"),\n\t\t\t\t},\n\t\t\t\tCrowdingColumn: pulumi.String(\"test_crowding_column\"),\n\t\t\t\tDistanceMeasureType: pulumi.String(\"DOT_PRODUCT_DISTANCE\"),\n\t\t\t\tTreeAhConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs{\n\t\t\t\t\tLeafNodeEmbeddingCount: pulumi.String(\"1000\"),\n\t\t\t\t},\n\t\t\t\tEmbeddingDimension: pulumi.Int(2),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreEmbeddingManagementArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\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 featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view_vector_search\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .embeddingManagement(AiFeatureOnlineStoreEmbeddingManagementArgs.builder()\n .enabled(true)\n .build())\n .build());\n\n var tf_test_dataset = new Dataset(\"tf-test-dataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view_vector_search\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var tf_test_table = new Table(\"tf-test-table\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(tf_test_dataset.datasetId())\n .tableId(\"example_feature_view_vector_search\")\n .schema(\"\"\"\n[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n \"\"\")\n .build());\n\n var featureviewVectorSearch = new AiFeatureOnlineStoreFeatureview(\"featureviewVectorSearch\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view_vector_search\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .bigQuerySource(AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs.builder()\n .uri(Output.tuple(tf_test_table.project(), tf_test_table.datasetId(), tf_test_table.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .entityIdColumns(\"test_entity_column\")\n .build())\n .vectorSearchConfig(AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs.builder()\n .embeddingColumn(\"embedding\")\n .filterColumns(\"country\")\n .crowdingColumn(\"test_crowding_column\")\n .distanceMeasureType(\"DOT_PRODUCT_DISTANCE\")\n .treeAhConfig(AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs.builder()\n .leafNodeEmbeddingCount(\"1000\")\n .build())\n .embeddingDimension(\"2\")\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view_vector_search\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n embeddingManagement:\n enabled: true\n tf-test-dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_feature_view_vector_search\n friendlyName: test\n description: This is a test description\n location: US\n tf-test-table:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"tf-test-dataset\"].datasetId}\n tableId: example_feature_view_vector_search\n schema: |\n [\n {\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n },\n {\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n },\n {\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n },\n {\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n },\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n ]\n featureviewVectorSearch:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: featureview_vector_search\n properties:\n name: example_feature_view_vector_search\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n bigQuerySource:\n uri: bq://${[\"tf-test-table\"].project}.${[\"tf-test-table\"].datasetId}.${[\"tf-test-table\"].tableId}\n entityIdColumns:\n - test_entity_column\n vectorSearchConfig:\n embeddingColumn: embedding\n filterColumns:\n - country\n crowdingColumn: test_crowding_column\n distanceMeasureType: DOT_PRODUCT_DISTANCE\n treeAhConfig:\n leafNodeEmbeddingCount: '1000'\n embeddingDimension: '2'\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFeatureOnlineStoreFeatureview can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/featureOnlineStores/{{feature_online_store}}/featureViews/{{name}}`\n\n* `{{project}}/{{region}}/{{feature_online_store}}/{{name}}`\n\n* `{{region}}/{{feature_online_store}}/{{name}}`\n\n* `{{feature_online_store}}/{{name}}`\n\nWhen using the `pulumi import` command, FeatureOnlineStoreFeatureview can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default projects/{{project}}/locations/{{region}}/featureOnlineStores/{{feature_online_store}}/featureViews/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{project}}/{{region}}/{{feature_online_store}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{region}}/{{feature_online_store}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{feature_online_store}}/{{name}}\n```\n\n", + "description": "FeatureView is representation of values that the FeatureOnlineStore will serve based on its syncConfig.\n\n\nTo get more information about FeatureOnlineStoreFeatureview, see:\n\n* [API documentation](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featureOnlineStores.featureViews)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/vertex-ai/docs)\n\n## Example Usage\n\n### Vertex Ai Featureonlinestore Featureview\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n});\nconst tf_test_dataset = new gcp.bigquery.Dataset(\"tf-test-dataset\", {\n datasetId: \"example_feature_view\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst tf_test_table = new gcp.bigquery.Table(\"tf-test-table\", {\n deletionProtection: false,\n datasetId: tf_test_dataset.datasetId,\n tableId: \"example_feature_view\",\n schema: ` [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n`,\n});\nconst featureview = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview\", {\n name: \"example_feature_view\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n bigQuerySource: {\n uri: pulumi.interpolate`bq://${tf_test_table.project}.${tf_test_table.datasetId}.${tf_test_table.tableId}`,\n entityIdColumns: [\"test_entity_column\"],\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n })\ntf_test_dataset = gcp.bigquery.Dataset(\"tf-test-dataset\",\n dataset_id=\"example_feature_view\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntf_test_table = gcp.bigquery.Table(\"tf-test-table\",\n deletion_protection=False,\n dataset_id=tf_test_dataset.dataset_id,\n table_id=\"example_feature_view\",\n schema=\"\"\" [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n\"\"\")\nfeatureview = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview\",\n name=\"example_feature_view\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n big_query_source={\n \"uri\": pulumi.Output.all(\n project=tf_test_table.project,\n dataset_id=tf_test_table.dataset_id,\n table_id=tf_test_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"entity_id_columns\": [\"test_entity_column\"],\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n });\n\n var tf_test_dataset = new Gcp.BigQuery.Dataset(\"tf-test-dataset\", new()\n {\n DatasetId = \"example_feature_view\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var tf_test_table = new Gcp.BigQuery.Table(\"tf-test-table\", new()\n {\n DeletionProtection = false,\n DatasetId = tf_test_dataset.DatasetId,\n TableId = \"example_feature_view\",\n Schema = @\" [\n {\n \"\"name\"\": \"\"entity_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"Test default entity_id\"\"\n },\n {\n \"\"name\"\": \"\"test_entity_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"test secondary entity column\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"description\"\": \"\"Default timestamp value\"\"\n }\n]\n\",\n });\n\n var featureview = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview\", new()\n {\n Name = \"example_feature_view\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs\n {\n Uri = Output.Tuple(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n EntityIdColumns = new[]\n {\n \"test_entity_column\",\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\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\t_, err = bigquery.NewDataset(ctx, \"tf-test-dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"tf-test-table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: tf_test_dataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view\"),\n\t\t\tSchema: pulumi.String(` [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tBigQuerySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs{\n\t\t\t\tUri: pulumi.All(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test_entity_column\"),\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\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\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 featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build());\n\n var tf_test_dataset = new Dataset(\"tf-test-dataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var tf_test_table = new Table(\"tf-test-table\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(tf_test_dataset.datasetId())\n .tableId(\"example_feature_view\")\n .schema(\"\"\"\n [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n]\n \"\"\")\n .build());\n\n var featureview = new AiFeatureOnlineStoreFeatureview(\"featureview\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .bigQuerySource(AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs.builder()\n .uri(Output.tuple(tf_test_table.project(), tf_test_table.datasetId(), tf_test_table.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .entityIdColumns(\"test_entity_column\")\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n tf-test-dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_feature_view\n friendlyName: test\n description: This is a test description\n location: US\n tf-test-table:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"tf-test-dataset\"].datasetId}\n tableId: example_feature_view\n schema: |2\n [\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n ]\n featureview:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n properties:\n name: example_feature_view\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n bigQuerySource:\n uri: bq://${[\"tf-test-table\"].project}.${[\"tf-test-table\"].datasetId}.${[\"tf-test-table\"].tableId}\n entityIdColumns:\n - test_entity_column\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview Feature Registry\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view_feature_registry\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n});\nconst sampleDataset = new gcp.bigquery.Dataset(\"sample_dataset\", {\n datasetId: \"example_feature_view_feature_registry\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst sampleTable = new gcp.bigquery.Table(\"sample_table\", {\n deletionProtection: false,\n datasetId: sampleDataset.datasetId,\n tableId: \"example_feature_view_feature_registry\",\n schema: `[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst sampleFeatureGroup = new gcp.vertex.AiFeatureGroup(\"sample_feature_group\", {\n name: \"example_feature_view_feature_registry\",\n description: \"A sample feature group\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n bigQuery: {\n bigQuerySource: {\n inputUri: pulumi.interpolate`bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}`,\n },\n entityIdColumns: [\"feature_id\"],\n },\n});\nconst sampleFeature = new gcp.vertex.AiFeatureGroupFeature(\"sample_feature\", {\n name: \"example_feature_view_feature_registry\",\n region: \"us-central1\",\n featureGroup: sampleFeatureGroup.name,\n description: \"A sample feature\",\n labels: {\n \"label-one\": \"value-one\",\n },\n});\nconst featureviewFeatureregistry = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\", {\n name: \"example_feature_view_feature_registry\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n featureRegistrySource: {\n featureGroups: [{\n featureGroupId: sampleFeatureGroup.name,\n featureIds: [sampleFeature.name],\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view_feature_registry\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n })\nsample_dataset = gcp.bigquery.Dataset(\"sample_dataset\",\n dataset_id=\"example_feature_view_feature_registry\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nsample_table = gcp.bigquery.Table(\"sample_table\",\n deletion_protection=False,\n dataset_id=sample_dataset.dataset_id,\n table_id=\"example_feature_view_feature_registry\",\n schema=\"\"\"[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\nsample_feature_group = gcp.vertex.AiFeatureGroup(\"sample_feature_group\",\n name=\"example_feature_view_feature_registry\",\n description=\"A sample feature group\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n big_query={\n \"big_query_source\": {\n \"input_uri\": pulumi.Output.all(\n project=sample_table.project,\n dataset_id=sample_table.dataset_id,\n table_id=sample_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n },\n \"entity_id_columns\": [\"feature_id\"],\n })\nsample_feature = gcp.vertex.AiFeatureGroupFeature(\"sample_feature\",\n name=\"example_feature_view_feature_registry\",\n region=\"us-central1\",\n feature_group=sample_feature_group.name,\n description=\"A sample feature\",\n labels={\n \"label-one\": \"value-one\",\n })\nfeatureview_featureregistry = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\",\n name=\"example_feature_view_feature_registry\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n feature_registry_source={\n \"feature_groups\": [{\n \"feature_group_id\": sample_feature_group.name,\n \"feature_ids\": [sample_feature.name],\n }],\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n });\n\n var sampleDataset = new Gcp.BigQuery.Dataset(\"sample_dataset\", new()\n {\n DatasetId = \"example_feature_view_feature_registry\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var sampleTable = new Gcp.BigQuery.Table(\"sample_table\", new()\n {\n DeletionProtection = false,\n DatasetId = sampleDataset.DatasetId,\n TableId = \"example_feature_view_feature_registry\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"feature_id\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"example_feature_view_feature_registry\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var sampleFeatureGroup = new Gcp.Vertex.AiFeatureGroup(\"sample_feature_group\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Description = \"A sample feature group\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n BigQuery = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryArgs\n {\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryBigQuerySourceArgs\n {\n InputUri = Output.Tuple(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n },\n EntityIdColumns = new[]\n {\n \"feature_id\",\n },\n },\n });\n\n var sampleFeature = new Gcp.Vertex.AiFeatureGroupFeature(\"sample_feature\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Region = \"us-central1\",\n FeatureGroup = sampleFeatureGroup.Name,\n Description = \"A sample feature\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var featureviewFeatureregistry = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview_featureregistry\", new()\n {\n Name = \"example_feature_view_feature_registry\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n FeatureRegistrySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs\n {\n FeatureGroups = new[]\n {\n new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs\n {\n FeatureGroupId = sampleFeatureGroup.Name,\n FeatureIds = new[]\n {\n sampleFeature.Name,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\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\tsampleDataset, err := bigquery.NewDataset(ctx, \"sample_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleTable, err := bigquery.NewTable(ctx, \"sample_table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeatureGroup, err := vertex.NewAiFeatureGroup(ctx, \"sample_feature_group\", \u0026vertex.AiFeatureGroupArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tDescription: pulumi.String(\"A sample feature group\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tBigQuery: \u0026vertex.AiFeatureGroupBigQueryArgs{\n\t\t\t\tBigQuerySource: \u0026vertex.AiFeatureGroupBigQueryBigQuerySourceArgs{\n\t\t\t\t\tInputUri: pulumi.All(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"feature_id\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeature, err := vertex.NewAiFeatureGroupFeature(ctx, \"sample_feature\", \u0026vertex.AiFeatureGroupFeatureArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureGroup: sampleFeatureGroup.Name,\n\t\t\tDescription: pulumi.String(\"A sample feature\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview_featureregistry\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_feature_registry\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tFeatureRegistrySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs{\n\t\t\t\tFeatureGroups: vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArray{\n\t\t\t\t\t\u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs{\n\t\t\t\t\t\tFeatureGroupId: sampleFeatureGroup.Name,\n\t\t\t\t\t\tFeatureIds: pulumi.StringArray{\n\t\t\t\t\t\t\tsampleFeature.Name,\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\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.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroup;\nimport com.pulumi.gcp.vertex.AiFeatureGroupArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeature;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeatureArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs;\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 featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build());\n\n var sampleDataset = new Dataset(\"sampleDataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view_feature_registry\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var sampleTable = new Table(\"sampleTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(sampleDataset.datasetId())\n .tableId(\"example_feature_view_feature_registry\")\n .schema(\"\"\"\n[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var sampleFeatureGroup = new AiFeatureGroup(\"sampleFeatureGroup\", AiFeatureGroupArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .description(\"A sample feature group\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .bigQuery(AiFeatureGroupBigQueryArgs.builder()\n .bigQuerySource(AiFeatureGroupBigQueryBigQuerySourceArgs.builder()\n .inputUri(Output.tuple(sampleTable.project(), sampleTable.datasetId(), sampleTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .entityIdColumns(\"feature_id\")\n .build())\n .build());\n\n var sampleFeature = new AiFeatureGroupFeature(\"sampleFeature\", AiFeatureGroupFeatureArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .region(\"us-central1\")\n .featureGroup(sampleFeatureGroup.name())\n .description(\"A sample feature\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var featureviewFeatureregistry = new AiFeatureOnlineStoreFeatureview(\"featureviewFeatureregistry\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view_feature_registry\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .featureRegistrySource(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs.builder()\n .featureGroups(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs.builder()\n .featureGroupId(sampleFeatureGroup.name())\n .featureIds(sampleFeature.name())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view_feature_registry\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n sampleDataset:\n type: gcp:bigquery:Dataset\n name: sample_dataset\n properties:\n datasetId: example_feature_view_feature_registry\n friendlyName: test\n description: This is a test description\n location: US\n sampleTable:\n type: gcp:bigquery:Table\n name: sample_table\n properties:\n deletionProtection: false\n datasetId: ${sampleDataset.datasetId}\n tableId: example_feature_view_feature_registry\n schema: |\n [\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_feature_view_feature_registry\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n ]\n sampleFeatureGroup:\n type: gcp:vertex:AiFeatureGroup\n name: sample_feature_group\n properties:\n name: example_feature_view_feature_registry\n description: A sample feature group\n region: us-central1\n labels:\n label-one: value-one\n bigQuery:\n bigQuerySource:\n inputUri: bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}\n entityIdColumns:\n - feature_id\n sampleFeature:\n type: gcp:vertex:AiFeatureGroupFeature\n name: sample_feature\n properties:\n name: example_feature_view_feature_registry\n region: us-central1\n featureGroup: ${sampleFeatureGroup.name}\n description: A sample feature\n labels:\n label-one: value-one\n featureviewFeatureregistry:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: featureview_featureregistry\n properties:\n name: example_feature_view_feature_registry\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n featureRegistrySource:\n featureGroups:\n - featureGroupId: ${sampleFeatureGroup.name}\n featureIds:\n - ${sampleFeature.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview Cross Project\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as time from \"@pulumi/time\";\n\nconst testProject = gcp.organizations.getProject({});\nconst project = new gcp.organizations.Project(\"project\", {\n projectId: \"tf-test_41150\",\n name: \"tf-test_89313\",\n orgId: \"123456789\",\n billingAccount: \"000000-0000000-0000000-000000\",\n deletionPolicy: \"DELETE\",\n});\nconst wait60Seconds = new time.index.Sleep(\"wait_60_seconds\", {createDuration: \"60s\"}, {\n dependsOn: [project],\n});\nconst vertexai = new gcp.projects.Service(\"vertexai\", {\n service: \"aiplatform.googleapis.com\",\n project: project.projectId,\n disableOnDestroy: false,\n}, {\n dependsOn: [wait60Seconds],\n});\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_cross_project_featureview\",\n project: project.projectId,\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n}, {\n dependsOn: [vertexai],\n});\nconst sampleDataset = new gcp.bigquery.Dataset(\"sample_dataset\", {\n datasetId: \"example_cross_project_featureview\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst viewer = new gcp.bigquery.DatasetIamMember(\"viewer\", {\n project: testProject.then(testProject =\u003e testProject.projectId),\n datasetId: sampleDataset.datasetId,\n role: \"roles/bigquery.dataViewer\",\n member: pulumi.interpolate`serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com`,\n}, {\n dependsOn: [featureonlinestore],\n});\nconst wait30Seconds = new time.index.Sleep(\"wait_30_seconds\", {createDuration: \"30s\"}, {\n dependsOn: [viewer],\n});\nconst sampleTable = new gcp.bigquery.Table(\"sample_table\", {\n deletionProtection: false,\n datasetId: sampleDataset.datasetId,\n tableId: \"example_cross_project_featureview\",\n schema: `[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`,\n});\nconst sampleFeatureGroup = new gcp.vertex.AiFeatureGroup(\"sample_feature_group\", {\n name: \"example_cross_project_featureview\",\n description: \"A sample feature group\",\n region: \"us-central1\",\n labels: {\n \"label-one\": \"value-one\",\n },\n bigQuery: {\n bigQuerySource: {\n inputUri: pulumi.interpolate`bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}`,\n },\n entityIdColumns: [\"feature_id\"],\n },\n});\nconst sampleFeature = new gcp.vertex.AiFeatureGroupFeature(\"sample_feature\", {\n name: \"example_cross_project_featureview\",\n region: \"us-central1\",\n featureGroup: sampleFeatureGroup.name,\n description: \"A sample feature\",\n labels: {\n \"label-one\": \"value-one\",\n },\n});\nconst crossProjectFeatureview = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\", {\n name: \"example_cross_project_featureview\",\n project: project.projectId,\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n featureRegistrySource: {\n featureGroups: [{\n featureGroupId: sampleFeatureGroup.name,\n featureIds: [sampleFeature.name],\n }],\n projectNumber: testProject.then(testProject =\u003e testProject.number),\n },\n}, {\n dependsOn: [\n vertexai,\n wait30Seconds,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_time as time\n\ntest_project = gcp.organizations.get_project()\nproject = gcp.organizations.Project(\"project\",\n project_id=\"tf-test_41150\",\n name=\"tf-test_89313\",\n org_id=\"123456789\",\n billing_account=\"000000-0000000-0000000-000000\",\n deletion_policy=\"DELETE\")\nwait60_seconds = time.index.Sleep(\"wait_60_seconds\", create_duration=60s,\nopts = pulumi.ResourceOptions(depends_on=[project]))\nvertexai = gcp.projects.Service(\"vertexai\",\n service=\"aiplatform.googleapis.com\",\n project=project.project_id,\n disable_on_destroy=False,\n opts = pulumi.ResourceOptions(depends_on=[wait60_seconds]))\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_cross_project_featureview\",\n project=project.project_id,\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n },\n opts = pulumi.ResourceOptions(depends_on=[vertexai]))\nsample_dataset = gcp.bigquery.Dataset(\"sample_dataset\",\n dataset_id=\"example_cross_project_featureview\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\nviewer = gcp.bigquery.DatasetIamMember(\"viewer\",\n project=test_project.project_id,\n dataset_id=sample_dataset.dataset_id,\n role=\"roles/bigquery.dataViewer\",\n member=project.number.apply(lambda number: f\"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com\"),\n opts = pulumi.ResourceOptions(depends_on=[featureonlinestore]))\nwait30_seconds = time.index.Sleep(\"wait_30_seconds\", create_duration=30s,\nopts = pulumi.ResourceOptions(depends_on=[viewer]))\nsample_table = gcp.bigquery.Table(\"sample_table\",\n deletion_protection=False,\n dataset_id=sample_dataset.dataset_id,\n table_id=\"example_cross_project_featureview\",\n schema=\"\"\"[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n\"\"\")\nsample_feature_group = gcp.vertex.AiFeatureGroup(\"sample_feature_group\",\n name=\"example_cross_project_featureview\",\n description=\"A sample feature group\",\n region=\"us-central1\",\n labels={\n \"label-one\": \"value-one\",\n },\n big_query={\n \"big_query_source\": {\n \"input_uri\": pulumi.Output.all(\n project=sample_table.project,\n dataset_id=sample_table.dataset_id,\n table_id=sample_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n },\n \"entity_id_columns\": [\"feature_id\"],\n })\nsample_feature = gcp.vertex.AiFeatureGroupFeature(\"sample_feature\",\n name=\"example_cross_project_featureview\",\n region=\"us-central1\",\n feature_group=sample_feature_group.name,\n description=\"A sample feature\",\n labels={\n \"label-one\": \"value-one\",\n })\ncross_project_featureview = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\",\n name=\"example_cross_project_featureview\",\n project=project.project_id,\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n feature_registry_source={\n \"feature_groups\": [{\n \"feature_group_id\": sample_feature_group.name,\n \"feature_ids\": [sample_feature.name],\n }],\n \"project_number\": test_project.number,\n },\n opts = pulumi.ResourceOptions(depends_on=[\n vertexai,\n wait30_seconds,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Time = Pulumi.Time;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testProject = Gcp.Organizations.GetProject.Invoke();\n\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n ProjectId = \"tf-test_41150\",\n Name = \"tf-test_89313\",\n OrgId = \"123456789\",\n BillingAccount = \"000000-0000000-0000000-000000\",\n DeletionPolicy = \"DELETE\",\n });\n\n var wait60Seconds = new Time.Index.Sleep(\"wait_60_seconds\", new()\n {\n CreateDuration = \"60s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n project,\n },\n });\n\n var vertexai = new Gcp.Projects.Service(\"vertexai\", new()\n {\n ServiceName = \"aiplatform.googleapis.com\",\n Project = project.ProjectId,\n DisableOnDestroy = false,\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n wait60Seconds,\n },\n });\n\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_cross_project_featureview\",\n Project = project.ProjectId,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexai,\n },\n });\n\n var sampleDataset = new Gcp.BigQuery.Dataset(\"sample_dataset\", new()\n {\n DatasetId = \"example_cross_project_featureview\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var viewer = new Gcp.BigQuery.DatasetIamMember(\"viewer\", new()\n {\n Project = testProject.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n DatasetId = sampleDataset.DatasetId,\n Role = \"roles/bigquery.dataViewer\",\n Member = project.Number.Apply(number =\u003e $\"serviceAccount:service-{number}@gcp-sa-aiplatform.iam.gserviceaccount.com\"),\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n featureonlinestore,\n },\n });\n\n var wait30Seconds = new Time.Index.Sleep(\"wait_30_seconds\", new()\n {\n CreateDuration = \"30s\",\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n viewer,\n },\n });\n\n var sampleTable = new Gcp.BigQuery.Table(\"sample_table\", new()\n {\n DeletionProtection = false,\n DatasetId = sampleDataset.DatasetId,\n TableId = \"example_cross_project_featureview\",\n Schema = @\"[\n {\n \"\"name\"\": \"\"feature_id\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"example_cross_project_featureview\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n },\n {\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"mode\"\": \"\"NULLABLE\"\"\n }\n]\n\",\n });\n\n var sampleFeatureGroup = new Gcp.Vertex.AiFeatureGroup(\"sample_feature_group\", new()\n {\n Name = \"example_cross_project_featureview\",\n Description = \"A sample feature group\",\n Region = \"us-central1\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n BigQuery = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryArgs\n {\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureGroupBigQueryBigQuerySourceArgs\n {\n InputUri = Output.Tuple(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n },\n EntityIdColumns = new[]\n {\n \"feature_id\",\n },\n },\n });\n\n var sampleFeature = new Gcp.Vertex.AiFeatureGroupFeature(\"sample_feature\", new()\n {\n Name = \"example_cross_project_featureview\",\n Region = \"us-central1\",\n FeatureGroup = sampleFeatureGroup.Name,\n Description = \"A sample feature\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var crossProjectFeatureview = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"cross_project_featureview\", new()\n {\n Name = \"example_cross_project_featureview\",\n Project = project.ProjectId,\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n FeatureRegistrySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs\n {\n FeatureGroups = new[]\n {\n new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs\n {\n FeatureGroupId = sampleFeatureGroup.Name,\n FeatureIds = new[]\n {\n sampleFeature.Name,\n },\n },\n },\n ProjectNumber = testProject.Apply(getProjectResult =\u003e getProjectResult.Number),\n },\n }, new CustomResourceOptions\n {\n DependsOn =\n {\n vertexai,\n wait30Seconds,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi-time/sdk/go/time\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestProject, err := organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test_41150\"),\n\t\t\tName: pulumi.String(\"tf-test_89313\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tBillingAccount: pulumi.String(\"000000-0000000-0000000-000000\"),\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait60Seconds, err := time.NewSleep(ctx, \"wait_60_seconds\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"60s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tproject,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvertexai, err := projects.NewService(ctx, \"vertexai\", \u0026projects.ServiceArgs{\n\t\t\tService: pulumi.String(\"aiplatform.googleapis.com\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tDisableOnDestroy: pulumi.Bool(false),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\twait60Seconds,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexai,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleDataset, err := bigquery.NewDataset(ctx, \"sample_dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tviewer, err := bigquery.NewDatasetIamMember(ctx, \"viewer\", \u0026bigquery.DatasetIamMemberArgs{\n\t\t\tProject: pulumi.String(testProject.ProjectId),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tRole: pulumi.String(\"roles/bigquery.dataViewer\"),\n\t\t\tMember: project.Number.ApplyT(func(number string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-aiplatform.iam.gserviceaccount.com\", number), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfeatureonlinestore,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twait30Seconds, err := time.NewSleep(ctx, \"wait_30_seconds\", \u0026time.SleepArgs{\n\t\t\tCreateDuration: \"30s\",\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tviewer,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleTable, err := bigquery.NewTable(ctx, \"sample_table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: sampleDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tSchema: pulumi.String(`[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeatureGroup, err := vertex.NewAiFeatureGroup(ctx, \"sample_feature_group\", \u0026vertex.AiFeatureGroupArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tDescription: pulumi.String(\"A sample feature group\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tBigQuery: \u0026vertex.AiFeatureGroupBigQueryArgs{\n\t\t\t\tBigQuerySource: \u0026vertex.AiFeatureGroupBigQueryBigQuerySourceArgs{\n\t\t\t\t\tInputUri: pulumi.All(sampleTable.Project, sampleTable.DatasetId, sampleTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"feature_id\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsampleFeature, err := vertex.NewAiFeatureGroupFeature(ctx, \"sample_feature\", \u0026vertex.AiFeatureGroupFeatureArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureGroup: sampleFeatureGroup.Name,\n\t\t\tDescription: pulumi.String(\"A sample feature\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"cross_project_featureview\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_cross_project_featureview\"),\n\t\t\tProject: project.ProjectId,\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tFeatureRegistrySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs{\n\t\t\t\tFeatureGroups: vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArray{\n\t\t\t\t\t\u0026vertex.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs{\n\t\t\t\t\t\tFeatureGroupId: sampleFeatureGroup.Name,\n\t\t\t\t\t\tFeatureIds: pulumi.StringArray{\n\t\t\t\t\t\t\tsampleFeature.Name,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tProjectNumber: pulumi.String(testProject.Number),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tvertexai,\n\t\t\twait30Seconds,\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.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.time.sleep;\nimport com.pulumi.time.SleepArgs;\nimport com.pulumi.gcp.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.DatasetIamMember;\nimport com.pulumi.gcp.bigquery.DatasetIamMemberArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroup;\nimport com.pulumi.gcp.vertex.AiFeatureGroupArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureGroupBigQueryBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeature;\nimport com.pulumi.gcp.vertex.AiFeatureGroupFeatureArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var testProject = OrganizationsFunctions.getProject();\n\n var project = new Project(\"project\", ProjectArgs.builder()\n .projectId(\"tf-test_41150\")\n .name(\"tf-test_89313\")\n .orgId(\"123456789\")\n .billingAccount(\"000000-0000000-0000000-000000\")\n .deletionPolicy(\"DELETE\")\n .build());\n\n var wait60Seconds = new Sleep(\"wait60Seconds\", SleepArgs.builder()\n .createDuration(\"60s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(project)\n .build());\n\n var vertexai = new Service(\"vertexai\", ServiceArgs.builder()\n .service(\"aiplatform.googleapis.com\")\n .project(project.projectId())\n .disableOnDestroy(false)\n .build(), CustomResourceOptions.builder()\n .dependsOn(wait60Seconds)\n .build());\n\n var featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_cross_project_featureview\")\n .project(project.projectId())\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(vertexai)\n .build());\n\n var sampleDataset = new Dataset(\"sampleDataset\", DatasetArgs.builder()\n .datasetId(\"example_cross_project_featureview\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var viewer = new DatasetIamMember(\"viewer\", DatasetIamMemberArgs.builder()\n .project(testProject.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .datasetId(sampleDataset.datasetId())\n .role(\"roles/bigquery.dataViewer\")\n .member(project.number().applyValue(number -\u003e String.format(\"serviceAccount:service-%s@gcp-sa-aiplatform.iam.gserviceaccount.com\", number)))\n .build(), CustomResourceOptions.builder()\n .dependsOn(featureonlinestore)\n .build());\n\n var wait30Seconds = new Sleep(\"wait30Seconds\", SleepArgs.builder()\n .createDuration(\"30s\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(viewer)\n .build());\n\n var sampleTable = new Table(\"sampleTable\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(sampleDataset.datasetId())\n .tableId(\"example_cross_project_featureview\")\n .schema(\"\"\"\n[\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n]\n \"\"\")\n .build());\n\n var sampleFeatureGroup = new AiFeatureGroup(\"sampleFeatureGroup\", AiFeatureGroupArgs.builder()\n .name(\"example_cross_project_featureview\")\n .description(\"A sample feature group\")\n .region(\"us-central1\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .bigQuery(AiFeatureGroupBigQueryArgs.builder()\n .bigQuerySource(AiFeatureGroupBigQueryBigQuerySourceArgs.builder()\n .inputUri(Output.tuple(sampleTable.project(), sampleTable.datasetId(), sampleTable.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .build())\n .entityIdColumns(\"feature_id\")\n .build())\n .build());\n\n var sampleFeature = new AiFeatureGroupFeature(\"sampleFeature\", AiFeatureGroupFeatureArgs.builder()\n .name(\"example_cross_project_featureview\")\n .region(\"us-central1\")\n .featureGroup(sampleFeatureGroup.name())\n .description(\"A sample feature\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var crossProjectFeatureview = new AiFeatureOnlineStoreFeatureview(\"crossProjectFeatureview\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_cross_project_featureview\")\n .project(project.projectId())\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .featureRegistrySource(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceArgs.builder()\n .featureGroups(AiFeatureOnlineStoreFeatureviewFeatureRegistrySourceFeatureGroupArgs.builder()\n .featureGroupId(sampleFeatureGroup.name())\n .featureIds(sampleFeature.name())\n .build())\n .projectNumber(testProject.applyValue(getProjectResult -\u003e getProjectResult.number()))\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n vertexai,\n wait30Seconds)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test_41150\n name: tf-test_89313\n orgId: '123456789'\n billingAccount: 000000-0000000-0000000-000000\n deletionPolicy: DELETE\n wait60Seconds:\n type: time:sleep\n name: wait_60_seconds\n properties:\n createDuration: 60s\n options:\n dependson:\n - ${project}\n wait30Seconds:\n type: time:sleep\n name: wait_30_seconds\n properties:\n createDuration: 30s\n options:\n dependson:\n - ${viewer}\n vertexai:\n type: gcp:projects:Service\n properties:\n service: aiplatform.googleapis.com\n project: ${project.projectId}\n disableOnDestroy: false # Needed for CI tests for permissions to propagate, should not be needed for actual usage\n options:\n dependson:\n - ${wait60Seconds}\n viewer:\n type: gcp:bigquery:DatasetIamMember\n properties:\n project: ${testProject.projectId}\n datasetId: ${sampleDataset.datasetId}\n role: roles/bigquery.dataViewer\n member: serviceAccount:service-${project.number}@gcp-sa-aiplatform.iam.gserviceaccount.com\n options:\n dependson:\n - ${featureonlinestore}\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_cross_project_featureview\n project: ${project.projectId}\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n options:\n dependson:\n - ${vertexai}\n sampleDataset:\n type: gcp:bigquery:Dataset\n name: sample_dataset\n properties:\n datasetId: example_cross_project_featureview\n friendlyName: test\n description: This is a test description\n location: US\n sampleTable:\n type: gcp:bigquery:Table\n name: sample_table\n properties:\n deletionProtection: false\n datasetId: ${sampleDataset.datasetId}\n tableId: example_cross_project_featureview\n schema: |\n [\n {\n \"name\": \"feature_id\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"example_cross_project_featureview\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"type\": \"TIMESTAMP\",\n \"mode\": \"NULLABLE\"\n }\n ]\n sampleFeatureGroup:\n type: gcp:vertex:AiFeatureGroup\n name: sample_feature_group\n properties:\n name: example_cross_project_featureview\n description: A sample feature group\n region: us-central1\n labels:\n label-one: value-one\n bigQuery:\n bigQuerySource:\n inputUri: bq://${sampleTable.project}.${sampleTable.datasetId}.${sampleTable.tableId}\n entityIdColumns:\n - feature_id\n sampleFeature:\n type: gcp:vertex:AiFeatureGroupFeature\n name: sample_feature\n properties:\n name: example_cross_project_featureview\n region: us-central1\n featureGroup: ${sampleFeatureGroup.name}\n description: A sample feature\n labels:\n label-one: value-one\n crossProjectFeatureview:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: cross_project_featureview\n properties:\n name: example_cross_project_featureview\n project: ${project.projectId}\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n featureRegistrySource:\n featureGroups:\n - featureGroupId: ${sampleFeatureGroup.name}\n featureIds:\n - ${sampleFeature.name}\n projectNumber: ${testProject.number}\n options:\n dependson:\n - ${vertexai}\n - ${wait30Seconds}\nvariables:\n testProject:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Vertex Ai Featureonlinestore Featureview With Vector Search\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst featureonlinestore = new gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\", {\n name: \"example_feature_view_vector_search\",\n labels: {\n foo: \"bar\",\n },\n region: \"us-central1\",\n bigtable: {\n autoScaling: {\n minNodeCount: 1,\n maxNodeCount: 2,\n cpuUtilizationTarget: 80,\n },\n },\n embeddingManagement: {\n enabled: true,\n },\n});\nconst tf_test_dataset = new gcp.bigquery.Dataset(\"tf-test-dataset\", {\n datasetId: \"example_feature_view_vector_search\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n});\nconst tf_test_table = new gcp.bigquery.Table(\"tf-test-table\", {\n deletionProtection: false,\n datasetId: tf_test_dataset.datasetId,\n tableId: \"example_feature_view_vector_search\",\n schema: `[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n`,\n});\nconst featureviewVectorSearch = new gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\", {\n name: \"example_feature_view_vector_search\",\n region: \"us-central1\",\n featureOnlineStore: featureonlinestore.name,\n syncConfig: {\n cron: \"0 0 * * *\",\n },\n bigQuerySource: {\n uri: pulumi.interpolate`bq://${tf_test_table.project}.${tf_test_table.datasetId}.${tf_test_table.tableId}`,\n entityIdColumns: [\"test_entity_column\"],\n },\n vectorSearchConfig: {\n embeddingColumn: \"embedding\",\n filterColumns: [\"country\"],\n crowdingColumn: \"test_crowding_column\",\n distanceMeasureType: \"DOT_PRODUCT_DISTANCE\",\n treeAhConfig: {\n leafNodeEmbeddingCount: \"1000\",\n },\n embeddingDimension: 2,\n },\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfeatureonlinestore = gcp.vertex.AiFeatureOnlineStore(\"featureonlinestore\",\n name=\"example_feature_view_vector_search\",\n labels={\n \"foo\": \"bar\",\n },\n region=\"us-central1\",\n bigtable={\n \"auto_scaling\": {\n \"min_node_count\": 1,\n \"max_node_count\": 2,\n \"cpu_utilization_target\": 80,\n },\n },\n embedding_management={\n \"enabled\": True,\n })\ntf_test_dataset = gcp.bigquery.Dataset(\"tf-test-dataset\",\n dataset_id=\"example_feature_view_vector_search\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\")\ntf_test_table = gcp.bigquery.Table(\"tf-test-table\",\n deletion_protection=False,\n dataset_id=tf_test_dataset.dataset_id,\n table_id=\"example_feature_view_vector_search\",\n schema=\"\"\"[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n\"\"\")\nfeatureview_vector_search = gcp.vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\",\n name=\"example_feature_view_vector_search\",\n region=\"us-central1\",\n feature_online_store=featureonlinestore.name,\n sync_config={\n \"cron\": \"0 0 * * *\",\n },\n big_query_source={\n \"uri\": pulumi.Output.all(\n project=tf_test_table.project,\n dataset_id=tf_test_table.dataset_id,\n table_id=tf_test_table.table_id\n).apply(lambda resolved_outputs: f\"bq://{resolved_outputs['project']}.{resolved_outputs['dataset_id']}.{resolved_outputs['table_id']}\")\n,\n \"entity_id_columns\": [\"test_entity_column\"],\n },\n vector_search_config={\n \"embedding_column\": \"embedding\",\n \"filter_columns\": [\"country\"],\n \"crowding_column\": \"test_crowding_column\",\n \"distance_measure_type\": \"DOT_PRODUCT_DISTANCE\",\n \"tree_ah_config\": {\n \"leaf_node_embedding_count\": \"1000\",\n },\n \"embedding_dimension\": 2,\n })\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var featureonlinestore = new Gcp.Vertex.AiFeatureOnlineStore(\"featureonlinestore\", new()\n {\n Name = \"example_feature_view_vector_search\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n Region = \"us-central1\",\n Bigtable = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableArgs\n {\n AutoScaling = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs\n {\n MinNodeCount = 1,\n MaxNodeCount = 2,\n CpuUtilizationTarget = 80,\n },\n },\n EmbeddingManagement = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreEmbeddingManagementArgs\n {\n Enabled = true,\n },\n });\n\n var tf_test_dataset = new Gcp.BigQuery.Dataset(\"tf-test-dataset\", new()\n {\n DatasetId = \"example_feature_view_vector_search\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n });\n\n var tf_test_table = new Gcp.BigQuery.Table(\"tf-test-table\", new()\n {\n DeletionProtection = false,\n DatasetId = tf_test_dataset.DatasetId,\n TableId = \"example_feature_view_vector_search\",\n Schema = @\"[\n{\n \"\"name\"\": \"\"test_primary_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"primary test id\"\"\n},\n{\n \"\"name\"\": \"\"embedding\"\",\n \"\"mode\"\": \"\"REPEATED\"\",\n \"\"type\"\": \"\"FLOAT\"\",\n \"\"description\"\": \"\"embedding column for primary_id column\"\"\n},\n{\n \"\"name\"\": \"\"country\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"country\"\"\n},\n{\n \"\"name\"\": \"\"test_crowding_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"INTEGER\"\",\n \"\"description\"\": \"\"test crowding column\"\"\n},\n{\n \"\"name\"\": \"\"entity_id\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"Test default entity_id\"\"\n},\n{\n \"\"name\"\": \"\"test_entity_column\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"description\"\": \"\"test secondary entity column\"\"\n},\n{\n \"\"name\"\": \"\"feature_timestamp\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"type\"\": \"\"TIMESTAMP\"\",\n \"\"description\"\": \"\"Default timestamp value\"\"\n}\n]\n\",\n });\n\n var featureviewVectorSearch = new Gcp.Vertex.AiFeatureOnlineStoreFeatureview(\"featureview_vector_search\", new()\n {\n Name = \"example_feature_view_vector_search\",\n Region = \"us-central1\",\n FeatureOnlineStore = featureonlinestore.Name,\n SyncConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs\n {\n Cron = \"0 0 * * *\",\n },\n BigQuerySource = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs\n {\n Uri = Output.Tuple(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n var tableId = values.Item3;\n return $\"bq://{project}.{datasetId}.{tableId}\";\n }),\n EntityIdColumns = new[]\n {\n \"test_entity_column\",\n },\n },\n VectorSearchConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs\n {\n EmbeddingColumn = \"embedding\",\n FilterColumns = new[]\n {\n \"country\",\n },\n CrowdingColumn = \"test_crowding_column\",\n DistanceMeasureType = \"DOT_PRODUCT_DISTANCE\",\n TreeAhConfig = new Gcp.Vertex.Inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs\n {\n LeafNodeEmbeddingCount = \"1000\",\n },\n EmbeddingDimension = 2,\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/vertex\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tfeatureonlinestore, err := vertex.NewAiFeatureOnlineStore(ctx, \"featureonlinestore\", \u0026vertex.AiFeatureOnlineStoreArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tBigtable: \u0026vertex.AiFeatureOnlineStoreBigtableArgs{\n\t\t\t\tAutoScaling: \u0026vertex.AiFeatureOnlineStoreBigtableAutoScalingArgs{\n\t\t\t\t\tMinNodeCount: pulumi.Int(1),\n\t\t\t\t\tMaxNodeCount: pulumi.Int(2),\n\t\t\t\t\tCpuUtilizationTarget: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t},\n\t\t\tEmbeddingManagement: \u0026vertex.AiFeatureOnlineStoreEmbeddingManagementArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewDataset(ctx, \"tf-test-dataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"tf-test-table\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: tf_test_dataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tSchema: pulumi.String(`[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n`),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = vertex.NewAiFeatureOnlineStoreFeatureview(ctx, \"featureview_vector_search\", \u0026vertex.AiFeatureOnlineStoreFeatureviewArgs{\n\t\t\tName: pulumi.String(\"example_feature_view_vector_search\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tFeatureOnlineStore: featureonlinestore.Name,\n\t\t\tSyncConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewSyncConfigArgs{\n\t\t\t\tCron: pulumi.String(\"0 0 * * *\"),\n\t\t\t},\n\t\t\tBigQuerySource: \u0026vertex.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs{\n\t\t\t\tUri: pulumi.All(tf_test_table.Project, tf_test_table.DatasetId, tf_test_table.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\tEntityIdColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"test_entity_column\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tVectorSearchConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs{\n\t\t\t\tEmbeddingColumn: pulumi.String(\"embedding\"),\n\t\t\t\tFilterColumns: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"country\"),\n\t\t\t\t},\n\t\t\t\tCrowdingColumn: pulumi.String(\"test_crowding_column\"),\n\t\t\t\tDistanceMeasureType: pulumi.String(\"DOT_PRODUCT_DISTANCE\"),\n\t\t\t\tTreeAhConfig: \u0026vertex.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs{\n\t\t\t\t\tLeafNodeEmbeddingCount: pulumi.String(\"1000\"),\n\t\t\t\t},\n\t\t\t\tEmbeddingDimension: pulumi.Int(2),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, \u0026organizations.LookupProjectArgs{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStore;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreBigtableAutoScalingArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreEmbeddingManagementArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureview;\nimport com.pulumi.gcp.vertex.AiFeatureOnlineStoreFeatureviewArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewSyncConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs;\nimport com.pulumi.gcp.vertex.inputs.AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\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 featureonlinestore = new AiFeatureOnlineStore(\"featureonlinestore\", AiFeatureOnlineStoreArgs.builder()\n .name(\"example_feature_view_vector_search\")\n .labels(Map.of(\"foo\", \"bar\"))\n .region(\"us-central1\")\n .bigtable(AiFeatureOnlineStoreBigtableArgs.builder()\n .autoScaling(AiFeatureOnlineStoreBigtableAutoScalingArgs.builder()\n .minNodeCount(1)\n .maxNodeCount(2)\n .cpuUtilizationTarget(80)\n .build())\n .build())\n .embeddingManagement(AiFeatureOnlineStoreEmbeddingManagementArgs.builder()\n .enabled(true)\n .build())\n .build());\n\n var tf_test_dataset = new Dataset(\"tf-test-dataset\", DatasetArgs.builder()\n .datasetId(\"example_feature_view_vector_search\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .build());\n\n var tf_test_table = new Table(\"tf-test-table\", TableArgs.builder()\n .deletionProtection(false)\n .datasetId(tf_test_dataset.datasetId())\n .tableId(\"example_feature_view_vector_search\")\n .schema(\"\"\"\n[\n{\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n},\n{\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n},\n{\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n},\n{\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n},\n{\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n},\n{\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n},\n{\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n}\n]\n \"\"\")\n .build());\n\n var featureviewVectorSearch = new AiFeatureOnlineStoreFeatureview(\"featureviewVectorSearch\", AiFeatureOnlineStoreFeatureviewArgs.builder()\n .name(\"example_feature_view_vector_search\")\n .region(\"us-central1\")\n .featureOnlineStore(featureonlinestore.name())\n .syncConfig(AiFeatureOnlineStoreFeatureviewSyncConfigArgs.builder()\n .cron(\"0 0 * * *\")\n .build())\n .bigQuerySource(AiFeatureOnlineStoreFeatureviewBigQuerySourceArgs.builder()\n .uri(Output.tuple(tf_test_table.project(), tf_test_table.datasetId(), tf_test_table.tableId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n var tableId = values.t3;\n return String.format(\"bq://%s.%s.%s\", project,datasetId,tableId);\n }))\n .entityIdColumns(\"test_entity_column\")\n .build())\n .vectorSearchConfig(AiFeatureOnlineStoreFeatureviewVectorSearchConfigArgs.builder()\n .embeddingColumn(\"embedding\")\n .filterColumns(\"country\")\n .crowdingColumn(\"test_crowding_column\")\n .distanceMeasureType(\"DOT_PRODUCT_DISTANCE\")\n .treeAhConfig(AiFeatureOnlineStoreFeatureviewVectorSearchConfigTreeAhConfigArgs.builder()\n .leafNodeEmbeddingCount(\"1000\")\n .build())\n .embeddingDimension(\"2\")\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n featureonlinestore:\n type: gcp:vertex:AiFeatureOnlineStore\n properties:\n name: example_feature_view_vector_search\n labels:\n foo: bar\n region: us-central1\n bigtable:\n autoScaling:\n minNodeCount: 1\n maxNodeCount: 2\n cpuUtilizationTarget: 80\n embeddingManagement:\n enabled: true\n tf-test-dataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: example_feature_view_vector_search\n friendlyName: test\n description: This is a test description\n location: US\n tf-test-table:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${[\"tf-test-dataset\"].datasetId}\n tableId: example_feature_view_vector_search\n schema: |\n [\n {\n \"name\": \"test_primary_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"primary test id\"\n },\n {\n \"name\": \"embedding\",\n \"mode\": \"REPEATED\",\n \"type\": \"FLOAT\",\n \"description\": \"embedding column for primary_id column\"\n },\n {\n \"name\": \"country\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"country\"\n },\n {\n \"name\": \"test_crowding_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"INTEGER\",\n \"description\": \"test crowding column\"\n },\n {\n \"name\": \"entity_id\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"Test default entity_id\"\n },\n {\n \"name\": \"test_entity_column\",\n \"mode\": \"NULLABLE\",\n \"type\": \"STRING\",\n \"description\": \"test secondary entity column\"\n },\n {\n \"name\": \"feature_timestamp\",\n \"mode\": \"NULLABLE\",\n \"type\": \"TIMESTAMP\",\n \"description\": \"Default timestamp value\"\n }\n ]\n featureviewVectorSearch:\n type: gcp:vertex:AiFeatureOnlineStoreFeatureview\n name: featureview_vector_search\n properties:\n name: example_feature_view_vector_search\n region: us-central1\n featureOnlineStore: ${featureonlinestore.name}\n syncConfig:\n cron: 0 0 * * *\n bigQuerySource:\n uri: bq://${[\"tf-test-table\"].project}.${[\"tf-test-table\"].datasetId}.${[\"tf-test-table\"].tableId}\n entityIdColumns:\n - test_entity_column\n vectorSearchConfig:\n embeddingColumn: embedding\n filterColumns:\n - country\n crowdingColumn: test_crowding_column\n distanceMeasureType: DOT_PRODUCT_DISTANCE\n treeAhConfig:\n leafNodeEmbeddingCount: '1000'\n embeddingDimension: '2'\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nFeatureOnlineStoreFeatureview can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{region}}/featureOnlineStores/{{feature_online_store}}/featureViews/{{name}}`\n\n* `{{project}}/{{region}}/{{feature_online_store}}/{{name}}`\n\n* `{{region}}/{{feature_online_store}}/{{name}}`\n\n* `{{feature_online_store}}/{{name}}`\n\nWhen using the `pulumi import` command, FeatureOnlineStoreFeatureview can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default projects/{{project}}/locations/{{region}}/featureOnlineStores/{{feature_online_store}}/featureViews/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{project}}/{{region}}/{{feature_online_store}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{region}}/{{feature_online_store}}/{{name}}\n```\n\n```sh\n$ pulumi import gcp:vertex/aiFeatureOnlineStoreFeatureview:AiFeatureOnlineStoreFeatureview default {{feature_online_store}}/{{name}}\n```\n\n", "properties": { "bigQuerySource": { "$ref": "#/types/gcp:vertex/AiFeatureOnlineStoreFeatureviewBigQuerySource:AiFeatureOnlineStoreFeatureviewBigQuerySource", @@ -271854,7 +275123,7 @@ "items": { "type": "string" }, - "description": "'Optional. Input only. The owner of this instance after creation. Format:\n`alias@example.com` Currently supports one owner only. If not specified, all of\nthe service account users of your VM instance''s service account can use the instance.'\n" + "description": "'Optional. Input only. The owner of this instance after creation. Format:\n`alias@example.com` Currently supports one owner only. If not specified, all of\nthe service account users of your VM instance''s service account can use the instance.\nIf specified, sets the access mode to `Single user`. For more details, see\nhttps://cloud.google.com/vertex-ai/docs/workbench/instances/manage-access-jupyterlab'\n" }, "labels": { "type": "object", @@ -271943,7 +275212,7 @@ "items": { "type": "string" }, - "description": "'Optional. Input only. The owner of this instance after creation. Format:\n`alias@example.com` Currently supports one owner only. If not specified, all of\nthe service account users of your VM instance''s service account can use the instance.'\n", + "description": "'Optional. Input only. The owner of this instance after creation. Format:\n`alias@example.com` Currently supports one owner only. If not specified, all of\nthe service account users of your VM instance''s service account can use the instance.\nIf specified, sets the access mode to `Single user`. For more details, see\nhttps://cloud.google.com/vertex-ai/docs/workbench/instances/manage-access-jupyterlab'\n", "willReplaceOnChanges": true }, "labels": { @@ -272025,7 +275294,7 @@ "items": { "type": "string" }, - "description": "'Optional. Input only. The owner of this instance after creation. Format:\n`alias@example.com` Currently supports one owner only. If not specified, all of\nthe service account users of your VM instance''s service account can use the instance.'\n", + "description": "'Optional. Input only. The owner of this instance after creation. Format:\n`alias@example.com` Currently supports one owner only. If not specified, all of\nthe service account users of your VM instance''s service account can use the instance.\nIf specified, sets the access mode to `Single user`. For more details, see\nhttps://cloud.google.com/vertex-ai/docs/workbench/instances/manage-access-jupyterlab'\n", "willReplaceOnChanges": true }, "labels": { @@ -272351,7 +275620,7 @@ } }, "gcp:workflows/workflow:Workflow": { - "description": "Workflow program to be executed by Workflows.\n\n\nTo get more information about Workflow, see:\n\n* [API documentation](https://cloud.google.com/workflows/docs/reference/rest/v1/projects.locations.workflows)\n* How-to Guides\n * [Managing Workflows](https://cloud.google.com/workflows/docs/creating-updating-workflow)\n\n## Example Usage\n\n### Workflow Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst testAccount = new gcp.serviceaccount.Account(\"test_account\", {\n accountId: \"my-account\",\n displayName: \"Test Service Account\",\n});\nconst example = new gcp.workflows.Workflow(\"example\", {\n name: \"workflow\",\n region: \"us-central1\",\n description: \"Magic\",\n serviceAccount: testAccount.id,\n callLogLevel: \"LOG_ERRORS_ONLY\",\n labels: {\n env: \"test\",\n },\n userEnvVars: {\n url: \"https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam\",\n },\n sourceContents: `# This is a sample workflow. You can replace it with your source code.\n#\n# This workflow does the following:\n# - reads current time and date information from an external API and stores\n# the response in currentTime variable\n# - retrieves a list of Wikipedia articles related to the day of the week\n# from currentTime\n# - returns the list of articles as an output of the workflow\n#\n# Note: In Terraform you need to escape the or it will cause errors.\n\n- getCurrentTime:\n call: http.get\n args:\n url: \\${sys.get_env(\"url\")}\n result: currentTime\n- readWikipedia:\n call: http.get\n args:\n url: https://en.wikipedia.org/w/api.php\n query:\n action: opensearch\n search: \\${currentTime.body.dayOfWeek}\n result: wikiResult\n- returnOutput:\n return: \\${wikiResult.body[1]}\n`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest_account = gcp.serviceaccount.Account(\"test_account\",\n account_id=\"my-account\",\n display_name=\"Test Service Account\")\nexample = gcp.workflows.Workflow(\"example\",\n name=\"workflow\",\n region=\"us-central1\",\n description=\"Magic\",\n service_account=test_account.id,\n call_log_level=\"LOG_ERRORS_ONLY\",\n labels={\n \"env\": \"test\",\n },\n user_env_vars={\n \"url\": \"https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam\",\n },\n source_contents=\"\"\"# This is a sample workflow. You can replace it with your source code.\n#\n# This workflow does the following:\n# - reads current time and date information from an external API and stores\n# the response in currentTime variable\n# - retrieves a list of Wikipedia articles related to the day of the week\n# from currentTime\n# - returns the list of articles as an output of the workflow\n#\n# Note: In Terraform you need to escape the $$ or it will cause errors.\n\n- getCurrentTime:\n call: http.get\n args:\n url: ${sys.get_env(\"url\")}\n result: currentTime\n- readWikipedia:\n call: http.get\n args:\n url: https://en.wikipedia.org/w/api.php\n query:\n action: opensearch\n search: ${currentTime.body.dayOfWeek}\n result: wikiResult\n- returnOutput:\n return: ${wikiResult.body[1]}\n\"\"\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testAccount = new Gcp.ServiceAccount.Account(\"test_account\", new()\n {\n AccountId = \"my-account\",\n DisplayName = \"Test Service Account\",\n });\n\n var example = new Gcp.Workflows.Workflow(\"example\", new()\n {\n Name = \"workflow\",\n Region = \"us-central1\",\n Description = \"Magic\",\n ServiceAccount = testAccount.Id,\n CallLogLevel = \"LOG_ERRORS_ONLY\",\n Labels = \n {\n { \"env\", \"test\" },\n },\n UserEnvVars = \n {\n { \"url\", \"https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam\" },\n },\n SourceContents = @\"# This is a sample workflow. You can replace it with your source code.\n#\n# This workflow does the following:\n# - reads current time and date information from an external API and stores\n# the response in currentTime variable\n# - retrieves a list of Wikipedia articles related to the day of the week\n# from currentTime\n# - returns the list of articles as an output of the workflow\n#\n# Note: In Terraform you need to escape the $$ or it will cause errors.\n\n- getCurrentTime:\n call: http.get\n args:\n url: ${sys.get_env(\"\"url\"\")}\n result: currentTime\n- readWikipedia:\n call: http.get\n args:\n url: https://en.wikipedia.org/w/api.php\n query:\n action: opensearch\n search: ${currentTime.body.dayOfWeek}\n result: wikiResult\n- returnOutput:\n return: ${wikiResult.body[1]}\n\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workflows\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestAccount, err := serviceaccount.NewAccount(ctx, \"test_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-account\"),\n\t\t\tDisplayName: pulumi.String(\"Test Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workflows.NewWorkflow(ctx, \"example\", \u0026workflows.WorkflowArgs{\n\t\t\tName: pulumi.String(\"workflow\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"Magic\"),\n\t\t\tServiceAccount: testAccount.ID(),\n\t\t\tCallLogLevel: pulumi.String(\"LOG_ERRORS_ONLY\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"test\"),\n\t\t\t},\n\t\t\tUserEnvVars: pulumi.StringMap{\n\t\t\t\t\"url\": pulumi.String(\"https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam\"),\n\t\t\t},\n\t\t\tSourceContents: pulumi.String(`# This is a sample workflow. You can replace it with your source code.\n#\n# This workflow does the following:\n# - reads current time and date information from an external API and stores\n# the response in currentTime variable\n# - retrieves a list of Wikipedia articles related to the day of the week\n# from currentTime\n# - returns the list of articles as an output of the workflow\n#\n# Note: In Terraform you need to escape the $$ or it will cause errors.\n\n- getCurrentTime:\n call: http.get\n args:\n url: ${sys.get_env(\"url\")}\n result: currentTime\n- readWikipedia:\n call: http.get\n args:\n url: https://en.wikipedia.org/w/api.php\n query:\n action: opensearch\n search: ${currentTime.body.dayOfWeek}\n result: wikiResult\n- returnOutput:\n return: ${wikiResult.body[1]}\n`),\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.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.workflows.Workflow;\nimport com.pulumi.gcp.workflows.WorkflowArgs;\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 testAccount = new Account(\"testAccount\", AccountArgs.builder()\n .accountId(\"my-account\")\n .displayName(\"Test Service Account\")\n .build());\n\n var example = new Workflow(\"example\", WorkflowArgs.builder()\n .name(\"workflow\")\n .region(\"us-central1\")\n .description(\"Magic\")\n .serviceAccount(testAccount.id())\n .callLogLevel(\"LOG_ERRORS_ONLY\")\n .labels(Map.of(\"env\", \"test\"))\n .userEnvVars(Map.of(\"url\", \"https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam\"))\n .sourceContents(\"\"\"\n# This is a sample workflow. You can replace it with your source code.\n#\n# This workflow does the following:\n# - reads current time and date information from an external API and stores\n# the response in currentTime variable\n# - retrieves a list of Wikipedia articles related to the day of the week\n# from currentTime\n# - returns the list of articles as an output of the workflow\n#\n# Note: In Terraform you need to escape the $$ or it will cause errors.\n\n- getCurrentTime:\n call: http.get\n args:\n url: ${sys.get_env(\"url\")}\n result: currentTime\n- readWikipedia:\n call: http.get\n args:\n url: https://en.wikipedia.org/w/api.php\n query:\n action: opensearch\n search: ${currentTime.body.dayOfWeek}\n result: wikiResult\n- returnOutput:\n return: ${wikiResult.body[1]}\n \"\"\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n testAccount:\n type: gcp:serviceaccount:Account\n name: test_account\n properties:\n accountId: my-account\n displayName: Test Service Account\n example:\n type: gcp:workflows:Workflow\n properties:\n name: workflow\n region: us-central1\n description: Magic\n serviceAccount: ${testAccount.id}\n callLogLevel: LOG_ERRORS_ONLY\n labels:\n env: test\n userEnvVars:\n url: https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam\n sourceContents: |\n # This is a sample workflow. You can replace it with your source code.\n #\n # This workflow does the following:\n # - reads current time and date information from an external API and stores\n # the response in currentTime variable\n # - retrieves a list of Wikipedia articles related to the day of the week\n # from currentTime\n # - returns the list of articles as an output of the workflow\n #\n # Note: In Terraform you need to escape the $$ or it will cause errors.\n\n - getCurrentTime:\n call: http.get\n args:\n url: ${sys.get_env(\"url\")}\n result: currentTime\n - readWikipedia:\n call: http.get\n args:\n url: https://en.wikipedia.org/w/api.php\n query:\n action: opensearch\n search: ${currentTime.body.dayOfWeek}\n result: wikiResult\n - returnOutput:\n return: ${wikiResult.body[1]}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nThis resource does not support import.\n\n", + "description": "Workflow program to be executed by Workflows.\n\n\nTo get more information about Workflow, see:\n\n* [API documentation](https://cloud.google.com/workflows/docs/reference/rest/v1/projects.locations.workflows)\n* How-to Guides\n * [Managing Workflows](https://cloud.google.com/workflows/docs/creating-updating-workflow)\n\n## Example Usage\n\n### Workflow Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst testAccount = new gcp.serviceaccount.Account(\"test_account\", {\n accountId: \"my-account\",\n displayName: \"Test Service Account\",\n});\nconst example = new gcp.workflows.Workflow(\"example\", {\n name: \"workflow\",\n region: \"us-central1\",\n description: \"Magic\",\n serviceAccount: testAccount.id,\n callLogLevel: \"LOG_ERRORS_ONLY\",\n labels: {\n env: \"test\",\n },\n userEnvVars: {\n url: \"https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam\",\n },\n deletionProtection: false,\n sourceContents: `# This is a sample workflow. You can replace it with your source code.\n#\n# This workflow does the following:\n# - reads current time and date information from an external API and stores\n# the response in currentTime variable\n# - retrieves a list of Wikipedia articles related to the day of the week\n# from currentTime\n# - returns the list of articles as an output of the workflow\n#\n# Note: In Terraform you need to escape the or it will cause errors.\n\n- getCurrentTime:\n call: http.get\n args:\n url: \\${sys.get_env(\"url\")}\n result: currentTime\n- readWikipedia:\n call: http.get\n args:\n url: https://en.wikipedia.org/w/api.php\n query:\n action: opensearch\n search: \\${currentTime.body.dayOfWeek}\n result: wikiResult\n- returnOutput:\n return: \\${wikiResult.body[1]}\n`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest_account = gcp.serviceaccount.Account(\"test_account\",\n account_id=\"my-account\",\n display_name=\"Test Service Account\")\nexample = gcp.workflows.Workflow(\"example\",\n name=\"workflow\",\n region=\"us-central1\",\n description=\"Magic\",\n service_account=test_account.id,\n call_log_level=\"LOG_ERRORS_ONLY\",\n labels={\n \"env\": \"test\",\n },\n user_env_vars={\n \"url\": \"https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam\",\n },\n deletion_protection=False,\n source_contents=\"\"\"# This is a sample workflow. You can replace it with your source code.\n#\n# This workflow does the following:\n# - reads current time and date information from an external API and stores\n# the response in currentTime variable\n# - retrieves a list of Wikipedia articles related to the day of the week\n# from currentTime\n# - returns the list of articles as an output of the workflow\n#\n# Note: In Terraform you need to escape the $$ or it will cause errors.\n\n- getCurrentTime:\n call: http.get\n args:\n url: ${sys.get_env(\"url\")}\n result: currentTime\n- readWikipedia:\n call: http.get\n args:\n url: https://en.wikipedia.org/w/api.php\n query:\n action: opensearch\n search: ${currentTime.body.dayOfWeek}\n result: wikiResult\n- returnOutput:\n return: ${wikiResult.body[1]}\n\"\"\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var testAccount = new Gcp.ServiceAccount.Account(\"test_account\", new()\n {\n AccountId = \"my-account\",\n DisplayName = \"Test Service Account\",\n });\n\n var example = new Gcp.Workflows.Workflow(\"example\", new()\n {\n Name = \"workflow\",\n Region = \"us-central1\",\n Description = \"Magic\",\n ServiceAccount = testAccount.Id,\n CallLogLevel = \"LOG_ERRORS_ONLY\",\n Labels = \n {\n { \"env\", \"test\" },\n },\n UserEnvVars = \n {\n { \"url\", \"https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam\" },\n },\n DeletionProtection = false,\n SourceContents = @\"# This is a sample workflow. You can replace it with your source code.\n#\n# This workflow does the following:\n# - reads current time and date information from an external API and stores\n# the response in currentTime variable\n# - retrieves a list of Wikipedia articles related to the day of the week\n# from currentTime\n# - returns the list of articles as an output of the workflow\n#\n# Note: In Terraform you need to escape the $$ or it will cause errors.\n\n- getCurrentTime:\n call: http.get\n args:\n url: ${sys.get_env(\"\"url\"\")}\n result: currentTime\n- readWikipedia:\n call: http.get\n args:\n url: https://en.wikipedia.org/w/api.php\n query:\n action: opensearch\n search: ${currentTime.body.dayOfWeek}\n result: wikiResult\n- returnOutput:\n return: ${wikiResult.body[1]}\n\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workflows\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttestAccount, err := serviceaccount.NewAccount(ctx, \"test_account\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-account\"),\n\t\t\tDisplayName: pulumi.String(\"Test Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workflows.NewWorkflow(ctx, \"example\", \u0026workflows.WorkflowArgs{\n\t\t\tName: pulumi.String(\"workflow\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"Magic\"),\n\t\t\tServiceAccount: testAccount.ID(),\n\t\t\tCallLogLevel: pulumi.String(\"LOG_ERRORS_ONLY\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"test\"),\n\t\t\t},\n\t\t\tUserEnvVars: pulumi.StringMap{\n\t\t\t\t\"url\": pulumi.String(\"https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tSourceContents: pulumi.String(`# This is a sample workflow. You can replace it with your source code.\n#\n# This workflow does the following:\n# - reads current time and date information from an external API and stores\n# the response in currentTime variable\n# - retrieves a list of Wikipedia articles related to the day of the week\n# from currentTime\n# - returns the list of articles as an output of the workflow\n#\n# Note: In Terraform you need to escape the $$ or it will cause errors.\n\n- getCurrentTime:\n call: http.get\n args:\n url: ${sys.get_env(\"url\")}\n result: currentTime\n- readWikipedia:\n call: http.get\n args:\n url: https://en.wikipedia.org/w/api.php\n query:\n action: opensearch\n search: ${currentTime.body.dayOfWeek}\n result: wikiResult\n- returnOutput:\n return: ${wikiResult.body[1]}\n`),\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.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.workflows.Workflow;\nimport com.pulumi.gcp.workflows.WorkflowArgs;\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 testAccount = new Account(\"testAccount\", AccountArgs.builder()\n .accountId(\"my-account\")\n .displayName(\"Test Service Account\")\n .build());\n\n var example = new Workflow(\"example\", WorkflowArgs.builder()\n .name(\"workflow\")\n .region(\"us-central1\")\n .description(\"Magic\")\n .serviceAccount(testAccount.id())\n .callLogLevel(\"LOG_ERRORS_ONLY\")\n .labels(Map.of(\"env\", \"test\"))\n .userEnvVars(Map.of(\"url\", \"https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam\"))\n .deletionProtection(false)\n .sourceContents(\"\"\"\n# This is a sample workflow. You can replace it with your source code.\n#\n# This workflow does the following:\n# - reads current time and date information from an external API and stores\n# the response in currentTime variable\n# - retrieves a list of Wikipedia articles related to the day of the week\n# from currentTime\n# - returns the list of articles as an output of the workflow\n#\n# Note: In Terraform you need to escape the $$ or it will cause errors.\n\n- getCurrentTime:\n call: http.get\n args:\n url: ${sys.get_env(\"url\")}\n result: currentTime\n- readWikipedia:\n call: http.get\n args:\n url: https://en.wikipedia.org/w/api.php\n query:\n action: opensearch\n search: ${currentTime.body.dayOfWeek}\n result: wikiResult\n- returnOutput:\n return: ${wikiResult.body[1]}\n \"\"\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n testAccount:\n type: gcp:serviceaccount:Account\n name: test_account\n properties:\n accountId: my-account\n displayName: Test Service Account\n example:\n type: gcp:workflows:Workflow\n properties:\n name: workflow\n region: us-central1\n description: Magic\n serviceAccount: ${testAccount.id}\n callLogLevel: LOG_ERRORS_ONLY\n labels:\n env: test\n userEnvVars:\n url: https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam\n deletionProtection: false\n sourceContents: |\n # This is a sample workflow. You can replace it with your source code.\n #\n # This workflow does the following:\n # - reads current time and date information from an external API and stores\n # the response in currentTime variable\n # - retrieves a list of Wikipedia articles related to the day of the week\n # from currentTime\n # - returns the list of articles as an output of the workflow\n #\n # Note: In Terraform you need to escape the $$ or it will cause errors.\n\n - getCurrentTime:\n call: http.get\n args:\n url: ${sys.get_env(\"url\")}\n result: currentTime\n - readWikipedia:\n call: http.get\n args:\n url: https://en.wikipedia.org/w/api.php\n query:\n action: opensearch\n search: ${currentTime.body.dayOfWeek}\n result: wikiResult\n - returnOutput:\n return: ${wikiResult.body[1]}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nThis resource does not support import.\n\n", "properties": { "callLogLevel": { "type": "string", @@ -272365,6 +275634,9 @@ "type": "string", "description": "The KMS key used to encrypt workflow and execution data.\nFormat: projects/{project}/locations/{location}/keyRings/{keyRing}/cryptoKeys/{cryptoKey}\n" }, + "deletionProtection": { + "type": "boolean" + }, "description": { "type": "string", "description": "Description of the workflow provided by the user. Must be at most 1000 unicode characters long.\n" @@ -272458,6 +275730,9 @@ "type": "string", "description": "The KMS key used to encrypt workflow and execution data.\nFormat: projects/{project}/locations/{location}/keyRings/{keyRing}/cryptoKeys/{cryptoKey}\n" }, + "deletionProtection": { + "type": "boolean" + }, "description": { "type": "string", "description": "Description of the workflow provided by the user. Must be at most 1000 unicode characters long.\n" @@ -272520,6 +275795,9 @@ "type": "string", "description": "The KMS key used to encrypt workflow and execution data.\nFormat: projects/{project}/locations/{location}/keyRings/{keyRing}/cryptoKeys/{cryptoKey}\n" }, + "deletionProtection": { + "type": "boolean" + }, "description": { "type": "string", "description": "Description of the workflow provided by the user. Must be at most 1000 unicode characters long.\n" @@ -273150,7 +276428,7 @@ } }, "gcp:workstations/workstationConfig:WorkstationConfig": { - "description": "## Example Usage\n\n### Workstation Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst tagKey1 = new gcp.tags.TagKey(\"tag_key1\", {\n parent: \"organizations/123456789\",\n shortName: \"keyname\",\n});\nconst tagValue1 = new gcp.tags.TagValue(\"tag_value1\", {\n parent: pulumi.interpolate`tagKeys/${tagKey1.name}`,\n shortName: \"valuename\",\n});\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n idleTimeout: \"600s\",\n runningTimeout: \"21600s\",\n replicaZones: [\n \"us-central1-a\",\n \"us-central1-b\",\n ],\n annotations: {\n \"label-one\": \"value-one\",\n },\n labels: {\n label: \"key\",\n },\n maxUsableWorkstations: 1,\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n disableSsh: false,\n vmTags: pulumi.all([tagKey1.name, tagValue1.name]).apply(([tagKey1Name, tagValue1Name]) =\u003e {\n [`tagKeys/${tagKey1Name}`]: `tagValues/${tagValue1Name}`,\n }),\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntag_key1 = gcp.tags.TagKey(\"tag_key1\",\n parent=\"organizations/123456789\",\n short_name=\"keyname\")\ntag_value1 = gcp.tags.TagValue(\"tag_value1\",\n parent=tag_key1.name.apply(lambda name: f\"tagKeys/{name}\"),\n short_name=\"valuename\")\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n idle_timeout=\"600s\",\n running_timeout=\"21600s\",\n replica_zones=[\n \"us-central1-a\",\n \"us-central1-b\",\n ],\n annotations={\n \"label-one\": \"value-one\",\n },\n labels={\n \"label\": \"key\",\n },\n max_usable_workstations=1,\n host={\n \"gce_instance\": {\n \"machine_type\": \"e2-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"disable_ssh\": False,\n \"vm_tags\": pulumi.Output.all(\n tagKey1Name=tag_key1.name,\n tagValue1Name=tag_value1.name\n).apply(lambda resolved_outputs: {\n f\"tagKeys/{resolved_outputs['tagKey1Name']}\": f\"tagValues/{resolved_outputs['tagValue1Name']}\",\n })\n,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var tagKey1 = new Gcp.Tags.TagKey(\"tag_key1\", new()\n {\n Parent = \"organizations/123456789\",\n ShortName = \"keyname\",\n });\n\n var tagValue1 = new Gcp.Tags.TagValue(\"tag_value1\", new()\n {\n Parent = tagKey1.Name.Apply(name =\u003e $\"tagKeys/{name}\"),\n ShortName = \"valuename\",\n });\n\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n IdleTimeout = \"600s\",\n RunningTimeout = \"21600s\",\n ReplicaZones = new[]\n {\n \"us-central1-a\",\n \"us-central1-b\",\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n MaxUsableWorkstations = 1,\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n DisableSsh = false,\n VmTags = Output.Tuple(tagKey1.Name, tagValue1.Name).Apply(values =\u003e\n {\n var tagKey1Name = values.Item1;\n var tagValue1Name = values.Item2;\n return \n {\n { $\"tagKeys/{tagKey1Name}\", $\"tagValues/{tagValue1Name}\" },\n };\n }),\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\nfunc main() {\npulumi.Run(func(ctx *pulumi.Context) error {\ntagKey1, err := tags.NewTagKey(ctx, \"tag_key1\", \u0026tags.TagKeyArgs{\nParent: pulumi.String(\"organizations/123456789\"),\nShortName: pulumi.String(\"keyname\"),\n})\nif err != nil {\nreturn err\n}\ntagValue1, err := tags.NewTagValue(ctx, \"tag_value1\", \u0026tags.TagValueArgs{\nParent: tagKey1.Name.ApplyT(func(name string) (string, error) {\nreturn fmt.Sprintf(\"tagKeys/%v\", name), nil\n}).(pulumi.StringOutput),\nShortName: pulumi.String(\"valuename\"),\n})\nif err != nil {\nreturn err\n}\n_, err = compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\nName: pulumi.String(\"workstation-cluster\"),\nAutoCreateSubnetworks: pulumi.Bool(false),\n})\nif err != nil {\nreturn err\n}\ndefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\nName: pulumi.String(\"workstation-cluster\"),\nIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\nRegion: pulumi.String(\"us-central1\"),\nNetwork: _default.Name,\n})\nif err != nil {\nreturn err\n}\ndefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\nWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\nNetwork: _default.ID(),\nSubnetwork: defaultSubnetwork.ID(),\nLocation: pulumi.String(\"us-central1\"),\nLabels: pulumi.StringMap{\n\"label\": pulumi.String(\"key\"),\n},\nAnnotations: pulumi.StringMap{\n\"label-one\": pulumi.String(\"value-one\"),\n},\n})\nif err != nil {\nreturn err\n}\n_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\nWorkstationConfigId: pulumi.String(\"workstation-config\"),\nWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\nLocation: pulumi.String(\"us-central1\"),\nIdleTimeout: pulumi.String(\"600s\"),\nRunningTimeout: pulumi.String(\"21600s\"),\nReplicaZones: pulumi.StringArray{\npulumi.String(\"us-central1-a\"),\npulumi.String(\"us-central1-b\"),\n},\nAnnotations: pulumi.StringMap{\n\"label-one\": pulumi.String(\"value-one\"),\n},\nLabels: pulumi.StringMap{\n\"label\": pulumi.String(\"key\"),\n},\nMaxUsableWorkstations: pulumi.Int(1),\nHost: \u0026workstations.WorkstationConfigHostArgs{\nGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\nMachineType: pulumi.String(\"e2-standard-4\"),\nBootDiskSizeGb: pulumi.Int(35),\nDisablePublicIpAddresses: pulumi.Bool(true),\nDisableSsh: pulumi.Bool(false),\nVmTags: pulumi.All(tagKey1.Name,tagValue1.Name).ApplyT(func(_args []interface{}) (map[string]string, error) {\ntagKey1Name := _args[0].(string)\ntagValue1Name := _args[1].(string)\nreturn map[string]string{\nfmt.Sprintf(\"tagKeys/%v\", tagKey1Name): fmt.Sprintf(\"tagValues/%v\", tagValue1Name),\n}, nil\n}).(pulumi.Map[string]stringOutput),\n},\n},\n})\nif err != nil {\nreturn err\n}\nreturn nil\n})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\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 tagKey1 = new TagKey(\"tagKey1\", TagKeyArgs.builder()\n .parent(\"organizations/123456789\")\n .shortName(\"keyname\")\n .build());\n\n var tagValue1 = new TagValue(\"tagValue1\", TagValueArgs.builder()\n .parent(tagKey1.name().applyValue(name -\u003e String.format(\"tagKeys/%s\", name)))\n .shortName(\"valuename\")\n .build());\n\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .idleTimeout(\"600s\")\n .runningTimeout(\"21600s\")\n .replicaZones( \n \"us-central1-a\",\n \"us-central1-b\")\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .labels(Map.of(\"label\", \"key\"))\n .maxUsableWorkstations(1)\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .disableSsh(false)\n .vmTags(Output.tuple(tagKey1.name(), tagValue1.name()).applyValue(values -\u003e {\n var tagKey1Name = values.t1;\n var tagValue1Name = values.t2;\n return Map.of(String.format(\"tagKeys/%s\", tagKey1Name), String.format(\"tagValues/%s\", tagValue1Name));\n }))\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tagKey1:\n type: gcp:tags:TagKey\n name: tag_key1\n properties:\n parent: organizations/123456789\n shortName: keyname\n tagValue1:\n type: gcp:tags:TagValue\n name: tag_value1\n properties:\n parent: tagKeys/${tagKey1.name}\n shortName: valuename\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n idleTimeout: 600s\n runningTimeout: 21600s\n replicaZones:\n - us-central1-a\n - us-central1-b\n annotations:\n label-one: value-one\n labels:\n label: key\n maxUsableWorkstations: 1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n disableSsh: false\n vmTags:\n tagKeys/${tagKey1.name}: tagValues/${tagValue1.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Container\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"n1-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n enableNestedVirtualization: true,\n },\n },\n container: {\n image: \"intellij\",\n env: {\n NAME: \"FOO\",\n BABE: \"bar\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"n1-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"enable_nested_virtualization\": True,\n },\n },\n container={\n \"image\": \"intellij\",\n \"env\": {\n \"NAME\": \"FOO\",\n \"BABE\": \"bar\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"n1-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n EnableNestedVirtualization = true,\n },\n },\n Container = new Gcp.Workstations.Inputs.WorkstationConfigContainerArgs\n {\n Image = \"intellij\",\n Env = \n {\n { \"NAME\", \"FOO\" },\n { \"BABE\", \"bar\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tEnableNestedVirtualization: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tContainer: \u0026workstations.WorkstationConfigContainerArgs{\n\t\t\t\tImage: pulumi.String(\"intellij\"),\n\t\t\t\tEnv: pulumi.StringMap{\n\t\t\t\t\t\"NAME\": pulumi.String(\"FOO\"),\n\t\t\t\t\t\"BABE\": pulumi.String(\"bar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigContainerArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"n1-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .enableNestedVirtualization(true)\n .build())\n .build())\n .container(WorkstationConfigContainerArgs.builder()\n .image(\"intellij\")\n .env(Map.ofEntries(\n Map.entry(\"NAME\", \"FOO\"),\n Map.entry(\"BABE\", \"bar\")\n ))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: n1-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n enableNestedVirtualization: true\n container:\n image: intellij\n env:\n NAME: FOO\n BABE: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Persistent Directories\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n shieldedInstanceConfig: {\n enableSecureBoot: true,\n enableVtpm: true,\n },\n },\n },\n persistentDirectories: [{\n mountPath: \"/home\",\n gcePd: {\n sizeGb: 200,\n fsType: \"ext4\",\n diskType: \"pd-standard\",\n reclaimPolicy: \"DELETE\",\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"e2-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"shielded_instance_config\": {\n \"enable_secure_boot\": True,\n \"enable_vtpm\": True,\n },\n },\n },\n persistent_directories=[{\n \"mount_path\": \"/home\",\n \"gce_pd\": {\n \"size_gb\": 200,\n \"fs_type\": \"ext4\",\n \"disk_type\": \"pd-standard\",\n \"reclaim_policy\": \"DELETE\",\n },\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n ShieldedInstanceConfig = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs\n {\n EnableSecureBoot = true,\n EnableVtpm = true,\n },\n },\n },\n PersistentDirectories = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryArgs\n {\n MountPath = \"/home\",\n GcePd = new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryGcePdArgs\n {\n SizeGb = 200,\n FsType = \"ext4\",\n DiskType = \"pd-standard\",\n ReclaimPolicy = \"DELETE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tShieldedInstanceConfig: \u0026workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs{\n\t\t\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t\t\t\tEnableVtpm: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPersistentDirectories: workstations.WorkstationConfigPersistentDirectoryArray{\n\t\t\t\t\u0026workstations.WorkstationConfigPersistentDirectoryArgs{\n\t\t\t\t\tMountPath: pulumi.String(\"/home\"),\n\t\t\t\t\tGcePd: \u0026workstations.WorkstationConfigPersistentDirectoryGcePdArgs{\n\t\t\t\t\t\tSizeGb: pulumi.Int(200),\n\t\t\t\t\t\tFsType: pulumi.String(\"ext4\"),\n\t\t\t\t\t\tDiskType: pulumi.String(\"pd-standard\"),\n\t\t\t\t\t\tReclaimPolicy: pulumi.String(\"DELETE\"),\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\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryGcePdArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .shieldedInstanceConfig(WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs.builder()\n .enableSecureBoot(true)\n .enableVtpm(true)\n .build())\n .build())\n .build())\n .persistentDirectories(WorkstationConfigPersistentDirectoryArgs.builder()\n .mountPath(\"/home\")\n .gcePd(WorkstationConfigPersistentDirectoryGcePdArgs.builder()\n .sizeGb(200)\n .fsType(\"ext4\")\n .diskType(\"pd-standard\")\n .reclaimPolicy(\"DELETE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n shieldedInstanceConfig:\n enableSecureBoot: true\n enableVtpm: true\n persistentDirectories:\n - mountPath: /home\n gcePd:\n sizeGb: 200\n fsType: ext4\n diskType: pd-standard\n reclaimPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Source Snapshot\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst mySourceDisk = new gcp.compute.Disk(\"my_source_disk\", {\n name: \"workstation-config\",\n size: 10,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst mySourceSnapshot = new gcp.compute.Snapshot(\"my_source_snapshot\", {\n name: \"workstation-config\",\n sourceDisk: mySourceDisk.name,\n zone: \"us-central1-a\",\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: defaultWorkstationCluster.location,\n persistentDirectories: [{\n mountPath: \"/home\",\n gcePd: {\n sourceSnapshot: mySourceSnapshot.id,\n reclaimPolicy: \"DELETE\",\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\nmy_source_disk = gcp.compute.Disk(\"my_source_disk\",\n name=\"workstation-config\",\n size=10,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nmy_source_snapshot = gcp.compute.Snapshot(\"my_source_snapshot\",\n name=\"workstation-config\",\n source_disk=my_source_disk.name,\n zone=\"us-central1-a\")\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\")\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=default_workstation_cluster.location,\n persistent_directories=[{\n \"mount_path\": \"/home\",\n \"gce_pd\": {\n \"source_snapshot\": my_source_snapshot.id,\n \"reclaim_policy\": \"DELETE\",\n },\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var mySourceDisk = new Gcp.Compute.Disk(\"my_source_disk\", new()\n {\n Name = \"workstation-config\",\n Size = 10,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var mySourceSnapshot = new Gcp.Compute.Snapshot(\"my_source_snapshot\", new()\n {\n Name = \"workstation-config\",\n SourceDisk = mySourceDisk.Name,\n Zone = \"us-central1-a\",\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = defaultWorkstationCluster.Location,\n PersistentDirectories = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryArgs\n {\n MountPath = \"/home\",\n GcePd = new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryGcePdArgs\n {\n SourceSnapshot = mySourceSnapshot.Id,\n ReclaimPolicy = \"DELETE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmySourceDisk, err := compute.NewDisk(ctx, \"my_source_disk\", \u0026compute.DiskArgs{\n\t\t\tName: pulumi.String(\"workstation-config\"),\n\t\t\tSize: pulumi.Int(10),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmySourceSnapshot, err := compute.NewSnapshot(ctx, \"my_source_snapshot\", \u0026compute.SnapshotArgs{\n\t\t\tName: pulumi.String(\"workstation-config\"),\n\t\t\tSourceDisk: mySourceDisk.Name,\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: defaultWorkstationCluster.Location,\n\t\t\tPersistentDirectories: workstations.WorkstationConfigPersistentDirectoryArray{\n\t\t\t\t\u0026workstations.WorkstationConfigPersistentDirectoryArgs{\n\t\t\t\t\tMountPath: pulumi.String(\"/home\"),\n\t\t\t\t\tGcePd: \u0026workstations.WorkstationConfigPersistentDirectoryGcePdArgs{\n\t\t\t\t\t\tSourceSnapshot: mySourceSnapshot.ID(),\n\t\t\t\t\t\tReclaimPolicy: pulumi.String(\"DELETE\"),\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\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.Snapshot;\nimport com.pulumi.gcp.compute.SnapshotArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryGcePdArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var mySourceDisk = new Disk(\"mySourceDisk\", DiskArgs.builder()\n .name(\"workstation-config\")\n .size(10)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var mySourceSnapshot = new Snapshot(\"mySourceSnapshot\", SnapshotArgs.builder()\n .name(\"workstation-config\")\n .sourceDisk(mySourceDisk.name())\n .zone(\"us-central1-a\")\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(defaultWorkstationCluster.location())\n .persistentDirectories(WorkstationConfigPersistentDirectoryArgs.builder()\n .mountPath(\"/home\")\n .gcePd(WorkstationConfigPersistentDirectoryGcePdArgs.builder()\n .sourceSnapshot(mySourceSnapshot.id())\n .reclaimPolicy(\"DELETE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n mySourceDisk:\n type: gcp:compute:Disk\n name: my_source_disk\n properties:\n name: workstation-config\n size: 10\n type: pd-ssd\n zone: us-central1-a\n mySourceSnapshot:\n type: gcp:compute:Snapshot\n name: my_source_snapshot\n properties:\n name: workstation-config\n sourceDisk: ${mySourceDisk.name}\n zone: us-central1-a\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: ${defaultWorkstationCluster.location}\n persistentDirectories:\n - mountPath: /home\n gcePd:\n sourceSnapshot: ${mySourceSnapshot.id}\n reclaimPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Shielded Instance Config\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n shieldedInstanceConfig: {\n enableSecureBoot: true,\n enableVtpm: true,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"e2-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"shielded_instance_config\": {\n \"enable_secure_boot\": True,\n \"enable_vtpm\": True,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n ShieldedInstanceConfig = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs\n {\n EnableSecureBoot = true,\n EnableVtpm = true,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tShieldedInstanceConfig: \u0026workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs{\n\t\t\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t\t\t\tEnableVtpm: pulumi.Bool(true),\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\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .shieldedInstanceConfig(WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs.builder()\n .enableSecureBoot(true)\n .enableVtpm(true)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n shieldedInstanceConfig:\n enableSecureBoot: true\n enableVtpm: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Accelerators\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"n1-standard-2\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n accelerators: [{\n type: \"nvidia-tesla-t4\",\n count: 1,\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"n1-standard-2\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"accelerators\": [{\n \"type\": \"nvidia-tesla-t4\",\n \"count\": 1,\n }],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"n1-standard-2\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n Accelerators = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceAcceleratorArgs\n {\n Type = \"nvidia-tesla-t4\",\n Count = 1,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-2\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tAccelerators: workstations.WorkstationConfigHostGceInstanceAcceleratorArray{\n\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceAcceleratorArgs{\n\t\t\t\t\t\t\tType: pulumi.String(\"nvidia-tesla-t4\"),\n\t\t\t\t\t\t\tCount: pulumi.Int(1),\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\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"n1-standard-2\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .accelerators(WorkstationConfigHostGceInstanceAcceleratorArgs.builder()\n .type(\"nvidia-tesla-t4\")\n .count(\"1\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: n1-standard-2\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n accelerators:\n - type: nvidia-tesla-t4\n count: '1'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Boost\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n boostConfigs: [\n {\n id: \"boost-1\",\n machineType: \"n1-standard-2\",\n accelerators: [{\n type: \"nvidia-tesla-t4\",\n count: 1,\n }],\n },\n {\n id: \"boost-2\",\n machineType: \"n1-standard-2\",\n poolSize: 2,\n bootDiskSizeGb: 30,\n enableNestedVirtualization: true,\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"e2-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"boost_configs\": [\n {\n \"id\": \"boost-1\",\n \"machine_type\": \"n1-standard-2\",\n \"accelerators\": [{\n \"type\": \"nvidia-tesla-t4\",\n \"count\": 1,\n }],\n },\n {\n \"id\": \"boost-2\",\n \"machine_type\": \"n1-standard-2\",\n \"pool_size\": 2,\n \"boot_disk_size_gb\": 30,\n \"enable_nested_virtualization\": True,\n },\n ],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n BoostConfigs = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceBoostConfigArgs\n {\n Id = \"boost-1\",\n MachineType = \"n1-standard-2\",\n Accelerators = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs\n {\n Type = \"nvidia-tesla-t4\",\n Count = 1,\n },\n },\n },\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceBoostConfigArgs\n {\n Id = \"boost-2\",\n MachineType = \"n1-standard-2\",\n PoolSize = 2,\n BootDiskSizeGb = 30,\n EnableNestedVirtualization = true,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tBoostConfigs: workstations.WorkstationConfigHostGceInstanceBoostConfigArray{\n\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceBoostConfigArgs{\n\t\t\t\t\t\t\tId: pulumi.String(\"boost-1\"),\n\t\t\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-2\"),\n\t\t\t\t\t\t\tAccelerators: workstations.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArray{\n\t\t\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs{\n\t\t\t\t\t\t\t\t\tType: pulumi.String(\"nvidia-tesla-t4\"),\n\t\t\t\t\t\t\t\t\tCount: pulumi.Int(1),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceBoostConfigArgs{\n\t\t\t\t\t\t\tId: pulumi.String(\"boost-2\"),\n\t\t\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-2\"),\n\t\t\t\t\t\t\tPoolSize: pulumi.Int(2),\n\t\t\t\t\t\t\tBootDiskSizeGb: pulumi.Int(30),\n\t\t\t\t\t\t\tEnableNestedVirtualization: pulumi.Bool(true),\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\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .boostConfigs( \n WorkstationConfigHostGceInstanceBoostConfigArgs.builder()\n .id(\"boost-1\")\n .machineType(\"n1-standard-2\")\n .accelerators(WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs.builder()\n .type(\"nvidia-tesla-t4\")\n .count(\"1\")\n .build())\n .build(),\n WorkstationConfigHostGceInstanceBoostConfigArgs.builder()\n .id(\"boost-2\")\n .machineType(\"n1-standard-2\")\n .poolSize(2)\n .bootDiskSizeGb(30)\n .enableNestedVirtualization(true)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n boostConfigs:\n - id: boost-1\n machineType: n1-standard-2\n accelerators:\n - type: nvidia-tesla-t4\n count: '1'\n - id: boost-2\n machineType: n1-standard-2\n poolSize: 2\n bootDiskSizeGb: 30\n enableNestedVirtualization: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Encryption Key\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultKeyRing = new gcp.kms.KeyRing(\"default\", {\n name: \"workstation-cluster\",\n location: \"us-central1\",\n});\nconst defaultCryptoKey = new gcp.kms.CryptoKey(\"default\", {\n name: \"workstation-cluster\",\n keyRing: defaultKeyRing.id,\n});\nconst defaultAccount = new gcp.serviceaccount.Account(\"default\", {\n accountId: \"my-account\",\n displayName: \"Service Account\",\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n shieldedInstanceConfig: {\n enableSecureBoot: true,\n enableVtpm: true,\n },\n },\n },\n encryptionKey: {\n kmsKey: defaultCryptoKey.id,\n kmsKeyServiceAccount: defaultAccount.email,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_key_ring = gcp.kms.KeyRing(\"default\",\n name=\"workstation-cluster\",\n location=\"us-central1\")\ndefault_crypto_key = gcp.kms.CryptoKey(\"default\",\n name=\"workstation-cluster\",\n key_ring=default_key_ring.id)\ndefault_account = gcp.serviceaccount.Account(\"default\",\n account_id=\"my-account\",\n display_name=\"Service Account\")\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"e2-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"shielded_instance_config\": {\n \"enable_secure_boot\": True,\n \"enable_vtpm\": True,\n },\n },\n },\n encryption_key={\n \"kms_key\": default_crypto_key.id,\n \"kms_key_service_account\": default_account.email,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultKeyRing = new Gcp.Kms.KeyRing(\"default\", new()\n {\n Name = \"workstation-cluster\",\n Location = \"us-central1\",\n });\n\n var defaultCryptoKey = new Gcp.Kms.CryptoKey(\"default\", new()\n {\n Name = \"workstation-cluster\",\n KeyRing = defaultKeyRing.Id,\n });\n\n var defaultAccount = new Gcp.ServiceAccount.Account(\"default\", new()\n {\n AccountId = \"my-account\",\n DisplayName = \"Service Account\",\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n ShieldedInstanceConfig = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs\n {\n EnableSecureBoot = true,\n EnableVtpm = true,\n },\n },\n },\n EncryptionKey = new Gcp.Workstations.Inputs.WorkstationConfigEncryptionKeyArgs\n {\n KmsKey = defaultCryptoKey.Id,\n KmsKeyServiceAccount = defaultAccount.Email,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultKeyRing, err := kms.NewKeyRing(ctx, \"default\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultCryptoKey, err := kms.NewCryptoKey(ctx, \"default\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tKeyRing: defaultKeyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultAccount, err := serviceaccount.NewAccount(ctx, \"default\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-account\"),\n\t\t\tDisplayName: pulumi.String(\"Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tShieldedInstanceConfig: \u0026workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs{\n\t\t\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t\t\t\tEnableVtpm: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tEncryptionKey: \u0026workstations.WorkstationConfigEncryptionKeyArgs{\n\t\t\t\tKmsKey: defaultCryptoKey.ID(),\n\t\t\t\tKmsKeyServiceAccount: defaultAccount.Email,\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigEncryptionKeyArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultKeyRing = new KeyRing(\"defaultKeyRing\", KeyRingArgs.builder()\n .name(\"workstation-cluster\")\n .location(\"us-central1\")\n .build());\n\n var defaultCryptoKey = new CryptoKey(\"defaultCryptoKey\", CryptoKeyArgs.builder()\n .name(\"workstation-cluster\")\n .keyRing(defaultKeyRing.id())\n .build());\n\n var defaultAccount = new Account(\"defaultAccount\", AccountArgs.builder()\n .accountId(\"my-account\")\n .displayName(\"Service Account\")\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .shieldedInstanceConfig(WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs.builder()\n .enableSecureBoot(true)\n .enableVtpm(true)\n .build())\n .build())\n .build())\n .encryptionKey(WorkstationConfigEncryptionKeyArgs.builder()\n .kmsKey(defaultCryptoKey.id())\n .kmsKeyServiceAccount(defaultAccount.email())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultKeyRing:\n type: gcp:kms:KeyRing\n name: default\n properties:\n name: workstation-cluster\n location: us-central1\n defaultCryptoKey:\n type: gcp:kms:CryptoKey\n name: default\n properties:\n name: workstation-cluster\n keyRing: ${defaultKeyRing.id}\n defaultAccount:\n type: gcp:serviceaccount:Account\n name: default\n properties:\n accountId: my-account\n displayName: Service Account\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n shieldedInstanceConfig:\n enableSecureBoot: true\n enableVtpm: true\n encryptionKey:\n kmsKey: ${defaultCryptoKey.id}\n kmsKeyServiceAccount: ${defaultAccount.email}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Allowed Ports\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n },\n },\n allowedPorts: [\n {\n first: 80,\n last: 80,\n },\n {\n first: 22,\n last: 22,\n },\n {\n first: 1024,\n last: 65535,\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"e2-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n },\n },\n allowed_ports=[\n {\n \"first\": 80,\n \"last\": 80,\n },\n {\n \"first\": 22,\n \"last\": 22,\n },\n {\n \"first\": 1024,\n \"last\": 65535,\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n },\n },\n AllowedPorts = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigAllowedPortArgs\n {\n First = 80,\n Last = 80,\n },\n new Gcp.Workstations.Inputs.WorkstationConfigAllowedPortArgs\n {\n First = 22,\n Last = 22,\n },\n new Gcp.Workstations.Inputs.WorkstationConfigAllowedPortArgs\n {\n First = 1024,\n Last = 65535,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAllowedPorts: workstations.WorkstationConfigAllowedPortArray{\n\t\t\t\t\u0026workstations.WorkstationConfigAllowedPortArgs{\n\t\t\t\t\tFirst: pulumi.Int(80),\n\t\t\t\t\tLast: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t\t\u0026workstations.WorkstationConfigAllowedPortArgs{\n\t\t\t\t\tFirst: pulumi.Int(22),\n\t\t\t\t\tLast: pulumi.Int(22),\n\t\t\t\t},\n\t\t\t\t\u0026workstations.WorkstationConfigAllowedPortArgs{\n\t\t\t\t\tFirst: pulumi.Int(1024),\n\t\t\t\t\tLast: pulumi.Int(65535),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigAllowedPortArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .build())\n .build())\n .allowedPorts( \n WorkstationConfigAllowedPortArgs.builder()\n .first(80)\n .last(80)\n .build(),\n WorkstationConfigAllowedPortArgs.builder()\n .first(22)\n .last(22)\n .build(),\n WorkstationConfigAllowedPortArgs.builder()\n .first(1024)\n .last(65535)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n allowedPorts:\n - first: 80\n last: 80\n - first: 22\n last: 22\n - first: 1024\n last: 65535\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nWorkstationConfig can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}}/workstationConfigs/{{workstation_config_id}}`\n\n* `{{project}}/{{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}`\n\n* `{{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}`\n\nWhen using the `pulumi import` command, WorkstationConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:workstations/workstationConfig:WorkstationConfig default projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}}/workstationConfigs/{{workstation_config_id}}\n```\n\n```sh\n$ pulumi import gcp:workstations/workstationConfig:WorkstationConfig default {{project}}/{{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}\n```\n\n```sh\n$ pulumi import gcp:workstations/workstationConfig:WorkstationConfig default {{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}\n```\n\n", + "description": "## Example Usage\n\n### Workstation Config Basic\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst tagKey1 = new gcp.tags.TagKey(\"tag_key1\", {\n parent: \"organizations/123456789\",\n shortName: \"keyname\",\n});\nconst tagValue1 = new gcp.tags.TagValue(\"tag_value1\", {\n parent: tagKey1.id,\n shortName: \"valuename\",\n});\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n idleTimeout: \"600s\",\n runningTimeout: \"21600s\",\n replicaZones: [\n \"us-central1-a\",\n \"us-central1-b\",\n ],\n annotations: {\n \"label-one\": \"value-one\",\n },\n labels: {\n label: \"key\",\n },\n maxUsableWorkstations: 1,\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n disableSsh: false,\n vmTags: pulumi.all([tagKey1.id, tagValue1.id]).apply(([tagKey1Id, tagValue1Id]) =\u003e {\n [tagKey1Id]: tagValue1Id,\n }),\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntag_key1 = gcp.tags.TagKey(\"tag_key1\",\n parent=\"organizations/123456789\",\n short_name=\"keyname\")\ntag_value1 = gcp.tags.TagValue(\"tag_value1\",\n parent=tag_key1.id,\n short_name=\"valuename\")\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n idle_timeout=\"600s\",\n running_timeout=\"21600s\",\n replica_zones=[\n \"us-central1-a\",\n \"us-central1-b\",\n ],\n annotations={\n \"label-one\": \"value-one\",\n },\n labels={\n \"label\": \"key\",\n },\n max_usable_workstations=1,\n host={\n \"gce_instance\": {\n \"machine_type\": \"e2-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"disable_ssh\": False,\n \"vm_tags\": pulumi.Output.all(\n tagKey1Id=tag_key1.id,\n tagValue1Id=tag_value1.id\n).apply(lambda resolved_outputs: {\n resolved_outputs['tagKey1Id']: resolved_outputs['tagValue1Id'],\n })\n,\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var tagKey1 = new Gcp.Tags.TagKey(\"tag_key1\", new()\n {\n Parent = \"organizations/123456789\",\n ShortName = \"keyname\",\n });\n\n var tagValue1 = new Gcp.Tags.TagValue(\"tag_value1\", new()\n {\n Parent = tagKey1.Id,\n ShortName = \"valuename\",\n });\n\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n IdleTimeout = \"600s\",\n RunningTimeout = \"21600s\",\n ReplicaZones = new[]\n {\n \"us-central1-a\",\n \"us-central1-b\",\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n MaxUsableWorkstations = 1,\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n DisableSsh = false,\n VmTags = Output.Tuple(tagKey1.Id, tagValue1.Id).Apply(values =\u003e\n {\n var tagKey1Id = values.Item1;\n var tagValue1Id = values.Item2;\n return \n {\n { tagKey1Id, tagValue1Id },\n };\n }),\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/tags\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\nfunc main() {\npulumi.Run(func(ctx *pulumi.Context) error {\ntagKey1, err := tags.NewTagKey(ctx, \"tag_key1\", \u0026tags.TagKeyArgs{\nParent: pulumi.String(\"organizations/123456789\"),\nShortName: pulumi.String(\"keyname\"),\n})\nif err != nil {\nreturn err\n}\ntagValue1, err := tags.NewTagValue(ctx, \"tag_value1\", \u0026tags.TagValueArgs{\nParent: tagKey1.ID(),\nShortName: pulumi.String(\"valuename\"),\n})\nif err != nil {\nreturn err\n}\n_, err = compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\nName: pulumi.String(\"workstation-cluster\"),\nAutoCreateSubnetworks: pulumi.Bool(false),\n})\nif err != nil {\nreturn err\n}\ndefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\nName: pulumi.String(\"workstation-cluster\"),\nIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\nRegion: pulumi.String(\"us-central1\"),\nNetwork: _default.Name,\n})\nif err != nil {\nreturn err\n}\ndefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\nWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\nNetwork: _default.ID(),\nSubnetwork: defaultSubnetwork.ID(),\nLocation: pulumi.String(\"us-central1\"),\nLabels: pulumi.StringMap{\n\"label\": pulumi.String(\"key\"),\n},\nAnnotations: pulumi.StringMap{\n\"label-one\": pulumi.String(\"value-one\"),\n},\n})\nif err != nil {\nreturn err\n}\n_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\nWorkstationConfigId: pulumi.String(\"workstation-config\"),\nWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\nLocation: pulumi.String(\"us-central1\"),\nIdleTimeout: pulumi.String(\"600s\"),\nRunningTimeout: pulumi.String(\"21600s\"),\nReplicaZones: pulumi.StringArray{\npulumi.String(\"us-central1-a\"),\npulumi.String(\"us-central1-b\"),\n},\nAnnotations: pulumi.StringMap{\n\"label-one\": pulumi.String(\"value-one\"),\n},\nLabels: pulumi.StringMap{\n\"label\": pulumi.String(\"key\"),\n},\nMaxUsableWorkstations: pulumi.Int(1),\nHost: \u0026workstations.WorkstationConfigHostArgs{\nGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\nMachineType: pulumi.String(\"e2-standard-4\"),\nBootDiskSizeGb: pulumi.Int(35),\nDisablePublicIpAddresses: pulumi.Bool(true),\nDisableSsh: pulumi.Bool(false),\nVmTags: pulumi.All(tagKey1.ID(),tagValue1.ID()).ApplyT(func(_args []interface{}) (map[string]string, error) {\ntagKey1Id := _args[0].(string)\ntagValue1Id := _args[1].(string)\nreturn map[string]string{\ntagKey1Id: tagValue1Id,\n}, nil\n}).(pulumi.Map[string]stringOutput),\n},\n},\n})\nif err != nil {\nreturn err\n}\nreturn nil\n})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\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 tagKey1 = new TagKey(\"tagKey1\", TagKeyArgs.builder()\n .parent(\"organizations/123456789\")\n .shortName(\"keyname\")\n .build());\n\n var tagValue1 = new TagValue(\"tagValue1\", TagValueArgs.builder()\n .parent(tagKey1.id())\n .shortName(\"valuename\")\n .build());\n\n var default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .idleTimeout(\"600s\")\n .runningTimeout(\"21600s\")\n .replicaZones( \n \"us-central1-a\",\n \"us-central1-b\")\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .labels(Map.of(\"label\", \"key\"))\n .maxUsableWorkstations(1)\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .disableSsh(false)\n .vmTags(Output.tuple(tagKey1.id(), tagValue1.id()).applyValue(values -\u003e {\n var tagKey1Id = values.t1;\n var tagValue1Id = values.t2;\n return Map.of(tagKey1Id, tagValue1Id);\n }))\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tagKey1:\n type: gcp:tags:TagKey\n name: tag_key1\n properties:\n parent: organizations/123456789\n shortName: keyname\n tagValue1:\n type: gcp:tags:TagValue\n name: tag_value1\n properties:\n parent: ${tagKey1.id}\n shortName: valuename\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n idleTimeout: 600s\n runningTimeout: 21600s\n replicaZones:\n - us-central1-a\n - us-central1-b\n annotations:\n label-one: value-one\n labels:\n label: key\n maxUsableWorkstations: 1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n disableSsh: false\n vmTags:\n ${tagKey1.id}: ${tagValue1.id}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Container\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"n1-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n enableNestedVirtualization: true,\n },\n },\n container: {\n image: \"intellij\",\n env: {\n NAME: \"FOO\",\n BABE: \"bar\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"n1-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"enable_nested_virtualization\": True,\n },\n },\n container={\n \"image\": \"intellij\",\n \"env\": {\n \"NAME\": \"FOO\",\n \"BABE\": \"bar\",\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"n1-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n EnableNestedVirtualization = true,\n },\n },\n Container = new Gcp.Workstations.Inputs.WorkstationConfigContainerArgs\n {\n Image = \"intellij\",\n Env = \n {\n { \"NAME\", \"FOO\" },\n { \"BABE\", \"bar\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tEnableNestedVirtualization: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tContainer: \u0026workstations.WorkstationConfigContainerArgs{\n\t\t\t\tImage: pulumi.String(\"intellij\"),\n\t\t\t\tEnv: pulumi.StringMap{\n\t\t\t\t\t\"NAME\": pulumi.String(\"FOO\"),\n\t\t\t\t\t\"BABE\": pulumi.String(\"bar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigContainerArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"n1-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .enableNestedVirtualization(true)\n .build())\n .build())\n .container(WorkstationConfigContainerArgs.builder()\n .image(\"intellij\")\n .env(Map.ofEntries(\n Map.entry(\"NAME\", \"FOO\"),\n Map.entry(\"BABE\", \"bar\")\n ))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: n1-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n enableNestedVirtualization: true\n container:\n image: intellij\n env:\n NAME: FOO\n BABE: bar\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Persistent Directories\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n shieldedInstanceConfig: {\n enableSecureBoot: true,\n enableVtpm: true,\n },\n },\n },\n persistentDirectories: [{\n mountPath: \"/home\",\n gcePd: {\n sizeGb: 200,\n fsType: \"ext4\",\n diskType: \"pd-standard\",\n reclaimPolicy: \"DELETE\",\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"e2-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"shielded_instance_config\": {\n \"enable_secure_boot\": True,\n \"enable_vtpm\": True,\n },\n },\n },\n persistent_directories=[{\n \"mount_path\": \"/home\",\n \"gce_pd\": {\n \"size_gb\": 200,\n \"fs_type\": \"ext4\",\n \"disk_type\": \"pd-standard\",\n \"reclaim_policy\": \"DELETE\",\n },\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n ShieldedInstanceConfig = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs\n {\n EnableSecureBoot = true,\n EnableVtpm = true,\n },\n },\n },\n PersistentDirectories = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryArgs\n {\n MountPath = \"/home\",\n GcePd = new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryGcePdArgs\n {\n SizeGb = 200,\n FsType = \"ext4\",\n DiskType = \"pd-standard\",\n ReclaimPolicy = \"DELETE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tShieldedInstanceConfig: \u0026workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs{\n\t\t\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t\t\t\tEnableVtpm: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPersistentDirectories: workstations.WorkstationConfigPersistentDirectoryArray{\n\t\t\t\t\u0026workstations.WorkstationConfigPersistentDirectoryArgs{\n\t\t\t\t\tMountPath: pulumi.String(\"/home\"),\n\t\t\t\t\tGcePd: \u0026workstations.WorkstationConfigPersistentDirectoryGcePdArgs{\n\t\t\t\t\t\tSizeGb: pulumi.Int(200),\n\t\t\t\t\t\tFsType: pulumi.String(\"ext4\"),\n\t\t\t\t\t\tDiskType: pulumi.String(\"pd-standard\"),\n\t\t\t\t\t\tReclaimPolicy: pulumi.String(\"DELETE\"),\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\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryGcePdArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .shieldedInstanceConfig(WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs.builder()\n .enableSecureBoot(true)\n .enableVtpm(true)\n .build())\n .build())\n .build())\n .persistentDirectories(WorkstationConfigPersistentDirectoryArgs.builder()\n .mountPath(\"/home\")\n .gcePd(WorkstationConfigPersistentDirectoryGcePdArgs.builder()\n .sizeGb(200)\n .fsType(\"ext4\")\n .diskType(\"pd-standard\")\n .reclaimPolicy(\"DELETE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n shieldedInstanceConfig:\n enableSecureBoot: true\n enableVtpm: true\n persistentDirectories:\n - mountPath: /home\n gcePd:\n sizeGb: 200\n fsType: ext4\n diskType: pd-standard\n reclaimPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Source Snapshot\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst mySourceDisk = new gcp.compute.Disk(\"my_source_disk\", {\n name: \"workstation-config\",\n size: 10,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst mySourceSnapshot = new gcp.compute.Snapshot(\"my_source_snapshot\", {\n name: \"workstation-config\",\n sourceDisk: mySourceDisk.name,\n zone: \"us-central1-a\",\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: defaultWorkstationCluster.location,\n persistentDirectories: [{\n mountPath: \"/home\",\n gcePd: {\n sourceSnapshot: mySourceSnapshot.id,\n reclaimPolicy: \"DELETE\",\n },\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\nmy_source_disk = gcp.compute.Disk(\"my_source_disk\",\n name=\"workstation-config\",\n size=10,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nmy_source_snapshot = gcp.compute.Snapshot(\"my_source_snapshot\",\n name=\"workstation-config\",\n source_disk=my_source_disk.name,\n zone=\"us-central1-a\")\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\")\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=default_workstation_cluster.location,\n persistent_directories=[{\n \"mount_path\": \"/home\",\n \"gce_pd\": {\n \"source_snapshot\": my_source_snapshot.id,\n \"reclaim_policy\": \"DELETE\",\n },\n }])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var mySourceDisk = new Gcp.Compute.Disk(\"my_source_disk\", new()\n {\n Name = \"workstation-config\",\n Size = 10,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var mySourceSnapshot = new Gcp.Compute.Snapshot(\"my_source_snapshot\", new()\n {\n Name = \"workstation-config\",\n SourceDisk = mySourceDisk.Name,\n Zone = \"us-central1-a\",\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = defaultWorkstationCluster.Location,\n PersistentDirectories = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryArgs\n {\n MountPath = \"/home\",\n GcePd = new Gcp.Workstations.Inputs.WorkstationConfigPersistentDirectoryGcePdArgs\n {\n SourceSnapshot = mySourceSnapshot.Id,\n ReclaimPolicy = \"DELETE\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmySourceDisk, err := compute.NewDisk(ctx, \"my_source_disk\", \u0026compute.DiskArgs{\n\t\t\tName: pulumi.String(\"workstation-config\"),\n\t\t\tSize: pulumi.Int(10),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmySourceSnapshot, err := compute.NewSnapshot(ctx, \"my_source_snapshot\", \u0026compute.SnapshotArgs{\n\t\t\tName: pulumi.String(\"workstation-config\"),\n\t\t\tSourceDisk: mySourceDisk.Name,\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: defaultWorkstationCluster.Location,\n\t\t\tPersistentDirectories: workstations.WorkstationConfigPersistentDirectoryArray{\n\t\t\t\t\u0026workstations.WorkstationConfigPersistentDirectoryArgs{\n\t\t\t\t\tMountPath: pulumi.String(\"/home\"),\n\t\t\t\t\tGcePd: \u0026workstations.WorkstationConfigPersistentDirectoryGcePdArgs{\n\t\t\t\t\t\tSourceSnapshot: mySourceSnapshot.ID(),\n\t\t\t\t\t\tReclaimPolicy: pulumi.String(\"DELETE\"),\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\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.Snapshot;\nimport com.pulumi.gcp.compute.SnapshotArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigPersistentDirectoryGcePdArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var mySourceDisk = new Disk(\"mySourceDisk\", DiskArgs.builder()\n .name(\"workstation-config\")\n .size(10)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var mySourceSnapshot = new Snapshot(\"mySourceSnapshot\", SnapshotArgs.builder()\n .name(\"workstation-config\")\n .sourceDisk(mySourceDisk.name())\n .zone(\"us-central1-a\")\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(defaultWorkstationCluster.location())\n .persistentDirectories(WorkstationConfigPersistentDirectoryArgs.builder()\n .mountPath(\"/home\")\n .gcePd(WorkstationConfigPersistentDirectoryGcePdArgs.builder()\n .sourceSnapshot(mySourceSnapshot.id())\n .reclaimPolicy(\"DELETE\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n mySourceDisk:\n type: gcp:compute:Disk\n name: my_source_disk\n properties:\n name: workstation-config\n size: 10\n type: pd-ssd\n zone: us-central1-a\n mySourceSnapshot:\n type: gcp:compute:Snapshot\n name: my_source_snapshot\n properties:\n name: workstation-config\n sourceDisk: ${mySourceDisk.name}\n zone: us-central1-a\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: ${defaultWorkstationCluster.location}\n persistentDirectories:\n - mountPath: /home\n gcePd:\n sourceSnapshot: ${mySourceSnapshot.id}\n reclaimPolicy: DELETE\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Shielded Instance Config\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n shieldedInstanceConfig: {\n enableSecureBoot: true,\n enableVtpm: true,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"e2-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"shielded_instance_config\": {\n \"enable_secure_boot\": True,\n \"enable_vtpm\": True,\n },\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n ShieldedInstanceConfig = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs\n {\n EnableSecureBoot = true,\n EnableVtpm = true,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tShieldedInstanceConfig: \u0026workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs{\n\t\t\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t\t\t\tEnableVtpm: pulumi.Bool(true),\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\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .shieldedInstanceConfig(WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs.builder()\n .enableSecureBoot(true)\n .enableVtpm(true)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n shieldedInstanceConfig:\n enableSecureBoot: true\n enableVtpm: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Accelerators\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"n1-standard-2\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n accelerators: [{\n type: \"nvidia-tesla-t4\",\n count: 1,\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"n1-standard-2\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"accelerators\": [{\n \"type\": \"nvidia-tesla-t4\",\n \"count\": 1,\n }],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"n1-standard-2\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n Accelerators = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceAcceleratorArgs\n {\n Type = \"nvidia-tesla-t4\",\n Count = 1,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-2\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tAccelerators: workstations.WorkstationConfigHostGceInstanceAcceleratorArray{\n\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceAcceleratorArgs{\n\t\t\t\t\t\t\tType: pulumi.String(\"nvidia-tesla-t4\"),\n\t\t\t\t\t\t\tCount: pulumi.Int(1),\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\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"n1-standard-2\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .accelerators(WorkstationConfigHostGceInstanceAcceleratorArgs.builder()\n .type(\"nvidia-tesla-t4\")\n .count(\"1\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: n1-standard-2\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n accelerators:\n - type: nvidia-tesla-t4\n count: '1'\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Boost\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n boostConfigs: [\n {\n id: \"boost-1\",\n machineType: \"n1-standard-2\",\n accelerators: [{\n type: \"nvidia-tesla-t4\",\n count: 1,\n }],\n },\n {\n id: \"boost-2\",\n machineType: \"n1-standard-2\",\n poolSize: 2,\n bootDiskSizeGb: 30,\n enableNestedVirtualization: true,\n },\n ],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"e2-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"boost_configs\": [\n {\n \"id\": \"boost-1\",\n \"machine_type\": \"n1-standard-2\",\n \"accelerators\": [{\n \"type\": \"nvidia-tesla-t4\",\n \"count\": 1,\n }],\n },\n {\n \"id\": \"boost-2\",\n \"machine_type\": \"n1-standard-2\",\n \"pool_size\": 2,\n \"boot_disk_size_gb\": 30,\n \"enable_nested_virtualization\": True,\n },\n ],\n },\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n BoostConfigs = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceBoostConfigArgs\n {\n Id = \"boost-1\",\n MachineType = \"n1-standard-2\",\n Accelerators = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs\n {\n Type = \"nvidia-tesla-t4\",\n Count = 1,\n },\n },\n },\n new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceBoostConfigArgs\n {\n Id = \"boost-2\",\n MachineType = \"n1-standard-2\",\n PoolSize = 2,\n BootDiskSizeGb = 30,\n EnableNestedVirtualization = true,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tBoostConfigs: workstations.WorkstationConfigHostGceInstanceBoostConfigArray{\n\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceBoostConfigArgs{\n\t\t\t\t\t\t\tId: pulumi.String(\"boost-1\"),\n\t\t\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-2\"),\n\t\t\t\t\t\t\tAccelerators: workstations.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArray{\n\t\t\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs{\n\t\t\t\t\t\t\t\t\tType: pulumi.String(\"nvidia-tesla-t4\"),\n\t\t\t\t\t\t\t\t\tCount: pulumi.Int(1),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026workstations.WorkstationConfigHostGceInstanceBoostConfigArgs{\n\t\t\t\t\t\t\tId: pulumi.String(\"boost-2\"),\n\t\t\t\t\t\t\tMachineType: pulumi.String(\"n1-standard-2\"),\n\t\t\t\t\t\t\tPoolSize: pulumi.Int(2),\n\t\t\t\t\t\t\tBootDiskSizeGb: pulumi.Int(30),\n\t\t\t\t\t\t\tEnableNestedVirtualization: pulumi.Bool(true),\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\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .boostConfigs( \n WorkstationConfigHostGceInstanceBoostConfigArgs.builder()\n .id(\"boost-1\")\n .machineType(\"n1-standard-2\")\n .accelerators(WorkstationConfigHostGceInstanceBoostConfigAcceleratorArgs.builder()\n .type(\"nvidia-tesla-t4\")\n .count(\"1\")\n .build())\n .build(),\n WorkstationConfigHostGceInstanceBoostConfigArgs.builder()\n .id(\"boost-2\")\n .machineType(\"n1-standard-2\")\n .poolSize(2)\n .bootDiskSizeGb(30)\n .enableNestedVirtualization(true)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n boostConfigs:\n - id: boost-1\n machineType: n1-standard-2\n accelerators:\n - type: nvidia-tesla-t4\n count: '1'\n - id: boost-2\n machineType: n1-standard-2\n poolSize: 2\n bootDiskSizeGb: 30\n enableNestedVirtualization: true\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Encryption Key\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultKeyRing = new gcp.kms.KeyRing(\"default\", {\n name: \"workstation-cluster\",\n location: \"us-central1\",\n});\nconst defaultCryptoKey = new gcp.kms.CryptoKey(\"default\", {\n name: \"workstation-cluster\",\n keyRing: defaultKeyRing.id,\n});\nconst defaultAccount = new gcp.serviceaccount.Account(\"default\", {\n accountId: \"my-account\",\n displayName: \"Service Account\",\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n shieldedInstanceConfig: {\n enableSecureBoot: true,\n enableVtpm: true,\n },\n },\n },\n encryptionKey: {\n kmsKey: defaultCryptoKey.id,\n kmsKeyServiceAccount: defaultAccount.email,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_key_ring = gcp.kms.KeyRing(\"default\",\n name=\"workstation-cluster\",\n location=\"us-central1\")\ndefault_crypto_key = gcp.kms.CryptoKey(\"default\",\n name=\"workstation-cluster\",\n key_ring=default_key_ring.id)\ndefault_account = gcp.serviceaccount.Account(\"default\",\n account_id=\"my-account\",\n display_name=\"Service Account\")\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"e2-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n \"shielded_instance_config\": {\n \"enable_secure_boot\": True,\n \"enable_vtpm\": True,\n },\n },\n },\n encryption_key={\n \"kms_key\": default_crypto_key.id,\n \"kms_key_service_account\": default_account.email,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultKeyRing = new Gcp.Kms.KeyRing(\"default\", new()\n {\n Name = \"workstation-cluster\",\n Location = \"us-central1\",\n });\n\n var defaultCryptoKey = new Gcp.Kms.CryptoKey(\"default\", new()\n {\n Name = \"workstation-cluster\",\n KeyRing = defaultKeyRing.Id,\n });\n\n var defaultAccount = new Gcp.ServiceAccount.Account(\"default\", new()\n {\n AccountId = \"my-account\",\n DisplayName = \"Service Account\",\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n ShieldedInstanceConfig = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs\n {\n EnableSecureBoot = true,\n EnableVtpm = true,\n },\n },\n },\n EncryptionKey = new Gcp.Workstations.Inputs.WorkstationConfigEncryptionKeyArgs\n {\n KmsKey = defaultCryptoKey.Id,\n KmsKeyServiceAccount = defaultAccount.Email,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/serviceaccount\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultKeyRing, err := kms.NewKeyRing(ctx, \"default\", \u0026kms.KeyRingArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultCryptoKey, err := kms.NewCryptoKey(ctx, \"default\", \u0026kms.CryptoKeyArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tKeyRing: defaultKeyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultAccount, err := serviceaccount.NewAccount(ctx, \"default\", \u0026serviceaccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-account\"),\n\t\t\tDisplayName: pulumi.String(\"Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t\tShieldedInstanceConfig: \u0026workstations.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs{\n\t\t\t\t\t\tEnableSecureBoot: pulumi.Bool(true),\n\t\t\t\t\t\tEnableVtpm: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tEncryptionKey: \u0026workstations.WorkstationConfigEncryptionKeyArgs{\n\t\t\t\tKmsKey: defaultCryptoKey.ID(),\n\t\t\t\tKmsKeyServiceAccount: defaultAccount.Email,\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.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.serviceaccount.Account;\nimport com.pulumi.gcp.serviceaccount.AccountArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigEncryptionKeyArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultKeyRing = new KeyRing(\"defaultKeyRing\", KeyRingArgs.builder()\n .name(\"workstation-cluster\")\n .location(\"us-central1\")\n .build());\n\n var defaultCryptoKey = new CryptoKey(\"defaultCryptoKey\", CryptoKeyArgs.builder()\n .name(\"workstation-cluster\")\n .keyRing(defaultKeyRing.id())\n .build());\n\n var defaultAccount = new Account(\"defaultAccount\", AccountArgs.builder()\n .accountId(\"my-account\")\n .displayName(\"Service Account\")\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .shieldedInstanceConfig(WorkstationConfigHostGceInstanceShieldedInstanceConfigArgs.builder()\n .enableSecureBoot(true)\n .enableVtpm(true)\n .build())\n .build())\n .build())\n .encryptionKey(WorkstationConfigEncryptionKeyArgs.builder()\n .kmsKey(defaultCryptoKey.id())\n .kmsKeyServiceAccount(defaultAccount.email())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultKeyRing:\n type: gcp:kms:KeyRing\n name: default\n properties:\n name: workstation-cluster\n location: us-central1\n defaultCryptoKey:\n type: gcp:kms:CryptoKey\n name: default\n properties:\n name: workstation-cluster\n keyRing: ${defaultKeyRing.id}\n defaultAccount:\n type: gcp:serviceaccount:Account\n name: default\n properties:\n accountId: my-account\n displayName: Service Account\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n shieldedInstanceConfig:\n enableSecureBoot: true\n enableVtpm: true\n encryptionKey:\n kmsKey: ${defaultCryptoKey.id}\n kmsKeyServiceAccount: ${defaultAccount.email}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n### Workstation Config Allowed Ports\n\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Network(\"default\", {\n name: \"workstation-cluster\",\n autoCreateSubnetworks: false,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"default\", {\n name: \"workstation-cluster\",\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: _default.name,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"default\", {\n workstationClusterId: \"workstation-cluster\",\n network: _default.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n});\nconst defaultWorkstationConfig = new gcp.workstations.WorkstationConfig(\"default\", {\n workstationConfigId: \"workstation-config\",\n workstationClusterId: defaultWorkstationCluster.workstationClusterId,\n location: \"us-central1\",\n host: {\n gceInstance: {\n machineType: \"e2-standard-4\",\n bootDiskSizeGb: 35,\n disablePublicIpAddresses: true,\n },\n },\n allowedPorts: [\n {\n first: 80,\n last: 80,\n },\n {\n first: 22,\n last: 22,\n },\n {\n first: 1024,\n last: 65535,\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Network(\"default\",\n name=\"workstation-cluster\",\n auto_create_subnetworks=False)\ndefault_subnetwork = gcp.compute.Subnetwork(\"default\",\n name=\"workstation-cluster\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default.name)\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"default\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n })\ndefault_workstation_config = gcp.workstations.WorkstationConfig(\"default\",\n workstation_config_id=\"workstation-config\",\n workstation_cluster_id=default_workstation_cluster.workstation_cluster_id,\n location=\"us-central1\",\n host={\n \"gce_instance\": {\n \"machine_type\": \"e2-standard-4\",\n \"boot_disk_size_gb\": 35,\n \"disable_public_ip_addresses\": True,\n },\n },\n allowed_ports=[\n {\n \"first\": 80,\n \"last\": 80,\n },\n {\n \"first\": 22,\n \"last\": 22,\n },\n {\n \"first\": 1024,\n \"last\": 65535,\n },\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Network(\"default\", new()\n {\n Name = \"workstation-cluster\",\n AutoCreateSubnetworks = false,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"default\", new()\n {\n Name = \"workstation-cluster\",\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = @default.Name,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"default\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = @default.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n });\n\n var defaultWorkstationConfig = new Gcp.Workstations.WorkstationConfig(\"default\", new()\n {\n WorkstationConfigId = \"workstation-config\",\n WorkstationClusterId = defaultWorkstationCluster.WorkstationClusterId,\n Location = \"us-central1\",\n Host = new Gcp.Workstations.Inputs.WorkstationConfigHostArgs\n {\n GceInstance = new Gcp.Workstations.Inputs.WorkstationConfigHostGceInstanceArgs\n {\n MachineType = \"e2-standard-4\",\n BootDiskSizeGb = 35,\n DisablePublicIpAddresses = true,\n },\n },\n AllowedPorts = new[]\n {\n new Gcp.Workstations.Inputs.WorkstationConfigAllowedPortArgs\n {\n First = 80,\n Last = 80,\n },\n new Gcp.Workstations.Inputs.WorkstationConfigAllowedPortArgs\n {\n First = 22,\n Last = 22,\n },\n new Gcp.Workstations.Inputs.WorkstationConfigAllowedPortArgs\n {\n First = 1024,\n Last = 65535,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewNetwork(ctx, \"default\", \u0026compute.NetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"default\", \u0026compute.SubnetworkArgs{\n\t\t\tName: pulumi.String(\"workstation-cluster\"),\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: _default.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultWorkstationCluster, err := workstations.NewWorkstationCluster(ctx, \"default\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: _default.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationConfig(ctx, \"default\", \u0026workstations.WorkstationConfigArgs{\n\t\t\tWorkstationConfigId: pulumi.String(\"workstation-config\"),\n\t\t\tWorkstationClusterId: defaultWorkstationCluster.WorkstationClusterId,\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tHost: \u0026workstations.WorkstationConfigHostArgs{\n\t\t\t\tGceInstance: \u0026workstations.WorkstationConfigHostGceInstanceArgs{\n\t\t\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\t\t\tBootDiskSizeGb: pulumi.Int(35),\n\t\t\t\t\tDisablePublicIpAddresses: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAllowedPorts: workstations.WorkstationConfigAllowedPortArray{\n\t\t\t\t\u0026workstations.WorkstationConfigAllowedPortArgs{\n\t\t\t\t\tFirst: pulumi.Int(80),\n\t\t\t\t\tLast: pulumi.Int(80),\n\t\t\t\t},\n\t\t\t\t\u0026workstations.WorkstationConfigAllowedPortArgs{\n\t\t\t\t\tFirst: pulumi.Int(22),\n\t\t\t\t\tLast: pulumi.Int(22),\n\t\t\t\t},\n\t\t\t\t\u0026workstations.WorkstationConfigAllowedPortArgs{\n\t\t\t\t\tFirst: pulumi.Int(1024),\n\t\t\t\t\tLast: pulumi.Int(65535),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.WorkstationConfig;\nimport com.pulumi.gcp.workstations.WorkstationConfigArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigHostGceInstanceArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationConfigAllowedPortArgs;\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 default_ = new Network(\"default\", NetworkArgs.builder()\n .name(\"workstation-cluster\")\n .autoCreateSubnetworks(false)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder()\n .name(\"workstation-cluster\")\n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(default_.name())\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder()\n .workstationClusterId(\"workstation-cluster\")\n .network(default_.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build());\n\n var defaultWorkstationConfig = new WorkstationConfig(\"defaultWorkstationConfig\", WorkstationConfigArgs.builder()\n .workstationConfigId(\"workstation-config\")\n .workstationClusterId(defaultWorkstationCluster.workstationClusterId())\n .location(\"us-central1\")\n .host(WorkstationConfigHostArgs.builder()\n .gceInstance(WorkstationConfigHostGceInstanceArgs.builder()\n .machineType(\"e2-standard-4\")\n .bootDiskSizeGb(35)\n .disablePublicIpAddresses(true)\n .build())\n .build())\n .allowedPorts( \n WorkstationConfigAllowedPortArgs.builder()\n .first(80)\n .last(80)\n .build(),\n WorkstationConfigAllowedPortArgs.builder()\n .first(22)\n .last(22)\n .build(),\n WorkstationConfigAllowedPortArgs.builder()\n .first(1024)\n .last(65535)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Network\n properties:\n name: workstation-cluster\n autoCreateSubnetworks: false\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n name: default\n properties:\n name: workstation-cluster\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${default.name}\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n name: default\n properties:\n workstationClusterId: workstation-cluster\n network: ${default.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n defaultWorkstationConfig:\n type: gcp:workstations:WorkstationConfig\n name: default\n properties:\n workstationConfigId: workstation-config\n workstationClusterId: ${defaultWorkstationCluster.workstationClusterId}\n location: us-central1\n host:\n gceInstance:\n machineType: e2-standard-4\n bootDiskSizeGb: 35\n disablePublicIpAddresses: true\n allowedPorts:\n - first: 80\n last: 80\n - first: 22\n last: 22\n - first: 1024\n last: 65535\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\nWorkstationConfig can be imported using any of these accepted formats:\n\n* `projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}}/workstationConfigs/{{workstation_config_id}}`\n\n* `{{project}}/{{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}`\n\n* `{{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}`\n\nWhen using the `pulumi import` command, WorkstationConfig can be imported using one of the formats above. For example:\n\n```sh\n$ pulumi import gcp:workstations/workstationConfig:WorkstationConfig default projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}}/workstationConfigs/{{workstation_config_id}}\n```\n\n```sh\n$ pulumi import gcp:workstations/workstationConfig:WorkstationConfig default {{project}}/{{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}\n```\n\n```sh\n$ pulumi import gcp:workstations/workstationConfig:WorkstationConfig default {{location}}/{{workstation_cluster_id}}/{{workstation_config_id}}\n```\n\n", "properties": { "allowedPorts": { "type": "array", @@ -275462,6 +278740,173 @@ "type": "object" } }, + "gcp:backupdisasterrecovery/getBackupPlan:getBackupPlan": { + "inputs": { + "description": "A collection of arguments for invoking getBackupPlan.\n", + "properties": { + "backupPlanId": { + "type": "string" + }, + "location": { + "type": "string" + }, + "project": { + "type": "string" + } + }, + "type": "object", + "required": [ + "backupPlanId", + "location" + ] + }, + "outputs": { + "description": "A collection of values returned by getBackupPlan.\n", + "properties": { + "backupPlanId": { + "type": "string" + }, + "backupRules": { + "items": { + "$ref": "#/types/gcp:backupdisasterrecovery/getBackupPlanBackupRule:getBackupPlanBackupRule" + }, + "type": "array" + }, + "backupVault": { + "type": "string" + }, + "backupVaultServiceAccount": { + "type": "string" + }, + "createTime": { + "type": "string" + }, + "description": { + "type": "string" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "location": { + "type": "string" + }, + "name": { + "type": "string" + }, + "project": { + "type": "string" + }, + "resourceType": { + "type": "string" + }, + "updateTime": { + "type": "string" + } + }, + "required": [ + "backupPlanId", + "backupRules", + "backupVault", + "backupVaultServiceAccount", + "createTime", + "description", + "location", + "name", + "resourceType", + "updateTime", + "id" + ], + "type": "object" + } + }, + "gcp:backupdisasterrecovery/getBackupPlanAssociation:getBackupPlanAssociation": { + "description": "## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my-backupplan-association = gcp.backupdisasterrecovery.getBackupPlanAssociation({\n location: \"us-central1\",\n backupPlanAssociationId: \"bpa-id\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_backupplan_association = gcp.backupdisasterrecovery.get_backup_plan_association(location=\"us-central1\",\n backup_plan_association_id=\"bpa-id\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_backupplan_association = Gcp.BackupDisasterRecovery.GetBackupPlanAssociation.Invoke(new()\n {\n Location = \"us-central1\",\n BackupPlanAssociationId = \"bpa-id\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/backupdisasterrecovery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := backupdisasterrecovery.LookupBackupPlanAssociation(ctx, \u0026backupdisasterrecovery.LookupBackupPlanAssociationArgs{\n\t\t\tLocation: \"us-central1\",\n\t\t\tBackupPlanAssociationId: \"bpa-id\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupdisasterrecoveryFunctions;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.GetBackupPlanAssociationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var my-backupplan-association = BackupdisasterrecoveryFunctions.getBackupPlanAssociation(GetBackupPlanAssociationArgs.builder()\n .location(\"us-central1\")\n .backupPlanAssociationId(\"bpa-id\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n my-backupplan-association:\n fn::invoke:\n Function: gcp:backupdisasterrecovery:getBackupPlanAssociation\n Arguments:\n location: us-central1\n backupPlanAssociationId: bpa-id\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "inputs": { + "description": "A collection of arguments for invoking getBackupPlanAssociation.\n", + "properties": { + "backupPlanAssociationId": { + "type": "string", + "description": "The id of Backupplan association resource.\n\n- - -\n" + }, + "location": { + "type": "string", + "description": "The location in which the Backupplan association resource belongs.\n" + }, + "project": { + "type": "string" + } + }, + "type": "object", + "required": [ + "backupPlanAssociationId", + "location" + ] + }, + "outputs": { + "description": "A collection of values returned by getBackupPlanAssociation.\n", + "properties": { + "backupPlan": { + "type": "string" + }, + "backupPlanAssociationId": { + "type": "string" + }, + "createTime": { + "type": "string" + }, + "dataSource": { + "type": "string" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "lastSuccessfulBackupConsistencyTime": { + "type": "string" + }, + "location": { + "type": "string" + }, + "name": { + "type": "string" + }, + "project": { + "type": "string" + }, + "resource": { + "type": "string" + }, + "resourceType": { + "type": "string" + }, + "rulesConfigInfos": { + "items": { + "$ref": "#/types/gcp:backupdisasterrecovery/getBackupPlanAssociationRulesConfigInfo:getBackupPlanAssociationRulesConfigInfo" + }, + "type": "array" + }, + "updateTime": { + "type": "string" + } + }, + "required": [ + "backupPlan", + "backupPlanAssociationId", + "createTime", + "dataSource", + "lastSuccessfulBackupConsistencyTime", + "location", + "name", + "resource", + "resourceType", + "rulesConfigInfos", + "updateTime", + "id" + ], + "type": "object" + } + }, "gcp:backupdisasterrecovery/getManagementServer:getManagementServer": { "description": "## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my-backup-dr-management-server = gcp.backupdisasterrecovery.getManagementServer({\n location: \"us-central1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_backup_dr_management_server = gcp.backupdisasterrecovery.get_management_server(location=\"us-central1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_backup_dr_management_server = Gcp.BackupDisasterRecovery.GetManagementServer.Invoke(new()\n {\n Location = \"us-central1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/backupdisasterrecovery\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := backupdisasterrecovery.LookupManagementServer(ctx, \u0026backupdisasterrecovery.LookupManagementServerArgs{\n\t\t\tLocation: \"us-central1\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.backupdisasterrecovery.BackupdisasterrecoveryFunctions;\nimport com.pulumi.gcp.backupdisasterrecovery.inputs.GetManagementServerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var my-backup-dr-management-server = BackupdisasterrecoveryFunctions.getManagementServer(GetManagementServerArgs.builder()\n .location(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n my-backup-dr-management-server:\n fn::invoke:\n Function: gcp:backupdisasterrecovery:getManagementServer\n Arguments:\n location: us-central1\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", "inputs": { @@ -283261,6 +286706,12 @@ "description": "The provider-assigned unique ID for this managed resource.\n", "type": "string" }, + "instanceFlexibilityPolicies": { + "items": { + "$ref": "#/types/gcp:compute/getRegionInstanceGroupManagerInstanceFlexibilityPolicy:getRegionInstanceGroupManagerInstanceFlexibilityPolicy" + }, + "type": "array" + }, "instanceGroup": { "type": "string" }, @@ -283370,6 +286821,7 @@ "distributionPolicyTargetShape", "distributionPolicyZones", "fingerprint", + "instanceFlexibilityPolicies", "instanceGroup", "instanceLifecyclePolicies", "listManagedInstancesResults", @@ -285400,6 +288852,12 @@ }, "type": "array" }, + "controlPlaneEndpointsConfigs": { + "items": { + "$ref": "#/types/gcp:container/getClusterControlPlaneEndpointsConfig:getClusterControlPlaneEndpointsConfig" + }, + "type": "array" + }, "costManagementConfigs": { "items": { "$ref": "#/types/gcp:container/getClusterCostManagementConfig:getClusterCostManagementConfig" @@ -285712,6 +289170,12 @@ "tpuIpv4CidrBlock": { "type": "string" }, + "userManagedKeysConfigs": { + "items": { + "$ref": "#/types/gcp:container/getClusterUserManagedKeysConfig:getClusterUserManagedKeysConfig" + }, + "type": "array" + }, "verticalPodAutoscalings": { "items": { "$ref": "#/types/gcp:container/getClusterVerticalPodAutoscaling:getClusterVerticalPodAutoscaling" @@ -285740,6 +289204,7 @@ "clusterIpv4Cidr", "clusterTelemetries", "confidentialNodes", + "controlPlaneEndpointsConfigs", "costManagementConfigs", "databaseEncryptions", "datapathProvider", @@ -285806,6 +289271,7 @@ "pulumiLabels", "tpuConfigs", "tpuIpv4CidrBlock", + "userManagedKeysConfigs", "verticalPodAutoscalings", "workloadAltsConfigs", "workloadIdentityConfigs", @@ -295868,6 +299334,89 @@ "type": "object" } }, + "gcp:spanner/getDatabase:getDatabase": { + "description": "Get a spanner database from Google Cloud by its name and instance name.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst foo = gcp.spanner.getDatabase({\n name: \"foo\",\n instance: instance.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfoo = gcp.spanner.get_database(name=\"foo\",\n instance=instance[\"name\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Gcp.Spanner.GetDatabase.Invoke(new()\n {\n Name = \"foo\",\n Instance = instance.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/spanner\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := spanner.LookupDatabase(ctx, \u0026spanner.LookupDatabaseArgs{\n\t\t\tName: \"foo\",\n\t\t\tInstance: instance.Name,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.spanner.SpannerFunctions;\nimport com.pulumi.gcp.spanner.inputs.GetDatabaseArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var foo = SpannerFunctions.getDatabase(GetDatabaseArgs.builder()\n .name(\"foo\")\n .instance(instance.name())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: gcp:spanner:getDatabase\n Arguments:\n name: foo\n instance: ${instance.name}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "inputs": { + "description": "A collection of arguments for invoking getDatabase.\n", + "properties": { + "instance": { + "type": "string", + "description": "The name of the database's spanner instance.\n\n- - -\n" + }, + "name": { + "type": "string", + "description": "The name of the spanner database.\n" + }, + "project": { + "type": "string", + "description": "The project in which the resource belongs. If it\nis not provided, the provider project is used.\n" + } + }, + "type": "object", + "required": [ + "instance", + "name" + ] + }, + "outputs": { + "description": "A collection of values returned by getDatabase.\n", + "properties": { + "databaseDialect": { + "type": "string" + }, + "ddls": { + "items": { + "type": "string" + }, + "type": "array" + }, + "deletionProtection": { + "type": "boolean" + }, + "enableDropProtection": { + "type": "boolean" + }, + "encryptionConfigs": { + "items": { + "$ref": "#/types/gcp:spanner/getDatabaseEncryptionConfig:getDatabaseEncryptionConfig" + }, + "type": "array" + }, + "id": { + "description": "The provider-assigned unique ID for this managed resource.\n", + "type": "string" + }, + "instance": { + "type": "string" + }, + "name": { + "type": "string" + }, + "project": { + "type": "string" + }, + "state": { + "type": "string" + }, + "versionRetentionPeriod": { + "type": "string" + } + }, + "required": [ + "databaseDialect", + "ddls", + "deletionProtection", + "enableDropProtection", + "encryptionConfigs", + "instance", + "name", + "state", + "versionRetentionPeriod", + "id" + ], + "type": "object" + } + }, "gcp:spanner/getDatabaseIamPolicy:getDatabaseIamPolicy": { "description": "Retrieves the current IAM policy data for a Spanner database.\n\n## example\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst foo = gcp.spanner.getDatabaseIamPolicy({\n project: database.project,\n database: database.name,\n instance: database.instance,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfoo = gcp.spanner.get_database_iam_policy(project=database[\"project\"],\n database=database[\"name\"],\n instance=database[\"instance\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Gcp.Spanner.GetDatabaseIamPolicy.Invoke(new()\n {\n Project = database.Project,\n Database = database.Name,\n Instance = database.Instance,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/spanner\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := spanner.GetDatabaseIamPolicy(ctx, \u0026spanner.GetDatabaseIamPolicyArgs{\n\t\t\tProject: pulumi.StringRef(database.Project),\n\t\t\tDatabase: database.Name,\n\t\t\tInstance: database.Instance,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.spanner.SpannerFunctions;\nimport com.pulumi.gcp.spanner.inputs.GetDatabaseIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var foo = SpannerFunctions.getDatabaseIamPolicy(GetDatabaseIamPolicyArgs.builder()\n .project(database.project())\n .database(database.name())\n .instance(database.instance())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: gcp:spanner:getDatabaseIamPolicy\n Arguments:\n project: ${database.project}\n database: ${database.name}\n instance: ${database.instance}\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", "inputs": { @@ -295968,6 +299517,9 @@ "config": { "type": "string" }, + "defaultBackupScheduleType": { + "type": "string" + }, "displayName": { "type": "string" }, @@ -296019,6 +299571,7 @@ }, "required": [ "autoscalingConfigs", + "defaultBackupScheduleType", "edition", "effectiveLabels", "forceDestroy", @@ -296372,6 +299925,12 @@ }, "type": "array" }, + "replicaNames": { + "items": { + "type": "string" + }, + "type": "array" + }, "restoreBackupContexts": { "items": { "$ref": "#/types/gcp:sql/getDatabaseInstanceRestoreBackupContext:getDatabaseInstanceRestoreBackupContext" @@ -296419,6 +299978,7 @@ "publicIpAddress", "region", "replicaConfigurations", + "replicaNames", "restoreBackupContexts", "rootPassword", "selfLink",