@paoloventriglia wrote:
So I have created a google_bigquery module to create datasets and set access.
The module iterates over a map of list of maps. It uses the each.key to create the datasets then iterates over the list of maps to create the dynamic access.
The module works as in:
- It gives no errors nor warning
- It deploys the resources
- It populates the remote statefile appropriately.
The issue is that every time I ran terraform it wants to re-apply the same changes, over and over again.
Clearly something is not right but not sure what.
Terraform Version
Terraform v0.12.16 and v0.12.24 (tried both) Terraform Google Provider 2.20.3 and 3.14.0 (tried both) ...
MAIN.TF
locals { env = basename(path.cwd) project = basename(abspath("${path.cwd}/../..")) project_name = coalesce(var.project_name, format("%s-%s", local.project, local.env)) } data "google_compute_zones" "available" { project = local.project_name region = var.region } provider "google" { project = local.project_name region = var.region version = "~> 2.0" #until 3.0 goes out of beta } terraform { required_version = ">= 0.12.16" } resource "google_bigquery_dataset" "main" { for_each = var.datasets dataset_id = upper("${each.key}_${local.env}") location = var.region delete_contents_on_destroy = true dynamic "access" { for_each = flatten([ for k, v in var.datasets : [ for i in each.value : { role = i.role user_by_email = i.user_by_email group_by_email = i.group_by_email dataset_id = i.dataset_id project_id = i.project_id table_id = i.table_id }]]) content { role = lookup(access.value,"role", null) user_by_email = lookup(access.value,"user_by_email",null) group_by_email = lookup(access.value,"group_by_email",null) view { dataset_id = lookup(access.value,"dataset_id",null) project_id = lookup(access.value,"project_id",null) table_id = lookup(access.value,"table_id", null) } } } access { role = "READER" special_group = "projectReaders" } access { role = "OWNER" group_by_email = "Group" } access { role = "OWNER" user_by_email = "ServiceAccount" } access { role = "WRITER" special_group = "projectWriters" } } ...
VARIABLES.TF
variable "region" { description = "" default = "" } variable "env" { default = "" } variable "project_name" { default = "" } variable "owner_group" { description = "" default = "" } variable "owner_sa" { description = "" default = "" } variable "datasets" { description = "A map of objects, including dataset_isd abd access" type = map(list(map(string))) }
TERRAFORM.TFVARS
datasets = { dataset01 = [ { role = "WRITER" user_by_email = "email_address" group_by_email = "" dataset_id = "" project_id = "" table_id = "" }, { role = "" user_by_email = "" group_by_email = "" dataset_id ="MY_OTHER_DATASET" project_id ="my_other_project" table_id ="my_test_view" } ] dataset02 = [ { role = "READER" user_by_email = "" group_by_email = "group" dataset_id = "" project_id = "" table_id = "" }, { role = "" user_by_email = "" group_by_email = "" dataset_id ="MY_OTHER_DATASET" project_id ="my_other_project" table_id ="my_test_view_2" } ] }
Posts: 4
Participants: 2