兼容Terraform 0.12的Terraform 0.11模块的块用法

时间:2019-07-15 16:54:10

标签: terraform

我将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吗?

2 个答案:

答案 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