Skip to content

Terraform producing unnecessarily noisy diffs due to omitted lists #165

@mightyguava

Description

@mightyguava

Describe the Bug

Moving from module version 0.58.2 to 0.60.0, Terraform is creating unnecessarily noisy diffs for empty list values. It doesn't impact whether a change is detected on the task definition or not, just the size of the diff, presumably due to the way Terraform is treating [] and omitted the same.

Pasting part of the diff below

              ~ {
                  - mountPoints            = []
                    name                   = "log-router"
                  - portMappings           = []
                  - volumesFrom            = []
                    # (8 unchanged attributes hidden)
                },
              ~ {
                  ~ environment            = [
                        # (2 unchanged elements hidden)
                        {
                            name  = "DD_LOGS_ENABLED"
                            value = "true"
                        },
                      ~ {
                            name  = "DD_VERSION"
                          ~ value = "fake-tag-for-template" -> "326d5e5572a9f7b4fd8c54fa243a84af094dac5b"
                        },
                        {
                            name  = "ECS_FARGATE"
                            value = "true"
                        },
                    ]
                  - mountPoints            = []
                    name                   = "datadog"
                  - volumesFrom            = []
                    # (7 unchanged attributes hidden)
                },

Expected Behavior

Here's a diff using 0.58.2. Notice that mountPoints, portMappings, and volumesFrom don't show that they are being removed.

                {
                    cpu                    = 0
                    environment            = []
                    essential              = true
                    firelensConfiguration  = {
                        options = {
                            enable-ecs-log-metadata = "true"
                        }
                        type    = "fluentbit"
                    }
                    image                  = "public.ecr.aws/aws-observability/aws-for-fluent-bit:latest"
                    logConfiguration       = {
                        logDriver = "awslogs"
                        options   = {
                            awslogs-group         = "main/fromagerie-job-migrate-from-unified-keysets"
                            awslogs-region        = "us-west-2"
                            awslogs-stream-prefix = "fluentbit"
                        }
                    }
                    mountPoints            = []
                    name                   = "log-router"
                    portMappings           = []
                    readonlyRootFilesystem = false
                    user                   = "0"
                    volumesFrom            = []
                },
              ~ {
                  ~ environment            = [
                        # (2 unchanged elements hidden)
                        {
                            name  = "DD_LOGS_ENABLED"
                            value = "true"
                        },
                      ~ {
                            name  = "DD_VERSION"
                          ~ value = "fake-tag-for-template" -> "326d5e5572a9f7b4fd8c54fa243a84af094dac5b"
                        },
                        {
                            name  = "ECS_FARGATE"
                            value = "true"
                        },
                    ]
                    name                   = "datadog"
                    # (9 unchanged attributes hidden)
                },
            ] # forces replacement

Steps to Reproduce

Run plan on any task definition with changes that would cause the task definition to be replaced, where mountPoints or portMappings, etc, is omitted from the container definition or an [] is provided.

Screenshots

No response

Environment

Terraform v1.4.6
on darwin_arm64

  • provider registry.terraform.io/hashicorp/aws v5.1.0
  • provider registry.terraform.io/hashicorp/local v2.4.0
  • provider registry.terraform.io/hashicorp/null v3.2.1
  • provider registry.terraform.io/hashicorp/time v0.9.1

Additional Context

I think the problem is that the ECS task definition API is returning [] for list fields that are unset. Maybe these fields should be set to [] when not provided in the container definition as well? @go

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug🐛 An issue with the system

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions