Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terraform 地形散列输入变量_Terraform - Fatal编程技术网

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}"
}