Terraform哈希输入变量

时间:2018-01-24 18:34:20

标签: terraform

在使用随机提供程序的资源时,配置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

1 个答案:

答案 0 :(得分:1)

我在另一个用例中也遇到过这个问题。但是,由于您无法访问所有可用变量,因此没有适当的解决方案。 唯一的解决方案是您已在问题中描述的解决方案。

此外,您可以使用例如template_filelocale将丑陋的部分移动到另一个资源中:

locals {
  var-map = {
    var1 = "${var.var1}"
    var2 = "${var.var2}"
  }
}

resource "random_id" "rnd" {
  byte_length = 8

  keepers = "${local.var-map}"
}