mmv1/products/pubsub/Topic.yaml (420 lines of code) (raw):

# Copyright 2024 Google Inc. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. --- name: 'Topic' description: | A named resource to which messages are sent by publishers. references: guides: 'Managing Topics': 'https://cloud.google.com/pubsub/docs/admin#managing_topics' api: 'https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics' docs: note: | You can retrieve the email of the Google Managed Pub/Sub Service Account used for forwarding by using the `google_project_service_identity` resource. base_url: 'projects/{{project}}/topics' create_verb: 'PUT' update_url: 'projects/{{project}}/topics/{{name}}' update_verb: 'PATCH' update_mask: true timeouts: insert_minutes: 20 update_minutes: 20 delete_minutes: 20 # PubSub resources don't have operations but are negatively cached # and eventually consistent. # Because some users check whether the PubSub resource exists prior # to applying a new resource, we need to add this PollAsync to GET the # resource until it exists and the negative cached result goes away. # Context: hashicorp/terraform-provider-google#4993 async: type: 'PollAsync' check_response_func_existence: 'transport_tpg.PollCheckForExistence' check_response_func_absence: 'transport_tpg.PollCheckForAbsence' suppress_error: true target_occurrences: 1 actions: ['create'] iam_policy: method_name_separator: ':' parent_resource_attribute: 'topic' example_config_body: 'templates/terraform/iam/iam_attributes.go.tmpl' custom_code: encoder: 'templates/terraform/encoders/no_send_name.go.tmpl' update_encoder: 'templates/terraform/update_encoder/pubsub_topic.tmpl' error_retry_predicates: - 'transport_tpg.PubsubTopicProjectNotReady' examples: - name: 'pubsub_topic_basic' primary_resource_id: 'example' primary_resource_name: 'fmt.Sprintf("tf-test-example-topic%s", context["random_suffix"])' vars: topic_name: 'example-topic' - name: 'pubsub_topic_cmek' primary_resource_id: 'example' vars: topic_name: 'example-topic' key_name: 'example-key' keyring_name: 'example-keyring' exclude_test: true - name: 'pubsub_topic_geo_restricted' primary_resource_id: 'example' vars: topic_name: 'example-topic' - name: 'pubsub_topic_schema_settings' primary_resource_id: 'example' vars: topic_name: 'example-topic' schema_name: 'example' test_env_vars: project_name: 'PROJECT_NAME' - name: 'pubsub_topic_ingestion_kinesis' primary_resource_id: 'example' vars: topic_name: 'example-topic' - name: 'pubsub_topic_ingestion_cloud_storage' primary_resource_id: 'example' vars: topic_name: 'example-topic' - name: 'pubsub_topic_ingestion_azure_event_hubs' primary_resource_id: 'example' vars: topic_name: 'example-topic' - name: 'pubsub_topic_ingestion_aws_msk' primary_resource_id: 'example' vars: topic_name: 'example-topic' - name: 'pubsub_topic_ingestion_confluent_cloud' primary_resource_id: 'example' vars: topic_name: 'example-topic' parameters: properties: - name: 'name' type: String description: 'Name of the topic.' required: true immutable: true diff_suppress_func: 'tpgresource.CompareSelfLinkOrResourceName' custom_flatten: 'templates/terraform/custom_flatten/name_from_self_link.tmpl' custom_expand: 'templates/terraform/custom_expand/resource_from_self_link.go.tmpl' - name: 'kmsKeyName' type: String description: | The resource name of the Cloud KMS CryptoKey to be used to protect access to messages published on this topic. Your project's PubSub service account (`service-{{PROJECT_NUMBER}}@gcp-sa-pubsub.iam.gserviceaccount.com`) must have `roles/cloudkms.cryptoKeyEncrypterDecrypter` to use this feature. The expected format is `projects/*/locations/*/keyRings/*/cryptoKeys/*` - name: 'labels' type: KeyValueLabels description: | A set of key/value label pairs to assign to this Topic. - name: 'messageStoragePolicy' type: NestedObject description: | Policy constraining the set of Google Cloud Platform regions where messages published to the topic may be stored. If not present, then no constraints are in effect. default_from_api: true properties: - name: 'allowedPersistenceRegions' is_set: true type: Array description: | A list of IDs of GCP regions where messages that are published to the topic may be persisted in storage. Messages published by publishers running in non-allowed GCP regions (or running outside of GCP altogether) will be routed for storage in one of the allowed regions. An empty list means that no regions are allowed, and is not a valid configuration. required: true item_type: type: String - name: "enforceInTransit" type: Boolean description: | If true, `allowedPersistenceRegions` is also used to enforce in-transit guarantees for messages. That is, Pub/Sub will fail topics.publish operations on this topic and subscribe operations on any subscription attached to this topic in any region that is not in `allowedPersistenceRegions`. required: false - name: 'schemaSettings' type: NestedObject description: | Settings for validating messages published against a schema. properties: - name: 'schema' type: String description: | The name of the schema that messages published should be validated against. Format is projects/{project}/schemas/{schema}. The value of this field will be _deleted-schema_ if the schema has been deleted. required: true - name: 'encoding' type: Enum description: The encoding of messages validated against schema. default_value: "ENCODING_UNSPECIFIED" enum_values: - 'ENCODING_UNSPECIFIED' - 'JSON' - 'BINARY' - name: 'messageRetentionDuration' type: String description: | Indicates the minimum duration to retain a message after it is published to the topic. If this field is set, messages published to the topic in the last messageRetentionDuration are always available to subscribers. For instance, it allows any attached subscription to seek to a timestamp that is up to messageRetentionDuration in the past. If this field is not set, message retention is controlled by settings on individual subscriptions. The rotation period has the format of a decimal number, followed by the letter `s` (seconds). Cannot be more than 31 days or less than 10 minutes. - name: 'ingestionDataSourceSettings' type: NestedObject description: | Settings for ingestion from a data source into this topic. properties: - name: 'awsKinesis' type: NestedObject description: | Settings for ingestion from Amazon Kinesis Data Streams. conflicts: - 'aws_kinesis' - 'cloud_storage' - 'azure_event_hubs' - 'aws_msk' - 'confluent_cloud' properties: - name: 'streamArn' type: String description: | The Kinesis stream ARN to ingest data from. required: true - name: 'consumerArn' type: String description: | The Kinesis consumer ARN to used for ingestion in Enhanced Fan-Out mode. The consumer must be already created and ready to be used. required: true - name: 'awsRoleArn' type: String description: | AWS role ARN to be used for Federated Identity authentication with Kinesis. Check the Pub/Sub docs for how to set up this role and the required permissions that need to be attached to it. required: true - name: 'gcpServiceAccount' type: String description: | The GCP service account to be used for Federated Identity authentication with Kinesis (via a `AssumeRoleWithWebIdentity` call for the provided role). The `awsRoleArn` must be set up with `accounts.google.com:sub` equals to this service account number. required: true - name: 'cloudStorage' type: NestedObject description: Settings for ingestion from Cloud Storage. conflicts: - 'aws_kinesis' - 'cloud_storage' - 'azure_event_hubs' - 'aws_msk' - 'confluent_cloud' properties: - name: 'bucket' type: String description: | Cloud Storage bucket. The bucket name must be without any prefix like "gs://". See the bucket naming requirements: https://cloud.google.com/storage/docs/buckets#naming. required: true - name: 'textFormat' type: NestedObject description: | Configuration for reading Cloud Storage data in text format. Each line of text as specified by the delimiter will be set to the `data` field of a Pub/Sub message. exactly_one_of: - 'text_format' - 'avro_format' - 'pubsub_avro_format' properties: - name: 'delimiter' type: String description: | The delimiter to use when using the 'text' format. Each line of text as specified by the delimiter will be set to the 'data' field of a Pub/Sub message. When unset, '\n' is used. required: false default_value: "\\n" - name: 'avroFormat' type: NestedObject description: | Configuration for reading Cloud Storage data in Avro binary format. The bytes of each object will be set to the `data` field of a Pub/Sub message. send_empty_value: true allow_empty_object: true exactly_one_of: - 'text_format' - 'avro_format' - 'pubsub_avro_format' properties: # Meant to be an empty object with no properties. [] - name: 'pubsubAvroFormat' type: NestedObject description: | Configuration for reading Cloud Storage data written via Cloud Storage subscriptions(See https://cloud.google.com/pubsub/docs/cloudstorage). The data and attributes fields of the originally exported Pub/Sub message will be restored when publishing. send_empty_value: true allow_empty_object: true exactly_one_of: - 'text_format' - 'avro_format' - 'pubsub_avro_format' properties: # Meant to be an empty object with no properties. [] - name: 'minimumObjectCreateTime' type: String description: | The timestamp set in RFC3339 text format. If set, only objects with a larger or equal timestamp will be ingested. Unset by default, meaning all objects will be ingested. required: false - name: 'matchGlob' type: String description: | Glob pattern used to match objects that will be ingested. If unset, all objects will be ingested. See the supported patterns: https://cloud.google.com/storage/docs/json_api/v1/objects/list#list-objects-and-prefixes-using-glob required: false - name: 'platformLogsSettings' type: NestedObject description: | Settings for Platform Logs regarding ingestion to Pub/Sub. If unset, no Platform Logs will be generated.' required: false properties: - name: 'severity' type: Enum description: | The minimum severity level of Platform Logs that will be written. If unspecified, no Platform Logs will be written. default_value: "SEVERITY_UNSPECIFIED" enum_values: - 'SEVERITY_UNSPECIFIED' - 'DISABLED' - 'DEBUG' - 'INFO' - 'WARNING' - 'ERROR' - name: 'azureEventHubs' type: NestedObject description: | Settings for ingestion from Azure Event Hubs. conflicts: - 'aws_kinesis' - 'cloud_storage' - 'azure_event_hubs' - 'aws_msk' - 'confluent_cloud' properties: - name: 'resourceGroup' type: String description: | The name of the resource group within an Azure subscription. - name: 'namespace' type: String description: | The Azure event hub namespace to ingest data from. - name: 'eventHub' type: String description: | The Azure event hub to ingest data from. - name: 'clientId' type: String description: | The Azure event hub client ID to use for ingestion. - name: 'tenantId' type: String description: | The Azure event hub tenant ID to use for ingestion. - name: 'subscriptionId' type: String description: | The Azure event hub subscription ID to use for ingestion. - name: 'gcpServiceAccount' type: String description: | The GCP service account to be used for Federated Identity authentication with Azure (via a `AssumeRoleWithWebIdentity` call for the provided role). - name: 'awsMsk' type: NestedObject description: | Settings for ingestion from Amazon Managed Streaming for Apache Kafka. conflicts: - 'aws_kinesis' - 'cloud_storage' - 'azure_event_hubs' - 'aws_msk' - 'confluent_cloud' properties: - name: 'clusterArn' type: String description: | ARN that uniquely identifies the MSK cluster. required: true - name: 'topic' type: String description: | The name of the MSK topic that Pub/Sub will import from. required: true - name: 'awsRoleArn' type: String description: | AWS role ARN to be used for Federated Identity authentication with MSK. Check the Pub/Sub docs for how to set up this role and the required permissions that need to be attached to it. required: true - name: 'gcpServiceAccount' type: String description: | The GCP service account to be used for Federated Identity authentication with MSK (via a `AssumeRoleWithWebIdentity` call for the provided role). The `awsRoleArn` must be set up with `accounts.google.com:sub` equals to this service account number. required: true - name: 'confluentCloud' type: NestedObject description: | Settings for ingestion from Confluent Cloud. conflicts: - 'aws_kinesis' - 'cloud_storage' - 'azure_event_hubs' - 'aws_msk' - 'confluent_cloud' properties: - name: 'bootstrapServer' type: String description: | The Confluent Cloud bootstrap server. The format is url:port. required: true - name: 'clusterId' type: String description: | The Confluent Cloud cluster ID. - name: 'topic' type: String description: | Name of the Confluent Cloud topic that Pub/Sub will import from. required: true - name: 'identityPoolId' type: String description: | Identity pool ID to be used for Federated Identity authentication with Confluent Cloud. required: true - name: 'gcpServiceAccount' type: String description: | The GCP service account to be used for Federated Identity authentication with Confluent Cloud. required: true