Terraform 命令行参数不适用于条件表达式

Terraform command line arguments doesn't work with conditional expression

我正在尝试根据使用条件表达式的变量将资源块部署到 dev 或 prod 中,为此我正在尝试使用命令行参数。 这适用于 terraform.tfvars 但不适用于 CMD 参数,这意味着当我尝试 运行 terraform plan 时它没有任何其他更改。

理想情况下,它应该添加 1 个实例。

这是我的资源块

main.tf 文件

resource "aws_instance" "dev" {

  ami           = "ami-0ca285d4c2cda3300"
  instance_type = var.instanceType
  count         = var.istest == true ? 1 : 0
}

resource "aws_instance" "prod" {

  ami           = "ami-0ca285d4c2cda3300"
  instance_type = "t2.micro"
  count         = var.istest == false ? 1 : 0
}

variables.tf

variable "istest" {
  default = true
}

terraform .tf 变量为空,命令 运行 terraform

terraform plan -var="istest=false"

我建议使用以下语法而不是检查文字 truefalse

resource "aws_instance" "dev" {

  ami           = "ami-0ca285d4c2cda3300"
  instance_type = var.instanceType
  count         = var.istest ? 1 : 0
}

resource "aws_instance" "prod" {

  ami           = "ami-0ca285d4c2cda3300"
  instance_type = "t2.micro"
  count         = var.istest ? 0 : 1
}

这样,如果 istest var 是 true,它将部署 dev 实例。

如果它是 false 它将创建 prod 实例

尝试

terraform plan -var="istest=false"

更新

核心问题似乎是 terraform 执行类型转换

引用自:https://www.terraform.io/language/expressions/type-constraints#conversion-of-primitive-types

The Terraform language will automatically convert number and bool values to string values when needed, and vice-versa as long as the string contains a valid representation of a number or boolean value.

true converts to "true", and vice-versa false converts to "false"

因此,您应该显式设置变量的 type

在您的 variables.tf 文件中

variable "istest" {
  default = true
  type    = bool
}

然后它应该按预期工作

terraform plan -var="istest=false"