{"attribution":"This Pulumi package is based on the [`redpanda` Terraform Provider](https://github.com/redpanda-data/terraform-provider-redpanda).","config":{"variables":{"accessToken":{"description":"Redpanda client token. You need either <span pulumi-lang-nodejs=\"`accessToken`\" pulumi-lang-dotnet=\"`AccessToken`\" pulumi-lang-go=\"`accessToken`\" pulumi-lang-python=\"`access_token`\" pulumi-lang-yaml=\"`accessToken`\" pulumi-lang-java=\"`accessToken`\">`access_token`</span>, or both <span pulumi-lang-nodejs=\"`clientId`\" pulumi-lang-dotnet=\"`ClientId`\" pulumi-lang-go=\"`clientId`\" pulumi-lang-python=\"`client_id`\" pulumi-lang-yaml=\"`clientId`\" pulumi-lang-java=\"`clientId`\">`client_id`</span> and <span pulumi-lang-nodejs=\"`clientSecret`\" pulumi-lang-dotnet=\"`ClientSecret`\" pulumi-lang-go=\"`clientSecret`\" pulumi-lang-python=\"`client_secret`\" pulumi-lang-yaml=\"`clientSecret`\" pulumi-lang-java=\"`clientSecret`\">`client_secret`</span> to use this provider. Can also be set with the `REDPANDA_ACCESS_TOKEN` environment variable.","secret":true,"type":"string"},"awsAccessKeyId":{"description":"AWS access key ID for BYOC clusters. Can also be set via AWS_ACCESS_KEY_ID.","secret":true,"type":"string"},"awsSecretAccessKey":{"description":"AWS secret access key for BYOC clusters. Can also be set via AWS_SECRET_ACCESS_KEY.","secret":true,"type":"string"},"awsSessionToken":{"description":"AWS session token for BYOC clusters (for temporary credentials). Can also be set via AWS_SESSION_TOKEN.","secret":true,"type":"string"},"azureClientId":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Can also be specified in the environment as AZURE_CLIENT_ID or ARM_CLIENT_ID","type":"string"},"azureClientSecret":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Can also be specified in the environment as AZURE_CLIENT_SECRET or ARM_CLIENT_SECRET","secret":true,"type":"string"},"azureSubscriptionId":{"description":"The default Azure Subscription ID which should be used for Redpanda BYOC clusters. If another subscription is specified on a resource, it will take precedence. This can also be sourced from the `ARM_SUBSCRIPTION_ID` environment variable.","type":"string"},"azureTenantId":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Can also be specified in the environment as AZURE_TENANT_ID or ARM_TENANT_ID","type":"string"},"clientId":{"description":"The ID for the client. You need either <span pulumi-lang-nodejs=\"`clientId`\" pulumi-lang-dotnet=\"`ClientId`\" pulumi-lang-go=\"`clientId`\" pulumi-lang-python=\"`client_id`\" pulumi-lang-yaml=\"`clientId`\" pulumi-lang-java=\"`clientId`\">`client_id`</span> AND <span pulumi-lang-nodejs=\"`clientSecret`\" pulumi-lang-dotnet=\"`ClientSecret`\" pulumi-lang-go=\"`clientSecret`\" pulumi-lang-python=\"`client_secret`\" pulumi-lang-yaml=\"`clientSecret`\" pulumi-lang-java=\"`clientSecret`\">`client_secret`</span>, or <span pulumi-lang-nodejs=\"`accessToken`\" pulumi-lang-dotnet=\"`AccessToken`\" pulumi-lang-go=\"`accessToken`\" pulumi-lang-python=\"`access_token`\" pulumi-lang-yaml=\"`accessToken`\" pulumi-lang-java=\"`accessToken`\">`access_token`</span>, to use this provider. Can also be set with the `REDPANDA_CLIENT_ID` environment variable.","secret":true,"type":"string"},"clientSecret":{"description":"Redpanda client secret. You need either <span pulumi-lang-nodejs=\"`clientId`\" pulumi-lang-dotnet=\"`ClientId`\" pulumi-lang-go=\"`clientId`\" pulumi-lang-python=\"`client_id`\" pulumi-lang-yaml=\"`clientId`\" pulumi-lang-java=\"`clientId`\">`client_id`</span> AND <span pulumi-lang-nodejs=\"`clientSecret`\" pulumi-lang-dotnet=\"`ClientSecret`\" pulumi-lang-go=\"`clientSecret`\" pulumi-lang-python=\"`client_secret`\" pulumi-lang-yaml=\"`clientSecret`\" pulumi-lang-java=\"`clientSecret`\">`client_secret`</span>, or <span pulumi-lang-nodejs=\"`accessToken`\" pulumi-lang-dotnet=\"`AccessToken`\" pulumi-lang-go=\"`accessToken`\" pulumi-lang-python=\"`access_token`\" pulumi-lang-yaml=\"`accessToken`\" pulumi-lang-java=\"`accessToken`\">`access_token`</span>, to use this provider. Can also be set with the `REDPANDA_CLIENT_SECRET` environment variable.","secret":true,"type":"string"},"gcpProjectId":{"description":"The default Google Cloud Project ID to use for Redpanda BYOC clusters. If another project is specified on a resource, it will take precedence. This can also be sourced from the `GOOGLE_PROJECT` environment variable, or any of the following ordered by precedence: `GOOGLE_PROJECT`, `GOOGLE_CLOUD_PROJECT`, `GCLOUD_PROJECT`, or `CLOUDSDK_CORE_PROJECT`.","type":"string"},"googleCredentials":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Can also be specified in the environment as GOOGLE_CREDENTIALS","secret":true,"type":"string"},"googleCredentialsBase64":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Is a convenience passthrough for base64 encoded credentials intended for use in CI/CD. Can also be specified in the environment as GOOGLE_CREDENTIALS_BASE64","secret":true,"type":"string"}}},"description":"A Pulumi provider dynamically bridged from redpanda.","functions":{"pulumi:providers:redpanda/terraformConfig":{"description":"This function returns a Terraform config object with terraform-namecased keys,to be used with the Terraform Module Provider.","inputs":{"properties":{"__self__":{"$ref":"#/resources/pulumi:providers:redpanda"}},"required":["__self__"],"type":"object"},"outputs":{"properties":{"result":{"additionalProperties":{"$ref":"pulumi.json#/Any"},"type":"object"}},"required":["result"],"type":"object"}},"redpanda:index/getCluster:getCluster":{"description":"Cluster data source\n\n\n## Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = redpanda.getCluster({\n    id: \"cluster_id\",\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.get_cluster(id=\"cluster_id\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = Redpanda.GetCluster.Invoke(new()\n    {\n        Id = \"cluster_id\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\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 := redpanda.LookupCluster(ctx, &redpanda.LookupClusterArgs{\n\t\t\tId: \"cluster_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.redpanda.RedpandaFunctions;\nimport com.pulumi.redpanda.inputs.GetClusterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = RedpandaFunctions.getCluster(GetClusterArgs.builder()\n            .id(\"cluster_id\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  example:\n    fn::invoke:\n      function: redpanda:getCluster\n      arguments:\n        id: cluster_id\n```\n<!--End PulumiCodeChooser -->\n\n### Example Usage of a data source BYOC to manage users and ACLs\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst test = redpanda.getCluster({\n    id: clusterId,\n});\nconst testTopic = new redpanda.Topic(\"test\", {\n    name: topicName,\n    partitionCount: partitionCount,\n    replicationFactor: replicationFactor,\n    clusterApiUrl: test.then(test => test.clusterApiUrl),\n    allowDeletion: true,\n    configuration: topicConfig,\n});\nconst testUser = new redpanda.User(\"test\", {\n    name: userName,\n    password: userPw,\n    mechanism: mechanism,\n    clusterApiUrl: test.then(test => test.clusterApiUrl),\n    allowDeletion: userAllowDeletion,\n});\nconst testAcl = new redpanda.Acl(\"test\", {\n    resourceType: \"CLUSTER\",\n    resourceName: \"kafka-cluster\",\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"ALTER\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: test.then(test => test.clusterApiUrl),\n    allowDeletion: aclAllowDeletion,\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\ntest = redpanda.get_cluster(id=cluster_id)\ntest_topic = redpanda.Topic(\"test\",\n    name=topic_name,\n    partition_count=partition_count,\n    replication_factor=replication_factor,\n    cluster_api_url=test.cluster_api_url,\n    allow_deletion=True,\n    configuration=topic_config)\ntest_user = redpanda.User(\"test\",\n    name=user_name,\n    password=user_pw,\n    mechanism=mechanism,\n    cluster_api_url=test.cluster_api_url,\n    allow_deletion=user_allow_deletion)\ntest_acl = redpanda.Acl(\"test\",\n    resource_type=\"CLUSTER\",\n    resource_name_=\"kafka-cluster\",\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"ALTER\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var test = Redpanda.GetCluster.Invoke(new()\n    {\n        Id = clusterId,\n    });\n\n    var testTopic = new Redpanda.Topic(\"test\", new()\n    {\n        Name = topicName,\n        PartitionCount = partitionCount,\n        ReplicationFactor = replicationFactor,\n        ClusterApiUrl = test.Apply(getClusterResult => getClusterResult.ClusterApiUrl),\n        AllowDeletion = true,\n        Configuration = topicConfig,\n    });\n\n    var testUser = new Redpanda.User(\"test\", new()\n    {\n        Name = userName,\n        Password = userPw,\n        Mechanism = mechanism,\n        ClusterApiUrl = test.Apply(getClusterResult => getClusterResult.ClusterApiUrl),\n        AllowDeletion = userAllowDeletion,\n    });\n\n    var testAcl = new Redpanda.Acl(\"test\", new()\n    {\n        ResourceType = \"CLUSTER\",\n        ResourceName = \"kafka-cluster\",\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"ALTER\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = test.Apply(getClusterResult => getClusterResult.ClusterApiUrl),\n        AllowDeletion = aclAllowDeletion,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := redpanda.LookupCluster(ctx, &redpanda.LookupClusterArgs{\n\t\t\tId: clusterId,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewTopic(ctx, \"test\", &redpanda.TopicArgs{\n\t\t\tName:              pulumi.Any(topicName),\n\t\t\tPartitionCount:    pulumi.Any(partitionCount),\n\t\t\tReplicationFactor: pulumi.Any(replicationFactor),\n\t\t\tClusterApiUrl:     pulumi.String(test.ClusterApiUrl),\n\t\t\tAllowDeletion:     pulumi.Bool(true),\n\t\t\tConfiguration:     pulumi.Any(topicConfig),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestUser, err := redpanda.NewUser(ctx, \"test\", &redpanda.UserArgs{\n\t\t\tName:          pulumi.Any(userName),\n\t\t\tPassword:      pulumi.Any(userPw),\n\t\t\tMechanism:     pulumi.Any(mechanism),\n\t\t\tClusterApiUrl: pulumi.String(test.ClusterApiUrl),\n\t\t\tAllowDeletion: pulumi.Any(userAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewAcl(ctx, \"test\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"CLUSTER\"),\n\t\t\tResourceName:        pulumi.String(\"kafka-cluster\"),\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"ALTER\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  pulumi.String(test.ClusterApiUrl),\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.RedpandaFunctions;\nimport com.pulumi.redpanda.inputs.GetClusterArgs;\nimport com.pulumi.redpanda.Topic;\nimport com.pulumi.redpanda.TopicArgs;\nimport com.pulumi.redpanda.User;\nimport com.pulumi.redpanda.UserArgs;\nimport com.pulumi.redpanda.Acl;\nimport com.pulumi.redpanda.AclArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 test = RedpandaFunctions.getCluster(GetClusterArgs.builder()\n            .id(clusterId)\n            .build());\n\n        var testTopic = new Topic(\"testTopic\", TopicArgs.builder()\n            .name(topicName)\n            .partitionCount(partitionCount)\n            .replicationFactor(replicationFactor)\n            .clusterApiUrl(test.clusterApiUrl())\n            .allowDeletion(true)\n            .configuration(topicConfig)\n            .build());\n\n        var testUser = new User(\"testUser\", UserArgs.builder()\n            .name(userName)\n            .password(userPw)\n            .mechanism(mechanism)\n            .clusterApiUrl(test.clusterApiUrl())\n            .allowDeletion(userAllowDeletion)\n            .build());\n\n        var testAcl = new Acl(\"testAcl\", AclArgs.builder()\n            .resourceType(\"CLUSTER\")\n            .resourceName(\"kafka-cluster\")\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"ALTER\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(test.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testTopic:\n    type: redpanda:Topic\n    name: test\n    properties:\n      name: ${topicName}\n      partitionCount: ${partitionCount}\n      replicationFactor: ${replicationFactor}\n      clusterApiUrl: ${test.clusterApiUrl}\n      allowDeletion: true\n      configuration: ${topicConfig}\n  testUser:\n    type: redpanda:User\n    name: test\n    properties:\n      name: ${userName}\n      password: ${userPw}\n      mechanism: ${mechanism}\n      clusterApiUrl: ${test.clusterApiUrl}\n      allowDeletion: ${userAllowDeletion}\n  testAcl:\n    type: redpanda:Acl\n    name: test\n    properties:\n      resourceType: CLUSTER\n      resourceName: kafka-cluster\n      resourcePatternType: LITERAL\n      principal: User:${testUser.name}\n      host: '*'\n      operation: ALTER\n      permissionType: ALLOW\n      clusterApiUrl: ${test.clusterApiUrl}\n      allowDeletion: ${aclAllowDeletion}\nvariables:\n  test:\n    fn::invoke:\n      function: redpanda:getCluster\n      arguments:\n        id: ${clusterId}\n```\n<!--End PulumiCodeChooser -->\n\n## Limitations\n\nCan only be used with Redpanda Cloud Dedicated and BYOC clusters.\n","inputs":{"description":"A collection of arguments for invoking getCluster.\n","properties":{"id":{"description":"ID of the cluster. ID is an output from the Create Cluster endpoint and cannot be set by the caller.\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FgetClusterTimeouts:getClusterTimeouts"}},"required":["id"],"type":"object"},"outputs":{"description":"A collection of values returned by getCluster.\n","properties":{"allowDeletion":{"description":"Resource will only be deleted when<span pulumi-lang-nodejs=\" allowDeletion \" pulumi-lang-dotnet=\" AllowDeletion \" pulumi-lang-go=\" allowDeletion \" pulumi-lang-python=\" allow_deletion \" pulumi-lang-yaml=\" allowDeletion \" pulumi-lang-java=\" allowDeletion \"> allow_deletion </span>is set to true. Otherwise deletion will fail with a related error.\n","type":"boolean"},"awsPrivateLink":{"$ref":"#/types/redpanda:index%2FgetClusterAwsPrivateLink:getClusterAwsPrivateLink","description":"AWS Private Link configuration\n"},"azurePrivateLink":{"$ref":"#/types/redpanda:index%2FgetClusterAzurePrivateLink:getClusterAzurePrivateLink","description":"Azure Private Link configuration\n"},"cloudProvider":{"description":"Cloud provider where resources are created.\n","type":"string"},"clusterApiUrl":{"description":"The cluster API URL.\n","type":"string"},"clusterConfiguration":{"$ref":"#/types/redpanda:index%2FgetClusterClusterConfiguration:getClusterClusterConfiguration","description":"Cluster Configuration configuration\n"},"clusterType":{"description":"Cluster type. Type is immutable and can only be set on cluster creation. Can be either byoc or dedicated.\n","type":"string"},"connectionType":{"description":"Cluster connection type. Private clusters are not exposed to the internet. For BYOC clusters, **Private** is best-practice.\n","type":"string"},"customerManagedResources":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResources:getClusterCustomerManagedResources","description":"The cloud resources created by user.\n"},"gcpGlobalAccessApiGatewayEnabled":{"description":"gcp*global*access*api*gateway_enabled reports whether global access is enabled on the internal load balancer serving the Console/API Gateway endpoint. Applicable only for GCP.\n","type":"boolean"},"gcpGlobalAccessEnabled":{"description":"gcp*enable*global_access control if global access is enabled on the seed load balancer, applicable only for GCP. Default is false\n","type":"boolean"},"gcpPrivateServiceConnect":{"$ref":"#/types/redpanda:index%2FgetClusterGcpPrivateServiceConnect:getClusterGcpPrivateServiceConnect","description":"GCP Private Service Connect configuration\n"},"httpProxy":{"$ref":"#/types/redpanda:index%2FgetClusterHttpProxy:getClusterHttpProxy","description":"HTTP Proxy properties.\n"},"id":{"description":"ID of the cluster. ID is an output from the Create Cluster endpoint and cannot be set by the caller.\n","type":"string"},"kafkaApi":{"$ref":"#/types/redpanda:index%2FgetClusterKafkaApi:getClusterKafkaApi","description":"Cluster's Kafka API properties.\n"},"kafkaConnect":{"$ref":"#/types/redpanda:index%2FgetClusterKafkaConnect:getClusterKafkaConnect","description":"Kafka Connect configuration\n"},"maintenanceWindowConfig":{"$ref":"#/types/redpanda:index%2FgetClusterMaintenanceWindowConfig:getClusterMaintenanceWindowConfig","description":"Resource describing the maintenance window configuration of a cluster.\n"},"name":{"description":"Unique name of the cluster.\n","type":"string"},"networkId":{"description":"Network ID where cluster is placed.\n","type":"string"},"prometheus":{"$ref":"#/types/redpanda:index%2FgetClusterPrometheus:getClusterPrometheus","description":"Prometheus metrics endpoint properties.\n"},"readReplicaClusterIds":{"description":"IDs of clusters which may create read-only topics from this cluster.\n","items":{"type":"string"},"type":"array"},"redpandaConsole":{"$ref":"#/types/redpanda:index%2FgetClusterRedpandaConsole:getClusterRedpandaConsole","description":"Cluster's Redpanda Console properties.\n"},"redpandaVersion":{"description":"Redpanda Version\n","type":"string"},"region":{"description":"Region represents the name of the region where the cluster will be provisioned.\n","type":"string"},"resourceGroupId":{"description":"Resource group ID of the cluster.\n","type":"string"},"schemaRegistry":{"$ref":"#/types/redpanda:index%2FgetClusterSchemaRegistry:getClusterSchemaRegistry","description":"Cluster's Schema Registry properties.\n"},"state":{"description":"State describes the state of the cluster.\n","type":"string"},"stateDescription":{"$ref":"#/types/redpanda:index%2FgetClusterStateDescription:getClusterStateDescription","description":"Describes errors\n"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags placed on cloud resources. Server-managed keys (prefixed with `redpanda-`) are filtered out of state.\n","type":"object"},"throughputTier":{"description":"Throughput tier of the cluster.\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FgetClusterTimeouts:getClusterTimeouts"},"zones":{"description":"Zones of the cluster. Must be valid zones within the selected region. If multiple zones are used, the cluster is a multi-AZ cluster.\n","items":{"type":"string"},"type":"array"}},"required":["allowDeletion","awsPrivateLink","azurePrivateLink","cloudProvider","clusterApiUrl","clusterConfiguration","clusterType","connectionType","customerManagedResources","gcpGlobalAccessApiGatewayEnabled","gcpGlobalAccessEnabled","gcpPrivateServiceConnect","httpProxy","id","kafkaApi","kafkaConnect","maintenanceWindowConfig","name","networkId","prometheus","readReplicaClusterIds","redpandaConsole","redpandaVersion","region","resourceGroupId","schemaRegistry","state","stateDescription","tags","throughputTier","zones"],"type":"object"}},"redpanda:index/getNetwork:getNetwork":{"description":"Data source for a Redpanda Cloud network\n\n\n## Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = redpanda.getNetwork({\n    id: \"network_id\",\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.get_network(id=\"network_id\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = Redpanda.GetNetwork.Invoke(new()\n    {\n        Id = \"network_id\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\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 := redpanda.LookupNetwork(ctx, &redpanda.LookupNetworkArgs{\n\t\t\tId: \"network_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.redpanda.RedpandaFunctions;\nimport com.pulumi.redpanda.inputs.GetNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = RedpandaFunctions.getNetwork(GetNetworkArgs.builder()\n            .id(\"network_id\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  example:\n    fn::invoke:\n      function: redpanda:getNetwork\n      arguments:\n        id: network_id\n```\n<!--End PulumiCodeChooser -->\n","inputs":{"description":"A collection of arguments for invoking getNetwork.\n","properties":{"id":{"description":"UUID of the network\n","type":"string"}},"required":["id"],"type":"object"},"outputs":{"description":"A collection of values returned by getNetwork.\n","properties":{"cidrBlock":{"description":"The<span pulumi-lang-nodejs=\" cidrBlock \" pulumi-lang-dotnet=\" CidrBlock \" pulumi-lang-go=\" cidrBlock \" pulumi-lang-python=\" cidr_block \" pulumi-lang-yaml=\" cidrBlock \" pulumi-lang-java=\" cidrBlock \"> cidr_block </span>to create the network in\n","type":"string"},"cloudProvider":{"description":"The cloud provider to create the network in. Can also be set at the provider level\n","type":"string"},"clusterType":{"description":"The type of cluster this network is associated with, can be one of dedicated or cloud\n","type":"string"},"customerManagedResources":{"$ref":"#/types/redpanda:index%2FgetNetworkCustomerManagedResources:getNetworkCustomerManagedResources","description":"Cloud resources created by user.\n"},"id":{"description":"UUID of the network\n","type":"string"},"name":{"description":"Name of the network\n","type":"string"},"region":{"description":"The region to create the network in. Can also be set at the provider level\n","type":"string"},"resourceGroupId":{"description":"The ID of the resource group in which to create the network\n","type":"string"},"state":{"description":"Current state of the network.\n","type":"string"},"zones":{"description":"Network availability zones.\n","items":{"type":"string"},"type":"array"}},"required":["cidrBlock","cloudProvider","clusterType","customerManagedResources","id","name","region","resourceGroupId","state","zones"],"type":"object"}},"redpanda:index/getRegion:getRegion":{"description":"Data source for a Redpanda Cloud region\n","inputs":{"description":"A collection of arguments for invoking getRegion.\n","properties":{"cloudProvider":{"description":"Cloud provider where the region exists\n","type":"string"},"name":{"description":"Name of the region\n","type":"string"}},"required":["cloudProvider","name"],"type":"object"},"outputs":{"description":"A collection of values returned by getRegion.\n","properties":{"cloudProvider":{"description":"Cloud provider where the region exists\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"name":{"description":"Name of the region\n","type":"string"},"zones":{"description":"Zones available in the region\n","items":{"type":"string"},"type":"array"}},"required":["cloudProvider","id","name","zones"],"type":"object"}},"redpanda:index/getRegions:getRegions":{"description":"Data source for a list of Redpanda Cloud regions\n","inputs":{"description":"A collection of arguments for invoking getRegions.\n","properties":{"cloudProvider":{"description":"Cloud provider where the regions exist\n","type":"string"}},"required":["cloudProvider"],"type":"object"},"outputs":{"description":"A collection of values returned by getRegions.\n","properties":{"cloudProvider":{"description":"Cloud provider where the regions exist\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"regions":{"description":"Regions available for the cloud provider\n","items":{"$ref":"#/types/redpanda:index%2FgetRegionsRegion:getRegionsRegion"},"type":"array"}},"required":["cloudProvider","id","regions"],"type":"object"}},"redpanda:index/getResourceGroup:getResourceGroup":{"description":"Data source for a Redpanda Cloud resource group\n\n## Usage\n\n### Search by ID\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = redpanda.getResourceGroup({\n    id: \"resource_group_id\",\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.get_resource_group(id=\"resource_group_id\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = Redpanda.GetResourceGroup.Invoke(new()\n    {\n        Id = \"resource_group_id\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\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 := redpanda.LookupResourceGroup(ctx, &redpanda.LookupResourceGroupArgs{\n\t\t\tId: pulumi.StringRef(\"resource_group_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.redpanda.RedpandaFunctions;\nimport com.pulumi.redpanda.inputs.GetResourceGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = RedpandaFunctions.getResourceGroup(GetResourceGroupArgs.builder()\n            .id(\"resource_group_id\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  example:\n    fn::invoke:\n      function: redpanda:getResourceGroup\n      arguments:\n        id: resource_group_id\n```\n<!--End PulumiCodeChooser -->\n\n### Search by name\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = redpanda.getResourceGroup({\n    name: \"default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.get_resource_group(name=\"default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = Redpanda.GetResourceGroup.Invoke(new()\n    {\n        Name = \"default\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\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 := redpanda.LookupResourceGroup(ctx, &redpanda.LookupResourceGroupArgs{\n\t\t\tName: pulumi.StringRef(\"default\"),\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.redpanda.RedpandaFunctions;\nimport com.pulumi.redpanda.inputs.GetResourceGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = RedpandaFunctions.getResourceGroup(GetResourceGroupArgs.builder()\n            .name(\"default\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  example:\n    fn::invoke:\n      function: redpanda:getResourceGroup\n      arguments:\n        name: default\n```\n<!--End PulumiCodeChooser -->\n","inputs":{"description":"A collection of arguments for invoking getResourceGroup.\n","properties":{"id":{"description":"UUID of the resource group\n","type":"string"},"name":{"description":"Name of the resource group\n","type":"string"}},"type":"object"},"outputs":{"description":"A collection of values returned by getResourceGroup.\n","properties":{"id":{"description":"UUID of the resource group\n","type":"string"},"name":{"description":"Name of the resource group\n","type":"string"}},"required":["id","name"],"type":"object"}},"redpanda:index/getSchema:getSchema":{"description":"Schema data source allows you to retrieve information about a Schema Registry schema\n\n\n## Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = redpanda.getSchema({\n    clusterId: \"cluster_id\",\n    subject: \"my-subject\",\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.get_schema(cluster_id=\"cluster_id\",\n    subject=\"my-subject\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = Redpanda.GetSchema.Invoke(new()\n    {\n        ClusterId = \"cluster_id\",\n        Subject = \"my-subject\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\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 := redpanda.LookupSchema(ctx, &redpanda.LookupSchemaArgs{\n\t\t\tClusterId: \"cluster_id\",\n\t\t\tSubject:   \"my-subject\",\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.redpanda.RedpandaFunctions;\nimport com.pulumi.redpanda.inputs.GetSchemaArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = RedpandaFunctions.getSchema(GetSchemaArgs.builder()\n            .clusterId(\"cluster_id\")\n            .subject(\"my-subject\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  example:\n    fn::invoke:\n      function: redpanda:getSchema\n      arguments:\n        clusterId: cluster_id\n        subject: my-subject\n```\n<!--End PulumiCodeChooser -->\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\n// Bearer auth (default): omit username and password\nconst example = redpanda.getSchema({\n    clusterId: clusterId,\n    subject: subject,\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\n# Bearer auth (default): omit username and password\nexample = redpanda.get_schema(cluster_id=cluster_id,\n    subject=subject)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    // Bearer auth (default): omit username and password\n    var example = Redpanda.GetSchema.Invoke(new()\n    {\n        ClusterId = clusterId,\n        Subject = subject,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\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// Bearer auth (default): omit username and password\n\t\t_, err := redpanda.LookupSchema(ctx, &redpanda.LookupSchemaArgs{\n\t\t\tClusterId: clusterId,\n\t\t\tSubject:   subject,\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.redpanda.RedpandaFunctions;\nimport com.pulumi.redpanda.inputs.GetSchemaArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        // Bearer auth (default): omit username and password\n        final var example = RedpandaFunctions.getSchema(GetSchemaArgs.builder()\n            .clusterId(clusterId)\n            .subject(subject)\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  # Bearer auth (default): omit username and password\n  example:\n    fn::invoke:\n      function: redpanda:getSchema\n      arguments:\n        clusterId: ${clusterId}\n        subject: ${subject}\n```\n<!--End PulumiCodeChooser -->\n","inputs":{"description":"A collection of arguments for invoking getSchema.\n","properties":{"clusterId":{"description":"The ID of the cluster where the schema is stored.\n","type":"string"},"password":{"description":"SASL password for Schema Registry HTTP Basic authentication. Pair with username when Basic auth is required instead of the cloud Bearer token.\n","secret":true,"type":"string"},"subject":{"description":"The subject name for the schema.\n","type":"string"},"username":{"description":"SASL username for Schema Registry HTTP Basic authentication. Optional: when omitted (together with password) the provider authenticates using its cloud Bearer token.\n","secret":true,"type":"string"},"version":{"description":"The version of the schema. If not specified, the latest version is used.\n","type":"number"}},"required":["clusterId","subject"],"type":"object"},"outputs":{"description":"A collection of values returned by getSchema.\n","properties":{"clusterId":{"description":"The ID of the cluster where the schema is stored.\n","type":"string"},"id":{"description":"The unique identifier for the schema.\n","type":"number"},"password":{"description":"SASL password for Schema Registry HTTP Basic authentication. Pair with username when Basic auth is required instead of the cloud Bearer token.\n","secret":true,"type":"string"},"references":{"description":"List of schema references.\n","items":{"$ref":"#/types/redpanda:index%2FgetSchemaReference:getSchemaReference"},"type":"array"},"schema":{"description":"The schema definition in JSON format.\n","type":"string"},"schemaType":{"description":"The type of schema (AVRO, JSON, PROTOBUF).\n","type":"string"},"subject":{"description":"The subject name for the schema.\n","type":"string"},"username":{"description":"SASL username for Schema Registry HTTP Basic authentication. Optional: when omitted (together with password) the provider authenticates using its cloud Bearer token.\n","secret":true,"type":"string"},"version":{"description":"The version of the schema. If not specified, the latest version is used.\n","type":"number"}},"required":["clusterId","id","references","schema","schemaType","subject","version"],"type":"object"}},"redpanda:index/getServerlessCluster:getServerlessCluster":{"description":"Data source for a Redpanda Cloud serverless cluster\n\n\n## Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = redpanda.getServerlessCluster({\n    id: \"serverless_cluster_id\",\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.get_serverless_cluster(id=\"serverless_cluster_id\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = Redpanda.GetServerlessCluster.Invoke(new()\n    {\n        Id = \"serverless_cluster_id\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\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 := redpanda.LookupServerlessCluster(ctx, &redpanda.LookupServerlessClusterArgs{\n\t\t\tId: \"serverless_cluster_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.redpanda.RedpandaFunctions;\nimport com.pulumi.redpanda.inputs.GetServerlessClusterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var example = RedpandaFunctions.getServerlessCluster(GetServerlessClusterArgs.builder()\n            .id(\"serverless_cluster_id\")\n            .build());\n\n    }\n}\n```\n```yaml\nvariables:\n  example:\n    fn::invoke:\n      function: redpanda:getServerlessCluster\n      arguments:\n        id: serverless_cluster_id\n```\n<!--End PulumiCodeChooser -->\n\n### Example Usage to create a serverless cluster\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst test = new redpanda.ResourceGroup(\"test\", {name: resourceGroupName});\nconst testServerlessPrivateLink: redpanda.ServerlessPrivateLink[] = [];\nfor (const range = {value: 0}; range.value < (privateNetworking == \"STATE_ENABLED\" ? 1 : 0); range.value++) {\n    testServerlessPrivateLink.push(new redpanda.ServerlessPrivateLink(`test-${range.value}`, {\n        name: `${clusterName}-private-link`,\n        resourceGroupId: test.id,\n        cloudProvider: \"aws\",\n        serverlessRegion: region,\n        allowDeletion: allowPrivateLinkDeletion,\n        awsConfig: {\n            allowedPrincipals: allowedPrincipals,\n        },\n    }));\n}\nconst testServerlessCluster = new redpanda.ServerlessCluster(\"test\", {\n    name: clusterName,\n    resourceGroupId: test.id,\n    serverlessRegion: region,\n    allowDeletion: clusterAllowDeletion,\n    privateLinkId: privateNetworking == \"STATE_ENABLED\" ? testServerlessPrivateLink[0].id : null,\n    networkingConfig: {\n        \"public\": publicNetworking,\n        \"private\": privateNetworking,\n    },\n});\nconst testTopic = new redpanda.Topic(\"test\", {\n    name: topicName,\n    partitionCount: partitionCount,\n    replicationFactor: replicationFactor,\n    clusterApiUrl: testServerlessCluster.clusterApiUrl,\n    allowDeletion: true,\n});\nconst testUser = new redpanda.User(\"test\", {\n    name: userName,\n    password: userPw,\n    mechanism: mechanism,\n    clusterApiUrl: testServerlessCluster.clusterApiUrl,\n    allowDeletion: userAllowDeletion,\n});\n// Schema Registry against a serverless cluster keys off cluster_id (control\n// plane), not cluster_api_url; cluster_id resolves the SR endpoint via the\n// ServerlessClusterService fallback in GetSchemaRegistryClientForCluster.\n// Both redpanda_schema_registry_acl and redpanda_schema route through it.\nconst providerBootstrapSubject = new redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\", {\n    clusterId: testServerlessCluster.id,\n    principal: \"User:*\",\n    resourceType: \"SUBJECT\",\n    resourceName: resourceGroupName,\n    patternType: \"PREFIXED\",\n    host: \"*\",\n    operation: \"ALL\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n});\nconst providerBootstrapRegistry = new redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\", {\n    clusterId: testServerlessCluster.id,\n    principal: \"User:*\",\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"ALL\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n});\nconst userSchema = new redpanda.Schema(\"user_schema\", {\n    clusterId: testServerlessCluster.id,\n    subject: `${resourceGroupName}-value`,\n    schemaType: \"AVRO\",\n    compatibility: \"BACKWARD\",\n    allowDeletion: true,\n    schema: JSON.stringify({\n        type: \"record\",\n        name: \"User\",\n        fields: [\n            {\n                name: \"id\",\n                type: \"long\",\n            },\n            {\n                name: \"name\",\n                type: \"string\",\n            },\n        ],\n    }),\n}, {\n    dependsOn: [\n        providerBootstrapSubject,\n        providerBootstrapRegistry,\n    ],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_redpanda as redpanda\n\ntest = redpanda.ResourceGroup(\"test\", name=resource_group_name)\ntest_serverless_private_link = []\nfor range in [{\"value\": i} for i in range(0, 1 if private_networking == STATE_ENABLED else 0)]:\n    test_serverless_private_link.append(redpanda.ServerlessPrivateLink(f\"test-{range['value']}\",\n        name=f\"{cluster_name}-private-link\",\n        resource_group_id=test.id,\n        cloud_provider=\"aws\",\n        serverless_region=region,\n        allow_deletion=allow_private_link_deletion,\n        aws_config={\n            \"allowed_principals\": allowed_principals,\n        }))\ntest_serverless_cluster = redpanda.ServerlessCluster(\"test\",\n    name=cluster_name,\n    resource_group_id=test.id,\n    serverless_region=region,\n    allow_deletion=cluster_allow_deletion,\n    private_link_id=test_serverless_private_link[0].id if private_networking == \"STATE_ENABLED\" else None,\n    networking_config={\n        \"public\": public_networking,\n        \"private\": private_networking,\n    })\ntest_topic = redpanda.Topic(\"test\",\n    name=topic_name,\n    partition_count=partition_count,\n    replication_factor=replication_factor,\n    cluster_api_url=test_serverless_cluster.cluster_api_url,\n    allow_deletion=True)\ntest_user = redpanda.User(\"test\",\n    name=user_name,\n    password=user_pw,\n    mechanism=mechanism,\n    cluster_api_url=test_serverless_cluster.cluster_api_url,\n    allow_deletion=user_allow_deletion)\n# Schema Registry against a serverless cluster keys off cluster_id (control\n# plane), not cluster_api_url; cluster_id resolves the SR endpoint via the\n# ServerlessClusterService fallback in GetSchemaRegistryClientForCluster.\n# Both redpanda_schema_registry_acl and redpanda_schema route through it.\nprovider_bootstrap_subject = redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\",\n    cluster_id=test_serverless_cluster.id,\n    principal=\"User:*\",\n    resource_type=\"SUBJECT\",\n    resource_name_=resource_group_name,\n    pattern_type=\"PREFIXED\",\n    host=\"*\",\n    operation=\"ALL\",\n    permission=\"ALLOW\",\n    allow_deletion=True)\nprovider_bootstrap_registry = redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\",\n    cluster_id=test_serverless_cluster.id,\n    principal=\"User:*\",\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"ALL\",\n    permission=\"ALLOW\",\n    allow_deletion=True)\nuser_schema = redpanda.Schema(\"user_schema\",\n    cluster_id=test_serverless_cluster.id,\n    subject=f\"{resource_group_name}-value\",\n    schema_type=\"AVRO\",\n    compatibility=\"BACKWARD\",\n    allow_deletion=True,\n    schema=json.dumps({\n        \"type\": \"record\",\n        \"name\": \"User\",\n        \"fields\": [\n            {\n                \"name\": \"id\",\n                \"type\": \"long\",\n            },\n            {\n                \"name\": \"name\",\n                \"type\": \"string\",\n            },\n        ],\n    }),\n    opts = pulumi.ResourceOptions(depends_on=[\n            provider_bootstrap_subject,\n            provider_bootstrap_registry,\n        ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var test = new Redpanda.ResourceGroup(\"test\", new()\n    {\n        Name = resourceGroupName,\n    });\n\n    var testServerlessPrivateLink = new List<Redpanda.ServerlessPrivateLink>();\n    for (var rangeIndex = 0; rangeIndex < (privateNetworking == \"STATE_ENABLED\" ? 1 : 0); rangeIndex++)\n    {\n        var range = new { Value = rangeIndex };\n        testServerlessPrivateLink.Add(new Redpanda.ServerlessPrivateLink($\"test-{range.Value}\", new()\n        {\n            Name = $\"{clusterName}-private-link\",\n            ResourceGroupId = test.Id,\n            CloudProvider = \"aws\",\n            ServerlessRegion = region,\n            AllowDeletion = allowPrivateLinkDeletion,\n            AwsConfig = new Redpanda.Inputs.ServerlessPrivateLinkAwsConfigArgs\n            {\n                AllowedPrincipals = allowedPrincipals,\n            },\n        }));\n    }\n    var testServerlessCluster = new Redpanda.ServerlessCluster(\"test\", new()\n    {\n        Name = clusterName,\n        ResourceGroupId = test.Id,\n        ServerlessRegion = region,\n        AllowDeletion = clusterAllowDeletion,\n        PrivateLinkId = privateNetworking == \"STATE_ENABLED\" ? testServerlessPrivateLink[0].Id : null,\n        NetworkingConfig = new Redpanda.Inputs.ServerlessClusterNetworkingConfigArgs\n        {\n            Public = publicNetworking,\n            Private = privateNetworking,\n        },\n    });\n\n    var testTopic = new Redpanda.Topic(\"test\", new()\n    {\n        Name = topicName,\n        PartitionCount = partitionCount,\n        ReplicationFactor = replicationFactor,\n        ClusterApiUrl = testServerlessCluster.ClusterApiUrl,\n        AllowDeletion = true,\n    });\n\n    var testUser = new Redpanda.User(\"test\", new()\n    {\n        Name = userName,\n        Password = userPw,\n        Mechanism = mechanism,\n        ClusterApiUrl = testServerlessCluster.ClusterApiUrl,\n        AllowDeletion = userAllowDeletion,\n    });\n\n    // Schema Registry against a serverless cluster keys off cluster_id (control\n    // plane), not cluster_api_url; cluster_id resolves the SR endpoint via the\n    // ServerlessClusterService fallback in GetSchemaRegistryClientForCluster.\n    // Both redpanda_schema_registry_acl and redpanda_schema route through it.\n    var providerBootstrapSubject = new Redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\", new()\n    {\n        ClusterId = testServerlessCluster.Id,\n        Principal = \"User:*\",\n        ResourceType = \"SUBJECT\",\n        ResourceName = resourceGroupName,\n        PatternType = \"PREFIXED\",\n        Host = \"*\",\n        Operation = \"ALL\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    });\n\n    var providerBootstrapRegistry = new Redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\", new()\n    {\n        ClusterId = testServerlessCluster.Id,\n        Principal = \"User:*\",\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"ALL\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    });\n\n    var userSchema = new Redpanda.Schema(\"user_schema\", new()\n    {\n        ClusterId = testServerlessCluster.Id,\n        Subject = $\"{resourceGroupName}-value\",\n        SchemaType = \"AVRO\",\n        Compatibility = \"BACKWARD\",\n        AllowDeletion = true,\n        Schema = JsonSerializer.Serialize(new Dictionary<string, object?>\n        {\n            [\"type\"] = \"record\",\n            [\"name\"] = \"User\",\n            [\"fields\"] = new[]\n            {\n                new Dictionary<string, object?>\n                {\n                    [\"name\"] = \"id\",\n                    [\"type\"] = \"long\",\n                },\n                new Dictionary<string, object?>\n                {\n                    [\"name\"] = \"name\",\n                    [\"type\"] = \"string\",\n                },\n            },\n        }),\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            providerBootstrapSubject,\n            providerBootstrapRegistry,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := redpanda.NewResourceGroup(ctx, \"test\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.Any(resourceGroupName),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvar tmp0 float64\n\t\tif privateNetworking == \"STATE_ENABLED\" {\n\t\t\ttmp0 = 1\n\t\t} else {\n\t\t\ttmp0 = 0\n\t\t}\n\t\tvar testServerlessPrivateLink []*redpanda.ServerlessPrivateLink\n\t\tfor index := 0; index < tmp0; index++ {\n\t\t\tkey0 := index\n\t\t\t_ := index\n\t\t\t__res, err := redpanda.NewServerlessPrivateLink(ctx, fmt.Sprintf(\"test-%v\", key0), &redpanda.ServerlessPrivateLinkArgs{\n\t\t\t\tName:             pulumi.Sprintf(\"%v-private-link\", clusterName),\n\t\t\t\tResourceGroupId:  test.ID(),\n\t\t\t\tCloudProvider:    pulumi.String(\"aws\"),\n\t\t\t\tServerlessRegion: pulumi.Any(region),\n\t\t\t\tAllowDeletion:    pulumi.Any(allowPrivateLinkDeletion),\n\t\t\t\tAwsConfig: &redpanda.ServerlessPrivateLinkAwsConfigArgs{\n\t\t\t\t\tAllowedPrincipals: pulumi.Any(allowedPrincipals),\n\t\t\t\t},\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ttestServerlessPrivateLink = append(testServerlessPrivateLink, __res)\n\t\t}\n\t\tvar tmp1 pulumi.String\n\t\tif privateNetworking == \"STATE_ENABLED\" {\n\t\t\ttmp1 = testServerlessPrivateLink[0].ID()\n\t\t} else {\n\t\t\ttmp1 = nil\n\t\t}\n\t\ttestServerlessCluster, err := redpanda.NewServerlessCluster(ctx, \"test\", &redpanda.ServerlessClusterArgs{\n\t\t\tName:             pulumi.Any(clusterName),\n\t\t\tResourceGroupId:  test.ID(),\n\t\t\tServerlessRegion: pulumi.Any(region),\n\t\t\tAllowDeletion:    pulumi.Any(clusterAllowDeletion),\n\t\t\tPrivateLinkId:    pulumi.String(tmp1),\n\t\t\tNetworkingConfig: &redpanda.ServerlessClusterNetworkingConfigArgs{\n\t\t\t\tPublic:  pulumi.Any(publicNetworking),\n\t\t\t\tPrivate: pulumi.Any(privateNetworking),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewTopic(ctx, \"test\", &redpanda.TopicArgs{\n\t\t\tName:              pulumi.Any(topicName),\n\t\t\tPartitionCount:    pulumi.Any(partitionCount),\n\t\t\tReplicationFactor: pulumi.Any(replicationFactor),\n\t\t\tClusterApiUrl:     testServerlessCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:     pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewUser(ctx, \"test\", &redpanda.UserArgs{\n\t\t\tName:          pulumi.Any(userName),\n\t\t\tPassword:      pulumi.Any(userPw),\n\t\t\tMechanism:     pulumi.Any(mechanism),\n\t\t\tClusterApiUrl: testServerlessCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Any(userAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Schema Registry against a serverless cluster keys off cluster_id (control\n\t\t// plane), not cluster_api_url; cluster_id resolves the SR endpoint via the\n\t\t// ServerlessClusterService fallback in GetSchemaRegistryClientForCluster.\n\t\t// Both redpanda_schema_registry_acl and redpanda_schema route through it.\n\t\tproviderBootstrapSubject, err := redpanda.NewSchemaRegistryAcl(ctx, \"provider_bootstrap_subject\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId:     testServerlessCluster.ID(),\n\t\t\tPrincipal:     pulumi.String(\"User:*\"),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.Any(resourceGroupName),\n\t\t\tPatternType:   pulumi.String(\"PREFIXED\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALL\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproviderBootstrapRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"provider_bootstrap_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId:     testServerlessCluster.ID(),\n\t\t\tPrincipal:     pulumi.String(\"User:*\"),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALL\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\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\"type\": \"record\",\n\t\t\t\"name\": \"User\",\n\t\t\t\"fields\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"name\": \"id\",\n\t\t\t\t\t\"type\": \"long\",\n\t\t\t\t},\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"name\": \"name\",\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = redpanda.NewSchema(ctx, \"user_schema\", &redpanda.SchemaArgs{\n\t\t\tClusterId:     testServerlessCluster.ID(),\n\t\t\tSubject:       pulumi.Sprintf(\"%v-value\", resourceGroupName),\n\t\t\tSchemaType:    pulumi.String(\"AVRO\"),\n\t\t\tCompatibility: pulumi.String(\"BACKWARD\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t\tSchema:        pulumi.String(json0),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tproviderBootstrapSubject,\n\t\t\tproviderBootstrapRegistry,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.ServerlessPrivateLink;\nimport com.pulumi.redpanda.ServerlessPrivateLinkArgs;\nimport com.pulumi.redpanda.inputs.ServerlessPrivateLinkAwsConfigArgs;\nimport com.pulumi.redpanda.ServerlessCluster;\nimport com.pulumi.redpanda.ServerlessClusterArgs;\nimport com.pulumi.redpanda.inputs.ServerlessClusterNetworkingConfigArgs;\nimport com.pulumi.redpanda.Topic;\nimport com.pulumi.redpanda.TopicArgs;\nimport com.pulumi.redpanda.User;\nimport com.pulumi.redpanda.UserArgs;\nimport com.pulumi.redpanda.SchemaRegistryAcl;\nimport com.pulumi.redpanda.SchemaRegistryAclArgs;\nimport com.pulumi.redpanda.Schema;\nimport com.pulumi.redpanda.SchemaArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport com.pulumi.codegen.internal.KeyedValue;\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 test = new ResourceGroup(\"test\", ResourceGroupArgs.builder()\n            .name(resourceGroupName)\n            .build());\n\n        for (var i = 0; i < (privateNetworking == \"STATE_ENABLED\" ? 1 : 0); i++) {\n            new ServerlessPrivateLink(\"testServerlessPrivateLink-\" + i, ServerlessPrivateLinkArgs.builder()\n                .name(String.format(\"%s-private-link\", clusterName))\n                .resourceGroupId(test.id())\n                .cloudProvider(\"aws\")\n                .serverlessRegion(region)\n                .allowDeletion(allowPrivateLinkDeletion)\n                .awsConfig(ServerlessPrivateLinkAwsConfigArgs.builder()\n                    .allowedPrincipals(allowedPrincipals)\n                    .build())\n                .build());\n\n        \n}\n        var testServerlessCluster = new ServerlessCluster(\"testServerlessCluster\", ServerlessClusterArgs.builder()\n            .name(clusterName)\n            .resourceGroupId(test.id())\n            .serverlessRegion(region)\n            .allowDeletion(clusterAllowDeletion)\n            .privateLinkId(privateNetworking == \"STATE_ENABLED\" ? testServerlessPrivateLink[0].id() : null)\n            .networkingConfig(ServerlessClusterNetworkingConfigArgs.builder()\n                .public_(publicNetworking)\n                .private_(privateNetworking)\n                .build())\n            .build());\n\n        var testTopic = new Topic(\"testTopic\", TopicArgs.builder()\n            .name(topicName)\n            .partitionCount(partitionCount)\n            .replicationFactor(replicationFactor)\n            .clusterApiUrl(testServerlessCluster.clusterApiUrl())\n            .allowDeletion(true)\n            .build());\n\n        var testUser = new User(\"testUser\", UserArgs.builder()\n            .name(userName)\n            .password(userPw)\n            .mechanism(mechanism)\n            .clusterApiUrl(testServerlessCluster.clusterApiUrl())\n            .allowDeletion(userAllowDeletion)\n            .build());\n\n        // Schema Registry against a serverless cluster keys off cluster_id (control\n        // plane), not cluster_api_url; cluster_id resolves the SR endpoint via the\n        // ServerlessClusterService fallback in GetSchemaRegistryClientForCluster.\n        // Both redpanda_schema_registry_acl and redpanda_schema route through it.\n        var providerBootstrapSubject = new SchemaRegistryAcl(\"providerBootstrapSubject\", SchemaRegistryAclArgs.builder()\n            .clusterId(testServerlessCluster.id())\n            .principal(\"User:*\")\n            .resourceType(\"SUBJECT\")\n            .resourceName(resourceGroupName)\n            .patternType(\"PREFIXED\")\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build());\n\n        var providerBootstrapRegistry = new SchemaRegistryAcl(\"providerBootstrapRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testServerlessCluster.id())\n            .principal(\"User:*\")\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build());\n\n        var userSchema = new Schema(\"userSchema\", SchemaArgs.builder()\n            .clusterId(testServerlessCluster.id())\n            .subject(String.format(\"%s-value\", resourceGroupName))\n            .schemaType(\"AVRO\")\n            .compatibility(\"BACKWARD\")\n            .allowDeletion(true)\n            .schema(serializeJson(\n                jsonObject(\n                    jsonProperty(\"type\", \"record\"),\n                    jsonProperty(\"name\", \"User\"),\n                    jsonProperty(\"fields\", jsonArray(\n                        jsonObject(\n                            jsonProperty(\"name\", \"id\"),\n                            jsonProperty(\"type\", \"long\")\n                        ), \n                        jsonObject(\n                            jsonProperty(\"name\", \"name\"),\n                            jsonProperty(\"type\", \"string\")\n                        )\n                    ))\n                )))\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    providerBootstrapSubject,\n                    providerBootstrapRegistry)\n                .build());\n\n    }\n}\n```\n<!--End PulumiCodeChooser -->\n\n## Limitations\n\nCan only be used with Redpanda Cloud serverless clusters.\n","inputs":{"description":"A collection of arguments for invoking getServerlessCluster.\n","properties":{"id":{"description":"The ID of the serverless cluster\n","type":"string"}},"required":["id"],"type":"object"},"outputs":{"description":"A collection of values returned by getServerlessCluster.\n","properties":{"clusterApiUrl":{"description":"The URL of the dataplane API for the serverless cluster\n","type":"string"},"consolePrivateUrl":{"description":"Private Console URL\n","type":"string"},"consoleUrl":{"description":"Public Console URL\n","type":"string"},"dataplaneApi":{"$ref":"#/types/redpanda:index%2FgetServerlessClusterDataplaneApi:getServerlessClusterDataplaneApi","description":"Cluster's Data Plane API properties.\n"},"id":{"description":"The ID of the serverless cluster\n","type":"string"},"kafkaApi":{"$ref":"#/types/redpanda:index%2FgetServerlessClusterKafkaApi:getServerlessClusterKafkaApi","description":"Cluster's Kafka API properties.\n"},"name":{"description":"Name of the serverless cluster\n","type":"string"},"networkingConfig":{"$ref":"#/types/redpanda:index%2FgetServerlessClusterNetworkingConfig:getServerlessClusterNetworkingConfig","description":"Networking Config configuration\n"},"plannedDeletion":{"$ref":"#/types/redpanda:index%2FgetServerlessClusterPlannedDeletion:getServerlessClusterPlannedDeletion","description":"Planned deletion information\n"},"privateLinkId":{"description":"Private link ID for the serverless cluster, if any\n","type":"string"},"prometheus":{"$ref":"#/types/redpanda:index%2FgetServerlessClusterPrometheus:getServerlessClusterPrometheus","description":"Prometheus metrics endpoint properties.\n"},"resourceGroupId":{"description":"The ID of the resource group in which to create the serverless cluster\n","type":"string"},"schemaRegistry":{"$ref":"#/types/redpanda:index%2FgetServerlessClusterSchemaRegistry:getServerlessClusterSchemaRegistry","description":"Cluster's Schema Registry properties.\n"},"serverlessRegion":{"description":"Redpanda specific region for the serverless cluster\n","type":"string"},"state":{"description":"Current state of the serverless cluster.\n","type":"string"},"tags":{"additionalProperties":{"type":"string"},"description":"User-defined tags on the cluster\n","type":"object"}},"required":["clusterApiUrl","consolePrivateUrl","consoleUrl","dataplaneApi","id","kafkaApi","name","networkingConfig","plannedDeletion","privateLinkId","prometheus","resourceGroupId","schemaRegistry","serverlessRegion","state","tags"],"type":"object"}},"redpanda:index/getServerlessRegions:getServerlessRegions":{"description":"Data source for a list of Redpanda Cloud serverless regions\n","inputs":{"description":"A collection of arguments for invoking getServerlessRegions.\n","properties":{"cloudProvider":{"description":"Cloud provider where the serverless regions exist\n","type":"string"}},"required":["cloudProvider"],"type":"object"},"outputs":{"description":"A collection of values returned by getServerlessRegions.\n","properties":{"cloudProvider":{"description":"Cloud provider where the serverless regions exist\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"serverlessRegions":{"description":"Serverless regions available for the cloud provider\n","items":{"$ref":"#/types/redpanda:index%2FgetServerlessRegionsServerlessRegion:getServerlessRegionsServerlessRegion"},"type":"array"}},"required":["cloudProvider","id","serverlessRegions"],"type":"object"}},"redpanda:index/getThroughputTiers:getThroughputTiers":{"description":"Data source for a list of Redpanda Cloud throughput tiers\n","inputs":{"description":"A collection of arguments for invoking getThroughputTiers.\n","properties":{"cloudProvider":{"description":"Cloud provider where the Throughput Tiers are available\n","type":"string"}},"type":"object"},"outputs":{"description":"A collection of values returned by getThroughputTiers.\n","properties":{"cloudProvider":{"description":"Cloud provider where the Throughput Tiers are available\n","type":"string"},"id":{"description":"The provider-assigned unique ID for this managed resource.","type":"string"},"throughputTiers":{"description":"Throughput Tiers\n","items":{"$ref":"#/types/redpanda:index%2FgetThroughputTiersThroughputTier:getThroughputTiersThroughputTier"},"type":"array"}},"required":["id","throughputTiers"],"type":"object"}}},"language":{"csharp":{"compatibility":"tfbridge20","liftSingleValueMethodReturns":true,"respectSchemaVersion":true},"go":{"generateExtraInputTypes":true,"importBasePath":"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda","liftSingleValueMethodReturns":true,"respectSchemaVersion":true,"rootPackageName":"redpanda"},"java":{"basePackage":"","buildFiles":"","gradleNexusPublishPluginVersion":"","gradleTest":""},"nodejs":{"compatibility":"tfbridge20","disableUnionOutputTypes":true,"liftSingleValueMethodReturns":true,"packageDescription":"A Pulumi provider dynamically bridged from redpanda.","readme":"> This provider is a derived work of the [Terraform Provider](https://github.com/redpanda-data/terraform-provider-redpanda)\n> distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n> please consult the source [`terraform-provider-redpanda` repo](https://github.com/redpanda-data/terraform-provider-redpanda/issues).","respectSchemaVersion":true},"python":{"compatibility":"tfbridge20","pyproject":{"enabled":true},"readme":"> This provider is a derived work of the [Terraform Provider](https://github.com/redpanda-data/terraform-provider-redpanda)\n> distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n> please consult the source [`terraform-provider-redpanda` repo](https://github.com/redpanda-data/terraform-provider-redpanda/issues).","respectSchemaVersion":true}},"meta":{"moduleFormat":"(.*)(?:/[^/]*)"},"name":"redpanda","parameterization":{"baseProvider":{"name":"terraform-provider","version":"1.0.1"},"parameter":"eyJyZW1vdGUiOnsidXJsIjoicmVnaXN0cnkub3BlbnRvZnUub3JnL3JlZHBhbmRhLWRhdGEvcmVkcGFuZGEiLCJ2ZXJzaW9uIjoiMi4wLjAifX0="},"provider":{"description":"The provider type for the redpanda package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n","inputProperties":{"accessToken":{"description":"Redpanda client token. You need either <span pulumi-lang-nodejs=\"`accessToken`\" pulumi-lang-dotnet=\"`AccessToken`\" pulumi-lang-go=\"`accessToken`\" pulumi-lang-python=\"`access_token`\" pulumi-lang-yaml=\"`accessToken`\" pulumi-lang-java=\"`accessToken`\">`access_token`</span>, or both <span pulumi-lang-nodejs=\"`clientId`\" pulumi-lang-dotnet=\"`ClientId`\" pulumi-lang-go=\"`clientId`\" pulumi-lang-python=\"`client_id`\" pulumi-lang-yaml=\"`clientId`\" pulumi-lang-java=\"`clientId`\">`client_id`</span> and <span pulumi-lang-nodejs=\"`clientSecret`\" pulumi-lang-dotnet=\"`ClientSecret`\" pulumi-lang-go=\"`clientSecret`\" pulumi-lang-python=\"`client_secret`\" pulumi-lang-yaml=\"`clientSecret`\" pulumi-lang-java=\"`clientSecret`\">`client_secret`</span> to use this provider. Can also be set with the `REDPANDA_ACCESS_TOKEN` environment variable.","secret":true,"type":"string"},"awsAccessKeyId":{"description":"AWS access key ID for BYOC clusters. Can also be set via AWS_ACCESS_KEY_ID.","secret":true,"type":"string"},"awsSecretAccessKey":{"description":"AWS secret access key for BYOC clusters. Can also be set via AWS_SECRET_ACCESS_KEY.","secret":true,"type":"string"},"awsSessionToken":{"description":"AWS session token for BYOC clusters (for temporary credentials). Can also be set via AWS_SESSION_TOKEN.","secret":true,"type":"string"},"azureClientId":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Can also be specified in the environment as AZURE_CLIENT_ID or ARM_CLIENT_ID","type":"string"},"azureClientSecret":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Can also be specified in the environment as AZURE_CLIENT_SECRET or ARM_CLIENT_SECRET","secret":true,"type":"string"},"azureSubscriptionId":{"description":"The default Azure Subscription ID which should be used for Redpanda BYOC clusters. If another subscription is specified on a resource, it will take precedence. This can also be sourced from the `ARM_SUBSCRIPTION_ID` environment variable.","type":"string"},"azureTenantId":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Can also be specified in the environment as AZURE_TENANT_ID or ARM_TENANT_ID","type":"string"},"clientId":{"description":"The ID for the client. You need either <span pulumi-lang-nodejs=\"`clientId`\" pulumi-lang-dotnet=\"`ClientId`\" pulumi-lang-go=\"`clientId`\" pulumi-lang-python=\"`client_id`\" pulumi-lang-yaml=\"`clientId`\" pulumi-lang-java=\"`clientId`\">`client_id`</span> AND <span pulumi-lang-nodejs=\"`clientSecret`\" pulumi-lang-dotnet=\"`ClientSecret`\" pulumi-lang-go=\"`clientSecret`\" pulumi-lang-python=\"`client_secret`\" pulumi-lang-yaml=\"`clientSecret`\" pulumi-lang-java=\"`clientSecret`\">`client_secret`</span>, or <span pulumi-lang-nodejs=\"`accessToken`\" pulumi-lang-dotnet=\"`AccessToken`\" pulumi-lang-go=\"`accessToken`\" pulumi-lang-python=\"`access_token`\" pulumi-lang-yaml=\"`accessToken`\" pulumi-lang-java=\"`accessToken`\">`access_token`</span>, to use this provider. Can also be set with the `REDPANDA_CLIENT_ID` environment variable.","secret":true,"type":"string"},"clientSecret":{"description":"Redpanda client secret. You need either <span pulumi-lang-nodejs=\"`clientId`\" pulumi-lang-dotnet=\"`ClientId`\" pulumi-lang-go=\"`clientId`\" pulumi-lang-python=\"`client_id`\" pulumi-lang-yaml=\"`clientId`\" pulumi-lang-java=\"`clientId`\">`client_id`</span> AND <span pulumi-lang-nodejs=\"`clientSecret`\" pulumi-lang-dotnet=\"`ClientSecret`\" pulumi-lang-go=\"`clientSecret`\" pulumi-lang-python=\"`client_secret`\" pulumi-lang-yaml=\"`clientSecret`\" pulumi-lang-java=\"`clientSecret`\">`client_secret`</span>, or <span pulumi-lang-nodejs=\"`accessToken`\" pulumi-lang-dotnet=\"`AccessToken`\" pulumi-lang-go=\"`accessToken`\" pulumi-lang-python=\"`access_token`\" pulumi-lang-yaml=\"`accessToken`\" pulumi-lang-java=\"`accessToken`\">`access_token`</span>, to use this provider. Can also be set with the `REDPANDA_CLIENT_SECRET` environment variable.","secret":true,"type":"string"},"gcpProjectId":{"description":"The default Google Cloud Project ID to use for Redpanda BYOC clusters. If another project is specified on a resource, it will take precedence. This can also be sourced from the `GOOGLE_PROJECT` environment variable, or any of the following ordered by precedence: `GOOGLE_PROJECT`, `GOOGLE_CLOUD_PROJECT`, `GCLOUD_PROJECT`, or `CLOUDSDK_CORE_PROJECT`.","type":"string"},"googleCredentials":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Can also be specified in the environment as GOOGLE_CREDENTIALS","secret":true,"type":"string"},"googleCredentialsBase64":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Is a convenience passthrough for base64 encoded credentials intended for use in CI/CD. Can also be specified in the environment as GOOGLE_CREDENTIALS_BASE64","secret":true,"type":"string"}},"methods":{"terraformConfig":"pulumi:providers:redpanda/terraformConfig"},"properties":{"accessToken":{"description":"Redpanda client token. You need either <span pulumi-lang-nodejs=\"`accessToken`\" pulumi-lang-dotnet=\"`AccessToken`\" pulumi-lang-go=\"`accessToken`\" pulumi-lang-python=\"`access_token`\" pulumi-lang-yaml=\"`accessToken`\" pulumi-lang-java=\"`accessToken`\">`access_token`</span>, or both <span pulumi-lang-nodejs=\"`clientId`\" pulumi-lang-dotnet=\"`ClientId`\" pulumi-lang-go=\"`clientId`\" pulumi-lang-python=\"`client_id`\" pulumi-lang-yaml=\"`clientId`\" pulumi-lang-java=\"`clientId`\">`client_id`</span> and <span pulumi-lang-nodejs=\"`clientSecret`\" pulumi-lang-dotnet=\"`ClientSecret`\" pulumi-lang-go=\"`clientSecret`\" pulumi-lang-python=\"`client_secret`\" pulumi-lang-yaml=\"`clientSecret`\" pulumi-lang-java=\"`clientSecret`\">`client_secret`</span> to use this provider. Can also be set with the `REDPANDA_ACCESS_TOKEN` environment variable.","secret":true,"type":"string"},"awsAccessKeyId":{"description":"AWS access key ID for BYOC clusters. Can also be set via AWS_ACCESS_KEY_ID.","secret":true,"type":"string"},"awsSecretAccessKey":{"description":"AWS secret access key for BYOC clusters. Can also be set via AWS_SECRET_ACCESS_KEY.","secret":true,"type":"string"},"awsSessionToken":{"description":"AWS session token for BYOC clusters (for temporary credentials). Can also be set via AWS_SESSION_TOKEN.","secret":true,"type":"string"},"azureClientId":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Can also be specified in the environment as AZURE_CLIENT_ID or ARM_CLIENT_ID","type":"string"},"azureClientSecret":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Can also be specified in the environment as AZURE_CLIENT_SECRET or ARM_CLIENT_SECRET","secret":true,"type":"string"},"azureSubscriptionId":{"description":"The default Azure Subscription ID which should be used for Redpanda BYOC clusters. If another subscription is specified on a resource, it will take precedence. This can also be sourced from the `ARM_SUBSCRIPTION_ID` environment variable.","type":"string"},"azureTenantId":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Can also be specified in the environment as AZURE_TENANT_ID or ARM_TENANT_ID","type":"string"},"clientId":{"description":"The ID for the client. You need either <span pulumi-lang-nodejs=\"`clientId`\" pulumi-lang-dotnet=\"`ClientId`\" pulumi-lang-go=\"`clientId`\" pulumi-lang-python=\"`client_id`\" pulumi-lang-yaml=\"`clientId`\" pulumi-lang-java=\"`clientId`\">`client_id`</span> AND <span pulumi-lang-nodejs=\"`clientSecret`\" pulumi-lang-dotnet=\"`ClientSecret`\" pulumi-lang-go=\"`clientSecret`\" pulumi-lang-python=\"`client_secret`\" pulumi-lang-yaml=\"`clientSecret`\" pulumi-lang-java=\"`clientSecret`\">`client_secret`</span>, or <span pulumi-lang-nodejs=\"`accessToken`\" pulumi-lang-dotnet=\"`AccessToken`\" pulumi-lang-go=\"`accessToken`\" pulumi-lang-python=\"`access_token`\" pulumi-lang-yaml=\"`accessToken`\" pulumi-lang-java=\"`accessToken`\">`access_token`</span>, to use this provider. Can also be set with the `REDPANDA_CLIENT_ID` environment variable.","secret":true,"type":"string"},"clientSecret":{"description":"Redpanda client secret. You need either <span pulumi-lang-nodejs=\"`clientId`\" pulumi-lang-dotnet=\"`ClientId`\" pulumi-lang-go=\"`clientId`\" pulumi-lang-python=\"`client_id`\" pulumi-lang-yaml=\"`clientId`\" pulumi-lang-java=\"`clientId`\">`client_id`</span> AND <span pulumi-lang-nodejs=\"`clientSecret`\" pulumi-lang-dotnet=\"`ClientSecret`\" pulumi-lang-go=\"`clientSecret`\" pulumi-lang-python=\"`client_secret`\" pulumi-lang-yaml=\"`clientSecret`\" pulumi-lang-java=\"`clientSecret`\">`client_secret`</span>, or <span pulumi-lang-nodejs=\"`accessToken`\" pulumi-lang-dotnet=\"`AccessToken`\" pulumi-lang-go=\"`accessToken`\" pulumi-lang-python=\"`access_token`\" pulumi-lang-yaml=\"`accessToken`\" pulumi-lang-java=\"`accessToken`\">`access_token`</span>, to use this provider. Can also be set with the `REDPANDA_CLIENT_SECRET` environment variable.","secret":true,"type":"string"},"gcpProjectId":{"description":"The default Google Cloud Project ID to use for Redpanda BYOC clusters. If another project is specified on a resource, it will take precedence. This can also be sourced from the `GOOGLE_PROJECT` environment variable, or any of the following ordered by precedence: `GOOGLE_PROJECT`, `GOOGLE_CLOUD_PROJECT`, `GCLOUD_PROJECT`, or `CLOUDSDK_CORE_PROJECT`.","type":"string"},"googleCredentials":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Can also be specified in the environment as GOOGLE_CREDENTIALS","secret":true,"type":"string"},"googleCredentialsBase64":{"description":"Used for creating and managing BYOC and BYOVPC clusters. Is a convenience passthrough for base64 encoded credentials intended for use in CI/CD. Can also be specified in the environment as GOOGLE_CREDENTIALS_BASE64","secret":true,"type":"string"}},"type":"object"},"publisher":"redpanda-data","repository":"https://github.com/redpanda-data/terraform-provider-redpanda","resources":{"redpanda:index/acl:Acl":{"description":"Acl resource\n\nCreates an Access Control List (ACL) in a Redpanda cluster.\n\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = new redpanda.ResourceGroup(\"example\", {name: \"example-resource-group\"});\nconst exampleNetwork = new redpanda.Network(\"example\", {\n    name: \"example-network\",\n    resourceGroupId: example.id,\n    cloudProvider: \"aws\",\n    region: \"us-west-2\",\n    clusterType: \"dedicated\",\n    cidrBlock: \"10.0.0.0/20\",\n});\nconst exampleCluster = new redpanda.Cluster(\"example\", {\n    name: \"example-cluster\",\n    resourceGroupId: example.id,\n    networkId: exampleNetwork.id,\n    cloudProvider: \"aws\",\n    region: \"us-west-2\",\n    clusterType: \"dedicated\",\n    connectionType: \"public\",\n    throughputTier: \"tier-1-aws-v2-arm\",\n    zones: [\n        \"us-west-2a\",\n        \"us-west-2b\",\n        \"us-west-2c\",\n    ],\n});\nconst exampleUser = new redpanda.User(\"example\", {\n    name: \"example-user\",\n    password: examplePassword,\n    mechanism: \"scram-sha-256\",\n    clusterApiUrl: exampleCluster.clusterApiUrl,\n    allowDeletion: true,\n});\nconst exampleTopic = new redpanda.Topic(\"example\", {\n    name: \"example-topic\",\n    partitionCount: 3,\n    replicationFactor: 3,\n    clusterApiUrl: exampleCluster.clusterApiUrl,\n});\nconst exampleAcl = new redpanda.Acl(\"example\", {\n    resourceType: \"TOPIC\",\n    resourceName: exampleTopic.name,\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${exampleUser.name}`,\n    host: \"*\",\n    operation: \"READ\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: exampleCluster.clusterApiUrl,\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.ResourceGroup(\"example\", name=\"example-resource-group\")\nexample_network = redpanda.Network(\"example\",\n    name=\"example-network\",\n    resource_group_id=example.id,\n    cloud_provider=\"aws\",\n    region=\"us-west-2\",\n    cluster_type=\"dedicated\",\n    cidr_block=\"10.0.0.0/20\")\nexample_cluster = redpanda.Cluster(\"example\",\n    name=\"example-cluster\",\n    resource_group_id=example.id,\n    network_id=example_network.id,\n    cloud_provider=\"aws\",\n    region=\"us-west-2\",\n    cluster_type=\"dedicated\",\n    connection_type=\"public\",\n    throughput_tier=\"tier-1-aws-v2-arm\",\n    zones=[\n        \"us-west-2a\",\n        \"us-west-2b\",\n        \"us-west-2c\",\n    ])\nexample_user = redpanda.User(\"example\",\n    name=\"example-user\",\n    password=example_password,\n    mechanism=\"scram-sha-256\",\n    cluster_api_url=example_cluster.cluster_api_url,\n    allow_deletion=True)\nexample_topic = redpanda.Topic(\"example\",\n    name=\"example-topic\",\n    partition_count=3,\n    replication_factor=3,\n    cluster_api_url=example_cluster.cluster_api_url)\nexample_acl = redpanda.Acl(\"example\",\n    resource_type=\"TOPIC\",\n    resource_name_=example_topic.name,\n    resource_pattern_type=\"LITERAL\",\n    principal=example_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"READ\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=example_cluster.cluster_api_url)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = new Redpanda.ResourceGroup(\"example\", new()\n    {\n        Name = \"example-resource-group\",\n    });\n\n    var exampleNetwork = new Redpanda.Network(\"example\", new()\n    {\n        Name = \"example-network\",\n        ResourceGroupId = example.Id,\n        CloudProvider = \"aws\",\n        Region = \"us-west-2\",\n        ClusterType = \"dedicated\",\n        CidrBlock = \"10.0.0.0/20\",\n    });\n\n    var exampleCluster = new Redpanda.Cluster(\"example\", new()\n    {\n        Name = \"example-cluster\",\n        ResourceGroupId = example.Id,\n        NetworkId = exampleNetwork.Id,\n        CloudProvider = \"aws\",\n        Region = \"us-west-2\",\n        ClusterType = \"dedicated\",\n        ConnectionType = \"public\",\n        ThroughputTier = \"tier-1-aws-v2-arm\",\n        Zones = new[]\n        {\n            \"us-west-2a\",\n            \"us-west-2b\",\n            \"us-west-2c\",\n        },\n    });\n\n    var exampleUser = new Redpanda.User(\"example\", new()\n    {\n        Name = \"example-user\",\n        Password = examplePassword,\n        Mechanism = \"scram-sha-256\",\n        ClusterApiUrl = exampleCluster.ClusterApiUrl,\n        AllowDeletion = true,\n    });\n\n    var exampleTopic = new Redpanda.Topic(\"example\", new()\n    {\n        Name = \"example-topic\",\n        PartitionCount = 3,\n        ReplicationFactor = 3,\n        ClusterApiUrl = exampleCluster.ClusterApiUrl,\n    });\n\n    var exampleAcl = new Redpanda.Acl(\"example\", new()\n    {\n        ResourceType = \"TOPIC\",\n        ResourceName = exampleTopic.Name,\n        ResourcePatternType = \"LITERAL\",\n        Principal = exampleUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"READ\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = exampleCluster.ClusterApiUrl,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := redpanda.NewResourceGroup(ctx, \"example\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.String(\"example-resource-group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleNetwork, err := redpanda.NewNetwork(ctx, \"example\", &redpanda.NetworkArgs{\n\t\t\tName:            pulumi.String(\"example-network\"),\n\t\t\tResourceGroupId: example.ID(),\n\t\t\tCloudProvider:   pulumi.String(\"aws\"),\n\t\t\tRegion:          pulumi.String(\"us-west-2\"),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tCidrBlock:       pulumi.String(\"10.0.0.0/20\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleCluster, err := redpanda.NewCluster(ctx, \"example\", &redpanda.ClusterArgs{\n\t\t\tName:            pulumi.String(\"example-cluster\"),\n\t\t\tResourceGroupId: example.ID(),\n\t\t\tNetworkId:       exampleNetwork.ID(),\n\t\t\tCloudProvider:   pulumi.String(\"aws\"),\n\t\t\tRegion:          pulumi.String(\"us-west-2\"),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tConnectionType:  pulumi.String(\"public\"),\n\t\t\tThroughputTier:  pulumi.String(\"tier-1-aws-v2-arm\"),\n\t\t\tZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-west-2a\"),\n\t\t\t\tpulumi.String(\"us-west-2b\"),\n\t\t\t\tpulumi.String(\"us-west-2c\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleUser, err := redpanda.NewUser(ctx, \"example\", &redpanda.UserArgs{\n\t\t\tName:          pulumi.String(\"example-user\"),\n\t\t\tPassword:      pulumi.Any(examplePassword),\n\t\t\tMechanism:     pulumi.String(\"scram-sha-256\"),\n\t\t\tClusterApiUrl: exampleCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleTopic, err := redpanda.NewTopic(ctx, \"example\", &redpanda.TopicArgs{\n\t\t\tName:              pulumi.String(\"example-topic\"),\n\t\t\tPartitionCount:    pulumi.Float64(3),\n\t\t\tReplicationFactor: pulumi.Float64(3),\n\t\t\tClusterApiUrl:     exampleCluster.ClusterApiUrl,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewAcl(ctx, \"example\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"TOPIC\"),\n\t\t\tResourceName:        exampleTopic.Name,\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: exampleUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"READ\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  exampleCluster.ClusterApiUrl,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.Network;\nimport com.pulumi.redpanda.NetworkArgs;\nimport com.pulumi.redpanda.Cluster;\nimport com.pulumi.redpanda.ClusterArgs;\nimport com.pulumi.redpanda.User;\nimport com.pulumi.redpanda.UserArgs;\nimport com.pulumi.redpanda.Topic;\nimport com.pulumi.redpanda.TopicArgs;\nimport com.pulumi.redpanda.Acl;\nimport com.pulumi.redpanda.AclArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ResourceGroup(\"example\", ResourceGroupArgs.builder()\n            .name(\"example-resource-group\")\n            .build());\n\n        var exampleNetwork = new Network(\"exampleNetwork\", NetworkArgs.builder()\n            .name(\"example-network\")\n            .resourceGroupId(example.id())\n            .cloudProvider(\"aws\")\n            .region(\"us-west-2\")\n            .clusterType(\"dedicated\")\n            .cidrBlock(\"10.0.0.0/20\")\n            .build());\n\n        var exampleCluster = new Cluster(\"exampleCluster\", ClusterArgs.builder()\n            .name(\"example-cluster\")\n            .resourceGroupId(example.id())\n            .networkId(exampleNetwork.id())\n            .cloudProvider(\"aws\")\n            .region(\"us-west-2\")\n            .clusterType(\"dedicated\")\n            .connectionType(\"public\")\n            .throughputTier(\"tier-1-aws-v2-arm\")\n            .zones(            \n                \"us-west-2a\",\n                \"us-west-2b\",\n                \"us-west-2c\")\n            .build());\n\n        var exampleUser = new User(\"exampleUser\", UserArgs.builder()\n            .name(\"example-user\")\n            .password(examplePassword)\n            .mechanism(\"scram-sha-256\")\n            .clusterApiUrl(exampleCluster.clusterApiUrl())\n            .allowDeletion(true)\n            .build());\n\n        var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n            .name(\"example-topic\")\n            .partitionCount(3.0)\n            .replicationFactor(3.0)\n            .clusterApiUrl(exampleCluster.clusterApiUrl())\n            .build());\n\n        var exampleAcl = new Acl(\"exampleAcl\", AclArgs.builder()\n            .resourceType(\"TOPIC\")\n            .resourceName(exampleTopic.name())\n            .resourcePatternType(\"LITERAL\")\n            .principal(exampleUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"READ\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(exampleCluster.clusterApiUrl())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: redpanda:ResourceGroup\n    properties:\n      name: example-resource-group\n  exampleNetwork:\n    type: redpanda:Network\n    name: example\n    properties:\n      name: example-network\n      resourceGroupId: ${example.id}\n      cloudProvider: aws\n      region: us-west-2\n      clusterType: dedicated\n      cidrBlock: 10.0.0.0/20\n  exampleCluster:\n    type: redpanda:Cluster\n    name: example\n    properties:\n      name: example-cluster\n      resourceGroupId: ${example.id}\n      networkId: ${exampleNetwork.id}\n      cloudProvider: aws\n      region: us-west-2\n      clusterType: dedicated\n      connectionType: public\n      throughputTier: tier-1-aws-v2-arm\n      zones:\n        - us-west-2a\n        - us-west-2b\n        - us-west-2c\n  exampleUser:\n    type: redpanda:User\n    name: example\n    properties:\n      name: example-user\n      password: ${examplePassword}\n      mechanism: scram-sha-256\n      clusterApiUrl: ${exampleCluster.clusterApiUrl}\n      allowDeletion: true\n  exampleTopic:\n    type: redpanda:Topic\n    name: example\n    properties:\n      name: example-topic\n      partitionCount: 3\n      replicationFactor: 3\n      clusterApiUrl: ${exampleCluster.clusterApiUrl}\n  exampleAcl:\n    type: redpanda:Acl\n    name: example\n    properties:\n      resourceType: TOPIC\n      resourceName: ${exampleTopic.name}\n      resourcePatternType: LITERAL\n      principal: User:${exampleUser.name}\n      host: '*'\n      operation: READ\n      permissionType: ALLOW\n      clusterApiUrl: ${exampleCluster.clusterApiUrl}\n```\n<!--End PulumiCodeChooser -->\n\n## Limitations\n\nWe are not currently able to support ACL creation in self hosted clusters. This is an area of active development so expect that to change soon.\n\n## API Reference\n\nFor more information, see the [Redpanda Cloud Data Plane API documentation](https://docs.redpanda.com/api/cloud-dataplane-api/).\n\n## Import\n\nWe do not support the import of ACLs into the Redpanda provider at this time.\n\n","inputProperties":{"allowDeletion":{"description":"When set to true, allows the resource to be removed from state even if the cluster is unreachable\n","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports\n","type":"string"},"host":{"description":"The host address to use for this ACL. To allow a principal access from multiple hosts, you must create an ACL for each host.\n","type":"string"},"operation":{"description":"The operation type that shall be allowed or denied (e.g READ)\n","type":"string"},"permissionType":{"description":"The permission type. It determines whether the operation should be ALLOWED or DENIED. Must be one of (enum values): 2, 3.\n","type":"string"},"principal":{"description":"The principal to apply this ACL for (e.g., User:alice or RedpandaRole:admin)\n","type":"string"},"resourceName":{"description":"The name of the resource this ACL entry will be on\n","type":"string"},"resourcePatternType":{"description":"The pattern type of the resource. It determines the strategy how the provided resource name is matched (LITERAL, MATCH, PREFIXED, etc ...) against the actual resource names. Must be one of (enum values): 3, 4.\n","type":"string"},"resourceType":{"description":"The type of the resource (TOPIC, GROUP, etc...) this ACL shall target\n","type":"string"}},"properties":{"allowDeletion":{"description":"When set to true, allows the resource to be removed from state even if the cluster is unreachable\n","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports\n","type":"string"},"host":{"description":"The host address to use for this ACL. To allow a principal access from multiple hosts, you must create an ACL for each host.\n","type":"string"},"operation":{"description":"The operation type that shall be allowed or denied (e.g READ)\n","type":"string"},"permissionType":{"description":"The permission type. It determines whether the operation should be ALLOWED or DENIED. Must be one of (enum values): 2, 3.\n","type":"string"},"principal":{"description":"The principal to apply this ACL for (e.g., User:alice or RedpandaRole:admin)\n","type":"string"},"resourceName":{"description":"The name of the resource this ACL entry will be on\n","type":"string"},"resourcePatternType":{"description":"The pattern type of the resource. It determines the strategy how the provided resource name is matched (LITERAL, MATCH, PREFIXED, etc ...) against the actual resource names. Must be one of (enum values): 3, 4.\n","type":"string"},"resourceType":{"description":"The type of the resource (TOPIC, GROUP, etc...) this ACL shall target\n","type":"string"}},"required":["allowDeletion","clusterApiUrl","host","operation","permissionType","principal","resourceName","resourcePatternType","resourceType"],"requiredInputs":["clusterApiUrl","host","operation","permissionType","principal","resourceName","resourcePatternType","resourceType"],"stateInputs":{"description":"Input properties used for looking up and filtering Acl resources.\n","properties":{"allowDeletion":{"description":"When set to true, allows the resource to be removed from state even if the cluster is unreachable\n","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports\n","type":"string"},"host":{"description":"The host address to use for this ACL. To allow a principal access from multiple hosts, you must create an ACL for each host.\n","type":"string"},"operation":{"description":"The operation type that shall be allowed or denied (e.g READ)\n","type":"string"},"permissionType":{"description":"The permission type. It determines whether the operation should be ALLOWED or DENIED. Must be one of (enum values): 2, 3.\n","type":"string"},"principal":{"description":"The principal to apply this ACL for (e.g., User:alice or RedpandaRole:admin)\n","type":"string"},"resourceName":{"description":"The name of the resource this ACL entry will be on\n","type":"string"},"resourcePatternType":{"description":"The pattern type of the resource. It determines the strategy how the provided resource name is matched (LITERAL, MATCH, PREFIXED, etc ...) against the actual resource names. Must be one of (enum values): 3, 4.\n","type":"string"},"resourceType":{"description":"The type of the resource (TOPIC, GROUP, etc...) this ACL shall target\n","type":"string"}},"type":"object"},"type":"object"},"redpanda:index/cluster:Cluster":{"description":"Cluster resource\n\nEnables the provisioning and management of Redpanda clusters on AWS and GCP. A cluster must always have a network and resource group.\n\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = new redpanda.ResourceGroup(\"example\", {name: \"example-resource-group\"});\nconst exampleNetwork = new redpanda.Network(\"example\", {\n    name: \"example-network\",\n    resourceGroupId: example.id,\n    cloudProvider: \"aws\",\n    region: \"us-west-2\",\n    clusterType: \"dedicated\",\n    cidrBlock: \"10.0.0.0/20\",\n});\nconst exampleCluster = new redpanda.Cluster(\"example\", {\n    name: \"example-cluster\",\n    resourceGroupId: example.id,\n    networkId: exampleNetwork.id,\n    cloudProvider: \"aws\",\n    region: \"us-west-2\",\n    clusterType: \"dedicated\",\n    connectionType: \"public\",\n    throughputTier: \"tier-1-aws-v2-arm\",\n    zones: [\n        \"us-west-2a\",\n        \"us-west-2b\",\n        \"us-west-2c\",\n    ],\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.ResourceGroup(\"example\", name=\"example-resource-group\")\nexample_network = redpanda.Network(\"example\",\n    name=\"example-network\",\n    resource_group_id=example.id,\n    cloud_provider=\"aws\",\n    region=\"us-west-2\",\n    cluster_type=\"dedicated\",\n    cidr_block=\"10.0.0.0/20\")\nexample_cluster = redpanda.Cluster(\"example\",\n    name=\"example-cluster\",\n    resource_group_id=example.id,\n    network_id=example_network.id,\n    cloud_provider=\"aws\",\n    region=\"us-west-2\",\n    cluster_type=\"dedicated\",\n    connection_type=\"public\",\n    throughput_tier=\"tier-1-aws-v2-arm\",\n    zones=[\n        \"us-west-2a\",\n        \"us-west-2b\",\n        \"us-west-2c\",\n    ])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = new Redpanda.ResourceGroup(\"example\", new()\n    {\n        Name = \"example-resource-group\",\n    });\n\n    var exampleNetwork = new Redpanda.Network(\"example\", new()\n    {\n        Name = \"example-network\",\n        ResourceGroupId = example.Id,\n        CloudProvider = \"aws\",\n        Region = \"us-west-2\",\n        ClusterType = \"dedicated\",\n        CidrBlock = \"10.0.0.0/20\",\n    });\n\n    var exampleCluster = new Redpanda.Cluster(\"example\", new()\n    {\n        Name = \"example-cluster\",\n        ResourceGroupId = example.Id,\n        NetworkId = exampleNetwork.Id,\n        CloudProvider = \"aws\",\n        Region = \"us-west-2\",\n        ClusterType = \"dedicated\",\n        ConnectionType = \"public\",\n        ThroughputTier = \"tier-1-aws-v2-arm\",\n        Zones = new[]\n        {\n            \"us-west-2a\",\n            \"us-west-2b\",\n            \"us-west-2c\",\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := redpanda.NewResourceGroup(ctx, \"example\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.String(\"example-resource-group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleNetwork, err := redpanda.NewNetwork(ctx, \"example\", &redpanda.NetworkArgs{\n\t\t\tName:            pulumi.String(\"example-network\"),\n\t\t\tResourceGroupId: example.ID(),\n\t\t\tCloudProvider:   pulumi.String(\"aws\"),\n\t\t\tRegion:          pulumi.String(\"us-west-2\"),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tCidrBlock:       pulumi.String(\"10.0.0.0/20\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewCluster(ctx, \"example\", &redpanda.ClusterArgs{\n\t\t\tName:            pulumi.String(\"example-cluster\"),\n\t\t\tResourceGroupId: example.ID(),\n\t\t\tNetworkId:       exampleNetwork.ID(),\n\t\t\tCloudProvider:   pulumi.String(\"aws\"),\n\t\t\tRegion:          pulumi.String(\"us-west-2\"),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tConnectionType:  pulumi.String(\"public\"),\n\t\t\tThroughputTier:  pulumi.String(\"tier-1-aws-v2-arm\"),\n\t\t\tZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-west-2a\"),\n\t\t\t\tpulumi.String(\"us-west-2b\"),\n\t\t\t\tpulumi.String(\"us-west-2c\"),\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.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.Network;\nimport com.pulumi.redpanda.NetworkArgs;\nimport com.pulumi.redpanda.Cluster;\nimport com.pulumi.redpanda.ClusterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ResourceGroup(\"example\", ResourceGroupArgs.builder()\n            .name(\"example-resource-group\")\n            .build());\n\n        var exampleNetwork = new Network(\"exampleNetwork\", NetworkArgs.builder()\n            .name(\"example-network\")\n            .resourceGroupId(example.id())\n            .cloudProvider(\"aws\")\n            .region(\"us-west-2\")\n            .clusterType(\"dedicated\")\n            .cidrBlock(\"10.0.0.0/20\")\n            .build());\n\n        var exampleCluster = new Cluster(\"exampleCluster\", ClusterArgs.builder()\n            .name(\"example-cluster\")\n            .resourceGroupId(example.id())\n            .networkId(exampleNetwork.id())\n            .cloudProvider(\"aws\")\n            .region(\"us-west-2\")\n            .clusterType(\"dedicated\")\n            .connectionType(\"public\")\n            .throughputTier(\"tier-1-aws-v2-arm\")\n            .zones(            \n                \"us-west-2a\",\n                \"us-west-2b\",\n                \"us-west-2c\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: redpanda:ResourceGroup\n    properties:\n      name: example-resource-group\n  exampleNetwork:\n    type: redpanda:Network\n    name: example\n    properties:\n      name: example-network\n      resourceGroupId: ${example.id}\n      cloudProvider: aws\n      region: us-west-2\n      clusterType: dedicated\n      cidrBlock: 10.0.0.0/20\n  exampleCluster:\n    type: redpanda:Cluster\n    name: example\n    properties:\n      name: example-cluster\n      resourceGroupId: ${example.id}\n      networkId: ${exampleNetwork.id}\n      cloudProvider: aws\n      region: us-west-2\n      clusterType: dedicated\n      connectionType: public\n      throughputTier: tier-1-aws-v2-arm\n      zones:\n        - us-west-2a\n        - us-west-2b\n        - us-west-2c\n```\n<!--End PulumiCodeChooser -->\n\n### Advanced Usage\n\n### On AWS\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst test = new redpanda.ResourceGroup(\"test\", {name: resourceGroupName});\nconst testNetwork = new redpanda.Network(\"test\", {\n    name: networkName,\n    resourceGroupId: test.id,\n    cloudProvider: cloudProvider,\n    region: region,\n    clusterType: \"dedicated\",\n    cidrBlock: \"10.0.0.0/20\",\n    timeouts: {\n        create: \"20m\",\n        \"delete\": \"20m\",\n    },\n});\nconst testCluster = new redpanda.Cluster(\"test\", {\n    name: clusterName,\n    resourceGroupId: test.id,\n    networkId: testNetwork.id,\n    cloudProvider: cloudProvider,\n    region: region,\n    clusterType: \"dedicated\",\n    connectionType: \"public\",\n    throughputTier: throughputTier,\n    zones: zones,\n    allowDeletion: clusterAllowDeletion,\n    clusterConfiguration: {\n        customPropertiesJson: JSON.stringify({\n            enable_shadow_linking: clusterEnableShadowLinking,\n            schema_registry_enable_authorization: true,\n        }),\n    },\n    maintenanceWindowConfig: {\n        dayHour: {\n            dayOfWeek: maintenanceDayOfWeek,\n            hourOfDay: maintenanceHourOfDay,\n        },\n    },\n    tags: clusterTags,\n    timeouts: {\n        create: \"90m\",\n    },\n});\nconst testUser = new redpanda.User(\"test\", {\n    name: userName,\n    password: userPasswordWo != null ? null : userPw,\n    passwordWo: userPasswordWo,\n    passwordWoVersion: userPasswordWoVersion,\n    mechanism: mechanism,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: userAllowDeletion,\n});\nconst testTopic = new redpanda.Topic(\"test\", {\n    name: topicName,\n    partitionCount: partitionCount,\n    replicationFactor: replicationFactor,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: true,\n    configuration: topicConfiguration != null ? topicConfiguration : {\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": topicRetentionMs,\n    },\n}, {\n    dependsOn: [testUser],\n});\n// Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n// Two grants are required: the SUBJECT-scope grant authorizes\n// POST /subjects/<subj>/versions; the REGISTRY-scope grant authorizes the\n// follow-up GET /schemas/ids/<id>/versions that the SR client (franz-go) makes\n// to fetch the full schema metadata after create. Without the REGISTRY grant,\n// the schema is created but the follow-up GET 403s and the resource fails.\n// User:* is broader than necessary; tighten once the exact principal is\n// documented as discoverable.\nconst providerBootstrapSubject = new redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\", {\n    clusterId: testCluster.id,\n    principal: \"User:*\",\n    resourceType: \"SUBJECT\",\n    resourceName: topicName,\n    patternType: \"PREFIXED\",\n    host: \"*\",\n    operation: \"ALL\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n});\nconst providerBootstrapRegistry = new redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\", {\n    clusterId: testCluster.id,\n    principal: \"User:*\",\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"ALL\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n});\nconst clusterAdmin = new redpanda.Acl(\"cluster_admin\", {\n    resourceType: \"CLUSTER\",\n    resourceName: \"kafka-cluster\",\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"ALL\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst schemaRegistryAdmin = new redpanda.Acl(\"schema_registry_admin\", {\n    resourceType: \"CLUSTER\",\n    resourceName: \"kafka-cluster\",\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"ALTER\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst clusterAction = new redpanda.Acl(\"cluster_action\", {\n    resourceType: \"CLUSTER\",\n    resourceName: \"kafka-cluster\",\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"CLUSTER_ACTION\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst topicAccess = new redpanda.Acl(\"topic_access\", {\n    resourceType: \"TOPIC\",\n    resourceName: testTopic.name,\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"ALL\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst allTestTopic = new redpanda.SchemaRegistryAcl(\"all_test_topic\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"SUBJECT\",\n    resourceName: `${topicName}-`,\n    patternType: \"PREFIXED\",\n    host: \"*\",\n    operation: \"ALL\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst describeRegistry = new redpanda.SchemaRegistryAcl(\"describe_registry\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"DESCRIBE\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst alterConfigsRegistry = new redpanda.SchemaRegistryAcl(\"alter_configs_registry\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"ALTER_CONFIGS\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst readRegistry = new redpanda.SchemaRegistryAcl(\"read_registry\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"READ\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst writeRegistry = new redpanda.SchemaRegistryAcl(\"write_registry\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"WRITE\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst userSchema = new redpanda.Schema(\"user_schema\", {\n    clusterId: testCluster.id,\n    subject: `${topicName}-value`,\n    schemaType: schemaType,\n    schema: userSchemaDefinition,\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n        clusterAction,\n        topicAccess,\n        providerBootstrapSubject,\n        providerBootstrapRegistry,\n        allTestTopic,\n        describeRegistry,\n        alterConfigsRegistry,\n        readRegistry,\n        writeRegistry,\n    ],\n});\nconst userEventSchema = new redpanda.Schema(\"user_event_schema\", {\n    clusterId: testCluster.id,\n    subject: `${topicName}-events-value`,\n    schemaType: schemaType,\n    schema: userEventSchemaDefinition,\n    allowDeletion: true,\n    references: [{\n        name: \"User\",\n        subject: userSchema.subject,\n        version: userSchema.version,\n    }],\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n        clusterAction,\n        topicAccess,\n        providerBootstrapSubject,\n        providerBootstrapRegistry,\n        allTestTopic,\n        describeRegistry,\n        alterConfigsRegistry,\n        readRegistry,\n        writeRegistry,\n    ],\n});\nconst productSchema = new redpanda.Schema(\"product_schema\", {\n    clusterId: testCluster.id,\n    subject: `${topicName}-product-value`,\n    schemaType: schemaType,\n    schema: productSchemaDefinition,\n    compatibility: compatibilityLevel,\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n        clusterAction,\n        topicAccess,\n        providerBootstrapSubject,\n        providerBootstrapRegistry,\n        allTestTopic,\n        describeRegistry,\n        alterConfigsRegistry,\n        readRegistry,\n        writeRegistry,\n    ],\n});\nconst developer = new redpanda.Role(\"developer\", {\n    name: roleName,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: roleAllowDeletion,\n});\nconst roleTopicRead = new redpanda.Acl(\"role_topic_read\", {\n    resourceType: \"TOPIC\",\n    resourceName: testTopic.name,\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`RedpandaRole:${developer.name}`,\n    host: \"*\",\n    operation: \"READ\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst readProduct = new redpanda.SchemaRegistryAcl(\"read_product\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"SUBJECT\",\n    resourceName: \"product-\",\n    patternType: \"PREFIXED\",\n    host: \"*\",\n    operation: \"READ\",\n    permission: \"ALLOW\",\n    allowDeletion: srAclAllowDeletion,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst writeOrders = new redpanda.SchemaRegistryAcl(\"write_orders\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"SUBJECT\",\n    resourceName: \"orders-value\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"WRITE\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst developerAssignment = new redpanda.RoleAssignment(\"developer_assignment\", {\n    roleName: developer.name,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    clusterApiUrl: testCluster.clusterApiUrl,\n}, {\n    dependsOn: [testUser],\n});\nexport const userSchemaInfo = {\n    id: userSchema.schemaId,\n    subject: userSchema.subject,\n    version: userSchema.version,\n    type: userSchema.schemaType,\n};\nexport const userEventSchemaInfo = {\n    id: userEventSchema.schemaId,\n    subject: userEventSchema.subject,\n    version: userEventSchema.version,\n    type: userEventSchema.schemaType,\n    references: userEventSchema.references,\n};\nexport const productSchemaInfo = {\n    id: productSchema.schemaId,\n    subject: productSchema.subject,\n    version: productSchema.version,\n    type: productSchema.schemaType,\n    compatibility: productSchema.compatibility,\n};\n```\n```python\nimport pulumi\nimport json\nimport pulumi_redpanda as redpanda\n\ntest = redpanda.ResourceGroup(\"test\", name=resource_group_name)\ntest_network = redpanda.Network(\"test\",\n    name=network_name,\n    resource_group_id=test.id,\n    cloud_provider=cloud_provider,\n    region=region,\n    cluster_type=\"dedicated\",\n    cidr_block=\"10.0.0.0/20\",\n    timeouts={\n        \"create\": \"20m\",\n        \"delete\": \"20m\",\n    })\ntest_cluster = redpanda.Cluster(\"test\",\n    name=cluster_name,\n    resource_group_id=test.id,\n    network_id=test_network.id,\n    cloud_provider=cloud_provider,\n    region=region,\n    cluster_type=\"dedicated\",\n    connection_type=\"public\",\n    throughput_tier=throughput_tier,\n    zones=zones,\n    allow_deletion=cluster_allow_deletion,\n    cluster_configuration={\n        \"custom_properties_json\": json.dumps({\n            \"enable_shadow_linking\": cluster_enable_shadow_linking,\n            \"schema_registry_enable_authorization\": True,\n        }),\n    },\n    maintenance_window_config={\n        \"day_hour\": {\n            \"day_of_week\": maintenance_day_of_week,\n            \"hour_of_day\": maintenance_hour_of_day,\n        },\n    },\n    tags=cluster_tags,\n    timeouts={\n        \"create\": \"90m\",\n    })\ntest_user = redpanda.User(\"test\",\n    name=user_name,\n    password=None if user_password_wo != None else user_pw,\n    password_wo=user_password_wo,\n    password_wo_version=user_password_wo_version,\n    mechanism=mechanism,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=user_allow_deletion)\ntest_topic = redpanda.Topic(\"test\",\n    name=topic_name,\n    partition_count=partition_count,\n    replication_factor=replication_factor,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=True,\n    configuration=topic_configuration if topic_configuration != None else {\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": topic_retention_ms,\n    },\n    opts = pulumi.ResourceOptions(depends_on=[test_user]))\n# Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n# Two grants are required: the SUBJECT-scope grant authorizes\n# POST /subjects/<subj>/versions; the REGISTRY-scope grant authorizes the\n# follow-up GET /schemas/ids/<id>/versions that the SR client (franz-go) makes\n# to fetch the full schema metadata after create. Without the REGISTRY grant,\n# the schema is created but the follow-up GET 403s and the resource fails.\n# User:* is broader than necessary; tighten once the exact principal is\n# documented as discoverable.\nprovider_bootstrap_subject = redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\",\n    cluster_id=test_cluster.id,\n    principal=\"User:*\",\n    resource_type=\"SUBJECT\",\n    resource_name_=topic_name,\n    pattern_type=\"PREFIXED\",\n    host=\"*\",\n    operation=\"ALL\",\n    permission=\"ALLOW\",\n    allow_deletion=True)\nprovider_bootstrap_registry = redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\",\n    cluster_id=test_cluster.id,\n    principal=\"User:*\",\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"ALL\",\n    permission=\"ALLOW\",\n    allow_deletion=True)\ncluster_admin = redpanda.Acl(\"cluster_admin\",\n    resource_type=\"CLUSTER\",\n    resource_name_=\"kafka-cluster\",\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"ALL\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\nschema_registry_admin = redpanda.Acl(\"schema_registry_admin\",\n    resource_type=\"CLUSTER\",\n    resource_name_=\"kafka-cluster\",\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"ALTER\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\ncluster_action = redpanda.Acl(\"cluster_action\",\n    resource_type=\"CLUSTER\",\n    resource_name_=\"kafka-cluster\",\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"CLUSTER_ACTION\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\ntopic_access = redpanda.Acl(\"topic_access\",\n    resource_type=\"TOPIC\",\n    resource_name_=test_topic.name,\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"ALL\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\nall_test_topic = redpanda.SchemaRegistryAcl(\"all_test_topic\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"SUBJECT\",\n    resource_name_=f\"{topic_name}-\",\n    pattern_type=\"PREFIXED\",\n    host=\"*\",\n    operation=\"ALL\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\ndescribe_registry = redpanda.SchemaRegistryAcl(\"describe_registry\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"DESCRIBE\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nalter_configs_registry = redpanda.SchemaRegistryAcl(\"alter_configs_registry\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"ALTER_CONFIGS\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nread_registry = redpanda.SchemaRegistryAcl(\"read_registry\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"READ\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nwrite_registry = redpanda.SchemaRegistryAcl(\"write_registry\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"WRITE\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nuser_schema = redpanda.Schema(\"user_schema\",\n    cluster_id=test_cluster.id,\n    subject=f\"{topic_name}-value\",\n    schema_type=schema_type,\n    schema=user_schema_definition,\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n            cluster_action,\n            topic_access,\n            provider_bootstrap_subject,\n            provider_bootstrap_registry,\n            all_test_topic,\n            describe_registry,\n            alter_configs_registry,\n            read_registry,\n            write_registry,\n        ]))\nuser_event_schema = redpanda.Schema(\"user_event_schema\",\n    cluster_id=test_cluster.id,\n    subject=f\"{topic_name}-events-value\",\n    schema_type=schema_type,\n    schema=user_event_schema_definition,\n    allow_deletion=True,\n    references=[{\n        \"name\": \"User\",\n        \"subject\": user_schema.subject,\n        \"version\": user_schema.version,\n    }],\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n            cluster_action,\n            topic_access,\n            provider_bootstrap_subject,\n            provider_bootstrap_registry,\n            all_test_topic,\n            describe_registry,\n            alter_configs_registry,\n            read_registry,\n            write_registry,\n        ]))\nproduct_schema = redpanda.Schema(\"product_schema\",\n    cluster_id=test_cluster.id,\n    subject=f\"{topic_name}-product-value\",\n    schema_type=schema_type,\n    schema=product_schema_definition,\n    compatibility=compatibility_level,\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n            cluster_action,\n            topic_access,\n            provider_bootstrap_subject,\n            provider_bootstrap_registry,\n            all_test_topic,\n            describe_registry,\n            alter_configs_registry,\n            read_registry,\n            write_registry,\n        ]))\ndeveloper = redpanda.Role(\"developer\",\n    name=role_name,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=role_allow_deletion)\nrole_topic_read = redpanda.Acl(\"role_topic_read\",\n    resource_type=\"TOPIC\",\n    resource_name_=test_topic.name,\n    resource_pattern_type=\"LITERAL\",\n    principal=developer.name.apply(lambda name: f\"RedpandaRole:{name}\"),\n    host=\"*\",\n    operation=\"READ\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\nread_product = redpanda.SchemaRegistryAcl(\"read_product\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"SUBJECT\",\n    resource_name_=\"product-\",\n    pattern_type=\"PREFIXED\",\n    host=\"*\",\n    operation=\"READ\",\n    permission=\"ALLOW\",\n    allow_deletion=sr_acl_allow_deletion,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nwrite_orders = redpanda.SchemaRegistryAcl(\"write_orders\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"SUBJECT\",\n    resource_name_=\"orders-value\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"WRITE\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\ndeveloper_assignment = redpanda.RoleAssignment(\"developer_assignment\",\n    role_name=developer.name,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    cluster_api_url=test_cluster.cluster_api_url,\n    opts = pulumi.ResourceOptions(depends_on=[test_user]))\npulumi.export(\"userSchemaInfo\", {\n    \"id\": user_schema.schema_id,\n    \"subject\": user_schema.subject,\n    \"version\": user_schema.version,\n    \"type\": user_schema.schema_type,\n})\npulumi.export(\"userEventSchemaInfo\", {\n    \"id\": user_event_schema.schema_id,\n    \"subject\": user_event_schema.subject,\n    \"version\": user_event_schema.version,\n    \"type\": user_event_schema.schema_type,\n    \"references\": user_event_schema.references,\n})\npulumi.export(\"productSchemaInfo\", {\n    \"id\": product_schema.schema_id,\n    \"subject\": product_schema.subject,\n    \"version\": product_schema.version,\n    \"type\": product_schema.schema_type,\n    \"compatibility\": product_schema.compatibility,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var test = new Redpanda.ResourceGroup(\"test\", new()\n    {\n        Name = resourceGroupName,\n    });\n\n    var testNetwork = new Redpanda.Network(\"test\", new()\n    {\n        Name = networkName,\n        ResourceGroupId = test.Id,\n        CloudProvider = cloudProvider,\n        Region = region,\n        ClusterType = \"dedicated\",\n        CidrBlock = \"10.0.0.0/20\",\n        Timeouts = new Redpanda.Inputs.NetworkTimeoutsArgs\n        {\n            Create = \"20m\",\n            Delete = \"20m\",\n        },\n    });\n\n    var testCluster = new Redpanda.Cluster(\"test\", new()\n    {\n        Name = clusterName,\n        ResourceGroupId = test.Id,\n        NetworkId = testNetwork.Id,\n        CloudProvider = cloudProvider,\n        Region = region,\n        ClusterType = \"dedicated\",\n        ConnectionType = \"public\",\n        ThroughputTier = throughputTier,\n        Zones = zones,\n        AllowDeletion = clusterAllowDeletion,\n        ClusterConfiguration = new Redpanda.Inputs.ClusterClusterConfigurationArgs\n        {\n            CustomPropertiesJson = JsonSerializer.Serialize(new Dictionary<string, object?>\n            {\n                [\"enable_shadow_linking\"] = clusterEnableShadowLinking,\n                [\"schema_registry_enable_authorization\"] = true,\n            }),\n        },\n        MaintenanceWindowConfig = new Redpanda.Inputs.ClusterMaintenanceWindowConfigArgs\n        {\n            DayHour = new Redpanda.Inputs.ClusterMaintenanceWindowConfigDayHourArgs\n            {\n                DayOfWeek = maintenanceDayOfWeek,\n                HourOfDay = maintenanceHourOfDay,\n            },\n        },\n        Tags = clusterTags,\n        Timeouts = new Redpanda.Inputs.ClusterTimeoutsArgs\n        {\n            Create = \"90m\",\n        },\n    });\n\n    var testUser = new Redpanda.User(\"test\", new()\n    {\n        Name = userName,\n        Password = userPasswordWo != null ? null : userPw,\n        PasswordWo = userPasswordWo,\n        PasswordWoVersion = userPasswordWoVersion,\n        Mechanism = mechanism,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = userAllowDeletion,\n    });\n\n    var testTopic = new Redpanda.Topic(\"test\", new()\n    {\n        Name = topicName,\n        PartitionCount = partitionCount,\n        ReplicationFactor = replicationFactor,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = true,\n        Configuration = topicConfiguration != null ? topicConfiguration : \n        {\n            { \"cleanup.policy\", \"delete\" },\n            { \"retention.ms\", topicRetentionMs },\n        },\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            testUser,\n        },\n    });\n\n    // Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n    // Two grants are required: the SUBJECT-scope grant authorizes\n    // POST /subjects/<subj>/versions; the REGISTRY-scope grant authorizes the\n    // follow-up GET /schemas/ids/<id>/versions that the SR client (franz-go) makes\n    // to fetch the full schema metadata after create. Without the REGISTRY grant,\n    // the schema is created but the follow-up GET 403s and the resource fails.\n    // User:* is broader than necessary; tighten once the exact principal is\n    // documented as discoverable.\n    var providerBootstrapSubject = new Redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = \"User:*\",\n        ResourceType = \"SUBJECT\",\n        ResourceName = topicName,\n        PatternType = \"PREFIXED\",\n        Host = \"*\",\n        Operation = \"ALL\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    });\n\n    var providerBootstrapRegistry = new Redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = \"User:*\",\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"ALL\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    });\n\n    var clusterAdmin = new Redpanda.Acl(\"cluster_admin\", new()\n    {\n        ResourceType = \"CLUSTER\",\n        ResourceName = \"kafka-cluster\",\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"ALL\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var schemaRegistryAdmin = new Redpanda.Acl(\"schema_registry_admin\", new()\n    {\n        ResourceType = \"CLUSTER\",\n        ResourceName = \"kafka-cluster\",\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"ALTER\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var clusterAction = new Redpanda.Acl(\"cluster_action\", new()\n    {\n        ResourceType = \"CLUSTER\",\n        ResourceName = \"kafka-cluster\",\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"CLUSTER_ACTION\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var topicAccess = new Redpanda.Acl(\"topic_access\", new()\n    {\n        ResourceType = \"TOPIC\",\n        ResourceName = testTopic.Name,\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"ALL\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var allTestTopic = new Redpanda.SchemaRegistryAcl(\"all_test_topic\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"SUBJECT\",\n        ResourceName = $\"{topicName}-\",\n        PatternType = \"PREFIXED\",\n        Host = \"*\",\n        Operation = \"ALL\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var describeRegistry = new Redpanda.SchemaRegistryAcl(\"describe_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"DESCRIBE\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var alterConfigsRegistry = new Redpanda.SchemaRegistryAcl(\"alter_configs_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"ALTER_CONFIGS\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var readRegistry = new Redpanda.SchemaRegistryAcl(\"read_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"READ\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var writeRegistry = new Redpanda.SchemaRegistryAcl(\"write_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"WRITE\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var userSchema = new Redpanda.Schema(\"user_schema\", new()\n    {\n        ClusterId = testCluster.Id,\n        Subject = $\"{topicName}-value\",\n        SchemaType = schemaType,\n        Schema = userSchemaDefinition,\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n            clusterAction,\n            topicAccess,\n            providerBootstrapSubject,\n            providerBootstrapRegistry,\n            allTestTopic,\n            describeRegistry,\n            alterConfigsRegistry,\n            readRegistry,\n            writeRegistry,\n        },\n    });\n\n    var userEventSchema = new Redpanda.Schema(\"user_event_schema\", new()\n    {\n        ClusterId = testCluster.Id,\n        Subject = $\"{topicName}-events-value\",\n        SchemaType = schemaType,\n        Schema = userEventSchemaDefinition,\n        AllowDeletion = true,\n        References = new[]\n        {\n            new Redpanda.Inputs.SchemaReferenceArgs\n            {\n                Name = \"User\",\n                Subject = userSchema.Subject,\n                Version = userSchema.Version,\n            },\n        },\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n            clusterAction,\n            topicAccess,\n            providerBootstrapSubject,\n            providerBootstrapRegistry,\n            allTestTopic,\n            describeRegistry,\n            alterConfigsRegistry,\n            readRegistry,\n            writeRegistry,\n        },\n    });\n\n    var productSchema = new Redpanda.Schema(\"product_schema\", new()\n    {\n        ClusterId = testCluster.Id,\n        Subject = $\"{topicName}-product-value\",\n        SchemaType = schemaType,\n        Schema = productSchemaDefinition,\n        Compatibility = compatibilityLevel,\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n            clusterAction,\n            topicAccess,\n            providerBootstrapSubject,\n            providerBootstrapRegistry,\n            allTestTopic,\n            describeRegistry,\n            alterConfigsRegistry,\n            readRegistry,\n            writeRegistry,\n        },\n    });\n\n    var developer = new Redpanda.Role(\"developer\", new()\n    {\n        Name = roleName,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = roleAllowDeletion,\n    });\n\n    var roleTopicRead = new Redpanda.Acl(\"role_topic_read\", new()\n    {\n        ResourceType = \"TOPIC\",\n        ResourceName = testTopic.Name,\n        ResourcePatternType = \"LITERAL\",\n        Principal = developer.Name.Apply(name => $\"RedpandaRole:{name}\"),\n        Host = \"*\",\n        Operation = \"READ\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var readProduct = new Redpanda.SchemaRegistryAcl(\"read_product\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"SUBJECT\",\n        ResourceName = \"product-\",\n        PatternType = \"PREFIXED\",\n        Host = \"*\",\n        Operation = \"READ\",\n        Permission = \"ALLOW\",\n        AllowDeletion = srAclAllowDeletion,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var writeOrders = new Redpanda.SchemaRegistryAcl(\"write_orders\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"SUBJECT\",\n        ResourceName = \"orders-value\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"WRITE\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var developerAssignment = new Redpanda.RoleAssignment(\"developer_assignment\", new()\n    {\n        RoleName = developer.Name,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            testUser,\n        },\n    });\n\n    return new Dictionary<string, object?>\n    {\n        [\"userSchemaInfo\"] = \n        {\n            { \"id\", userSchema.SchemaId },\n            { \"subject\", userSchema.Subject },\n            { \"version\", userSchema.Version },\n            { \"type\", userSchema.SchemaType },\n        },\n        [\"userEventSchemaInfo\"] = \n        {\n            { \"id\", userEventSchema.SchemaId },\n            { \"subject\", userEventSchema.Subject },\n            { \"version\", userEventSchema.Version },\n            { \"type\", userEventSchema.SchemaType },\n            { \"references\", userEventSchema.References },\n        },\n        [\"productSchemaInfo\"] = \n        {\n            { \"id\", productSchema.SchemaId },\n            { \"subject\", productSchema.Subject },\n            { \"version\", productSchema.Version },\n            { \"type\", productSchema.SchemaType },\n            { \"compatibility\", productSchema.Compatibility },\n        },\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := redpanda.NewResourceGroup(ctx, \"test\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.Any(resourceGroupName),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestNetwork, err := redpanda.NewNetwork(ctx, \"test\", &redpanda.NetworkArgs{\n\t\t\tName:            pulumi.Any(networkName),\n\t\t\tResourceGroupId: test.ID(),\n\t\t\tCloudProvider:   pulumi.Any(cloudProvider),\n\t\t\tRegion:          pulumi.Any(region),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tCidrBlock:       pulumi.String(\"10.0.0.0/20\"),\n\t\t\tTimeouts: &redpanda.NetworkTimeoutsArgs{\n\t\t\t\tCreate: pulumi.String(\"20m\"),\n\t\t\t\tDelete: pulumi.String(\"20m\"),\n\t\t\t},\n\t\t})\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\"enable_shadow_linking\":                clusterEnableShadowLinking,\n\t\t\t\"schema_registry_enable_authorization\": true,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttestCluster, err := redpanda.NewCluster(ctx, \"test\", &redpanda.ClusterArgs{\n\t\t\tName:            pulumi.Any(clusterName),\n\t\t\tResourceGroupId: test.ID(),\n\t\t\tNetworkId:       testNetwork.ID(),\n\t\t\tCloudProvider:   pulumi.Any(cloudProvider),\n\t\t\tRegion:          pulumi.Any(region),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tConnectionType:  pulumi.String(\"public\"),\n\t\t\tThroughputTier:  pulumi.Any(throughputTier),\n\t\t\tZones:           pulumi.Any(zones),\n\t\t\tAllowDeletion:   pulumi.Any(clusterAllowDeletion),\n\t\t\tClusterConfiguration: &redpanda.ClusterClusterConfigurationArgs{\n\t\t\t\tCustomPropertiesJson: pulumi.String(json0),\n\t\t\t},\n\t\t\tMaintenanceWindowConfig: &redpanda.ClusterMaintenanceWindowConfigArgs{\n\t\t\t\tDayHour: &redpanda.ClusterMaintenanceWindowConfigDayHourArgs{\n\t\t\t\t\tDayOfWeek: pulumi.Any(maintenanceDayOfWeek),\n\t\t\t\t\tHourOfDay: pulumi.Any(maintenanceHourOfDay),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.Any(clusterTags),\n\t\t\tTimeouts: &redpanda.ClusterTimeoutsArgs{\n\t\t\t\tCreate: pulumi.String(\"90m\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvar tmp0 pulumi.String\n\t\tif userPasswordWo != nil {\n\t\t\ttmp0 = nil\n\t\t} else {\n\t\t\ttmp0 = pulumi.Any(userPw)\n\t\t}\n\t\ttestUser, err := redpanda.NewUser(ctx, \"test\", &redpanda.UserArgs{\n\t\t\tName:              pulumi.Any(userName),\n\t\t\tPassword:          pulumi.String(tmp0),\n\t\t\tPasswordWo:        pulumi.Any(userPasswordWo),\n\t\t\tPasswordWoVersion: pulumi.Any(userPasswordWoVersion),\n\t\t\tMechanism:         pulumi.Any(mechanism),\n\t\t\tClusterApiUrl:     testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:     pulumi.Any(userAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvar tmp1 pulumi.StringMap\n\t\tif topicConfiguration != nil {\n\t\t\ttmp1 = pulumi.Any(topicConfiguration)\n\t\t} else {\n\t\t\ttmp1 = pulumi.StringMap{\n\t\t\t\t\"cleanup.policy\": pulumi.String(\"delete\"),\n\t\t\t\t\"retention.ms\":   pulumi.Any(topicRetentionMs),\n\t\t\t}\n\t\t}\n\t\ttestTopic, err := redpanda.NewTopic(ctx, \"test\", &redpanda.TopicArgs{\n\t\t\tName:              pulumi.Any(topicName),\n\t\t\tPartitionCount:    pulumi.Any(partitionCount),\n\t\t\tReplicationFactor: pulumi.Any(replicationFactor),\n\t\t\tClusterApiUrl:     testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:     pulumi.Bool(true),\n\t\t\tConfiguration:     pulumi.StringMap(tmp1),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\ttestUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n\t\t// Two grants are required: the SUBJECT-scope grant authorizes\n\t\t// POST /subjects/<subj>/versions; the REGISTRY-scope grant authorizes the\n\t\t// follow-up GET /schemas/ids/<id>/versions that the SR client (franz-go) makes\n\t\t// to fetch the full schema metadata after create. Without the REGISTRY grant,\n\t\t// the schema is created but the follow-up GET 403s and the resource fails.\n\t\t// User:* is broader than necessary; tighten once the exact principal is\n\t\t// documented as discoverable.\n\t\tproviderBootstrapSubject, err := redpanda.NewSchemaRegistryAcl(ctx, \"provider_bootstrap_subject\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tPrincipal:     pulumi.String(\"User:*\"),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.Any(topicName),\n\t\t\tPatternType:   pulumi.String(\"PREFIXED\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALL\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproviderBootstrapRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"provider_bootstrap_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tPrincipal:     pulumi.String(\"User:*\"),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALL\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tclusterAdmin, err := redpanda.NewAcl(ctx, \"cluster_admin\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"CLUSTER\"),\n\t\t\tResourceName:        pulumi.String(\"kafka-cluster\"),\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"ALL\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tschemaRegistryAdmin, err := redpanda.NewAcl(ctx, \"schema_registry_admin\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"CLUSTER\"),\n\t\t\tResourceName:        pulumi.String(\"kafka-cluster\"),\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"ALTER\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tclusterAction, err := redpanda.NewAcl(ctx, \"cluster_action\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"CLUSTER\"),\n\t\t\tResourceName:        pulumi.String(\"kafka-cluster\"),\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"CLUSTER_ACTION\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttopicAccess, err := redpanda.NewAcl(ctx, \"topic_access\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"TOPIC\"),\n\t\t\tResourceName:        testTopic.Name,\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"ALL\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tallTestTopic, err := redpanda.NewSchemaRegistryAcl(ctx, \"all_test_topic\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.Sprintf(\"%v-\", topicName),\n\t\t\tPatternType:   pulumi.String(\"PREFIXED\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALL\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdescribeRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"describe_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"DESCRIBE\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\talterConfigsRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"alter_configs_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALTER_CONFIGS\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treadRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"read_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"READ\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twriteRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"write_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"WRITE\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuserSchema, err := redpanda.NewSchema(ctx, \"user_schema\", &redpanda.SchemaArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tSubject:       pulumi.Sprintf(\"%v-value\", topicName),\n\t\t\tSchemaType:    pulumi.Any(schemaType),\n\t\t\tSchema:        pulumi.Any(userSchemaDefinition),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t\tclusterAction,\n\t\t\ttopicAccess,\n\t\t\tproviderBootstrapSubject,\n\t\t\tproviderBootstrapRegistry,\n\t\t\tallTestTopic,\n\t\t\tdescribeRegistry,\n\t\t\talterConfigsRegistry,\n\t\t\treadRegistry,\n\t\t\twriteRegistry,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuserEventSchema, err := redpanda.NewSchema(ctx, \"user_event_schema\", &redpanda.SchemaArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tSubject:       pulumi.Sprintf(\"%v-events-value\", topicName),\n\t\t\tSchemaType:    pulumi.Any(schemaType),\n\t\t\tSchema:        pulumi.Any(userEventSchemaDefinition),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t\tReferences: redpanda.SchemaReferenceArray{\n\t\t\t\t&redpanda.SchemaReferenceArgs{\n\t\t\t\t\tName:    pulumi.String(\"User\"),\n\t\t\t\t\tSubject: userSchema.Subject,\n\t\t\t\t\tVersion: userSchema.Version,\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t\tclusterAction,\n\t\t\ttopicAccess,\n\t\t\tproviderBootstrapSubject,\n\t\t\tproviderBootstrapRegistry,\n\t\t\tallTestTopic,\n\t\t\tdescribeRegistry,\n\t\t\talterConfigsRegistry,\n\t\t\treadRegistry,\n\t\t\twriteRegistry,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproductSchema, err := redpanda.NewSchema(ctx, \"product_schema\", &redpanda.SchemaArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tSubject:       pulumi.Sprintf(\"%v-product-value\", topicName),\n\t\t\tSchemaType:    pulumi.Any(schemaType),\n\t\t\tSchema:        pulumi.Any(productSchemaDefinition),\n\t\t\tCompatibility: pulumi.Any(compatibilityLevel),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t\tclusterAction,\n\t\t\ttopicAccess,\n\t\t\tproviderBootstrapSubject,\n\t\t\tproviderBootstrapRegistry,\n\t\t\tallTestTopic,\n\t\t\tdescribeRegistry,\n\t\t\talterConfigsRegistry,\n\t\t\treadRegistry,\n\t\t\twriteRegistry,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdeveloper, err := redpanda.NewRole(ctx, \"developer\", &redpanda.RoleArgs{\n\t\t\tName:          pulumi.Any(roleName),\n\t\t\tClusterApiUrl: testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Any(roleAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewAcl(ctx, \"role_topic_read\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"TOPIC\"),\n\t\t\tResourceName:        testTopic.Name,\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: developer.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"RedpandaRole:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"READ\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewSchemaRegistryAcl(ctx, \"read_product\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.String(\"product-\"),\n\t\t\tPatternType:   pulumi.String(\"PREFIXED\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"READ\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Any(srAclAllowDeletion),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewSchemaRegistryAcl(ctx, \"write_orders\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.String(\"orders-value\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"WRITE\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewRoleAssignment(ctx, \"developer_assignment\", &redpanda.RoleAssignmentArgs{\n\t\t\tRoleName: developer.Name,\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tClusterApiUrl: testCluster.ClusterApiUrl,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\ttestUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"userSchemaInfo\", pulumi.Map{\n\t\t\t\"id\":      userSchema.SchemaId,\n\t\t\t\"subject\": userSchema.Subject,\n\t\t\t\"version\": userSchema.Version,\n\t\t\t\"type\":    userSchema.SchemaType,\n\t\t})\n\t\tctx.Export(\"userEventSchemaInfo\", pulumi.Map{\n\t\t\t\"id\":         userEventSchema.SchemaId,\n\t\t\t\"subject\":    userEventSchema.Subject,\n\t\t\t\"version\":    userEventSchema.Version,\n\t\t\t\"type\":       userEventSchema.SchemaType,\n\t\t\t\"references\": userEventSchema.References,\n\t\t})\n\t\tctx.Export(\"productSchemaInfo\", pulumi.Map{\n\t\t\t\"id\":            productSchema.SchemaId,\n\t\t\t\"subject\":       productSchema.Subject,\n\t\t\t\"version\":       productSchema.Version,\n\t\t\t\"type\":          productSchema.SchemaType,\n\t\t\t\"compatibility\": productSchema.Compatibility,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.Network;\nimport com.pulumi.redpanda.NetworkArgs;\nimport com.pulumi.redpanda.inputs.NetworkTimeoutsArgs;\nimport com.pulumi.redpanda.Cluster;\nimport com.pulumi.redpanda.ClusterArgs;\nimport com.pulumi.redpanda.inputs.ClusterClusterConfigurationArgs;\nimport com.pulumi.redpanda.inputs.ClusterMaintenanceWindowConfigArgs;\nimport com.pulumi.redpanda.inputs.ClusterMaintenanceWindowConfigDayHourArgs;\nimport com.pulumi.redpanda.inputs.ClusterTimeoutsArgs;\nimport com.pulumi.redpanda.User;\nimport com.pulumi.redpanda.UserArgs;\nimport com.pulumi.redpanda.Topic;\nimport com.pulumi.redpanda.TopicArgs;\nimport com.pulumi.redpanda.SchemaRegistryAcl;\nimport com.pulumi.redpanda.SchemaRegistryAclArgs;\nimport com.pulumi.redpanda.Acl;\nimport com.pulumi.redpanda.AclArgs;\nimport com.pulumi.redpanda.Schema;\nimport com.pulumi.redpanda.SchemaArgs;\nimport com.pulumi.redpanda.inputs.SchemaReferenceArgs;\nimport com.pulumi.redpanda.Role;\nimport com.pulumi.redpanda.RoleArgs;\nimport com.pulumi.redpanda.RoleAssignment;\nimport com.pulumi.redpanda.RoleAssignmentArgs;\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 test = new ResourceGroup(\"test\", ResourceGroupArgs.builder()\n            .name(resourceGroupName)\n            .build());\n\n        var testNetwork = new Network(\"testNetwork\", NetworkArgs.builder()\n            .name(networkName)\n            .resourceGroupId(test.id())\n            .cloudProvider(cloudProvider)\n            .region(region)\n            .clusterType(\"dedicated\")\n            .cidrBlock(\"10.0.0.0/20\")\n            .timeouts(NetworkTimeoutsArgs.builder()\n                .create(\"20m\")\n                .delete(\"20m\")\n                .build())\n            .build());\n\n        var testCluster = new Cluster(\"testCluster\", ClusterArgs.builder()\n            .name(clusterName)\n            .resourceGroupId(test.id())\n            .networkId(testNetwork.id())\n            .cloudProvider(cloudProvider)\n            .region(region)\n            .clusterType(\"dedicated\")\n            .connectionType(\"public\")\n            .throughputTier(throughputTier)\n            .zones(zones)\n            .allowDeletion(clusterAllowDeletion)\n            .clusterConfiguration(ClusterClusterConfigurationArgs.builder()\n                .customPropertiesJson(serializeJson(\n                    jsonObject(\n                        jsonProperty(\"enable_shadow_linking\", clusterEnableShadowLinking),\n                        jsonProperty(\"schema_registry_enable_authorization\", true)\n                    )))\n                .build())\n            .maintenanceWindowConfig(ClusterMaintenanceWindowConfigArgs.builder()\n                .dayHour(ClusterMaintenanceWindowConfigDayHourArgs.builder()\n                    .dayOfWeek(maintenanceDayOfWeek)\n                    .hourOfDay(maintenanceHourOfDay)\n                    .build())\n                .build())\n            .tags(clusterTags)\n            .timeouts(ClusterTimeoutsArgs.builder()\n                .create(\"90m\")\n                .build())\n            .build());\n\n        var testUser = new User(\"testUser\", UserArgs.builder()\n            .name(userName)\n            .password(userPasswordWo != null ? null : userPw)\n            .passwordWo(userPasswordWo)\n            .passwordWoVersion(userPasswordWoVersion)\n            .mechanism(mechanism)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(userAllowDeletion)\n            .build());\n\n        var testTopic = new Topic(\"testTopic\", TopicArgs.builder()\n            .name(topicName)\n            .partitionCount(partitionCount)\n            .replicationFactor(replicationFactor)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(true)\n            .configuration(topicConfiguration != null ? topicConfiguration : Map.ofEntries(\n                Map.entry(\"cleanup.policy\", \"delete\"),\n                Map.entry(\"retention.ms\", topicRetentionMs)\n            ))\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(testUser)\n                .build());\n\n        // Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n        // Two grants are required: the SUBJECT-scope grant authorizes\n        // POST /subjects/<subj>/versions; the REGISTRY-scope grant authorizes the\n        // follow-up GET /schemas/ids/<id>/versions that the SR client (franz-go) makes\n        // to fetch the full schema metadata after create. Without the REGISTRY grant,\n        // the schema is created but the follow-up GET 403s and the resource fails.\n        // User:* is broader than necessary; tighten once the exact principal is\n        // documented as discoverable.\n        var providerBootstrapSubject = new SchemaRegistryAcl(\"providerBootstrapSubject\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(\"User:*\")\n            .resourceType(\"SUBJECT\")\n            .resourceName(topicName)\n            .patternType(\"PREFIXED\")\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build());\n\n        var providerBootstrapRegistry = new SchemaRegistryAcl(\"providerBootstrapRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(\"User:*\")\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build());\n\n        var clusterAdmin = new Acl(\"clusterAdmin\", AclArgs.builder()\n            .resourceType(\"CLUSTER\")\n            .resourceName(\"kafka-cluster\")\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var schemaRegistryAdmin = new Acl(\"schemaRegistryAdmin\", AclArgs.builder()\n            .resourceType(\"CLUSTER\")\n            .resourceName(\"kafka-cluster\")\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"ALTER\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var clusterAction = new Acl(\"clusterAction\", AclArgs.builder()\n            .resourceType(\"CLUSTER\")\n            .resourceName(\"kafka-cluster\")\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"CLUSTER_ACTION\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var topicAccess = new Acl(\"topicAccess\", AclArgs.builder()\n            .resourceType(\"TOPIC\")\n            .resourceName(testTopic.name())\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var allTestTopic = new SchemaRegistryAcl(\"allTestTopic\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"SUBJECT\")\n            .resourceName(String.format(\"%s-\", topicName))\n            .patternType(\"PREFIXED\")\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var describeRegistry = new SchemaRegistryAcl(\"describeRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"DESCRIBE\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var alterConfigsRegistry = new SchemaRegistryAcl(\"alterConfigsRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"ALTER_CONFIGS\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var readRegistry = new SchemaRegistryAcl(\"readRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"READ\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var writeRegistry = new SchemaRegistryAcl(\"writeRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"WRITE\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var userSchema = new Schema(\"userSchema\", SchemaArgs.builder()\n            .clusterId(testCluster.id())\n            .subject(String.format(\"%s-value\", topicName))\n            .schemaType(schemaType)\n            .schema(userSchemaDefinition)\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin,\n                    clusterAction,\n                    topicAccess,\n                    providerBootstrapSubject,\n                    providerBootstrapRegistry,\n                    allTestTopic,\n                    describeRegistry,\n                    alterConfigsRegistry,\n                    readRegistry,\n                    writeRegistry)\n                .build());\n\n        var userEventSchema = new Schema(\"userEventSchema\", SchemaArgs.builder()\n            .clusterId(testCluster.id())\n            .subject(String.format(\"%s-events-value\", topicName))\n            .schemaType(schemaType)\n            .schema(userEventSchemaDefinition)\n            .allowDeletion(true)\n            .references(SchemaReferenceArgs.builder()\n                .name(\"User\")\n                .subject(userSchema.subject())\n                .version(userSchema.version())\n                .build())\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin,\n                    clusterAction,\n                    topicAccess,\n                    providerBootstrapSubject,\n                    providerBootstrapRegistry,\n                    allTestTopic,\n                    describeRegistry,\n                    alterConfigsRegistry,\n                    readRegistry,\n                    writeRegistry)\n                .build());\n\n        var productSchema = new Schema(\"productSchema\", SchemaArgs.builder()\n            .clusterId(testCluster.id())\n            .subject(String.format(\"%s-product-value\", topicName))\n            .schemaType(schemaType)\n            .schema(productSchemaDefinition)\n            .compatibility(compatibilityLevel)\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin,\n                    clusterAction,\n                    topicAccess,\n                    providerBootstrapSubject,\n                    providerBootstrapRegistry,\n                    allTestTopic,\n                    describeRegistry,\n                    alterConfigsRegistry,\n                    readRegistry,\n                    writeRegistry)\n                .build());\n\n        var developer = new Role(\"developer\", RoleArgs.builder()\n            .name(roleName)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(roleAllowDeletion)\n            .build());\n\n        var roleTopicRead = new Acl(\"roleTopicRead\", AclArgs.builder()\n            .resourceType(\"TOPIC\")\n            .resourceName(testTopic.name())\n            .resourcePatternType(\"LITERAL\")\n            .principal(developer.name().applyValue(_name -> String.format(\"RedpandaRole:%s\", _name)))\n            .host(\"*\")\n            .operation(\"READ\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var readProduct = new SchemaRegistryAcl(\"readProduct\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"SUBJECT\")\n            .resourceName(\"product-\")\n            .patternType(\"PREFIXED\")\n            .host(\"*\")\n            .operation(\"READ\")\n            .permission(\"ALLOW\")\n            .allowDeletion(srAclAllowDeletion)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var writeOrders = new SchemaRegistryAcl(\"writeOrders\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"SUBJECT\")\n            .resourceName(\"orders-value\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"WRITE\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var developerAssignment = new RoleAssignment(\"developerAssignment\", RoleAssignmentArgs.builder()\n            .roleName(developer.name())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(testUser)\n                .build());\n\n        ctx.export(\"userSchemaInfo\", Map.ofEntries(\n            Map.entry(\"id\", userSchema.schemaId()),\n            Map.entry(\"subject\", userSchema.subject()),\n            Map.entry(\"version\", userSchema.version()),\n            Map.entry(\"type\", userSchema.schemaType())\n        ));\n        ctx.export(\"userEventSchemaInfo\", Map.ofEntries(\n            Map.entry(\"id\", userEventSchema.schemaId()),\n            Map.entry(\"subject\", userEventSchema.subject()),\n            Map.entry(\"version\", userEventSchema.version()),\n            Map.entry(\"type\", userEventSchema.schemaType()),\n            Map.entry(\"references\", userEventSchema.references())\n        ));\n        ctx.export(\"productSchemaInfo\", Map.ofEntries(\n            Map.entry(\"id\", productSchema.schemaId()),\n            Map.entry(\"subject\", productSchema.subject()),\n            Map.entry(\"version\", productSchema.version()),\n            Map.entry(\"type\", productSchema.schemaType()),\n            Map.entry(\"compatibility\", productSchema.compatibility())\n        ));\n    }\n}\n```\n<!--End PulumiCodeChooser -->\n\n### On GCP\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst test = new redpanda.ResourceGroup(\"test\", {name: resourceGroupName});\nconst testNetwork = new redpanda.Network(\"test\", {\n    name: networkName,\n    resourceGroupId: test.id,\n    cloudProvider: cloudProvider,\n    region: region,\n    clusterType: \"dedicated\",\n    cidrBlock: \"10.0.0.0/20\",\n    timeouts: {\n        create: \"20m\",\n        \"delete\": \"20m\",\n    },\n});\nconst testCluster = new redpanda.Cluster(\"test\", {\n    name: clusterName,\n    resourceGroupId: test.id,\n    networkId: testNetwork.id,\n    cloudProvider: cloudProvider,\n    region: region,\n    clusterType: \"dedicated\",\n    connectionType: \"public\",\n    throughputTier: throughputTier,\n    zones: zones,\n    allowDeletion: clusterAllowDeletion,\n    clusterConfiguration: {\n        customPropertiesJson: JSON.stringify({\n            enable_shadow_linking: clusterEnableShadowLinking,\n            schema_registry_enable_authorization: true,\n        }),\n    },\n    maintenanceWindowConfig: {\n        dayHour: {\n            dayOfWeek: maintenanceDayOfWeek,\n            hourOfDay: maintenanceHourOfDay,\n        },\n    },\n    tags: clusterTags,\n    timeouts: {\n        create: \"90m\",\n    },\n});\nconst testUser = new redpanda.User(\"test\", {\n    name: userName,\n    password: userPw,\n    mechanism: mechanism,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: userAllowDeletion,\n});\nconst testTopic = new redpanda.Topic(\"test\", {\n    name: topicName,\n    partitionCount: partitionCount,\n    replicationFactor: replicationFactor,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: true,\n    configuration: topicConfiguration != null ? topicConfiguration : {\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": topicRetentionMs,\n    },\n}, {\n    dependsOn: [testUser],\n});\n// Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n// SUBJECT grant authorizes POST /subjects/<subj>/versions; REGISTRY grant\n// authorizes the franz-go follow-up GET /schemas/ids/<id>/versions.\nconst providerBootstrapSubject = new redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\", {\n    clusterId: testCluster.id,\n    principal: \"User:*\",\n    resourceType: \"SUBJECT\",\n    resourceName: topicName,\n    patternType: \"PREFIXED\",\n    host: \"*\",\n    operation: \"ALL\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n});\nconst providerBootstrapRegistry = new redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\", {\n    clusterId: testCluster.id,\n    principal: \"User:*\",\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"ALL\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n});\nconst clusterAdmin = new redpanda.Acl(\"cluster_admin\", {\n    resourceType: \"CLUSTER\",\n    resourceName: \"kafka-cluster\",\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"ALL\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst schemaRegistryAdmin = new redpanda.Acl(\"schema_registry_admin\", {\n    resourceType: \"CLUSTER\",\n    resourceName: \"kafka-cluster\",\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"ALTER\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst clusterAction = new redpanda.Acl(\"cluster_action\", {\n    resourceType: \"CLUSTER\",\n    resourceName: \"kafka-cluster\",\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"CLUSTER_ACTION\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst topicAccess = new redpanda.Acl(\"topic_access\", {\n    resourceType: \"TOPIC\",\n    resourceName: testTopic.name,\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"ALL\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst allTestTopic = new redpanda.SchemaRegistryAcl(\"all_test_topic\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"SUBJECT\",\n    resourceName: `${topicName}-`,\n    patternType: \"PREFIXED\",\n    host: \"*\",\n    operation: \"ALL\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst describeRegistry = new redpanda.SchemaRegistryAcl(\"describe_registry\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"DESCRIBE\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst alterConfigsRegistry = new redpanda.SchemaRegistryAcl(\"alter_configs_registry\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"ALTER_CONFIGS\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst readRegistry = new redpanda.SchemaRegistryAcl(\"read_registry\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"READ\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst writeRegistry = new redpanda.SchemaRegistryAcl(\"write_registry\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"WRITE\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst userSchema = new redpanda.Schema(\"user_schema\", {\n    clusterId: testCluster.id,\n    subject: `${topicName}-value`,\n    schemaType: schemaType,\n    schema: userSchemaDefinition,\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n        clusterAction,\n        topicAccess,\n        providerBootstrapSubject,\n        providerBootstrapRegistry,\n        allTestTopic,\n        describeRegistry,\n        alterConfigsRegistry,\n        readRegistry,\n        writeRegistry,\n    ],\n});\nconst userEventSchema = new redpanda.Schema(\"user_event_schema\", {\n    clusterId: testCluster.id,\n    subject: `${topicName}-events-value`,\n    schemaType: schemaType,\n    schema: userEventSchemaDefinition,\n    allowDeletion: true,\n    references: [{\n        name: \"User\",\n        subject: userSchema.subject,\n        version: userSchema.version,\n    }],\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n        clusterAction,\n        topicAccess,\n        providerBootstrapSubject,\n        providerBootstrapRegistry,\n        allTestTopic,\n        describeRegistry,\n        alterConfigsRegistry,\n        readRegistry,\n        writeRegistry,\n    ],\n});\nconst productSchema = new redpanda.Schema(\"product_schema\", {\n    clusterId: testCluster.id,\n    subject: `${topicName}-product-value`,\n    schemaType: schemaType,\n    schema: productSchemaDefinition,\n    compatibility: compatibilityLevel,\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n        clusterAction,\n        topicAccess,\n        providerBootstrapSubject,\n        providerBootstrapRegistry,\n        allTestTopic,\n        describeRegistry,\n        alterConfigsRegistry,\n        readRegistry,\n        writeRegistry,\n    ],\n});\nconst developer = new redpanda.Role(\"developer\", {\n    name: roleName,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: roleAllowDeletion,\n});\nconst roleTopicRead = new redpanda.Acl(\"role_topic_read\", {\n    resourceType: \"TOPIC\",\n    resourceName: testTopic.name,\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`RedpandaRole:${developer.name}`,\n    host: \"*\",\n    operation: \"READ\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst readProduct = new redpanda.SchemaRegistryAcl(\"read_product\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"SUBJECT\",\n    resourceName: \"product-\",\n    patternType: \"PREFIXED\",\n    host: \"*\",\n    operation: \"READ\",\n    permission: \"ALLOW\",\n    allowDeletion: srAclAllowDeletion,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst writeOrders = new redpanda.SchemaRegistryAcl(\"write_orders\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"SUBJECT\",\n    resourceName: \"orders-value\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"WRITE\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst describeTestTopic = new redpanda.SchemaRegistryAcl(\"describe_test_topic\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"SUBJECT\",\n    resourceName: `${topicName}-`,\n    patternType: \"PREFIXED\",\n    host: \"*\",\n    operation: \"DESCRIBE\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst developerAssignment = new redpanda.RoleAssignment(\"developer_assignment\", {\n    roleName: developer.name,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    clusterApiUrl: testCluster.clusterApiUrl,\n}, {\n    dependsOn: [testUser],\n});\nexport const userSchemaInfo = {\n    id: userSchema.schemaId,\n    subject: userSchema.subject,\n    version: userSchema.version,\n    type: userSchema.schemaType,\n};\nexport const userEventSchemaInfo = {\n    id: userEventSchema.schemaId,\n    subject: userEventSchema.subject,\n    version: userEventSchema.version,\n    type: userEventSchema.schemaType,\n    references: userEventSchema.references,\n};\nexport const productSchemaInfo = {\n    id: productSchema.schemaId,\n    subject: productSchema.subject,\n    version: productSchema.version,\n    type: productSchema.schemaType,\n    compatibility: productSchema.compatibility,\n};\n```\n```python\nimport pulumi\nimport json\nimport pulumi_redpanda as redpanda\n\ntest = redpanda.ResourceGroup(\"test\", name=resource_group_name)\ntest_network = redpanda.Network(\"test\",\n    name=network_name,\n    resource_group_id=test.id,\n    cloud_provider=cloud_provider,\n    region=region,\n    cluster_type=\"dedicated\",\n    cidr_block=\"10.0.0.0/20\",\n    timeouts={\n        \"create\": \"20m\",\n        \"delete\": \"20m\",\n    })\ntest_cluster = redpanda.Cluster(\"test\",\n    name=cluster_name,\n    resource_group_id=test.id,\n    network_id=test_network.id,\n    cloud_provider=cloud_provider,\n    region=region,\n    cluster_type=\"dedicated\",\n    connection_type=\"public\",\n    throughput_tier=throughput_tier,\n    zones=zones,\n    allow_deletion=cluster_allow_deletion,\n    cluster_configuration={\n        \"custom_properties_json\": json.dumps({\n            \"enable_shadow_linking\": cluster_enable_shadow_linking,\n            \"schema_registry_enable_authorization\": True,\n        }),\n    },\n    maintenance_window_config={\n        \"day_hour\": {\n            \"day_of_week\": maintenance_day_of_week,\n            \"hour_of_day\": maintenance_hour_of_day,\n        },\n    },\n    tags=cluster_tags,\n    timeouts={\n        \"create\": \"90m\",\n    })\ntest_user = redpanda.User(\"test\",\n    name=user_name,\n    password=user_pw,\n    mechanism=mechanism,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=user_allow_deletion)\ntest_topic = redpanda.Topic(\"test\",\n    name=topic_name,\n    partition_count=partition_count,\n    replication_factor=replication_factor,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=True,\n    configuration=topic_configuration if topic_configuration != None else {\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": topic_retention_ms,\n    },\n    opts = pulumi.ResourceOptions(depends_on=[test_user]))\n# Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n# SUBJECT grant authorizes POST /subjects/<subj>/versions; REGISTRY grant\n# authorizes the franz-go follow-up GET /schemas/ids/<id>/versions.\nprovider_bootstrap_subject = redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\",\n    cluster_id=test_cluster.id,\n    principal=\"User:*\",\n    resource_type=\"SUBJECT\",\n    resource_name_=topic_name,\n    pattern_type=\"PREFIXED\",\n    host=\"*\",\n    operation=\"ALL\",\n    permission=\"ALLOW\",\n    allow_deletion=True)\nprovider_bootstrap_registry = redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\",\n    cluster_id=test_cluster.id,\n    principal=\"User:*\",\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"ALL\",\n    permission=\"ALLOW\",\n    allow_deletion=True)\ncluster_admin = redpanda.Acl(\"cluster_admin\",\n    resource_type=\"CLUSTER\",\n    resource_name_=\"kafka-cluster\",\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"ALL\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\nschema_registry_admin = redpanda.Acl(\"schema_registry_admin\",\n    resource_type=\"CLUSTER\",\n    resource_name_=\"kafka-cluster\",\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"ALTER\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\ncluster_action = redpanda.Acl(\"cluster_action\",\n    resource_type=\"CLUSTER\",\n    resource_name_=\"kafka-cluster\",\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"CLUSTER_ACTION\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\ntopic_access = redpanda.Acl(\"topic_access\",\n    resource_type=\"TOPIC\",\n    resource_name_=test_topic.name,\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"ALL\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\nall_test_topic = redpanda.SchemaRegistryAcl(\"all_test_topic\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"SUBJECT\",\n    resource_name_=f\"{topic_name}-\",\n    pattern_type=\"PREFIXED\",\n    host=\"*\",\n    operation=\"ALL\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\ndescribe_registry = redpanda.SchemaRegistryAcl(\"describe_registry\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"DESCRIBE\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nalter_configs_registry = redpanda.SchemaRegistryAcl(\"alter_configs_registry\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"ALTER_CONFIGS\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nread_registry = redpanda.SchemaRegistryAcl(\"read_registry\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"READ\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nwrite_registry = redpanda.SchemaRegistryAcl(\"write_registry\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"WRITE\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nuser_schema = redpanda.Schema(\"user_schema\",\n    cluster_id=test_cluster.id,\n    subject=f\"{topic_name}-value\",\n    schema_type=schema_type,\n    schema=user_schema_definition,\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n            cluster_action,\n            topic_access,\n            provider_bootstrap_subject,\n            provider_bootstrap_registry,\n            all_test_topic,\n            describe_registry,\n            alter_configs_registry,\n            read_registry,\n            write_registry,\n        ]))\nuser_event_schema = redpanda.Schema(\"user_event_schema\",\n    cluster_id=test_cluster.id,\n    subject=f\"{topic_name}-events-value\",\n    schema_type=schema_type,\n    schema=user_event_schema_definition,\n    allow_deletion=True,\n    references=[{\n        \"name\": \"User\",\n        \"subject\": user_schema.subject,\n        \"version\": user_schema.version,\n    }],\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n            cluster_action,\n            topic_access,\n            provider_bootstrap_subject,\n            provider_bootstrap_registry,\n            all_test_topic,\n            describe_registry,\n            alter_configs_registry,\n            read_registry,\n            write_registry,\n        ]))\nproduct_schema = redpanda.Schema(\"product_schema\",\n    cluster_id=test_cluster.id,\n    subject=f\"{topic_name}-product-value\",\n    schema_type=schema_type,\n    schema=product_schema_definition,\n    compatibility=compatibility_level,\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n            cluster_action,\n            topic_access,\n            provider_bootstrap_subject,\n            provider_bootstrap_registry,\n            all_test_topic,\n            describe_registry,\n            alter_configs_registry,\n            read_registry,\n            write_registry,\n        ]))\ndeveloper = redpanda.Role(\"developer\",\n    name=role_name,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=role_allow_deletion)\nrole_topic_read = redpanda.Acl(\"role_topic_read\",\n    resource_type=\"TOPIC\",\n    resource_name_=test_topic.name,\n    resource_pattern_type=\"LITERAL\",\n    principal=developer.name.apply(lambda name: f\"RedpandaRole:{name}\"),\n    host=\"*\",\n    operation=\"READ\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\nread_product = redpanda.SchemaRegistryAcl(\"read_product\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"SUBJECT\",\n    resource_name_=\"product-\",\n    pattern_type=\"PREFIXED\",\n    host=\"*\",\n    operation=\"READ\",\n    permission=\"ALLOW\",\n    allow_deletion=sr_acl_allow_deletion,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nwrite_orders = redpanda.SchemaRegistryAcl(\"write_orders\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"SUBJECT\",\n    resource_name_=\"orders-value\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"WRITE\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\ndescribe_test_topic = redpanda.SchemaRegistryAcl(\"describe_test_topic\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"SUBJECT\",\n    resource_name_=f\"{topic_name}-\",\n    pattern_type=\"PREFIXED\",\n    host=\"*\",\n    operation=\"DESCRIBE\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\ndeveloper_assignment = redpanda.RoleAssignment(\"developer_assignment\",\n    role_name=developer.name,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    cluster_api_url=test_cluster.cluster_api_url,\n    opts = pulumi.ResourceOptions(depends_on=[test_user]))\npulumi.export(\"userSchemaInfo\", {\n    \"id\": user_schema.schema_id,\n    \"subject\": user_schema.subject,\n    \"version\": user_schema.version,\n    \"type\": user_schema.schema_type,\n})\npulumi.export(\"userEventSchemaInfo\", {\n    \"id\": user_event_schema.schema_id,\n    \"subject\": user_event_schema.subject,\n    \"version\": user_event_schema.version,\n    \"type\": user_event_schema.schema_type,\n    \"references\": user_event_schema.references,\n})\npulumi.export(\"productSchemaInfo\", {\n    \"id\": product_schema.schema_id,\n    \"subject\": product_schema.subject,\n    \"version\": product_schema.version,\n    \"type\": product_schema.schema_type,\n    \"compatibility\": product_schema.compatibility,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var test = new Redpanda.ResourceGroup(\"test\", new()\n    {\n        Name = resourceGroupName,\n    });\n\n    var testNetwork = new Redpanda.Network(\"test\", new()\n    {\n        Name = networkName,\n        ResourceGroupId = test.Id,\n        CloudProvider = cloudProvider,\n        Region = region,\n        ClusterType = \"dedicated\",\n        CidrBlock = \"10.0.0.0/20\",\n        Timeouts = new Redpanda.Inputs.NetworkTimeoutsArgs\n        {\n            Create = \"20m\",\n            Delete = \"20m\",\n        },\n    });\n\n    var testCluster = new Redpanda.Cluster(\"test\", new()\n    {\n        Name = clusterName,\n        ResourceGroupId = test.Id,\n        NetworkId = testNetwork.Id,\n        CloudProvider = cloudProvider,\n        Region = region,\n        ClusterType = \"dedicated\",\n        ConnectionType = \"public\",\n        ThroughputTier = throughputTier,\n        Zones = zones,\n        AllowDeletion = clusterAllowDeletion,\n        ClusterConfiguration = new Redpanda.Inputs.ClusterClusterConfigurationArgs\n        {\n            CustomPropertiesJson = JsonSerializer.Serialize(new Dictionary<string, object?>\n            {\n                [\"enable_shadow_linking\"] = clusterEnableShadowLinking,\n                [\"schema_registry_enable_authorization\"] = true,\n            }),\n        },\n        MaintenanceWindowConfig = new Redpanda.Inputs.ClusterMaintenanceWindowConfigArgs\n        {\n            DayHour = new Redpanda.Inputs.ClusterMaintenanceWindowConfigDayHourArgs\n            {\n                DayOfWeek = maintenanceDayOfWeek,\n                HourOfDay = maintenanceHourOfDay,\n            },\n        },\n        Tags = clusterTags,\n        Timeouts = new Redpanda.Inputs.ClusterTimeoutsArgs\n        {\n            Create = \"90m\",\n        },\n    });\n\n    var testUser = new Redpanda.User(\"test\", new()\n    {\n        Name = userName,\n        Password = userPw,\n        Mechanism = mechanism,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = userAllowDeletion,\n    });\n\n    var testTopic = new Redpanda.Topic(\"test\", new()\n    {\n        Name = topicName,\n        PartitionCount = partitionCount,\n        ReplicationFactor = replicationFactor,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = true,\n        Configuration = topicConfiguration != null ? topicConfiguration : \n        {\n            { \"cleanup.policy\", \"delete\" },\n            { \"retention.ms\", topicRetentionMs },\n        },\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            testUser,\n        },\n    });\n\n    // Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n    // SUBJECT grant authorizes POST /subjects/<subj>/versions; REGISTRY grant\n    // authorizes the franz-go follow-up GET /schemas/ids/<id>/versions.\n    var providerBootstrapSubject = new Redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = \"User:*\",\n        ResourceType = \"SUBJECT\",\n        ResourceName = topicName,\n        PatternType = \"PREFIXED\",\n        Host = \"*\",\n        Operation = \"ALL\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    });\n\n    var providerBootstrapRegistry = new Redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = \"User:*\",\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"ALL\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    });\n\n    var clusterAdmin = new Redpanda.Acl(\"cluster_admin\", new()\n    {\n        ResourceType = \"CLUSTER\",\n        ResourceName = \"kafka-cluster\",\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"ALL\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var schemaRegistryAdmin = new Redpanda.Acl(\"schema_registry_admin\", new()\n    {\n        ResourceType = \"CLUSTER\",\n        ResourceName = \"kafka-cluster\",\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"ALTER\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var clusterAction = new Redpanda.Acl(\"cluster_action\", new()\n    {\n        ResourceType = \"CLUSTER\",\n        ResourceName = \"kafka-cluster\",\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"CLUSTER_ACTION\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var topicAccess = new Redpanda.Acl(\"topic_access\", new()\n    {\n        ResourceType = \"TOPIC\",\n        ResourceName = testTopic.Name,\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"ALL\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var allTestTopic = new Redpanda.SchemaRegistryAcl(\"all_test_topic\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"SUBJECT\",\n        ResourceName = $\"{topicName}-\",\n        PatternType = \"PREFIXED\",\n        Host = \"*\",\n        Operation = \"ALL\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var describeRegistry = new Redpanda.SchemaRegistryAcl(\"describe_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"DESCRIBE\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var alterConfigsRegistry = new Redpanda.SchemaRegistryAcl(\"alter_configs_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"ALTER_CONFIGS\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var readRegistry = new Redpanda.SchemaRegistryAcl(\"read_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"READ\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var writeRegistry = new Redpanda.SchemaRegistryAcl(\"write_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"WRITE\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var userSchema = new Redpanda.Schema(\"user_schema\", new()\n    {\n        ClusterId = testCluster.Id,\n        Subject = $\"{topicName}-value\",\n        SchemaType = schemaType,\n        Schema = userSchemaDefinition,\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n            clusterAction,\n            topicAccess,\n            providerBootstrapSubject,\n            providerBootstrapRegistry,\n            allTestTopic,\n            describeRegistry,\n            alterConfigsRegistry,\n            readRegistry,\n            writeRegistry,\n        },\n    });\n\n    var userEventSchema = new Redpanda.Schema(\"user_event_schema\", new()\n    {\n        ClusterId = testCluster.Id,\n        Subject = $\"{topicName}-events-value\",\n        SchemaType = schemaType,\n        Schema = userEventSchemaDefinition,\n        AllowDeletion = true,\n        References = new[]\n        {\n            new Redpanda.Inputs.SchemaReferenceArgs\n            {\n                Name = \"User\",\n                Subject = userSchema.Subject,\n                Version = userSchema.Version,\n            },\n        },\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n            clusterAction,\n            topicAccess,\n            providerBootstrapSubject,\n            providerBootstrapRegistry,\n            allTestTopic,\n            describeRegistry,\n            alterConfigsRegistry,\n            readRegistry,\n            writeRegistry,\n        },\n    });\n\n    var productSchema = new Redpanda.Schema(\"product_schema\", new()\n    {\n        ClusterId = testCluster.Id,\n        Subject = $\"{topicName}-product-value\",\n        SchemaType = schemaType,\n        Schema = productSchemaDefinition,\n        Compatibility = compatibilityLevel,\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n            clusterAction,\n            topicAccess,\n            providerBootstrapSubject,\n            providerBootstrapRegistry,\n            allTestTopic,\n            describeRegistry,\n            alterConfigsRegistry,\n            readRegistry,\n            writeRegistry,\n        },\n    });\n\n    var developer = new Redpanda.Role(\"developer\", new()\n    {\n        Name = roleName,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = roleAllowDeletion,\n    });\n\n    var roleTopicRead = new Redpanda.Acl(\"role_topic_read\", new()\n    {\n        ResourceType = \"TOPIC\",\n        ResourceName = testTopic.Name,\n        ResourcePatternType = \"LITERAL\",\n        Principal = developer.Name.Apply(name => $\"RedpandaRole:{name}\"),\n        Host = \"*\",\n        Operation = \"READ\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var readProduct = new Redpanda.SchemaRegistryAcl(\"read_product\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"SUBJECT\",\n        ResourceName = \"product-\",\n        PatternType = \"PREFIXED\",\n        Host = \"*\",\n        Operation = \"READ\",\n        Permission = \"ALLOW\",\n        AllowDeletion = srAclAllowDeletion,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var writeOrders = new Redpanda.SchemaRegistryAcl(\"write_orders\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"SUBJECT\",\n        ResourceName = \"orders-value\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"WRITE\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var describeTestTopic = new Redpanda.SchemaRegistryAcl(\"describe_test_topic\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"SUBJECT\",\n        ResourceName = $\"{topicName}-\",\n        PatternType = \"PREFIXED\",\n        Host = \"*\",\n        Operation = \"DESCRIBE\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var developerAssignment = new Redpanda.RoleAssignment(\"developer_assignment\", new()\n    {\n        RoleName = developer.Name,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            testUser,\n        },\n    });\n\n    return new Dictionary<string, object?>\n    {\n        [\"userSchemaInfo\"] = \n        {\n            { \"id\", userSchema.SchemaId },\n            { \"subject\", userSchema.Subject },\n            { \"version\", userSchema.Version },\n            { \"type\", userSchema.SchemaType },\n        },\n        [\"userEventSchemaInfo\"] = \n        {\n            { \"id\", userEventSchema.SchemaId },\n            { \"subject\", userEventSchema.Subject },\n            { \"version\", userEventSchema.Version },\n            { \"type\", userEventSchema.SchemaType },\n            { \"references\", userEventSchema.References },\n        },\n        [\"productSchemaInfo\"] = \n        {\n            { \"id\", productSchema.SchemaId },\n            { \"subject\", productSchema.Subject },\n            { \"version\", productSchema.Version },\n            { \"type\", productSchema.SchemaType },\n            { \"compatibility\", productSchema.Compatibility },\n        },\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := redpanda.NewResourceGroup(ctx, \"test\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.Any(resourceGroupName),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestNetwork, err := redpanda.NewNetwork(ctx, \"test\", &redpanda.NetworkArgs{\n\t\t\tName:            pulumi.Any(networkName),\n\t\t\tResourceGroupId: test.ID(),\n\t\t\tCloudProvider:   pulumi.Any(cloudProvider),\n\t\t\tRegion:          pulumi.Any(region),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tCidrBlock:       pulumi.String(\"10.0.0.0/20\"),\n\t\t\tTimeouts: &redpanda.NetworkTimeoutsArgs{\n\t\t\t\tCreate: pulumi.String(\"20m\"),\n\t\t\t\tDelete: pulumi.String(\"20m\"),\n\t\t\t},\n\t\t})\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\"enable_shadow_linking\":                clusterEnableShadowLinking,\n\t\t\t\"schema_registry_enable_authorization\": true,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttestCluster, err := redpanda.NewCluster(ctx, \"test\", &redpanda.ClusterArgs{\n\t\t\tName:            pulumi.Any(clusterName),\n\t\t\tResourceGroupId: test.ID(),\n\t\t\tNetworkId:       testNetwork.ID(),\n\t\t\tCloudProvider:   pulumi.Any(cloudProvider),\n\t\t\tRegion:          pulumi.Any(region),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tConnectionType:  pulumi.String(\"public\"),\n\t\t\tThroughputTier:  pulumi.Any(throughputTier),\n\t\t\tZones:           pulumi.Any(zones),\n\t\t\tAllowDeletion:   pulumi.Any(clusterAllowDeletion),\n\t\t\tClusterConfiguration: &redpanda.ClusterClusterConfigurationArgs{\n\t\t\t\tCustomPropertiesJson: pulumi.String(json0),\n\t\t\t},\n\t\t\tMaintenanceWindowConfig: &redpanda.ClusterMaintenanceWindowConfigArgs{\n\t\t\t\tDayHour: &redpanda.ClusterMaintenanceWindowConfigDayHourArgs{\n\t\t\t\t\tDayOfWeek: pulumi.Any(maintenanceDayOfWeek),\n\t\t\t\t\tHourOfDay: pulumi.Any(maintenanceHourOfDay),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTags: pulumi.Any(clusterTags),\n\t\t\tTimeouts: &redpanda.ClusterTimeoutsArgs{\n\t\t\t\tCreate: pulumi.String(\"90m\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestUser, err := redpanda.NewUser(ctx, \"test\", &redpanda.UserArgs{\n\t\t\tName:          pulumi.Any(userName),\n\t\t\tPassword:      pulumi.Any(userPw),\n\t\t\tMechanism:     pulumi.Any(mechanism),\n\t\t\tClusterApiUrl: testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Any(userAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvar tmp0 pulumi.StringMap\n\t\tif topicConfiguration != nil {\n\t\t\ttmp0 = pulumi.Any(topicConfiguration)\n\t\t} else {\n\t\t\ttmp0 = pulumi.StringMap{\n\t\t\t\t\"cleanup.policy\": pulumi.String(\"delete\"),\n\t\t\t\t\"retention.ms\":   pulumi.Any(topicRetentionMs),\n\t\t\t}\n\t\t}\n\t\ttestTopic, err := redpanda.NewTopic(ctx, \"test\", &redpanda.TopicArgs{\n\t\t\tName:              pulumi.Any(topicName),\n\t\t\tPartitionCount:    pulumi.Any(partitionCount),\n\t\t\tReplicationFactor: pulumi.Any(replicationFactor),\n\t\t\tClusterApiUrl:     testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:     pulumi.Bool(true),\n\t\t\tConfiguration:     pulumi.StringMap(tmp0),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\ttestUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n\t\t// SUBJECT grant authorizes POST /subjects/<subj>/versions; REGISTRY grant\n\t\t// authorizes the franz-go follow-up GET /schemas/ids/<id>/versions.\n\t\tproviderBootstrapSubject, err := redpanda.NewSchemaRegistryAcl(ctx, \"provider_bootstrap_subject\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tPrincipal:     pulumi.String(\"User:*\"),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.Any(topicName),\n\t\t\tPatternType:   pulumi.String(\"PREFIXED\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALL\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproviderBootstrapRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"provider_bootstrap_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tPrincipal:     pulumi.String(\"User:*\"),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALL\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tclusterAdmin, err := redpanda.NewAcl(ctx, \"cluster_admin\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"CLUSTER\"),\n\t\t\tResourceName:        pulumi.String(\"kafka-cluster\"),\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"ALL\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tschemaRegistryAdmin, err := redpanda.NewAcl(ctx, \"schema_registry_admin\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"CLUSTER\"),\n\t\t\tResourceName:        pulumi.String(\"kafka-cluster\"),\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"ALTER\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tclusterAction, err := redpanda.NewAcl(ctx, \"cluster_action\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"CLUSTER\"),\n\t\t\tResourceName:        pulumi.String(\"kafka-cluster\"),\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"CLUSTER_ACTION\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttopicAccess, err := redpanda.NewAcl(ctx, \"topic_access\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"TOPIC\"),\n\t\t\tResourceName:        testTopic.Name,\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"ALL\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tallTestTopic, err := redpanda.NewSchemaRegistryAcl(ctx, \"all_test_topic\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.Sprintf(\"%v-\", topicName),\n\t\t\tPatternType:   pulumi.String(\"PREFIXED\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALL\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdescribeRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"describe_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"DESCRIBE\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\talterConfigsRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"alter_configs_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALTER_CONFIGS\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treadRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"read_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"READ\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twriteRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"write_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"WRITE\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuserSchema, err := redpanda.NewSchema(ctx, \"user_schema\", &redpanda.SchemaArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tSubject:       pulumi.Sprintf(\"%v-value\", topicName),\n\t\t\tSchemaType:    pulumi.Any(schemaType),\n\t\t\tSchema:        pulumi.Any(userSchemaDefinition),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t\tclusterAction,\n\t\t\ttopicAccess,\n\t\t\tproviderBootstrapSubject,\n\t\t\tproviderBootstrapRegistry,\n\t\t\tallTestTopic,\n\t\t\tdescribeRegistry,\n\t\t\talterConfigsRegistry,\n\t\t\treadRegistry,\n\t\t\twriteRegistry,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuserEventSchema, err := redpanda.NewSchema(ctx, \"user_event_schema\", &redpanda.SchemaArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tSubject:       pulumi.Sprintf(\"%v-events-value\", topicName),\n\t\t\tSchemaType:    pulumi.Any(schemaType),\n\t\t\tSchema:        pulumi.Any(userEventSchemaDefinition),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t\tReferences: redpanda.SchemaReferenceArray{\n\t\t\t\t&redpanda.SchemaReferenceArgs{\n\t\t\t\t\tName:    pulumi.String(\"User\"),\n\t\t\t\t\tSubject: userSchema.Subject,\n\t\t\t\t\tVersion: userSchema.Version,\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t\tclusterAction,\n\t\t\ttopicAccess,\n\t\t\tproviderBootstrapSubject,\n\t\t\tproviderBootstrapRegistry,\n\t\t\tallTestTopic,\n\t\t\tdescribeRegistry,\n\t\t\talterConfigsRegistry,\n\t\t\treadRegistry,\n\t\t\twriteRegistry,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproductSchema, err := redpanda.NewSchema(ctx, \"product_schema\", &redpanda.SchemaArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tSubject:       pulumi.Sprintf(\"%v-product-value\", topicName),\n\t\t\tSchemaType:    pulumi.Any(schemaType),\n\t\t\tSchema:        pulumi.Any(productSchemaDefinition),\n\t\t\tCompatibility: pulumi.Any(compatibilityLevel),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t\tclusterAction,\n\t\t\ttopicAccess,\n\t\t\tproviderBootstrapSubject,\n\t\t\tproviderBootstrapRegistry,\n\t\t\tallTestTopic,\n\t\t\tdescribeRegistry,\n\t\t\talterConfigsRegistry,\n\t\t\treadRegistry,\n\t\t\twriteRegistry,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdeveloper, err := redpanda.NewRole(ctx, \"developer\", &redpanda.RoleArgs{\n\t\t\tName:          pulumi.Any(roleName),\n\t\t\tClusterApiUrl: testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Any(roleAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewAcl(ctx, \"role_topic_read\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"TOPIC\"),\n\t\t\tResourceName:        testTopic.Name,\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: developer.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"RedpandaRole:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"READ\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewSchemaRegistryAcl(ctx, \"read_product\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.String(\"product-\"),\n\t\t\tPatternType:   pulumi.String(\"PREFIXED\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"READ\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Any(srAclAllowDeletion),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewSchemaRegistryAcl(ctx, \"write_orders\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.String(\"orders-value\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"WRITE\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewSchemaRegistryAcl(ctx, \"describe_test_topic\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.Sprintf(\"%v-\", topicName),\n\t\t\tPatternType:   pulumi.String(\"PREFIXED\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"DESCRIBE\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewRoleAssignment(ctx, \"developer_assignment\", &redpanda.RoleAssignmentArgs{\n\t\t\tRoleName: developer.Name,\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tClusterApiUrl: testCluster.ClusterApiUrl,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\ttestUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"userSchemaInfo\", pulumi.Map{\n\t\t\t\"id\":      userSchema.SchemaId,\n\t\t\t\"subject\": userSchema.Subject,\n\t\t\t\"version\": userSchema.Version,\n\t\t\t\"type\":    userSchema.SchemaType,\n\t\t})\n\t\tctx.Export(\"userEventSchemaInfo\", pulumi.Map{\n\t\t\t\"id\":         userEventSchema.SchemaId,\n\t\t\t\"subject\":    userEventSchema.Subject,\n\t\t\t\"version\":    userEventSchema.Version,\n\t\t\t\"type\":       userEventSchema.SchemaType,\n\t\t\t\"references\": userEventSchema.References,\n\t\t})\n\t\tctx.Export(\"productSchemaInfo\", pulumi.Map{\n\t\t\t\"id\":            productSchema.SchemaId,\n\t\t\t\"subject\":       productSchema.Subject,\n\t\t\t\"version\":       productSchema.Version,\n\t\t\t\"type\":          productSchema.SchemaType,\n\t\t\t\"compatibility\": productSchema.Compatibility,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.Network;\nimport com.pulumi.redpanda.NetworkArgs;\nimport com.pulumi.redpanda.inputs.NetworkTimeoutsArgs;\nimport com.pulumi.redpanda.Cluster;\nimport com.pulumi.redpanda.ClusterArgs;\nimport com.pulumi.redpanda.inputs.ClusterClusterConfigurationArgs;\nimport com.pulumi.redpanda.inputs.ClusterMaintenanceWindowConfigArgs;\nimport com.pulumi.redpanda.inputs.ClusterMaintenanceWindowConfigDayHourArgs;\nimport com.pulumi.redpanda.inputs.ClusterTimeoutsArgs;\nimport com.pulumi.redpanda.User;\nimport com.pulumi.redpanda.UserArgs;\nimport com.pulumi.redpanda.Topic;\nimport com.pulumi.redpanda.TopicArgs;\nimport com.pulumi.redpanda.SchemaRegistryAcl;\nimport com.pulumi.redpanda.SchemaRegistryAclArgs;\nimport com.pulumi.redpanda.Acl;\nimport com.pulumi.redpanda.AclArgs;\nimport com.pulumi.redpanda.Schema;\nimport com.pulumi.redpanda.SchemaArgs;\nimport com.pulumi.redpanda.inputs.SchemaReferenceArgs;\nimport com.pulumi.redpanda.Role;\nimport com.pulumi.redpanda.RoleArgs;\nimport com.pulumi.redpanda.RoleAssignment;\nimport com.pulumi.redpanda.RoleAssignmentArgs;\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 test = new ResourceGroup(\"test\", ResourceGroupArgs.builder()\n            .name(resourceGroupName)\n            .build());\n\n        var testNetwork = new Network(\"testNetwork\", NetworkArgs.builder()\n            .name(networkName)\n            .resourceGroupId(test.id())\n            .cloudProvider(cloudProvider)\n            .region(region)\n            .clusterType(\"dedicated\")\n            .cidrBlock(\"10.0.0.0/20\")\n            .timeouts(NetworkTimeoutsArgs.builder()\n                .create(\"20m\")\n                .delete(\"20m\")\n                .build())\n            .build());\n\n        var testCluster = new Cluster(\"testCluster\", ClusterArgs.builder()\n            .name(clusterName)\n            .resourceGroupId(test.id())\n            .networkId(testNetwork.id())\n            .cloudProvider(cloudProvider)\n            .region(region)\n            .clusterType(\"dedicated\")\n            .connectionType(\"public\")\n            .throughputTier(throughputTier)\n            .zones(zones)\n            .allowDeletion(clusterAllowDeletion)\n            .clusterConfiguration(ClusterClusterConfigurationArgs.builder()\n                .customPropertiesJson(serializeJson(\n                    jsonObject(\n                        jsonProperty(\"enable_shadow_linking\", clusterEnableShadowLinking),\n                        jsonProperty(\"schema_registry_enable_authorization\", true)\n                    )))\n                .build())\n            .maintenanceWindowConfig(ClusterMaintenanceWindowConfigArgs.builder()\n                .dayHour(ClusterMaintenanceWindowConfigDayHourArgs.builder()\n                    .dayOfWeek(maintenanceDayOfWeek)\n                    .hourOfDay(maintenanceHourOfDay)\n                    .build())\n                .build())\n            .tags(clusterTags)\n            .timeouts(ClusterTimeoutsArgs.builder()\n                .create(\"90m\")\n                .build())\n            .build());\n\n        var testUser = new User(\"testUser\", UserArgs.builder()\n            .name(userName)\n            .password(userPw)\n            .mechanism(mechanism)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(userAllowDeletion)\n            .build());\n\n        var testTopic = new Topic(\"testTopic\", TopicArgs.builder()\n            .name(topicName)\n            .partitionCount(partitionCount)\n            .replicationFactor(replicationFactor)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(true)\n            .configuration(topicConfiguration != null ? topicConfiguration : Map.ofEntries(\n                Map.entry(\"cleanup.policy\", \"delete\"),\n                Map.entry(\"retention.ms\", topicRetentionMs)\n            ))\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(testUser)\n                .build());\n\n        // Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n        // SUBJECT grant authorizes POST /subjects/<subj>/versions; REGISTRY grant\n        // authorizes the franz-go follow-up GET /schemas/ids/<id>/versions.\n        var providerBootstrapSubject = new SchemaRegistryAcl(\"providerBootstrapSubject\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(\"User:*\")\n            .resourceType(\"SUBJECT\")\n            .resourceName(topicName)\n            .patternType(\"PREFIXED\")\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build());\n\n        var providerBootstrapRegistry = new SchemaRegistryAcl(\"providerBootstrapRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(\"User:*\")\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build());\n\n        var clusterAdmin = new Acl(\"clusterAdmin\", AclArgs.builder()\n            .resourceType(\"CLUSTER\")\n            .resourceName(\"kafka-cluster\")\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var schemaRegistryAdmin = new Acl(\"schemaRegistryAdmin\", AclArgs.builder()\n            .resourceType(\"CLUSTER\")\n            .resourceName(\"kafka-cluster\")\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"ALTER\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var clusterAction = new Acl(\"clusterAction\", AclArgs.builder()\n            .resourceType(\"CLUSTER\")\n            .resourceName(\"kafka-cluster\")\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"CLUSTER_ACTION\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var topicAccess = new Acl(\"topicAccess\", AclArgs.builder()\n            .resourceType(\"TOPIC\")\n            .resourceName(testTopic.name())\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var allTestTopic = new SchemaRegistryAcl(\"allTestTopic\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"SUBJECT\")\n            .resourceName(String.format(\"%s-\", topicName))\n            .patternType(\"PREFIXED\")\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var describeRegistry = new SchemaRegistryAcl(\"describeRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"DESCRIBE\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var alterConfigsRegistry = new SchemaRegistryAcl(\"alterConfigsRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"ALTER_CONFIGS\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var readRegistry = new SchemaRegistryAcl(\"readRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"READ\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var writeRegistry = new SchemaRegistryAcl(\"writeRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"WRITE\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var userSchema = new Schema(\"userSchema\", SchemaArgs.builder()\n            .clusterId(testCluster.id())\n            .subject(String.format(\"%s-value\", topicName))\n            .schemaType(schemaType)\n            .schema(userSchemaDefinition)\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin,\n                    clusterAction,\n                    topicAccess,\n                    providerBootstrapSubject,\n                    providerBootstrapRegistry,\n                    allTestTopic,\n                    describeRegistry,\n                    alterConfigsRegistry,\n                    readRegistry,\n                    writeRegistry)\n                .build());\n\n        var userEventSchema = new Schema(\"userEventSchema\", SchemaArgs.builder()\n            .clusterId(testCluster.id())\n            .subject(String.format(\"%s-events-value\", topicName))\n            .schemaType(schemaType)\n            .schema(userEventSchemaDefinition)\n            .allowDeletion(true)\n            .references(SchemaReferenceArgs.builder()\n                .name(\"User\")\n                .subject(userSchema.subject())\n                .version(userSchema.version())\n                .build())\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin,\n                    clusterAction,\n                    topicAccess,\n                    providerBootstrapSubject,\n                    providerBootstrapRegistry,\n                    allTestTopic,\n                    describeRegistry,\n                    alterConfigsRegistry,\n                    readRegistry,\n                    writeRegistry)\n                .build());\n\n        var productSchema = new Schema(\"productSchema\", SchemaArgs.builder()\n            .clusterId(testCluster.id())\n            .subject(String.format(\"%s-product-value\", topicName))\n            .schemaType(schemaType)\n            .schema(productSchemaDefinition)\n            .compatibility(compatibilityLevel)\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin,\n                    clusterAction,\n                    topicAccess,\n                    providerBootstrapSubject,\n                    providerBootstrapRegistry,\n                    allTestTopic,\n                    describeRegistry,\n                    alterConfigsRegistry,\n                    readRegistry,\n                    writeRegistry)\n                .build());\n\n        var developer = new Role(\"developer\", RoleArgs.builder()\n            .name(roleName)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(roleAllowDeletion)\n            .build());\n\n        var roleTopicRead = new Acl(\"roleTopicRead\", AclArgs.builder()\n            .resourceType(\"TOPIC\")\n            .resourceName(testTopic.name())\n            .resourcePatternType(\"LITERAL\")\n            .principal(developer.name().applyValue(_name -> String.format(\"RedpandaRole:%s\", _name)))\n            .host(\"*\")\n            .operation(\"READ\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var readProduct = new SchemaRegistryAcl(\"readProduct\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"SUBJECT\")\n            .resourceName(\"product-\")\n            .patternType(\"PREFIXED\")\n            .host(\"*\")\n            .operation(\"READ\")\n            .permission(\"ALLOW\")\n            .allowDeletion(srAclAllowDeletion)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var writeOrders = new SchemaRegistryAcl(\"writeOrders\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"SUBJECT\")\n            .resourceName(\"orders-value\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"WRITE\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var describeTestTopic = new SchemaRegistryAcl(\"describeTestTopic\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"SUBJECT\")\n            .resourceName(String.format(\"%s-\", topicName))\n            .patternType(\"PREFIXED\")\n            .host(\"*\")\n            .operation(\"DESCRIBE\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var developerAssignment = new RoleAssignment(\"developerAssignment\", RoleAssignmentArgs.builder()\n            .roleName(developer.name())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(testUser)\n                .build());\n\n        ctx.export(\"userSchemaInfo\", Map.ofEntries(\n            Map.entry(\"id\", userSchema.schemaId()),\n            Map.entry(\"subject\", userSchema.subject()),\n            Map.entry(\"version\", userSchema.version()),\n            Map.entry(\"type\", userSchema.schemaType())\n        ));\n        ctx.export(\"userEventSchemaInfo\", Map.ofEntries(\n            Map.entry(\"id\", userEventSchema.schemaId()),\n            Map.entry(\"subject\", userEventSchema.subject()),\n            Map.entry(\"version\", userEventSchema.version()),\n            Map.entry(\"type\", userEventSchema.schemaType()),\n            Map.entry(\"references\", userEventSchema.references())\n        ));\n        ctx.export(\"productSchemaInfo\", Map.ofEntries(\n            Map.entry(\"id\", productSchema.schemaId()),\n            Map.entry(\"subject\", productSchema.subject()),\n            Map.entry(\"version\", productSchema.version()),\n            Map.entry(\"type\", productSchema.schemaType()),\n            Map.entry(\"compatibility\", productSchema.compatibility())\n        ));\n    }\n}\n```\n<!--End PulumiCodeChooser -->\n\n### On Azure\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst test = new redpanda.ResourceGroup(\"test\", {name: resourceGroupName});\nconst testNetwork = new redpanda.Network(\"test\", {\n    name: networkName,\n    resourceGroupId: test.id,\n    cloudProvider: cloudProvider,\n    region: region,\n    clusterType: \"dedicated\",\n    cidrBlock: \"10.0.0.0/20\",\n    timeouts: {\n        create: \"20m\",\n        \"delete\": \"20m\",\n    },\n});\nconst testCluster = new redpanda.Cluster(\"test\", {\n    name: clusterName,\n    resourceGroupId: test.id,\n    networkId: testNetwork.id,\n    cloudProvider: cloudProvider,\n    region: region,\n    clusterType: \"dedicated\",\n    connectionType: \"public\",\n    throughputTier: throughputTier,\n    zones: zones,\n    allowDeletion: clusterAllowDeletion,\n    clusterConfiguration: {\n        customPropertiesJson: JSON.stringify({\n            \"auto.create.topics.enable\": false,\n            schema_registry_enable_authorization: true,\n        }),\n    },\n    tags: clusterTags,\n    timeouts: {\n        create: \"90m\",\n    },\n});\nconst testUser = new redpanda.User(\"test\", {\n    name: userName,\n    password: userPw,\n    mechanism: mechanism,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: userAllowDeletion,\n});\nconst testTopic = new redpanda.Topic(\"test\", {\n    name: topicName,\n    partitionCount: partitionCount,\n    replicationFactor: replicationFactor,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: true,\n    configuration: {\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": topicRetentionMs,\n    },\n});\n// Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n// SUBJECT grant authorizes POST /subjects/<subj>/versions; REGISTRY grant\n// authorizes the franz-go follow-up GET /schemas/ids/<id>/versions.\nconst providerBootstrapSubject = new redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\", {\n    clusterId: testCluster.id,\n    principal: \"User:*\",\n    resourceType: \"SUBJECT\",\n    resourceName: topicName,\n    patternType: \"PREFIXED\",\n    host: \"*\",\n    operation: \"ALL\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n});\nconst providerBootstrapRegistry = new redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\", {\n    clusterId: testCluster.id,\n    principal: \"User:*\",\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"ALL\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n});\nconst clusterAdmin = new redpanda.Acl(\"cluster_admin\", {\n    resourceType: \"CLUSTER\",\n    resourceName: \"kafka-cluster\",\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"ALL\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst schemaRegistryAdmin = new redpanda.Acl(\"schema_registry_admin\", {\n    resourceType: \"CLUSTER\",\n    resourceName: \"kafka-cluster\",\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"ALTER\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst clusterAction = new redpanda.Acl(\"cluster_action\", {\n    resourceType: \"CLUSTER\",\n    resourceName: \"kafka-cluster\",\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"CLUSTER_ACTION\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst topicAccess = new redpanda.Acl(\"topic_access\", {\n    resourceType: \"TOPIC\",\n    resourceName: testTopic.name,\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"ALL\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst allTestTopic = new redpanda.SchemaRegistryAcl(\"all_test_topic\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"SUBJECT\",\n    resourceName: `${topicName}-`,\n    patternType: \"PREFIXED\",\n    host: \"*\",\n    operation: \"ALL\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst describeRegistry = new redpanda.SchemaRegistryAcl(\"describe_registry\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"DESCRIBE\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst alterConfigsRegistry = new redpanda.SchemaRegistryAcl(\"alter_configs_registry\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"ALTER_CONFIGS\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst readRegistry = new redpanda.SchemaRegistryAcl(\"read_registry\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"READ\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst writeRegistry = new redpanda.SchemaRegistryAcl(\"write_registry\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"WRITE\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst userSchema = new redpanda.Schema(\"user_schema\", {\n    clusterId: testCluster.id,\n    subject: `${topicName}-value`,\n    schemaType: schemaType,\n    schema: userSchemaDefinition,\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n        clusterAction,\n        topicAccess,\n        providerBootstrapSubject,\n        providerBootstrapRegistry,\n        allTestTopic,\n        describeRegistry,\n        alterConfigsRegistry,\n        readRegistry,\n        writeRegistry,\n    ],\n});\nconst userEventSchema = new redpanda.Schema(\"user_event_schema\", {\n    clusterId: testCluster.id,\n    subject: `${topicName}-events-value`,\n    schemaType: schemaType,\n    schema: userEventSchemaDefinition,\n    allowDeletion: true,\n    references: [{\n        name: \"User\",\n        subject: userSchema.subject,\n        version: userSchema.version,\n    }],\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n        clusterAction,\n        topicAccess,\n        providerBootstrapSubject,\n        providerBootstrapRegistry,\n        allTestTopic,\n        describeRegistry,\n        alterConfigsRegistry,\n        readRegistry,\n        writeRegistry,\n    ],\n});\nconst productSchema = new redpanda.Schema(\"product_schema\", {\n    clusterId: testCluster.id,\n    subject: `${topicName}-product-value`,\n    schemaType: schemaType,\n    schema: productSchemaDefinition,\n    compatibility: compatibilityLevel,\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n        clusterAction,\n        topicAccess,\n        providerBootstrapSubject,\n        providerBootstrapRegistry,\n        allTestTopic,\n        describeRegistry,\n        alterConfigsRegistry,\n        readRegistry,\n        writeRegistry,\n    ],\n});\nconst developer = new redpanda.Role(\"developer\", {\n    name: roleName,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: roleAllowDeletion,\n});\nconst roleTopicRead = new redpanda.Acl(\"role_topic_read\", {\n    resourceType: \"TOPIC\",\n    resourceName: testTopic.name,\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`RedpandaRole:${developer.name}`,\n    host: \"*\",\n    operation: \"READ\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\nconst readProduct = new redpanda.SchemaRegistryAcl(\"read_product\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"SUBJECT\",\n    resourceName: \"product-\",\n    patternType: \"PREFIXED\",\n    host: \"*\",\n    operation: \"READ\",\n    permission: \"ALLOW\",\n    allowDeletion: srAclAllowDeletion,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst writeOrders = new redpanda.SchemaRegistryAcl(\"write_orders\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"SUBJECT\",\n    resourceName: \"orders-value\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"WRITE\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst describeTestTopic = new redpanda.SchemaRegistryAcl(\"describe_test_topic\", {\n    clusterId: testCluster.id,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    resourceType: \"SUBJECT\",\n    resourceName: `${topicName}-`,\n    patternType: \"PREFIXED\",\n    host: \"*\",\n    operation: \"DESCRIBE\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n}, {\n    dependsOn: [\n        clusterAdmin,\n        schemaRegistryAdmin,\n    ],\n});\nconst developerAssignment = new redpanda.RoleAssignment(\"developer_assignment\", {\n    roleName: developer.name,\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    clusterApiUrl: testCluster.clusterApiUrl,\n}, {\n    dependsOn: [testUser],\n});\nconst testPipeline = new redpanda.Pipeline(\"test\", {\n    clusterApiUrl: testCluster.clusterApiUrl,\n    displayName: pipelineName,\n    description: pipelineDescription,\n    configYaml: pipelineConfigYaml,\n    state: pipelineState,\n    allowDeletion: pipelineAllowDeletion,\n    resources: {\n        memoryShares: pipelineMemoryShares,\n        cpuShares: pipelineCpuShares,\n    },\n    tags: {\n        environment: \"test\",\n        \"managed-by\": \"terraform\",\n    },\n});\nexport const pipelineInfo = {\n    id: testPipeline.id,\n    name: testPipeline.displayName,\n    state: testPipeline.state,\n    url: testPipeline.url,\n};\nexport const userSchemaInfo = {\n    id: userSchema.schemaId,\n    subject: userSchema.subject,\n    version: userSchema.version,\n    type: userSchema.schemaType,\n};\nexport const userEventSchemaInfo = {\n    id: userEventSchema.schemaId,\n    subject: userEventSchema.subject,\n    version: userEventSchema.version,\n    type: userEventSchema.schemaType,\n    references: userEventSchema.references,\n};\nexport const productSchemaInfo = {\n    id: productSchema.schemaId,\n    subject: productSchema.subject,\n    version: productSchema.version,\n    type: productSchema.schemaType,\n    compatibility: productSchema.compatibility,\n};\n```\n```python\nimport pulumi\nimport json\nimport pulumi_redpanda as redpanda\n\ntest = redpanda.ResourceGroup(\"test\", name=resource_group_name)\ntest_network = redpanda.Network(\"test\",\n    name=network_name,\n    resource_group_id=test.id,\n    cloud_provider=cloud_provider,\n    region=region,\n    cluster_type=\"dedicated\",\n    cidr_block=\"10.0.0.0/20\",\n    timeouts={\n        \"create\": \"20m\",\n        \"delete\": \"20m\",\n    })\ntest_cluster = redpanda.Cluster(\"test\",\n    name=cluster_name,\n    resource_group_id=test.id,\n    network_id=test_network.id,\n    cloud_provider=cloud_provider,\n    region=region,\n    cluster_type=\"dedicated\",\n    connection_type=\"public\",\n    throughput_tier=throughput_tier,\n    zones=zones,\n    allow_deletion=cluster_allow_deletion,\n    cluster_configuration={\n        \"custom_properties_json\": json.dumps({\n            \"auto.create.topics.enable\": False,\n            \"schema_registry_enable_authorization\": True,\n        }),\n    },\n    tags=cluster_tags,\n    timeouts={\n        \"create\": \"90m\",\n    })\ntest_user = redpanda.User(\"test\",\n    name=user_name,\n    password=user_pw,\n    mechanism=mechanism,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=user_allow_deletion)\ntest_topic = redpanda.Topic(\"test\",\n    name=topic_name,\n    partition_count=partition_count,\n    replication_factor=replication_factor,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=True,\n    configuration={\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": topic_retention_ms,\n    })\n# Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n# SUBJECT grant authorizes POST /subjects/<subj>/versions; REGISTRY grant\n# authorizes the franz-go follow-up GET /schemas/ids/<id>/versions.\nprovider_bootstrap_subject = redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\",\n    cluster_id=test_cluster.id,\n    principal=\"User:*\",\n    resource_type=\"SUBJECT\",\n    resource_name_=topic_name,\n    pattern_type=\"PREFIXED\",\n    host=\"*\",\n    operation=\"ALL\",\n    permission=\"ALLOW\",\n    allow_deletion=True)\nprovider_bootstrap_registry = redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\",\n    cluster_id=test_cluster.id,\n    principal=\"User:*\",\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"ALL\",\n    permission=\"ALLOW\",\n    allow_deletion=True)\ncluster_admin = redpanda.Acl(\"cluster_admin\",\n    resource_type=\"CLUSTER\",\n    resource_name_=\"kafka-cluster\",\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"ALL\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\nschema_registry_admin = redpanda.Acl(\"schema_registry_admin\",\n    resource_type=\"CLUSTER\",\n    resource_name_=\"kafka-cluster\",\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"ALTER\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\ncluster_action = redpanda.Acl(\"cluster_action\",\n    resource_type=\"CLUSTER\",\n    resource_name_=\"kafka-cluster\",\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"CLUSTER_ACTION\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\ntopic_access = redpanda.Acl(\"topic_access\",\n    resource_type=\"TOPIC\",\n    resource_name_=test_topic.name,\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"ALL\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\nall_test_topic = redpanda.SchemaRegistryAcl(\"all_test_topic\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"SUBJECT\",\n    resource_name_=f\"{topic_name}-\",\n    pattern_type=\"PREFIXED\",\n    host=\"*\",\n    operation=\"ALL\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\ndescribe_registry = redpanda.SchemaRegistryAcl(\"describe_registry\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"DESCRIBE\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nalter_configs_registry = redpanda.SchemaRegistryAcl(\"alter_configs_registry\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"ALTER_CONFIGS\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nread_registry = redpanda.SchemaRegistryAcl(\"read_registry\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"READ\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nwrite_registry = redpanda.SchemaRegistryAcl(\"write_registry\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"WRITE\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nuser_schema = redpanda.Schema(\"user_schema\",\n    cluster_id=test_cluster.id,\n    subject=f\"{topic_name}-value\",\n    schema_type=schema_type,\n    schema=user_schema_definition,\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n            cluster_action,\n            topic_access,\n            provider_bootstrap_subject,\n            provider_bootstrap_registry,\n            all_test_topic,\n            describe_registry,\n            alter_configs_registry,\n            read_registry,\n            write_registry,\n        ]))\nuser_event_schema = redpanda.Schema(\"user_event_schema\",\n    cluster_id=test_cluster.id,\n    subject=f\"{topic_name}-events-value\",\n    schema_type=schema_type,\n    schema=user_event_schema_definition,\n    allow_deletion=True,\n    references=[{\n        \"name\": \"User\",\n        \"subject\": user_schema.subject,\n        \"version\": user_schema.version,\n    }],\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n            cluster_action,\n            topic_access,\n            provider_bootstrap_subject,\n            provider_bootstrap_registry,\n            all_test_topic,\n            describe_registry,\n            alter_configs_registry,\n            read_registry,\n            write_registry,\n        ]))\nproduct_schema = redpanda.Schema(\"product_schema\",\n    cluster_id=test_cluster.id,\n    subject=f\"{topic_name}-product-value\",\n    schema_type=schema_type,\n    schema=product_schema_definition,\n    compatibility=compatibility_level,\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n            cluster_action,\n            topic_access,\n            provider_bootstrap_subject,\n            provider_bootstrap_registry,\n            all_test_topic,\n            describe_registry,\n            alter_configs_registry,\n            read_registry,\n            write_registry,\n        ]))\ndeveloper = redpanda.Role(\"developer\",\n    name=role_name,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=role_allow_deletion)\nrole_topic_read = redpanda.Acl(\"role_topic_read\",\n    resource_type=\"TOPIC\",\n    resource_name_=test_topic.name,\n    resource_pattern_type=\"LITERAL\",\n    principal=developer.name.apply(lambda name: f\"RedpandaRole:{name}\"),\n    host=\"*\",\n    operation=\"READ\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\nread_product = redpanda.SchemaRegistryAcl(\"read_product\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"SUBJECT\",\n    resource_name_=\"product-\",\n    pattern_type=\"PREFIXED\",\n    host=\"*\",\n    operation=\"READ\",\n    permission=\"ALLOW\",\n    allow_deletion=sr_acl_allow_deletion,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\nwrite_orders = redpanda.SchemaRegistryAcl(\"write_orders\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"SUBJECT\",\n    resource_name_=\"orders-value\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"WRITE\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\ndescribe_test_topic = redpanda.SchemaRegistryAcl(\"describe_test_topic\",\n    cluster_id=test_cluster.id,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    resource_type=\"SUBJECT\",\n    resource_name_=f\"{topic_name}-\",\n    pattern_type=\"PREFIXED\",\n    host=\"*\",\n    operation=\"DESCRIBE\",\n    permission=\"ALLOW\",\n    allow_deletion=True,\n    opts = pulumi.ResourceOptions(depends_on=[\n            cluster_admin,\n            schema_registry_admin,\n        ]))\ndeveloper_assignment = redpanda.RoleAssignment(\"developer_assignment\",\n    role_name=developer.name,\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    cluster_api_url=test_cluster.cluster_api_url,\n    opts = pulumi.ResourceOptions(depends_on=[test_user]))\ntest_pipeline = redpanda.Pipeline(\"test\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    display_name=pipeline_name,\n    description=pipeline_description,\n    config_yaml=pipeline_config_yaml,\n    state=pipeline_state,\n    allow_deletion=pipeline_allow_deletion,\n    resources={\n        \"memory_shares\": pipeline_memory_shares,\n        \"cpu_shares\": pipeline_cpu_shares,\n    },\n    tags={\n        \"environment\": \"test\",\n        \"managed-by\": \"terraform\",\n    })\npulumi.export(\"pipelineInfo\", {\n    \"id\": test_pipeline.id,\n    \"name\": test_pipeline.display_name,\n    \"state\": test_pipeline.state,\n    \"url\": test_pipeline.url,\n})\npulumi.export(\"userSchemaInfo\", {\n    \"id\": user_schema.schema_id,\n    \"subject\": user_schema.subject,\n    \"version\": user_schema.version,\n    \"type\": user_schema.schema_type,\n})\npulumi.export(\"userEventSchemaInfo\", {\n    \"id\": user_event_schema.schema_id,\n    \"subject\": user_event_schema.subject,\n    \"version\": user_event_schema.version,\n    \"type\": user_event_schema.schema_type,\n    \"references\": user_event_schema.references,\n})\npulumi.export(\"productSchemaInfo\", {\n    \"id\": product_schema.schema_id,\n    \"subject\": product_schema.subject,\n    \"version\": product_schema.version,\n    \"type\": product_schema.schema_type,\n    \"compatibility\": product_schema.compatibility,\n})\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var test = new Redpanda.ResourceGroup(\"test\", new()\n    {\n        Name = resourceGroupName,\n    });\n\n    var testNetwork = new Redpanda.Network(\"test\", new()\n    {\n        Name = networkName,\n        ResourceGroupId = test.Id,\n        CloudProvider = cloudProvider,\n        Region = region,\n        ClusterType = \"dedicated\",\n        CidrBlock = \"10.0.0.0/20\",\n        Timeouts = new Redpanda.Inputs.NetworkTimeoutsArgs\n        {\n            Create = \"20m\",\n            Delete = \"20m\",\n        },\n    });\n\n    var testCluster = new Redpanda.Cluster(\"test\", new()\n    {\n        Name = clusterName,\n        ResourceGroupId = test.Id,\n        NetworkId = testNetwork.Id,\n        CloudProvider = cloudProvider,\n        Region = region,\n        ClusterType = \"dedicated\",\n        ConnectionType = \"public\",\n        ThroughputTier = throughputTier,\n        Zones = zones,\n        AllowDeletion = clusterAllowDeletion,\n        ClusterConfiguration = new Redpanda.Inputs.ClusterClusterConfigurationArgs\n        {\n            CustomPropertiesJson = JsonSerializer.Serialize(new Dictionary<string, object?>\n            {\n                [\"auto.create.topics.enable\"] = false,\n                [\"schema_registry_enable_authorization\"] = true,\n            }),\n        },\n        Tags = clusterTags,\n        Timeouts = new Redpanda.Inputs.ClusterTimeoutsArgs\n        {\n            Create = \"90m\",\n        },\n    });\n\n    var testUser = new Redpanda.User(\"test\", new()\n    {\n        Name = userName,\n        Password = userPw,\n        Mechanism = mechanism,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = userAllowDeletion,\n    });\n\n    var testTopic = new Redpanda.Topic(\"test\", new()\n    {\n        Name = topicName,\n        PartitionCount = partitionCount,\n        ReplicationFactor = replicationFactor,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = true,\n        Configuration = \n        {\n            { \"cleanup.policy\", \"delete\" },\n            { \"retention.ms\", topicRetentionMs },\n        },\n    });\n\n    // Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n    // SUBJECT grant authorizes POST /subjects/<subj>/versions; REGISTRY grant\n    // authorizes the franz-go follow-up GET /schemas/ids/<id>/versions.\n    var providerBootstrapSubject = new Redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = \"User:*\",\n        ResourceType = \"SUBJECT\",\n        ResourceName = topicName,\n        PatternType = \"PREFIXED\",\n        Host = \"*\",\n        Operation = \"ALL\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    });\n\n    var providerBootstrapRegistry = new Redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = \"User:*\",\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"ALL\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    });\n\n    var clusterAdmin = new Redpanda.Acl(\"cluster_admin\", new()\n    {\n        ResourceType = \"CLUSTER\",\n        ResourceName = \"kafka-cluster\",\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"ALL\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var schemaRegistryAdmin = new Redpanda.Acl(\"schema_registry_admin\", new()\n    {\n        ResourceType = \"CLUSTER\",\n        ResourceName = \"kafka-cluster\",\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"ALTER\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var clusterAction = new Redpanda.Acl(\"cluster_action\", new()\n    {\n        ResourceType = \"CLUSTER\",\n        ResourceName = \"kafka-cluster\",\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"CLUSTER_ACTION\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var topicAccess = new Redpanda.Acl(\"topic_access\", new()\n    {\n        ResourceType = \"TOPIC\",\n        ResourceName = testTopic.Name,\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"ALL\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var allTestTopic = new Redpanda.SchemaRegistryAcl(\"all_test_topic\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"SUBJECT\",\n        ResourceName = $\"{topicName}-\",\n        PatternType = \"PREFIXED\",\n        Host = \"*\",\n        Operation = \"ALL\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var describeRegistry = new Redpanda.SchemaRegistryAcl(\"describe_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"DESCRIBE\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var alterConfigsRegistry = new Redpanda.SchemaRegistryAcl(\"alter_configs_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"ALTER_CONFIGS\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var readRegistry = new Redpanda.SchemaRegistryAcl(\"read_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"READ\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var writeRegistry = new Redpanda.SchemaRegistryAcl(\"write_registry\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"WRITE\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var userSchema = new Redpanda.Schema(\"user_schema\", new()\n    {\n        ClusterId = testCluster.Id,\n        Subject = $\"{topicName}-value\",\n        SchemaType = schemaType,\n        Schema = userSchemaDefinition,\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n            clusterAction,\n            topicAccess,\n            providerBootstrapSubject,\n            providerBootstrapRegistry,\n            allTestTopic,\n            describeRegistry,\n            alterConfigsRegistry,\n            readRegistry,\n            writeRegistry,\n        },\n    });\n\n    var userEventSchema = new Redpanda.Schema(\"user_event_schema\", new()\n    {\n        ClusterId = testCluster.Id,\n        Subject = $\"{topicName}-events-value\",\n        SchemaType = schemaType,\n        Schema = userEventSchemaDefinition,\n        AllowDeletion = true,\n        References = new[]\n        {\n            new Redpanda.Inputs.SchemaReferenceArgs\n            {\n                Name = \"User\",\n                Subject = userSchema.Subject,\n                Version = userSchema.Version,\n            },\n        },\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n            clusterAction,\n            topicAccess,\n            providerBootstrapSubject,\n            providerBootstrapRegistry,\n            allTestTopic,\n            describeRegistry,\n            alterConfigsRegistry,\n            readRegistry,\n            writeRegistry,\n        },\n    });\n\n    var productSchema = new Redpanda.Schema(\"product_schema\", new()\n    {\n        ClusterId = testCluster.Id,\n        Subject = $\"{topicName}-product-value\",\n        SchemaType = schemaType,\n        Schema = productSchemaDefinition,\n        Compatibility = compatibilityLevel,\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n            clusterAction,\n            topicAccess,\n            providerBootstrapSubject,\n            providerBootstrapRegistry,\n            allTestTopic,\n            describeRegistry,\n            alterConfigsRegistry,\n            readRegistry,\n            writeRegistry,\n        },\n    });\n\n    var developer = new Redpanda.Role(\"developer\", new()\n    {\n        Name = roleName,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = roleAllowDeletion,\n    });\n\n    var roleTopicRead = new Redpanda.Acl(\"role_topic_read\", new()\n    {\n        ResourceType = \"TOPIC\",\n        ResourceName = testTopic.Name,\n        ResourcePatternType = \"LITERAL\",\n        Principal = developer.Name.Apply(name => $\"RedpandaRole:{name}\"),\n        Host = \"*\",\n        Operation = \"READ\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n    var readProduct = new Redpanda.SchemaRegistryAcl(\"read_product\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"SUBJECT\",\n        ResourceName = \"product-\",\n        PatternType = \"PREFIXED\",\n        Host = \"*\",\n        Operation = \"READ\",\n        Permission = \"ALLOW\",\n        AllowDeletion = srAclAllowDeletion,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var writeOrders = new Redpanda.SchemaRegistryAcl(\"write_orders\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"SUBJECT\",\n        ResourceName = \"orders-value\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"WRITE\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var describeTestTopic = new Redpanda.SchemaRegistryAcl(\"describe_test_topic\", new()\n    {\n        ClusterId = testCluster.Id,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ResourceType = \"SUBJECT\",\n        ResourceName = $\"{topicName}-\",\n        PatternType = \"PREFIXED\",\n        Host = \"*\",\n        Operation = \"DESCRIBE\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            clusterAdmin,\n            schemaRegistryAdmin,\n        },\n    });\n\n    var developerAssignment = new Redpanda.RoleAssignment(\"developer_assignment\", new()\n    {\n        RoleName = developer.Name,\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            testUser,\n        },\n    });\n\n    var testPipeline = new Redpanda.Pipeline(\"test\", new()\n    {\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        DisplayName = pipelineName,\n        Description = pipelineDescription,\n        ConfigYaml = pipelineConfigYaml,\n        State = pipelineState,\n        AllowDeletion = pipelineAllowDeletion,\n        Resources = new Redpanda.Inputs.PipelineResourcesArgs\n        {\n            MemoryShares = pipelineMemoryShares,\n            CpuShares = pipelineCpuShares,\n        },\n        Tags = \n        {\n            { \"environment\", \"test\" },\n            { \"managed-by\", \"terraform\" },\n        },\n    });\n\n    return new Dictionary<string, object?>\n    {\n        [\"pipelineInfo\"] = \n        {\n            { \"id\", testPipeline.Id },\n            { \"name\", testPipeline.DisplayName },\n            { \"state\", testPipeline.State },\n            { \"url\", testPipeline.Url },\n        },\n        [\"userSchemaInfo\"] = \n        {\n            { \"id\", userSchema.SchemaId },\n            { \"subject\", userSchema.Subject },\n            { \"version\", userSchema.Version },\n            { \"type\", userSchema.SchemaType },\n        },\n        [\"userEventSchemaInfo\"] = \n        {\n            { \"id\", userEventSchema.SchemaId },\n            { \"subject\", userEventSchema.Subject },\n            { \"version\", userEventSchema.Version },\n            { \"type\", userEventSchema.SchemaType },\n            { \"references\", userEventSchema.References },\n        },\n        [\"productSchemaInfo\"] = \n        {\n            { \"id\", productSchema.SchemaId },\n            { \"subject\", productSchema.Subject },\n            { \"version\", productSchema.Version },\n            { \"type\", productSchema.SchemaType },\n            { \"compatibility\", productSchema.Compatibility },\n        },\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := redpanda.NewResourceGroup(ctx, \"test\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.Any(resourceGroupName),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestNetwork, err := redpanda.NewNetwork(ctx, \"test\", &redpanda.NetworkArgs{\n\t\t\tName:            pulumi.Any(networkName),\n\t\t\tResourceGroupId: test.ID(),\n\t\t\tCloudProvider:   pulumi.Any(cloudProvider),\n\t\t\tRegion:          pulumi.Any(region),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tCidrBlock:       pulumi.String(\"10.0.0.0/20\"),\n\t\t\tTimeouts: &redpanda.NetworkTimeoutsArgs{\n\t\t\t\tCreate: pulumi.String(\"20m\"),\n\t\t\t\tDelete: pulumi.String(\"20m\"),\n\t\t\t},\n\t\t})\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\"auto.create.topics.enable\":            false,\n\t\t\t\"schema_registry_enable_authorization\": true,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\ttestCluster, err := redpanda.NewCluster(ctx, \"test\", &redpanda.ClusterArgs{\n\t\t\tName:            pulumi.Any(clusterName),\n\t\t\tResourceGroupId: test.ID(),\n\t\t\tNetworkId:       testNetwork.ID(),\n\t\t\tCloudProvider:   pulumi.Any(cloudProvider),\n\t\t\tRegion:          pulumi.Any(region),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tConnectionType:  pulumi.String(\"public\"),\n\t\t\tThroughputTier:  pulumi.Any(throughputTier),\n\t\t\tZones:           pulumi.Any(zones),\n\t\t\tAllowDeletion:   pulumi.Any(clusterAllowDeletion),\n\t\t\tClusterConfiguration: &redpanda.ClusterClusterConfigurationArgs{\n\t\t\t\tCustomPropertiesJson: pulumi.String(json0),\n\t\t\t},\n\t\t\tTags: pulumi.Any(clusterTags),\n\t\t\tTimeouts: &redpanda.ClusterTimeoutsArgs{\n\t\t\t\tCreate: pulumi.String(\"90m\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestUser, err := redpanda.NewUser(ctx, \"test\", &redpanda.UserArgs{\n\t\t\tName:          pulumi.Any(userName),\n\t\t\tPassword:      pulumi.Any(userPw),\n\t\t\tMechanism:     pulumi.Any(mechanism),\n\t\t\tClusterApiUrl: testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Any(userAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTopic, err := redpanda.NewTopic(ctx, \"test\", &redpanda.TopicArgs{\n\t\t\tName:              pulumi.Any(topicName),\n\t\t\tPartitionCount:    pulumi.Any(partitionCount),\n\t\t\tReplicationFactor: pulumi.Any(replicationFactor),\n\t\t\tClusterApiUrl:     testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:     pulumi.Bool(true),\n\t\t\tConfiguration: pulumi.StringMap{\n\t\t\t\t\"cleanup.policy\": pulumi.String(\"delete\"),\n\t\t\t\t\"retention.ms\":   pulumi.Any(topicRetentionMs),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n\t\t// SUBJECT grant authorizes POST /subjects/<subj>/versions; REGISTRY grant\n\t\t// authorizes the franz-go follow-up GET /schemas/ids/<id>/versions.\n\t\tproviderBootstrapSubject, err := redpanda.NewSchemaRegistryAcl(ctx, \"provider_bootstrap_subject\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tPrincipal:     pulumi.String(\"User:*\"),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.Any(topicName),\n\t\t\tPatternType:   pulumi.String(\"PREFIXED\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALL\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproviderBootstrapRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"provider_bootstrap_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tPrincipal:     pulumi.String(\"User:*\"),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALL\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tclusterAdmin, err := redpanda.NewAcl(ctx, \"cluster_admin\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"CLUSTER\"),\n\t\t\tResourceName:        pulumi.String(\"kafka-cluster\"),\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"ALL\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tschemaRegistryAdmin, err := redpanda.NewAcl(ctx, \"schema_registry_admin\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"CLUSTER\"),\n\t\t\tResourceName:        pulumi.String(\"kafka-cluster\"),\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"ALTER\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tclusterAction, err := redpanda.NewAcl(ctx, \"cluster_action\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"CLUSTER\"),\n\t\t\tResourceName:        pulumi.String(\"kafka-cluster\"),\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"CLUSTER_ACTION\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttopicAccess, err := redpanda.NewAcl(ctx, \"topic_access\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"TOPIC\"),\n\t\t\tResourceName:        testTopic.Name,\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"ALL\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tallTestTopic, err := redpanda.NewSchemaRegistryAcl(ctx, \"all_test_topic\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.Sprintf(\"%v-\", topicName),\n\t\t\tPatternType:   pulumi.String(\"PREFIXED\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALL\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdescribeRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"describe_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"DESCRIBE\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\talterConfigsRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"alter_configs_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALTER_CONFIGS\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treadRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"read_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"READ\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twriteRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"write_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"WRITE\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuserSchema, err := redpanda.NewSchema(ctx, \"user_schema\", &redpanda.SchemaArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tSubject:       pulumi.Sprintf(\"%v-value\", topicName),\n\t\t\tSchemaType:    pulumi.Any(schemaType),\n\t\t\tSchema:        pulumi.Any(userSchemaDefinition),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t\tclusterAction,\n\t\t\ttopicAccess,\n\t\t\tproviderBootstrapSubject,\n\t\t\tproviderBootstrapRegistry,\n\t\t\tallTestTopic,\n\t\t\tdescribeRegistry,\n\t\t\talterConfigsRegistry,\n\t\t\treadRegistry,\n\t\t\twriteRegistry,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tuserEventSchema, err := redpanda.NewSchema(ctx, \"user_event_schema\", &redpanda.SchemaArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tSubject:       pulumi.Sprintf(\"%v-events-value\", topicName),\n\t\t\tSchemaType:    pulumi.Any(schemaType),\n\t\t\tSchema:        pulumi.Any(userEventSchemaDefinition),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t\tReferences: redpanda.SchemaReferenceArray{\n\t\t\t\t&redpanda.SchemaReferenceArgs{\n\t\t\t\t\tName:    pulumi.String(\"User\"),\n\t\t\t\t\tSubject: userSchema.Subject,\n\t\t\t\t\tVersion: userSchema.Version,\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t\tclusterAction,\n\t\t\ttopicAccess,\n\t\t\tproviderBootstrapSubject,\n\t\t\tproviderBootstrapRegistry,\n\t\t\tallTestTopic,\n\t\t\tdescribeRegistry,\n\t\t\talterConfigsRegistry,\n\t\t\treadRegistry,\n\t\t\twriteRegistry,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproductSchema, err := redpanda.NewSchema(ctx, \"product_schema\", &redpanda.SchemaArgs{\n\t\t\tClusterId:     testCluster.ID(),\n\t\t\tSubject:       pulumi.Sprintf(\"%v-product-value\", topicName),\n\t\t\tSchemaType:    pulumi.Any(schemaType),\n\t\t\tSchema:        pulumi.Any(productSchemaDefinition),\n\t\t\tCompatibility: pulumi.Any(compatibilityLevel),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t\tclusterAction,\n\t\t\ttopicAccess,\n\t\t\tproviderBootstrapSubject,\n\t\t\tproviderBootstrapRegistry,\n\t\t\tallTestTopic,\n\t\t\tdescribeRegistry,\n\t\t\talterConfigsRegistry,\n\t\t\treadRegistry,\n\t\t\twriteRegistry,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdeveloper, err := redpanda.NewRole(ctx, \"developer\", &redpanda.RoleArgs{\n\t\t\tName:          pulumi.Any(roleName),\n\t\t\tClusterApiUrl: testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Any(roleAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewAcl(ctx, \"role_topic_read\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"TOPIC\"),\n\t\t\tResourceName:        testTopic.Name,\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: developer.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"RedpandaRole:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"READ\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewSchemaRegistryAcl(ctx, \"read_product\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.String(\"product-\"),\n\t\t\tPatternType:   pulumi.String(\"PREFIXED\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"READ\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Any(srAclAllowDeletion),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewSchemaRegistryAcl(ctx, \"write_orders\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.String(\"orders-value\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"WRITE\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewSchemaRegistryAcl(ctx, \"describe_test_topic\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId: testCluster.ID(),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.Sprintf(\"%v-\", topicName),\n\t\t\tPatternType:   pulumi.String(\"PREFIXED\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"DESCRIBE\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tclusterAdmin,\n\t\t\tschemaRegistryAdmin,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewRoleAssignment(ctx, \"developer_assignment\", &redpanda.RoleAssignmentArgs{\n\t\t\tRoleName: developer.Name,\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tClusterApiUrl: testCluster.ClusterApiUrl,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\ttestUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestPipeline, err := redpanda.NewPipeline(ctx, \"test\", &redpanda.PipelineArgs{\n\t\t\tClusterApiUrl: testCluster.ClusterApiUrl,\n\t\t\tDisplayName:   pulumi.Any(pipelineName),\n\t\t\tDescription:   pulumi.Any(pipelineDescription),\n\t\t\tConfigYaml:    pulumi.Any(pipelineConfigYaml),\n\t\t\tState:         pulumi.Any(pipelineState),\n\t\t\tAllowDeletion: pulumi.Any(pipelineAllowDeletion),\n\t\t\tResources: &redpanda.PipelineResourcesArgs{\n\t\t\t\tMemoryShares: pulumi.Any(pipelineMemoryShares),\n\t\t\t\tCpuShares:    pulumi.Any(pipelineCpuShares),\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"environment\": pulumi.String(\"test\"),\n\t\t\t\t\"managed-by\":  pulumi.String(\"terraform\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"pipelineInfo\", pulumi.StringMap{\n\t\t\t\"id\":    testPipeline.ID(),\n\t\t\t\"name\":  testPipeline.DisplayName,\n\t\t\t\"state\": testPipeline.State,\n\t\t\t\"url\":   testPipeline.Url,\n\t\t})\n\t\tctx.Export(\"userSchemaInfo\", pulumi.Map{\n\t\t\t\"id\":      userSchema.SchemaId,\n\t\t\t\"subject\": userSchema.Subject,\n\t\t\t\"version\": userSchema.Version,\n\t\t\t\"type\":    userSchema.SchemaType,\n\t\t})\n\t\tctx.Export(\"userEventSchemaInfo\", pulumi.Map{\n\t\t\t\"id\":         userEventSchema.SchemaId,\n\t\t\t\"subject\":    userEventSchema.Subject,\n\t\t\t\"version\":    userEventSchema.Version,\n\t\t\t\"type\":       userEventSchema.SchemaType,\n\t\t\t\"references\": userEventSchema.References,\n\t\t})\n\t\tctx.Export(\"productSchemaInfo\", pulumi.Map{\n\t\t\t\"id\":            productSchema.SchemaId,\n\t\t\t\"subject\":       productSchema.Subject,\n\t\t\t\"version\":       productSchema.Version,\n\t\t\t\"type\":          productSchema.SchemaType,\n\t\t\t\"compatibility\": productSchema.Compatibility,\n\t\t})\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.Network;\nimport com.pulumi.redpanda.NetworkArgs;\nimport com.pulumi.redpanda.inputs.NetworkTimeoutsArgs;\nimport com.pulumi.redpanda.Cluster;\nimport com.pulumi.redpanda.ClusterArgs;\nimport com.pulumi.redpanda.inputs.ClusterClusterConfigurationArgs;\nimport com.pulumi.redpanda.inputs.ClusterTimeoutsArgs;\nimport com.pulumi.redpanda.User;\nimport com.pulumi.redpanda.UserArgs;\nimport com.pulumi.redpanda.Topic;\nimport com.pulumi.redpanda.TopicArgs;\nimport com.pulumi.redpanda.SchemaRegistryAcl;\nimport com.pulumi.redpanda.SchemaRegistryAclArgs;\nimport com.pulumi.redpanda.Acl;\nimport com.pulumi.redpanda.AclArgs;\nimport com.pulumi.redpanda.Schema;\nimport com.pulumi.redpanda.SchemaArgs;\nimport com.pulumi.redpanda.inputs.SchemaReferenceArgs;\nimport com.pulumi.redpanda.Role;\nimport com.pulumi.redpanda.RoleArgs;\nimport com.pulumi.redpanda.RoleAssignment;\nimport com.pulumi.redpanda.RoleAssignmentArgs;\nimport com.pulumi.redpanda.Pipeline;\nimport com.pulumi.redpanda.PipelineArgs;\nimport com.pulumi.redpanda.inputs.PipelineResourcesArgs;\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 test = new ResourceGroup(\"test\", ResourceGroupArgs.builder()\n            .name(resourceGroupName)\n            .build());\n\n        var testNetwork = new Network(\"testNetwork\", NetworkArgs.builder()\n            .name(networkName)\n            .resourceGroupId(test.id())\n            .cloudProvider(cloudProvider)\n            .region(region)\n            .clusterType(\"dedicated\")\n            .cidrBlock(\"10.0.0.0/20\")\n            .timeouts(NetworkTimeoutsArgs.builder()\n                .create(\"20m\")\n                .delete(\"20m\")\n                .build())\n            .build());\n\n        var testCluster = new Cluster(\"testCluster\", ClusterArgs.builder()\n            .name(clusterName)\n            .resourceGroupId(test.id())\n            .networkId(testNetwork.id())\n            .cloudProvider(cloudProvider)\n            .region(region)\n            .clusterType(\"dedicated\")\n            .connectionType(\"public\")\n            .throughputTier(throughputTier)\n            .zones(zones)\n            .allowDeletion(clusterAllowDeletion)\n            .clusterConfiguration(ClusterClusterConfigurationArgs.builder()\n                .customPropertiesJson(serializeJson(\n                    jsonObject(\n                        jsonProperty(\"auto.create.topics.enable\", false),\n                        jsonProperty(\"schema_registry_enable_authorization\", true)\n                    )))\n                .build())\n            .tags(clusterTags)\n            .timeouts(ClusterTimeoutsArgs.builder()\n                .create(\"90m\")\n                .build())\n            .build());\n\n        var testUser = new User(\"testUser\", UserArgs.builder()\n            .name(userName)\n            .password(userPw)\n            .mechanism(mechanism)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(userAllowDeletion)\n            .build());\n\n        var testTopic = new Topic(\"testTopic\", TopicArgs.builder()\n            .name(topicName)\n            .partitionCount(partitionCount)\n            .replicationFactor(replicationFactor)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(true)\n            .configuration(Map.ofEntries(\n                Map.entry(\"cleanup.policy\", \"delete\"),\n                Map.entry(\"retention.ms\", topicRetentionMs)\n            ))\n            .build());\n\n        // Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n        // SUBJECT grant authorizes POST /subjects/<subj>/versions; REGISTRY grant\n        // authorizes the franz-go follow-up GET /schemas/ids/<id>/versions.\n        var providerBootstrapSubject = new SchemaRegistryAcl(\"providerBootstrapSubject\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(\"User:*\")\n            .resourceType(\"SUBJECT\")\n            .resourceName(topicName)\n            .patternType(\"PREFIXED\")\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build());\n\n        var providerBootstrapRegistry = new SchemaRegistryAcl(\"providerBootstrapRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(\"User:*\")\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build());\n\n        var clusterAdmin = new Acl(\"clusterAdmin\", AclArgs.builder()\n            .resourceType(\"CLUSTER\")\n            .resourceName(\"kafka-cluster\")\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var schemaRegistryAdmin = new Acl(\"schemaRegistryAdmin\", AclArgs.builder()\n            .resourceType(\"CLUSTER\")\n            .resourceName(\"kafka-cluster\")\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"ALTER\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var clusterAction = new Acl(\"clusterAction\", AclArgs.builder()\n            .resourceType(\"CLUSTER\")\n            .resourceName(\"kafka-cluster\")\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"CLUSTER_ACTION\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var topicAccess = new Acl(\"topicAccess\", AclArgs.builder()\n            .resourceType(\"TOPIC\")\n            .resourceName(testTopic.name())\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var allTestTopic = new SchemaRegistryAcl(\"allTestTopic\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"SUBJECT\")\n            .resourceName(String.format(\"%s-\", topicName))\n            .patternType(\"PREFIXED\")\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var describeRegistry = new SchemaRegistryAcl(\"describeRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"DESCRIBE\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var alterConfigsRegistry = new SchemaRegistryAcl(\"alterConfigsRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"ALTER_CONFIGS\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var readRegistry = new SchemaRegistryAcl(\"readRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"READ\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var writeRegistry = new SchemaRegistryAcl(\"writeRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"WRITE\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var userSchema = new Schema(\"userSchema\", SchemaArgs.builder()\n            .clusterId(testCluster.id())\n            .subject(String.format(\"%s-value\", topicName))\n            .schemaType(schemaType)\n            .schema(userSchemaDefinition)\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin,\n                    clusterAction,\n                    topicAccess,\n                    providerBootstrapSubject,\n                    providerBootstrapRegistry,\n                    allTestTopic,\n                    describeRegistry,\n                    alterConfigsRegistry,\n                    readRegistry,\n                    writeRegistry)\n                .build());\n\n        var userEventSchema = new Schema(\"userEventSchema\", SchemaArgs.builder()\n            .clusterId(testCluster.id())\n            .subject(String.format(\"%s-events-value\", topicName))\n            .schemaType(schemaType)\n            .schema(userEventSchemaDefinition)\n            .allowDeletion(true)\n            .references(SchemaReferenceArgs.builder()\n                .name(\"User\")\n                .subject(userSchema.subject())\n                .version(userSchema.version())\n                .build())\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin,\n                    clusterAction,\n                    topicAccess,\n                    providerBootstrapSubject,\n                    providerBootstrapRegistry,\n                    allTestTopic,\n                    describeRegistry,\n                    alterConfigsRegistry,\n                    readRegistry,\n                    writeRegistry)\n                .build());\n\n        var productSchema = new Schema(\"productSchema\", SchemaArgs.builder()\n            .clusterId(testCluster.id())\n            .subject(String.format(\"%s-product-value\", topicName))\n            .schemaType(schemaType)\n            .schema(productSchemaDefinition)\n            .compatibility(compatibilityLevel)\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin,\n                    clusterAction,\n                    topicAccess,\n                    providerBootstrapSubject,\n                    providerBootstrapRegistry,\n                    allTestTopic,\n                    describeRegistry,\n                    alterConfigsRegistry,\n                    readRegistry,\n                    writeRegistry)\n                .build());\n\n        var developer = new Role(\"developer\", RoleArgs.builder()\n            .name(roleName)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(roleAllowDeletion)\n            .build());\n\n        var roleTopicRead = new Acl(\"roleTopicRead\", AclArgs.builder()\n            .resourceType(\"TOPIC\")\n            .resourceName(testTopic.name())\n            .resourcePatternType(\"LITERAL\")\n            .principal(developer.name().applyValue(_name -> String.format(\"RedpandaRole:%s\", _name)))\n            .host(\"*\")\n            .operation(\"READ\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n        var readProduct = new SchemaRegistryAcl(\"readProduct\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"SUBJECT\")\n            .resourceName(\"product-\")\n            .patternType(\"PREFIXED\")\n            .host(\"*\")\n            .operation(\"READ\")\n            .permission(\"ALLOW\")\n            .allowDeletion(srAclAllowDeletion)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var writeOrders = new SchemaRegistryAcl(\"writeOrders\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"SUBJECT\")\n            .resourceName(\"orders-value\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"WRITE\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var describeTestTopic = new SchemaRegistryAcl(\"describeTestTopic\", SchemaRegistryAclArgs.builder()\n            .clusterId(testCluster.id())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .resourceType(\"SUBJECT\")\n            .resourceName(String.format(\"%s-\", topicName))\n            .patternType(\"PREFIXED\")\n            .host(\"*\")\n            .operation(\"DESCRIBE\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    clusterAdmin,\n                    schemaRegistryAdmin)\n                .build());\n\n        var developerAssignment = new RoleAssignment(\"developerAssignment\", RoleAssignmentArgs.builder()\n            .roleName(developer.name())\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(testUser)\n                .build());\n\n        var testPipeline = new Pipeline(\"testPipeline\", PipelineArgs.builder()\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .displayName(pipelineName)\n            .description(pipelineDescription)\n            .configYaml(pipelineConfigYaml)\n            .state(pipelineState)\n            .allowDeletion(pipelineAllowDeletion)\n            .resources(PipelineResourcesArgs.builder()\n                .memoryShares(pipelineMemoryShares)\n                .cpuShares(pipelineCpuShares)\n                .build())\n            .tags(Map.ofEntries(\n                Map.entry(\"environment\", \"test\"),\n                Map.entry(\"managed-by\", \"terraform\")\n            ))\n            .build());\n\n        ctx.export(\"pipelineInfo\", Map.ofEntries(\n            Map.entry(\"id\", testPipeline.id()),\n            Map.entry(\"name\", testPipeline.displayName()),\n            Map.entry(\"state\", testPipeline.state()),\n            Map.entry(\"url\", testPipeline.url())\n        ));\n        ctx.export(\"userSchemaInfo\", Map.ofEntries(\n            Map.entry(\"id\", userSchema.schemaId()),\n            Map.entry(\"subject\", userSchema.subject()),\n            Map.entry(\"version\", userSchema.version()),\n            Map.entry(\"type\", userSchema.schemaType())\n        ));\n        ctx.export(\"userEventSchemaInfo\", Map.ofEntries(\n            Map.entry(\"id\", userEventSchema.schemaId()),\n            Map.entry(\"subject\", userEventSchema.subject()),\n            Map.entry(\"version\", userEventSchema.version()),\n            Map.entry(\"type\", userEventSchema.schemaType()),\n            Map.entry(\"references\", userEventSchema.references())\n        ));\n        ctx.export(\"productSchemaInfo\", Map.ofEntries(\n            Map.entry(\"id\", productSchema.schemaId()),\n            Map.entry(\"subject\", productSchema.subject()),\n            Map.entry(\"version\", productSchema.version()),\n            Map.entry(\"type\", productSchema.schemaType()),\n            Map.entry(\"compatibility\", productSchema.compatibility())\n        ));\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: redpanda:ResourceGroup\n    properties:\n      name: ${resourceGroupName}\n  testNetwork:\n    type: redpanda:Network\n    name: test\n    properties:\n      name: ${networkName}\n      resourceGroupId: ${test.id}\n      cloudProvider: ${cloudProvider}\n      region: ${region}\n      clusterType: dedicated\n      cidrBlock: 10.0.0.0/20\n      timeouts:\n        create: 20m\n        delete: 20m\n  testCluster:\n    type: redpanda:Cluster\n    name: test\n    properties:\n      name: ${clusterName}\n      resourceGroupId: ${test.id}\n      networkId: ${testNetwork.id}\n      cloudProvider: ${cloudProvider}\n      region: ${region}\n      clusterType: dedicated\n      connectionType: public\n      throughputTier: ${throughputTier}\n      zones: ${zones}\n      allowDeletion: ${clusterAllowDeletion}\n      clusterConfiguration:\n        customPropertiesJson:\n          fn::toJSON:\n            auto.create.topics.enable: false\n            schema_registry_enable_authorization: true\n      tags: ${clusterTags}\n      timeouts:\n        create: 90m\n  testUser:\n    type: redpanda:User\n    name: test\n    properties:\n      name: ${userName}\n      password: ${userPw}\n      mechanism: ${mechanism}\n      clusterApiUrl: ${testCluster.clusterApiUrl}\n      allowDeletion: ${userAllowDeletion}\n  testTopic:\n    type: redpanda:Topic\n    name: test\n    properties:\n      name: ${topicName}\n      partitionCount: ${partitionCount}\n      replicationFactor: ${replicationFactor}\n      clusterApiUrl: ${testCluster.clusterApiUrl}\n      allowDeletion: true\n      configuration:\n        cleanup.policy: delete\n        retention.ms: ${topicRetentionMs}\n  # Bootstrap SR ACL grants for the provider's own Bearer-token principal.\n  # SUBJECT grant authorizes POST /subjects/<subj>/versions; REGISTRY grant\n  # authorizes the franz-go follow-up GET /schemas/ids/<id>/versions.\n  providerBootstrapSubject:\n    type: redpanda:SchemaRegistryAcl\n    name: provider_bootstrap_subject\n    properties:\n      clusterId: ${testCluster.id}\n      principal: User:*\n      resourceType: SUBJECT\n      resourceName: ${topicName}\n      patternType: PREFIXED\n      host: '*'\n      operation: ALL\n      permission: ALLOW\n      allowDeletion: true\n  providerBootstrapRegistry:\n    type: redpanda:SchemaRegistryAcl\n    name: provider_bootstrap_registry\n    properties:\n      clusterId: ${testCluster.id}\n      principal: User:*\n      resourceType: REGISTRY\n      resourceName: '*'\n      patternType: LITERAL\n      host: '*'\n      operation: ALL\n      permission: ALLOW\n      allowDeletion: true\n  userSchema:\n    type: redpanda:Schema\n    name: user_schema\n    properties:\n      clusterId: ${testCluster.id}\n      subject: ${topicName}-value\n      schemaType: ${schemaType}\n      schema: ${userSchemaDefinition}\n      allowDeletion: true\n    options:\n      dependsOn:\n        - ${clusterAdmin}\n        - ${schemaRegistryAdmin}\n        - ${clusterAction}\n        - ${topicAccess}\n        - ${providerBootstrapSubject}\n        - ${providerBootstrapRegistry}\n        - ${allTestTopic}\n        - ${describeRegistry}\n        - ${alterConfigsRegistry}\n        - ${readRegistry}\n        - ${writeRegistry}\n  userEventSchema:\n    type: redpanda:Schema\n    name: user_event_schema\n    properties:\n      clusterId: ${testCluster.id}\n      subject: ${topicName}-events-value\n      schemaType: ${schemaType}\n      schema: ${userEventSchemaDefinition}\n      allowDeletion: true\n      references:\n        - name: User\n          subject: ${userSchema.subject}\n          version: ${userSchema.version}\n    options:\n      dependsOn:\n        - ${clusterAdmin}\n        - ${schemaRegistryAdmin}\n        - ${clusterAction}\n        - ${topicAccess}\n        - ${providerBootstrapSubject}\n        - ${providerBootstrapRegistry}\n        - ${allTestTopic}\n        - ${describeRegistry}\n        - ${alterConfigsRegistry}\n        - ${readRegistry}\n        - ${writeRegistry}\n  productSchema:\n    type: redpanda:Schema\n    name: product_schema\n    properties:\n      clusterId: ${testCluster.id}\n      subject: ${topicName}-product-value\n      schemaType: ${schemaType}\n      schema: ${productSchemaDefinition}\n      compatibility: ${compatibilityLevel}\n      allowDeletion: true\n    options:\n      dependsOn:\n        - ${clusterAdmin}\n        - ${schemaRegistryAdmin}\n        - ${clusterAction}\n        - ${topicAccess}\n        - ${providerBootstrapSubject}\n        - ${providerBootstrapRegistry}\n        - ${allTestTopic}\n        - ${describeRegistry}\n        - ${alterConfigsRegistry}\n        - ${readRegistry}\n        - ${writeRegistry}\n  clusterAdmin:\n    type: redpanda:Acl\n    name: cluster_admin\n    properties:\n      resourceType: CLUSTER\n      resourceName: kafka-cluster\n      resourcePatternType: LITERAL\n      principal: User:${testUser.name}\n      host: '*'\n      operation: ALL\n      permissionType: ALLOW\n      clusterApiUrl: ${testCluster.clusterApiUrl}\n      allowDeletion: ${aclAllowDeletion}\n  schemaRegistryAdmin:\n    type: redpanda:Acl\n    name: schema_registry_admin\n    properties:\n      resourceType: CLUSTER\n      resourceName: kafka-cluster\n      resourcePatternType: LITERAL\n      principal: User:${testUser.name}\n      host: '*'\n      operation: ALTER\n      permissionType: ALLOW\n      clusterApiUrl: ${testCluster.clusterApiUrl}\n      allowDeletion: ${aclAllowDeletion}\n  clusterAction:\n    type: redpanda:Acl\n    name: cluster_action\n    properties:\n      resourceType: CLUSTER\n      resourceName: kafka-cluster\n      resourcePatternType: LITERAL\n      principal: User:${testUser.name}\n      host: '*'\n      operation: CLUSTER_ACTION\n      permissionType: ALLOW\n      clusterApiUrl: ${testCluster.clusterApiUrl}\n      allowDeletion: ${aclAllowDeletion}\n  topicAccess:\n    type: redpanda:Acl\n    name: topic_access\n    properties:\n      resourceType: TOPIC\n      resourceName: ${testTopic.name}\n      resourcePatternType: LITERAL\n      principal: User:${testUser.name}\n      host: '*'\n      operation: ALL\n      permissionType: ALLOW\n      clusterApiUrl: ${testCluster.clusterApiUrl}\n      allowDeletion: ${aclAllowDeletion}\n  roleTopicRead:\n    type: redpanda:Acl\n    name: role_topic_read\n    properties:\n      resourceType: TOPIC\n      resourceName: ${testTopic.name}\n      resourcePatternType: LITERAL\n      principal: RedpandaRole:${developer.name}\n      host: '*'\n      operation: READ\n      permissionType: ALLOW\n      clusterApiUrl: ${testCluster.clusterApiUrl}\n      allowDeletion: ${aclAllowDeletion}\n  readProduct:\n    type: redpanda:SchemaRegistryAcl\n    name: read_product\n    properties:\n      clusterId: ${testCluster.id}\n      principal: User:${testUser.name}\n      resourceType: SUBJECT\n      resourceName: product-\n      patternType: PREFIXED\n      host: '*'\n      operation: READ\n      permission: ALLOW\n      allowDeletion: ${srAclAllowDeletion}\n    options:\n      dependsOn:\n        - ${clusterAdmin}\n        - ${schemaRegistryAdmin}\n  writeOrders:\n    type: redpanda:SchemaRegistryAcl\n    name: write_orders\n    properties:\n      clusterId: ${testCluster.id}\n      principal: User:${testUser.name}\n      resourceType: SUBJECT\n      resourceName: orders-value\n      patternType: LITERAL\n      host: '*'\n      operation: WRITE\n      permission: ALLOW\n      allowDeletion: true\n    options:\n      dependsOn:\n        - ${clusterAdmin}\n        - ${schemaRegistryAdmin}\n  allTestTopic:\n    type: redpanda:SchemaRegistryAcl\n    name: all_test_topic\n    properties:\n      clusterId: ${testCluster.id}\n      principal: User:${testUser.name}\n      resourceType: SUBJECT\n      resourceName: ${topicName}-\n      patternType: PREFIXED\n      host: '*'\n      operation: ALL\n      permission: ALLOW\n      allowDeletion: true\n    options:\n      dependsOn:\n        - ${clusterAdmin}\n        - ${schemaRegistryAdmin}\n  describeTestTopic:\n    type: redpanda:SchemaRegistryAcl\n    name: describe_test_topic\n    properties:\n      clusterId: ${testCluster.id}\n      principal: User:${testUser.name}\n      resourceType: SUBJECT\n      resourceName: ${topicName}-\n      patternType: PREFIXED\n      host: '*'\n      operation: DESCRIBE\n      permission: ALLOW\n      allowDeletion: true\n    options:\n      dependsOn:\n        - ${clusterAdmin}\n        - ${schemaRegistryAdmin}\n  describeRegistry:\n    type: redpanda:SchemaRegistryAcl\n    name: describe_registry\n    properties:\n      clusterId: ${testCluster.id}\n      principal: User:${testUser.name}\n      resourceType: REGISTRY\n      resourceName: '*'\n      patternType: LITERAL\n      host: '*'\n      operation: DESCRIBE\n      permission: ALLOW\n      allowDeletion: true\n    options:\n      dependsOn:\n        - ${clusterAdmin}\n        - ${schemaRegistryAdmin}\n  alterConfigsRegistry:\n    type: redpanda:SchemaRegistryAcl\n    name: alter_configs_registry\n    properties:\n      clusterId: ${testCluster.id}\n      principal: User:${testUser.name}\n      resourceType: REGISTRY\n      resourceName: '*'\n      patternType: LITERAL\n      host: '*'\n      operation: ALTER_CONFIGS\n      permission: ALLOW\n      allowDeletion: true\n    options:\n      dependsOn:\n        - ${clusterAdmin}\n        - ${schemaRegistryAdmin}\n  readRegistry:\n    type: redpanda:SchemaRegistryAcl\n    name: read_registry\n    properties:\n      clusterId: ${testCluster.id}\n      principal: User:${testUser.name}\n      resourceType: REGISTRY\n      resourceName: '*'\n      patternType: LITERAL\n      host: '*'\n      operation: READ\n      permission: ALLOW\n      allowDeletion: true\n    options:\n      dependsOn:\n        - ${clusterAdmin}\n        - ${schemaRegistryAdmin}\n  writeRegistry:\n    type: redpanda:SchemaRegistryAcl\n    name: write_registry\n    properties:\n      clusterId: ${testCluster.id}\n      principal: User:${testUser.name}\n      resourceType: REGISTRY\n      resourceName: '*'\n      patternType: LITERAL\n      host: '*'\n      operation: WRITE\n      permission: ALLOW\n      allowDeletion: true\n    options:\n      dependsOn:\n        - ${clusterAdmin}\n        - ${schemaRegistryAdmin}\n  developer:\n    type: redpanda:Role\n    properties:\n      name: ${roleName}\n      clusterApiUrl: ${testCluster.clusterApiUrl}\n      allowDeletion: ${roleAllowDeletion}\n  developerAssignment:\n    type: redpanda:RoleAssignment\n    name: developer_assignment\n    properties:\n      roleName: ${developer.name}\n      principal: User:${testUser.name}\n      clusterApiUrl: ${testCluster.clusterApiUrl}\n    options:\n      dependsOn:\n        - ${testUser}\n  testPipeline:\n    type: redpanda:Pipeline\n    name: test\n    properties:\n      clusterApiUrl: ${testCluster.clusterApiUrl}\n      displayName: ${pipelineName}\n      description: ${pipelineDescription}\n      configYaml: ${pipelineConfigYaml}\n      state: ${pipelineState}\n      allowDeletion: ${pipelineAllowDeletion}\n      resources:\n        memoryShares: ${pipelineMemoryShares}\n        cpuShares: ${pipelineCpuShares}\n      tags:\n        environment: test\n        managed-by: terraform\noutputs:\n  pipelineInfo:\n    id: ${testPipeline.id}\n    name: ${testPipeline.displayName}\n    state: ${testPipeline.state}\n    url: ${testPipeline.url}\n  userSchemaInfo:\n    id: ${userSchema.schemaId}\n    subject: ${userSchema.subject}\n    version: ${userSchema.version}\n    type: ${userSchema.schemaType}\n  userEventSchemaInfo:\n    id: ${userEventSchema.schemaId}\n    subject: ${userEventSchema.subject}\n    version: ${userEventSchema.version}\n    type: ${userEventSchema.schemaType}\n    references: ${userEventSchema.references}\n  productSchemaInfo:\n    id: ${productSchema.schemaId}\n    subject: ${productSchema.subject}\n    version: ${productSchema.version}\n    type: ${productSchema.schemaType}\n    compatibility: ${productSchema.compatibility}\n```\n<!--End PulumiCodeChooser -->\n\n## BYOC\n\nThis configuration of cluster allows the end user to provide access to their cloud account to the provider so that it can create the necessary infrastructure in their account rather than in Redpanda's Cloud.\n\n#### Additional Requirements\n\nTo build a BYOC cluster you must provide credentials that enable the provider to authenticate to the relevant cloud provider. How this works will depend on which cloud provider you are using.\n\n### AWS BYOC\n\nTo create a BYOC AWS cluster you must provide an AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY. The account [must have fairly wide ranging permissions](https://docs.redpanda.com/redpanda-cloud/security/authorization/cloud-iam-policies/) to create the necessary infrastructure.\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst test = new redpanda.ResourceGroup(\"test\", {name: resourceGroupName});\nconst testNetwork = new redpanda.Network(\"test\", {\n    name: networkName,\n    resourceGroupId: test.id,\n    cloudProvider: cloudProvider,\n    region: region,\n    clusterType: \"byoc\",\n    cidrBlock: \"10.0.0.0/20\",\n});\nconst testCluster = new redpanda.Cluster(\"test\", {\n    name: clusterName,\n    resourceGroupId: test.id,\n    networkId: testNetwork.id,\n    cloudProvider: testNetwork.cloudProvider,\n    region: testNetwork.region,\n    clusterType: testNetwork.clusterType,\n    connectionType: \"public\",\n    throughputTier: throughputTier,\n    zones: zones,\n    allowDeletion: clusterAllowDeletion,\n    tags: clusterTags,\n    timeouts: {\n        create: \"90m\",\n    },\n});\nconst testUser = new redpanda.User(\"test\", {\n    name: userName,\n    password: userPw,\n    mechanism: mechanism,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: userAllowDeletion,\n});\nconst testTopic = new redpanda.Topic(\"test\", {\n    name: topicName,\n    partitionCount: partitionCount,\n    replicationFactor: replicationFactor,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: true,\n    configuration: topicConfiguration != null ? topicConfiguration : {\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": topicRetentionMs,\n    },\n});\nconst topicAccess = new redpanda.Acl(\"topic_access\", {\n    resourceType: \"TOPIC\",\n    resourceName: testTopic.name,\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"READ\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\ntest = redpanda.ResourceGroup(\"test\", name=resource_group_name)\ntest_network = redpanda.Network(\"test\",\n    name=network_name,\n    resource_group_id=test.id,\n    cloud_provider=cloud_provider,\n    region=region,\n    cluster_type=\"byoc\",\n    cidr_block=\"10.0.0.0/20\")\ntest_cluster = redpanda.Cluster(\"test\",\n    name=cluster_name,\n    resource_group_id=test.id,\n    network_id=test_network.id,\n    cloud_provider=test_network.cloud_provider,\n    region=test_network.region,\n    cluster_type=test_network.cluster_type,\n    connection_type=\"public\",\n    throughput_tier=throughput_tier,\n    zones=zones,\n    allow_deletion=cluster_allow_deletion,\n    tags=cluster_tags,\n    timeouts={\n        \"create\": \"90m\",\n    })\ntest_user = redpanda.User(\"test\",\n    name=user_name,\n    password=user_pw,\n    mechanism=mechanism,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=user_allow_deletion)\ntest_topic = redpanda.Topic(\"test\",\n    name=topic_name,\n    partition_count=partition_count,\n    replication_factor=replication_factor,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=True,\n    configuration=topic_configuration if topic_configuration != None else {\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": topic_retention_ms,\n    })\ntopic_access = redpanda.Acl(\"topic_access\",\n    resource_type=\"TOPIC\",\n    resource_name_=test_topic.name,\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"READ\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var test = new Redpanda.ResourceGroup(\"test\", new()\n    {\n        Name = resourceGroupName,\n    });\n\n    var testNetwork = new Redpanda.Network(\"test\", new()\n    {\n        Name = networkName,\n        ResourceGroupId = test.Id,\n        CloudProvider = cloudProvider,\n        Region = region,\n        ClusterType = \"byoc\",\n        CidrBlock = \"10.0.0.0/20\",\n    });\n\n    var testCluster = new Redpanda.Cluster(\"test\", new()\n    {\n        Name = clusterName,\n        ResourceGroupId = test.Id,\n        NetworkId = testNetwork.Id,\n        CloudProvider = testNetwork.CloudProvider,\n        Region = testNetwork.Region,\n        ClusterType = testNetwork.ClusterType,\n        ConnectionType = \"public\",\n        ThroughputTier = throughputTier,\n        Zones = zones,\n        AllowDeletion = clusterAllowDeletion,\n        Tags = clusterTags,\n        Timeouts = new Redpanda.Inputs.ClusterTimeoutsArgs\n        {\n            Create = \"90m\",\n        },\n    });\n\n    var testUser = new Redpanda.User(\"test\", new()\n    {\n        Name = userName,\n        Password = userPw,\n        Mechanism = mechanism,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = userAllowDeletion,\n    });\n\n    var testTopic = new Redpanda.Topic(\"test\", new()\n    {\n        Name = topicName,\n        PartitionCount = partitionCount,\n        ReplicationFactor = replicationFactor,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = true,\n        Configuration = topicConfiguration != null ? topicConfiguration : \n        {\n            { \"cleanup.policy\", \"delete\" },\n            { \"retention.ms\", topicRetentionMs },\n        },\n    });\n\n    var topicAccess = new Redpanda.Acl(\"topic_access\", new()\n    {\n        ResourceType = \"TOPIC\",\n        ResourceName = testTopic.Name,\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"READ\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := redpanda.NewResourceGroup(ctx, \"test\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.Any(resourceGroupName),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestNetwork, err := redpanda.NewNetwork(ctx, \"test\", &redpanda.NetworkArgs{\n\t\t\tName:            pulumi.Any(networkName),\n\t\t\tResourceGroupId: test.ID(),\n\t\t\tCloudProvider:   pulumi.Any(cloudProvider),\n\t\t\tRegion:          pulumi.Any(region),\n\t\t\tClusterType:     pulumi.String(\"byoc\"),\n\t\t\tCidrBlock:       pulumi.String(\"10.0.0.0/20\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestCluster, err := redpanda.NewCluster(ctx, \"test\", &redpanda.ClusterArgs{\n\t\t\tName:            pulumi.Any(clusterName),\n\t\t\tResourceGroupId: test.ID(),\n\t\t\tNetworkId:       testNetwork.ID(),\n\t\t\tCloudProvider:   testNetwork.CloudProvider,\n\t\t\tRegion:          testNetwork.Region,\n\t\t\tClusterType:     testNetwork.ClusterType,\n\t\t\tConnectionType:  pulumi.String(\"public\"),\n\t\t\tThroughputTier:  pulumi.Any(throughputTier),\n\t\t\tZones:           pulumi.Any(zones),\n\t\t\tAllowDeletion:   pulumi.Any(clusterAllowDeletion),\n\t\t\tTags:            pulumi.Any(clusterTags),\n\t\t\tTimeouts: &redpanda.ClusterTimeoutsArgs{\n\t\t\t\tCreate: pulumi.String(\"90m\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestUser, err := redpanda.NewUser(ctx, \"test\", &redpanda.UserArgs{\n\t\t\tName:          pulumi.Any(userName),\n\t\t\tPassword:      pulumi.Any(userPw),\n\t\t\tMechanism:     pulumi.Any(mechanism),\n\t\t\tClusterApiUrl: testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Any(userAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvar tmp0 pulumi.StringMap\n\t\tif topicConfiguration != nil {\n\t\t\ttmp0 = pulumi.Any(topicConfiguration)\n\t\t} else {\n\t\t\ttmp0 = pulumi.StringMap{\n\t\t\t\t\"cleanup.policy\": pulumi.String(\"delete\"),\n\t\t\t\t\"retention.ms\":   pulumi.Any(topicRetentionMs),\n\t\t\t}\n\t\t}\n\t\ttestTopic, err := redpanda.NewTopic(ctx, \"test\", &redpanda.TopicArgs{\n\t\t\tName:              pulumi.Any(topicName),\n\t\t\tPartitionCount:    pulumi.Any(partitionCount),\n\t\t\tReplicationFactor: pulumi.Any(replicationFactor),\n\t\t\tClusterApiUrl:     testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:     pulumi.Bool(true),\n\t\t\tConfiguration:     pulumi.StringMap(tmp0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewAcl(ctx, \"topic_access\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"TOPIC\"),\n\t\t\tResourceName:        testTopic.Name,\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"READ\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.Network;\nimport com.pulumi.redpanda.NetworkArgs;\nimport com.pulumi.redpanda.Cluster;\nimport com.pulumi.redpanda.ClusterArgs;\nimport com.pulumi.redpanda.inputs.ClusterTimeoutsArgs;\nimport com.pulumi.redpanda.User;\nimport com.pulumi.redpanda.UserArgs;\nimport com.pulumi.redpanda.Topic;\nimport com.pulumi.redpanda.TopicArgs;\nimport com.pulumi.redpanda.Acl;\nimport com.pulumi.redpanda.AclArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 test = new ResourceGroup(\"test\", ResourceGroupArgs.builder()\n            .name(resourceGroupName)\n            .build());\n\n        var testNetwork = new Network(\"testNetwork\", NetworkArgs.builder()\n            .name(networkName)\n            .resourceGroupId(test.id())\n            .cloudProvider(cloudProvider)\n            .region(region)\n            .clusterType(\"byoc\")\n            .cidrBlock(\"10.0.0.0/20\")\n            .build());\n\n        var testCluster = new Cluster(\"testCluster\", ClusterArgs.builder()\n            .name(clusterName)\n            .resourceGroupId(test.id())\n            .networkId(testNetwork.id())\n            .cloudProvider(testNetwork.cloudProvider())\n            .region(testNetwork.region())\n            .clusterType(testNetwork.clusterType())\n            .connectionType(\"public\")\n            .throughputTier(throughputTier)\n            .zones(zones)\n            .allowDeletion(clusterAllowDeletion)\n            .tags(clusterTags)\n            .timeouts(ClusterTimeoutsArgs.builder()\n                .create(\"90m\")\n                .build())\n            .build());\n\n        var testUser = new User(\"testUser\", UserArgs.builder()\n            .name(userName)\n            .password(userPw)\n            .mechanism(mechanism)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(userAllowDeletion)\n            .build());\n\n        var testTopic = new Topic(\"testTopic\", TopicArgs.builder()\n            .name(topicName)\n            .partitionCount(partitionCount)\n            .replicationFactor(replicationFactor)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(true)\n            .configuration(topicConfiguration != null ? topicConfiguration : Map.ofEntries(\n                Map.entry(\"cleanup.policy\", \"delete\"),\n                Map.entry(\"retention.ms\", topicRetentionMs)\n            ))\n            .build());\n\n        var topicAccess = new Acl(\"topicAccess\", AclArgs.builder()\n            .resourceType(\"TOPIC\")\n            .resourceName(testTopic.name())\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"READ\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n    }\n}\n```\n<!--End PulumiCodeChooser -->\n\n### GCP BYOC\n\nTo create a GCP BYOC cluster you must provide a GCP_PROJECT_ID and GOOGLE_CREDENTIALS. We also accept the credentials encoded in base64 format if you use GOOGLE_CREDENTIALS_BASE64. The account [must have fairly wide ranging permissions](https://docs.redpanda.com/redpanda-cloud/security/authorization/cloud-iam-policies-gcp/) to create the necessary infrastructure.\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst test = new redpanda.ResourceGroup(\"test\", {name: resourceGroupName});\nconst testNetwork = new redpanda.Network(\"test\", {\n    name: networkName,\n    resourceGroupId: test.id,\n    cloudProvider: cloudProvider,\n    region: region,\n    clusterType: \"byoc\",\n    cidrBlock: \"10.0.0.0/20\",\n});\nconst testCluster = new redpanda.Cluster(\"test\", {\n    name: clusterName,\n    resourceGroupId: test.id,\n    networkId: testNetwork.id,\n    cloudProvider: testNetwork.cloudProvider,\n    region: testNetwork.region,\n    clusterType: testNetwork.clusterType,\n    connectionType: \"public\",\n    throughputTier: throughputTier,\n    zones: zones,\n    allowDeletion: clusterAllowDeletion,\n    tags: clusterTags,\n});\nconst testUser = new redpanda.User(\"test\", {\n    name: userName,\n    password: userPw,\n    mechanism: mechanism,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: userAllowDeletion,\n});\nconst testTopic = new redpanda.Topic(\"test\", {\n    name: topicName,\n    partitionCount: partitionCount,\n    replicationFactor: replicationFactor,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: true,\n    configuration: topicConfiguration != null ? topicConfiguration : {\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": topicRetentionMs,\n    },\n});\nconst topicAccess = new redpanda.Acl(\"topic_access\", {\n    resourceType: \"TOPIC\",\n    resourceName: testTopic.name,\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"READ\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\ntest = redpanda.ResourceGroup(\"test\", name=resource_group_name)\ntest_network = redpanda.Network(\"test\",\n    name=network_name,\n    resource_group_id=test.id,\n    cloud_provider=cloud_provider,\n    region=region,\n    cluster_type=\"byoc\",\n    cidr_block=\"10.0.0.0/20\")\ntest_cluster = redpanda.Cluster(\"test\",\n    name=cluster_name,\n    resource_group_id=test.id,\n    network_id=test_network.id,\n    cloud_provider=test_network.cloud_provider,\n    region=test_network.region,\n    cluster_type=test_network.cluster_type,\n    connection_type=\"public\",\n    throughput_tier=throughput_tier,\n    zones=zones,\n    allow_deletion=cluster_allow_deletion,\n    tags=cluster_tags)\ntest_user = redpanda.User(\"test\",\n    name=user_name,\n    password=user_pw,\n    mechanism=mechanism,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=user_allow_deletion)\ntest_topic = redpanda.Topic(\"test\",\n    name=topic_name,\n    partition_count=partition_count,\n    replication_factor=replication_factor,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=True,\n    configuration=topic_configuration if topic_configuration != None else {\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": topic_retention_ms,\n    })\ntopic_access = redpanda.Acl(\"topic_access\",\n    resource_type=\"TOPIC\",\n    resource_name_=test_topic.name,\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"READ\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var test = new Redpanda.ResourceGroup(\"test\", new()\n    {\n        Name = resourceGroupName,\n    });\n\n    var testNetwork = new Redpanda.Network(\"test\", new()\n    {\n        Name = networkName,\n        ResourceGroupId = test.Id,\n        CloudProvider = cloudProvider,\n        Region = region,\n        ClusterType = \"byoc\",\n        CidrBlock = \"10.0.0.0/20\",\n    });\n\n    var testCluster = new Redpanda.Cluster(\"test\", new()\n    {\n        Name = clusterName,\n        ResourceGroupId = test.Id,\n        NetworkId = testNetwork.Id,\n        CloudProvider = testNetwork.CloudProvider,\n        Region = testNetwork.Region,\n        ClusterType = testNetwork.ClusterType,\n        ConnectionType = \"public\",\n        ThroughputTier = throughputTier,\n        Zones = zones,\n        AllowDeletion = clusterAllowDeletion,\n        Tags = clusterTags,\n    });\n\n    var testUser = new Redpanda.User(\"test\", new()\n    {\n        Name = userName,\n        Password = userPw,\n        Mechanism = mechanism,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = userAllowDeletion,\n    });\n\n    var testTopic = new Redpanda.Topic(\"test\", new()\n    {\n        Name = topicName,\n        PartitionCount = partitionCount,\n        ReplicationFactor = replicationFactor,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = true,\n        Configuration = topicConfiguration != null ? topicConfiguration : \n        {\n            { \"cleanup.policy\", \"delete\" },\n            { \"retention.ms\", topicRetentionMs },\n        },\n    });\n\n    var topicAccess = new Redpanda.Acl(\"topic_access\", new()\n    {\n        ResourceType = \"TOPIC\",\n        ResourceName = testTopic.Name,\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"READ\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := redpanda.NewResourceGroup(ctx, \"test\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.Any(resourceGroupName),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestNetwork, err := redpanda.NewNetwork(ctx, \"test\", &redpanda.NetworkArgs{\n\t\t\tName:            pulumi.Any(networkName),\n\t\t\tResourceGroupId: test.ID(),\n\t\t\tCloudProvider:   pulumi.Any(cloudProvider),\n\t\t\tRegion:          pulumi.Any(region),\n\t\t\tClusterType:     pulumi.String(\"byoc\"),\n\t\t\tCidrBlock:       pulumi.String(\"10.0.0.0/20\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestCluster, err := redpanda.NewCluster(ctx, \"test\", &redpanda.ClusterArgs{\n\t\t\tName:            pulumi.Any(clusterName),\n\t\t\tResourceGroupId: test.ID(),\n\t\t\tNetworkId:       testNetwork.ID(),\n\t\t\tCloudProvider:   testNetwork.CloudProvider,\n\t\t\tRegion:          testNetwork.Region,\n\t\t\tClusterType:     testNetwork.ClusterType,\n\t\t\tConnectionType:  pulumi.String(\"public\"),\n\t\t\tThroughputTier:  pulumi.Any(throughputTier),\n\t\t\tZones:           pulumi.Any(zones),\n\t\t\tAllowDeletion:   pulumi.Any(clusterAllowDeletion),\n\t\t\tTags:            pulumi.Any(clusterTags),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestUser, err := redpanda.NewUser(ctx, \"test\", &redpanda.UserArgs{\n\t\t\tName:          pulumi.Any(userName),\n\t\t\tPassword:      pulumi.Any(userPw),\n\t\t\tMechanism:     pulumi.Any(mechanism),\n\t\t\tClusterApiUrl: testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Any(userAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvar tmp0 pulumi.StringMap\n\t\tif topicConfiguration != nil {\n\t\t\ttmp0 = pulumi.Any(topicConfiguration)\n\t\t} else {\n\t\t\ttmp0 = pulumi.StringMap{\n\t\t\t\t\"cleanup.policy\": pulumi.String(\"delete\"),\n\t\t\t\t\"retention.ms\":   pulumi.Any(topicRetentionMs),\n\t\t\t}\n\t\t}\n\t\ttestTopic, err := redpanda.NewTopic(ctx, \"test\", &redpanda.TopicArgs{\n\t\t\tName:              pulumi.Any(topicName),\n\t\t\tPartitionCount:    pulumi.Any(partitionCount),\n\t\t\tReplicationFactor: pulumi.Any(replicationFactor),\n\t\t\tClusterApiUrl:     testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:     pulumi.Bool(true),\n\t\t\tConfiguration:     pulumi.StringMap(tmp0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewAcl(ctx, \"topic_access\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"TOPIC\"),\n\t\t\tResourceName:        testTopic.Name,\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"READ\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.Network;\nimport com.pulumi.redpanda.NetworkArgs;\nimport com.pulumi.redpanda.Cluster;\nimport com.pulumi.redpanda.ClusterArgs;\nimport com.pulumi.redpanda.User;\nimport com.pulumi.redpanda.UserArgs;\nimport com.pulumi.redpanda.Topic;\nimport com.pulumi.redpanda.TopicArgs;\nimport com.pulumi.redpanda.Acl;\nimport com.pulumi.redpanda.AclArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 test = new ResourceGroup(\"test\", ResourceGroupArgs.builder()\n            .name(resourceGroupName)\n            .build());\n\n        var testNetwork = new Network(\"testNetwork\", NetworkArgs.builder()\n            .name(networkName)\n            .resourceGroupId(test.id())\n            .cloudProvider(cloudProvider)\n            .region(region)\n            .clusterType(\"byoc\")\n            .cidrBlock(\"10.0.0.0/20\")\n            .build());\n\n        var testCluster = new Cluster(\"testCluster\", ClusterArgs.builder()\n            .name(clusterName)\n            .resourceGroupId(test.id())\n            .networkId(testNetwork.id())\n            .cloudProvider(testNetwork.cloudProvider())\n            .region(testNetwork.region())\n            .clusterType(testNetwork.clusterType())\n            .connectionType(\"public\")\n            .throughputTier(throughputTier)\n            .zones(zones)\n            .allowDeletion(clusterAllowDeletion)\n            .tags(clusterTags)\n            .build());\n\n        var testUser = new User(\"testUser\", UserArgs.builder()\n            .name(userName)\n            .password(userPw)\n            .mechanism(mechanism)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(userAllowDeletion)\n            .build());\n\n        var testTopic = new Topic(\"testTopic\", TopicArgs.builder()\n            .name(topicName)\n            .partitionCount(partitionCount)\n            .replicationFactor(replicationFactor)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(true)\n            .configuration(topicConfiguration != null ? topicConfiguration : Map.ofEntries(\n                Map.entry(\"cleanup.policy\", \"delete\"),\n                Map.entry(\"retention.ms\", topicRetentionMs)\n            ))\n            .build());\n\n        var topicAccess = new Acl(\"topicAccess\", AclArgs.builder()\n            .resourceType(\"TOPIC\")\n            .resourceName(testTopic.name())\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"READ\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n    }\n}\n```\n<!--End PulumiCodeChooser -->\n\n### Azure BYOC\n\nTo create a BYOC Azure cluster you must provide Azure credentials, be logged in to the Azure CLI, or specify an Azure authentication method. This provider supports the same authentication methods and environment variables as the official AzureRM provider. For example, to use a service principal and client certificate, you can pass the environment variables `ARM_CLIENT_ID`, `ARM_CLIENT_SECRET`, `ARM_TENANT_ID`, and `ARM_SUBSCRIPTION_ID`.\n\nThe account [must have fairly wide ranging permissions](https://docs.redpanda.com/redpanda-cloud/security/authorization/cloud-iam-policies-azure/) to create the necessary infrastructure.\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst test = new redpanda.ResourceGroup(\"test\", {name: resourceGroupName});\nconst testNetwork = new redpanda.Network(\"test\", {\n    name: networkName,\n    resourceGroupId: test.id,\n    cloudProvider: cloudProvider,\n    region: region,\n    clusterType: \"byoc\",\n    cidrBlock: \"10.0.0.0/20\",\n});\nconst testCluster = new redpanda.Cluster(\"test\", {\n    name: clusterName,\n    resourceGroupId: test.id,\n    networkId: testNetwork.id,\n    cloudProvider: testNetwork.cloudProvider,\n    region: testNetwork.region,\n    clusterType: testNetwork.clusterType,\n    connectionType: \"public\",\n    throughputTier: throughputTier,\n    zones: zones,\n    allowDeletion: clusterAllowDeletion,\n    tags: clusterTags,\n});\nconst testUser = new redpanda.User(\"test\", {\n    name: userName,\n    password: userPw,\n    mechanism: mechanism,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: userAllowDeletion,\n});\nconst testTopic = new redpanda.Topic(\"test\", {\n    name: topicName,\n    partitionCount: partitionCount,\n    replicationFactor: replicationFactor,\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: true,\n    configuration: {\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": topicRetentionMs,\n    },\n});\nconst topicAccess = new redpanda.Acl(\"topic_access\", {\n    resourceType: \"TOPIC\",\n    resourceName: testTopic.name,\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"READ\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: testCluster.clusterApiUrl,\n    allowDeletion: aclAllowDeletion,\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\ntest = redpanda.ResourceGroup(\"test\", name=resource_group_name)\ntest_network = redpanda.Network(\"test\",\n    name=network_name,\n    resource_group_id=test.id,\n    cloud_provider=cloud_provider,\n    region=region,\n    cluster_type=\"byoc\",\n    cidr_block=\"10.0.0.0/20\")\ntest_cluster = redpanda.Cluster(\"test\",\n    name=cluster_name,\n    resource_group_id=test.id,\n    network_id=test_network.id,\n    cloud_provider=test_network.cloud_provider,\n    region=test_network.region,\n    cluster_type=test_network.cluster_type,\n    connection_type=\"public\",\n    throughput_tier=throughput_tier,\n    zones=zones,\n    allow_deletion=cluster_allow_deletion,\n    tags=cluster_tags)\ntest_user = redpanda.User(\"test\",\n    name=user_name,\n    password=user_pw,\n    mechanism=mechanism,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=user_allow_deletion)\ntest_topic = redpanda.Topic(\"test\",\n    name=topic_name,\n    partition_count=partition_count,\n    replication_factor=replication_factor,\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=True,\n    configuration={\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": topic_retention_ms,\n    })\ntopic_access = redpanda.Acl(\"topic_access\",\n    resource_type=\"TOPIC\",\n    resource_name_=test_topic.name,\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"READ\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test_cluster.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var test = new Redpanda.ResourceGroup(\"test\", new()\n    {\n        Name = resourceGroupName,\n    });\n\n    var testNetwork = new Redpanda.Network(\"test\", new()\n    {\n        Name = networkName,\n        ResourceGroupId = test.Id,\n        CloudProvider = cloudProvider,\n        Region = region,\n        ClusterType = \"byoc\",\n        CidrBlock = \"10.0.0.0/20\",\n    });\n\n    var testCluster = new Redpanda.Cluster(\"test\", new()\n    {\n        Name = clusterName,\n        ResourceGroupId = test.Id,\n        NetworkId = testNetwork.Id,\n        CloudProvider = testNetwork.CloudProvider,\n        Region = testNetwork.Region,\n        ClusterType = testNetwork.ClusterType,\n        ConnectionType = \"public\",\n        ThroughputTier = throughputTier,\n        Zones = zones,\n        AllowDeletion = clusterAllowDeletion,\n        Tags = clusterTags,\n    });\n\n    var testUser = new Redpanda.User(\"test\", new()\n    {\n        Name = userName,\n        Password = userPw,\n        Mechanism = mechanism,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = userAllowDeletion,\n    });\n\n    var testTopic = new Redpanda.Topic(\"test\", new()\n    {\n        Name = topicName,\n        PartitionCount = partitionCount,\n        ReplicationFactor = replicationFactor,\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = true,\n        Configuration = \n        {\n            { \"cleanup.policy\", \"delete\" },\n            { \"retention.ms\", topicRetentionMs },\n        },\n    });\n\n    var topicAccess = new Redpanda.Acl(\"topic_access\", new()\n    {\n        ResourceType = \"TOPIC\",\n        ResourceName = testTopic.Name,\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"READ\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = testCluster.ClusterApiUrl,\n        AllowDeletion = aclAllowDeletion,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := redpanda.NewResourceGroup(ctx, \"test\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.Any(resourceGroupName),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestNetwork, err := redpanda.NewNetwork(ctx, \"test\", &redpanda.NetworkArgs{\n\t\t\tName:            pulumi.Any(networkName),\n\t\t\tResourceGroupId: test.ID(),\n\t\t\tCloudProvider:   pulumi.Any(cloudProvider),\n\t\t\tRegion:          pulumi.Any(region),\n\t\t\tClusterType:     pulumi.String(\"byoc\"),\n\t\t\tCidrBlock:       pulumi.String(\"10.0.0.0/20\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestCluster, err := redpanda.NewCluster(ctx, \"test\", &redpanda.ClusterArgs{\n\t\t\tName:            pulumi.Any(clusterName),\n\t\t\tResourceGroupId: test.ID(),\n\t\t\tNetworkId:       testNetwork.ID(),\n\t\t\tCloudProvider:   testNetwork.CloudProvider,\n\t\t\tRegion:          testNetwork.Region,\n\t\t\tClusterType:     testNetwork.ClusterType,\n\t\t\tConnectionType:  pulumi.String(\"public\"),\n\t\t\tThroughputTier:  pulumi.Any(throughputTier),\n\t\t\tZones:           pulumi.Any(zones),\n\t\t\tAllowDeletion:   pulumi.Any(clusterAllowDeletion),\n\t\t\tTags:            pulumi.Any(clusterTags),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestUser, err := redpanda.NewUser(ctx, \"test\", &redpanda.UserArgs{\n\t\t\tName:          pulumi.Any(userName),\n\t\t\tPassword:      pulumi.Any(userPw),\n\t\t\tMechanism:     pulumi.Any(mechanism),\n\t\t\tClusterApiUrl: testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Any(userAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestTopic, err := redpanda.NewTopic(ctx, \"test\", &redpanda.TopicArgs{\n\t\t\tName:              pulumi.Any(topicName),\n\t\t\tPartitionCount:    pulumi.Any(partitionCount),\n\t\t\tReplicationFactor: pulumi.Any(replicationFactor),\n\t\t\tClusterApiUrl:     testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:     pulumi.Bool(true),\n\t\t\tConfiguration: pulumi.StringMap{\n\t\t\t\t\"cleanup.policy\": pulumi.String(\"delete\"),\n\t\t\t\t\"retention.ms\":   pulumi.Any(topicRetentionMs),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewAcl(ctx, \"topic_access\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"TOPIC\"),\n\t\t\tResourceName:        testTopic.Name,\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"READ\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  testCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.Network;\nimport com.pulumi.redpanda.NetworkArgs;\nimport com.pulumi.redpanda.Cluster;\nimport com.pulumi.redpanda.ClusterArgs;\nimport com.pulumi.redpanda.User;\nimport com.pulumi.redpanda.UserArgs;\nimport com.pulumi.redpanda.Topic;\nimport com.pulumi.redpanda.TopicArgs;\nimport com.pulumi.redpanda.Acl;\nimport com.pulumi.redpanda.AclArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 test = new ResourceGroup(\"test\", ResourceGroupArgs.builder()\n            .name(resourceGroupName)\n            .build());\n\n        var testNetwork = new Network(\"testNetwork\", NetworkArgs.builder()\n            .name(networkName)\n            .resourceGroupId(test.id())\n            .cloudProvider(cloudProvider)\n            .region(region)\n            .clusterType(\"byoc\")\n            .cidrBlock(\"10.0.0.0/20\")\n            .build());\n\n        var testCluster = new Cluster(\"testCluster\", ClusterArgs.builder()\n            .name(clusterName)\n            .resourceGroupId(test.id())\n            .networkId(testNetwork.id())\n            .cloudProvider(testNetwork.cloudProvider())\n            .region(testNetwork.region())\n            .clusterType(testNetwork.clusterType())\n            .connectionType(\"public\")\n            .throughputTier(throughputTier)\n            .zones(zones)\n            .allowDeletion(clusterAllowDeletion)\n            .tags(clusterTags)\n            .build());\n\n        var testUser = new User(\"testUser\", UserArgs.builder()\n            .name(userName)\n            .password(userPw)\n            .mechanism(mechanism)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(userAllowDeletion)\n            .build());\n\n        var testTopic = new Topic(\"testTopic\", TopicArgs.builder()\n            .name(topicName)\n            .partitionCount(partitionCount)\n            .replicationFactor(replicationFactor)\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(true)\n            .configuration(Map.ofEntries(\n                Map.entry(\"cleanup.policy\", \"delete\"),\n                Map.entry(\"retention.ms\", topicRetentionMs)\n            ))\n            .build());\n\n        var topicAccess = new Acl(\"topicAccess\", AclArgs.builder()\n            .resourceType(\"TOPIC\")\n            .resourceName(testTopic.name())\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"READ\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(testCluster.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  test:\n    type: redpanda:ResourceGroup\n    properties:\n      name: ${resourceGroupName}\n  testNetwork:\n    type: redpanda:Network\n    name: test\n    properties:\n      name: ${networkName}\n      resourceGroupId: ${test.id}\n      cloudProvider: ${cloudProvider}\n      region: ${region}\n      clusterType: byoc\n      cidrBlock: 10.0.0.0/20\n  testCluster:\n    type: redpanda:Cluster\n    name: test\n    properties:\n      name: ${clusterName}\n      resourceGroupId: ${test.id}\n      networkId: ${testNetwork.id}\n      cloudProvider: ${testNetwork.cloudProvider}\n      region: ${testNetwork.region}\n      clusterType: ${testNetwork.clusterType}\n      connectionType: public\n      throughputTier: ${throughputTier}\n      zones: ${zones}\n      allowDeletion: ${clusterAllowDeletion}\n      tags: ${clusterTags}\n  testUser:\n    type: redpanda:User\n    name: test\n    properties:\n      name: ${userName}\n      password: ${userPw}\n      mechanism: ${mechanism}\n      clusterApiUrl: ${testCluster.clusterApiUrl}\n      allowDeletion: ${userAllowDeletion}\n  testTopic:\n    type: redpanda:Topic\n    name: test\n    properties:\n      name: ${topicName}\n      partitionCount: ${partitionCount}\n      replicationFactor: ${replicationFactor}\n      clusterApiUrl: ${testCluster.clusterApiUrl}\n      allowDeletion: true\n      configuration:\n        cleanup.policy: delete\n        retention.ms: ${topicRetentionMs}\n  topicAccess:\n    type: redpanda:Acl\n    name: topic_access\n    properties:\n      resourceType: TOPIC\n      resourceName: ${testTopic.name}\n      resourcePatternType: LITERAL\n      principal: User:${testUser.name}\n      host: '*'\n      operation: READ\n      permissionType: ALLOW\n      clusterApiUrl: ${testCluster.clusterApiUrl}\n      allowDeletion: ${aclAllowDeletion}\n```\n<!--End PulumiCodeChooser -->\n\n## BYOVPC\n\nThis accepts a network and other elements created by the end user inside their cloud provider account (currently limited to AWS) and builds a Redpanda Cluster inside it.\n\nThere is a module provided for convenience of the end user here that handles the necessary setup. It contains outputs for the inputs the provider requires.\n\n### Example Usage of a data source BYOC to manage users and ACLs\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst test = redpanda.getCluster({\n    id: clusterId,\n});\nconst testTopic = new redpanda.Topic(\"test\", {\n    name: topicName,\n    partitionCount: partitionCount,\n    replicationFactor: replicationFactor,\n    clusterApiUrl: test.then(test => test.clusterApiUrl),\n    allowDeletion: true,\n    configuration: topicConfig,\n});\nconst testUser = new redpanda.User(\"test\", {\n    name: userName,\n    password: userPw,\n    mechanism: mechanism,\n    clusterApiUrl: test.then(test => test.clusterApiUrl),\n    allowDeletion: userAllowDeletion,\n});\nconst testAcl = new redpanda.Acl(\"test\", {\n    resourceType: \"CLUSTER\",\n    resourceName: \"kafka-cluster\",\n    resourcePatternType: \"LITERAL\",\n    principal: pulumi.interpolate`User:${testUser.name}`,\n    host: \"*\",\n    operation: \"ALTER\",\n    permissionType: \"ALLOW\",\n    clusterApiUrl: test.then(test => test.clusterApiUrl),\n    allowDeletion: aclAllowDeletion,\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\ntest = redpanda.get_cluster(id=cluster_id)\ntest_topic = redpanda.Topic(\"test\",\n    name=topic_name,\n    partition_count=partition_count,\n    replication_factor=replication_factor,\n    cluster_api_url=test.cluster_api_url,\n    allow_deletion=True,\n    configuration=topic_config)\ntest_user = redpanda.User(\"test\",\n    name=user_name,\n    password=user_pw,\n    mechanism=mechanism,\n    cluster_api_url=test.cluster_api_url,\n    allow_deletion=user_allow_deletion)\ntest_acl = redpanda.Acl(\"test\",\n    resource_type=\"CLUSTER\",\n    resource_name_=\"kafka-cluster\",\n    resource_pattern_type=\"LITERAL\",\n    principal=test_user.name.apply(lambda name: f\"User:{name}\"),\n    host=\"*\",\n    operation=\"ALTER\",\n    permission_type=\"ALLOW\",\n    cluster_api_url=test.cluster_api_url,\n    allow_deletion=acl_allow_deletion)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var test = Redpanda.GetCluster.Invoke(new()\n    {\n        Id = clusterId,\n    });\n\n    var testTopic = new Redpanda.Topic(\"test\", new()\n    {\n        Name = topicName,\n        PartitionCount = partitionCount,\n        ReplicationFactor = replicationFactor,\n        ClusterApiUrl = test.Apply(getClusterResult => getClusterResult.ClusterApiUrl),\n        AllowDeletion = true,\n        Configuration = topicConfig,\n    });\n\n    var testUser = new Redpanda.User(\"test\", new()\n    {\n        Name = userName,\n        Password = userPw,\n        Mechanism = mechanism,\n        ClusterApiUrl = test.Apply(getClusterResult => getClusterResult.ClusterApiUrl),\n        AllowDeletion = userAllowDeletion,\n    });\n\n    var testAcl = new Redpanda.Acl(\"test\", new()\n    {\n        ResourceType = \"CLUSTER\",\n        ResourceName = \"kafka-cluster\",\n        ResourcePatternType = \"LITERAL\",\n        Principal = testUser.Name.Apply(name => $\"User:{name}\"),\n        Host = \"*\",\n        Operation = \"ALTER\",\n        PermissionType = \"ALLOW\",\n        ClusterApiUrl = test.Apply(getClusterResult => getClusterResult.ClusterApiUrl),\n        AllowDeletion = aclAllowDeletion,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := redpanda.LookupCluster(ctx, &redpanda.LookupClusterArgs{\n\t\t\tId: clusterId,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewTopic(ctx, \"test\", &redpanda.TopicArgs{\n\t\t\tName:              pulumi.Any(topicName),\n\t\t\tPartitionCount:    pulumi.Any(partitionCount),\n\t\t\tReplicationFactor: pulumi.Any(replicationFactor),\n\t\t\tClusterApiUrl:     pulumi.String(test.ClusterApiUrl),\n\t\t\tAllowDeletion:     pulumi.Bool(true),\n\t\t\tConfiguration:     pulumi.Any(topicConfig),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestUser, err := redpanda.NewUser(ctx, \"test\", &redpanda.UserArgs{\n\t\t\tName:          pulumi.Any(userName),\n\t\t\tPassword:      pulumi.Any(userPw),\n\t\t\tMechanism:     pulumi.Any(mechanism),\n\t\t\tClusterApiUrl: pulumi.String(test.ClusterApiUrl),\n\t\t\tAllowDeletion: pulumi.Any(userAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewAcl(ctx, \"test\", &redpanda.AclArgs{\n\t\t\tResourceType:        pulumi.String(\"CLUSTER\"),\n\t\t\tResourceName:        pulumi.String(\"kafka-cluster\"),\n\t\t\tResourcePatternType: pulumi.String(\"LITERAL\"),\n\t\t\tPrincipal: testUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tHost:           pulumi.String(\"*\"),\n\t\t\tOperation:      pulumi.String(\"ALTER\"),\n\t\t\tPermissionType: pulumi.String(\"ALLOW\"),\n\t\t\tClusterApiUrl:  pulumi.String(test.ClusterApiUrl),\n\t\t\tAllowDeletion:  pulumi.Any(aclAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.RedpandaFunctions;\nimport com.pulumi.redpanda.inputs.GetClusterArgs;\nimport com.pulumi.redpanda.Topic;\nimport com.pulumi.redpanda.TopicArgs;\nimport com.pulumi.redpanda.User;\nimport com.pulumi.redpanda.UserArgs;\nimport com.pulumi.redpanda.Acl;\nimport com.pulumi.redpanda.AclArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 test = RedpandaFunctions.getCluster(GetClusterArgs.builder()\n            .id(clusterId)\n            .build());\n\n        var testTopic = new Topic(\"testTopic\", TopicArgs.builder()\n            .name(topicName)\n            .partitionCount(partitionCount)\n            .replicationFactor(replicationFactor)\n            .clusterApiUrl(test.clusterApiUrl())\n            .allowDeletion(true)\n            .configuration(topicConfig)\n            .build());\n\n        var testUser = new User(\"testUser\", UserArgs.builder()\n            .name(userName)\n            .password(userPw)\n            .mechanism(mechanism)\n            .clusterApiUrl(test.clusterApiUrl())\n            .allowDeletion(userAllowDeletion)\n            .build());\n\n        var testAcl = new Acl(\"testAcl\", AclArgs.builder()\n            .resourceType(\"CLUSTER\")\n            .resourceName(\"kafka-cluster\")\n            .resourcePatternType(\"LITERAL\")\n            .principal(testUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .host(\"*\")\n            .operation(\"ALTER\")\n            .permissionType(\"ALLOW\")\n            .clusterApiUrl(test.clusterApiUrl())\n            .allowDeletion(aclAllowDeletion)\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  testTopic:\n    type: redpanda:Topic\n    name: test\n    properties:\n      name: ${topicName}\n      partitionCount: ${partitionCount}\n      replicationFactor: ${replicationFactor}\n      clusterApiUrl: ${test.clusterApiUrl}\n      allowDeletion: true\n      configuration: ${topicConfig}\n  testUser:\n    type: redpanda:User\n    name: test\n    properties:\n      name: ${userName}\n      password: ${userPw}\n      mechanism: ${mechanism}\n      clusterApiUrl: ${test.clusterApiUrl}\n      allowDeletion: ${userAllowDeletion}\n  testAcl:\n    type: redpanda:Acl\n    name: test\n    properties:\n      resourceType: CLUSTER\n      resourceName: kafka-cluster\n      resourcePatternType: LITERAL\n      principal: User:${testUser.name}\n      host: '*'\n      operation: ALTER\n      permissionType: ALLOW\n      clusterApiUrl: ${test.clusterApiUrl}\n      allowDeletion: ${aclAllowDeletion}\nvariables:\n  test:\n    fn::invoke:\n      function: redpanda:getCluster\n      arguments:\n        id: ${clusterId}\n```\n<!--End PulumiCodeChooser -->\n\n## API Reference\n\nFor more information, see the [Redpanda Cloud Control Plane API documentation](https://docs.redpanda.com/api/cloud-controlplane-api/).\n\n## Import\n\n```sh\n$ pulumi import redpanda:index/cluster:Cluster example clusterId\n```\n\n","inputProperties":{"allowDeletion":{"description":"Resource will only be deleted when<span pulumi-lang-nodejs=\" allowDeletion \" pulumi-lang-dotnet=\" AllowDeletion \" pulumi-lang-go=\" allowDeletion \" pulumi-lang-python=\" allow_deletion \" pulumi-lang-yaml=\" allowDeletion \" pulumi-lang-java=\" allowDeletion \"> allow_deletion </span>is set to true. Otherwise deletion will fail with a related error.\n","type":"boolean"},"apiGatewayAccess":{"description":"Network access mode for an endpoint.\n","type":"string"},"awsPrivateLink":{"$ref":"#/types/redpanda:index%2FClusterAwsPrivateLink:ClusterAwsPrivateLink","description":"AWS Private Link configuration\n"},"azurePrivateLink":{"$ref":"#/types/redpanda:index%2FClusterAzurePrivateLink:ClusterAzurePrivateLink","description":"Azure Private Link configuration\n"},"cloudProvider":{"description":"Cloud provider where resources are created.\n","type":"string"},"cloudStorage":{"$ref":"#/types/redpanda:index%2FClusterCloudStorage:ClusterCloudStorage","description":"Cloud Storage configuration\n"},"clusterConfiguration":{"$ref":"#/types/redpanda:index%2FClusterClusterConfiguration:ClusterClusterConfiguration","description":"Cluster Configuration configuration\n"},"clusterType":{"description":"Cluster type. Type is immutable and can only be set on cluster creation. Can be either byoc or dedicated.\n","type":"string"},"connectionType":{"description":"Cluster connection type. Private clusters are not exposed to the internet. For BYOC clusters, private is best-practice\n","type":"string"},"customerManagedResources":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResources:ClusterCustomerManagedResources","description":"The cloud resources created by user.\n"},"gcpGlobalAccessApiGatewayEnabled":{"description":"gcp*global*access*api*gateway_enabled reports whether global access is enabled on the internal load balancer serving the Console/API Gateway endpoint. Applicable only for GCP.\n","type":"boolean"},"gcpPrivateServiceConnect":{"$ref":"#/types/redpanda:index%2FClusterGcpPrivateServiceConnect:ClusterGcpPrivateServiceConnect","description":"GCP Private Service Connect configuration\n"},"httpProxy":{"$ref":"#/types/redpanda:index%2FClusterHttpProxy:ClusterHttpProxy","description":"HTTP Proxy properties.\n"},"kafkaApi":{"$ref":"#/types/redpanda:index%2FClusterKafkaApi:ClusterKafkaApi","description":"Cluster's Kafka API properties.\n"},"kafkaConnect":{"$ref":"#/types/redpanda:index%2FClusterKafkaConnect:ClusterKafkaConnect","description":"Kafka Connect configuration\n"},"maintenanceWindowConfig":{"$ref":"#/types/redpanda:index%2FClusterMaintenanceWindowConfig:ClusterMaintenanceWindowConfig","description":"Resource describing the maintenance window configuration of a cluster.\n"},"name":{"description":"Unique name of the cluster.\n","type":"string"},"networkId":{"description":"Network ID where cluster is placed.\n","type":"string"},"readReplicaClusterIds":{"description":"IDs of clusters that can create read-only topics from this cluster\n","items":{"type":"string"},"type":"array"},"redpandaNodeCount":{"description":"Number of Redpanda broker nodes\n","type":"number"},"redpandaVersion":{"description":"Redpanda Version\n","type":"string"},"region":{"description":"Region represents the name of the region where the cluster will be provisioned.\n","type":"string"},"resourceGroupId":{"description":"Resource group ID of the cluster.\n","type":"string"},"rpsql":{"$ref":"#/types/redpanda:index%2FClusterRpsql:ClusterRpsql","description":"Rpsql configuration\n"},"schemaRegistry":{"$ref":"#/types/redpanda:index%2FClusterSchemaRegistry:ClusterSchemaRegistry","description":"Cluster's Schema Registry properties.\n"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags placed on cloud resources. Server-managed keys (prefixed with `redpanda-`) are filtered out of state.\n","type":"object"},"throughputTier":{"description":"Throughput tier of the cluster.\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FClusterTimeouts:ClusterTimeouts"},"zones":{"description":"Zones of the cluster. Must be valid zones within the selected region. If multiple zones are used, the cluster is a multi-AZ cluster.\n","items":{"type":"string"},"type":"array"}},"properties":{"allowDeletion":{"description":"Resource will only be deleted when<span pulumi-lang-nodejs=\" allowDeletion \" pulumi-lang-dotnet=\" AllowDeletion \" pulumi-lang-go=\" allowDeletion \" pulumi-lang-python=\" allow_deletion \" pulumi-lang-yaml=\" allowDeletion \" pulumi-lang-java=\" allowDeletion \"> allow_deletion </span>is set to true. Otherwise deletion will fail with a related error.\n","type":"boolean"},"apiGatewayAccess":{"description":"Network access mode for an endpoint.\n","type":"string"},"awsPrivateLink":{"$ref":"#/types/redpanda:index%2FClusterAwsPrivateLink:ClusterAwsPrivateLink","description":"AWS Private Link configuration\n"},"azurePrivateLink":{"$ref":"#/types/redpanda:index%2FClusterAzurePrivateLink:ClusterAzurePrivateLink","description":"Azure Private Link configuration\n"},"cloudProvider":{"description":"Cloud provider where resources are created.\n","type":"string"},"cloudStorage":{"$ref":"#/types/redpanda:index%2FClusterCloudStorage:ClusterCloudStorage","description":"Cloud Storage configuration\n"},"clusterApiUrl":{"description":"The URL of the cluster's data plane API\n","type":"string"},"clusterConfiguration":{"$ref":"#/types/redpanda:index%2FClusterClusterConfiguration:ClusterClusterConfiguration","description":"Cluster Configuration configuration\n"},"clusterType":{"description":"Cluster type. Type is immutable and can only be set on cluster creation. Can be either byoc or dedicated.\n","type":"string"},"connectionType":{"description":"Cluster connection type. Private clusters are not exposed to the internet. For BYOC clusters, private is best-practice\n","type":"string"},"currentRedpandaVersion":{"description":"Current Redpanda version of the cluster.\n","type":"string"},"customerManagedResources":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResources:ClusterCustomerManagedResources","description":"The cloud resources created by user.\n"},"desiredRedpandaVersion":{"description":"Desired Redpanda version of the cluster.\n","type":"string"},"gcpGlobalAccessApiGatewayEnabled":{"description":"gcp*global*access*api*gateway_enabled reports whether global access is enabled on the internal load balancer serving the Console/API Gateway endpoint. Applicable only for GCP.\n","type":"boolean"},"gcpGlobalAccessEnabled":{"description":"gcp*enable*global_access control if global access is enabled on the seed load balancer, applicable only for GCP. Default is false\n","type":"boolean"},"gcpPrivateServiceConnect":{"$ref":"#/types/redpanda:index%2FClusterGcpPrivateServiceConnect:ClusterGcpPrivateServiceConnect","description":"GCP Private Service Connect configuration\n"},"httpProxy":{"$ref":"#/types/redpanda:index%2FClusterHttpProxy:ClusterHttpProxy","description":"HTTP Proxy properties.\n"},"kafkaApi":{"$ref":"#/types/redpanda:index%2FClusterKafkaApi:ClusterKafkaApi","description":"Cluster's Kafka API properties.\n"},"kafkaConnect":{"$ref":"#/types/redpanda:index%2FClusterKafkaConnect:ClusterKafkaConnect","description":"Kafka Connect configuration\n"},"maintenanceWindowConfig":{"$ref":"#/types/redpanda:index%2FClusterMaintenanceWindowConfig:ClusterMaintenanceWindowConfig","description":"Resource describing the maintenance window configuration of a cluster.\n"},"name":{"description":"Unique name of the cluster.\n","type":"string"},"natGateways":{"description":"NAT gateway information for the cluster.\n","items":{"type":"string"},"type":"array"},"networkId":{"description":"Network ID where cluster is placed.\n","type":"string"},"prometheus":{"$ref":"#/types/redpanda:index%2FClusterPrometheus:ClusterPrometheus","description":"Prometheus metrics endpoint properties.\n"},"readReplicaClusterIds":{"description":"IDs of clusters that can create read-only topics from this cluster\n","items":{"type":"string"},"type":"array"},"redpandaConsole":{"$ref":"#/types/redpanda:index%2FClusterRedpandaConsole:ClusterRedpandaConsole","description":"Cluster's Redpanda Console properties.\n"},"redpandaNodeCount":{"description":"Number of Redpanda broker nodes\n","type":"number"},"redpandaVersion":{"description":"Redpanda Version\n","type":"string"},"region":{"description":"Region represents the name of the region where the cluster will be provisioned.\n","type":"string"},"resourceGroupId":{"description":"Resource group ID of the cluster.\n","type":"string"},"rpsql":{"$ref":"#/types/redpanda:index%2FClusterRpsql:ClusterRpsql","description":"Rpsql configuration\n"},"schemaRegistry":{"$ref":"#/types/redpanda:index%2FClusterSchemaRegistry:ClusterSchemaRegistry","description":"Cluster's Schema Registry properties.\n"},"state":{"description":"State describes the state of the cluster.\n","type":"string"},"stateDescription":{"$ref":"#/types/redpanda:index%2FClusterStateDescription:ClusterStateDescription","description":"Describes errors\n"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags placed on cloud resources. Server-managed keys (prefixed with `redpanda-`) are filtered out of state.\n","type":"object"},"throughputTier":{"description":"Throughput tier of the cluster.\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FClusterTimeouts:ClusterTimeouts"},"zones":{"description":"Zones of the cluster. Must be valid zones within the selected region. If multiple zones are used, the cluster is a multi-AZ cluster.\n","items":{"type":"string"},"type":"array"}},"required":["allowDeletion","apiGatewayAccess","awsPrivateLink","azurePrivateLink","cloudProvider","cloudStorage","clusterApiUrl","clusterConfiguration","clusterType","connectionType","currentRedpandaVersion","desiredRedpandaVersion","gcpGlobalAccessApiGatewayEnabled","gcpGlobalAccessEnabled","gcpPrivateServiceConnect","httpProxy","kafkaApi","kafkaConnect","maintenanceWindowConfig","name","natGateways","networkId","prometheus","redpandaConsole","redpandaNodeCount","region","resourceGroupId","rpsql","schemaRegistry","state","stateDescription","tags","throughputTier","zones"],"requiredInputs":["cloudProvider","connectionType","networkId","region","resourceGroupId","throughputTier","zones"],"stateInputs":{"description":"Input properties used for looking up and filtering Cluster resources.\n","properties":{"allowDeletion":{"description":"Resource will only be deleted when<span pulumi-lang-nodejs=\" allowDeletion \" pulumi-lang-dotnet=\" AllowDeletion \" pulumi-lang-go=\" allowDeletion \" pulumi-lang-python=\" allow_deletion \" pulumi-lang-yaml=\" allowDeletion \" pulumi-lang-java=\" allowDeletion \"> allow_deletion </span>is set to true. Otherwise deletion will fail with a related error.\n","type":"boolean"},"apiGatewayAccess":{"description":"Network access mode for an endpoint.\n","type":"string"},"awsPrivateLink":{"$ref":"#/types/redpanda:index%2FClusterAwsPrivateLink:ClusterAwsPrivateLink","description":"AWS Private Link configuration\n"},"azurePrivateLink":{"$ref":"#/types/redpanda:index%2FClusterAzurePrivateLink:ClusterAzurePrivateLink","description":"Azure Private Link configuration\n"},"cloudProvider":{"description":"Cloud provider where resources are created.\n","type":"string"},"cloudStorage":{"$ref":"#/types/redpanda:index%2FClusterCloudStorage:ClusterCloudStorage","description":"Cloud Storage configuration\n"},"clusterApiUrl":{"description":"The URL of the cluster's data plane API\n","type":"string"},"clusterConfiguration":{"$ref":"#/types/redpanda:index%2FClusterClusterConfiguration:ClusterClusterConfiguration","description":"Cluster Configuration configuration\n"},"clusterType":{"description":"Cluster type. Type is immutable and can only be set on cluster creation. Can be either byoc or dedicated.\n","type":"string"},"connectionType":{"description":"Cluster connection type. Private clusters are not exposed to the internet. For BYOC clusters, private is best-practice\n","type":"string"},"currentRedpandaVersion":{"description":"Current Redpanda version of the cluster.\n","type":"string"},"customerManagedResources":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResources:ClusterCustomerManagedResources","description":"The cloud resources created by user.\n"},"desiredRedpandaVersion":{"description":"Desired Redpanda version of the cluster.\n","type":"string"},"gcpGlobalAccessApiGatewayEnabled":{"description":"gcp*global*access*api*gateway_enabled reports whether global access is enabled on the internal load balancer serving the Console/API Gateway endpoint. Applicable only for GCP.\n","type":"boolean"},"gcpGlobalAccessEnabled":{"description":"gcp*enable*global_access control if global access is enabled on the seed load balancer, applicable only for GCP. Default is false\n","type":"boolean"},"gcpPrivateServiceConnect":{"$ref":"#/types/redpanda:index%2FClusterGcpPrivateServiceConnect:ClusterGcpPrivateServiceConnect","description":"GCP Private Service Connect configuration\n"},"httpProxy":{"$ref":"#/types/redpanda:index%2FClusterHttpProxy:ClusterHttpProxy","description":"HTTP Proxy properties.\n"},"kafkaApi":{"$ref":"#/types/redpanda:index%2FClusterKafkaApi:ClusterKafkaApi","description":"Cluster's Kafka API properties.\n"},"kafkaConnect":{"$ref":"#/types/redpanda:index%2FClusterKafkaConnect:ClusterKafkaConnect","description":"Kafka Connect configuration\n"},"maintenanceWindowConfig":{"$ref":"#/types/redpanda:index%2FClusterMaintenanceWindowConfig:ClusterMaintenanceWindowConfig","description":"Resource describing the maintenance window configuration of a cluster.\n"},"name":{"description":"Unique name of the cluster.\n","type":"string"},"natGateways":{"description":"NAT gateway information for the cluster.\n","items":{"type":"string"},"type":"array"},"networkId":{"description":"Network ID where cluster is placed.\n","type":"string"},"prometheus":{"$ref":"#/types/redpanda:index%2FClusterPrometheus:ClusterPrometheus","description":"Prometheus metrics endpoint properties.\n"},"readReplicaClusterIds":{"description":"IDs of clusters that can create read-only topics from this cluster\n","items":{"type":"string"},"type":"array"},"redpandaConsole":{"$ref":"#/types/redpanda:index%2FClusterRedpandaConsole:ClusterRedpandaConsole","description":"Cluster's Redpanda Console properties.\n"},"redpandaNodeCount":{"description":"Number of Redpanda broker nodes\n","type":"number"},"redpandaVersion":{"description":"Redpanda Version\n","type":"string"},"region":{"description":"Region represents the name of the region where the cluster will be provisioned.\n","type":"string"},"resourceGroupId":{"description":"Resource group ID of the cluster.\n","type":"string"},"rpsql":{"$ref":"#/types/redpanda:index%2FClusterRpsql:ClusterRpsql","description":"Rpsql configuration\n"},"schemaRegistry":{"$ref":"#/types/redpanda:index%2FClusterSchemaRegistry:ClusterSchemaRegistry","description":"Cluster's Schema Registry properties.\n"},"state":{"description":"State describes the state of the cluster.\n","type":"string"},"stateDescription":{"$ref":"#/types/redpanda:index%2FClusterStateDescription:ClusterStateDescription","description":"Describes errors\n"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags placed on cloud resources. Server-managed keys (prefixed with `redpanda-`) are filtered out of state.\n","type":"object"},"throughputTier":{"description":"Throughput tier of the cluster.\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FClusterTimeouts:ClusterTimeouts"},"zones":{"description":"Zones of the cluster. Must be valid zones within the selected region. If multiple zones are used, the cluster is a multi-AZ cluster.\n","items":{"type":"string"},"type":"array"}},"type":"object"},"type":"object"},"redpanda:index/network:Network":{"description":"Network represents a Redpanda Cloud managed network\n\nCreates a network in the Redpanda Cloud.\n\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = new redpanda.ResourceGroup(\"example\", {name: \"example-resource-group\"});\nconst exampleNetwork = new redpanda.Network(\"example\", {\n    name: \"example-network\",\n    resourceGroupId: example.id,\n    cloudProvider: \"aws\",\n    region: \"us-west-2\",\n    clusterType: \"dedicated\",\n    cidrBlock: \"10.0.0.0/20\",\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.ResourceGroup(\"example\", name=\"example-resource-group\")\nexample_network = redpanda.Network(\"example\",\n    name=\"example-network\",\n    resource_group_id=example.id,\n    cloud_provider=\"aws\",\n    region=\"us-west-2\",\n    cluster_type=\"dedicated\",\n    cidr_block=\"10.0.0.0/20\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = new Redpanda.ResourceGroup(\"example\", new()\n    {\n        Name = \"example-resource-group\",\n    });\n\n    var exampleNetwork = new Redpanda.Network(\"example\", new()\n    {\n        Name = \"example-network\",\n        ResourceGroupId = example.Id,\n        CloudProvider = \"aws\",\n        Region = \"us-west-2\",\n        ClusterType = \"dedicated\",\n        CidrBlock = \"10.0.0.0/20\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := redpanda.NewResourceGroup(ctx, \"example\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.String(\"example-resource-group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewNetwork(ctx, \"example\", &redpanda.NetworkArgs{\n\t\t\tName:            pulumi.String(\"example-network\"),\n\t\t\tResourceGroupId: example.ID(),\n\t\t\tCloudProvider:   pulumi.String(\"aws\"),\n\t\t\tRegion:          pulumi.String(\"us-west-2\"),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tCidrBlock:       pulumi.String(\"10.0.0.0/20\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.Network;\nimport com.pulumi.redpanda.NetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ResourceGroup(\"example\", ResourceGroupArgs.builder()\n            .name(\"example-resource-group\")\n            .build());\n\n        var exampleNetwork = new Network(\"exampleNetwork\", NetworkArgs.builder()\n            .name(\"example-network\")\n            .resourceGroupId(example.id())\n            .cloudProvider(\"aws\")\n            .region(\"us-west-2\")\n            .clusterType(\"dedicated\")\n            .cidrBlock(\"10.0.0.0/20\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: redpanda:ResourceGroup\n    properties:\n      name: example-resource-group\n  exampleNetwork:\n    type: redpanda:Network\n    name: example\n    properties:\n      name: example-network\n      resourceGroupId: ${example.id}\n      cloudProvider: aws\n      region: us-west-2\n      clusterType: dedicated\n      cidrBlock: 10.0.0.0/20\n```\n<!--End PulumiCodeChooser -->\n\n## API Reference\n\nFor more information, see the [Redpanda Cloud Control Plane API documentation](https://docs.redpanda.com/api/cloud-controlplane-api/).\n\n## Import\n\n```sh\n$ pulumi import redpanda:index/network:Network example networkId\n```\n\n","inputProperties":{"cidrBlock":{"description":"The<span pulumi-lang-nodejs=\" cidrBlock \" pulumi-lang-dotnet=\" CidrBlock \" pulumi-lang-go=\" cidrBlock \" pulumi-lang-python=\" cidr_block \" pulumi-lang-yaml=\" cidrBlock \" pulumi-lang-java=\" cidrBlock \"> cidr_block </span>to create the network in\n","type":"string"},"cloudProvider":{"description":"The cloud provider to create the network in.\n","type":"string"},"clusterType":{"description":"The type of cluster this network is associated with, can be one of dedicated or byoc\n","type":"string"},"customerManagedResources":{"$ref":"#/types/redpanda:index%2FNetworkCustomerManagedResources:NetworkCustomerManagedResources","description":"Cloud resources created by user.\n"},"name":{"description":"Name of the network\n","type":"string"},"region":{"description":"The region to create the network in.\n","type":"string"},"resourceGroupId":{"description":"The ID of the resource group in which to create the network. Must be a valid UUID.\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FNetworkTimeouts:NetworkTimeouts"}},"properties":{"cidrBlock":{"description":"The<span pulumi-lang-nodejs=\" cidrBlock \" pulumi-lang-dotnet=\" CidrBlock \" pulumi-lang-go=\" cidrBlock \" pulumi-lang-python=\" cidr_block \" pulumi-lang-yaml=\" cidrBlock \" pulumi-lang-java=\" cidrBlock \"> cidr_block </span>to create the network in\n","type":"string"},"cloudProvider":{"description":"The cloud provider to create the network in.\n","type":"string"},"clusterType":{"description":"The type of cluster this network is associated with, can be one of dedicated or byoc\n","type":"string"},"customerManagedResources":{"$ref":"#/types/redpanda:index%2FNetworkCustomerManagedResources:NetworkCustomerManagedResources","description":"Cloud resources created by user.\n"},"name":{"description":"Name of the network\n","type":"string"},"region":{"description":"The region to create the network in.\n","type":"string"},"resourceGroupId":{"description":"The ID of the resource group in which to create the network. Must be a valid UUID.\n","type":"string"},"state":{"description":"Current state of the network.\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FNetworkTimeouts:NetworkTimeouts"},"zones":{"description":"Network availability zones.\n","items":{"type":"string"},"type":"array"}},"required":["cloudProvider","clusterType","name","region","resourceGroupId","state","zones"],"requiredInputs":["cloudProvider","clusterType","region","resourceGroupId"],"stateInputs":{"description":"Input properties used for looking up and filtering Network resources.\n","properties":{"cidrBlock":{"description":"The<span pulumi-lang-nodejs=\" cidrBlock \" pulumi-lang-dotnet=\" CidrBlock \" pulumi-lang-go=\" cidrBlock \" pulumi-lang-python=\" cidr_block \" pulumi-lang-yaml=\" cidrBlock \" pulumi-lang-java=\" cidrBlock \"> cidr_block </span>to create the network in\n","type":"string"},"cloudProvider":{"description":"The cloud provider to create the network in.\n","type":"string"},"clusterType":{"description":"The type of cluster this network is associated with, can be one of dedicated or byoc\n","type":"string"},"customerManagedResources":{"$ref":"#/types/redpanda:index%2FNetworkCustomerManagedResources:NetworkCustomerManagedResources","description":"Cloud resources created by user.\n"},"name":{"description":"Name of the network\n","type":"string"},"region":{"description":"The region to create the network in.\n","type":"string"},"resourceGroupId":{"description":"The ID of the resource group in which to create the network. Must be a valid UUID.\n","type":"string"},"state":{"description":"Current state of the network.\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FNetworkTimeouts:NetworkTimeouts"},"zones":{"description":"Network availability zones.\n","items":{"type":"string"},"type":"array"}},"type":"object"},"type":"object"},"redpanda:index/pipeline:Pipeline":{"description":"Pipeline represents a Redpanda Connect pipeline\n\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = new redpanda.ResourceGroup(\"example\", {name: \"example-resource-group\"});\nconst exampleNetwork = new redpanda.Network(\"example\", {\n    name: \"example-network\",\n    resourceGroupId: example.id,\n    cloudProvider: \"aws\",\n    region: \"us-west-2\",\n    clusterType: \"dedicated\",\n    cidrBlock: \"10.0.0.0/20\",\n});\nconst exampleCluster = new redpanda.Cluster(\"example\", {\n    name: \"example-cluster\",\n    resourceGroupId: example.id,\n    networkId: exampleNetwork.id,\n    cloudProvider: \"aws\",\n    region: \"us-west-2\",\n    clusterType: \"dedicated\",\n    connectionType: \"public\",\n    throughputTier: \"tier-1-aws-v2-arm\",\n    zones: [\n        \"usw2-az1\",\n        \"usw2-az2\",\n        \"usw2-az3\",\n    ],\n});\nconst examplePipeline = new redpanda.Pipeline(\"example\", {\n    clusterApiUrl: exampleCluster.clusterApiUrl,\n    displayName: \"example-pipeline\",\n    description: \"An example Redpanda Connect pipeline\",\n    state: \"stopped\",\n    configYaml: `input:\n  generate:\n    interval: \\\\\"1s\\\\\"\n    mapping: |\n      root.message = \\\\\"hello world\\\\\"\n      root.timestamp = now()\n\noutput:\n  stdout: {}\n`,\n    resources: {\n        memoryShares: \"256Mi\",\n        cpuShares: \"200m\",\n    },\n    tags: {\n        environment: \"example\",\n        \"managed-by\": \"terraform\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.ResourceGroup(\"example\", name=\"example-resource-group\")\nexample_network = redpanda.Network(\"example\",\n    name=\"example-network\",\n    resource_group_id=example.id,\n    cloud_provider=\"aws\",\n    region=\"us-west-2\",\n    cluster_type=\"dedicated\",\n    cidr_block=\"10.0.0.0/20\")\nexample_cluster = redpanda.Cluster(\"example\",\n    name=\"example-cluster\",\n    resource_group_id=example.id,\n    network_id=example_network.id,\n    cloud_provider=\"aws\",\n    region=\"us-west-2\",\n    cluster_type=\"dedicated\",\n    connection_type=\"public\",\n    throughput_tier=\"tier-1-aws-v2-arm\",\n    zones=[\n        \"usw2-az1\",\n        \"usw2-az2\",\n        \"usw2-az3\",\n    ])\nexample_pipeline = redpanda.Pipeline(\"example\",\n    cluster_api_url=example_cluster.cluster_api_url,\n    display_name=\"example-pipeline\",\n    description=\"An example Redpanda Connect pipeline\",\n    state=\"stopped\",\n    config_yaml=\"\"\"input:\n  generate:\n    interval: \\\"1s\\\"\n    mapping: |\n      root.message = \\\"hello world\\\"\n      root.timestamp = now()\n\noutput:\n  stdout: {}\n\"\"\",\n    resources={\n        \"memory_shares\": \"256Mi\",\n        \"cpu_shares\": \"200m\",\n    },\n    tags={\n        \"environment\": \"example\",\n        \"managed-by\": \"terraform\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = new Redpanda.ResourceGroup(\"example\", new()\n    {\n        Name = \"example-resource-group\",\n    });\n\n    var exampleNetwork = new Redpanda.Network(\"example\", new()\n    {\n        Name = \"example-network\",\n        ResourceGroupId = example.Id,\n        CloudProvider = \"aws\",\n        Region = \"us-west-2\",\n        ClusterType = \"dedicated\",\n        CidrBlock = \"10.0.0.0/20\",\n    });\n\n    var exampleCluster = new Redpanda.Cluster(\"example\", new()\n    {\n        Name = \"example-cluster\",\n        ResourceGroupId = example.Id,\n        NetworkId = exampleNetwork.Id,\n        CloudProvider = \"aws\",\n        Region = \"us-west-2\",\n        ClusterType = \"dedicated\",\n        ConnectionType = \"public\",\n        ThroughputTier = \"tier-1-aws-v2-arm\",\n        Zones = new[]\n        {\n            \"usw2-az1\",\n            \"usw2-az2\",\n            \"usw2-az3\",\n        },\n    });\n\n    var examplePipeline = new Redpanda.Pipeline(\"example\", new()\n    {\n        ClusterApiUrl = exampleCluster.ClusterApiUrl,\n        DisplayName = \"example-pipeline\",\n        Description = \"An example Redpanda Connect pipeline\",\n        State = \"stopped\",\n        ConfigYaml = @\"input:\n  generate:\n    interval: \\\"\"1s\\\"\"\n    mapping: |\n      root.message = \\\"\"hello world\\\"\"\n      root.timestamp = now()\n\noutput:\n  stdout: {}\n\",\n        Resources = new Redpanda.Inputs.PipelineResourcesArgs\n        {\n            MemoryShares = \"256Mi\",\n            CpuShares = \"200m\",\n        },\n        Tags = \n        {\n            { \"environment\", \"example\" },\n            { \"managed-by\", \"terraform\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := redpanda.NewResourceGroup(ctx, \"example\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.String(\"example-resource-group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleNetwork, err := redpanda.NewNetwork(ctx, \"example\", &redpanda.NetworkArgs{\n\t\t\tName:            pulumi.String(\"example-network\"),\n\t\t\tResourceGroupId: example.ID(),\n\t\t\tCloudProvider:   pulumi.String(\"aws\"),\n\t\t\tRegion:          pulumi.String(\"us-west-2\"),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tCidrBlock:       pulumi.String(\"10.0.0.0/20\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleCluster, err := redpanda.NewCluster(ctx, \"example\", &redpanda.ClusterArgs{\n\t\t\tName:            pulumi.String(\"example-cluster\"),\n\t\t\tResourceGroupId: example.ID(),\n\t\t\tNetworkId:       exampleNetwork.ID(),\n\t\t\tCloudProvider:   pulumi.String(\"aws\"),\n\t\t\tRegion:          pulumi.String(\"us-west-2\"),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tConnectionType:  pulumi.String(\"public\"),\n\t\t\tThroughputTier:  pulumi.String(\"tier-1-aws-v2-arm\"),\n\t\t\tZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"usw2-az1\"),\n\t\t\t\tpulumi.String(\"usw2-az2\"),\n\t\t\t\tpulumi.String(\"usw2-az3\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewPipeline(ctx, \"example\", &redpanda.PipelineArgs{\n\t\t\tClusterApiUrl: exampleCluster.ClusterApiUrl,\n\t\t\tDisplayName:   pulumi.String(\"example-pipeline\"),\n\t\t\tDescription:   pulumi.String(\"An example Redpanda Connect pipeline\"),\n\t\t\tState:         pulumi.String(\"stopped\"),\n\t\t\tConfigYaml: pulumi.String(`input:\n  generate:\n    interval: \\\"1s\\\"\n    mapping: |\n      root.message = \\\"hello world\\\"\n      root.timestamp = now()\n\noutput:\n  stdout: {}\n`),\n\t\t\tResources: &redpanda.PipelineResourcesArgs{\n\t\t\t\tMemoryShares: pulumi.String(\"256Mi\"),\n\t\t\t\tCpuShares:    pulumi.String(\"200m\"),\n\t\t\t},\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"environment\": pulumi.String(\"example\"),\n\t\t\t\t\"managed-by\":  pulumi.String(\"terraform\"),\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.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.Network;\nimport com.pulumi.redpanda.NetworkArgs;\nimport com.pulumi.redpanda.Cluster;\nimport com.pulumi.redpanda.ClusterArgs;\nimport com.pulumi.redpanda.Pipeline;\nimport com.pulumi.redpanda.PipelineArgs;\nimport com.pulumi.redpanda.inputs.PipelineResourcesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ResourceGroup(\"example\", ResourceGroupArgs.builder()\n            .name(\"example-resource-group\")\n            .build());\n\n        var exampleNetwork = new Network(\"exampleNetwork\", NetworkArgs.builder()\n            .name(\"example-network\")\n            .resourceGroupId(example.id())\n            .cloudProvider(\"aws\")\n            .region(\"us-west-2\")\n            .clusterType(\"dedicated\")\n            .cidrBlock(\"10.0.0.0/20\")\n            .build());\n\n        var exampleCluster = new Cluster(\"exampleCluster\", ClusterArgs.builder()\n            .name(\"example-cluster\")\n            .resourceGroupId(example.id())\n            .networkId(exampleNetwork.id())\n            .cloudProvider(\"aws\")\n            .region(\"us-west-2\")\n            .clusterType(\"dedicated\")\n            .connectionType(\"public\")\n            .throughputTier(\"tier-1-aws-v2-arm\")\n            .zones(            \n                \"usw2-az1\",\n                \"usw2-az2\",\n                \"usw2-az3\")\n            .build());\n\n        var examplePipeline = new Pipeline(\"examplePipeline\", PipelineArgs.builder()\n            .clusterApiUrl(exampleCluster.clusterApiUrl())\n            .displayName(\"example-pipeline\")\n            .description(\"An example Redpanda Connect pipeline\")\n            .state(\"stopped\")\n            .configYaml(\"\"\"\ninput:\n  generate:\n    interval: \\\"1s\\\"\n    mapping: |\n      root.message = \\\"hello world\\\"\n      root.timestamp = now()\n\noutput:\n  stdout: {}\n            \"\"\")\n            .resources(PipelineResourcesArgs.builder()\n                .memoryShares(\"256Mi\")\n                .cpuShares(\"200m\")\n                .build())\n            .tags(Map.ofEntries(\n                Map.entry(\"environment\", \"example\"),\n                Map.entry(\"managed-by\", \"terraform\")\n            ))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: redpanda:ResourceGroup\n    properties:\n      name: example-resource-group\n  exampleNetwork:\n    type: redpanda:Network\n    name: example\n    properties:\n      name: example-network\n      resourceGroupId: ${example.id}\n      cloudProvider: aws\n      region: us-west-2\n      clusterType: dedicated\n      cidrBlock: 10.0.0.0/20\n  exampleCluster:\n    type: redpanda:Cluster\n    name: example\n    properties:\n      name: example-cluster\n      resourceGroupId: ${example.id}\n      networkId: ${exampleNetwork.id}\n      cloudProvider: aws\n      region: us-west-2\n      clusterType: dedicated\n      connectionType: public\n      throughputTier: tier-1-aws-v2-arm\n      zones:\n        - usw2-az1\n        - usw2-az2\n        - usw2-az3\n  examplePipeline:\n    type: redpanda:Pipeline\n    name: example\n    properties:\n      clusterApiUrl: ${exampleCluster.clusterApiUrl}\n      displayName: example-pipeline\n      description: An example Redpanda Connect pipeline\n      state: stopped\n      configYaml: |\n        input:\n          generate:\n            interval: \\\"1s\\\"\n            mapping: |\n              root.message = \\\"hello world\\\"\n              root.timestamp = now()\n\n        output:\n          stdout: {}\n      resources:\n        memoryShares: 256Mi\n        cpuShares: 200m\n      tags:\n        environment: example\n        managed-by: terraform\n```\n<!--End PulumiCodeChooser -->\n\n## API Reference\n\nFor more information, see the [Redpanda Cloud Data Plane API documentation](https://docs.redpanda.com/api/cloud-dataplane-api/).\n\n## Import\n\n```sh\n$ pulumi import redpanda:index/pipeline:Pipeline example pipelineId,clusterId\n```\n\nWhere `pipelineId` is the ID of the pipeline and `clusterId` is the ID of the cluster in Redpanda Cloud.\n\n","inputProperties":{"allowDeletion":{"description":"Allows deletion of the pipeline. Default is false. Must be set to true to delete the resource.\n","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports.\n","type":"string"},"configYaml":{"description":"The Redpanda Connect pipeline configuration in YAML format. See the [Redpanda Connect Configuration](https://docs.redpanda.com/redpanda-cloud/develop/connect/configuration/about) documentation for more details.\n","secret":true,"type":"string"},"description":{"description":"Optional pipeline description. Length must be at most 256.\n","type":"string"},"displayName":{"description":"User-friendly pipeline name. Length must be between 3 and 128. Must match pattern `^[A-Za-z0-9-_ /]+$`.\n","type":"string"},"resources":{"$ref":"#/types/redpanda:index%2FPipelineResources:PipelineResources","description":"Resources configuration\n"},"serviceAccount":{"$ref":"#/types/redpanda:index%2FPipelineServiceAccount:PipelineServiceAccount","description":"Service Account configuration\n"},"state":{"description":"Desired state of the pipeline: 'running' or 'stopped'. The provider will ensure the pipeline reaches this state after create/update operations.\n","type":"string"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags are key-value pairs that can be assigned to a pipeline resource. They help organize pipelines and enable filtering when listing them. Must have at most 16 entries.\n","type":"object"},"timeouts":{"$ref":"#/types/redpanda:index%2FPipelineTimeouts:PipelineTimeouts"}},"properties":{"allowDeletion":{"description":"Allows deletion of the pipeline. Default is false. Must be set to true to delete the resource.\n","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports.\n","type":"string"},"configYaml":{"description":"The Redpanda Connect pipeline configuration in YAML format. See the [Redpanda Connect Configuration](https://docs.redpanda.com/redpanda-cloud/develop/connect/configuration/about) documentation for more details.\n","secret":true,"type":"string"},"description":{"description":"Optional pipeline description. Length must be at most 256.\n","type":"string"},"displayName":{"description":"User-friendly pipeline name. Length must be between 3 and 128. Must match pattern `^[A-Za-z0-9-_ /]+$`.\n","type":"string"},"resources":{"$ref":"#/types/redpanda:index%2FPipelineResources:PipelineResources","description":"Resources configuration\n"},"serviceAccount":{"$ref":"#/types/redpanda:index%2FPipelineServiceAccount:PipelineServiceAccount","description":"Service Account configuration\n"},"state":{"description":"Desired state of the pipeline: 'running' or 'stopped'. The provider will ensure the pipeline reaches this state after create/update operations.\n","type":"string"},"status":{"$ref":"#/types/redpanda:index%2FPipelineStatus:PipelineStatus","description":"Pipeline status may contain an error message.\n"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags are key-value pairs that can be assigned to a pipeline resource. They help organize pipelines and enable filtering when listing them. Must have at most 16 entries.\n","type":"object"},"timeouts":{"$ref":"#/types/redpanda:index%2FPipelineTimeouts:PipelineTimeouts"},"url":{"description":"URL to connect to the pipeline, for example, via http*server. May be empty if no http*server is used.\n","type":"string"}},"required":["allowDeletion","clusterApiUrl","configYaml","displayName","resources","state","status","url"],"requiredInputs":["clusterApiUrl","configYaml","displayName"],"stateInputs":{"description":"Input properties used for looking up and filtering Pipeline resources.\n","properties":{"allowDeletion":{"description":"Allows deletion of the pipeline. Default is false. Must be set to true to delete the resource.\n","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports.\n","type":"string"},"configYaml":{"description":"The Redpanda Connect pipeline configuration in YAML format. See the [Redpanda Connect Configuration](https://docs.redpanda.com/redpanda-cloud/develop/connect/configuration/about) documentation for more details.\n","secret":true,"type":"string"},"description":{"description":"Optional pipeline description. Length must be at most 256.\n","type":"string"},"displayName":{"description":"User-friendly pipeline name. Length must be between 3 and 128. Must match pattern `^[A-Za-z0-9-_ /]+$`.\n","type":"string"},"resources":{"$ref":"#/types/redpanda:index%2FPipelineResources:PipelineResources","description":"Resources configuration\n"},"serviceAccount":{"$ref":"#/types/redpanda:index%2FPipelineServiceAccount:PipelineServiceAccount","description":"Service Account configuration\n"},"state":{"description":"Desired state of the pipeline: 'running' or 'stopped'. The provider will ensure the pipeline reaches this state after create/update operations.\n","type":"string"},"status":{"$ref":"#/types/redpanda:index%2FPipelineStatus:PipelineStatus","description":"Pipeline status may contain an error message.\n"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags are key-value pairs that can be assigned to a pipeline resource. They help organize pipelines and enable filtering when listing them. Must have at most 16 entries.\n","type":"object"},"timeouts":{"$ref":"#/types/redpanda:index%2FPipelineTimeouts:PipelineTimeouts"},"url":{"description":"URL to connect to the pipeline, for example, via http*server. May be empty if no http*server is used.\n","type":"string"}},"type":"object"},"type":"object"},"redpanda:index/resourceGroup:ResourceGroup":{"description":"A Redpanda Cloud resource group\n\nCreates a Resource Group in the Redpanda Cloud.\n\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = new redpanda.ResourceGroup(\"example\", {name: \"example-resource-group\"});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.ResourceGroup(\"example\", name=\"example-resource-group\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = new Redpanda.ResourceGroup(\"example\", new()\n    {\n        Name = \"example-resource-group\",\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\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 := redpanda.NewResourceGroup(ctx, \"example\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.String(\"example-resource-group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ResourceGroup(\"example\", ResourceGroupArgs.builder()\n            .name(\"example-resource-group\")\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: redpanda:ResourceGroup\n    properties:\n      name: example-resource-group\n```\n<!--End PulumiCodeChooser -->\n\n## API Reference\n\nFor more information, see the [Redpanda Cloud Control Plane API documentation](https://docs.redpanda.com/api/cloud-controlplane-api/).\n\n## Import\n\n```sh\n$ pulumi import redpanda:index/resourceGroup:ResourceGroup example resourcegroupId\n```\n\n","inputProperties":{"name":{"description":"Name of the resource group. Changing the name of a resource group will result in a new resource group being created and the old one being destroyed. Length must be at most 253. Must match pattern `^[a-zA-Z0-9-]+$`.\n","type":"string"}},"properties":{"name":{"description":"Name of the resource group. Changing the name of a resource group will result in a new resource group being created and the old one being destroyed. Length must be at most 253. Must match pattern `^[a-zA-Z0-9-]+$`.\n","type":"string"}},"required":["name"],"stateInputs":{"description":"Input properties used for looking up and filtering ResourceGroup resources.\n","properties":{"name":{"description":"Name of the resource group. Changing the name of a resource group will result in a new resource group being created and the old one being destroyed. Length must be at most 253. Must match pattern `^[a-zA-Z0-9-]+$`.\n","type":"string"}},"type":"object"},"type":"object"},"redpanda:index/role:Role":{"description":"\n\n## Import\n\n```sh\n$ pulumi import redpanda:index/role:Role example roleName,clusterId\n```\n\nWhere `clusterId` is the ID of the cluster in Redpanda Cloud.\n\n","inputProperties":{"allowDeletion":{"description":"Allows deletion of the role. If false, the role cannot be deleted and the resource will be removed from the state on destruction. Defaults to false.\n","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports\n","type":"string"},"deleteAcls":{"description":"Whether to delete the ACLs bound to the role when the role is deleted. Defaults to false.\n","type":"boolean"},"name":{"description":"Name of the role, must be unique. Length must be between 1 and 128. Must match pattern `^[^,=]+$`.\n","type":"string"}},"properties":{"allowDeletion":{"description":"Allows deletion of the role. If false, the role cannot be deleted and the resource will be removed from the state on destruction. Defaults to false.\n","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports\n","type":"string"},"deleteAcls":{"description":"Whether to delete the ACLs bound to the role when the role is deleted. Defaults to false.\n","type":"boolean"},"name":{"description":"Name of the role, must be unique. Length must be between 1 and 128. Must match pattern `^[^,=]+$`.\n","type":"string"}},"required":["allowDeletion","clusterApiUrl","deleteAcls","name"],"requiredInputs":["clusterApiUrl"],"stateInputs":{"description":"Input properties used for looking up and filtering Role resources.\n","properties":{"allowDeletion":{"description":"Allows deletion of the role. If false, the role cannot be deleted and the resource will be removed from the state on destruction. Defaults to false.\n","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports\n","type":"string"},"deleteAcls":{"description":"Whether to delete the ACLs bound to the role when the role is deleted. Defaults to false.\n","type":"boolean"},"name":{"description":"Name of the role, must be unique. Length must be between 1 and 128. Must match pattern `^[^,=]+$`.\n","type":"string"}},"type":"object"},"type":"object"},"redpanda:index/roleAssignment:RoleAssignment":{"description":"Assigns an existing Redpanda role to a principal. Resource ID format: `{role_name}:{principal}`\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = new redpanda.ResourceGroup(\"example\", {name: \"example-resource-group\"});\nconst exampleNetwork = new redpanda.Network(\"example\", {\n    name: \"example-network\",\n    resourceGroupId: example.id,\n    cloudProvider: \"aws\",\n    region: \"us-west-2\",\n    clusterType: \"dedicated\",\n    cidrBlock: \"10.0.0.0/20\",\n});\nconst exampleCluster = new redpanda.Cluster(\"example\", {\n    name: \"example-cluster\",\n    resourceGroupId: example.id,\n    networkId: exampleNetwork.id,\n    cloudProvider: \"aws\",\n    region: \"us-west-2\",\n    clusterType: \"dedicated\",\n    connectionType: \"public\",\n    throughputTier: \"tier-1-aws-v2-arm\",\n    zones: [\n        \"us-west-2a\",\n        \"us-west-2b\",\n        \"us-west-2c\",\n    ],\n});\nconst exampleUser = new redpanda.User(\"example\", {\n    name: \"example-user\",\n    password: examplePassword,\n    mechanism: \"scram-sha-256\",\n    clusterApiUrl: exampleCluster.clusterApiUrl,\n    allowDeletion: true,\n});\nconst exampleRole = new redpanda.Role(\"example\", {\n    name: \"example-role\",\n    clusterApiUrl: exampleCluster.clusterApiUrl,\n    allowDeletion: true,\n});\nconst exampleRoleAssignment = new redpanda.RoleAssignment(\"example\", {\n    roleName: exampleRole.name,\n    principal: pulumi.interpolate`User:${exampleUser.name}`,\n    clusterApiUrl: exampleCluster.clusterApiUrl,\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.ResourceGroup(\"example\", name=\"example-resource-group\")\nexample_network = redpanda.Network(\"example\",\n    name=\"example-network\",\n    resource_group_id=example.id,\n    cloud_provider=\"aws\",\n    region=\"us-west-2\",\n    cluster_type=\"dedicated\",\n    cidr_block=\"10.0.0.0/20\")\nexample_cluster = redpanda.Cluster(\"example\",\n    name=\"example-cluster\",\n    resource_group_id=example.id,\n    network_id=example_network.id,\n    cloud_provider=\"aws\",\n    region=\"us-west-2\",\n    cluster_type=\"dedicated\",\n    connection_type=\"public\",\n    throughput_tier=\"tier-1-aws-v2-arm\",\n    zones=[\n        \"us-west-2a\",\n        \"us-west-2b\",\n        \"us-west-2c\",\n    ])\nexample_user = redpanda.User(\"example\",\n    name=\"example-user\",\n    password=example_password,\n    mechanism=\"scram-sha-256\",\n    cluster_api_url=example_cluster.cluster_api_url,\n    allow_deletion=True)\nexample_role = redpanda.Role(\"example\",\n    name=\"example-role\",\n    cluster_api_url=example_cluster.cluster_api_url,\n    allow_deletion=True)\nexample_role_assignment = redpanda.RoleAssignment(\"example\",\n    role_name=example_role.name,\n    principal=example_user.name.apply(lambda name: f\"User:{name}\"),\n    cluster_api_url=example_cluster.cluster_api_url)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = new Redpanda.ResourceGroup(\"example\", new()\n    {\n        Name = \"example-resource-group\",\n    });\n\n    var exampleNetwork = new Redpanda.Network(\"example\", new()\n    {\n        Name = \"example-network\",\n        ResourceGroupId = example.Id,\n        CloudProvider = \"aws\",\n        Region = \"us-west-2\",\n        ClusterType = \"dedicated\",\n        CidrBlock = \"10.0.0.0/20\",\n    });\n\n    var exampleCluster = new Redpanda.Cluster(\"example\", new()\n    {\n        Name = \"example-cluster\",\n        ResourceGroupId = example.Id,\n        NetworkId = exampleNetwork.Id,\n        CloudProvider = \"aws\",\n        Region = \"us-west-2\",\n        ClusterType = \"dedicated\",\n        ConnectionType = \"public\",\n        ThroughputTier = \"tier-1-aws-v2-arm\",\n        Zones = new[]\n        {\n            \"us-west-2a\",\n            \"us-west-2b\",\n            \"us-west-2c\",\n        },\n    });\n\n    var exampleUser = new Redpanda.User(\"example\", new()\n    {\n        Name = \"example-user\",\n        Password = examplePassword,\n        Mechanism = \"scram-sha-256\",\n        ClusterApiUrl = exampleCluster.ClusterApiUrl,\n        AllowDeletion = true,\n    });\n\n    var exampleRole = new Redpanda.Role(\"example\", new()\n    {\n        Name = \"example-role\",\n        ClusterApiUrl = exampleCluster.ClusterApiUrl,\n        AllowDeletion = true,\n    });\n\n    var exampleRoleAssignment = new Redpanda.RoleAssignment(\"example\", new()\n    {\n        RoleName = exampleRole.Name,\n        Principal = exampleUser.Name.Apply(name => $\"User:{name}\"),\n        ClusterApiUrl = exampleCluster.ClusterApiUrl,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := redpanda.NewResourceGroup(ctx, \"example\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.String(\"example-resource-group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleNetwork, err := redpanda.NewNetwork(ctx, \"example\", &redpanda.NetworkArgs{\n\t\t\tName:            pulumi.String(\"example-network\"),\n\t\t\tResourceGroupId: example.ID(),\n\t\t\tCloudProvider:   pulumi.String(\"aws\"),\n\t\t\tRegion:          pulumi.String(\"us-west-2\"),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tCidrBlock:       pulumi.String(\"10.0.0.0/20\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleCluster, err := redpanda.NewCluster(ctx, \"example\", &redpanda.ClusterArgs{\n\t\t\tName:            pulumi.String(\"example-cluster\"),\n\t\t\tResourceGroupId: example.ID(),\n\t\t\tNetworkId:       exampleNetwork.ID(),\n\t\t\tCloudProvider:   pulumi.String(\"aws\"),\n\t\t\tRegion:          pulumi.String(\"us-west-2\"),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tConnectionType:  pulumi.String(\"public\"),\n\t\t\tThroughputTier:  pulumi.String(\"tier-1-aws-v2-arm\"),\n\t\t\tZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-west-2a\"),\n\t\t\t\tpulumi.String(\"us-west-2b\"),\n\t\t\t\tpulumi.String(\"us-west-2c\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleUser, err := redpanda.NewUser(ctx, \"example\", &redpanda.UserArgs{\n\t\t\tName:          pulumi.String(\"example-user\"),\n\t\t\tPassword:      pulumi.Any(examplePassword),\n\t\t\tMechanism:     pulumi.String(\"scram-sha-256\"),\n\t\t\tClusterApiUrl: exampleCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleRole, err := redpanda.NewRole(ctx, \"example\", &redpanda.RoleArgs{\n\t\t\tName:          pulumi.String(\"example-role\"),\n\t\t\tClusterApiUrl: exampleCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewRoleAssignment(ctx, \"example\", &redpanda.RoleAssignmentArgs{\n\t\t\tRoleName: exampleRole.Name,\n\t\t\tPrincipal: exampleUser.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"User:%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tClusterApiUrl: exampleCluster.ClusterApiUrl,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.Network;\nimport com.pulumi.redpanda.NetworkArgs;\nimport com.pulumi.redpanda.Cluster;\nimport com.pulumi.redpanda.ClusterArgs;\nimport com.pulumi.redpanda.User;\nimport com.pulumi.redpanda.UserArgs;\nimport com.pulumi.redpanda.Role;\nimport com.pulumi.redpanda.RoleArgs;\nimport com.pulumi.redpanda.RoleAssignment;\nimport com.pulumi.redpanda.RoleAssignmentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ResourceGroup(\"example\", ResourceGroupArgs.builder()\n            .name(\"example-resource-group\")\n            .build());\n\n        var exampleNetwork = new Network(\"exampleNetwork\", NetworkArgs.builder()\n            .name(\"example-network\")\n            .resourceGroupId(example.id())\n            .cloudProvider(\"aws\")\n            .region(\"us-west-2\")\n            .clusterType(\"dedicated\")\n            .cidrBlock(\"10.0.0.0/20\")\n            .build());\n\n        var exampleCluster = new Cluster(\"exampleCluster\", ClusterArgs.builder()\n            .name(\"example-cluster\")\n            .resourceGroupId(example.id())\n            .networkId(exampleNetwork.id())\n            .cloudProvider(\"aws\")\n            .region(\"us-west-2\")\n            .clusterType(\"dedicated\")\n            .connectionType(\"public\")\n            .throughputTier(\"tier-1-aws-v2-arm\")\n            .zones(            \n                \"us-west-2a\",\n                \"us-west-2b\",\n                \"us-west-2c\")\n            .build());\n\n        var exampleUser = new User(\"exampleUser\", UserArgs.builder()\n            .name(\"example-user\")\n            .password(examplePassword)\n            .mechanism(\"scram-sha-256\")\n            .clusterApiUrl(exampleCluster.clusterApiUrl())\n            .allowDeletion(true)\n            .build());\n\n        var exampleRole = new Role(\"exampleRole\", RoleArgs.builder()\n            .name(\"example-role\")\n            .clusterApiUrl(exampleCluster.clusterApiUrl())\n            .allowDeletion(true)\n            .build());\n\n        var exampleRoleAssignment = new RoleAssignment(\"exampleRoleAssignment\", RoleAssignmentArgs.builder()\n            .roleName(exampleRole.name())\n            .principal(exampleUser.name().applyValue(_name -> String.format(\"User:%s\", _name)))\n            .clusterApiUrl(exampleCluster.clusterApiUrl())\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: redpanda:ResourceGroup\n    properties:\n      name: example-resource-group\n  exampleNetwork:\n    type: redpanda:Network\n    name: example\n    properties:\n      name: example-network\n      resourceGroupId: ${example.id}\n      cloudProvider: aws\n      region: us-west-2\n      clusterType: dedicated\n      cidrBlock: 10.0.0.0/20\n  exampleCluster:\n    type: redpanda:Cluster\n    name: example\n    properties:\n      name: example-cluster\n      resourceGroupId: ${example.id}\n      networkId: ${exampleNetwork.id}\n      cloudProvider: aws\n      region: us-west-2\n      clusterType: dedicated\n      connectionType: public\n      throughputTier: tier-1-aws-v2-arm\n      zones:\n        - us-west-2a\n        - us-west-2b\n        - us-west-2c\n  exampleUser:\n    type: redpanda:User\n    name: example\n    properties:\n      name: example-user\n      password: ${examplePassword}\n      mechanism: scram-sha-256\n      clusterApiUrl: ${exampleCluster.clusterApiUrl}\n      allowDeletion: true\n  exampleRole:\n    type: redpanda:Role\n    name: example\n    properties:\n      name: example-role\n      clusterApiUrl: ${exampleCluster.clusterApiUrl}\n      allowDeletion: true\n  exampleRoleAssignment:\n    type: redpanda:RoleAssignment\n    name: example\n    properties:\n      roleName: ${exampleRole.name}\n      principal: User:${exampleUser.name}\n      clusterApiUrl: ${exampleCluster.clusterApiUrl}\n```\n<!--End PulumiCodeChooser -->\n\n\n## Notes\n\n- The role must already exist before it can be assigned. Create roles using the <span pulumi-lang-nodejs=\"`redpanda.Role`\" pulumi-lang-dotnet=\"`redpanda.Role`\" pulumi-lang-go=\"`Role`\" pulumi-lang-python=\"`Role`\" pulumi-lang-yaml=\"`redpanda.Role`\" pulumi-lang-java=\"`redpanda.Role`\">`redpanda.Role`</span> resource, or import existing roles created via <span pulumi-lang-nodejs=\"`rpk`\" pulumi-lang-dotnet=\"`Rpk`\" pulumi-lang-go=\"`rpk`\" pulumi-lang-python=\"`rpk`\" pulumi-lang-yaml=\"`rpk`\" pulumi-lang-java=\"`rpk`\">`rpk`</span> or Redpanda Console.\n- The principal must be specified in the Kafka-style prefixed form: `\"User:<name>\"` for an end user or `\"Group:<name>\"` for an IdP group. The value is preserved verbatim in state — no prefix stripping or normalization is performed. Bare names (without a prefix) are rejected at plan time.\n- A user can have multiple role assignments simultaneously. Permissions from all assigned roles are combined.\n- Role assignments are atomic operations - you cannot update an existing assignment. To change a role assignment, delete and recreate the resource.\n- The resource uses the Redpanda gRPC SecurityService (via console endpoint) for role management operations.\n\n## API Reference\n\nFor more information, see:\n- [Redpanda RBAC in Data Plane](https://docs.redpanda.com/redpanda-cloud/security/authorization/rbac/rbac_dp/)\n- [Redpanda Cloud Data Plane API](https://docs.redpanda.com/api/cloud-dataplane-api/)\n\n## Import\n\nRole assignments can be imported using the format `<role_name>:<principal>[|<cluster_api_url>]`. The optional `|<cluster_api_url>` suffix populates `cluster_api_url` at import time so the next `pulumi preview` is clean; without it, the field stays null in state and the next plan will force a destroy+create cycle (`cluster_api_url` is `RequiresReplace`).\n\n```sh\n$ pulumi import redpanda:index/roleAssignment:RoleAssignment example \"developer:User:alice|https://api.region.redpanda.com\"\n```\n\nThe principal must already be in the canonical `User:<name>` or `Group:<name>` form. Legacy state files containing a bare principal will self-heal to the canonical form on the next refresh.\n\n","inputProperties":{"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster\n","type":"string"},"principal":{"description":"The principal to assign the role to. Use the Kafka-style prefixed form: `\"User:<name>\"` for an end user or `\"Group:<name>\"` for an IdP group. The value is preserved verbatim in state.\n","type":"string"},"roleName":{"description":"The name of the role to assign\n","type":"string"}},"properties":{"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster\n","type":"string"},"principal":{"description":"The principal to assign the role to. Use the Kafka-style prefixed form: `\"User:<name>\"` for an end user or `\"Group:<name>\"` for an IdP group. The value is preserved verbatim in state.\n","type":"string"},"roleName":{"description":"The name of the role to assign\n","type":"string"}},"required":["clusterApiUrl","principal","roleName"],"requiredInputs":["clusterApiUrl","principal","roleName"],"stateInputs":{"description":"Input properties used for looking up and filtering RoleAssignment resources.\n","properties":{"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster\n","type":"string"},"principal":{"description":"The principal to assign the role to. Use the Kafka-style prefixed form: `\"User:<name>\"` for an end user or `\"Group:<name>\"` for an IdP group. The value is preserved verbatim in state.\n","type":"string"},"roleName":{"description":"The name of the role to assign\n","type":"string"}},"type":"object"},"type":"object"},"redpanda:index/schema:Schema":{"description":"\n\n## Import\n\nSchemas can be imported using a comma-separated string. Two forms are supported:\n\n**Bearer auth (default):**\n\ncluster_id,subject,version\n\n**Basic auth (optional, when explicit SASL credentials are needed):**\n\ncluster_id,subject,version,username,password\n\nExample imports:\n\nImport via Bearer auth (default) — no username or password required\n\n```sh\n$ pulumi import redpanda:index/schema:Schema example \"cluster-123,user-value,1\"\n```\n\nImport via Bearer auth with a complex subject name (colons are valid in subject names)\n\n```sh\n$ pulumi import redpanda:index/schema:Schema product \"cluster-456,com.example:Product-v2,5\"\n```\n\nImport via Basic auth with explicit SASL credentials\n\n```sh\n$ pulumi import redpanda:index/schema:Schema initial \"cluster-789,test-subject,0,svc_account,p@ssw0rd\"\n```\n\nFor Basic auth, the password can also be supplied via the `REDPANDA_IMPORT_PASSWORD` environment variable instead of placing it in the import ID.\n\n","inputProperties":{"allowDeletion":{"type":"boolean"},"clusterId":{"description":"The ID of the cluster where the schema is stored.\n","type":"string"},"compatibility":{"description":"The compatibility level for schema evolution (BACKWARD, BACKWARD_TRANSITIVE, FORWARD, FORWARD_TRANSITIVE, FULL, FULL_TRANSITIVE, NONE). Defaults to BACKWARD.","type":"string"},"password":{"secret":true,"type":"string"},"passwordWo":{"deprecationMessage":"Deprecated","type":"string"},"passwordWoVersion":{"deprecationMessage":"Deprecated","description":"Deprecated. Version counter for password_wo, which is itself deprecated for this resource.","type":"number"},"references":{"description":"List of schema references.","items":{"$ref":"#/types/redpanda:index%2FSchemaReference:SchemaReference"},"type":"array"},"schema":{"description":"The schema definition in JSON format.\n","type":"string"},"schemaType":{"description":"The type of schema (AVRO, JSON, PROTOBUF).","type":"string"},"subject":{"description":"The subject name for the schema.\n","type":"string"},"username":{"description":"SASL username for Schema Registry HTTP Basic authentication. Optional: when omitted (together with password) the provider authenticates to Schema Registry using its cloud Bearer token. Supply username + password only when you need writes to be attributed to a specific SASL identity (e.g., audit / least-privilege).","secret":true,"type":"string"}},"properties":{"allowDeletion":{"type":"boolean"},"clusterId":{"description":"The ID of the cluster where the schema is stored.\n","type":"string"},"compatibility":{"description":"The compatibility level for schema evolution (BACKWARD, BACKWARD_TRANSITIVE, FORWARD, FORWARD_TRANSITIVE, FULL, FULL_TRANSITIVE, NONE). Defaults to BACKWARD.","type":"string"},"password":{"secret":true,"type":"string"},"passwordWo":{"deprecationMessage":"Deprecated","type":"string"},"passwordWoVersion":{"deprecationMessage":"Deprecated","description":"Deprecated. Version counter for password_wo, which is itself deprecated for this resource.","type":"number"},"references":{"description":"List of schema references.","items":{"$ref":"#/types/redpanda:index%2FSchemaReference:SchemaReference"},"type":"array"},"schema":{"description":"The schema definition in JSON format.\n","type":"string"},"schemaId":{"description":"The unique identifier for the schema.","type":"number"},"schemaType":{"description":"The type of schema (AVRO, JSON, PROTOBUF).","type":"string"},"subject":{"description":"The subject name for the schema.\n","type":"string"},"username":{"description":"SASL username for Schema Registry HTTP Basic authentication. Optional: when omitted (together with password) the provider authenticates to Schema Registry using its cloud Bearer token. Supply username + password only when you need writes to be attributed to a specific SASL identity (e.g., audit / least-privilege).","secret":true,"type":"string"},"version":{"description":"The version of the schema.","type":"number"}},"required":["allowDeletion","clusterId","compatibility","schema","schemaId","schemaType","subject","version"],"requiredInputs":["clusterId","schema","subject"],"stateInputs":{"description":"Input properties used for looking up and filtering Schema resources.\n","properties":{"allowDeletion":{"type":"boolean"},"clusterId":{"description":"The ID of the cluster where the schema is stored.\n","type":"string"},"compatibility":{"description":"The compatibility level for schema evolution (BACKWARD, BACKWARD_TRANSITIVE, FORWARD, FORWARD_TRANSITIVE, FULL, FULL_TRANSITIVE, NONE). Defaults to BACKWARD.","type":"string"},"password":{"secret":true,"type":"string"},"passwordWo":{"deprecationMessage":"Deprecated","type":"string"},"passwordWoVersion":{"deprecationMessage":"Deprecated","description":"Deprecated. Version counter for password_wo, which is itself deprecated for this resource.","type":"number"},"references":{"description":"List of schema references.","items":{"$ref":"#/types/redpanda:index%2FSchemaReference:SchemaReference"},"type":"array"},"schema":{"description":"The schema definition in JSON format.\n","type":"string"},"schemaId":{"description":"The unique identifier for the schema.","type":"number"},"schemaType":{"description":"The type of schema (AVRO, JSON, PROTOBUF).","type":"string"},"subject":{"description":"The subject name for the schema.\n","type":"string"},"username":{"description":"SASL username for Schema Registry HTTP Basic authentication. Optional: when omitted (together with password) the provider authenticates to Schema Registry using its cloud Bearer token. Supply username + password only when you need writes to be attributed to a specific SASL identity (e.g., audit / least-privilege).","secret":true,"type":"string"},"version":{"description":"The version of the schema.","type":"number"}},"type":"object"},"type":"object"},"redpanda:index/schemaRegistryAcl:SchemaRegistryAcl":{"description":"\n\n## Import\n\nSchema Registry ACLs can be imported using a comma-separated string. Two forms are supported:\n\n**Bearer auth (default):**\n\ncluster_id,principal,resource_type,resource_name,pattern_type,host,operation,permission\n\n**Basic auth (optional, when explicit SASL credentials are needed):**\n\ncluster_id,principal,resource_type,resource_name,pattern_type,host,operation,permission,username,password\n\nExample imports:\n\nImport via Bearer auth (default) — no username or password required\n\n```sh\n$ pulumi import redpanda:index/schemaRegistryAcl:SchemaRegistryAcl example \"cluster-123,User:alice,SUBJECT,user-value,LITERAL,*,READ,ALLOW\"\n```\n\nImport via Bearer auth with a role principal containing colons\n\n```sh\n$ pulumi import redpanda:index/schemaRegistryAcl:SchemaRegistryAcl admin \"cluster-123,RedpandaRole:admin,REGISTRY,*,LITERAL,*,ALL,ALLOW\"\n```\n\nImport via Basic auth with explicit SASL credentials\n\n```sh\n$ pulumi import redpanda:index/schemaRegistryAcl:SchemaRegistryAcl prefix \"cluster-123,User:bob,SUBJECT,orders-,PREFIXED,*,WRITE,ALLOW,bob,pass123\"\n```\n\nFor Basic auth, the password can also be supplied via the `REDPANDA_IMPORT_PASSWORD` environment variable instead of placing it in the import ID.\n\n","inputProperties":{"allowDeletion":{"description":"When set to true, allows the resource to be removed from state even if deletion fails due to permission errors","type":"boolean"},"clusterId":{"description":"The ID of the cluster where the Schema Registry ACL will be created\n","type":"string"},"host":{"description":"The host address to use for this ACL. Use '*' for wildcard\n","type":"string"},"operation":{"description":"The operation type that shall be allowed or denied: ALL, READ, WRITE, DELETE, DESCRIBE, DESCRIBE*CONFIGS, ALTER, ALTER*CONFIGS\n","type":"string"},"password":{"secret":true,"type":"string"},"passwordWo":{"deprecationMessage":"Deprecated","type":"string"},"passwordWoVersion":{"deprecationMessage":"Deprecated","description":"Deprecated. Version counter for password_wo, which is itself deprecated for this resource.","type":"number"},"patternType":{"description":"The pattern type of the resource: LITERAL or PREFIXED\n","type":"string"},"permission":{"description":"The permission type: ALLOW or DENY\n","type":"string"},"principal":{"description":"The principal to apply this ACL for (e.g., User:alice or RedpandaRole:admin)\n","type":"string"},"resourceName":{"description":"The name of the resource this ACL entry will be on. Use '*' for wildcard\n","type":"string"},"resourceType":{"description":"The type of the resource: SUBJECT or REGISTRY\n","type":"string"},"username":{"description":"SASL username for Schema Registry HTTP Basic authentication. Optional: when omitted (together with password) the provider authenticates to Schema Registry using its cloud Bearer token. Supply username + password only when you need writes to be attributed to a specific SASL identity (e.g., audit / least-privilege).","secret":true,"type":"string"}},"properties":{"allowDeletion":{"description":"When set to true, allows the resource to be removed from state even if deletion fails due to permission errors","type":"boolean"},"clusterId":{"description":"The ID of the cluster where the Schema Registry ACL will be created\n","type":"string"},"host":{"description":"The host address to use for this ACL. Use '*' for wildcard\n","type":"string"},"operation":{"description":"The operation type that shall be allowed or denied: ALL, READ, WRITE, DELETE, DESCRIBE, DESCRIBE*CONFIGS, ALTER, ALTER*CONFIGS\n","type":"string"},"password":{"secret":true,"type":"string"},"passwordWo":{"deprecationMessage":"Deprecated","type":"string"},"passwordWoVersion":{"deprecationMessage":"Deprecated","description":"Deprecated. Version counter for password_wo, which is itself deprecated for this resource.","type":"number"},"patternType":{"description":"The pattern type of the resource: LITERAL or PREFIXED\n","type":"string"},"permission":{"description":"The permission type: ALLOW or DENY\n","type":"string"},"principal":{"description":"The principal to apply this ACL for (e.g., User:alice or RedpandaRole:admin)\n","type":"string"},"resourceName":{"description":"The name of the resource this ACL entry will be on. Use '*' for wildcard\n","type":"string"},"resourceType":{"description":"The type of the resource: SUBJECT or REGISTRY\n","type":"string"},"username":{"description":"SASL username for Schema Registry HTTP Basic authentication. Optional: when omitted (together with password) the provider authenticates to Schema Registry using its cloud Bearer token. Supply username + password only when you need writes to be attributed to a specific SASL identity (e.g., audit / least-privilege).","secret":true,"type":"string"}},"required":["allowDeletion","clusterId","host","operation","patternType","permission","principal","resourceName","resourceType"],"requiredInputs":["clusterId","host","operation","patternType","permission","principal","resourceName","resourceType"],"stateInputs":{"description":"Input properties used for looking up and filtering SchemaRegistryAcl resources.\n","properties":{"allowDeletion":{"description":"When set to true, allows the resource to be removed from state even if deletion fails due to permission errors","type":"boolean"},"clusterId":{"description":"The ID of the cluster where the Schema Registry ACL will be created\n","type":"string"},"host":{"description":"The host address to use for this ACL. Use '*' for wildcard\n","type":"string"},"operation":{"description":"The operation type that shall be allowed or denied: ALL, READ, WRITE, DELETE, DESCRIBE, DESCRIBE*CONFIGS, ALTER, ALTER*CONFIGS\n","type":"string"},"password":{"secret":true,"type":"string"},"passwordWo":{"deprecationMessage":"Deprecated","type":"string"},"passwordWoVersion":{"deprecationMessage":"Deprecated","description":"Deprecated. Version counter for password_wo, which is itself deprecated for this resource.","type":"number"},"patternType":{"description":"The pattern type of the resource: LITERAL or PREFIXED\n","type":"string"},"permission":{"description":"The permission type: ALLOW or DENY\n","type":"string"},"principal":{"description":"The principal to apply this ACL for (e.g., User:alice or RedpandaRole:admin)\n","type":"string"},"resourceName":{"description":"The name of the resource this ACL entry will be on. Use '*' for wildcard\n","type":"string"},"resourceType":{"description":"The type of the resource: SUBJECT or REGISTRY\n","type":"string"},"username":{"description":"SASL username for Schema Registry HTTP Basic authentication. Optional: when omitted (together with password) the provider authenticates to Schema Registry using its cloud Bearer token. Supply username + password only when you need writes to be attributed to a specific SASL identity (e.g., audit / least-privilege).","secret":true,"type":"string"}},"type":"object"},"type":"object"},"redpanda:index/secret:Secret":{"description":"\n\n## Import\n\n```sh\n$ pulumi import redpanda:index/secret:Secret example secretName,clusterId\n```\n\nWhere `secretName` is the secret's identifier (uppercase, matching `^[A-Z][A-Z0-9_]*$`) and `clusterId` is the ID of the cluster in Redpanda Cloud. After import, `secret_data` is unset until the next apply provides a value.\n\n","inputProperties":{"allowDeletion":{"description":"Allows deletion of the secret. Defaults to false.","type":"boolean"},"clusterApiUrl":{"description":"Dataplane API URL of the cluster that owns this secret (`redpanda_cluster.<name>.cluster_api_url`). Immutable; changing this prevents deletion of the existing secret. Generally easier to recreate the resource than to change this.","type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"Secret labels.","type":"object"},"name":{"description":"Secret identifier.","type":"string"},"scopes":{"description":"Secret scopes. Order does not matter — the server may return scopes in a different order than you supplied; the set semantics make plan-twice stable regardless.","items":{"type":"string"},"type":"array"},"secretData":{"description":"The secret data. Must be Base64-encoded.","secret":true,"type":"string"},"secretDataVersion":{"type":"number"}},"properties":{"allowDeletion":{"description":"Allows deletion of the secret. Defaults to false.","type":"boolean"},"clusterApiUrl":{"description":"Dataplane API URL of the cluster that owns this secret (`redpanda_cluster.<name>.cluster_api_url`). Immutable; changing this prevents deletion of the existing secret. Generally easier to recreate the resource than to change this.","type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"Secret labels.","type":"object"},"name":{"description":"Secret identifier.","type":"string"},"scopes":{"description":"Secret scopes. Order does not matter — the server may return scopes in a different order than you supplied; the set semantics make plan-twice stable regardless.","items":{"type":"string"},"type":"array"},"secretData":{"description":"The secret data. Must be Base64-encoded.","secret":true,"type":"string"},"secretDataVersion":{"type":"number"}},"required":["allowDeletion","clusterApiUrl","labels","name","scopes","secretData","secretDataVersion"],"requiredInputs":["clusterApiUrl","scopes","secretData"],"stateInputs":{"description":"Input properties used for looking up and filtering Secret resources.\n","properties":{"allowDeletion":{"description":"Allows deletion of the secret. Defaults to false.","type":"boolean"},"clusterApiUrl":{"description":"Dataplane API URL of the cluster that owns this secret (`redpanda_cluster.<name>.cluster_api_url`). Immutable; changing this prevents deletion of the existing secret. Generally easier to recreate the resource than to change this.","type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"Secret labels.","type":"object"},"name":{"description":"Secret identifier.","type":"string"},"scopes":{"description":"Secret scopes. Order does not matter — the server may return scopes in a different order than you supplied; the set semantics make plan-twice stable regardless.","items":{"type":"string"},"type":"array"},"secretData":{"description":"The secret data. Must be Base64-encoded.","secret":true,"type":"string"},"secretDataVersion":{"type":"number"}},"type":"object"},"type":"object"},"redpanda:index/serverlessCluster:ServerlessCluster":{"description":"ServerlessCluster represents a Redpanda Cloud serverless cluster\n\nEnables the provisioning and management of Redpanda Serverless clusters. A Serverless cluster requires a resource group.\n\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```yaml\nresources:\n  example:\n    type: redpanda:ResourceGroup\n    properties:\n      name: example-resource-group\n  exampleServerlessCluster:\n    type: redpanda:ServerlessCluster\n    name: example\n    properties:\n      name: example-serverless-cluster\n      resourceGroupId: ${example.id}\n      region: us-west-2\n```\n<!--End PulumiCodeChooser -->\n\n## Limitations\n\nServerless on GCP is currently in beta. To unlock this feature for your account, contact your Redpanda account team.\n\n### Advanced Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst test = new redpanda.ResourceGroup(\"test\", {name: resourceGroupName});\nconst testServerlessPrivateLink: redpanda.ServerlessPrivateLink[] = [];\nfor (const range = {value: 0}; range.value < (privateNetworking == \"STATE_ENABLED\" ? 1 : 0); range.value++) {\n    testServerlessPrivateLink.push(new redpanda.ServerlessPrivateLink(`test-${range.value}`, {\n        name: `${clusterName}-private-link`,\n        resourceGroupId: test.id,\n        cloudProvider: \"aws\",\n        serverlessRegion: region,\n        allowDeletion: allowPrivateLinkDeletion,\n        awsConfig: {\n            allowedPrincipals: allowedPrincipals,\n        },\n    }));\n}\nconst testServerlessCluster = new redpanda.ServerlessCluster(\"test\", {\n    name: clusterName,\n    resourceGroupId: test.id,\n    serverlessRegion: region,\n    allowDeletion: clusterAllowDeletion,\n    privateLinkId: privateNetworking == \"STATE_ENABLED\" ? testServerlessPrivateLink[0].id : null,\n    networkingConfig: {\n        \"public\": publicNetworking,\n        \"private\": privateNetworking,\n    },\n});\nconst testTopic = new redpanda.Topic(\"test\", {\n    name: topicName,\n    partitionCount: partitionCount,\n    replicationFactor: replicationFactor,\n    clusterApiUrl: testServerlessCluster.clusterApiUrl,\n    allowDeletion: true,\n});\nconst testUser = new redpanda.User(\"test\", {\n    name: userName,\n    password: userPw,\n    mechanism: mechanism,\n    clusterApiUrl: testServerlessCluster.clusterApiUrl,\n    allowDeletion: userAllowDeletion,\n});\n// Schema Registry against a serverless cluster keys off cluster_id (control\n// plane), not cluster_api_url; cluster_id resolves the SR endpoint via the\n// ServerlessClusterService fallback in GetSchemaRegistryClientForCluster.\n// Both redpanda_schema_registry_acl and redpanda_schema route through it.\nconst providerBootstrapSubject = new redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\", {\n    clusterId: testServerlessCluster.id,\n    principal: \"User:*\",\n    resourceType: \"SUBJECT\",\n    resourceName: resourceGroupName,\n    patternType: \"PREFIXED\",\n    host: \"*\",\n    operation: \"ALL\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n});\nconst providerBootstrapRegistry = new redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\", {\n    clusterId: testServerlessCluster.id,\n    principal: \"User:*\",\n    resourceType: \"REGISTRY\",\n    resourceName: \"*\",\n    patternType: \"LITERAL\",\n    host: \"*\",\n    operation: \"ALL\",\n    permission: \"ALLOW\",\n    allowDeletion: true,\n});\nconst userSchema = new redpanda.Schema(\"user_schema\", {\n    clusterId: testServerlessCluster.id,\n    subject: `${resourceGroupName}-value`,\n    schemaType: \"AVRO\",\n    compatibility: \"BACKWARD\",\n    allowDeletion: true,\n    schema: JSON.stringify({\n        type: \"record\",\n        name: \"User\",\n        fields: [\n            {\n                name: \"id\",\n                type: \"long\",\n            },\n            {\n                name: \"name\",\n                type: \"string\",\n            },\n        ],\n    }),\n}, {\n    dependsOn: [\n        providerBootstrapSubject,\n        providerBootstrapRegistry,\n    ],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_redpanda as redpanda\n\ntest = redpanda.ResourceGroup(\"test\", name=resource_group_name)\ntest_serverless_private_link = []\nfor range in [{\"value\": i} for i in range(0, 1 if private_networking == STATE_ENABLED else 0)]:\n    test_serverless_private_link.append(redpanda.ServerlessPrivateLink(f\"test-{range['value']}\",\n        name=f\"{cluster_name}-private-link\",\n        resource_group_id=test.id,\n        cloud_provider=\"aws\",\n        serverless_region=region,\n        allow_deletion=allow_private_link_deletion,\n        aws_config={\n            \"allowed_principals\": allowed_principals,\n        }))\ntest_serverless_cluster = redpanda.ServerlessCluster(\"test\",\n    name=cluster_name,\n    resource_group_id=test.id,\n    serverless_region=region,\n    allow_deletion=cluster_allow_deletion,\n    private_link_id=test_serverless_private_link[0].id if private_networking == \"STATE_ENABLED\" else None,\n    networking_config={\n        \"public\": public_networking,\n        \"private\": private_networking,\n    })\ntest_topic = redpanda.Topic(\"test\",\n    name=topic_name,\n    partition_count=partition_count,\n    replication_factor=replication_factor,\n    cluster_api_url=test_serverless_cluster.cluster_api_url,\n    allow_deletion=True)\ntest_user = redpanda.User(\"test\",\n    name=user_name,\n    password=user_pw,\n    mechanism=mechanism,\n    cluster_api_url=test_serverless_cluster.cluster_api_url,\n    allow_deletion=user_allow_deletion)\n# Schema Registry against a serverless cluster keys off cluster_id (control\n# plane), not cluster_api_url; cluster_id resolves the SR endpoint via the\n# ServerlessClusterService fallback in GetSchemaRegistryClientForCluster.\n# Both redpanda_schema_registry_acl and redpanda_schema route through it.\nprovider_bootstrap_subject = redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\",\n    cluster_id=test_serverless_cluster.id,\n    principal=\"User:*\",\n    resource_type=\"SUBJECT\",\n    resource_name_=resource_group_name,\n    pattern_type=\"PREFIXED\",\n    host=\"*\",\n    operation=\"ALL\",\n    permission=\"ALLOW\",\n    allow_deletion=True)\nprovider_bootstrap_registry = redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\",\n    cluster_id=test_serverless_cluster.id,\n    principal=\"User:*\",\n    resource_type=\"REGISTRY\",\n    resource_name_=\"*\",\n    pattern_type=\"LITERAL\",\n    host=\"*\",\n    operation=\"ALL\",\n    permission=\"ALLOW\",\n    allow_deletion=True)\nuser_schema = redpanda.Schema(\"user_schema\",\n    cluster_id=test_serverless_cluster.id,\n    subject=f\"{resource_group_name}-value\",\n    schema_type=\"AVRO\",\n    compatibility=\"BACKWARD\",\n    allow_deletion=True,\n    schema=json.dumps({\n        \"type\": \"record\",\n        \"name\": \"User\",\n        \"fields\": [\n            {\n                \"name\": \"id\",\n                \"type\": \"long\",\n            },\n            {\n                \"name\": \"name\",\n                \"type\": \"string\",\n            },\n        ],\n    }),\n    opts = pulumi.ResourceOptions(depends_on=[\n            provider_bootstrap_subject,\n            provider_bootstrap_registry,\n        ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var test = new Redpanda.ResourceGroup(\"test\", new()\n    {\n        Name = resourceGroupName,\n    });\n\n    var testServerlessPrivateLink = new List<Redpanda.ServerlessPrivateLink>();\n    for (var rangeIndex = 0; rangeIndex < (privateNetworking == \"STATE_ENABLED\" ? 1 : 0); rangeIndex++)\n    {\n        var range = new { Value = rangeIndex };\n        testServerlessPrivateLink.Add(new Redpanda.ServerlessPrivateLink($\"test-{range.Value}\", new()\n        {\n            Name = $\"{clusterName}-private-link\",\n            ResourceGroupId = test.Id,\n            CloudProvider = \"aws\",\n            ServerlessRegion = region,\n            AllowDeletion = allowPrivateLinkDeletion,\n            AwsConfig = new Redpanda.Inputs.ServerlessPrivateLinkAwsConfigArgs\n            {\n                AllowedPrincipals = allowedPrincipals,\n            },\n        }));\n    }\n    var testServerlessCluster = new Redpanda.ServerlessCluster(\"test\", new()\n    {\n        Name = clusterName,\n        ResourceGroupId = test.Id,\n        ServerlessRegion = region,\n        AllowDeletion = clusterAllowDeletion,\n        PrivateLinkId = privateNetworking == \"STATE_ENABLED\" ? testServerlessPrivateLink[0].Id : null,\n        NetworkingConfig = new Redpanda.Inputs.ServerlessClusterNetworkingConfigArgs\n        {\n            Public = publicNetworking,\n            Private = privateNetworking,\n        },\n    });\n\n    var testTopic = new Redpanda.Topic(\"test\", new()\n    {\n        Name = topicName,\n        PartitionCount = partitionCount,\n        ReplicationFactor = replicationFactor,\n        ClusterApiUrl = testServerlessCluster.ClusterApiUrl,\n        AllowDeletion = true,\n    });\n\n    var testUser = new Redpanda.User(\"test\", new()\n    {\n        Name = userName,\n        Password = userPw,\n        Mechanism = mechanism,\n        ClusterApiUrl = testServerlessCluster.ClusterApiUrl,\n        AllowDeletion = userAllowDeletion,\n    });\n\n    // Schema Registry against a serverless cluster keys off cluster_id (control\n    // plane), not cluster_api_url; cluster_id resolves the SR endpoint via the\n    // ServerlessClusterService fallback in GetSchemaRegistryClientForCluster.\n    // Both redpanda_schema_registry_acl and redpanda_schema route through it.\n    var providerBootstrapSubject = new Redpanda.SchemaRegistryAcl(\"provider_bootstrap_subject\", new()\n    {\n        ClusterId = testServerlessCluster.Id,\n        Principal = \"User:*\",\n        ResourceType = \"SUBJECT\",\n        ResourceName = resourceGroupName,\n        PatternType = \"PREFIXED\",\n        Host = \"*\",\n        Operation = \"ALL\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    });\n\n    var providerBootstrapRegistry = new Redpanda.SchemaRegistryAcl(\"provider_bootstrap_registry\", new()\n    {\n        ClusterId = testServerlessCluster.Id,\n        Principal = \"User:*\",\n        ResourceType = \"REGISTRY\",\n        ResourceName = \"*\",\n        PatternType = \"LITERAL\",\n        Host = \"*\",\n        Operation = \"ALL\",\n        Permission = \"ALLOW\",\n        AllowDeletion = true,\n    });\n\n    var userSchema = new Redpanda.Schema(\"user_schema\", new()\n    {\n        ClusterId = testServerlessCluster.Id,\n        Subject = $\"{resourceGroupName}-value\",\n        SchemaType = \"AVRO\",\n        Compatibility = \"BACKWARD\",\n        AllowDeletion = true,\n        Schema = JsonSerializer.Serialize(new Dictionary<string, object?>\n        {\n            [\"type\"] = \"record\",\n            [\"name\"] = \"User\",\n            [\"fields\"] = new[]\n            {\n                new Dictionary<string, object?>\n                {\n                    [\"name\"] = \"id\",\n                    [\"type\"] = \"long\",\n                },\n                new Dictionary<string, object?>\n                {\n                    [\"name\"] = \"name\",\n                    [\"type\"] = \"string\",\n                },\n            },\n        }),\n    }, new CustomResourceOptions\n    {\n        DependsOn =\n        {\n            providerBootstrapSubject,\n            providerBootstrapRegistry,\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttest, err := redpanda.NewResourceGroup(ctx, \"test\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.Any(resourceGroupName),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvar tmp0 float64\n\t\tif privateNetworking == \"STATE_ENABLED\" {\n\t\t\ttmp0 = 1\n\t\t} else {\n\t\t\ttmp0 = 0\n\t\t}\n\t\tvar testServerlessPrivateLink []*redpanda.ServerlessPrivateLink\n\t\tfor index := 0; index < tmp0; index++ {\n\t\t\tkey0 := index\n\t\t\t_ := index\n\t\t\t__res, err := redpanda.NewServerlessPrivateLink(ctx, fmt.Sprintf(\"test-%v\", key0), &redpanda.ServerlessPrivateLinkArgs{\n\t\t\t\tName:             pulumi.Sprintf(\"%v-private-link\", clusterName),\n\t\t\t\tResourceGroupId:  test.ID(),\n\t\t\t\tCloudProvider:    pulumi.String(\"aws\"),\n\t\t\t\tServerlessRegion: pulumi.Any(region),\n\t\t\t\tAllowDeletion:    pulumi.Any(allowPrivateLinkDeletion),\n\t\t\t\tAwsConfig: &redpanda.ServerlessPrivateLinkAwsConfigArgs{\n\t\t\t\t\tAllowedPrincipals: pulumi.Any(allowedPrincipals),\n\t\t\t\t},\n\t\t\t})\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\ttestServerlessPrivateLink = append(testServerlessPrivateLink, __res)\n\t\t}\n\t\tvar tmp1 pulumi.String\n\t\tif privateNetworking == \"STATE_ENABLED\" {\n\t\t\ttmp1 = testServerlessPrivateLink[0].ID()\n\t\t} else {\n\t\t\ttmp1 = nil\n\t\t}\n\t\ttestServerlessCluster, err := redpanda.NewServerlessCluster(ctx, \"test\", &redpanda.ServerlessClusterArgs{\n\t\t\tName:             pulumi.Any(clusterName),\n\t\t\tResourceGroupId:  test.ID(),\n\t\t\tServerlessRegion: pulumi.Any(region),\n\t\t\tAllowDeletion:    pulumi.Any(clusterAllowDeletion),\n\t\t\tPrivateLinkId:    pulumi.String(tmp1),\n\t\t\tNetworkingConfig: &redpanda.ServerlessClusterNetworkingConfigArgs{\n\t\t\t\tPublic:  pulumi.Any(publicNetworking),\n\t\t\t\tPrivate: pulumi.Any(privateNetworking),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewTopic(ctx, \"test\", &redpanda.TopicArgs{\n\t\t\tName:              pulumi.Any(topicName),\n\t\t\tPartitionCount:    pulumi.Any(partitionCount),\n\t\t\tReplicationFactor: pulumi.Any(replicationFactor),\n\t\t\tClusterApiUrl:     testServerlessCluster.ClusterApiUrl,\n\t\t\tAllowDeletion:     pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewUser(ctx, \"test\", &redpanda.UserArgs{\n\t\t\tName:          pulumi.Any(userName),\n\t\t\tPassword:      pulumi.Any(userPw),\n\t\t\tMechanism:     pulumi.Any(mechanism),\n\t\t\tClusterApiUrl: testServerlessCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Any(userAllowDeletion),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Schema Registry against a serverless cluster keys off cluster_id (control\n\t\t// plane), not cluster_api_url; cluster_id resolves the SR endpoint via the\n\t\t// ServerlessClusterService fallback in GetSchemaRegistryClientForCluster.\n\t\t// Both redpanda_schema_registry_acl and redpanda_schema route through it.\n\t\tproviderBootstrapSubject, err := redpanda.NewSchemaRegistryAcl(ctx, \"provider_bootstrap_subject\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId:     testServerlessCluster.ID(),\n\t\t\tPrincipal:     pulumi.String(\"User:*\"),\n\t\t\tResourceType:  pulumi.String(\"SUBJECT\"),\n\t\t\tResourceName:  pulumi.Any(resourceGroupName),\n\t\t\tPatternType:   pulumi.String(\"PREFIXED\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALL\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproviderBootstrapRegistry, err := redpanda.NewSchemaRegistryAcl(ctx, \"provider_bootstrap_registry\", &redpanda.SchemaRegistryAclArgs{\n\t\t\tClusterId:     testServerlessCluster.ID(),\n\t\t\tPrincipal:     pulumi.String(\"User:*\"),\n\t\t\tResourceType:  pulumi.String(\"REGISTRY\"),\n\t\t\tResourceName:  pulumi.String(\"*\"),\n\t\t\tPatternType:   pulumi.String(\"LITERAL\"),\n\t\t\tHost:          pulumi.String(\"*\"),\n\t\t\tOperation:     pulumi.String(\"ALL\"),\n\t\t\tPermission:    pulumi.String(\"ALLOW\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\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\"type\": \"record\",\n\t\t\t\"name\": \"User\",\n\t\t\t\"fields\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"name\": \"id\",\n\t\t\t\t\t\"type\": \"long\",\n\t\t\t\t},\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"name\": \"name\",\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t_, err = redpanda.NewSchema(ctx, \"user_schema\", &redpanda.SchemaArgs{\n\t\t\tClusterId:     testServerlessCluster.ID(),\n\t\t\tSubject:       pulumi.Sprintf(\"%v-value\", resourceGroupName),\n\t\t\tSchemaType:    pulumi.String(\"AVRO\"),\n\t\t\tCompatibility: pulumi.String(\"BACKWARD\"),\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t\tSchema:        pulumi.String(json0),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tproviderBootstrapSubject,\n\t\t\tproviderBootstrapRegistry,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.ServerlessPrivateLink;\nimport com.pulumi.redpanda.ServerlessPrivateLinkArgs;\nimport com.pulumi.redpanda.inputs.ServerlessPrivateLinkAwsConfigArgs;\nimport com.pulumi.redpanda.ServerlessCluster;\nimport com.pulumi.redpanda.ServerlessClusterArgs;\nimport com.pulumi.redpanda.inputs.ServerlessClusterNetworkingConfigArgs;\nimport com.pulumi.redpanda.Topic;\nimport com.pulumi.redpanda.TopicArgs;\nimport com.pulumi.redpanda.User;\nimport com.pulumi.redpanda.UserArgs;\nimport com.pulumi.redpanda.SchemaRegistryAcl;\nimport com.pulumi.redpanda.SchemaRegistryAclArgs;\nimport com.pulumi.redpanda.Schema;\nimport com.pulumi.redpanda.SchemaArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport com.pulumi.codegen.internal.KeyedValue;\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 test = new ResourceGroup(\"test\", ResourceGroupArgs.builder()\n            .name(resourceGroupName)\n            .build());\n\n        for (var i = 0; i < (privateNetworking == \"STATE_ENABLED\" ? 1 : 0); i++) {\n            new ServerlessPrivateLink(\"testServerlessPrivateLink-\" + i, ServerlessPrivateLinkArgs.builder()\n                .name(String.format(\"%s-private-link\", clusterName))\n                .resourceGroupId(test.id())\n                .cloudProvider(\"aws\")\n                .serverlessRegion(region)\n                .allowDeletion(allowPrivateLinkDeletion)\n                .awsConfig(ServerlessPrivateLinkAwsConfigArgs.builder()\n                    .allowedPrincipals(allowedPrincipals)\n                    .build())\n                .build());\n\n        \n}\n        var testServerlessCluster = new ServerlessCluster(\"testServerlessCluster\", ServerlessClusterArgs.builder()\n            .name(clusterName)\n            .resourceGroupId(test.id())\n            .serverlessRegion(region)\n            .allowDeletion(clusterAllowDeletion)\n            .privateLinkId(privateNetworking == \"STATE_ENABLED\" ? testServerlessPrivateLink[0].id() : null)\n            .networkingConfig(ServerlessClusterNetworkingConfigArgs.builder()\n                .public_(publicNetworking)\n                .private_(privateNetworking)\n                .build())\n            .build());\n\n        var testTopic = new Topic(\"testTopic\", TopicArgs.builder()\n            .name(topicName)\n            .partitionCount(partitionCount)\n            .replicationFactor(replicationFactor)\n            .clusterApiUrl(testServerlessCluster.clusterApiUrl())\n            .allowDeletion(true)\n            .build());\n\n        var testUser = new User(\"testUser\", UserArgs.builder()\n            .name(userName)\n            .password(userPw)\n            .mechanism(mechanism)\n            .clusterApiUrl(testServerlessCluster.clusterApiUrl())\n            .allowDeletion(userAllowDeletion)\n            .build());\n\n        // Schema Registry against a serverless cluster keys off cluster_id (control\n        // plane), not cluster_api_url; cluster_id resolves the SR endpoint via the\n        // ServerlessClusterService fallback in GetSchemaRegistryClientForCluster.\n        // Both redpanda_schema_registry_acl and redpanda_schema route through it.\n        var providerBootstrapSubject = new SchemaRegistryAcl(\"providerBootstrapSubject\", SchemaRegistryAclArgs.builder()\n            .clusterId(testServerlessCluster.id())\n            .principal(\"User:*\")\n            .resourceType(\"SUBJECT\")\n            .resourceName(resourceGroupName)\n            .patternType(\"PREFIXED\")\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build());\n\n        var providerBootstrapRegistry = new SchemaRegistryAcl(\"providerBootstrapRegistry\", SchemaRegistryAclArgs.builder()\n            .clusterId(testServerlessCluster.id())\n            .principal(\"User:*\")\n            .resourceType(\"REGISTRY\")\n            .resourceName(\"*\")\n            .patternType(\"LITERAL\")\n            .host(\"*\")\n            .operation(\"ALL\")\n            .permission(\"ALLOW\")\n            .allowDeletion(true)\n            .build());\n\n        var userSchema = new Schema(\"userSchema\", SchemaArgs.builder()\n            .clusterId(testServerlessCluster.id())\n            .subject(String.format(\"%s-value\", resourceGroupName))\n            .schemaType(\"AVRO\")\n            .compatibility(\"BACKWARD\")\n            .allowDeletion(true)\n            .schema(serializeJson(\n                jsonObject(\n                    jsonProperty(\"type\", \"record\"),\n                    jsonProperty(\"name\", \"User\"),\n                    jsonProperty(\"fields\", jsonArray(\n                        jsonObject(\n                            jsonProperty(\"name\", \"id\"),\n                            jsonProperty(\"type\", \"long\")\n                        ), \n                        jsonObject(\n                            jsonProperty(\"name\", \"name\"),\n                            jsonProperty(\"type\", \"string\")\n                        )\n                    ))\n                )))\n            .build(), CustomResourceOptions.builder()\n                .dependsOn(                \n                    providerBootstrapSubject,\n                    providerBootstrapRegistry)\n                .build());\n\n    }\n}\n```\n<!--End PulumiCodeChooser -->\n\n## API Reference\n\nFor more information, see the [Redpanda Cloud Control Plane API documentation](https://docs.redpanda.com/api/cloud-controlplane-api/).\n\n## Import\n\n```sh\n$ pulumi import redpanda:index/serverlessCluster:ServerlessCluster example serverlessClusterId\n```\n\n","inputProperties":{"allowDeletion":{"type":"boolean"},"name":{"description":"Name of the serverless cluster\n","type":"string"},"networkingConfig":{"$ref":"#/types/redpanda:index%2FServerlessClusterNetworkingConfig:ServerlessClusterNetworkingConfig","description":"Network configuration controlling public/private access to the cluster\n"},"privateLinkId":{"description":"Private link ID for the serverless cluster. Must be set if private networking is enabled. Must match pattern `^[a-v0-9]{20}$`.\n","type":"string"},"resourceGroupId":{"description":"The ID of the Resource Group in which to create the serverless cluster\n","type":"string"},"serverlessRegion":{"description":"Redpanda specific region of the serverless cluster\n","type":"string"},"tags":{"additionalProperties":{"type":"string"},"description":"User-defined tags for the Serverless cluster\n","type":"object"},"timeouts":{"$ref":"#/types/redpanda:index%2FServerlessClusterTimeouts:ServerlessClusterTimeouts"}},"properties":{"allowDeletion":{"type":"boolean"},"clusterApiUrl":{"deprecationMessage":"Deprecated","description":"The URL of the dataplane API for the serverless cluster\n","type":"string"},"consolePrivateUrl":{"description":"Private Console URL for the serverless cluster\n","type":"string"},"consoleUrl":{"description":"Public Console URL for the serverless cluster\n","type":"string"},"dataplaneApi":{"$ref":"#/types/redpanda:index%2FServerlessClusterDataplaneApi:ServerlessClusterDataplaneApi","description":"Dataplane API endpoints for the serverless cluster\n"},"kafkaApi":{"$ref":"#/types/redpanda:index%2FServerlessClusterKafkaApi:ServerlessClusterKafkaApi","description":"Kafka API endpoints for the serverless cluster\n"},"name":{"description":"Name of the serverless cluster\n","type":"string"},"networkingConfig":{"$ref":"#/types/redpanda:index%2FServerlessClusterNetworkingConfig:ServerlessClusterNetworkingConfig","description":"Network configuration controlling public/private access to the cluster\n"},"plannedDeletion":{"$ref":"#/types/redpanda:index%2FServerlessClusterPlannedDeletion:ServerlessClusterPlannedDeletion","description":"Planned deletion information for the serverless cluster.\n"},"privateLinkId":{"description":"Private link ID for the serverless cluster. Must be set if private networking is enabled. Must match pattern `^[a-v0-9]{20}$`.\n","type":"string"},"prometheus":{"$ref":"#/types/redpanda:index%2FServerlessClusterPrometheus:ServerlessClusterPrometheus","description":"Prometheus metrics endpoints for the serverless cluster\n"},"resourceGroupId":{"description":"The ID of the Resource Group in which to create the serverless cluster\n","type":"string"},"schemaRegistry":{"$ref":"#/types/redpanda:index%2FServerlessClusterSchemaRegistry:ServerlessClusterSchemaRegistry","description":"Schema Registry endpoints for the serverless cluster\n"},"serverlessRegion":{"description":"Redpanda specific region of the serverless cluster\n","type":"string"},"state":{"description":"Current state of the serverless cluster.\n","type":"string"},"tags":{"additionalProperties":{"type":"string"},"description":"User-defined tags for the Serverless cluster\n","type":"object"},"timeouts":{"$ref":"#/types/redpanda:index%2FServerlessClusterTimeouts:ServerlessClusterTimeouts"}},"required":["allowDeletion","clusterApiUrl","consolePrivateUrl","consoleUrl","dataplaneApi","kafkaApi","name","networkingConfig","plannedDeletion","privateLinkId","prometheus","resourceGroupId","schemaRegistry","serverlessRegion","state"],"requiredInputs":["resourceGroupId","serverlessRegion"],"stateInputs":{"description":"Input properties used for looking up and filtering ServerlessCluster resources.\n","properties":{"allowDeletion":{"type":"boolean"},"clusterApiUrl":{"deprecationMessage":"Deprecated","description":"The URL of the dataplane API for the serverless cluster\n","type":"string"},"consolePrivateUrl":{"description":"Private Console URL for the serverless cluster\n","type":"string"},"consoleUrl":{"description":"Public Console URL for the serverless cluster\n","type":"string"},"dataplaneApi":{"$ref":"#/types/redpanda:index%2FServerlessClusterDataplaneApi:ServerlessClusterDataplaneApi","description":"Dataplane API endpoints for the serverless cluster\n"},"kafkaApi":{"$ref":"#/types/redpanda:index%2FServerlessClusterKafkaApi:ServerlessClusterKafkaApi","description":"Kafka API endpoints for the serverless cluster\n"},"name":{"description":"Name of the serverless cluster\n","type":"string"},"networkingConfig":{"$ref":"#/types/redpanda:index%2FServerlessClusterNetworkingConfig:ServerlessClusterNetworkingConfig","description":"Network configuration controlling public/private access to the cluster\n"},"plannedDeletion":{"$ref":"#/types/redpanda:index%2FServerlessClusterPlannedDeletion:ServerlessClusterPlannedDeletion","description":"Planned deletion information for the serverless cluster.\n"},"privateLinkId":{"description":"Private link ID for the serverless cluster. Must be set if private networking is enabled. Must match pattern `^[a-v0-9]{20}$`.\n","type":"string"},"prometheus":{"$ref":"#/types/redpanda:index%2FServerlessClusterPrometheus:ServerlessClusterPrometheus","description":"Prometheus metrics endpoints for the serverless cluster\n"},"resourceGroupId":{"description":"The ID of the Resource Group in which to create the serverless cluster\n","type":"string"},"schemaRegistry":{"$ref":"#/types/redpanda:index%2FServerlessClusterSchemaRegistry:ServerlessClusterSchemaRegistry","description":"Schema Registry endpoints for the serverless cluster\n"},"serverlessRegion":{"description":"Redpanda specific region of the serverless cluster\n","type":"string"},"state":{"description":"Current state of the serverless cluster.\n","type":"string"},"tags":{"additionalProperties":{"type":"string"},"description":"User-defined tags for the Serverless cluster\n","type":"object"},"timeouts":{"$ref":"#/types/redpanda:index%2FServerlessClusterTimeouts:ServerlessClusterTimeouts"}},"type":"object"},"type":"object"},"redpanda:index/serverlessPrivateLink:ServerlessPrivateLink":{"description":"Manages a Redpanda Serverless Private Link\n","inputProperties":{"allowDeletion":{"description":"Allows deletion of the serverless private link. Defaults to false.\n","type":"boolean"},"awsConfig":{"$ref":"#/types/redpanda:index%2FServerlessPrivateLinkAwsConfig:ServerlessPrivateLinkAwsConfig","description":"AWS-specific configuration. Required when cloud*provider is 'aws'.\n"},"cloudProvider":{"description":"Cloud provider (aws)\n","type":"string"},"cloudProviderConfig":{"$ref":"#/types/redpanda:index%2FServerlessPrivateLinkCloudProviderConfig:ServerlessPrivateLinkCloudProviderConfig","deprecationMessage":"Deprecated","description":"Cloud Provider Config configuration\n"},"name":{"description":"Name of the serverless private link\n","type":"string"},"resourceGroupId":{"description":"The ID of the Resource Group in which to create the serverless private link\n","type":"string"},"serverlessRegion":{"description":"Redpanda serverless region\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FServerlessPrivateLinkTimeouts:ServerlessPrivateLinkTimeouts"}},"properties":{"allowDeletion":{"description":"Allows deletion of the serverless private link. Defaults to false.\n","type":"boolean"},"awsConfig":{"$ref":"#/types/redpanda:index%2FServerlessPrivateLinkAwsConfig:ServerlessPrivateLinkAwsConfig","description":"AWS-specific configuration. Required when cloud*provider is 'aws'.\n"},"cloudProvider":{"description":"Cloud provider (aws)\n","type":"string"},"cloudProviderConfig":{"$ref":"#/types/redpanda:index%2FServerlessPrivateLinkCloudProviderConfig:ServerlessPrivateLinkCloudProviderConfig","deprecationMessage":"Deprecated","description":"Cloud Provider Config configuration\n"},"name":{"description":"Name of the serverless private link\n","type":"string"},"resourceGroupId":{"description":"The ID of the Resource Group in which to create the serverless private link\n","type":"string"},"serverlessRegion":{"description":"Redpanda serverless region\n","type":"string"},"state":{"description":"Current state of the serverless private link (STATE*CREATING, STATE*READY, STATE*DELETING, STATE*FAILED, STATE_UPDATING)\n","type":"string"},"status":{"$ref":"#/types/redpanda:index%2FServerlessPrivateLinkStatus:ServerlessPrivateLinkStatus","description":"Cloud provider specific status information\n"},"timeouts":{"$ref":"#/types/redpanda:index%2FServerlessPrivateLinkTimeouts:ServerlessPrivateLinkTimeouts"}},"required":["allowDeletion","awsConfig","cloudProvider","name","resourceGroupId","serverlessRegion","state","status"],"requiredInputs":["cloudProvider","resourceGroupId","serverlessRegion"],"stateInputs":{"description":"Input properties used for looking up and filtering ServerlessPrivateLink resources.\n","properties":{"allowDeletion":{"description":"Allows deletion of the serverless private link. Defaults to false.\n","type":"boolean"},"awsConfig":{"$ref":"#/types/redpanda:index%2FServerlessPrivateLinkAwsConfig:ServerlessPrivateLinkAwsConfig","description":"AWS-specific configuration. Required when cloud*provider is 'aws'.\n"},"cloudProvider":{"description":"Cloud provider (aws)\n","type":"string"},"cloudProviderConfig":{"$ref":"#/types/redpanda:index%2FServerlessPrivateLinkCloudProviderConfig:ServerlessPrivateLinkCloudProviderConfig","deprecationMessage":"Deprecated","description":"Cloud Provider Config configuration\n"},"name":{"description":"Name of the serverless private link\n","type":"string"},"resourceGroupId":{"description":"The ID of the Resource Group in which to create the serverless private link\n","type":"string"},"serverlessRegion":{"description":"Redpanda serverless region\n","type":"string"},"state":{"description":"Current state of the serverless private link (STATE*CREATING, STATE*READY, STATE*DELETING, STATE*FAILED, STATE_UPDATING)\n","type":"string"},"status":{"$ref":"#/types/redpanda:index%2FServerlessPrivateLinkStatus:ServerlessPrivateLinkStatus","description":"Cloud provider specific status information\n"},"timeouts":{"$ref":"#/types/redpanda:index%2FServerlessPrivateLinkTimeouts:ServerlessPrivateLinkTimeouts"}},"type":"object"},"type":"object"},"redpanda:index/serviceAccount:ServiceAccount":{"description":"## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = new redpanda.ServiceAccount(\"example\", {\n    name: \"ci-bot\",\n    description: \"Service account used by CI workloads.\",\n});\nexport const clientId = example.auth0ClientCredentials.apply(auth0ClientCredentials => auth0ClientCredentials.clientId);\nexport const clientSecret = example.auth0ClientCredentials.apply(auth0ClientCredentials => auth0ClientCredentials.clientSecret);\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.ServiceAccount(\"example\",\n    name=\"ci-bot\",\n    description=\"Service account used by CI workloads.\")\npulumi.export(\"clientId\", example.auth0_client_credentials.client_id)\npulumi.export(\"clientSecret\", example.auth0_client_credentials.client_secret)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = new Redpanda.ServiceAccount(\"example\", new()\n    {\n        Name = \"ci-bot\",\n        Description = \"Service account used by CI workloads.\",\n    });\n\n    return new Dictionary<string, object?>\n    {\n        [\"clientId\"] = example.Auth0ClientCredentials.Apply(auth0ClientCredentials => auth0ClientCredentials.ClientId),\n        [\"clientSecret\"] = example.Auth0ClientCredentials.Apply(auth0ClientCredentials => auth0ClientCredentials.ClientSecret),\n    };\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := redpanda.NewServiceAccount(ctx, \"example\", &redpanda.ServiceAccountArgs{\n\t\t\tName:        pulumi.String(\"ci-bot\"),\n\t\t\tDescription: pulumi.String(\"Service account used by CI workloads.\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"clientId\", example.Auth0ClientCredentials.ApplyT(func(auth0ClientCredentials redpanda.ServiceAccountAuth0ClientCredentials) (*string, error) {\n\t\t\treturn &auth0ClientCredentials.ClientId, nil\n\t\t}).(pulumi.StringPtrOutput))\n\t\tctx.Export(\"clientSecret\", example.Auth0ClientCredentials.ApplyT(func(auth0ClientCredentials redpanda.ServiceAccountAuth0ClientCredentials) (*string, error) {\n\t\t\treturn &auth0ClientCredentials.ClientSecret, 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.redpanda.ServiceAccount;\nimport com.pulumi.redpanda.ServiceAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ServiceAccount(\"example\", ServiceAccountArgs.builder()\n            .name(\"ci-bot\")\n            .description(\"Service account used by CI workloads.\")\n            .build());\n\n        ctx.export(\"clientId\", example.auth0ClientCredentials().applyValue(_auth0ClientCredentials -> _auth0ClientCredentials.clientId()));\n        ctx.export(\"clientSecret\", example.auth0ClientCredentials().applyValue(_auth0ClientCredentials -> _auth0ClientCredentials.clientSecret()));\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: redpanda:ServiceAccount\n    properties:\n      name: ci-bot\n      description: Service account used by CI workloads.\noutputs:\n  clientId: ${example.auth0ClientCredentials.clientId}\n  clientSecret: ${example.auth0ClientCredentials.clientSecret}\n```\n<!--End PulumiCodeChooser -->\n\n## API Reference\n\nFor more information, see the [Redpanda Cloud Control Plane API documentation](https://docs.redpanda.com/api/cloud-controlplane-api/).\n\n## Import\n\n```sh\n$ pulumi import redpanda:index/serviceAccount:ServiceAccount example serviceAccountId\n```\n\nWhere `serviceAccountId` is the 20-character identifier assigned by Redpanda Cloud.\n\n","inputProperties":{"description":{"description":"The description of the service_account. Length must be at most 140.\n","type":"string"},"name":{"description":"The unique name of the service account. Length must be between 3 and 128. Must match pattern `^[^<>]+$`.\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FServiceAccountTimeouts:ServiceAccountTimeouts"}},"properties":{"auth0ClientCredentials":{"$ref":"#/types/redpanda:index%2FServiceAccountAuth0ClientCredentials:ServiceAccountAuth0ClientCredentials","description":"Auth0 Client Credentials configuration\n"},"description":{"description":"The description of the service_account. Length must be at most 140.\n","type":"string"},"name":{"description":"The unique name of the service account. Length must be between 3 and 128. Must match pattern `^[^<>]+$`.\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FServiceAccountTimeouts:ServiceAccountTimeouts"}},"required":["auth0ClientCredentials","description","name"],"requiredInputs":["description"],"stateInputs":{"description":"Input properties used for looking up and filtering ServiceAccount resources.\n","properties":{"auth0ClientCredentials":{"$ref":"#/types/redpanda:index%2FServiceAccountAuth0ClientCredentials:ServiceAccountAuth0ClientCredentials","description":"Auth0 Client Credentials configuration\n"},"description":{"description":"The description of the service_account. Length must be at most 140.\n","type":"string"},"name":{"description":"The unique name of the service account. Length must be between 3 and 128. Must match pattern `^[^<>]+$`.\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FServiceAccountTimeouts:ServiceAccountTimeouts"}},"type":"object"},"type":"object"},"redpanda:index/shadowLink:ShadowLink":{"description":"ShadowLink configures asynchronous data replication from a source Redpanda cluster to a shadow (destination) cluster. The link is configuration on the shadow cluster — no infrastructure is provisioned. Each broker in the shadow cluster runs internal replication tasks that pull from the source over the standard Kafka API. The shadow cluster must have `enable_shadow_linking=true` set in its `cluster_configuration.custom_properties_json`.\n\nA shadow link is configuration on the destination (\"shadow\") cluster — no infrastructure is provisioned. Each broker in the shadow cluster runs internal replication tasks that pull from the source over the standard Kafka API. The source cluster is unaware of the link aside from increased fetch traffic.\n\n`enable_shadow_linking=true` must be set on the shadow cluster before this resource can be created. Set it via `redpanda_cluster.cluster_configuration.custom_properties_json`.\n\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst config = new pulumi.Config();\n// SCRAM password for the source cluster (will be stored as a dataplane secret)\nconst sourcePassword = config.require(\"sourcePassword\");\nconst example = new redpanda.ResourceGroup(\"example\", {name: \"example-resource-group\"});\nconst shadow = new redpanda.Network(\"shadow\", {\n    name: \"example-shadow-network\",\n    resourceGroupId: example.id,\n    cloudProvider: \"aws\",\n    region: \"us-west-2\",\n    clusterType: \"byoc\",\n    cidrBlock: \"10.1.0.0/20\",\n});\n// The shadow cluster runs the link. enable_shadow_linking must be set on this cluster.\nconst shadowCluster = new redpanda.Cluster(\"shadow\", {\n    name: \"example-shadow\",\n    resourceGroupId: example.id,\n    networkId: shadow.id,\n    cloudProvider: \"aws\",\n    region: \"us-west-2\",\n    clusterType: \"byoc\",\n    connectionType: \"public\",\n    throughputTier: \"tier-1-aws-v2-arm\",\n    zones: [\n        \"us-west-2a\",\n        \"us-west-2b\",\n        \"us-west-2c\",\n    ],\n    clusterConfiguration: {\n        customPropertiesJson: JSON.stringify({\n            enable_shadow_linking: true,\n        }),\n    },\n});\n// Store the SCRAM password used by the shadow link in the shadow cluster's secret store.\nconst sourcePasswordSecret = new redpanda.Secret(\"source_password\", {\n    name: \"SOURCE_PASSWORD\",\n    secretData: sourcePassword,\n    secretDataVersion: 1,\n    scopes: [\"SCOPE_REDPANDA_CLUSTER\"],\n    clusterApiUrl: shadowCluster.clusterApiUrl,\n    allowDeletion: true,\n});\nconst exampleShadowLink = new redpanda.ShadowLink(\"example\", {\n    name: \"example-link\",\n    shadowRedpandaId: shadowCluster.id,\n    sourceRedpandaId: \"redpanda-id-of-source-cluster\",\n    clientOptions: {\n        authenticationConfiguration: {\n            scramConfiguration: {\n                scramMechanism: \"SCRAM_SHA_256\",\n                username: \"shadow-link-user\",\n                password: pulumi.interpolate`${secrets.${sourcePasswordSecret.name}}`,\n            },\n        },\n    },\n    allowDeletion: true,\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_redpanda as redpanda\n\nconfig = pulumi.Config()\n# SCRAM password for the source cluster (will be stored as a dataplane secret)\nsource_password = config.require(\"sourcePassword\")\nexample = redpanda.ResourceGroup(\"example\", name=\"example-resource-group\")\nshadow = redpanda.Network(\"shadow\",\n    name=\"example-shadow-network\",\n    resource_group_id=example.id,\n    cloud_provider=\"aws\",\n    region=\"us-west-2\",\n    cluster_type=\"byoc\",\n    cidr_block=\"10.1.0.0/20\")\n# The shadow cluster runs the link. enable_shadow_linking must be set on this cluster.\nshadow_cluster = redpanda.Cluster(\"shadow\",\n    name=\"example-shadow\",\n    resource_group_id=example.id,\n    network_id=shadow.id,\n    cloud_provider=\"aws\",\n    region=\"us-west-2\",\n    cluster_type=\"byoc\",\n    connection_type=\"public\",\n    throughput_tier=\"tier-1-aws-v2-arm\",\n    zones=[\n        \"us-west-2a\",\n        \"us-west-2b\",\n        \"us-west-2c\",\n    ],\n    cluster_configuration={\n        \"custom_properties_json\": json.dumps({\n            \"enable_shadow_linking\": True,\n        }),\n    })\n# Store the SCRAM password used by the shadow link in the shadow cluster's secret store.\nsource_password_secret = redpanda.Secret(\"source_password\",\n    name=\"SOURCE_PASSWORD\",\n    secret_data=source_password,\n    secret_data_version=1,\n    scopes=[\"SCOPE_REDPANDA_CLUSTER\"],\n    cluster_api_url=shadow_cluster.cluster_api_url,\n    allow_deletion=True)\nexample_shadow_link = redpanda.ShadowLink(\"example\",\n    name=\"example-link\",\n    shadow_redpanda_id=shadow_cluster.id,\n    source_redpanda_id=\"redpanda-id-of-source-cluster\",\n    client_options={\n        \"authentication_configuration\": {\n            \"scram_configuration\": {\n                \"scram_mechanism\": \"SCRAM_SHA_256\",\n                \"username\": \"shadow-link-user\",\n                \"password\": source_password_secret.name.apply(lambda name: f\"${{secrets.{name}}}\"),\n            },\n        },\n    },\n    allow_deletion=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var config = new Config();\n    // SCRAM password for the source cluster (will be stored as a dataplane secret)\n    var sourcePassword = config.Require(\"sourcePassword\");\n    var example = new Redpanda.ResourceGroup(\"example\", new()\n    {\n        Name = \"example-resource-group\",\n    });\n\n    var shadow = new Redpanda.Network(\"shadow\", new()\n    {\n        Name = \"example-shadow-network\",\n        ResourceGroupId = example.Id,\n        CloudProvider = \"aws\",\n        Region = \"us-west-2\",\n        ClusterType = \"byoc\",\n        CidrBlock = \"10.1.0.0/20\",\n    });\n\n    // The shadow cluster runs the link. enable_shadow_linking must be set on this cluster.\n    var shadowCluster = new Redpanda.Cluster(\"shadow\", new()\n    {\n        Name = \"example-shadow\",\n        ResourceGroupId = example.Id,\n        NetworkId = shadow.Id,\n        CloudProvider = \"aws\",\n        Region = \"us-west-2\",\n        ClusterType = \"byoc\",\n        ConnectionType = \"public\",\n        ThroughputTier = \"tier-1-aws-v2-arm\",\n        Zones = new[]\n        {\n            \"us-west-2a\",\n            \"us-west-2b\",\n            \"us-west-2c\",\n        },\n        ClusterConfiguration = new Redpanda.Inputs.ClusterClusterConfigurationArgs\n        {\n            CustomPropertiesJson = JsonSerializer.Serialize(new Dictionary<string, object?>\n            {\n                [\"enable_shadow_linking\"] = true,\n            }),\n        },\n    });\n\n    // Store the SCRAM password used by the shadow link in the shadow cluster's secret store.\n    var sourcePasswordSecret = new Redpanda.Secret(\"source_password\", new()\n    {\n        Name = \"SOURCE_PASSWORD\",\n        SecretData = sourcePassword,\n        SecretDataVersion = 1,\n        Scopes = new[]\n        {\n            \"SCOPE_REDPANDA_CLUSTER\",\n        },\n        ClusterApiUrl = shadowCluster.ClusterApiUrl,\n        AllowDeletion = true,\n    });\n\n    var exampleShadowLink = new Redpanda.ShadowLink(\"example\", new()\n    {\n        Name = \"example-link\",\n        ShadowRedpandaId = shadowCluster.Id,\n        SourceRedpandaId = \"redpanda-id-of-source-cluster\",\n        ClientOptions = new Redpanda.Inputs.ShadowLinkClientOptionsArgs\n        {\n            AuthenticationConfiguration = new Redpanda.Inputs.ShadowLinkClientOptionsAuthenticationConfigurationArgs\n            {\n                ScramConfiguration = new Redpanda.Inputs.ShadowLinkClientOptionsAuthenticationConfigurationScramConfigurationArgs\n                {\n                    ScramMechanism = \"SCRAM_SHA_256\",\n                    Username = \"shadow-link-user\",\n                    Password = sourcePasswordSecret.Name.Apply(name => $\"${{secrets.{name}}}\"),\n                },\n            },\n        },\n        AllowDeletion = true,\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcfg := config.New(ctx, \"\")\n\t\t// SCRAM password for the source cluster (will be stored as a dataplane secret)\n\t\tsourcePassword := cfg.Require(\"sourcePassword\")\n\t\texample, err := redpanda.NewResourceGroup(ctx, \"example\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.String(\"example-resource-group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tshadow, err := redpanda.NewNetwork(ctx, \"shadow\", &redpanda.NetworkArgs{\n\t\t\tName:            pulumi.String(\"example-shadow-network\"),\n\t\t\tResourceGroupId: example.ID(),\n\t\t\tCloudProvider:   pulumi.String(\"aws\"),\n\t\t\tRegion:          pulumi.String(\"us-west-2\"),\n\t\t\tClusterType:     pulumi.String(\"byoc\"),\n\t\t\tCidrBlock:       pulumi.String(\"10.1.0.0/20\"),\n\t\t})\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\"enable_shadow_linking\": true,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tjson0 := string(tmpJSON0)\n\t\t// The shadow cluster runs the link. enable_shadow_linking must be set on this cluster.\n\t\tshadowCluster, err := redpanda.NewCluster(ctx, \"shadow\", &redpanda.ClusterArgs{\n\t\t\tName:            pulumi.String(\"example-shadow\"),\n\t\t\tResourceGroupId: example.ID(),\n\t\t\tNetworkId:       shadow.ID(),\n\t\t\tCloudProvider:   pulumi.String(\"aws\"),\n\t\t\tRegion:          pulumi.String(\"us-west-2\"),\n\t\t\tClusterType:     pulumi.String(\"byoc\"),\n\t\t\tConnectionType:  pulumi.String(\"public\"),\n\t\t\tThroughputTier:  pulumi.String(\"tier-1-aws-v2-arm\"),\n\t\t\tZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-west-2a\"),\n\t\t\t\tpulumi.String(\"us-west-2b\"),\n\t\t\t\tpulumi.String(\"us-west-2c\"),\n\t\t\t},\n\t\t\tClusterConfiguration: &redpanda.ClusterClusterConfigurationArgs{\n\t\t\t\tCustomPropertiesJson: pulumi.String(json0),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// Store the SCRAM password used by the shadow link in the shadow cluster's secret store.\n\t\tsourcePasswordSecret, err := redpanda.NewSecret(ctx, \"source_password\", &redpanda.SecretArgs{\n\t\t\tName:              pulumi.String(\"SOURCE_PASSWORD\"),\n\t\t\tSecretData:        pulumi.String(sourcePassword),\n\t\t\tSecretDataVersion: pulumi.Float64(1),\n\t\t\tScopes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"SCOPE_REDPANDA_CLUSTER\"),\n\t\t\t},\n\t\t\tClusterApiUrl: shadowCluster.ClusterApiUrl,\n\t\t\tAllowDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewShadowLink(ctx, \"example\", &redpanda.ShadowLinkArgs{\n\t\t\tName:             pulumi.String(\"example-link\"),\n\t\t\tShadowRedpandaId: shadowCluster.ID(),\n\t\t\tSourceRedpandaId: pulumi.String(\"redpanda-id-of-source-cluster\"),\n\t\t\tClientOptions: &redpanda.ShadowLinkClientOptionsArgs{\n\t\t\t\tAuthenticationConfiguration: &redpanda.ShadowLinkClientOptionsAuthenticationConfigurationArgs{\n\t\t\t\t\tScramConfiguration: &redpanda.ShadowLinkClientOptionsAuthenticationConfigurationScramConfigurationArgs{\n\t\t\t\t\t\tScramMechanism: pulumi.String(\"SCRAM_SHA_256\"),\n\t\t\t\t\t\tUsername:       pulumi.String(\"shadow-link-user\"),\n\t\t\t\t\t\tPassword: sourcePasswordSecret.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"${secrets.%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},\n\t\t\tAllowDeletion: 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.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.Network;\nimport com.pulumi.redpanda.NetworkArgs;\nimport com.pulumi.redpanda.Cluster;\nimport com.pulumi.redpanda.ClusterArgs;\nimport com.pulumi.redpanda.inputs.ClusterClusterConfigurationArgs;\nimport com.pulumi.redpanda.Secret;\nimport com.pulumi.redpanda.SecretArgs;\nimport com.pulumi.redpanda.ShadowLink;\nimport com.pulumi.redpanda.ShadowLinkArgs;\nimport com.pulumi.redpanda.inputs.ShadowLinkClientOptionsArgs;\nimport com.pulumi.redpanda.inputs.ShadowLinkClientOptionsAuthenticationConfigurationArgs;\nimport com.pulumi.redpanda.inputs.ShadowLinkClientOptionsAuthenticationConfigurationScramConfigurationArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n    public static void main(String[] args) {\n        Pulumi.run(App::stack);\n    }\n\n    public static void stack(Context ctx) {\n        final var config = ctx.config();\n        final var sourcePassword = config.get(\"sourcePassword\");\n        var example = new ResourceGroup(\"example\", ResourceGroupArgs.builder()\n            .name(\"example-resource-group\")\n            .build());\n\n        var shadow = new Network(\"shadow\", NetworkArgs.builder()\n            .name(\"example-shadow-network\")\n            .resourceGroupId(example.id())\n            .cloudProvider(\"aws\")\n            .region(\"us-west-2\")\n            .clusterType(\"byoc\")\n            .cidrBlock(\"10.1.0.0/20\")\n            .build());\n\n        // The shadow cluster runs the link. enable_shadow_linking must be set on this cluster.\n        var shadowCluster = new Cluster(\"shadowCluster\", ClusterArgs.builder()\n            .name(\"example-shadow\")\n            .resourceGroupId(example.id())\n            .networkId(shadow.id())\n            .cloudProvider(\"aws\")\n            .region(\"us-west-2\")\n            .clusterType(\"byoc\")\n            .connectionType(\"public\")\n            .throughputTier(\"tier-1-aws-v2-arm\")\n            .zones(            \n                \"us-west-2a\",\n                \"us-west-2b\",\n                \"us-west-2c\")\n            .clusterConfiguration(ClusterClusterConfigurationArgs.builder()\n                .customPropertiesJson(serializeJson(\n                    jsonObject(\n                        jsonProperty(\"enable_shadow_linking\", true)\n                    )))\n                .build())\n            .build());\n\n        // Store the SCRAM password used by the shadow link in the shadow cluster's secret store.\n        var sourcePasswordSecret = new Secret(\"sourcePasswordSecret\", SecretArgs.builder()\n            .name(\"SOURCE_PASSWORD\")\n            .secretData(sourcePassword)\n            .secretDataVersion(1.0)\n            .scopes(\"SCOPE_REDPANDA_CLUSTER\")\n            .clusterApiUrl(shadowCluster.clusterApiUrl())\n            .allowDeletion(true)\n            .build());\n\n        var exampleShadowLink = new ShadowLink(\"exampleShadowLink\", ShadowLinkArgs.builder()\n            .name(\"example-link\")\n            .shadowRedpandaId(shadowCluster.id())\n            .sourceRedpandaId(\"redpanda-id-of-source-cluster\")\n            .clientOptions(ShadowLinkClientOptionsArgs.builder()\n                .authenticationConfiguration(ShadowLinkClientOptionsAuthenticationConfigurationArgs.builder()\n                    .scramConfiguration(ShadowLinkClientOptionsAuthenticationConfigurationScramConfigurationArgs.builder()\n                        .scramMechanism(\"SCRAM_SHA_256\")\n                        .username(\"shadow-link-user\")\n                        .password(sourcePasswordSecret.name().applyValue(_name -> String.format(\"${{secrets.%s}}\", _name)))\n                        .build())\n                    .build())\n                .build())\n            .allowDeletion(true)\n            .build());\n\n    }\n}\n```\n```yaml\nconfiguration:\n  sourcePassword:\n    type: string\nresources:\n  example:\n    type: redpanda:ResourceGroup\n    properties:\n      name: example-resource-group\n  shadow:\n    type: redpanda:Network\n    properties:\n      name: example-shadow-network\n      resourceGroupId: ${example.id}\n      cloudProvider: aws\n      region: us-west-2\n      clusterType: byoc\n      cidrBlock: 10.1.0.0/20\n  # The shadow cluster runs the link. enable_shadow_linking must be set on this cluster.\n  shadowCluster:\n    type: redpanda:Cluster\n    name: shadow\n    properties:\n      name: example-shadow\n      resourceGroupId: ${example.id}\n      networkId: ${shadow.id}\n      cloudProvider: aws\n      region: us-west-2\n      clusterType: byoc\n      connectionType: public\n      throughputTier: tier-1-aws-v2-arm\n      zones:\n        - us-west-2a\n        - us-west-2b\n        - us-west-2c\n      clusterConfiguration:\n        customPropertiesJson:\n          fn::toJSON:\n            enable_shadow_linking: true\n  # Store the SCRAM password used by the shadow link in the shadow cluster's secret store.\n  sourcePasswordSecret:\n    type: redpanda:Secret\n    name: source_password\n    properties:\n      name: SOURCE_PASSWORD\n      secretData: ${sourcePassword}\n      secretDataVersion: 1\n      scopes:\n        - SCOPE_REDPANDA_CLUSTER\n      clusterApiUrl: ${shadowCluster.clusterApiUrl}\n      allowDeletion: true\n  exampleShadowLink:\n    type: redpanda:ShadowLink\n    name: example\n    properties:\n      name: example-link\n      shadowRedpandaId: ${shadowCluster.id}\n      sourceRedpandaId: redpanda-id-of-source-cluster\n      clientOptions:\n        authenticationConfiguration:\n          scramConfiguration:\n            scramMechanism: SCRAM_SHA_256\n            username: shadow-link-user\n            password: $${secrets.${sourcePasswordSecret.name}}\n      allowDeletion: true\n```\n<!--End PulumiCodeChooser -->\n\n## Source Connection\n\nExactly one of the following must be set (enforced at plan time):\n\n- <span pulumi-lang-nodejs=\"`sourceRedpandaId`\" pulumi-lang-dotnet=\"`SourceRedpandaId`\" pulumi-lang-go=\"`sourceRedpandaId`\" pulumi-lang-python=\"`source_redpanda_id`\" pulumi-lang-yaml=\"`sourceRedpandaId`\" pulumi-lang-java=\"`sourceRedpandaId`\">`source_redpanda_id`</span> — when both source and shadow are Redpanda Cloud clusters. The controlplane resolves bootstrap servers from the source cluster's metadata.\n- `client_options.bootstrap_servers` — explicit list of broker addresses for non-Redpanda Kafka or self-managed Redpanda sources.\n\nBoth options are immutable after creation; changing them forces the shadow link to be destroyed and recreated. The clusters themselves are not affected.\n\n## Authentication and TLS\n\nSASL credentials and the TLS private key (for mTLS) must reference dataplane secrets stored on the **shadow** cluster, using the form `${secrets.<NAME>}`. Provision the secrets with <span pulumi-lang-nodejs=\"`redpanda.Secret`\" pulumi-lang-dotnet=\"`redpanda.Secret`\" pulumi-lang-go=\"`Secret`\" pulumi-lang-python=\"`Secret`\" pulumi-lang-yaml=\"`redpanda.Secret`\" pulumi-lang-java=\"`redpanda.Secret`\">`redpanda.Secret`</span> in the same plan, scoped at minimum to `SCOPE_REDPANDA_CLUSTER`.\n\nThe provider validates the secret-reference format at plan time; the controlplane validates that the referenced secret exists when the shadow link is created. The plaintext value never leaves the shadow cluster's secret store.\n\nFor Redpanda Cloud public Kafka endpoints set `client_options.tls.enabled = true` — the broker rejects plaintext connections.\n\n## Source Cluster ACLs\n\nThe SASL principal must have at least these ACLs on the source cluster:\n\n- `CLUSTER:DESCRIBE` — fetch broker metadata\n- `TOPIC:DESCRIBE` (`*`) — discover topics\n- `TOPIC:READ` (matching the topics to be shadowed) — fetch records\n\n## Lifecycle\n\nCreate returns a long-running operation that resolves to one of the <span pulumi-lang-nodejs=\"`state`\" pulumi-lang-dotnet=\"`State`\" pulumi-lang-go=\"`state`\" pulumi-lang-python=\"`state`\" pulumi-lang-yaml=\"`state`\" pulumi-lang-java=\"`state`\">`state`</span> values. After the link reaches `STATE_ACTIVE`, broker tasks begin replicating. If the source connection cannot be established (auth, network, TLS) the link transitions to `STATE_CREATION_FAILED` and <span pulumi-lang-nodejs=\"`reason`\" pulumi-lang-dotnet=\"`Reason`\" pulumi-lang-go=\"`reason`\" pulumi-lang-python=\"`reason`\" pulumi-lang-yaml=\"`reason`\" pulumi-lang-java=\"`reason`\">`reason`</span> describes the cause; the resource is left in state as tainted so that the next apply re-creates it.\n\nUpdates other than <span pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\">`name`</span>, <span pulumi-lang-nodejs=\"`shadowRedpandaId`\" pulumi-lang-dotnet=\"`ShadowRedpandaId`\" pulumi-lang-go=\"`shadowRedpandaId`\" pulumi-lang-python=\"`shadow_redpanda_id`\" pulumi-lang-yaml=\"`shadowRedpandaId`\" pulumi-lang-java=\"`shadowRedpandaId`\">`shadow_redpanda_id`</span>, and <span pulumi-lang-nodejs=\"`sourceRedpandaId`\" pulumi-lang-dotnet=\"`SourceRedpandaId`\" pulumi-lang-go=\"`sourceRedpandaId`\" pulumi-lang-python=\"`source_redpanda_id`\" pulumi-lang-yaml=\"`sourceRedpandaId`\" pulumi-lang-java=\"`sourceRedpandaId`\">`source_redpanda_id`</span> are applied in place via the controlplane Update RPC.\n\n## Sync Options\n\nThe four sync option blocks control what gets replicated and at what cadence. All four are optional — server defaults apply when omitted. The provider exposes 1:1 parity with the controlplane API.\n\n### <span pulumi-lang-nodejs=\"`topicMetadataSyncOptions`\" pulumi-lang-dotnet=\"`TopicMetadataSyncOptions`\" pulumi-lang-go=\"`topicMetadataSyncOptions`\" pulumi-lang-python=\"`topic_metadata_sync_options`\" pulumi-lang-yaml=\"`topicMetadataSyncOptions`\" pulumi-lang-java=\"`topicMetadataSyncOptions`\">`topic_metadata_sync_options`</span>\n\nControls topic discovery and property replication.\n\n- **<span pulumi-lang-nodejs=\"`autoCreateShadowTopicFilters`\" pulumi-lang-dotnet=\"`AutoCreateShadowTopicFilters`\" pulumi-lang-go=\"`autoCreateShadowTopicFilters`\" pulumi-lang-python=\"`auto_create_shadow_topic_filters`\" pulumi-lang-yaml=\"`autoCreateShadowTopicFilters`\" pulumi-lang-java=\"`autoCreateShadowTopicFilters`\">`auto_create_shadow_topic_filters`</span>** — list of `NameFilter` ({<span pulumi-lang-nodejs=\"`patternType`\" pulumi-lang-dotnet=\"`PatternType`\" pulumi-lang-go=\"`patternType`\" pulumi-lang-python=\"`pattern_type`\" pulumi-lang-yaml=\"`patternType`\" pulumi-lang-java=\"`patternType`\">`pattern_type`</span>, <span pulumi-lang-nodejs=\"`filterType`\" pulumi-lang-dotnet=\"`FilterType`\" pulumi-lang-go=\"`filterType`\" pulumi-lang-python=\"`filter_type`\" pulumi-lang-yaml=\"`filterType`\" pulumi-lang-java=\"`filterType`\">`filter_type`</span>, <span pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\">`name`</span>}) selecting which source topics get auto-created as shadow topics. Required to populate this block to actually shadow any topics; an empty/absent block creates the link but ships no data.\n  - Server-side denylist: literal filters for `__consumer_offsets`, `_redpanda.audit_log`, and `_schemas` are rejected; prefix filters for `_redpanda` / `__redpanda` are rejected. Use a literal filter for those topics if needed.\n  - Wildcard `*` is only permitted with <span pulumi-lang-nodejs=\"`patternType \" pulumi-lang-dotnet=\"`PatternType \" pulumi-lang-go=\"`patternType \" pulumi-lang-python=\"`pattern_type \" pulumi-lang-yaml=\"`patternType \" pulumi-lang-java=\"`patternType \">`pattern_type </span>= PATTERN_TYPE_LITERAL` and won't match `_redpanda*` topics.\n- **<span pulumi-lang-nodejs=\"`syncedShadowTopicProperties`\" pulumi-lang-dotnet=\"`SyncedShadowTopicProperties`\" pulumi-lang-go=\"`syncedShadowTopicProperties`\" pulumi-lang-python=\"`synced_shadow_topic_properties`\" pulumi-lang-yaml=\"`syncedShadowTopicProperties`\" pulumi-lang-java=\"`syncedShadowTopicProperties`\">`synced_shadow_topic_properties`</span>** — extra topic properties to replicate beyond the always-synced set (<span pulumi-lang-nodejs=\"`partitionCount`\" pulumi-lang-dotnet=\"`PartitionCount`\" pulumi-lang-go=\"`partitionCount`\" pulumi-lang-python=\"`partition_count`\" pulumi-lang-yaml=\"`partitionCount`\" pulumi-lang-java=\"`partitionCount`\">`partition_count`</span>, `max.message.bytes`, `cleanup.policy`, `timestamp.type`). Server rejects `redpanda.remote.readreplica`, `redpanda.remote.recovery`, `redpanda.remote.allowgaps`, `redpanda.virtual.cluster.id`, `redpanda.leaders.preference`, `redpanda.storage.mode`.\n- **<span pulumi-lang-nodejs=\"`excludeDefault`\" pulumi-lang-dotnet=\"`ExcludeDefault`\" pulumi-lang-go=\"`excludeDefault`\" pulumi-lang-python=\"`exclude_default`\" pulumi-lang-yaml=\"`excludeDefault`\" pulumi-lang-java=\"`excludeDefault`\">`exclude_default`</span>** — when <span pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\">`true`</span>, only properties in <span pulumi-lang-nodejs=\"`syncedShadowTopicProperties`\" pulumi-lang-dotnet=\"`SyncedShadowTopicProperties`\" pulumi-lang-go=\"`syncedShadowTopicProperties`\" pulumi-lang-python=\"`synced_shadow_topic_properties`\" pulumi-lang-yaml=\"`syncedShadowTopicProperties`\" pulumi-lang-java=\"`syncedShadowTopicProperties`\">`synced_shadow_topic_properties`</span> are synced (the default replicated set is skipped).\n- **<span pulumi-lang-nodejs=\"`startOffset`\" pulumi-lang-dotnet=\"`StartOffset`\" pulumi-lang-go=\"`startOffset`\" pulumi-lang-python=\"`start_offset`\" pulumi-lang-yaml=\"`startOffset`\" pulumi-lang-java=\"`startOffset`\">`start_offset`</span>** — starting offset for new shadow topic partitions: exactly one of <span pulumi-lang-nodejs=\"`atEarliest`\" pulumi-lang-dotnet=\"`AtEarliest`\" pulumi-lang-go=\"`atEarliest`\" pulumi-lang-python=\"`at_earliest`\" pulumi-lang-yaml=\"`atEarliest`\" pulumi-lang-java=\"`atEarliest`\">`at_earliest`</span>, <span pulumi-lang-nodejs=\"`atLatest`\" pulumi-lang-dotnet=\"`AtLatest`\" pulumi-lang-go=\"`atLatest`\" pulumi-lang-python=\"`at_latest`\" pulumi-lang-yaml=\"`atLatest`\" pulumi-lang-java=\"`atLatest`\">`at_latest`</span>, <span pulumi-lang-nodejs=\"`atTimestamp`\" pulumi-lang-dotnet=\"`AtTimestamp`\" pulumi-lang-go=\"`atTimestamp`\" pulumi-lang-python=\"`at_timestamp`\" pulumi-lang-yaml=\"`atTimestamp`\" pulumi-lang-java=\"`atTimestamp`\">`at_timestamp`</span> (RFC3339).\n- **<span pulumi-lang-nodejs=\"`interval`\" pulumi-lang-dotnet=\"`Interval`\" pulumi-lang-go=\"`interval`\" pulumi-lang-python=\"`interval`\" pulumi-lang-yaml=\"`interval`\" pulumi-lang-java=\"`interval`\">`interval`</span>** / **<span pulumi-lang-nodejs=\"`paused`\" pulumi-lang-dotnet=\"`Paused`\" pulumi-lang-go=\"`paused`\" pulumi-lang-python=\"`paused`\" pulumi-lang-yaml=\"`paused`\" pulumi-lang-java=\"`paused`\">`paused`</span>** — sync cadence and pause toggle.\n\n### <span pulumi-lang-nodejs=\"`consumerOffsetSyncOptions`\" pulumi-lang-dotnet=\"`ConsumerOffsetSyncOptions`\" pulumi-lang-go=\"`consumerOffsetSyncOptions`\" pulumi-lang-python=\"`consumer_offset_sync_options`\" pulumi-lang-yaml=\"`consumerOffsetSyncOptions`\" pulumi-lang-java=\"`consumerOffsetSyncOptions`\">`consumer_offset_sync_options`</span>\n\nMirrors consumer group commit positions.\n\n- **<span pulumi-lang-nodejs=\"`groupFilters`\" pulumi-lang-dotnet=\"`GroupFilters`\" pulumi-lang-go=\"`groupFilters`\" pulumi-lang-python=\"`group_filters`\" pulumi-lang-yaml=\"`groupFilters`\" pulumi-lang-java=\"`groupFilters`\">`group_filters`</span>** — list of `NameFilter` selecting which consumer groups have offsets synced.\n- **<span pulumi-lang-nodejs=\"`interval`\" pulumi-lang-dotnet=\"`Interval`\" pulumi-lang-go=\"`interval`\" pulumi-lang-python=\"`interval`\" pulumi-lang-yaml=\"`interval`\" pulumi-lang-java=\"`interval`\">`interval`</span>** / **<span pulumi-lang-nodejs=\"`paused`\" pulumi-lang-dotnet=\"`Paused`\" pulumi-lang-go=\"`paused`\" pulumi-lang-python=\"`paused`\" pulumi-lang-yaml=\"`paused`\" pulumi-lang-java=\"`paused`\">`paused`</span>** — same as above.\n\n### <span pulumi-lang-nodejs=\"`securitySyncOptions`\" pulumi-lang-dotnet=\"`SecuritySyncOptions`\" pulumi-lang-go=\"`securitySyncOptions`\" pulumi-lang-python=\"`security_sync_options`\" pulumi-lang-yaml=\"`securitySyncOptions`\" pulumi-lang-java=\"`securitySyncOptions`\">`security_sync_options`</span>\n\nMirrors source ACLs to the shadow cluster.\n\n- **<span pulumi-lang-nodejs=\"`aclFilters`\" pulumi-lang-dotnet=\"`AclFilters`\" pulumi-lang-go=\"`aclFilters`\" pulumi-lang-python=\"`acl_filters`\" pulumi-lang-yaml=\"`aclFilters`\" pulumi-lang-java=\"`aclFilters`\">`acl_filters`</span>** — list of `ACLFilter` ({<span pulumi-lang-nodejs=\"`resourceFilter`\" pulumi-lang-dotnet=\"`ResourceFilter`\" pulumi-lang-go=\"`resourceFilter`\" pulumi-lang-python=\"`resource_filter`\" pulumi-lang-yaml=\"`resourceFilter`\" pulumi-lang-java=\"`resourceFilter`\">`resource_filter`</span>, <span pulumi-lang-nodejs=\"`accessFilter`\" pulumi-lang-dotnet=\"`AccessFilter`\" pulumi-lang-go=\"`accessFilter`\" pulumi-lang-python=\"`access_filter`\" pulumi-lang-yaml=\"`accessFilter`\" pulumi-lang-java=\"`accessFilter`\">`access_filter`</span>}). <span pulumi-lang-nodejs=\"`resourceFilter`\" pulumi-lang-dotnet=\"`ResourceFilter`\" pulumi-lang-go=\"`resourceFilter`\" pulumi-lang-python=\"`resource_filter`\" pulumi-lang-yaml=\"`resourceFilter`\" pulumi-lang-java=\"`resourceFilter`\">`resource_filter`</span> matches by <span pulumi-lang-nodejs=\"`resourceType`\" pulumi-lang-dotnet=\"`ResourceType`\" pulumi-lang-go=\"`resourceType`\" pulumi-lang-python=\"`resource_type`\" pulumi-lang-yaml=\"`resourceType`\" pulumi-lang-java=\"`resourceType`\">`resource_type`</span> (e.g. `ACL_RESOURCE_TOPIC`), <span pulumi-lang-nodejs=\"`patternType`\" pulumi-lang-dotnet=\"`PatternType`\" pulumi-lang-go=\"`patternType`\" pulumi-lang-python=\"`pattern_type`\" pulumi-lang-yaml=\"`patternType`\" pulumi-lang-java=\"`patternType`\">`pattern_type`</span> (e.g. `ACL_PATTERN_LITERAL`), <span pulumi-lang-nodejs=\"`name`\" pulumi-lang-dotnet=\"`Name`\" pulumi-lang-go=\"`name`\" pulumi-lang-python=\"`name`\" pulumi-lang-yaml=\"`name`\" pulumi-lang-java=\"`name`\">`name`</span>. <span pulumi-lang-nodejs=\"`accessFilter`\" pulumi-lang-dotnet=\"`AccessFilter`\" pulumi-lang-go=\"`accessFilter`\" pulumi-lang-python=\"`access_filter`\" pulumi-lang-yaml=\"`accessFilter`\" pulumi-lang-java=\"`accessFilter`\">`access_filter`</span> matches by <span pulumi-lang-nodejs=\"`principal`\" pulumi-lang-dotnet=\"`Principal`\" pulumi-lang-go=\"`principal`\" pulumi-lang-python=\"`principal`\" pulumi-lang-yaml=\"`principal`\" pulumi-lang-java=\"`principal`\">`principal`</span>, <span pulumi-lang-nodejs=\"`operation`\" pulumi-lang-dotnet=\"`Operation`\" pulumi-lang-go=\"`operation`\" pulumi-lang-python=\"`operation`\" pulumi-lang-yaml=\"`operation`\" pulumi-lang-java=\"`operation`\">`operation`</span> (e.g. `ACL_OPERATION_READ`), <span pulumi-lang-nodejs=\"`permissionType`\" pulumi-lang-dotnet=\"`PermissionType`\" pulumi-lang-go=\"`permissionType`\" pulumi-lang-python=\"`permission_type`\" pulumi-lang-yaml=\"`permissionType`\" pulumi-lang-java=\"`permissionType`\">`permission_type`</span>, <span pulumi-lang-nodejs=\"`host`\" pulumi-lang-dotnet=\"`Host`\" pulumi-lang-go=\"`host`\" pulumi-lang-python=\"`host`\" pulumi-lang-yaml=\"`host`\" pulumi-lang-java=\"`host`\">`host`</span>.\n- **<span pulumi-lang-nodejs=\"`interval`\" pulumi-lang-dotnet=\"`Interval`\" pulumi-lang-go=\"`interval`\" pulumi-lang-python=\"`interval`\" pulumi-lang-yaml=\"`interval`\" pulumi-lang-java=\"`interval`\">`interval`</span>** / **<span pulumi-lang-nodejs=\"`paused`\" pulumi-lang-dotnet=\"`Paused`\" pulumi-lang-go=\"`paused`\" pulumi-lang-python=\"`paused`\" pulumi-lang-yaml=\"`paused`\" pulumi-lang-java=\"`paused`\">`paused`</span>** — same as above.\n\n### <span pulumi-lang-nodejs=\"`schemaRegistrySyncOptions`\" pulumi-lang-dotnet=\"`SchemaRegistrySyncOptions`\" pulumi-lang-go=\"`schemaRegistrySyncOptions`\" pulumi-lang-python=\"`schema_registry_sync_options`\" pulumi-lang-yaml=\"`schemaRegistrySyncOptions`\" pulumi-lang-java=\"`schemaRegistrySyncOptions`\">`schema_registry_sync_options`</span>\n\n- **<span pulumi-lang-nodejs=\"`shadowSchemaRegistryTopic`\" pulumi-lang-dotnet=\"`ShadowSchemaRegistryTopic`\" pulumi-lang-go=\"`shadowSchemaRegistryTopic`\" pulumi-lang-python=\"`shadow_schema_registry_topic`\" pulumi-lang-yaml=\"`shadowSchemaRegistryTopic`\" pulumi-lang-java=\"`shadowSchemaRegistryTopic`\">`shadow_schema_registry_topic`</span>** — when <span pulumi-lang-nodejs=\"`true`\" pulumi-lang-dotnet=\"`True`\" pulumi-lang-go=\"`true`\" pulumi-lang-python=\"`true`\" pulumi-lang-yaml=\"`true`\" pulumi-lang-java=\"`true`\">`true`</span>, the shadow link will add the `_schemas` topic to its shadow set if (a) it exists on the source AND (b) it is absent or empty on the shadow. Toggling off after enablement does not undo the shadowing — fail it over or delete it explicitly.\n\n## Kafka Client Tuning\n\n<span pulumi-lang-nodejs=\"`clientOptions`\" pulumi-lang-dotnet=\"`ClientOptions`\" pulumi-lang-go=\"`clientOptions`\" pulumi-lang-python=\"`client_options`\" pulumi-lang-yaml=\"`clientOptions`\" pulumi-lang-java=\"`clientOptions`\">`client_options`</span> exposes the full set of Kafka client tuning fields (<span pulumi-lang-nodejs=\"`metadataMaxAgeMs`\" pulumi-lang-dotnet=\"`MetadataMaxAgeMs`\" pulumi-lang-go=\"`metadataMaxAgeMs`\" pulumi-lang-python=\"`metadata_max_age_ms`\" pulumi-lang-yaml=\"`metadataMaxAgeMs`\" pulumi-lang-java=\"`metadataMaxAgeMs`\">`metadata_max_age_ms`</span>, <span pulumi-lang-nodejs=\"`connectionTimeoutMs`\" pulumi-lang-dotnet=\"`ConnectionTimeoutMs`\" pulumi-lang-go=\"`connectionTimeoutMs`\" pulumi-lang-python=\"`connection_timeout_ms`\" pulumi-lang-yaml=\"`connectionTimeoutMs`\" pulumi-lang-java=\"`connectionTimeoutMs`\">`connection_timeout_ms`</span>, <span pulumi-lang-nodejs=\"`retryBackoffMs`\" pulumi-lang-dotnet=\"`RetryBackoffMs`\" pulumi-lang-go=\"`retryBackoffMs`\" pulumi-lang-python=\"`retry_backoff_ms`\" pulumi-lang-yaml=\"`retryBackoffMs`\" pulumi-lang-java=\"`retryBackoffMs`\">`retry_backoff_ms`</span>, <span pulumi-lang-nodejs=\"`fetchWaitMaxMs`\" pulumi-lang-dotnet=\"`FetchWaitMaxMs`\" pulumi-lang-go=\"`fetchWaitMaxMs`\" pulumi-lang-python=\"`fetch_wait_max_ms`\" pulumi-lang-yaml=\"`fetchWaitMaxMs`\" pulumi-lang-java=\"`fetchWaitMaxMs`\">`fetch_wait_max_ms`</span>, <span pulumi-lang-nodejs=\"`fetchMinBytes`\" pulumi-lang-dotnet=\"`FetchMinBytes`\" pulumi-lang-go=\"`fetchMinBytes`\" pulumi-lang-python=\"`fetch_min_bytes`\" pulumi-lang-yaml=\"`fetchMinBytes`\" pulumi-lang-java=\"`fetchMinBytes`\">`fetch_min_bytes`</span>, <span pulumi-lang-nodejs=\"`fetchMaxBytes`\" pulumi-lang-dotnet=\"`FetchMaxBytes`\" pulumi-lang-go=\"`fetchMaxBytes`\" pulumi-lang-python=\"`fetch_max_bytes`\" pulumi-lang-yaml=\"`fetchMaxBytes`\" pulumi-lang-java=\"`fetchMaxBytes`\">`fetch_max_bytes`</span>, <span pulumi-lang-nodejs=\"`fetchPartitionMaxBytes`\" pulumi-lang-dotnet=\"`FetchPartitionMaxBytes`\" pulumi-lang-go=\"`fetchPartitionMaxBytes`\" pulumi-lang-python=\"`fetch_partition_max_bytes`\" pulumi-lang-yaml=\"`fetchPartitionMaxBytes`\" pulumi-lang-java=\"`fetchPartitionMaxBytes`\">`fetch_partition_max_bytes`</span>). Each has a sibling `effective_*` Computed-only attribute reflecting the value the controlplane resolved (defaults applied when 0/unset). All are mutable via Update.\n\n## API Reference\n\nFor more information, see the [Redpanda Cloud Control Plane API – Shadow Links](https://docs.redpanda.com/api/doc/cloud-controlplane/tag/Shadow-Links/) documentation. The dataplane operations (failover, list shadow topics, metrics) are documented under [Shadow Links (Data Plane)](https://docs.redpanda.com/api/doc/cloud-dataplane/tag/Shadow-Links-Data-Plane/) but are not yet exposed by this provider.\n\n## Import\n\n```sh\n$ pulumi import redpanda:index/shadowLink:ShadowLink example shadowLinkId\n```\n\nAfter import, sensitive fields (`client_options.authentication.password`, `client_options.tls.key`) and `source_redpanda_id` are unset — the API does not echo any of these on Read. Re-supply them via the next `pulumi up`.\n\n","inputProperties":{"allowDeletion":{"description":"Allows deletion of the shadow link. Defaults to false.\n","type":"boolean"},"clientOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkClientOptions:ShadowLinkClientOptions","description":"ShadowLinkClientOptions configures the Kafka client connection settings.\n"},"consumerOffsetSyncOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkConsumerOffsetSyncOptions:ShadowLinkConsumerOffsetSyncOptions","description":"Options for syncing consumer offsets\n"},"name":{"description":"Human-readable name for the shadow link. Must be unique. Must follow Kubernetes DNS-1123 subdomain naming convention: - lowercase alphanumeric characters, hyphens allowed - must start and end with alphanumeric character - maximum 63 characters. Length must be at most 63. Must match pattern `^a-z0-9?$`.\n","type":"string"},"schemaRegistrySyncOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkSchemaRegistrySyncOptions:ShadowLinkSchemaRegistrySyncOptions","description":"Options for how the Schema Registry is synced.\n"},"securitySyncOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkSecuritySyncOptions:ShadowLinkSecuritySyncOptions","description":"Options for syncing security settings\n"},"shadowRedpandaId":{"description":"Shadow Redpanda cluster ID where the shadow link is created. This ID is immutable.\n","type":"string"},"sourceRedpandaId":{"description":"Source Redpanda ID\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FShadowLinkTimeouts:ShadowLinkTimeouts"},"topicMetadataSyncOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkTopicMetadataSyncOptions:ShadowLinkTopicMetadataSyncOptions","description":"Options for syncing topic metadata\n"}},"properties":{"allowDeletion":{"description":"Allows deletion of the shadow link. Defaults to false.\n","type":"boolean"},"clientOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkClientOptions:ShadowLinkClientOptions","description":"ShadowLinkClientOptions configures the Kafka client connection settings.\n"},"consumerOffsetSyncOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkConsumerOffsetSyncOptions:ShadowLinkConsumerOffsetSyncOptions","description":"Options for syncing consumer offsets\n"},"name":{"description":"Human-readable name for the shadow link. Must be unique. Must follow Kubernetes DNS-1123 subdomain naming convention: - lowercase alphanumeric characters, hyphens allowed - must start and end with alphanumeric character - maximum 63 characters. Length must be at most 63. Must match pattern `^a-z0-9?$`.\n","type":"string"},"reason":{"description":"Reason provides additional context for the current state.\n","type":"string"},"schemaRegistrySyncOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkSchemaRegistrySyncOptions:ShadowLinkSchemaRegistrySyncOptions","description":"Options for how the Schema Registry is synced.\n"},"securitySyncOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkSecuritySyncOptions:ShadowLinkSecuritySyncOptions","description":"Options for syncing security settings\n"},"shadowRedpandaId":{"description":"Shadow Redpanda cluster ID where the shadow link is created. This ID is immutable.\n","type":"string"},"sourceRedpandaId":{"description":"Source Redpanda ID\n","type":"string"},"state":{"description":"State represents the lifecycle state of a shadow link.\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FShadowLinkTimeouts:ShadowLinkTimeouts"},"topicMetadataSyncOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkTopicMetadataSyncOptions:ShadowLinkTopicMetadataSyncOptions","description":"Options for syncing topic metadata\n"}},"required":["allowDeletion","clientOptions","consumerOffsetSyncOptions","name","reason","schemaRegistrySyncOptions","securitySyncOptions","shadowRedpandaId","state","topicMetadataSyncOptions"],"requiredInputs":["shadowRedpandaId"],"stateInputs":{"description":"Input properties used for looking up and filtering ShadowLink resources.\n","properties":{"allowDeletion":{"description":"Allows deletion of the shadow link. Defaults to false.\n","type":"boolean"},"clientOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkClientOptions:ShadowLinkClientOptions","description":"ShadowLinkClientOptions configures the Kafka client connection settings.\n"},"consumerOffsetSyncOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkConsumerOffsetSyncOptions:ShadowLinkConsumerOffsetSyncOptions","description":"Options for syncing consumer offsets\n"},"name":{"description":"Human-readable name for the shadow link. Must be unique. Must follow Kubernetes DNS-1123 subdomain naming convention: - lowercase alphanumeric characters, hyphens allowed - must start and end with alphanumeric character - maximum 63 characters. Length must be at most 63. Must match pattern `^a-z0-9?$`.\n","type":"string"},"reason":{"description":"Reason provides additional context for the current state.\n","type":"string"},"schemaRegistrySyncOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkSchemaRegistrySyncOptions:ShadowLinkSchemaRegistrySyncOptions","description":"Options for how the Schema Registry is synced.\n"},"securitySyncOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkSecuritySyncOptions:ShadowLinkSecuritySyncOptions","description":"Options for syncing security settings\n"},"shadowRedpandaId":{"description":"Shadow Redpanda cluster ID where the shadow link is created. This ID is immutable.\n","type":"string"},"sourceRedpandaId":{"description":"Source Redpanda ID\n","type":"string"},"state":{"description":"State represents the lifecycle state of a shadow link.\n","type":"string"},"timeouts":{"$ref":"#/types/redpanda:index%2FShadowLinkTimeouts:ShadowLinkTimeouts"},"topicMetadataSyncOptions":{"$ref":"#/types/redpanda:index%2FShadowLinkTopicMetadataSyncOptions:ShadowLinkTopicMetadataSyncOptions","description":"Options for syncing topic metadata\n"}},"type":"object"},"type":"object"},"redpanda:index/topic:Topic":{"description":"Topic represents a Kafka topic configuration\n\nCreates a topic in a Redpanda Cluster\n\n\n## Example Usage\n\n<!--Start PulumiCodeChooser -->\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as redpanda from \"@pulumi/redpanda\";\n\nconst example = new redpanda.ResourceGroup(\"example\", {name: \"example-resource-group\"});\nconst exampleNetwork = new redpanda.Network(\"example\", {\n    name: \"example-network\",\n    resourceGroupId: example.id,\n    cloudProvider: \"aws\",\n    region: \"us-west-2\",\n    clusterType: \"dedicated\",\n    cidrBlock: \"10.0.0.0/20\",\n});\nconst exampleCluster = new redpanda.Cluster(\"example\", {\n    name: \"example-cluster\",\n    resourceGroupId: example.id,\n    networkId: exampleNetwork.id,\n    cloudProvider: \"aws\",\n    region: \"us-west-2\",\n    clusterType: \"dedicated\",\n    connectionType: \"public\",\n    throughputTier: \"tier-1-aws-v2-arm\",\n    zones: [\n        \"us-west-2a\",\n        \"us-west-2b\",\n        \"us-west-2c\",\n    ],\n});\nconst exampleTopic = new redpanda.Topic(\"example\", {\n    name: \"example-topic\",\n    partitionCount: 3,\n    replicationFactor: 3,\n    clusterApiUrl: exampleCluster.clusterApiUrl,\n    configuration: {\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": \"604800000\",\n    },\n});\n```\n```python\nimport pulumi\nimport pulumi_redpanda as redpanda\n\nexample = redpanda.ResourceGroup(\"example\", name=\"example-resource-group\")\nexample_network = redpanda.Network(\"example\",\n    name=\"example-network\",\n    resource_group_id=example.id,\n    cloud_provider=\"aws\",\n    region=\"us-west-2\",\n    cluster_type=\"dedicated\",\n    cidr_block=\"10.0.0.0/20\")\nexample_cluster = redpanda.Cluster(\"example\",\n    name=\"example-cluster\",\n    resource_group_id=example.id,\n    network_id=example_network.id,\n    cloud_provider=\"aws\",\n    region=\"us-west-2\",\n    cluster_type=\"dedicated\",\n    connection_type=\"public\",\n    throughput_tier=\"tier-1-aws-v2-arm\",\n    zones=[\n        \"us-west-2a\",\n        \"us-west-2b\",\n        \"us-west-2c\",\n    ])\nexample_topic = redpanda.Topic(\"example\",\n    name=\"example-topic\",\n    partition_count=3,\n    replication_factor=3,\n    cluster_api_url=example_cluster.cluster_api_url,\n    configuration={\n        \"cleanup.policy\": \"delete\",\n        \"retention.ms\": \"604800000\",\n    })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Redpanda = Pulumi.Redpanda;\n\nreturn await Deployment.RunAsync(() => \n{\n    var example = new Redpanda.ResourceGroup(\"example\", new()\n    {\n        Name = \"example-resource-group\",\n    });\n\n    var exampleNetwork = new Redpanda.Network(\"example\", new()\n    {\n        Name = \"example-network\",\n        ResourceGroupId = example.Id,\n        CloudProvider = \"aws\",\n        Region = \"us-west-2\",\n        ClusterType = \"dedicated\",\n        CidrBlock = \"10.0.0.0/20\",\n    });\n\n    var exampleCluster = new Redpanda.Cluster(\"example\", new()\n    {\n        Name = \"example-cluster\",\n        ResourceGroupId = example.Id,\n        NetworkId = exampleNetwork.Id,\n        CloudProvider = \"aws\",\n        Region = \"us-west-2\",\n        ClusterType = \"dedicated\",\n        ConnectionType = \"public\",\n        ThroughputTier = \"tier-1-aws-v2-arm\",\n        Zones = new[]\n        {\n            \"us-west-2a\",\n            \"us-west-2b\",\n            \"us-west-2c\",\n        },\n    });\n\n    var exampleTopic = new Redpanda.Topic(\"example\", new()\n    {\n        Name = \"example-topic\",\n        PartitionCount = 3,\n        ReplicationFactor = 3,\n        ClusterApiUrl = exampleCluster.ClusterApiUrl,\n        Configuration = \n        {\n            { \"cleanup.policy\", \"delete\" },\n            { \"retention.ms\", \"604800000\" },\n        },\n    });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-terraform-provider/sdks/go/redpanda/v2/redpanda\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texample, err := redpanda.NewResourceGroup(ctx, \"example\", &redpanda.ResourceGroupArgs{\n\t\t\tName: pulumi.String(\"example-resource-group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleNetwork, err := redpanda.NewNetwork(ctx, \"example\", &redpanda.NetworkArgs{\n\t\t\tName:            pulumi.String(\"example-network\"),\n\t\t\tResourceGroupId: example.ID(),\n\t\t\tCloudProvider:   pulumi.String(\"aws\"),\n\t\t\tRegion:          pulumi.String(\"us-west-2\"),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tCidrBlock:       pulumi.String(\"10.0.0.0/20\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleCluster, err := redpanda.NewCluster(ctx, \"example\", &redpanda.ClusterArgs{\n\t\t\tName:            pulumi.String(\"example-cluster\"),\n\t\t\tResourceGroupId: example.ID(),\n\t\t\tNetworkId:       exampleNetwork.ID(),\n\t\t\tCloudProvider:   pulumi.String(\"aws\"),\n\t\t\tRegion:          pulumi.String(\"us-west-2\"),\n\t\t\tClusterType:     pulumi.String(\"dedicated\"),\n\t\t\tConnectionType:  pulumi.String(\"public\"),\n\t\t\tThroughputTier:  pulumi.String(\"tier-1-aws-v2-arm\"),\n\t\t\tZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-west-2a\"),\n\t\t\t\tpulumi.String(\"us-west-2b\"),\n\t\t\t\tpulumi.String(\"us-west-2c\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redpanda.NewTopic(ctx, \"example\", &redpanda.TopicArgs{\n\t\t\tName:              pulumi.String(\"example-topic\"),\n\t\t\tPartitionCount:    pulumi.Float64(3),\n\t\t\tReplicationFactor: pulumi.Float64(3),\n\t\t\tClusterApiUrl:     exampleCluster.ClusterApiUrl,\n\t\t\tConfiguration: pulumi.StringMap{\n\t\t\t\t\"cleanup.policy\": pulumi.String(\"delete\"),\n\t\t\t\t\"retention.ms\":   pulumi.String(\"604800000\"),\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.redpanda.ResourceGroup;\nimport com.pulumi.redpanda.ResourceGroupArgs;\nimport com.pulumi.redpanda.Network;\nimport com.pulumi.redpanda.NetworkArgs;\nimport com.pulumi.redpanda.Cluster;\nimport com.pulumi.redpanda.ClusterArgs;\nimport com.pulumi.redpanda.Topic;\nimport com.pulumi.redpanda.TopicArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ResourceGroup(\"example\", ResourceGroupArgs.builder()\n            .name(\"example-resource-group\")\n            .build());\n\n        var exampleNetwork = new Network(\"exampleNetwork\", NetworkArgs.builder()\n            .name(\"example-network\")\n            .resourceGroupId(example.id())\n            .cloudProvider(\"aws\")\n            .region(\"us-west-2\")\n            .clusterType(\"dedicated\")\n            .cidrBlock(\"10.0.0.0/20\")\n            .build());\n\n        var exampleCluster = new Cluster(\"exampleCluster\", ClusterArgs.builder()\n            .name(\"example-cluster\")\n            .resourceGroupId(example.id())\n            .networkId(exampleNetwork.id())\n            .cloudProvider(\"aws\")\n            .region(\"us-west-2\")\n            .clusterType(\"dedicated\")\n            .connectionType(\"public\")\n            .throughputTier(\"tier-1-aws-v2-arm\")\n            .zones(            \n                \"us-west-2a\",\n                \"us-west-2b\",\n                \"us-west-2c\")\n            .build());\n\n        var exampleTopic = new Topic(\"exampleTopic\", TopicArgs.builder()\n            .name(\"example-topic\")\n            .partitionCount(3.0)\n            .replicationFactor(3.0)\n            .clusterApiUrl(exampleCluster.clusterApiUrl())\n            .configuration(Map.ofEntries(\n                Map.entry(\"cleanup.policy\", \"delete\"),\n                Map.entry(\"retention.ms\", \"604800000\")\n            ))\n            .build());\n\n    }\n}\n```\n```yaml\nresources:\n  example:\n    type: redpanda:ResourceGroup\n    properties:\n      name: example-resource-group\n  exampleNetwork:\n    type: redpanda:Network\n    name: example\n    properties:\n      name: example-network\n      resourceGroupId: ${example.id}\n      cloudProvider: aws\n      region: us-west-2\n      clusterType: dedicated\n      cidrBlock: 10.0.0.0/20\n  exampleCluster:\n    type: redpanda:Cluster\n    name: example\n    properties:\n      name: example-cluster\n      resourceGroupId: ${example.id}\n      networkId: ${exampleNetwork.id}\n      cloudProvider: aws\n      region: us-west-2\n      clusterType: dedicated\n      connectionType: public\n      throughputTier: tier-1-aws-v2-arm\n      zones:\n        - us-west-2a\n        - us-west-2b\n        - us-west-2c\n  exampleTopic:\n    type: redpanda:Topic\n    name: example\n    properties:\n      name: example-topic\n      partitionCount: 3\n      replicationFactor: 3\n      clusterApiUrl: ${exampleCluster.clusterApiUrl}\n      configuration:\n        cleanup.policy: delete\n        retention.ms: '604800000'\n```\n<!--End PulumiCodeChooser -->\n\n## Limitations\n\nWe are not currently able to support topic creation in self hosted clusters. This is an area of active development so expect that to change soon.\n\n## API Reference\n\nFor more information, see the [Redpanda Cloud Data Plane API documentation](https://docs.redpanda.com/api/cloud-dataplane-api/).\n\n## Import\n\n```sh\n$ pulumi import redpanda:index/topic:Topic example topicName,clusterId\n```\n\nWhere clusterId is the ID of the cluster in Redpanda Cloud\n\n","inputProperties":{"allowDeletion":{"description":"Indicates whether the topic can be deleted.\n","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports\n","type":"string"},"configuration":{"additionalProperties":{"type":"string"},"description":"A map of string key/value pairs of topic configurations.\n","type":"object"},"name":{"description":"The name of the topic. Length must be between 1 and 249. Must match pattern `^[a-zA-Z0-9._\\-]*$`.\n","type":"string"},"partitionCount":{"description":"The number of partitions for the topic. This determines how the data is distributed across brokers. Increases are fully supported without data loss. Decreases will destroy and recreate the topic if<span pulumi-lang-nodejs=\" allowDeletion \" pulumi-lang-dotnet=\" AllowDeletion \" pulumi-lang-go=\" allowDeletion \" pulumi-lang-python=\" allow_deletion \" pulumi-lang-yaml=\" allowDeletion \" pulumi-lang-java=\" allowDeletion \"> allow_deletion </span>is set to true (defaults to false). Must be at least -1.\n","type":"number"},"replicaAssignments":{"description":"Manually specify broker ID assignments for partition replicas. If manually assigning replicas, both replication*factor and partition*count must be -1. Mutually exclusive with partition*count and replication*factor.\n","items":{"$ref":"#/types/redpanda:index%2FTopicReplicaAssignment:TopicReplicaAssignment"},"type":"array"},"replicationFactor":{"description":"The replication factor for the topic, which defines how many copies of the data are kept across different brokers for fault tolerance. Must be between -1 and 5 (inclusive).\n","type":"number"}},"properties":{"allowDeletion":{"description":"Indicates whether the topic can be deleted.\n","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports\n","type":"string"},"configuration":{"additionalProperties":{"type":"string"},"description":"A map of string key/value pairs of topic configurations.\n","type":"object"},"name":{"description":"The name of the topic. Length must be between 1 and 249. Must match pattern `^[a-zA-Z0-9._\\-]*$`.\n","type":"string"},"partitionCount":{"description":"The number of partitions for the topic. This determines how the data is distributed across brokers. Increases are fully supported without data loss. Decreases will destroy and recreate the topic if<span pulumi-lang-nodejs=\" allowDeletion \" pulumi-lang-dotnet=\" AllowDeletion \" pulumi-lang-go=\" allowDeletion \" pulumi-lang-python=\" allow_deletion \" pulumi-lang-yaml=\" allowDeletion \" pulumi-lang-java=\" allowDeletion \"> allow_deletion </span>is set to true (defaults to false). Must be at least -1.\n","type":"number"},"replicaAssignments":{"description":"Manually specify broker ID assignments for partition replicas. If manually assigning replicas, both replication*factor and partition*count must be -1. Mutually exclusive with partition*count and replication*factor.\n","items":{"$ref":"#/types/redpanda:index%2FTopicReplicaAssignment:TopicReplicaAssignment"},"type":"array"},"replicationFactor":{"description":"The replication factor for the topic, which defines how many copies of the data are kept across different brokers for fault tolerance. Must be between -1 and 5 (inclusive).\n","type":"number"}},"required":["allowDeletion","clusterApiUrl","configuration","name","partitionCount","replicationFactor"],"requiredInputs":["clusterApiUrl"],"stateInputs":{"description":"Input properties used for looking up and filtering Topic resources.\n","properties":{"allowDeletion":{"description":"Indicates whether the topic can be deleted.\n","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports\n","type":"string"},"configuration":{"additionalProperties":{"type":"string"},"description":"A map of string key/value pairs of topic configurations.\n","type":"object"},"name":{"description":"The name of the topic. Length must be between 1 and 249. Must match pattern `^[a-zA-Z0-9._\\-]*$`.\n","type":"string"},"partitionCount":{"description":"The number of partitions for the topic. This determines how the data is distributed across brokers. Increases are fully supported without data loss. Decreases will destroy and recreate the topic if<span pulumi-lang-nodejs=\" allowDeletion \" pulumi-lang-dotnet=\" AllowDeletion \" pulumi-lang-go=\" allowDeletion \" pulumi-lang-python=\" allow_deletion \" pulumi-lang-yaml=\" allowDeletion \" pulumi-lang-java=\" allowDeletion \"> allow_deletion </span>is set to true (defaults to false). Must be at least -1.\n","type":"number"},"replicaAssignments":{"description":"Manually specify broker ID assignments for partition replicas. If manually assigning replicas, both replication*factor and partition*count must be -1. Mutually exclusive with partition*count and replication*factor.\n","items":{"$ref":"#/types/redpanda:index%2FTopicReplicaAssignment:TopicReplicaAssignment"},"type":"array"},"replicationFactor":{"description":"The replication factor for the topic, which defines how many copies of the data are kept across different brokers for fault tolerance. Must be between -1 and 5 (inclusive).\n","type":"number"}},"type":"object"},"type":"object"},"redpanda:index/user:User":{"description":"\n\n## Import\n\nBasic import with just user name and cluster ID\n\n```sh\n$ pulumi import redpanda:index/user:User example userName,clusterId\n```\n\nExtended import with password\n\n```sh\n$ pulumi import redpanda:index/user:User example userName,clusterId,password\n```\n\nExtended import with password and mechanism\n\n```sh\n$ pulumi import redpanda:index/user:User example userName,clusterId,password,mechanism\n```\n\nWhere:\n\n- `userName` is the name of the user\n\n- `clusterId` is the ID of the cluster in Redpanda Cloud\n\n- `password` (optional) is the user's password to set in state after import\n\n- `mechanism` (optional) is the authentication mechanism (e.g., `SCRAM-SHA-256`) and can only be passed in with password\n\n","inputProperties":{"allowDeletion":{"description":"Allows deletion of the user. If false, the user cannot be deleted and the resource will be removed from the state on destruction. Defaults to false.","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports\n","type":"string"},"mechanism":{"description":"Which authentication method to use, see https://docs.redpanda.com/current/manage/security/authentication/ for more information","type":"string"},"name":{"description":"Name of the user, must be unique. Length must be between 1 and 128.\n","type":"string"},"password":{"deprecationMessage":"Deprecated","description":"Password of the user. Deprecated: use<span pulumi-lang-nodejs=\" passwordWo \" pulumi-lang-dotnet=\" PasswordWo \" pulumi-lang-go=\" passwordWo \" pulumi-lang-python=\" password_wo \" pulumi-lang-yaml=\" passwordWo \" pulumi-lang-java=\" passwordWo \"> password_wo </span>instead to avoid storing password in state. Length must be between 3 and 128.","secret":true,"type":"string"},"passwordWo":{"type":"string"},"passwordWoVersion":{"description":"Version number for password_wo. Increment this value to trigger a password update when using password_wo.","type":"number"}},"properties":{"allowDeletion":{"description":"Allows deletion of the user. If false, the user cannot be deleted and the resource will be removed from the state on destruction. Defaults to false.","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports\n","type":"string"},"mechanism":{"description":"Which authentication method to use, see https://docs.redpanda.com/current/manage/security/authentication/ for more information","type":"string"},"name":{"description":"Name of the user, must be unique. Length must be between 1 and 128.\n","type":"string"},"password":{"deprecationMessage":"Deprecated","description":"Password of the user. Deprecated: use<span pulumi-lang-nodejs=\" passwordWo \" pulumi-lang-dotnet=\" PasswordWo \" pulumi-lang-go=\" passwordWo \" pulumi-lang-python=\" password_wo \" pulumi-lang-yaml=\" passwordWo \" pulumi-lang-java=\" passwordWo \"> password_wo </span>instead to avoid storing password in state. Length must be between 3 and 128.","secret":true,"type":"string"},"passwordWo":{"type":"string"},"passwordWoVersion":{"description":"Version number for password_wo. Increment this value to trigger a password update when using password_wo.","type":"number"}},"required":["allowDeletion","clusterApiUrl","mechanism","name"],"requiredInputs":["clusterApiUrl"],"stateInputs":{"description":"Input properties used for looking up and filtering User resources.\n","properties":{"allowDeletion":{"description":"Allows deletion of the user. If false, the user cannot be deleted and the resource will be removed from the state on destruction. Defaults to false.","type":"boolean"},"clusterApiUrl":{"description":"The cluster API URL. Changing this will prevent deletion of the resource on the existing cluster. It is generally a better idea to delete an existing resource and create a new one than to change this value unless you are planning to do state imports\n","type":"string"},"mechanism":{"description":"Which authentication method to use, see https://docs.redpanda.com/current/manage/security/authentication/ for more information","type":"string"},"name":{"description":"Name of the user, must be unique. Length must be between 1 and 128.\n","type":"string"},"password":{"deprecationMessage":"Deprecated","description":"Password of the user. Deprecated: use<span pulumi-lang-nodejs=\" passwordWo \" pulumi-lang-dotnet=\" PasswordWo \" pulumi-lang-go=\" passwordWo \" pulumi-lang-python=\" password_wo \" pulumi-lang-yaml=\" passwordWo \" pulumi-lang-java=\" passwordWo \"> password_wo </span>instead to avoid storing password in state. Length must be between 3 and 128.","secret":true,"type":"string"},"passwordWo":{"type":"string"},"passwordWoVersion":{"description":"Version number for password_wo. Increment this value to trigger a password update when using password_wo.","type":"number"}},"type":"object"},"type":"object"}},"types":{"redpanda:index/ClusterAwsPrivateLink:ClusterAwsPrivateLink":{"language":{"nodejs":{"requiredOutputs":["allowedPrincipals","connectConsole","enabled","status","supportedRegions"]}},"properties":{"allowedPrincipals":{"description":"ARN of the principals that can access the Redpanda AWS PrivateLink Endpoint Service\n","items":{"type":"string"},"type":"array"},"connectConsole":{"description":"Whether Console is connected in Redpanda AWS Private Link Service.\n","type":"boolean"},"enabled":{"description":"Whether Redpanda AWS Private Link Endpoint Service is enabled.\n","type":"boolean"},"status":{"$ref":"#/types/redpanda:index%2FClusterAwsPrivateLinkStatus:ClusterAwsPrivateLinkStatus","description":"Status configuration\n"},"supportedRegions":{"description":"List of supported regions in cross-region AWS PrivateLink.\n","items":{"type":"string"},"type":"array"}},"required":["allowedPrincipals","connectConsole","enabled"],"type":"object"},"redpanda:index/ClusterAwsPrivateLinkStatus:ClusterAwsPrivateLinkStatus":{"language":{"nodejs":{"requiredOutputs":["consolePort","kafkaApiNodeBasePort","kafkaApiSeedPort","redpandaProxyNodeBasePort","redpandaProxySeedPort","schemaRegistrySeedPort","serviceId","serviceName","serviceState","vpcEndpointConnections"]}},"properties":{"consolePort":{"description":"The port of Redpanda Console.\n","type":"number"},"kafkaApiNodeBasePort":{"description":"Kafka API node service base port. The port for node <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span> (0 .. node*count-1) is kafka*api*node*base_port + <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span>.\n","type":"number"},"kafkaApiSeedPort":{"description":"Kafka API seed service port.\n","type":"number"},"redpandaProxyNodeBasePort":{"description":"HTTP Proxy node service base port. The port for node <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span> (0 .. node*count-1) is redpanda*proxy*node*base_port + i.\n","type":"number"},"redpandaProxySeedPort":{"description":"HTTP Proxy seed service port.\n","type":"number"},"schemaRegistrySeedPort":{"description":"Schema Registry seed service port.\n","type":"number"},"serviceId":{"description":"ID of Redpanda AWS PrivateLink Endpoint Service.\n","type":"string"},"serviceName":{"description":"Name of Redpanda AWS PrivateLink Endpoint Service.\n","type":"string"},"serviceState":{"description":"State of Redpanda AWS PrivateLink Endpoint Service.\n","type":"string"},"vpcEndpointConnections":{"description":"List of VPC endpoints with established connections to Redpanda AWS PrivateLink Endpoint Service.\n","items":{"$ref":"#/types/redpanda:index%2FClusterAwsPrivateLinkStatusVpcEndpointConnection:ClusterAwsPrivateLinkStatusVpcEndpointConnection"},"type":"array"}},"type":"object"},"redpanda:index/ClusterAwsPrivateLinkStatusVpcEndpointConnection:ClusterAwsPrivateLinkStatusVpcEndpointConnection":{"language":{"nodejs":{"requiredOutputs":["connectionId","dnsEntries","id","loadBalancerArns","owner","state"]}},"properties":{"connectionId":{"description":"Connection ID of VPC endpoint connected to Redpanda AWS PrivateLink Endpoint Service.\n","type":"string"},"dnsEntries":{"description":"The list of DNS entries associated with VPC endpoint.\n","items":{"$ref":"#/types/redpanda:index%2FClusterAwsPrivateLinkStatusVpcEndpointConnectionDnsEntry:ClusterAwsPrivateLinkStatusVpcEndpointConnectionDnsEntry"},"type":"array"},"id":{"description":"The ID of VPC endpoint.\n","type":"string"},"loadBalancerArns":{"description":"List of load balancer ARNs.\n","items":{"type":"string"},"type":"array"},"owner":{"description":"The owner of VPC endpoint.\n","type":"string"},"state":{"description":"The state of VPC endpoint connected to Redpanda AWS PrivateLink Endpoint Service.\n","type":"string"}},"type":"object"},"redpanda:index/ClusterAwsPrivateLinkStatusVpcEndpointConnectionDnsEntry:ClusterAwsPrivateLinkStatusVpcEndpointConnectionDnsEntry":{"language":{"nodejs":{"requiredOutputs":["dnsName","hostedZoneId"]}},"properties":{"dnsName":{"description":"DNS entry of VPC endpoint connected to Redpanda AWS PrivateLink Endpoint Service.\n","type":"string"},"hostedZoneId":{"description":"The ID of Route53 DNS zone.\n","type":"string"}},"type":"object"},"redpanda:index/ClusterAzurePrivateLink:ClusterAzurePrivateLink":{"language":{"nodejs":{"requiredOutputs":["allowedSubscriptions","connectConsole","enabled","status"]}},"properties":{"allowedSubscriptions":{"description":"Azure subscription IDs allowed to access the Redpanda Private Link Endpoint Service\n","items":{"type":"string"},"type":"array"},"connectConsole":{"description":"Whether Console is connected in Redpanda Azure Private Link Service.\n","type":"boolean"},"enabled":{"description":"Whether Redpanda AWS Private Link Endpoint Service is enabled.\n","type":"boolean"},"status":{"$ref":"#/types/redpanda:index%2FClusterAzurePrivateLinkStatus:ClusterAzurePrivateLinkStatus","description":"Status configuration\n"}},"required":["allowedSubscriptions","connectConsole","enabled"],"type":"object"},"redpanda:index/ClusterAzurePrivateLinkStatus:ClusterAzurePrivateLinkStatus":{"language":{"nodejs":{"requiredOutputs":["approvedSubscriptions","consolePort","dnsARecord","kafkaApiNodeBasePort","kafkaApiSeedPort","privateEndpointConnections","redpandaProxyNodeBasePort","redpandaProxySeedPort","schemaRegistrySeedPort","serviceId","serviceName"]}},"properties":{"approvedSubscriptions":{"description":"These are the approved subscriptions on the private link\n","items":{"type":"string"},"type":"array"},"consolePort":{"description":"The port of Redpanda Console.\n","type":"number"},"dnsARecord":{"description":"dns*a*dns*a*recordrecord is the DNS A record the customer will create pointing at the their PE\n","type":"string"},"kafkaApiNodeBasePort":{"description":"Kafka API node service base port. The port for node <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span> (0 .. node*count-1) is kafka*api*node*base_port + <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span>.\n","type":"number"},"kafkaApiSeedPort":{"description":"Kafka API seed service port.\n","type":"number"},"privateEndpointConnections":{"description":"List of private endpoint connections to Redpanda Azure Private Link Service.\n","items":{"$ref":"#/types/redpanda:index%2FClusterAzurePrivateLinkStatusPrivateEndpointConnection:ClusterAzurePrivateLinkStatusPrivateEndpointConnection"},"type":"array"},"redpandaProxyNodeBasePort":{"description":"HTTP Proxy node service base port. The port for node <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span> (0 .. node*count-1) is redpanda*proxy*node*base_port + i.\n","type":"number"},"redpandaProxySeedPort":{"description":"HTTP Proxy seed service port.\n","type":"number"},"schemaRegistrySeedPort":{"description":"Schema Registry seed service port.\n","type":"number"},"serviceId":{"description":"ID of Redpanda Azure PrivateLink Endpoint Service.\n","type":"string"},"serviceName":{"description":"Name of Redpanda Azure PrivateLink Endpoint Service.\n","type":"string"}},"type":"object"},"redpanda:index/ClusterAzurePrivateLinkStatusPrivateEndpointConnection:ClusterAzurePrivateLinkStatusPrivateEndpointConnection":{"language":{"nodejs":{"requiredOutputs":["connectionId","connectionName","privateEndpointId","privateEndpointName","status"]}},"properties":{"connectionId":{"description":"ConnectionID is the id of the connection between the private endpoint and the private link service\n","type":"string"},"connectionName":{"description":"ConnectionName is the name of the connection between the private endpoint and the private link service\n","type":"string"},"privateEndpointId":{"description":"Resource ID of Private Endpoint to Redpanda Azure PrivateLink Endpoint Service.\n","type":"string"},"privateEndpointName":{"description":"The name of the PrivateEndpointConnection.\n","type":"string"},"status":{"description":"The status of private endpoint connected to Redpanda Azure PrivateLink Endpoint Service.\n","type":"string"}},"type":"object"},"redpanda:index/ClusterCloudStorage:ClusterCloudStorage":{"language":{"nodejs":{"requiredOutputs":["aws","azure","gcp","skipDestroy"]}},"properties":{"aws":{"$ref":"#/types/redpanda:index%2FClusterCloudStorageAws:ClusterCloudStorageAws","description":"AWS configuration\n"},"azure":{"$ref":"#/types/redpanda:index%2FClusterCloudStorageAzure:ClusterCloudStorageAzure","description":"Azure configuration\n"},"gcp":{"$ref":"#/types/redpanda:index%2FClusterCloudStorageGcp:ClusterCloudStorageGcp","description":"GCP configuration\n"},"skipDestroy":{"description":"If true, cloud storage is not deleted when the cluster is destroyed\n","type":"boolean"}},"type":"object"},"redpanda:index/ClusterCloudStorageAws:ClusterCloudStorageAws":{"language":{"nodejs":{"requiredOutputs":["arn"]}},"properties":{"arn":{"description":"ARN for the AWS\n","type":"string"}},"type":"object"},"redpanda:index/ClusterCloudStorageAzure:ClusterCloudStorageAzure":{"language":{"nodejs":{"requiredOutputs":["containerName","storageAccountName"]}},"properties":{"containerName":{"description":"Name of the Azure storage container\n","type":"string"},"storageAccountName":{"description":"Name of the Azure storage account\n","type":"string"}},"type":"object"},"redpanda:index/ClusterCloudStorageGcp:ClusterCloudStorageGcp":{"language":{"nodejs":{"requiredOutputs":["name"]}},"properties":{"name":{"description":"Name of the GCP storage bucket\n","type":"string"}},"type":"object"},"redpanda:index/ClusterClusterConfiguration:ClusterClusterConfiguration":{"language":{"nodejs":{"requiredOutputs":["customPropertiesJson"]}},"properties":{"customPropertiesJson":{"description":"Custom cluster configuration properties in JSON format\n","type":"string"}},"type":"object"},"redpanda:index/ClusterCustomerManagedResources:ClusterCustomerManagedResources":{"properties":{"aws":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAws:ClusterCustomerManagedResourcesAws","description":"AWS resources created and managed by user, and required to deploy the Redpanda cluster.\n"},"gcp":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesGcp:ClusterCustomerManagedResourcesGcp","description":"GCP resources created and managed by user, and required to deploy the Redpanda cluster. See [Create a BYOVPC Cluster on GCP](https://docs.redpanda.com/redpanda-cloud/get-started/cluster-types/byoc/gcp/vpc-byo-gcp/).\n"}},"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAws:ClusterCustomerManagedResourcesAws":{"properties":{"agentInstanceProfile":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsAgentInstanceProfile:ClusterCustomerManagedResourcesAwsAgentInstanceProfile","description":"AWS instance profile.\n"},"cloudStorageBucket":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsCloudStorageBucket:ClusterCustomerManagedResourcesAwsCloudStorageBucket","description":"AWS storage bucket properties by ARN.\n"},"clusterSecurityGroup":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsClusterSecurityGroup:ClusterCustomerManagedResourcesAwsClusterSecurityGroup","description":"Security Group identifies AWS security group.\n"},"connectorsNodeGroupInstanceProfile":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsConnectorsNodeGroupInstanceProfile:ClusterCustomerManagedResourcesAwsConnectorsNodeGroupInstanceProfile","description":"AWS instance profile.\n"},"connectorsSecurityGroup":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsConnectorsSecurityGroup:ClusterCustomerManagedResourcesAwsConnectorsSecurityGroup","description":"Security Group identifies AWS security group.\n"},"k8sClusterRole":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsK8sClusterRole:ClusterCustomerManagedResourcesAwsK8sClusterRole","description":"Role identifies AWS role.\n"},"nodeSecurityGroup":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsNodeSecurityGroup:ClusterCustomerManagedResourcesAwsNodeSecurityGroup","description":"Security Group identifies AWS security group.\n"},"permissionsBoundaryPolicy":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsPermissionsBoundaryPolicy:ClusterCustomerManagedResourcesAwsPermissionsBoundaryPolicy","description":"Policy identifies an AWS policy.\n"},"redpandaAgentSecurityGroup":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsRedpandaAgentSecurityGroup:ClusterCustomerManagedResourcesAwsRedpandaAgentSecurityGroup","description":"Security Group identifies AWS security group.\n"},"redpandaConnectNodeGroupInstanceProfile":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsRedpandaConnectNodeGroupInstanceProfile:ClusterCustomerManagedResourcesAwsRedpandaConnectNodeGroupInstanceProfile","description":"AWS instance profile.\n"},"redpandaConnectSecurityGroup":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsRedpandaConnectSecurityGroup:ClusterCustomerManagedResourcesAwsRedpandaConnectSecurityGroup","description":"Security Group identifies AWS security group.\n"},"redpandaNodeGroupInstanceProfile":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsRedpandaNodeGroupInstanceProfile:ClusterCustomerManagedResourcesAwsRedpandaNodeGroupInstanceProfile","description":"AWS instance profile.\n"},"redpandaNodeGroupSecurityGroup":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsRedpandaNodeGroupSecurityGroup:ClusterCustomerManagedResourcesAwsRedpandaNodeGroupSecurityGroup","description":"Security Group identifies AWS security group.\n"},"utilityNodeGroupInstanceProfile":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsUtilityNodeGroupInstanceProfile:ClusterCustomerManagedResourcesAwsUtilityNodeGroupInstanceProfile","description":"AWS instance profile.\n"},"utilitySecurityGroup":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesAwsUtilitySecurityGroup:ClusterCustomerManagedResourcesAwsUtilitySecurityGroup","description":"Security Group identifies AWS security group.\n"}},"required":["agentInstanceProfile","cloudStorageBucket","clusterSecurityGroup","connectorsNodeGroupInstanceProfile","connectorsSecurityGroup","k8sClusterRole","nodeSecurityGroup","permissionsBoundaryPolicy","redpandaAgentSecurityGroup","redpandaNodeGroupInstanceProfile","redpandaNodeGroupSecurityGroup","utilityNodeGroupInstanceProfile","utilitySecurityGroup"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsAgentInstanceProfile:ClusterCustomerManagedResourcesAwsAgentInstanceProfile":{"properties":{"arn":{"description":"AWS instance profile ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsCloudStorageBucket:ClusterCustomerManagedResourcesAwsCloudStorageBucket":{"properties":{"arn":{"description":"AWS storage bucket identifier.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsClusterSecurityGroup:ClusterCustomerManagedResourcesAwsClusterSecurityGroup":{"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsConnectorsNodeGroupInstanceProfile:ClusterCustomerManagedResourcesAwsConnectorsNodeGroupInstanceProfile":{"properties":{"arn":{"description":"AWS instance profile ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsConnectorsSecurityGroup:ClusterCustomerManagedResourcesAwsConnectorsSecurityGroup":{"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsK8sClusterRole:ClusterCustomerManagedResourcesAwsK8sClusterRole":{"properties":{"arn":{"description":"AWS role ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsNodeSecurityGroup:ClusterCustomerManagedResourcesAwsNodeSecurityGroup":{"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsPermissionsBoundaryPolicy:ClusterCustomerManagedResourcesAwsPermissionsBoundaryPolicy":{"properties":{"arn":{"description":"AWS policy ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsRedpandaAgentSecurityGroup:ClusterCustomerManagedResourcesAwsRedpandaAgentSecurityGroup":{"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsRedpandaConnectNodeGroupInstanceProfile:ClusterCustomerManagedResourcesAwsRedpandaConnectNodeGroupInstanceProfile":{"properties":{"arn":{"description":"AWS instance profile ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsRedpandaConnectSecurityGroup:ClusterCustomerManagedResourcesAwsRedpandaConnectSecurityGroup":{"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsRedpandaNodeGroupInstanceProfile:ClusterCustomerManagedResourcesAwsRedpandaNodeGroupInstanceProfile":{"properties":{"arn":{"description":"AWS instance profile ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsRedpandaNodeGroupSecurityGroup:ClusterCustomerManagedResourcesAwsRedpandaNodeGroupSecurityGroup":{"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsUtilityNodeGroupInstanceProfile:ClusterCustomerManagedResourcesAwsUtilityNodeGroupInstanceProfile":{"properties":{"arn":{"description":"AWS instance profile ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesAwsUtilitySecurityGroup:ClusterCustomerManagedResourcesAwsUtilitySecurityGroup":{"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesGcp:ClusterCustomerManagedResourcesGcp":{"properties":{"agentServiceAccount":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesGcpAgentServiceAccount:ClusterCustomerManagedResourcesGcpAgentServiceAccount","description":"GCP service account.\n"},"connectorServiceAccount":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesGcpConnectorServiceAccount:ClusterCustomerManagedResourcesGcpConnectorServiceAccount","description":"GCP service account.\n"},"consoleServiceAccount":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesGcpConsoleServiceAccount:ClusterCustomerManagedResourcesGcpConsoleServiceAccount","description":"GCP service account.\n"},"gkeServiceAccount":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesGcpGkeServiceAccount:ClusterCustomerManagedResourcesGcpGkeServiceAccount","description":"GCP service account.\n"},"pscNatSubnetName":{"description":"NAT subnet name if GCP Private Service Connect (a.k.a Private Link) is enabled. If it is used for PSC v1, use psc*v2*nat*subnet*name to set NAT subnet name for PSC v2.\n","type":"string"},"redpandaClusterServiceAccount":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesGcpRedpandaClusterServiceAccount:ClusterCustomerManagedResourcesGcpRedpandaClusterServiceAccount","description":"GCP service account.\n"},"subnet":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesGcpSubnet:ClusterCustomerManagedResourcesGcpSubnet","description":"GCP subnet properties. See the official [GCP API reference](https://cloud.google.com/compute/docs/reference/rest/v1/subnetworks).\n"},"tieredStorageBucket":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesGcpTieredStorageBucket:ClusterCustomerManagedResourcesGcpTieredStorageBucket","description":"GCP storage bucket properties.\n"}},"required":["agentServiceAccount","connectorServiceAccount","consoleServiceAccount","gkeServiceAccount","redpandaClusterServiceAccount","subnet","tieredStorageBucket"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesGcpAgentServiceAccount:ClusterCustomerManagedResourcesGcpAgentServiceAccount":{"properties":{"email":{"description":"GCP service account email. Must be a valid email address.\n","type":"string"}},"required":["email"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesGcpConnectorServiceAccount:ClusterCustomerManagedResourcesGcpConnectorServiceAccount":{"properties":{"email":{"description":"GCP service account email. Must be a valid email address.\n","type":"string"}},"required":["email"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesGcpConsoleServiceAccount:ClusterCustomerManagedResourcesGcpConsoleServiceAccount":{"properties":{"email":{"description":"GCP service account email. Must be a valid email address.\n","type":"string"}},"required":["email"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesGcpGkeServiceAccount:ClusterCustomerManagedResourcesGcpGkeServiceAccount":{"properties":{"email":{"description":"GCP service account email. Must be a valid email address.\n","type":"string"}},"required":["email"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesGcpRedpandaClusterServiceAccount:ClusterCustomerManagedResourcesGcpRedpandaClusterServiceAccount":{"properties":{"email":{"description":"GCP service account email. Must be a valid email address.\n","type":"string"}},"required":["email"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesGcpSubnet:ClusterCustomerManagedResourcesGcpSubnet":{"properties":{"k8sMasterIpv4Range":{"description":"Kubernetes Master IPv4 range, e.g. 10.0.0.0/24.\n","type":"string"},"name":{"description":"Subnet name. Length must be at most 62. Must match pattern `^a-z?$`.\n","type":"string"},"secondaryIpv4RangePods":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangePods:ClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangePods","description":"Secondary IPv4 range.\n"},"secondaryIpv4RangeServices":{"$ref":"#/types/redpanda:index%2FClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangeServices:ClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangeServices","description":"Secondary IPv4 range.\n"}},"required":["k8sMasterIpv4Range","name","secondaryIpv4RangePods","secondaryIpv4RangeServices"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangePods:ClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangePods":{"properties":{"name":{"description":"Name of the secondary IPv4 Range Pods. Length must be at most 62. Must match pattern `^a-z?$`.\n","type":"string"}},"required":["name"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangeServices:ClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangeServices":{"properties":{"name":{"description":"Name of the secondary IPv4 Range Services. Length must be at most 62. Must match pattern `^a-z?$`.\n","type":"string"}},"required":["name"],"type":"object"},"redpanda:index/ClusterCustomerManagedResourcesGcpTieredStorageBucket:ClusterCustomerManagedResourcesGcpTieredStorageBucket":{"properties":{"name":{"description":"Name of GCP storage bucket. See the official [GCP documentation](https://cloud.google.com/storage/docs/buckets#naming) for naming restrictions. Length must be between 3 and 63. Must match pattern `^a-z?$`.\n","type":"string"}},"required":["name"],"type":"object"},"redpanda:index/ClusterGcpPrivateServiceConnect:ClusterGcpPrivateServiceConnect":{"language":{"nodejs":{"requiredOutputs":["consumerAcceptLists","enabled","globalAccessEnabled","status"]}},"properties":{"consumerAcceptLists":{"description":"List of consumers that are allowed to connect to Redpanda GCP PSC (Private Service Connect) service attachment.\n","items":{"$ref":"#/types/redpanda:index%2FClusterGcpPrivateServiceConnectConsumerAcceptList:ClusterGcpPrivateServiceConnectConsumerAcceptList"},"type":"array"},"enabled":{"description":"Whether Redpanda GCP Private Service Connect is enabled.\n","type":"boolean"},"globalAccessEnabled":{"description":"Whether global access is enabled.\n","type":"boolean"},"status":{"$ref":"#/types/redpanda:index%2FClusterGcpPrivateServiceConnectStatus:ClusterGcpPrivateServiceConnectStatus","description":"Status configuration\n"}},"required":["consumerAcceptLists","enabled","globalAccessEnabled"],"type":"object"},"redpanda:index/ClusterGcpPrivateServiceConnectConsumerAcceptList:ClusterGcpPrivateServiceConnectConsumerAcceptList":{"properties":{"source":{"description":"GCP project ID from which connections are accepted\n","type":"string"}},"required":["source"],"type":"object"},"redpanda:index/ClusterGcpPrivateServiceConnectStatus:ClusterGcpPrivateServiceConnectStatus":{"language":{"nodejs":{"requiredOutputs":["connectedEndpoints","dnsARecords","kafkaApiNodeBasePort","kafkaApiSeedPort","redpandaProxyNodeBasePort","redpandaProxySeedPort","schemaRegistrySeedPort","seedHostname","serviceAttachment"]}},"properties":{"connectedEndpoints":{"description":"List of VPC endpoints with established connections to GCP Private Service Connect.\n","items":{"$ref":"#/types/redpanda:index%2FClusterGcpPrivateServiceConnectStatusConnectedEndpoint:ClusterGcpPrivateServiceConnectStatusConnectedEndpoint"},"type":"array"},"dnsARecords":{"description":"Customer-created DNS A records that point at the PSC endpoint on the consumer side.\n","items":{"type":"string"},"type":"array"},"kafkaApiNodeBasePort":{"description":"Kafka API node service base port. The port for node <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span> (0 .. node*count-1) is kafka*api*node*base_port + <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span>.\n","type":"number"},"kafkaApiSeedPort":{"description":"Kafka API seed service port.\n","type":"number"},"redpandaProxyNodeBasePort":{"description":"HTTP Proxy node service base port. The port for node <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span> (0 .. node*count-1) is redpanda*proxy*node*base_port + <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span>.\n","type":"number"},"redpandaProxySeedPort":{"description":"HTTP Proxy seed service port.\n","type":"number"},"schemaRegistrySeedPort":{"description":"Schema Registry seed service port.\n","type":"number"},"seedHostname":{"description":"Hostname for clients to initiate connections to the APIs exposed through Private Service Connect.\n","type":"string"},"serviceAttachment":{"description":"Service attachment used by consumers to create endpoint connections to Redpanda GCP Private Service Connect service.\n","type":"string"}},"type":"object"},"redpanda:index/ClusterGcpPrivateServiceConnectStatusConnectedEndpoint:ClusterGcpPrivateServiceConnectStatusConnectedEndpoint":{"language":{"nodejs":{"requiredOutputs":["connectionId","consumerNetwork","endpoint","status"]}},"properties":{"connectionId":{"description":"Connection ID of the endpoint.\n","type":"string"},"consumerNetwork":{"description":"Network of the consumer connecting to Redpanda GCP Private Service Connect service. See the official [GCP documentation](https://www.googleapis.com/compute/v1/projects/my-project/global/networks/vpc-consumer-psc) for Private Service Connect.\n","type":"string"},"endpoint":{"description":"Connection endpoint. See the official [GCP API reference](https://www.googleapis.com/compute/v1/projects/my-project/regions/us-west2/forwardingRules/vpc-consumer-psc) for Private Service Connect.\n","type":"string"},"status":{"type":"string"}},"type":"object"},"redpanda:index/ClusterHttpProxy:ClusterHttpProxy":{"language":{"nodejs":{"requiredOutputs":["allUrls","mtls","sasl","url"]}},"properties":{"allUrls":{"$ref":"#/types/redpanda:index%2FClusterHttpProxyAllUrls:ClusterHttpProxyAllUrls","description":"The endpoints of Redpanda HTTP Proxy or Schema Registry.\n"},"mtls":{"$ref":"#/types/redpanda:index%2FClusterHttpProxyMtls:ClusterHttpProxyMtls","description":"mTLS configuration.\n"},"sasl":{"$ref":"#/types/redpanda:index%2FClusterHttpProxySasl:ClusterHttpProxySasl","description":"SASL configuration\n"},"url":{"description":"HTTP Proxy URL of cluster.\n","type":"string"}},"type":"object"},"redpanda:index/ClusterHttpProxyAllUrls:ClusterHttpProxyAllUrls":{"language":{"nodejs":{"requiredOutputs":["mtls","privateLinkMtls","privateLinkSasl","sasl"]}},"properties":{"mtls":{"description":"URL of the seed broker for mTLS. If mTLS is not enabled, the field is empty.\n","type":"string"},"privateLinkMtls":{"description":"URL of the seed broker for private link with mTLS. If private link with mTLS is not enabled, the field is empty.\n","type":"string"},"privateLinkSasl":{"description":"URL of the seed broker for private link with SASL. If private link with SASL is not enabled, the field is empty.\n","type":"string"},"sasl":{"description":"URL of the seed broker for SASL. If SASL is not enabled, the field is empty.\n","type":"string"}},"type":"object"},"redpanda:index/ClusterHttpProxyMtls:ClusterHttpProxyMtls":{"language":{"nodejs":{"requiredOutputs":["enabled"]}},"properties":{"caCertificatesPems":{"description":"CA certificate in PEM format.\n","items":{"type":"string"},"type":"array"},"enabled":{"description":"Whether mTLS is enabled.\n","type":"boolean"},"principalMappingRules":{"description":"Principal mapping rules for mTLS authentication. See Redpanda documentation for details\n","items":{"type":"string"},"type":"array"}},"type":"object"},"redpanda:index/ClusterHttpProxySasl:ClusterHttpProxySasl":{"language":{"nodejs":{"requiredOutputs":["enabled"]}},"properties":{"enabled":{"description":"Whether SASL is enabled.\n","type":"boolean"}},"type":"object"},"redpanda:index/ClusterKafkaApi:ClusterKafkaApi":{"language":{"nodejs":{"requiredOutputs":["allSeedBrokers","mtls","sasl","seedBrokers"]}},"properties":{"allSeedBrokers":{"$ref":"#/types/redpanda:index%2FClusterKafkaApiAllSeedBrokers:ClusterKafkaApiAllSeedBrokers","description":"Seed brokers of Redpanda Kafka API.\n"},"mtls":{"$ref":"#/types/redpanda:index%2FClusterKafkaApiMtls:ClusterKafkaApiMtls","description":"mTLS configuration.\n"},"sasl":{"$ref":"#/types/redpanda:index%2FClusterKafkaApiSasl:ClusterKafkaApiSasl","description":"SASL configuration\n"},"seedBrokers":{"description":"Kafka API Seed Brokers (also known as Bootstrap servers).\n","items":{"type":"string"},"type":"array"}},"type":"object"},"redpanda:index/ClusterKafkaApiAllSeedBrokers:ClusterKafkaApiAllSeedBrokers":{"language":{"nodejs":{"requiredOutputs":["mtls","privateLinkMtls","privateLinkSasl","sasl"]}},"properties":{"mtls":{"description":"URL of the seed broker for mTLS. If mTLS is not enabled, the field is empty.\n","type":"string"},"privateLinkMtls":{"description":"URL of the seed broker for private link with mTLS. If private link with mTLS is not enabled, the field is empty.\n","type":"string"},"privateLinkSasl":{"description":"URL of the seed broker for private link with SASL. If private link with SASL is not enabled, the field is empty.\n","type":"string"},"sasl":{"description":"URL of the seed broker for SASL. If SASL is not enabled, the field is empty.\n","type":"string"}},"type":"object"},"redpanda:index/ClusterKafkaApiMtls:ClusterKafkaApiMtls":{"language":{"nodejs":{"requiredOutputs":["enabled"]}},"properties":{"caCertificatesPems":{"description":"CA certificate in PEM format.\n","items":{"type":"string"},"type":"array"},"enabled":{"description":"Whether mTLS is enabled.\n","type":"boolean"},"principalMappingRules":{"description":"Principal mapping rules for mTLS authentication. See Redpanda documentation for details\n","items":{"type":"string"},"type":"array"}},"type":"object"},"redpanda:index/ClusterKafkaApiSasl:ClusterKafkaApiSasl":{"language":{"nodejs":{"requiredOutputs":["enabled"]}},"properties":{"enabled":{"description":"Whether SASL is enabled.\n","type":"boolean"}},"type":"object"},"redpanda:index/ClusterKafkaConnect:ClusterKafkaConnect":{"language":{"nodejs":{"requiredOutputs":["enabled"]}},"properties":{"enabled":{"description":"Whether Kafka Connect is enabled\n","type":"boolean"}},"type":"object"},"redpanda:index/ClusterMaintenanceWindowConfig:ClusterMaintenanceWindowConfig":{"language":{"nodejs":{"requiredOutputs":["unspecified"]}},"properties":{"anytime":{"description":"If true, maintenance can occur at any time\n","type":"boolean"},"dayHour":{"$ref":"#/types/redpanda:index%2FClusterMaintenanceWindowConfigDayHour:ClusterMaintenanceWindowConfigDayHour","description":"Day Hour configuration\n"},"unspecified":{"description":"If true, maintenance window is unspecified\n","type":"boolean"}},"type":"object"},"redpanda:index/ClusterMaintenanceWindowConfigDayHour:ClusterMaintenanceWindowConfigDayHour":{"language":{"nodejs":{"requiredOutputs":["hourOfDay"]}},"properties":{"dayOfWeek":{"description":"Represents a day of the week. - MONDAY: Monday - TUESDAY: Tuesday - WEDNESDAY: Wednesday - THURSDAY: Thursday - FRIDAY: Friday - SATURDAY: Saturday - SUNDAY: Sunday\n","type":"string"},"hourOfDay":{"description":"always UTC. Must be between 0 and 23 (inclusive).\n","type":"number"}},"type":"object"},"redpanda:index/ClusterPrometheus:ClusterPrometheus":{"language":{"nodejs":{"requiredOutputs":["url"]}},"properties":{"url":{"description":"Prometheus API URL.\n","type":"string"}},"type":"object"},"redpanda:index/ClusterRedpandaConsole:ClusterRedpandaConsole":{"language":{"nodejs":{"requiredOutputs":["url"]}},"properties":{"url":{"description":"Redpanda Console API URL.\n","type":"string"}},"type":"object"},"redpanda:index/ClusterRpsql:ClusterRpsql":{"language":{"nodejs":{"requiredOutputs":["enabled","replicas","url"]}},"properties":{"enabled":{"description":"Whether Rpsql is enabled\n","type":"boolean"},"replicas":{"description":"Replicas\n","type":"number"},"url":{"description":"Rpsql URL\n","type":"string"}},"type":"object"},"redpanda:index/ClusterSchemaRegistry:ClusterSchemaRegistry":{"language":{"nodejs":{"requiredOutputs":["allUrls","url"]}},"properties":{"allUrls":{"$ref":"#/types/redpanda:index%2FClusterSchemaRegistryAllUrls:ClusterSchemaRegistryAllUrls","description":"The endpoints of Redpanda HTTP Proxy or Schema Registry.\n"},"mtls":{"$ref":"#/types/redpanda:index%2FClusterSchemaRegistryMtls:ClusterSchemaRegistryMtls","description":"mTLS configuration.\n"},"url":{"description":"Schema Registry URL.\n","type":"string"}},"type":"object"},"redpanda:index/ClusterSchemaRegistryAllUrls:ClusterSchemaRegistryAllUrls":{"language":{"nodejs":{"requiredOutputs":["mtls","privateLinkMtls","privateLinkSasl","sasl"]}},"properties":{"mtls":{"description":"URL of the seed broker for mTLS. If mTLS is not enabled, the field is empty.\n","type":"string"},"privateLinkMtls":{"description":"URL of the seed broker for private link with mTLS. If private link with mTLS is not enabled, the field is empty.\n","type":"string"},"privateLinkSasl":{"description":"URL of the seed broker for private link with SASL. If private link with SASL is not enabled, the field is empty.\n","type":"string"},"sasl":{"description":"URL of the seed broker for SASL. If SASL is not enabled, the field is empty.\n","type":"string"}},"type":"object"},"redpanda:index/ClusterSchemaRegistryMtls:ClusterSchemaRegistryMtls":{"language":{"nodejs":{"requiredOutputs":["enabled"]}},"properties":{"caCertificatesPems":{"description":"CA certificate in PEM format.\n","items":{"type":"string"},"type":"array"},"enabled":{"description":"Whether mTLS is enabled.\n","type":"boolean"},"principalMappingRules":{"description":"Principal mapping rules for mTLS authentication. See Redpanda documentation for details\n","items":{"type":"string"},"type":"array"}},"type":"object"},"redpanda:index/ClusterStateDescription:ClusterStateDescription":{"language":{"nodejs":{"requiredOutputs":["code","message"]}},"properties":{"code":{"description":"RPC status code, as described [here](https://github.com/googleapis/googleapis/blob/b4c238feaa1097c53798ed77035bbfeb7fc72e96/google/rpc/code.proto#L32).\n","type":"number"},"message":{"description":"Detailed error message. No compatibility guarantees are given for the text contained in this message.\n","type":"string"}},"type":"object"},"redpanda:index/ClusterTimeouts:ClusterTimeouts":{"properties":{"create":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"},"delete":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n","type":"string"},"update":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"}},"type":"object"},"redpanda:index/NetworkCustomerManagedResources:NetworkCustomerManagedResources":{"properties":{"aws":{"$ref":"#/types/redpanda:index%2FNetworkCustomerManagedResourcesAws:NetworkCustomerManagedResourcesAws","description":"The AWS resources managed by user.\n"},"gcp":{"$ref":"#/types/redpanda:index%2FNetworkCustomerManagedResourcesGcp:NetworkCustomerManagedResourcesGcp","description":"GCP resources created and managed by user, and required to deploy the Redpanda cluster. See [Create a BYOVPC Cluster on GCP](https://docs.redpanda.com/redpanda-cloud/get-started/cluster-types/byoc/gcp/vpc-byo-gcp/) for details.\n"}},"type":"object"},"redpanda:index/NetworkCustomerManagedResourcesAws:NetworkCustomerManagedResourcesAws":{"properties":{"dynamodbTable":{"$ref":"#/types/redpanda:index%2FNetworkCustomerManagedResourcesAwsDynamodbTable:NetworkCustomerManagedResourcesAwsDynamodbTable","description":"AWS DynamoDB table specification.\n"},"managementBucket":{"$ref":"#/types/redpanda:index%2FNetworkCustomerManagedResourcesAwsManagementBucket:NetworkCustomerManagedResourcesAwsManagementBucket","description":"AWS storage bucket properties by ARN.\n"},"privateSubnets":{"$ref":"#/types/redpanda:index%2FNetworkCustomerManagedResourcesAwsPrivateSubnets:NetworkCustomerManagedResourcesAwsPrivateSubnets","description":"AWS Subnets Specification\n"},"vpc":{"$ref":"#/types/redpanda:index%2FNetworkCustomerManagedResourcesAwsVpc:NetworkCustomerManagedResourcesAwsVpc","description":"AWS VPC Specification\n"}},"required":["dynamodbTable","managementBucket","privateSubnets","vpc"],"type":"object"},"redpanda:index/NetworkCustomerManagedResourcesAwsDynamodbTable:NetworkCustomerManagedResourcesAwsDynamodbTable":{"properties":{"arn":{"description":"AWS DynamoDB table identifier.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/NetworkCustomerManagedResourcesAwsManagementBucket:NetworkCustomerManagedResourcesAwsManagementBucket":{"properties":{"arn":{"description":"AWS storage bucket identifier.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/NetworkCustomerManagedResourcesAwsPrivateSubnets:NetworkCustomerManagedResourcesAwsPrivateSubnets":{"properties":{"arns":{"description":"AWS private subnet identifiers. Items must be unique.\n","items":{"type":"string"},"type":"array"}},"required":["arns"],"type":"object"},"redpanda:index/NetworkCustomerManagedResourcesAwsVpc:NetworkCustomerManagedResourcesAwsVpc":{"properties":{"arn":{"description":"AWS VPC identifier. Must match pattern `^arn:[a-z\\-]{3,}:ec2:[a-z0-9\\-]+:[0-9]+:vpc\\/.+$`.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/NetworkCustomerManagedResourcesGcp:NetworkCustomerManagedResourcesGcp":{"properties":{"managementBucket":{"$ref":"#/types/redpanda:index%2FNetworkCustomerManagedResourcesGcpManagementBucket:NetworkCustomerManagedResourcesGcpManagementBucket","description":"GCP storage bucket properties.\n"},"networkName":{"description":"Name of user-created network where the Redpanda cluster is deployed to. See the official [GCP API reference](https://cloud.google.com/compute/docs/reference/rest/v1/networks). Length must be at most 62. Must match pattern `^a-z?$`.\n","type":"string"},"networkProjectId":{"description":"GCP project ID where the network is created. Length must be at most 30. Must match pattern `^a-z?$`.\n","type":"string"}},"required":["managementBucket","networkName","networkProjectId"],"type":"object"},"redpanda:index/NetworkCustomerManagedResourcesGcpManagementBucket:NetworkCustomerManagedResourcesGcpManagementBucket":{"properties":{"name":{"description":"GCP storage bucket name for storing the state of Redpanda cluster deployment. Length must be between 3 and 63. Must match pattern `^a-z?$`.\n","type":"string"}},"required":["name"],"type":"object"},"redpanda:index/NetworkTimeouts:NetworkTimeouts":{"properties":{"create":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"},"delete":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n","type":"string"}},"type":"object"},"redpanda:index/PipelineResources:PipelineResources":{"properties":{"cpuShares":{"description":"<span pulumi-lang-nodejs=\"`cpuShares`\" pulumi-lang-dotnet=\"`CpuShares`\" pulumi-lang-go=\"`cpuShares`\" pulumi-lang-python=\"`cpu_shares`\" pulumi-lang-yaml=\"`cpuShares`\" pulumi-lang-java=\"`cpuShares`\">`cpu_shares`</span> is a string specifying the amount of CPU to allocate for the pipeline. This follows the [Kubernetes quantity](https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity/) format. Acceptable units include: - Decimal SI units: \"m\" (e.g., \"500m\" for 500 millicores, \"2\" for 2 cores) CPU shares can be specified in millicores (1 core = 1000 millicores). If you don't specify a unit, the value is interpreted as the number of cores.\n","type":"string"},"memoryShares":{"description":"<span pulumi-lang-nodejs=\"`memoryShares`\" pulumi-lang-dotnet=\"`MemoryShares`\" pulumi-lang-go=\"`memoryShares`\" pulumi-lang-python=\"`memory_shares`\" pulumi-lang-yaml=\"`memoryShares`\" pulumi-lang-java=\"`memoryShares`\">`memory_shares`</span> is a string specifying the amount of memory to allocate for the pipeline. This follows the [Kubernetes quantity](https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity/) format. Acceptable units include: - Decimal SI units: \"K\", \"M\", \"G\", \"T\", \"P\", \"E\" (e.g., \"128M\" for 128 megabytes) - Binary SI units: \"Ki\", \"Mi\", \"Gi\", \"Ti\", \"Pi\", \"Ei\" (e.g., \"512Mi\" for 512 mebibytes) If you don't specify a unit, the value is interpreted as bytes.\n","type":"string"}},"type":"object"},"redpanda:index/PipelineServiceAccount:PipelineServiceAccount":{"properties":{"clientId":{"description":"Client ID\n","type":"string"},"clientSecret":{"description":"Client Secret. Must match pattern `^\\$\\{secrets\\.[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)?\\}$`.\n","type":"string"},"secretVersion":{"description":"Version number for client_secret. Increment to trigger a secret update.\n","type":"number"}},"required":["clientId","clientSecret"],"type":"object"},"redpanda:index/PipelineStatus:PipelineStatus":{"language":{"nodejs":{"requiredOutputs":["error"]}},"properties":{"error":{"description":"Error\n","type":"string"}},"type":"object"},"redpanda:index/PipelineTimeouts:PipelineTimeouts":{"properties":{"create":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"},"delete":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n","type":"string"},"update":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"}},"type":"object"},"redpanda:index/SchemaReference:SchemaReference":{"properties":{"name":{"description":"The name of the referenced schema.\n","type":"string"},"subject":{"description":"The subject of the referenced schema.\n","type":"string"},"version":{"description":"The version of the referenced schema.\n","type":"number"}},"required":["name","subject","version"],"type":"object"},"redpanda:index/ServerlessClusterDataplaneApi:ServerlessClusterDataplaneApi":{"language":{"nodejs":{"requiredOutputs":["privateUrl","url"]}},"properties":{"privateUrl":{"description":"Private Dataplane API URL\n","type":"string"},"url":{"description":"Public Dataplane API URL\n","type":"string"}},"type":"object"},"redpanda:index/ServerlessClusterKafkaApi:ServerlessClusterKafkaApi":{"language":{"nodejs":{"requiredOutputs":["privateSeedBrokers","seedBrokers"]}},"properties":{"privateSeedBrokers":{"description":"Private Kafka API seed brokers (bootstrap servers)\n","items":{"type":"string"},"type":"array"},"seedBrokers":{"description":"Public Kafka API seed brokers (bootstrap servers)\n","items":{"type":"string"},"type":"array"}},"type":"object"},"redpanda:index/ServerlessClusterNetworkingConfig:ServerlessClusterNetworkingConfig":{"language":{"nodejs":{"requiredOutputs":["private","public"]}},"properties":{"private":{"description":"Private network state. Valid values: STATE*UNSPECIFIED, STATE*DISABLED, STATE_ENABLED\n","type":"string"},"public":{"description":"Public network state. Valid values: STATE*UNSPECIFIED, STATE*DISABLED, STATE_ENABLED\n","type":"string"}},"type":"object"},"redpanda:index/ServerlessClusterPlannedDeletion:ServerlessClusterPlannedDeletion":{"language":{"nodejs":{"requiredOutputs":["deleteAfter","reason"]}},"properties":{"deleteAfter":{"description":"Delete After\n","type":"string"},"reason":{"description":"Reason\n","type":"string"}},"type":"object"},"redpanda:index/ServerlessClusterPrometheus:ServerlessClusterPrometheus":{"language":{"nodejs":{"requiredOutputs":["privateUrl","url"]}},"properties":{"privateUrl":{"description":"Private Prometheus metrics URL\n","type":"string"},"url":{"description":"Public Prometheus metrics URL\n","type":"string"}},"type":"object"},"redpanda:index/ServerlessClusterSchemaRegistry:ServerlessClusterSchemaRegistry":{"language":{"nodejs":{"requiredOutputs":["privateUrl","url"]}},"properties":{"privateUrl":{"description":"Private Schema Registry URL\n","type":"string"},"url":{"description":"Public Schema Registry URL\n","type":"string"}},"type":"object"},"redpanda:index/ServerlessClusterTimeouts:ServerlessClusterTimeouts":{"properties":{"create":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"},"delete":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n","type":"string"},"update":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"}},"type":"object"},"redpanda:index/ServerlessPrivateLinkAwsConfig:ServerlessPrivateLinkAwsConfig":{"properties":{"allowedPrincipals":{"description":"AWS principals (ARNs) allowed to connect to the private link endpoint\n","items":{"type":"string"},"type":"array"}},"required":["allowedPrincipals"],"type":"object"},"redpanda:index/ServerlessPrivateLinkCloudProviderConfig:ServerlessPrivateLinkCloudProviderConfig":{"properties":{"aws":{"$ref":"#/types/redpanda:index%2FServerlessPrivateLinkCloudProviderConfigAws:ServerlessPrivateLinkCloudProviderConfigAws","description":"AWS configuration\n"}},"type":"object"},"redpanda:index/ServerlessPrivateLinkCloudProviderConfigAws:ServerlessPrivateLinkCloudProviderConfigAws":{"properties":{"allowedPrincipals":{"description":"Allowed Principals\n","items":{"type":"string"},"type":"array"}},"type":"object"},"redpanda:index/ServerlessPrivateLinkStatus:ServerlessPrivateLinkStatus":{"language":{"nodejs":{"requiredOutputs":["aws"]}},"properties":{"aws":{"$ref":"#/types/redpanda:index%2FServerlessPrivateLinkStatusAws:ServerlessPrivateLinkStatusAws","description":"AWS-specific status information\n"}},"type":"object"},"redpanda:index/ServerlessPrivateLinkStatusAws:ServerlessPrivateLinkStatusAws":{"language":{"nodejs":{"requiredOutputs":["availabilityZones","vpcEndpointServiceName"]}},"properties":{"availabilityZones":{"description":"Availability zones where the private link endpoint service is available\n","items":{"type":"string"},"type":"array"},"vpcEndpointServiceName":{"description":"VPC endpoint service name for connecting to the private link\n","type":"string"}},"type":"object"},"redpanda:index/ServerlessPrivateLinkTimeouts:ServerlessPrivateLinkTimeouts":{"properties":{"create":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"},"delete":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n","type":"string"},"update":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"}},"type":"object"},"redpanda:index/ServiceAccountAuth0ClientCredentials:ServiceAccountAuth0ClientCredentials":{"language":{"nodejs":{"requiredOutputs":["clientId","clientSecret"]}},"properties":{"clientId":{"description":"The client ID of the credentials\n","type":"string"},"clientSecret":{"description":"The client secret\n","secret":true,"type":"string"}},"type":"object"},"redpanda:index/ServiceAccountTimeouts:ServiceAccountTimeouts":{"properties":{"create":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"},"delete":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n","type":"string"},"update":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"}},"type":"object"},"redpanda:index/ShadowLinkClientOptions:ShadowLinkClientOptions":{"language":{"nodejs":{"requiredOutputs":["authenticationConfiguration","bootstrapServers","clientId","connectionTimeoutMs","effectiveConnectionTimeoutMs","effectiveFetchMaxBytes","effectiveFetchMinBytes","effectiveFetchPartitionMaxBytes","effectiveFetchWaitMaxMs","effectiveMetadataMaxAgeMs","effectiveRetryBackoffMs","fetchMaxBytes","fetchMinBytes","fetchPartitionMaxBytes","fetchWaitMaxMs","metadataMaxAgeMs","retryBackoffMs","sourceClusterId","tlsSettings"]}},"properties":{"authenticationConfiguration":{"$ref":"#/types/redpanda:index%2FShadowLinkClientOptionsAuthenticationConfiguration:ShadowLinkClientOptionsAuthenticationConfiguration","description":"Authentication config. Supports: * SASL/SCRAM * SASL/PLAIN\n"},"bootstrapServers":{"description":"Bootstrap servers for the source cluster. Required if source Redpanda ID is not provided.\n","items":{"type":"string"},"type":"array"},"clientId":{"description":"Client ID for the connection.\n","type":"string"},"connectionTimeoutMs":{"description":"Connection timeout in milliseconds (defaults to 1000ms if 0).\n","type":"number"},"effectiveConnectionTimeoutMs":{"description":"The effective connection timeout in milliseconds\n","type":"number"},"effectiveFetchMaxBytes":{"description":"The effective fetch max bytes\n","type":"number"},"effectiveFetchMinBytes":{"description":"The effective fetch min bytes\n","type":"number"},"effectiveFetchPartitionMaxBytes":{"description":"The effective fetch partition max bytes\n","type":"number"},"effectiveFetchWaitMaxMs":{"description":"The effective fetch wait max in milliseconds\n","type":"number"},"effectiveMetadataMaxAgeMs":{"description":"The effective metadata max age in milliseconds\n","type":"number"},"effectiveRetryBackoffMs":{"description":"The effective retry backoff in milliseconds\n","type":"number"},"fetchMaxBytes":{"description":"Maximum bytes to fetch (defaults to 20971520 bytes / 20 MiB if 0).\n","type":"number"},"fetchMinBytes":{"description":"Minimum bytes to fetch (defaults to 5242880 bytes / 5 MiB if 0).\n","type":"number"},"fetchPartitionMaxBytes":{"description":"Maximum bytes per partition to fetch (defaults to 1048576 bytes / 1 MiB if 0).\n","type":"number"},"fetchWaitMaxMs":{"description":"Maximum time to wait for fetch requests in milliseconds (defaults to 500ms if 0).\n","type":"number"},"metadataMaxAgeMs":{"description":"Metadata refresh interval in milliseconds (defaults to 10000ms if 0).\n","type":"number"},"retryBackoffMs":{"description":"Retry backoff in milliseconds (defaults to 100ms if 0).\n","type":"number"},"sourceClusterId":{"description":"Source cluster ID.\n","type":"string"},"tlsSettings":{"$ref":"#/types/redpanda:index%2FShadowLinkClientOptionsTlsSettings:ShadowLinkClientOptionsTlsSettings","description":"TLSSettings configures TLS encryption.\n"}},"type":"object"},"redpanda:index/ShadowLinkClientOptionsAuthenticationConfiguration:ShadowLinkClientOptionsAuthenticationConfiguration":{"language":{"nodejs":{"requiredOutputs":["plainConfiguration","scramConfiguration"]}},"properties":{"plainConfiguration":{"$ref":"#/types/redpanda:index%2FShadowLinkClientOptionsAuthenticationConfigurationPlainConfiguration:ShadowLinkClientOptionsAuthenticationConfigurationPlainConfiguration","description":"PLAIN settings\n"},"scramConfiguration":{"$ref":"#/types/redpanda:index%2FShadowLinkClientOptionsAuthenticationConfigurationScramConfiguration:ShadowLinkClientOptionsAuthenticationConfigurationScramConfiguration","description":"SCRAM settings\n"}},"type":"object"},"redpanda:index/ShadowLinkClientOptionsAuthenticationConfigurationPlainConfiguration:ShadowLinkClientOptionsAuthenticationConfigurationPlainConfiguration":{"language":{"nodejs":{"requiredOutputs":["password","passwordSet","username"]}},"properties":{"password":{"description":"Password\n","secret":true,"type":"string"},"passwordSet":{"description":"Indicates that the password has been set\n","type":"boolean"},"username":{"description":"PLAIN username\n","type":"string"}},"type":"object"},"redpanda:index/ShadowLinkClientOptionsAuthenticationConfigurationScramConfiguration:ShadowLinkClientOptionsAuthenticationConfigurationScramConfiguration":{"language":{"nodejs":{"requiredOutputs":["password","passwordSet","scramMechanism","username"]}},"properties":{"password":{"description":"Password\n","secret":true,"type":"string"},"passwordSet":{"description":"Indicates that the password has been set\n","type":"boolean"},"scramMechanism":{"description":"- SCRAM*MECHANISM*SCRAM*SHA*256: SCRAM-SHA-256 - SCRAM*MECHANISM*SCRAM*SHA*512: SCRAM-SHA-512\n","type":"string"},"username":{"description":"SCRAM username\n","type":"string"}},"type":"object"},"redpanda:index/ShadowLinkClientOptionsTlsSettings:ShadowLinkClientOptionsTlsSettings":{"language":{"nodejs":{"requiredOutputs":["ca","cert","doNotSetSniHostname","enabled","key"]}},"properties":{"ca":{"description":"The CA certificate for TLS.\n","type":"string"},"cert":{"description":"Cert is the certificate for TLS. Key and Cert are optional but if one is provided, then both must be provided.\n","type":"string"},"doNotSetSniHostname":{"description":"Do not set SNI hostname.\n","type":"boolean"},"enabled":{"description":"Enable TLS.\n","type":"boolean"},"key":{"description":"The private key for TLS. Key and Cert are optional but if one is provided, then both must be provided.\n","secret":true,"type":"string"}},"type":"object"},"redpanda:index/ShadowLinkConsumerOffsetSyncOptions:ShadowLinkConsumerOffsetSyncOptions":{"language":{"nodejs":{"requiredOutputs":["groupFilters","interval","paused"]}},"properties":{"groupFilters":{"description":"The filters\n","items":{"$ref":"#/types/redpanda:index%2FShadowLinkConsumerOffsetSyncOptionsGroupFilter:ShadowLinkConsumerOffsetSyncOptionsGroupFilter"},"type":"array"},"interval":{"description":"Sync interval If 0 provided, defaults to 30 seconds\n","type":"string"},"paused":{"description":"Allows user to pause the consumer offset sync task. If paused, then the task will enter the 'paused' state and not sync consumer offsets from the source cluster\n","type":"boolean"}},"type":"object"},"redpanda:index/ShadowLinkConsumerOffsetSyncOptionsGroupFilter:ShadowLinkConsumerOffsetSyncOptionsGroupFilter":{"properties":{"filterType":{"description":"- FILTER*TYPE*INCLUDE: Include the items that match the filter - FILTER*TYPE*EXCLUDE: Exclude the items that match the filter\n","type":"string"},"name":{"description":"The resource name, or \"*\" Note if \"*\", must be the *only* character and <span pulumi-lang-nodejs=\"`patternType`\" pulumi-lang-dotnet=\"`PatternType`\" pulumi-lang-go=\"`patternType`\" pulumi-lang-python=\"`pattern_type`\" pulumi-lang-yaml=\"`patternType`\" pulumi-lang-java=\"`patternType`\">`pattern_type`</span> must be `PATTERN_TYPE_LITERAL`\n","type":"string"},"patternType":{"description":"- PATTERN*TYPE*LITERAL: Must match the filter exactly - PATTERN*TYPE*PREFIX: Will match anything that starts with filter - PATTERN*TYPE*PREFIXED: Will match anything that starts with filter\n","type":"string"}},"required":["filterType","name","patternType"],"type":"object"},"redpanda:index/ShadowLinkSchemaRegistrySyncOptions:ShadowLinkSchemaRegistrySyncOptions":{"language":{"nodejs":{"requiredOutputs":["shadowSchemaRegistryTopic"]}},"properties":{"shadowSchemaRegistryTopic":{"description":"Shadow the entire source cluster's Schema Registry byte-for-byte. If set, the Shadow Link will attempt to add the `_schemas` topic to the list of Shadow Topics as long as: 1. The `_schemas` topic exists on the source cluster 2. The `_schemas` topic does not exist on the shadow cluster, or it is empty. If either of the above conditions are *not* met, then the `_schemas` topic will *not* be shadowed by this cluster. Unsetting this flag will *not* remove the `_schemas` topic from shadowing if it has already been added. Once made a shadow topic, the `_schemas` topic will be replicated byte-for-byte. To stop shadowing the `_schemas` topic, unset this field, then either fail-over the topic or delete it.\n","type":"boolean"}},"type":"object"},"redpanda:index/ShadowLinkSecuritySyncOptions:ShadowLinkSecuritySyncOptions":{"language":{"nodejs":{"requiredOutputs":["aclFilters","interval","paused"]}},"properties":{"aclFilters":{"description":"ACL filters\n","items":{"$ref":"#/types/redpanda:index%2FShadowLinkSecuritySyncOptionsAclFilter:ShadowLinkSecuritySyncOptionsAclFilter"},"type":"array"},"interval":{"description":"Sync interval If 0 provided, defaults to 30 seconds\n","type":"string"},"paused":{"description":"Allows user to pause the security settings sync task. If paused, then the task will enter the 'paused' state and will not sync security settings from the source cluster\n","type":"boolean"}},"type":"object"},"redpanda:index/ShadowLinkSecuritySyncOptionsAclFilter:ShadowLinkSecuritySyncOptionsAclFilter":{"properties":{"accessFilter":{"$ref":"#/types/redpanda:index%2FShadowLinkSecuritySyncOptionsAclFilterAccessFilter:ShadowLinkSecuritySyncOptionsAclFilterAccessFilter","description":"Filter an ACL based on its access\n"},"resourceFilter":{"$ref":"#/types/redpanda:index%2FShadowLinkSecuritySyncOptionsAclFilterResourceFilter:ShadowLinkSecuritySyncOptionsAclFilterResourceFilter","description":"A filter to match ACLs for resources\n"}},"required":["accessFilter","resourceFilter"],"type":"object"},"redpanda:index/ShadowLinkSecuritySyncOptionsAclFilterAccessFilter:ShadowLinkSecuritySyncOptionsAclFilterAccessFilter":{"language":{"nodejs":{"requiredOutputs":["host","operation","permissionType","principal"]}},"properties":{"host":{"description":"The host to match. If not set, will default to match all hosts with the specified <span pulumi-lang-nodejs=\"`operation`\" pulumi-lang-dotnet=\"`Operation`\" pulumi-lang-go=\"`operation`\" pulumi-lang-python=\"`operation`\" pulumi-lang-yaml=\"`operation`\" pulumi-lang-java=\"`operation`\">`operation`</span> and <span pulumi-lang-nodejs=\"`permissionType`\" pulumi-lang-dotnet=\"`PermissionType`\" pulumi-lang-go=\"`permissionType`\" pulumi-lang-python=\"`permission_type`\" pulumi-lang-yaml=\"`permissionType`\" pulumi-lang-java=\"`permissionType`\">`permission_type`</span>. Note that the asterisk `*` is literal and matches hosts that are set to `*`\n","type":"string"},"operation":{"description":"The ACL operation to match\n","type":"string"},"permissionType":{"description":"ACL permission types\n","type":"string"},"principal":{"description":"The name of the principal, if not set will default to match all principals with the specified <span pulumi-lang-nodejs=\"`operation`\" pulumi-lang-dotnet=\"`Operation`\" pulumi-lang-go=\"`operation`\" pulumi-lang-python=\"`operation`\" pulumi-lang-yaml=\"`operation`\" pulumi-lang-java=\"`operation`\">`operation`</span> and <span pulumi-lang-nodejs=\"`permissionType`\" pulumi-lang-dotnet=\"`PermissionType`\" pulumi-lang-go=\"`permissionType`\" pulumi-lang-python=\"`permission_type`\" pulumi-lang-yaml=\"`permissionType`\" pulumi-lang-java=\"`permissionType`\">`permission_type`</span>\n","type":"string"}},"required":["operation","permissionType"],"type":"object"},"redpanda:index/ShadowLinkSecuritySyncOptionsAclFilterResourceFilter:ShadowLinkSecuritySyncOptionsAclFilterResourceFilter":{"language":{"nodejs":{"requiredOutputs":["name","patternType","resourceType"]}},"properties":{"name":{"description":"Name, if not given will default to match all items in <span pulumi-lang-nodejs=\"`resourceType`\" pulumi-lang-dotnet=\"`ResourceType`\" pulumi-lang-go=\"`resourceType`\" pulumi-lang-python=\"`resource_type`\" pulumi-lang-yaml=\"`resourceType`\" pulumi-lang-java=\"`resourceType`\">`resource_type`</span>. Note that asterisk `*` is literal and matches resource ACLs that are named `*`\n","type":"string"},"patternType":{"description":"- ACL*PATTERN*ANY: Wildcard to match any pattern - ACL*PATTERN*LITERAL: Match a literal string - ACL*PATTERN*PREFIXED: Match a prefix - ACL*PATTERN*PREFIX: Match a prefix - ACL*PATTERN*MATCH: Match serves as a catch-all for all the names of a topic the principal is authorized to access\n","type":"string"},"resourceType":{"description":"- ACL*RESOURCE*ANY: Wildcard for selecting any ACL resource - ACL*RESOURCE*CLUSTER: Cluster wide resource - ACL*RESOURCE*GROUP: Consumer group resource - ACL*RESOURCE*TOPIC: Topic resource - ACL*RESOURCE*TXN*ID: Transaction ID resource - ACL*RESOURCE*SR*SUBJECT: Schema Registry subject resource - ACL*RESOURCE*SR*REGISTRY: Schema Registry wide resource - ACL*RESOURCE*SR*ANY: Wildcard to match any SR ACL resource\n","type":"string"}},"required":["patternType","resourceType"],"type":"object"},"redpanda:index/ShadowLinkTimeouts:ShadowLinkTimeouts":{"properties":{"create":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"},"delete":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours). Setting a timeout for a Delete operation is only applicable if changes are saved into state before the destroy operation occurs.\n","type":"string"},"update":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"}},"type":"object"},"redpanda:index/ShadowLinkTopicMetadataSyncOptions:ShadowLinkTopicMetadataSyncOptions":{"language":{"nodejs":{"requiredOutputs":["autoCreateShadowTopicFilters","excludeDefault","interval","paused","startAtEarliest","startAtLatest","startAtTimestamp","syncedShadowTopicProperties"]}},"properties":{"autoCreateShadowTopicFilters":{"description":"List of filters that indicate which topics should be automatically created as shadow topics on the shadow cluster. This only controls automatic creation of shadow topics and does not effect the state of the mirror topic once it is created. Literal filters for _*consumer*offsets, *redpanda.audit*log and _schemas will be rejected as well as prefix filters to match topics prefixed with _redpanda or __redpanda. Wildcard `*` is permitted only for literal filters and will *not* match any topics that start with _redpanda or __redpanda. If users wish to shadow topics that start with _redpanda or _*redpanda, they should provide a literal filter for those topics.\n","items":{"$ref":"#/types/redpanda:index%2FShadowLinkTopicMetadataSyncOptionsAutoCreateShadowTopicFilter:ShadowLinkTopicMetadataSyncOptionsAutoCreateShadowTopicFilter"},"type":"array"},"excludeDefault":{"description":"If this is true, then only the properties listed in <span pulumi-lang-nodejs=\"`syncedShadowTopicProperties`\" pulumi-lang-dotnet=\"`SyncedShadowTopicProperties`\" pulumi-lang-go=\"`syncedShadowTopicProperties`\" pulumi-lang-python=\"`synced_shadow_topic_properties`\" pulumi-lang-yaml=\"`syncedShadowTopicProperties`\" pulumi-lang-java=\"`syncedShadowTopicProperties`\">`synced_shadow_topic_properties`</span> will be synced.\n","type":"boolean"},"interval":{"description":"How often to sync metadata If 0 provided, defaults to 30 seconds\n","type":"string"},"paused":{"description":"Allows user to pause the topic sync task. If paused, then the task will enter the 'paused' state and not sync topics or their properties from the source cluster\n","type":"boolean"},"startAtEarliest":{"description":"Start at the earliest offset in the partition.\n","type":"boolean"},"startAtLatest":{"description":"Start at the latest offset in the partition.\n","type":"boolean"},"startAtTimestamp":{"description":"Enables data replication from the first offset on the source topic/partition where the record's timestamp is at or after the specified timestamp.\n","type":"string"},"syncedShadowTopicProperties":{"description":"The following properties are not allowed to be replicated and adding them to this list will result in an error: - `redpanda.remote.readreplica` - `redpanda.remote.recovery` - `redpanda.remote.allowgaps` - `redpanda.virtual.cluster.id` - `redpanda.leaders.preference` - `redpanda.storage.mode` This list is a list of properties in addition to the default properties that will be synced. See <span pulumi-lang-nodejs=\"`excludeDefault`\" pulumi-lang-dotnet=\"`ExcludeDefault`\" pulumi-lang-go=\"`excludeDefault`\" pulumi-lang-python=\"`exclude_default`\" pulumi-lang-yaml=\"`excludeDefault`\" pulumi-lang-java=\"`excludeDefault`\">`exclude_default`</span>.\n","items":{"type":"string"},"type":"array"}},"type":"object"},"redpanda:index/ShadowLinkTopicMetadataSyncOptionsAutoCreateShadowTopicFilter:ShadowLinkTopicMetadataSyncOptionsAutoCreateShadowTopicFilter":{"properties":{"filterType":{"description":"- FILTER*TYPE*INCLUDE: Include the items that match the filter - FILTER*TYPE*EXCLUDE: Exclude the items that match the filter\n","type":"string"},"name":{"description":"The resource name, or \"*\" Note if \"*\", must be the *only* character and <span pulumi-lang-nodejs=\"`patternType`\" pulumi-lang-dotnet=\"`PatternType`\" pulumi-lang-go=\"`patternType`\" pulumi-lang-python=\"`pattern_type`\" pulumi-lang-yaml=\"`patternType`\" pulumi-lang-java=\"`patternType`\">`pattern_type`</span> must be `PATTERN_TYPE_LITERAL`\n","type":"string"},"patternType":{"description":"- PATTERN*TYPE*LITERAL: Must match the filter exactly - PATTERN*TYPE*PREFIX: Will match anything that starts with filter - PATTERN*TYPE*PREFIXED: Will match anything that starts with filter\n","type":"string"}},"required":["filterType","name","patternType"],"type":"object"},"redpanda:index/TopicReplicaAssignment:TopicReplicaAssignment":{"properties":{"partitionId":{"description":"A partition to create.\n","type":"number"},"replicaIds":{"description":"The broker IDs the partition replicas are assigned to.\n","items":{"type":"number"},"type":"array"}},"required":["partitionId","replicaIds"],"type":"object"},"redpanda:index/getClusterAwsPrivateLink:getClusterAwsPrivateLink":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"allowedPrincipals":{"description":"The ARN of the principals that can access the Redpanda AWS PrivateLink Endpoint Service. To grant permissions to all principals, use an asterisk (*).\n","items":{"type":"string"},"type":"array"},"connectConsole":{"description":"Whether Console is connected in Redpanda AWS Private Link Service.\n","type":"boolean"},"enabled":{"description":"Whether Redpanda AWS Private Link Endpoint Service is enabled.\n","type":"boolean"},"status":{"$ref":"#/types/redpanda:index%2FgetClusterAwsPrivateLinkStatus:getClusterAwsPrivateLinkStatus","description":"Status configuration\n"},"supportedRegions":{"description":"List of supported regions in cross-region AWS PrivateLink.\n","items":{"type":"string"},"type":"array"}},"required":["allowedPrincipals","connectConsole","enabled","status","supportedRegions"],"type":"object"},"redpanda:index/getClusterAwsPrivateLinkStatus:getClusterAwsPrivateLinkStatus":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"consolePort":{"description":"The port of Redpanda Console.\n","type":"number"},"kafkaApiNodeBasePort":{"description":"Kafka API node service base port. The port for node <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span> (0 .. node*count-1) is kafka*api*node*base_port + <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span>.\n","type":"number"},"kafkaApiSeedPort":{"description":"Kafka API seed service port.\n","type":"number"},"redpandaProxyNodeBasePort":{"description":"HTTP Proxy node service base port. The port for node <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span> (0 .. node*count-1) is redpanda*proxy*node*base_port + i.\n","type":"number"},"redpandaProxySeedPort":{"description":"HTTP Proxy seed service port.\n","type":"number"},"schemaRegistrySeedPort":{"description":"Schema Registry seed service port.\n","type":"number"},"serviceId":{"description":"ID of Redpanda AWS PrivateLink Endpoint Service.\n","type":"string"},"serviceName":{"description":"Name of Redpanda AWS PrivateLink Endpoint Service.\n","type":"string"},"serviceState":{"description":"State of Redpanda AWS PrivateLink Endpoint Service.\n","type":"string"},"vpcEndpointConnections":{"description":"List of VPC endpoints with established connections to Redpanda AWS PrivateLink Endpoint Service.\n","items":{"$ref":"#/types/redpanda:index%2FgetClusterAwsPrivateLinkStatusVpcEndpointConnection:getClusterAwsPrivateLinkStatusVpcEndpointConnection"},"type":"array"}},"required":["consolePort","kafkaApiNodeBasePort","kafkaApiSeedPort","redpandaProxyNodeBasePort","redpandaProxySeedPort","schemaRegistrySeedPort","serviceId","serviceName","serviceState","vpcEndpointConnections"],"type":"object"},"redpanda:index/getClusterAwsPrivateLinkStatusVpcEndpointConnection:getClusterAwsPrivateLinkStatusVpcEndpointConnection":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"connectionId":{"description":"Connection ID of VPC endpoint connected to Redpanda AWS PrivateLink Endpoint Service.\n","type":"string"},"dnsEntries":{"description":"The list of DNS entries associated with VPC endpoint.\n","items":{"$ref":"#/types/redpanda:index%2FgetClusterAwsPrivateLinkStatusVpcEndpointConnectionDnsEntry:getClusterAwsPrivateLinkStatusVpcEndpointConnectionDnsEntry"},"type":"array"},"id":{"description":"The ID of VPC endpoint.\n","type":"string"},"loadBalancerArns":{"description":"List of load balancer ARNs.\n","items":{"type":"string"},"type":"array"},"owner":{"description":"The owner of VPC endpoint.\n","type":"string"},"state":{"description":"The state of VPC endpoint connected to Redpanda AWS PrivateLink Endpoint Service.\n","type":"string"}},"required":["connectionId","dnsEntries","id","loadBalancerArns","owner","state"],"type":"object"},"redpanda:index/getClusterAwsPrivateLinkStatusVpcEndpointConnectionDnsEntry:getClusterAwsPrivateLinkStatusVpcEndpointConnectionDnsEntry":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"dnsName":{"description":"DNS entry of VPC endpoint connected to Redpanda AWS PrivateLink Endpoint Service.\n","type":"string"},"hostedZoneId":{"description":"The ID of Route53 DNS zone.\n","type":"string"}},"required":["dnsName","hostedZoneId"],"type":"object"},"redpanda:index/getClusterAzurePrivateLink:getClusterAzurePrivateLink":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"allowedSubscriptions":{"description":"The subscriptions that can access the Redpanda Azure PrivateLink Endpoint Service. To grant permissions to all principals, use an asterisk (*).\n","items":{"type":"string"},"type":"array"},"connectConsole":{"description":"Whether Console is connected in Redpanda Azure Private Link Service.\n","type":"boolean"},"enabled":{"description":"Whether Redpanda AWS Private Link Endpoint Service is enabled.\n","type":"boolean"},"status":{"$ref":"#/types/redpanda:index%2FgetClusterAzurePrivateLinkStatus:getClusterAzurePrivateLinkStatus","description":"Status configuration\n"}},"required":["allowedSubscriptions","connectConsole","enabled","status"],"type":"object"},"redpanda:index/getClusterAzurePrivateLinkStatus:getClusterAzurePrivateLinkStatus":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"approvedSubscriptions":{"description":"These are the approved subscriptions on the private link\n","items":{"type":"string"},"type":"array"},"consolePort":{"description":"The port of Redpanda Console.\n","type":"number"},"dnsARecord":{"description":"dns*a*dns*a*recordrecord is the DNS A record the customer will create pointing at the their PE\n","type":"string"},"kafkaApiNodeBasePort":{"description":"Kafka API node service base port. The port for node <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span> (0 .. node*count-1) is kafka*api*node*base_port + <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span>.\n","type":"number"},"kafkaApiSeedPort":{"description":"Kafka API seed service port.\n","type":"number"},"privateEndpointConnections":{"description":"List of private endpoint connections to Redpanda Azure Private Link Service.\n","items":{"$ref":"#/types/redpanda:index%2FgetClusterAzurePrivateLinkStatusPrivateEndpointConnection:getClusterAzurePrivateLinkStatusPrivateEndpointConnection"},"type":"array"},"redpandaProxyNodeBasePort":{"description":"HTTP Proxy node service base port. The port for node <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span> (0 .. node*count-1) is redpanda*proxy*node*base_port + i.\n","type":"number"},"redpandaProxySeedPort":{"description":"HTTP Proxy seed service port.\n","type":"number"},"schemaRegistrySeedPort":{"description":"Schema Registry seed service port.\n","type":"number"},"serviceId":{"description":"ID of Redpanda Azure PrivateLink Endpoint Service.\n","type":"string"},"serviceName":{"description":"Name of Redpanda Azure PrivateLink Endpoint Service.\n","type":"string"}},"required":["approvedSubscriptions","consolePort","dnsARecord","kafkaApiNodeBasePort","kafkaApiSeedPort","privateEndpointConnections","redpandaProxyNodeBasePort","redpandaProxySeedPort","schemaRegistrySeedPort","serviceId","serviceName"],"type":"object"},"redpanda:index/getClusterAzurePrivateLinkStatusPrivateEndpointConnection:getClusterAzurePrivateLinkStatusPrivateEndpointConnection":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"connectionId":{"description":"ConnectionID is the id of the connection between the private endpoint and the private link service\n","type":"string"},"connectionName":{"description":"ConnectionName is the name of the connection between the private endpoint and the private link service\n","type":"string"},"privateEndpointId":{"description":"Resource ID of Private Endpoint to Redpanda Azure PrivateLink Endpoint Service.\n","type":"string"},"privateEndpointName":{"description":"The name of the PrivateEndpointConnection.\n","type":"string"},"status":{"description":"The status of private endpoint connected to Redpanda Azure PrivateLink Endpoint Service.\n","type":"string"}},"required":["connectionId","connectionName","privateEndpointId","privateEndpointName","status"],"type":"object"},"redpanda:index/getClusterClusterConfiguration:getClusterClusterConfiguration":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"customPropertiesJson":{"description":"Custom Properties JSON\n","type":"string"}},"required":["customPropertiesJson"],"type":"object"},"redpanda:index/getClusterCustomerManagedResources:getClusterCustomerManagedResources":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"aws":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAws:getClusterCustomerManagedResourcesAws","description":"AWS resources created and managed by user, and required to deploy the Redpanda cluster.\n"},"gcp":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesGcp:getClusterCustomerManagedResourcesGcp","description":"GCP resources created and managed by user, and required to deploy the Redpanda cluster. See [Create a BYOVPC Cluster on GCP](https://docs.redpanda.com/redpanda-cloud/get-started/cluster-types/byoc/gcp/vpc-byo-gcp/).\n"}},"required":["aws","gcp"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAws:getClusterCustomerManagedResourcesAws":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"agentInstanceProfile":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsAgentInstanceProfile:getClusterCustomerManagedResourcesAwsAgentInstanceProfile","description":"AWS instance profile.\n"},"cloudStorageBucket":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsCloudStorageBucket:getClusterCustomerManagedResourcesAwsCloudStorageBucket","description":"AWS storage bucket properties by ARN.\n"},"clusterSecurityGroup":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsClusterSecurityGroup:getClusterCustomerManagedResourcesAwsClusterSecurityGroup","description":"Security Group identifies AWS security group.\n"},"connectorsNodeGroupInstanceProfile":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsConnectorsNodeGroupInstanceProfile:getClusterCustomerManagedResourcesAwsConnectorsNodeGroupInstanceProfile","description":"AWS instance profile.\n"},"connectorsSecurityGroup":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsConnectorsSecurityGroup:getClusterCustomerManagedResourcesAwsConnectorsSecurityGroup","description":"Security Group identifies AWS security group.\n"},"k8sClusterRole":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsK8sClusterRole:getClusterCustomerManagedResourcesAwsK8sClusterRole","description":"Role identifies AWS role.\n"},"nodeSecurityGroup":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsNodeSecurityGroup:getClusterCustomerManagedResourcesAwsNodeSecurityGroup","description":"Security Group identifies AWS security group.\n"},"permissionsBoundaryPolicy":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsPermissionsBoundaryPolicy:getClusterCustomerManagedResourcesAwsPermissionsBoundaryPolicy","description":"Policy identifies an AWS policy.\n"},"redpandaAgentSecurityGroup":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsRedpandaAgentSecurityGroup:getClusterCustomerManagedResourcesAwsRedpandaAgentSecurityGroup","description":"Security Group identifies AWS security group.\n"},"redpandaConnectNodeGroupInstanceProfile":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsRedpandaConnectNodeGroupInstanceProfile:getClusterCustomerManagedResourcesAwsRedpandaConnectNodeGroupInstanceProfile","description":"AWS instance profile.\n"},"redpandaConnectSecurityGroup":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsRedpandaConnectSecurityGroup:getClusterCustomerManagedResourcesAwsRedpandaConnectSecurityGroup","description":"Security Group identifies AWS security group.\n"},"redpandaNodeGroupInstanceProfile":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsRedpandaNodeGroupInstanceProfile:getClusterCustomerManagedResourcesAwsRedpandaNodeGroupInstanceProfile","description":"AWS instance profile.\n"},"redpandaNodeGroupSecurityGroup":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsRedpandaNodeGroupSecurityGroup:getClusterCustomerManagedResourcesAwsRedpandaNodeGroupSecurityGroup","description":"Security Group identifies AWS security group.\n"},"utilityNodeGroupInstanceProfile":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsUtilityNodeGroupInstanceProfile:getClusterCustomerManagedResourcesAwsUtilityNodeGroupInstanceProfile","description":"AWS instance profile.\n"},"utilitySecurityGroup":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesAwsUtilitySecurityGroup:getClusterCustomerManagedResourcesAwsUtilitySecurityGroup","description":"Security Group identifies AWS security group.\n"}},"required":["agentInstanceProfile","cloudStorageBucket","clusterSecurityGroup","connectorsNodeGroupInstanceProfile","connectorsSecurityGroup","k8sClusterRole","nodeSecurityGroup","permissionsBoundaryPolicy","redpandaAgentSecurityGroup","redpandaConnectNodeGroupInstanceProfile","redpandaConnectSecurityGroup","redpandaNodeGroupInstanceProfile","redpandaNodeGroupSecurityGroup","utilityNodeGroupInstanceProfile","utilitySecurityGroup"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsAgentInstanceProfile:getClusterCustomerManagedResourcesAwsAgentInstanceProfile":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS instance profile ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsCloudStorageBucket:getClusterCustomerManagedResourcesAwsCloudStorageBucket":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS storage bucket identifier.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsClusterSecurityGroup:getClusterCustomerManagedResourcesAwsClusterSecurityGroup":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsConnectorsNodeGroupInstanceProfile:getClusterCustomerManagedResourcesAwsConnectorsNodeGroupInstanceProfile":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS instance profile ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsConnectorsSecurityGroup:getClusterCustomerManagedResourcesAwsConnectorsSecurityGroup":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsK8sClusterRole:getClusterCustomerManagedResourcesAwsK8sClusterRole":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS role ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsNodeSecurityGroup:getClusterCustomerManagedResourcesAwsNodeSecurityGroup":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsPermissionsBoundaryPolicy:getClusterCustomerManagedResourcesAwsPermissionsBoundaryPolicy":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS policy ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsRedpandaAgentSecurityGroup:getClusterCustomerManagedResourcesAwsRedpandaAgentSecurityGroup":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsRedpandaConnectNodeGroupInstanceProfile:getClusterCustomerManagedResourcesAwsRedpandaConnectNodeGroupInstanceProfile":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS instance profile ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsRedpandaConnectSecurityGroup:getClusterCustomerManagedResourcesAwsRedpandaConnectSecurityGroup":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsRedpandaNodeGroupInstanceProfile:getClusterCustomerManagedResourcesAwsRedpandaNodeGroupInstanceProfile":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS instance profile ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsRedpandaNodeGroupSecurityGroup:getClusterCustomerManagedResourcesAwsRedpandaNodeGroupSecurityGroup":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsUtilityNodeGroupInstanceProfile:getClusterCustomerManagedResourcesAwsUtilityNodeGroupInstanceProfile":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS instance profile ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesAwsUtilitySecurityGroup:getClusterCustomerManagedResourcesAwsUtilitySecurityGroup":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS security group ARN.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesGcp:getClusterCustomerManagedResourcesGcp":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"agentServiceAccount":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesGcpAgentServiceAccount:getClusterCustomerManagedResourcesGcpAgentServiceAccount","description":"GCP service account.\n"},"connectorServiceAccount":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesGcpConnectorServiceAccount:getClusterCustomerManagedResourcesGcpConnectorServiceAccount","description":"GCP service account.\n"},"consoleServiceAccount":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesGcpConsoleServiceAccount:getClusterCustomerManagedResourcesGcpConsoleServiceAccount","description":"GCP service account.\n"},"gkeServiceAccount":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesGcpGkeServiceAccount:getClusterCustomerManagedResourcesGcpGkeServiceAccount","description":"GCP service account.\n"},"pscNatSubnetName":{"description":"NAT subnet name if GCP Private Service Connect (a.k.a Private Link) is enabled. If it is used for PSC v1, use psc*v2*nat*subnet*name to set NAT subnet name for PSC v2.\n","type":"string"},"redpandaClusterServiceAccount":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesGcpRedpandaClusterServiceAccount:getClusterCustomerManagedResourcesGcpRedpandaClusterServiceAccount","description":"GCP service account.\n"},"subnet":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesGcpSubnet:getClusterCustomerManagedResourcesGcpSubnet","description":"GCP subnet properties. See the official [GCP API reference](https://cloud.google.com/compute/docs/reference/rest/v1/subnetworks).\n"},"tieredStorageBucket":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesGcpTieredStorageBucket:getClusterCustomerManagedResourcesGcpTieredStorageBucket","description":"GCP storage bucket properties.\n"}},"required":["agentServiceAccount","connectorServiceAccount","consoleServiceAccount","gkeServiceAccount","pscNatSubnetName","redpandaClusterServiceAccount","subnet","tieredStorageBucket"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesGcpAgentServiceAccount:getClusterCustomerManagedResourcesGcpAgentServiceAccount":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"email":{"description":"GCP service account email.\n","type":"string"}},"required":["email"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesGcpConnectorServiceAccount:getClusterCustomerManagedResourcesGcpConnectorServiceAccount":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"email":{"description":"GCP service account email.\n","type":"string"}},"required":["email"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesGcpConsoleServiceAccount:getClusterCustomerManagedResourcesGcpConsoleServiceAccount":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"email":{"description":"GCP service account email.\n","type":"string"}},"required":["email"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesGcpGkeServiceAccount:getClusterCustomerManagedResourcesGcpGkeServiceAccount":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"email":{"description":"GCP service account email.\n","type":"string"}},"required":["email"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesGcpRedpandaClusterServiceAccount:getClusterCustomerManagedResourcesGcpRedpandaClusterServiceAccount":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"email":{"description":"GCP service account email.\n","type":"string"}},"required":["email"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesGcpSubnet:getClusterCustomerManagedResourcesGcpSubnet":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"k8sMasterIpv4Range":{"description":"Kubernetes Master IPv4 range, e.g. 10.0.0.0/24.\n","type":"string"},"name":{"description":"Subnet name.\n","type":"string"},"secondaryIpv4RangePods":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangePods:getClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangePods","description":"Secondary IPv4 range.\n"},"secondaryIpv4RangeServices":{"$ref":"#/types/redpanda:index%2FgetClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangeServices:getClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangeServices","description":"Secondary IPv4 range.\n"}},"required":["k8sMasterIpv4Range","name","secondaryIpv4RangePods","secondaryIpv4RangeServices"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangePods:getClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangePods":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"name":{"description":"Name of the secondary IPv4 Range Pods\n","type":"string"}},"required":["name"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangeServices:getClusterCustomerManagedResourcesGcpSubnetSecondaryIpv4RangeServices":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"name":{"description":"Name of the secondary IPv4 Range Services\n","type":"string"}},"required":["name"],"type":"object"},"redpanda:index/getClusterCustomerManagedResourcesGcpTieredStorageBucket:getClusterCustomerManagedResourcesGcpTieredStorageBucket":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"name":{"description":"Name of GCP storage bucket. See the official [GCP documentation](https://cloud.google.com/storage/docs/buckets#naming) for naming restrictions.\n","type":"string"}},"required":["name"],"type":"object"},"redpanda:index/getClusterGcpPrivateServiceConnect:getClusterGcpPrivateServiceConnect":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"consumerAcceptLists":{"description":"List of consumers that are allowed to connect to Redpanda GCP PSC (Private Service Connect) service attachment.\n","items":{"$ref":"#/types/redpanda:index%2FgetClusterGcpPrivateServiceConnectConsumerAcceptList:getClusterGcpPrivateServiceConnectConsumerAcceptList"},"type":"array"},"enabled":{"description":"Whether Redpanda GCP Private Service Connect is enabled.\n","type":"boolean"},"globalAccessEnabled":{"description":"Whether global access is enabled.\n","type":"boolean"},"status":{"$ref":"#/types/redpanda:index%2FgetClusterGcpPrivateServiceConnectStatus:getClusterGcpPrivateServiceConnectStatus","description":"Status configuration\n"}},"required":["consumerAcceptLists","enabled","globalAccessEnabled","status"],"type":"object"},"redpanda:index/getClusterGcpPrivateServiceConnectConsumerAcceptList:getClusterGcpPrivateServiceConnectConsumerAcceptList":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"source":{"description":"Either the GCP project number or its alphanumeric ID.\n","type":"string"}},"required":["source"],"type":"object"},"redpanda:index/getClusterGcpPrivateServiceConnectStatus:getClusterGcpPrivateServiceConnectStatus":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"connectedEndpoints":{"description":"List of VPC endpoints with established connections to GCP Private Service Connect.\n","items":{"$ref":"#/types/redpanda:index%2FgetClusterGcpPrivateServiceConnectStatusConnectedEndpoint:getClusterGcpPrivateServiceConnectStatusConnectedEndpoint"},"type":"array"},"dnsARecords":{"description":"Customer-created DNS A records that point at the PSC endpoint on the consumer side.\n","items":{"type":"string"},"type":"array"},"kafkaApiNodeBasePort":{"description":"Kafka API node service base port. The port for node <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span> (0 .. node*count-1) is kafka*api*node*base_port + <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span>.\n","type":"number"},"kafkaApiSeedPort":{"description":"Kafka API seed service port.\n","type":"number"},"redpandaProxyNodeBasePort":{"description":"HTTP Proxy node service base port. The port for node <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span> (0 .. node*count-1) is redpanda*proxy*node*base_port + <span pulumi-lang-nodejs=\"`i`\" pulumi-lang-dotnet=\"`I`\" pulumi-lang-go=\"`i`\" pulumi-lang-python=\"`i`\" pulumi-lang-yaml=\"`i`\" pulumi-lang-java=\"`i`\">`i`</span>.\n","type":"number"},"redpandaProxySeedPort":{"description":"HTTP Proxy seed service port.\n","type":"number"},"schemaRegistrySeedPort":{"description":"Schema Registry seed service port.\n","type":"number"},"seedHostname":{"description":"Hostname for clients to initiate connections to the APIs exposed through Private Service Connect.\n","type":"string"},"serviceAttachment":{"description":"Service attachment used by consumers to create endpoint connections to Redpanda GCP Private Service Connect service.\n","type":"string"}},"required":["connectedEndpoints","dnsARecords","kafkaApiNodeBasePort","kafkaApiSeedPort","redpandaProxyNodeBasePort","redpandaProxySeedPort","schemaRegistrySeedPort","seedHostname","serviceAttachment"],"type":"object"},"redpanda:index/getClusterGcpPrivateServiceConnectStatusConnectedEndpoint:getClusterGcpPrivateServiceConnectStatusConnectedEndpoint":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"connectionId":{"description":"Connection ID of the endpoint.\n","type":"string"},"consumerNetwork":{"description":"Network of the consumer connecting to Redpanda GCP Private Service Connect service. See the official [GCP documentation](https://www.googleapis.com/compute/v1/projects/my-project/global/networks/vpc-consumer-psc) for Private Service Connect.\n","type":"string"},"endpoint":{"description":"Connection endpoint. See the official [GCP API reference](https://www.googleapis.com/compute/v1/projects/my-project/regions/us-west2/forwardingRules/vpc-consumer-psc) for Private Service Connect.\n","type":"string"},"status":{"type":"string"}},"required":["connectionId","consumerNetwork","endpoint","status"],"type":"object"},"redpanda:index/getClusterHttpProxy:getClusterHttpProxy":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"allUrls":{"$ref":"#/types/redpanda:index%2FgetClusterHttpProxyAllUrls:getClusterHttpProxyAllUrls","description":"The endpoints of Redpanda HTTP Proxy or Schema Registry.\n"},"mtls":{"$ref":"#/types/redpanda:index%2FgetClusterHttpProxyMtls:getClusterHttpProxyMtls","description":"mTLS configuration.\n"},"sasl":{"$ref":"#/types/redpanda:index%2FgetClusterHttpProxySasl:getClusterHttpProxySasl","description":"SASL configuration\n"},"url":{"description":"HTTP Proxy URL of cluster.\n","type":"string"}},"required":["allUrls","mtls","sasl","url"],"type":"object"},"redpanda:index/getClusterHttpProxyAllUrls:getClusterHttpProxyAllUrls":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"mtls":{"description":"URL of the seed broker for mTLS. If mTLS is not enabled, the field is empty.\n","type":"string"},"privateLinkMtls":{"description":"URL of the seed broker for private link with mTLS. If private link with mTLS is not enabled, the field is empty.\n","type":"string"},"privateLinkSasl":{"description":"URL of the seed broker for private link with SASL. If private link with SASL is not enabled, the field is empty.\n","type":"string"},"sasl":{"description":"URL of the seed broker for SASL. If SASL is not enabled, the field is empty.\n","type":"string"}},"required":["mtls","privateLinkMtls","privateLinkSasl","sasl"],"type":"object"},"redpanda:index/getClusterHttpProxyMtls:getClusterHttpProxyMtls":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"caCertificatesPems":{"description":"CA certificate in PEM format.\n","items":{"type":"string"},"type":"array"},"enabled":{"description":"Whether mTLS is enabled.\n","type":"boolean"},"principalMappingRules":{"description":"Principal mapping rules for mTLS authentication. Only valid for Kafka API. See the Redpanda documentation on [configuring authentication](https://docs.redpanda.com/redpanda-cloud/security/cloud-authentication/#mtls).\n","items":{"type":"string"},"type":"array"}},"required":["caCertificatesPems","enabled","principalMappingRules"],"type":"object"},"redpanda:index/getClusterHttpProxySasl:getClusterHttpProxySasl":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"enabled":{"description":"Whether SASL is enabled.\n","type":"boolean"}},"required":["enabled"],"type":"object"},"redpanda:index/getClusterKafkaApi:getClusterKafkaApi":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"allSeedBrokers":{"$ref":"#/types/redpanda:index%2FgetClusterKafkaApiAllSeedBrokers:getClusterKafkaApiAllSeedBrokers","description":"Seed brokers of Redpanda Kafka API.\n"},"mtls":{"$ref":"#/types/redpanda:index%2FgetClusterKafkaApiMtls:getClusterKafkaApiMtls","description":"mTLS configuration.\n"},"sasl":{"$ref":"#/types/redpanda:index%2FgetClusterKafkaApiSasl:getClusterKafkaApiSasl","description":"SASL configuration\n"},"seedBrokers":{"description":"Kafka API Seed Brokers (also known as Bootstrap servers).\n","items":{"type":"string"},"type":"array"}},"required":["allSeedBrokers","mtls","sasl","seedBrokers"],"type":"object"},"redpanda:index/getClusterKafkaApiAllSeedBrokers:getClusterKafkaApiAllSeedBrokers":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"mtls":{"description":"URL of the seed broker for mTLS. If mTLS is not enabled, the field is empty.\n","type":"string"},"privateLinkMtls":{"description":"URL of the seed broker for private link with mTLS. If private link with mTLS is not enabled, the field is empty.\n","type":"string"},"privateLinkSasl":{"description":"URL of the seed broker for private link with SASL. If private link with SASL is not enabled, the field is empty.\n","type":"string"},"sasl":{"description":"URL of the seed broker for SASL. If SASL is not enabled, the field is empty.\n","type":"string"}},"required":["mtls","privateLinkMtls","privateLinkSasl","sasl"],"type":"object"},"redpanda:index/getClusterKafkaApiMtls:getClusterKafkaApiMtls":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"caCertificatesPems":{"description":"CA certificate in PEM format.\n","items":{"type":"string"},"type":"array"},"enabled":{"description":"Whether mTLS is enabled.\n","type":"boolean"},"principalMappingRules":{"description":"Principal mapping rules for mTLS authentication. Only valid for Kafka API. See the Redpanda documentation on [configuring authentication](https://docs.redpanda.com/redpanda-cloud/security/cloud-authentication/#mtls).\n","items":{"type":"string"},"type":"array"}},"required":["caCertificatesPems","enabled","principalMappingRules"],"type":"object"},"redpanda:index/getClusterKafkaApiSasl:getClusterKafkaApiSasl":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"enabled":{"description":"Whether SASL is enabled.\n","type":"boolean"}},"required":["enabled"],"type":"object"},"redpanda:index/getClusterKafkaConnect:getClusterKafkaConnect":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"enabled":{"description":"Whether Kafka Connect is enabled\n","type":"boolean"}},"required":["enabled"],"type":"object"},"redpanda:index/getClusterMaintenanceWindowConfig:getClusterMaintenanceWindowConfig":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"anytime":{"description":"Anytime configuration\n","type":"boolean"},"dayHour":{"$ref":"#/types/redpanda:index%2FgetClusterMaintenanceWindowConfigDayHour:getClusterMaintenanceWindowConfigDayHour","description":"Day Hour configuration\n"},"unspecified":{"description":"Unspecified configuration\n","type":"boolean"}},"required":["anytime","dayHour","unspecified"],"type":"object"},"redpanda:index/getClusterMaintenanceWindowConfigDayHour:getClusterMaintenanceWindowConfigDayHour":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"dayOfWeek":{"description":"Represents a day of the week. - MONDAY: Monday - TUESDAY: Tuesday - WEDNESDAY: Wednesday - THURSDAY: Thursday - FRIDAY: Friday - SATURDAY: Saturday - SUNDAY: Sunday\n","type":"string"},"hourOfDay":{"description":"always UTC\n","type":"number"}},"required":["dayOfWeek","hourOfDay"],"type":"object"},"redpanda:index/getClusterPrometheus:getClusterPrometheus":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"url":{"description":"Prometheus API URL.\n","type":"string"}},"required":["url"],"type":"object"},"redpanda:index/getClusterRedpandaConsole:getClusterRedpandaConsole":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"url":{"description":"Redpanda Console API URL.\n","type":"string"}},"required":["url"],"type":"object"},"redpanda:index/getClusterSchemaRegistry:getClusterSchemaRegistry":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"allUrls":{"$ref":"#/types/redpanda:index%2FgetClusterSchemaRegistryAllUrls:getClusterSchemaRegistryAllUrls","description":"The endpoints of Redpanda HTTP Proxy or Schema Registry.\n"},"mtls":{"$ref":"#/types/redpanda:index%2FgetClusterSchemaRegistryMtls:getClusterSchemaRegistryMtls","description":"mTLS configuration.\n"},"url":{"description":"Schema Registry URL.\n","type":"string"}},"required":["allUrls","mtls","url"],"type":"object"},"redpanda:index/getClusterSchemaRegistryAllUrls:getClusterSchemaRegistryAllUrls":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"mtls":{"description":"URL of the seed broker for mTLS. If mTLS is not enabled, the field is empty.\n","type":"string"},"privateLinkMtls":{"description":"URL of the seed broker for private link with mTLS. If private link with mTLS is not enabled, the field is empty.\n","type":"string"},"privateLinkSasl":{"description":"URL of the seed broker for private link with SASL. If private link with SASL is not enabled, the field is empty.\n","type":"string"},"sasl":{"description":"URL of the seed broker for SASL. If SASL is not enabled, the field is empty.\n","type":"string"}},"required":["mtls","privateLinkMtls","privateLinkSasl","sasl"],"type":"object"},"redpanda:index/getClusterSchemaRegistryMtls:getClusterSchemaRegistryMtls":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"caCertificatesPems":{"description":"CA certificate in PEM format.\n","items":{"type":"string"},"type":"array"},"enabled":{"description":"Whether mTLS is enabled.\n","type":"boolean"},"principalMappingRules":{"description":"Principal mapping rules for mTLS authentication. Only valid for Kafka API. See the Redpanda documentation on [configuring authentication](https://docs.redpanda.com/redpanda-cloud/security/cloud-authentication/#mtls).\n","items":{"type":"string"},"type":"array"}},"required":["caCertificatesPems","enabled","principalMappingRules"],"type":"object"},"redpanda:index/getClusterStateDescription:getClusterStateDescription":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"code":{"description":"RPC status code, as described [here](https://github.com/googleapis/googleapis/blob/b4c238feaa1097c53798ed77035bbfeb7fc72e96/google/rpc/code.proto#L32).\n","type":"number"},"message":{"description":"Detailed error message. No compatibility guarantees are given for the text contained in this message.\n","type":"string"}},"required":["code","message"],"type":"object"},"redpanda:index/getClusterTimeouts:getClusterTimeouts":{"properties":{"read":{"description":"A string that can be [parsed as a duration](https://pkg.go.dev/time#ParseDuration) consisting of numbers and unit suffixes, such as \"30s\" or \"2h45m\". Valid time units are \"s\" (seconds), \"m\" (minutes), \"h\" (hours).\n","type":"string"}},"type":"object"},"redpanda:index/getNetworkCustomerManagedResources:getNetworkCustomerManagedResources":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"aws":{"$ref":"#/types/redpanda:index%2FgetNetworkCustomerManagedResourcesAws:getNetworkCustomerManagedResourcesAws","description":"The AWS resources managed by user.\n"},"gcp":{"$ref":"#/types/redpanda:index%2FgetNetworkCustomerManagedResourcesGcp:getNetworkCustomerManagedResourcesGcp","description":"GCP resources created and managed by user, and required to deploy the Redpanda cluster. See [Create a BYOVPC Cluster on GCP](https://docs.redpanda.com/redpanda-cloud/get-started/cluster-types/byoc/gcp/vpc-byo-gcp/) for details.\n"}},"required":["aws","gcp"],"type":"object"},"redpanda:index/getNetworkCustomerManagedResourcesAws:getNetworkCustomerManagedResourcesAws":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"dynamodbTable":{"$ref":"#/types/redpanda:index%2FgetNetworkCustomerManagedResourcesAwsDynamodbTable:getNetworkCustomerManagedResourcesAwsDynamodbTable","description":"AWS DynamoDB table specification.\n"},"managementBucket":{"$ref":"#/types/redpanda:index%2FgetNetworkCustomerManagedResourcesAwsManagementBucket:getNetworkCustomerManagedResourcesAwsManagementBucket","description":"AWS storage bucket properties by ARN.\n"},"privateSubnets":{"$ref":"#/types/redpanda:index%2FgetNetworkCustomerManagedResourcesAwsPrivateSubnets:getNetworkCustomerManagedResourcesAwsPrivateSubnets","description":"AWS Subnets Specification\n"},"vpc":{"$ref":"#/types/redpanda:index%2FgetNetworkCustomerManagedResourcesAwsVpc:getNetworkCustomerManagedResourcesAwsVpc","description":"AWS VPC Specification\n"}},"required":["dynamodbTable","managementBucket","privateSubnets","vpc"],"type":"object"},"redpanda:index/getNetworkCustomerManagedResourcesAwsDynamodbTable:getNetworkCustomerManagedResourcesAwsDynamodbTable":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS DynamoDB table identifier.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getNetworkCustomerManagedResourcesAwsManagementBucket:getNetworkCustomerManagedResourcesAwsManagementBucket":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS storage bucket identifier.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getNetworkCustomerManagedResourcesAwsPrivateSubnets:getNetworkCustomerManagedResourcesAwsPrivateSubnets":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arns":{"description":"AWS private subnet identifiers\n","items":{"type":"string"},"type":"array"}},"required":["arns"],"type":"object"},"redpanda:index/getNetworkCustomerManagedResourcesAwsVpc:getNetworkCustomerManagedResourcesAwsVpc":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"arn":{"description":"AWS VPC identifier.\n","type":"string"}},"required":["arn"],"type":"object"},"redpanda:index/getNetworkCustomerManagedResourcesGcp:getNetworkCustomerManagedResourcesGcp":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"managementBucket":{"$ref":"#/types/redpanda:index%2FgetNetworkCustomerManagedResourcesGcpManagementBucket:getNetworkCustomerManagedResourcesGcpManagementBucket","description":"GCP storage bucket properties.\n"},"networkName":{"description":"Name of user-created network where the Redpanda cluster is deployed to. See the official [GCP API reference](https://cloud.google.com/compute/docs/reference/rest/v1/networks).\n","type":"string"},"networkProjectId":{"description":"GCP project ID where the network is created.\n","type":"string"}},"required":["managementBucket","networkName","networkProjectId"],"type":"object"},"redpanda:index/getNetworkCustomerManagedResourcesGcpManagementBucket:getNetworkCustomerManagedResourcesGcpManagementBucket":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"name":{"description":"GCP storage bucket name for storing the state of Redpanda cluster deployment\n","type":"string"}},"required":["name"],"type":"object"},"redpanda:index/getRegionsRegion:getRegionsRegion":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"name":{"description":"Name of the region\n","type":"string"},"zones":{"description":"Zones available in the region\n","items":{"type":"string"},"type":"array"}},"required":["name","zones"],"type":"object"},"redpanda:index/getSchemaReference:getSchemaReference":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"name":{"description":"The name of the referenced schema.\n","type":"string"},"subject":{"description":"The subject of the referenced schema.\n","type":"string"},"version":{"description":"The version of the referenced schema.\n","type":"number"}},"required":["name","subject","version"],"type":"object"},"redpanda:index/getServerlessClusterDataplaneApi:getServerlessClusterDataplaneApi":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"privateUrl":{"description":"Private Dataplane API URL\n","type":"string"},"url":{"description":"Public Dataplane API URL\n","type":"string"}},"required":["privateUrl","url"],"type":"object"},"redpanda:index/getServerlessClusterKafkaApi:getServerlessClusterKafkaApi":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"privateSeedBrokers":{"description":"Private Kafka API seed brokers\n","items":{"type":"string"},"type":"array"},"seedBrokers":{"description":"Public Kafka API seed brokers\n","items":{"type":"string"},"type":"array"}},"required":["privateSeedBrokers","seedBrokers"],"type":"object"},"redpanda:index/getServerlessClusterNetworkingConfig:getServerlessClusterNetworkingConfig":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"private":{"description":"Private network state\n","type":"string"},"public":{"description":"Public network state\n","type":"string"}},"required":["private","public"],"type":"object"},"redpanda:index/getServerlessClusterPlannedDeletion:getServerlessClusterPlannedDeletion":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"deleteAfter":{"description":"Delete After\n","type":"string"},"reason":{"description":"Reason\n","type":"string"}},"required":["deleteAfter","reason"],"type":"object"},"redpanda:index/getServerlessClusterPrometheus:getServerlessClusterPrometheus":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"privateUrl":{"description":"Private Prometheus metrics URL\n","type":"string"},"url":{"description":"Public Prometheus metrics URL\n","type":"string"}},"required":["privateUrl","url"],"type":"object"},"redpanda:index/getServerlessClusterSchemaRegistry:getServerlessClusterSchemaRegistry":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"privateUrl":{"description":"Private Schema Registry URL\n","type":"string"},"url":{"description":"Public Schema Registry URL\n","type":"string"}},"required":["privateUrl","url"],"type":"object"},"redpanda:index/getServerlessRegionsServerlessRegion:getServerlessRegionsServerlessRegion":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"cloudProvider":{"description":"Cloud provider where the serverless regions exist\n","type":"string"},"name":{"description":"Name of the serverless region\n","type":"string"},"placement":{"$ref":"#/types/redpanda:index%2FgetServerlessRegionsServerlessRegionPlacement:getServerlessRegionsServerlessRegionPlacement"},"timeZone":{"description":"Time zone of the serverless region\n","type":"string"}},"required":["cloudProvider","name","placement","timeZone"],"type":"object"},"redpanda:index/getServerlessRegionsServerlessRegionPlacement:getServerlessRegionsServerlessRegionPlacement":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"enabled":{"description":"Region available\n","type":"boolean"}},"required":["enabled"],"type":"object"},"redpanda:index/getThroughputTiersThroughputTier:getThroughputTiersThroughputTier":{"language":{"nodejs":{"requiredInputs":[]}},"properties":{"cloudProvider":{"description":"Cloud provider where the Throughput Tier is available\n","type":"string"},"displayName":{"description":"Display name of the Throughput Tier\n","type":"string"},"name":{"description":"Unique name of the Throughput Tier\n","type":"string"}},"required":["cloudProvider","displayName","name"],"type":"object"}},"version":"2.0.0"}
