我有一个 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”将在初始资源创建后被忽略:
此处概述了此行为:https ://www.terraform.io/docs/configuration/resources.html#ignore_changes