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"
我建议使用以下语法而不是检查文字 true
或 false
值
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"
我正在尝试根据使用条件表达式的变量将资源块部署到 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"
我建议使用以下语法而不是检查文字 true
或 false
值
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"