Skip to content

Terraform plan inaccurate output when removing attributes to product types #508

@elachance1

Description

@elachance1

Version information

  • terraform: 1.9.2
  • terraform provider: 1.14.3

Describe the bug

There seems to be a bug with the terraform plan when removing attributes of product type when they are not the last one in the file. (I haven't tried with other ressources)

To Reproduce

  1. Execute terraform apply with the following product type :
resource "commercetools_product_type" "my-product-type" {
  key         = "my-product-type"
  name        = "My Product Type"
  description = "My Product Type Description"
 
  attribute {
    name = "my-first-attribute"
    label = {
      en-US = "My First Attribute"
    }
    required = true
    type {
      name = "text"
    }
    constraint = "SameForAll"
    searchable = true
    input_hint = "SingleLine"
  }
 
  attribute {
    name = "my-second-attribute"
    label = {
      en-US = "My Second Attribute"
    }
    required = true
    type {
      name = "text"
    }
    constraint = "SameForAll"
    searchable = true
    input_hint = "SingleLine"
  }
}
  1. Remove the first attribute. You should end up with a file like this :
resource "commercetools_product_type" "my-product-type" {
  key         = "my-product-type"
  name        = "My Product Type"
  description = "My Product Type Description"
 
  attribute {
    name = "my-second-attribute"
    label = {
      en-US = "My Second Attribute"
    }
    required = true
    type {
      name = "text"
    }
    constraint = "SameForAll"
    searchable = true
    input_hint = "SingleLine"
  }
}
  1. Execute a terraform plan

  2. Terraform will give the following output :

Terraform will perform the following actions:
  # commercetools_product_type.my-product-type will be updated in-place
  ~ resource "commercetools_product_type" "my-product-type" {
        id          = "NOT_IMPORTANT_GENERATED_UUID_FOR_MY_RESSOURCE"
        name        = "My Product Type"
        # (3 unchanged attributes hidden)
      ~ attribute {
          ~ label      = {
              ~ "en-US" = "My First Attribute" -> "My Second Attribute"
            }
          ~ name       = "my-first-attribute" -> "my-second-attribute"
            # (5 unchanged attributes hidden)
            # (1 unchanged block hidden)
        }
      - attribute {
          - constraint = "SameForAll" -> null
          - input_hint = "SingleLine" -> null
          - input_tip  = {} -> null
          - label      = {
              - "en-US" = "My Second Attribute"
            } -> null
          - name       = "my-second-attribute" -> null
          - required   = true -> null
          - searchable = true -> null
          - type {
              - name = "text" -> null
            }
        }
    }
Plan: 0 to add, 1 to change, 0 to destroy.

The plan is misleading. It does not rename the first attribute into the second attribute. Otherwise, there should be inconsistencies with the data after the apply (second attribute should end up with the first attribute data) if the plan was accurate. But, it actually remove the first attribute as expected on CommerceTools.

Expected behavior

I would expect the same behaviour as we remove the last attribute of the file. Here is an example of the output we get when we remove the last attribute :

Terraform will perform the following actions:
  # commercetools_product_type.my-product-type will be updated in-place
  ~ resource "commercetools_product_type" "my-product-type" {
        id          = "NOT_IMPORTANT_GENERATED_UUID_FOR_MY_RESSOURCE"
        name        = "My Product Type"
        # (3 unchanged attributes hidden)
      - attribute {
          - constraint = "SameForAll" -> null
          - input_hint = "SingleLine" -> null
          - input_tip  = {} -> null
          - label      = {
              - "en-US" = "My Second Attribute"
            } -> null
          - name       = "my-second-attribute" -> null
          - required   = true -> null
          - searchable = true -> null
          - type {
              - name = "text" -> null
            }
        }
        # (1 unchanged block hidden)
    }
Plan: 0 to add, 1 to change, 0 to destroy.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions