diff --git a/modules/bigtable-instance/README.md b/modules/bigtable-instance/README.md index 10c782ae8f..edabb13e04 100644 --- a/modules/bigtable-instance/README.md +++ b/modules/bigtable-instance/README.md @@ -22,10 +22,9 @@ module "bigtable-instance" { cluster_id = "instance" zone = "europe-west1-b" tables = { - test1 = null, + test1 = {}, test2 = { - split_keys = ["a", "b", "c"] - column_family = null + split_keys = ["a", "b", "c"] } } iam = { @@ -35,6 +34,30 @@ module "bigtable-instance" { # tftest modules=1 resources=4 ``` +### Instance with tables and column families + +```hcl + +module "bigtable-instance" { + source = "./fabric/modules/bigtable-instance" + project_id = "my-project" + name = "instance" + cluster_id = "instance" + zone = "europe-west1-b" + tables = { + test1 = {}, + test2 = { + split_keys = ["a", "b", "c"] + column_families = ["cf1", "cf2", "cf3"] + } + test3 = { + column_families = ["cf1"] + } + } +} +# tftest modules=1 resources=4 +``` + ### Instance with static number of nodes If you are not using autoscaling settings, you must set a specific number of nodes with the variable `num_nodes`. @@ -101,7 +124,7 @@ module "bigtable-instance" { |---|---|:---:|:---:|:---:| | [name](variables.tf#L56) | The name of the Cloud Bigtable instance. | string | ✓ | | | [project_id](variables.tf#L67) | Id of the project where datasets will be created. | string | ✓ | | -| [zone](variables.tf#L99) | The zone to create the Cloud Bigtable cluster in. | string | ✓ | | +| [zone](variables.tf#L88) | The zone to create the Cloud Bigtable cluster in. | string | ✓ | | | [autoscaling_config](variables.tf#L17) | Settings for autoscaling of the instance. If you set this variable, the variable num_nodes is ignored. | object({…}) | | null | | [cluster_id](variables.tf#L28) | The ID of the Cloud Bigtable cluster. | string | | "europe-west1" | | [deletion_protection](variables.tf#L34) | Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a terraform destroy or terraform apply that would delete the instance will fail. | | | true | @@ -110,8 +133,7 @@ module "bigtable-instance" { | [instance_type](variables.tf#L50) | (deprecated) The instance type to create. One of 'DEVELOPMENT' or 'PRODUCTION'. | string | | null | | [num_nodes](variables.tf#L61) | The number of nodes in your Cloud Bigtable cluster. This value is ignored if you are using autoscaling. | number | | 1 | | [storage_type](variables.tf#L72) | The storage type to use. | string | | "SSD" | -| [table_options_defaults](variables.tf#L78) | Default option of tables created in the BigTable instance. | object({…}) | | {…} | -| [tables](variables.tf#L90) | Tables to be created in the BigTable instance, options can be null. | map(object({…})) | | {} | +| [tables](variables.tf#L78) | Tables to be created in the BigTable instance. | map(object({…})) | | {} | ## Outputs diff --git a/modules/bigtable-instance/main.tf b/modules/bigtable-instance/main.tf index b5764c3493..ce56c15f76 100644 --- a/modules/bigtable-instance/main.tf +++ b/modules/bigtable-instance/main.tf @@ -15,9 +15,6 @@ */ locals { - tables = { - for k, v in var.tables : k => v != null ? v : var.table_options_defaults - } num_nodes = var.autoscaling_config == null ? var.num_nodes : null } @@ -54,17 +51,17 @@ resource "google_bigtable_instance_iam_binding" "default" { } resource "google_bigtable_table" "default" { - for_each = local.tables + for_each = var.tables project = var.project_id instance_name = google_bigtable_instance.default.name name = each.key split_keys = each.value.split_keys dynamic "column_family" { - for_each = each.value.column_family != null ? [""] : [] + for_each = each.value.column_families content { - family = each.value.column_family + family = column_family.value } } } diff --git a/modules/bigtable-instance/variables.tf b/modules/bigtable-instance/variables.tf index 84a6013b60..ac92c32625 100644 --- a/modules/bigtable-instance/variables.tf +++ b/modules/bigtable-instance/variables.tf @@ -75,23 +75,12 @@ variable "storage_type" { default = "SSD" } -variable "table_options_defaults" { - description = "Default option of tables created in the BigTable instance." - type = object({ - split_keys = list(string) - column_family = string - }) - default = { - split_keys = [] - column_family = null - } -} - variable "tables" { - description = "Tables to be created in the BigTable instance, options can be null." + description = "Tables to be created in the BigTable instance." + nullable = false type = map(object({ - split_keys = list(string) - column_family = string + split_keys = optional(list(string), []) + column_families = optional(list(string), []) })) default = {} } diff --git a/tests/modules/bigtable_instance/fixture/main.tf b/tests/modules/bigtable_instance/fixture/main.tf index fa74a6c8e2..c7a4777084 100644 --- a/tests/modules/bigtable_instance/fixture/main.tf +++ b/tests/modules/bigtable_instance/fixture/main.tf @@ -22,10 +22,9 @@ module "test" { "roles/bigtable.user" = ["user:me@example.com"] } tables = { - test-1 = null, + test-1 = {}, test-2 = { - split_keys = ["a", "b", "c"] - column_family = null + split_keys = ["a", "b", "c"] } }