Terraform 地形散列输入变量
在使用随机提供者的资源时,配置Terraform 地形散列输入变量,terraform,Terraform,在使用随机提供者的资源时,配置keepers非常有用,这样当相关的keepers更改时,渲染结果就会更改。我想将我所有的输入变量定义为keepers,以便random_字符串在输入改变时改变 最简单的例子是: variable "var1" { type = "string" } variable "var2" { type = "string" } resource "random_string" "rnd" { length = 16 special
keepers
非常有用,这样当相关的keepers
更改时,渲染结果就会更改。我想将我所有的输入变量定义为keepers
,以便random_字符串
在输入改变时改变
最简单的例子是:
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}")}"
}
}
在地形中有没有更灵活的方法来解决这个问题?
Thx我在另一个用例中也遇到了这个问题。但是,没有合适的解决方案,因为您无法访问所有可用的变量。 唯一的解决方案就是你在问题中已经描述过的那个 此外,您可以使用例如
模板\u文件
或区域设置
将丑陋部分移动到另一个资源中:
locals {
var-map = {
var1 = "${var.var1}"
var2 = "${var.var2}"
}
}
resource "random_id" "rnd" {
byte_length = 8
keepers = "${local.var-map}"
}