Как игнорировать изменение атрибута в блоке

Я развертываю веб-приложения в Azure и хочу игнорировать изменения атрибута scm_type в блоке site_config.

Во время развертывания атрибут 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 во время обновления инфраструктуры, но он пытается вернуть его обратно в None. Линия от выхода плана terraform:

~ scm_type = "BitbucketGit" -> "None"

4 ответа

Я думаю, вам нужно исправить свой синтаксис в игнорировании изменений. Это должно выглядеть так, или, по крайней мере, из того, что я смог получить на работу.

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

Вот документы, которые имеют синтаксис.

https://www.terraform.io/docs/configuration/resources.html

Это была ошибка terraform: https://github.com/hashicorp/terraform/issues/21433 Мой синтаксис правильный, в версии 0.12.4 он снова работает.

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

здесьsite_config["scm_type"]

без запятой(,) тоже будет работать

Вот документы, которые имеют синтаксис.

https://spacelift.io/blog/terraform-resource-lifecycle

Кажется, синтаксис изменился. М_дк подтвердил этоsite_config["scm_type"]не работает в терраформе. И в версии то же самое1.3.9. Что еще хуже, он не выдает ошибок.

Он игнорирует все site_config, что эффективно блокирует изменение сайта.

Для версии1.1.5и выше правильный синтаксис:

      lifecycle {
    ignore_changes = [
        site_config[0].scm_type
    ]
}
Другие вопросы по тегам