Terraform 0.11 的 Terraform 未引用资源
Terraform unquoted resource for Terraform 0.11
我将 terraform 0.11 用于 terraform-aws-provider 的自定义模块实现。模块内部有很多未引用的资源值分配,让我感到困惑,因为它们不起作用。
这是我正在使用的示例模块代码
resource "aws_iam_policy" "example" {
name = example_policy
policy = data.aws_iam_policy_document.example.json
}
在官方的 terraform 文档中,它是通过围绕值的插值给出的
resource "aws_iam_policy" "example" {
name = "example_policy"
policy = "${data.aws_iam_policy_document.example.json}"
}
来自:https://www.terraform.io/docs/providers/aws/d/iam_policy_document.html
当我尝试执行 terraform get
时出现以下错误消息:Unknown token: 39:24 IDENT data.aws_iam_policy_document.example.json
,当我尝试使用 terraform 0.12 时,它设法正确获取它。
这个未引用的资源值是否专用于 terraform > v0.12?
是的。 Terraform 0.11 要求所有引用看起来像字符串插值(如您的第二个示例)。 Terraform 0.12 添加了对 first-class expressions 的支持,它允许您引用字符串之外的变量(就像您的第一个示例)。
文档还包含一个更新、更简洁的语法示例:
# Old 0.11 example
tags = "${merge(map("Name", "example"), var.common_tags)}"
# Updated 0.12 example
tags = merge({ Name = "example" }, var.common_tags)
我将 terraform 0.11 用于 terraform-aws-provider 的自定义模块实现。模块内部有很多未引用的资源值分配,让我感到困惑,因为它们不起作用。
这是我正在使用的示例模块代码
resource "aws_iam_policy" "example" {
name = example_policy
policy = data.aws_iam_policy_document.example.json
}
在官方的 terraform 文档中,它是通过围绕值的插值给出的
resource "aws_iam_policy" "example" {
name = "example_policy"
policy = "${data.aws_iam_policy_document.example.json}"
}
来自:https://www.terraform.io/docs/providers/aws/d/iam_policy_document.html
当我尝试执行 terraform get
时出现以下错误消息:Unknown token: 39:24 IDENT data.aws_iam_policy_document.example.json
,当我尝试使用 terraform 0.12 时,它设法正确获取它。
这个未引用的资源值是否专用于 terraform > v0.12?
是的。 Terraform 0.11 要求所有引用看起来像字符串插值(如您的第二个示例)。 Terraform 0.12 添加了对 first-class expressions 的支持,它允许您引用字符串之外的变量(就像您的第一个示例)。
文档还包含一个更新、更简洁的语法示例:
# Old 0.11 example
tags = "${merge(map("Name", "example"), var.common_tags)}"
# Updated 0.12 example
tags = merge({ Name = "example" }, var.common_tags)