我将terraform模块转换为0.12兼容,然后再转换为0.12。除了可以通过变量设置的某些块之外,我能够修复所有转换。该模块将保留0.11一段时间,但是该模块的用户已经可以升级到0.12。
请参阅此处我的Terraform 0.11片段。
data "aws_ami" "instance" {
most_recent = true
filter = "${var.runner_ami_filter}"
owners = "${var.runner_ami_owners}"
}
variable "ami_filter" {
type = "list"
default = [{
name = "name"
values = ["amzn-ami-hvm-2018.03*-x86_64-ebs"]
}]
}
问题是我无法转换变量ami_filter
,因此它将被0.12接受。我抱怨过滤器的块定义。
此处不应使用名为“ filter”的参数。您是要定义一个 类型为“过滤器”的块?
有人建议如何将这部分代码转换为兼容0.12吗?
答案 0 :(得分:0)
filter
参数必须采用块类型,而不是字符串类型值。由于您的owners
参数会遇到非常相似的问题,因此我们也需要将其更新为filter
。因此,您可以通过以下方式更新代码以使其兼容:
data "aws_ami" "instance" {
most_recent = true
filter {
name = "name"
values = "${var.runner_ami_filter}"
}
filter {
name = "owners"
values = "${var.runner_ami_owners}"
}
}
您可以检查aws_ami data documentation来查看用法说明和有用的示例,以进一步阐明。
答案 1 :(得分:0)
我正在使用的构造似乎是未记录的功能,不再受支持。
本期的更多详细信息:https://github.com/hashicorp/terraform/issues/20505#issuecomment-496601736