【问题标题】:How to ignore change of an attribute in block如何忽略块中属性的变化
【发布时间】:2019-11-21 08:12:19
【问题描述】:

我正在 Azure 中部署 Web 应用程序,我想忽略 site_config 块中对 scm_type 属性的更改。

在部署期间,scm_type 属性设置为 None,后来我们在 Azure 门户中将其更改为不同的属性。

我当前的 TF 代码如下所示:

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
    ]
  }
}

我希望 terraform 计划在基础设施更新期间忽略 scm_type 中的更改,但它正试图将其恢复为 Noneterraform plan 输出中的行:

~ scm_type = "BitbucketGit" -> "None"

【问题讨论】:

标签: terraform terraform-provider-azure terraform0.12+


【解决方案1】:

我认为您需要在忽略更改中修复您的语法。它应该看起来像这样,或者至少从我能够开始工作的情况来看。

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

这里是具有语法的文档。

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

【讨论】:

    【解决方案2】:

    这是一个 terraform 错误:https://github.com/hashicorp/terraform/issues/21433 我的语法是正确的,在 0.12.4 版本中它又可以工作了。

    【讨论】:

    • 我惊讶地发现您的语法是正确的,因为它似乎没有在任何地方记录!但是对于未来的答案寻求者来说,FWIW - 显然资源定义中的块被引用为列表(大概是为了支持同一块出现多次的情况),因此确实需要这种数字索引语法才能引用嵌套键:block_name[0].nested_key
    • This is the correct syntax,不是上面的
    • 上述链接评论中的语法对我不起作用,但@mltsy 评论中的语法对我有用。这是一个GitHub issue,它也显示了正在使用的语法。
    猜你喜欢
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2016-08-27
    相关资源
    最近更新 更多