From 9e2bd6426feb16d1d885ed842078dcd7e28a11b1 Mon Sep 17 00:00:00 2001 From: Anton Babenko Date: Fri, 9 Apr 2021 15:21:18 +0200 Subject: [PATCH 1/2] feat: Added workaround for variable type `any` --- README.md | 18 +++++++++++++++++- main.tf | 6 +++--- versions.tf | 2 +- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f6266ecc..a22fa8ae 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,22 @@ module "s3_bucket" { } ``` +## Terragrunt and `variable "..." { type = any }` + +There is a bug [#1211](https://github.com/gruntwork-io/terragrunt/issues/1211) in Terragrunt related to the way how the variables of type `any` are passed to Terraform. + +This module solves this issue by supporting `jsonencode()`-string in addition to the expected type (`list` or `map`). + +In `terragrunt.hcl` you can write: + +```terraform +inputs = { + bucket = "foobar" # `bucket` has type `string`, no need to jsonencode() + cors_rule = jsonencode([...]) # `cors_rule` has type `any`, so `jsonencode()` is required +} +``` + + ## Examples: * [Complete](https://github.com/terraform-aws-modules/terraform-aws-s3-bucket/tree/master/examples/complete) - Complete S3 bucket with most of supported features enabled @@ -82,7 +98,7 @@ module "s3_bucket" { | Name | Version | |------|---------| -| [terraform](#requirement\_terraform) | >= 0.12.26 | +| [terraform](#requirement\_terraform) | >= 0.13.1 | | [aws](#requirement\_aws) | >= 3.0 | ## Providers diff --git a/main.tf b/main.tf index 650ff419..09097344 100644 --- a/main.tf +++ b/main.tf @@ -28,7 +28,7 @@ resource "aws_s3_bucket" "this" { } dynamic "cors_rule" { - for_each = var.cors_rule + for_each = try(jsondecode(var.cors_rule), var.cors_rule) content { allowed_methods = cors_rule.value.allowed_methods @@ -58,7 +58,7 @@ resource "aws_s3_bucket" "this" { } dynamic "grant" { - for_each = var.grant + for_each = try(jsondecode(var.grant), var.grant) content { id = lookup(grant.value, "id", null) @@ -69,7 +69,7 @@ resource "aws_s3_bucket" "this" { } dynamic "lifecycle_rule" { - for_each = var.lifecycle_rule + for_each = try(jsondecode(var.lifecycle_rule), var.lifecycle_rule) content { id = lookup(lifecycle_rule.value, "id", null) diff --git a/versions.tf b/versions.tf index 84e7b654..78479c03 100644 --- a/versions.tf +++ b/versions.tf @@ -1,5 +1,5 @@ terraform { - required_version = ">= 0.12.26" + required_version = ">= 0.13.1" required_providers { aws = ">= 3.0" From a6d1bca704c1e564e64c9eb2ae063323fbac95aa Mon Sep 17 00:00:00 2001 From: Anton Babenko Date: Fri, 9 Apr 2021 15:26:23 +0200 Subject: [PATCH 2/2] Reverted version to 0.12.26 (enough for 'try' function) --- README.md | 2 +- versions.tf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a22fa8ae..e2377cf9 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ inputs = { | Name | Version | |------|---------| -| [terraform](#requirement\_terraform) | >= 0.13.1 | +| [terraform](#requirement\_terraform) | >= 0.12.26 | | [aws](#requirement\_aws) | >= 3.0 | ## Providers diff --git a/versions.tf b/versions.tf index 78479c03..84e7b654 100644 --- a/versions.tf +++ b/versions.tf @@ -1,5 +1,5 @@ terraform { - required_version = ">= 0.13.1" + required_version = ">= 0.12.26" required_providers { aws = ">= 3.0"