From 9efeb651255e92c02e22c6222a28f6320cf394c9 Mon Sep 17 00:00:00 2001 From: Edward Sun Date: Tue, 22 Sep 2020 15:05:24 +0000 Subject: [PATCH] fixed error when a boolean field set to false --- products/datacatalog/api.yaml | 1 + products/datacatalog/terraform.yaml | 16 ++++- .../encoders/data_catalog_tag.go.erb | 17 +++++ .../data_catalog_entry_tag_false.tf.erb | 64 +++++++++++++++++++ 4 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 templates/terraform/encoders/data_catalog_tag.go.erb create mode 100644 templates/terraform/examples/data_catalog_entry_tag_false.tf.erb diff --git a/products/datacatalog/api.yaml b/products/datacatalog/api.yaml index 25476010e224..3ae62eb7c593 100644 --- a/products/datacatalog/api.yaml +++ b/products/datacatalog/api.yaml @@ -462,6 +462,7 @@ objects: Holds the value for a tag field with string type. - !ruby/object:Api::Type::Boolean name: boolValue + send_empty_value: true description: | Holds the value for a tag field with boolean type. - !ruby/object:Api::Type::String diff --git a/products/datacatalog/terraform.yaml b/products/datacatalog/terraform.yaml index 9a669bc825ce..14741360d0ae 100644 --- a/products/datacatalog/terraform.yaml +++ b/products/datacatalog/terraform.yaml @@ -155,6 +155,19 @@ overrides: !ruby/object:Overrides::ResourceOverrides force_delete: "true" oics_vars_overrides: force_delete: "true" + - !ruby/object:Provider::Terraform::Examples + name: "data_catalog_entry_tag_false" + primary_resource_id: "basic_tag" + vars: + entry_group_id: "my_entry_group" + entry_id: "my_entry" + tag_template_id: "my_template" + force_delete: "false" + test_vars_overrides: + force_delete: "true" + oics_vars_overrides: + force_delete: "true" + skip_docs: true # omitting doc as it is almost identical to the case of data_catalog_entry_tag_basic properties: # Changing the name here so when mm generates methods like `flattenDataCatalogTagTemplateDisplayName` # this doesn't conflict with tag template's display name methods @@ -173,9 +186,10 @@ overrides: !ruby/object:Overrides::ResourceOverrides required: false custom_code: !ruby/object:Provider::Terraform::CustomCode custom_import: templates/terraform/custom_import/data_catalog_tag.go.erb + encoder: templates/terraform/encoders/data_catalog_tag.go.erb # This is for copying files over files: !ruby/object:Provider::Config::Files # These files have templating (ERB) code that will be run. # This is usually to add licensing info, autogeneration notices, etc. compile: -<%= lines(indent(compile('provider/terraform/product~compile.yaml'), 4)) -%> \ No newline at end of file +<%= lines(indent(compile('provider/terraform/product~compile.yaml'), 4)) -%> diff --git a/templates/terraform/encoders/data_catalog_tag.go.erb b/templates/terraform/encoders/data_catalog_tag.go.erb new file mode 100644 index 000000000000..54da6b4ed6fe --- /dev/null +++ b/templates/terraform/encoders/data_catalog_tag.go.erb @@ -0,0 +1,17 @@ + if obj["fields"] != nil { + // isEmptyValue() does not work for a boolean as it shows + // false when it is 'empty'. Filter boolValue here based on + // the rule api does not take more than 1 'value' + fields := obj["fields"].(map[string]interface{}) + for _, elements := range fields { + values := elements.(map[string]interface{}) + if len(values) > 1 { + for val := range values { + if val == "boolValue" { + delete(values, "boolValue") + } + } + } + } + } + return obj, nil diff --git a/templates/terraform/examples/data_catalog_entry_tag_false.tf.erb b/templates/terraform/examples/data_catalog_entry_tag_false.tf.erb new file mode 100644 index 000000000000..bb7344cb0148 --- /dev/null +++ b/templates/terraform/examples/data_catalog_entry_tag_false.tf.erb @@ -0,0 +1,64 @@ +resource "google_data_catalog_entry" "entry" { + entry_group = google_data_catalog_entry_group.entry_group.id + entry_id = "<%= ctx[:vars]['entry_id'] %>" + + user_specified_type = "my_custom_type" + user_specified_system = "SomethingExternal" +} + +resource "google_data_catalog_entry_group" "entry_group" { + entry_group_id = "<%= ctx[:vars]['entry_group_id'] %>" +} + +resource "google_data_catalog_tag_template" "tag_template" { + tag_template_id = "<%= ctx[:vars]['tag_template_id'] %>" + region = "us-central1" + display_name = "Demo Tag Template" + + fields { + field_id = "source" + display_name = "test boolean value" + type { + primitive_type = "BOOL" + } + is_required = true + } + + fields { + field_id = "num_rows" + display_name = "Number of rows in the data asset" + type { + primitive_type = "DOUBLE" + } + } + + fields { + field_id = "pii_type" + display_name = "PII type" + type { + enum_type { + allowed_values { + display_name = "EMAIL" + } + allowed_values { + display_name = "SOCIAL SECURITY NUMBER" + } + allowed_values { + display_name = "NONE" + } + } + } + } + + force_delete = "<%= ctx[:vars]['force_delete'] %>" +} + +resource "google_data_catalog_tag" "<%= ctx[:primary_resource_id] %>" { + parent = google_data_catalog_entry.entry.id + template = google_data_catalog_tag_template.tag_template.id + + fields { + field_name = "source" + bool_value = false + } +}