在使用随机提供程序的资源时,配置keepers
非常有用,以便在相关keepers
更改时呈现的结果会发生更改。我希望将所有输入变量定义为keepers
,以便只要输入发生变化,random_string
就会发生变化。
最小的例子就像:
variable "var1" { type = "string" }
variable "var2" { type = "string" }
resource "random_string" "rnd" {
length = 16
special = false
keepers = {
variables = "${sha256(jsonencode(var))}"
}
}
output "rnd" {
value = "${random_string.rnd.result}"
}
不幸的是,这会产生此错误:
random_string.rnd: invalid variable syntax: "var". Did you mean 'var.var'? If this is part of inline `template` parameter
然后你必须用两个美元符号来逃避插值。对于 例如:$ {a}变为$$ {a}。
我到目前为止找到的唯一解决方案是将所有输入变量“嵌入”到资源定义中,如下所示:
variable "var1" { type = "string" }
variable "var2" { type = "string" }
resource "random_string" "rnd" {
length = 16
special = false
keepers = {
variables = "${sha256("${var.var1}${var.var2}")}"
}
}
在terraform中有更灵活的方法来解决这个问题吗? THX
答案 0 :(得分:1)
我在另一个用例中也遇到过这个问题。但是,由于您无法访问所有可用变量,因此没有适当的解决方案。 唯一的解决方案是您已在问题中描述的解决方案。
此外,您可以使用例如template_file
或locale
将丑陋的部分移动到另一个资源中:
locals {
var-map = {
var1 = "${var.var1}"
var2 = "${var.var2}"
}
}
resource "random_id" "rnd" {
byte_length = 8
keepers = "${local.var-map}"
}