У меня есть модуль Terraform, который устанавливает пароль администратора на основе переменной
admin_password = "${var.local_admin_password}"
Тем не мение, var.local_admin_password
это уже не единственное место, откуда можно получить пароль. Мне нужно изменить логику, чтобы она была примерно такой:
admin_password = "${var.local_admin_password != "" ? var.local_admin_password : module.secrets.local_admin_password}"
Если local_admin_password
поставляется, он использует это, но если это не после этого он должен получить пароль от модуля секретов.
Это отлично работает для новый Ресурсы. Но применение этого к старым ресурсам вызывает изменение чувствительной переменной admin_password
который запускает новый ресурс. У всех старых ресурсов будет local_admin_password
поставляется, поэтому значение фактически не меняется.
Есть ли способ сделать это изменение таким образом, чтобы Terraform распознал, что данные на самом деле такие же, и не запускал изменение ресурса?
Вы можете попробовать использовать ignore_changes
в пределах lifecycle
блок конфигурации для конкретного ресурса. Обратите внимание: это нельзя сделать на уровне модуля, а только для каждого ресурса.
Пример того, как его можно использовать, следующий, где атрибут «acl» будет проигнорирован после первоначального создания ресурса:
resource "aws_s3_bucket" "bucket" {
name = "test-bucket"
acl = "private"
lifecycle {
ignore_changes = ["acl"]
}
}
Это поведение описано здесь: https://www.terraform.io/docs/configuration/resources.html#ignore_changes