How to ignore change of an attribute in block

31,155

Solution 1

I think you need to fix your syntax in the ignore changes. It should look like this, or at least from what I have been able to get to work.

lifecycle {
    ignore_changes = [
        site_config["scm_type"],
    ]
}

Here are the docs that have the syntax.

https://www.terraform.io/docs/language/meta-arguments/lifecycle.html#ignore_changes

Solution 2

It was a terraform bug: https://github.com/hashicorp/terraform/issues/21433 My syntax is correct, in version 0.12.4 it's working again.

Share:
31,155

Related videos on Youtube

szymon
Author by

szymon

Updated on July 09, 2022

Comments

  • szymon
    szymon almost 2 years

    I'm deploying web apps in Azure and I'd like to ignore changes to scm_type attribute within site_config block.

    During deployment the scm_type attribute set to None and later we are changing it to something different in Azure Portal.

    My current TF code looks like this:

    resource "azurerm_app_service" "web_app" {
      count               = length(var.app_names)
      name                = var.app_names[count.index]
      location            = data.azurerm_resource_group.app_resource_group.location
      resource_group_name = data.azurerm_resource_group.app_resource_group.name
      app_service_plan_id = azurerm_app_service_plan.app_plan.id
      tags                = var.tags
      app_settings        = var.app_settings[count.index]
    
      site_config {
        always_on                 = true
        websockets_enabled        = var.websockets_enabled[count.index]
        use_32_bit_worker_process = var.use_32_bit_worker_process
        scm_type                  = "None"
      }
    
      lifecycle {
        ignore_changes = [
          site_config.0.scm_type
        ]
      }
    }
    

    I expect terraform plan to ignore changes in scm_type during infrastructure updates, but it's trying to revert it back to None. Line from terraform plan output:

    ~ scm_type = "BitbucketGit" -> "None"

  • mltsy
    mltsy over 3 years
    I was surprised to find that your syntax was correct, as it doesn't appear to be documented anywhere! But FWIW to future answer-seekers - apparently blocks within a resource definition are referenced as lists (presumably to support the case where the same block appears more than once), and therefore do require this kind of numerically-indexed syntax in order to reference a nested key: block_name[0].nested_key
  • Liam
    Liam over 3 years
  • Chris McKeown
    Chris McKeown almost 3 years
    The syntax in the above linked comment did not work for me, but the one in the comment from @mltsy did. Here's a GitHub issue that also shows this syntax being used.
  • M_dk
    M_dk about 2 years
    FYI: This format is currently making terraform ignore the whole site_config block for me when using v.1.1.5
  • M_dk
    M_dk about 2 years
    The suggested syntax of site_config["scm_type"] causes terraform to ignore the whole site_config block for me with version 1.1.5 It does indeed ignore the settings, but you also end up ignoring settings like ip_restrictions so use with caution.