diff --git a/README.md b/README.md index 0a1b6f5..444edfc 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,8 @@ module "pubsub" { maximum_backoff = "600s" // optional minimum_backoff = "300s" // optional filter = "attributes.domain = \"com\"" // optional - enable_message_ordering = true // optional + enable_message_ordering = true + labels = { environment = "dev"} // optional } ] pull_subscriptions = [ @@ -84,8 +85,8 @@ module "pubsub" { | Name | Description | Type | Default | Required | |------|-------------|------|---------|:--------:| -| bigquery\_subscriptions | The list of the Bigquery push subscriptions. |
list(object({
name = string,
table = string,
use_topic_schema = optional(bool),
use_table_schema = optional(bool),
write_metadata = optional(bool),
drop_unknown_fields = optional(bool),
ack_deadline_seconds = optional(number),
retain_acked_messages = optional(bool),
message_retention_duration = optional(string),
enable_message_ordering = optional(bool),
expiration_policy = optional(string),
filter = optional(string),
dead_letter_topic = optional(string),
max_delivery_attempts = optional(number),
maximum_backoff = optional(string),
minimum_backoff = optional(string)
}))
| `[]` | no | -| cloud\_storage\_subscriptions | The list of the Cloud Storage push subscriptions. |
list(object({
name = string,
bucket = string,
filename_prefix = optional(string),
filename_suffix = optional(string),
filename_datetime_format = optional(string),
max_duration = optional(string),
max_bytes = optional(string),
max_messages = optional(string),
output_format = optional(string),
write_metadata = optional(bool),
use_topic_schema = optional(bool),
ack_deadline_seconds = optional(number),
retain_acked_messages = optional(bool),
message_retention_duration = optional(string),
enable_message_ordering = optional(bool),
expiration_policy = optional(string),
filter = optional(string),
dead_letter_topic = optional(string),
max_delivery_attempts = optional(number),
maximum_backoff = optional(string),
minimum_backoff = optional(string)
}))
| `[]` | no | +| bigquery\_subscriptions | The list of the Bigquery push subscriptions. |
list(object({
name = string,
table = string,
use_topic_schema = optional(bool),
use_table_schema = optional(bool),
write_metadata = optional(bool),
drop_unknown_fields = optional(bool),
ack_deadline_seconds = optional(number),
retain_acked_messages = optional(bool),
message_retention_duration = optional(string),
enable_message_ordering = optional(bool),
expiration_policy = optional(string),
filter = optional(string),
dead_letter_topic = optional(string),
max_delivery_attempts = optional(number),
maximum_backoff = optional(string),
minimum_backoff = optional(string),
labels = optional(map(string)),
}))
| `[]` | no | +| cloud\_storage\_subscriptions | The list of the Cloud Storage push subscriptions. |
list(object({
name = string,
bucket = string,
filename_prefix = optional(string),
filename_suffix = optional(string),
filename_datetime_format = optional(string),
max_duration = optional(string),
max_bytes = optional(string),
max_messages = optional(string),
output_format = optional(string),
write_metadata = optional(bool),
use_topic_schema = optional(bool),
ack_deadline_seconds = optional(number),
retain_acked_messages = optional(bool),
message_retention_duration = optional(string),
enable_message_ordering = optional(bool),
expiration_policy = optional(string),
filter = optional(string),
dead_letter_topic = optional(string),
max_delivery_attempts = optional(number),
maximum_backoff = optional(string),
minimum_backoff = optional(string),
labels = optional(map(string)),
}))
| `[]` | no | | create\_subscriptions | Specify true if you want to create subscriptions. | `bool` | `true` | no | | create\_topic | Specify true if you want to create a topic. | `bool` | `true` | no | | grant\_bigquery\_project\_roles | Specify true if you want to add bigquery.metadataViewer and bigquery.dataEditor roles to the default Pub/Sub SA. | `bool` | `true` | no | @@ -93,8 +94,8 @@ module "pubsub" { | grant\_token\_creator | Specify true if you want to add token creator role to the default Pub/Sub SA. | `bool` | `true` | no | | message\_storage\_policy | A map of storage policies. Default - inherit from organization's Resource Location Restriction policy. | `map(any)` | `{}` | no | | project\_id | The project ID to manage the Pub/Sub resources. | `string` | n/a | yes | -| pull\_subscriptions | The list of the pull subscriptions. |
list(object({
name = string,
ack_deadline_seconds = optional(number),
expiration_policy = optional(string),
dead_letter_topic = optional(string),
max_delivery_attempts = optional(number),
retain_acked_messages = optional(bool),
message_retention_duration = optional(string),
maximum_backoff = optional(string),
minimum_backoff = optional(string),
filter = optional(string),
enable_message_ordering = optional(bool),
service_account = optional(string),
enable_exactly_once_delivery = optional(bool),
}))
| `[]` | no | -| push\_subscriptions | The list of the push subscriptions. |
list(object({
name = string,
ack_deadline_seconds = optional(number),
push_endpoint = optional(string),
x-goog-version = optional(string),
oidc_service_account_email = optional(string),
audience = optional(string),
expiration_policy = optional(string),
dead_letter_topic = optional(string),
retain_acked_messages = optional(bool),
message_retention_duration = optional(string),
max_delivery_attempts = optional(number),
maximum_backoff = optional(string),
minimum_backoff = optional(string),
filter = optional(string),
enable_message_ordering = optional(bool),
no_wrapper = optional(bool),
write_metadata = optional(bool),
}))
| `[]` | no | +| pull\_subscriptions | The list of the pull subscriptions. |
list(object({
name = string,
ack_deadline_seconds = optional(number),
expiration_policy = optional(string),
dead_letter_topic = optional(string),
max_delivery_attempts = optional(number),
retain_acked_messages = optional(bool),
message_retention_duration = optional(string),
maximum_backoff = optional(string),
minimum_backoff = optional(string),
filter = optional(string),
enable_message_ordering = optional(bool),
service_account = optional(string),
enable_exactly_once_delivery = optional(bool),
labels = optional(map(string)),
}))
| `[]` | no | +| push\_subscriptions | The list of the push subscriptions. |
list(object({
name = string,
ack_deadline_seconds = optional(number),
push_endpoint = optional(string),
x-goog-version = optional(string),
oidc_service_account_email = optional(string),
audience = optional(string),
expiration_policy = optional(string),
dead_letter_topic = optional(string),
retain_acked_messages = optional(bool),
message_retention_duration = optional(string),
max_delivery_attempts = optional(number),
maximum_backoff = optional(string),
minimum_backoff = optional(string),
filter = optional(string),
enable_message_ordering = optional(bool),
no_wrapper = optional(bool),
write_metadata = optional(bool),
labels = optional(map(string)),
}))
| `[]` | no | | schema | Schema for the topic. |
object({
name = string
type = string
definition = string
encoding = string
})
| `null` | no | | subscription\_labels | A map of labels to assign to every Pub/Sub subscription. | `map(string)` | `{}` | no | | topic | The Pub/Sub topic name. | `string` | n/a | yes | diff --git a/main.tf b/main.tf index 034914f..9367905 100644 --- a/main.tf +++ b/main.tf @@ -170,10 +170,13 @@ resource "google_pubsub_topic" "topic" { resource "google_pubsub_subscription" "push_subscriptions" { for_each = var.create_subscriptions ? { for i in var.push_subscriptions : i.name => i } : {} - name = each.value.name - topic = var.create_topic ? google_pubsub_topic.topic[0].name : var.topic - project = var.project_id - labels = var.subscription_labels + name = each.value.name + topic = var.create_topic ? google_pubsub_topic.topic[0].name : var.topic + project = var.project_id + labels = merge( + var.subscription_labels, # global default labels + lookup(each.value, "labels", {}) # subscription-specific labels + ) ack_deadline_seconds = each.value.ack_deadline_seconds != null ? each.value.ack_deadline_seconds : local.default_ack_deadline_seconds message_retention_duration = each.value.message_retention_duration retain_acked_messages = each.value.retain_acked_messages diff --git a/variables.tf b/variables.tf index 7d19bb6..7f74da6 100644 --- a/variables.tf +++ b/variables.tf @@ -60,6 +60,7 @@ variable "push_subscriptions" { enable_message_ordering = optional(bool), no_wrapper = optional(bool), write_metadata = optional(bool), + labels = optional(map(string)), })) description = "The list of the push subscriptions." default = [] @@ -80,6 +81,7 @@ variable "pull_subscriptions" { enable_message_ordering = optional(bool), service_account = optional(string), enable_exactly_once_delivery = optional(bool), + labels = optional(map(string)), })) description = "The list of the pull subscriptions." default = [] @@ -102,7 +104,8 @@ variable "bigquery_subscriptions" { dead_letter_topic = optional(string), max_delivery_attempts = optional(number), maximum_backoff = optional(string), - minimum_backoff = optional(string) + minimum_backoff = optional(string), + labels = optional(map(string)), })) description = "The list of the Bigquery push subscriptions." default = [] @@ -130,7 +133,8 @@ variable "cloud_storage_subscriptions" { dead_letter_topic = optional(string), max_delivery_attempts = optional(number), maximum_backoff = optional(string), - minimum_backoff = optional(string) + minimum_backoff = optional(string), + labels = optional(map(string)), })) description = "The list of the Cloud Storage push subscriptions." default = []