我有一个 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 识别出数据实际上是相同的,并且不会触发资源更改?
答案1
您可以尝试在特定资源的配置块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