Terraform - 为变量指定多个可能的值
Terraform - Specifying multiple possible values for Variables
CloudFormation 为参数提供了 AllowedValues,它告诉参数的可能值可以来自这个列表。如何使用 Terraform 变量实现此目的?列表的变量类型不提供此功能。因此,如果我希望我的变量仅具有两个可能值中的值,我该如何使用 Terraform 实现这一点。我要复制的 CloudFormation 脚本是:
"ParameterName": {
"Description": "desc",
"Type": "String",
"Default": true,
"AllowedValues": [
"true",
"false"
]
}
我不知道官方方法,但是描述了一个有趣的技术in a Terraform issue:
variable "values_list" {
description = "acceptable values"
type = "list"
default = ["true", "false"]
}
variable "somevar" {
description = "must be true or false"
}
resource "null_resource" "is_variable_value_valid" {
count = "${contains(var.values_list, var.somevar) == true ? 0 : 1}"
"ERROR: The somevar value can only be: true or false" = true
}
更新:
Terraform 现在在 Terraform 0.13 中提供 custom validation rules:
variable "somevar" {
type = string
description = "must be true or false"
validation {
condition = can(regex("^(true|false)$", var.somevar))
error_message = "Must be true or false."
}
}
Custom validation rules 绝对是正确的选择。如果您想保持简单并根据有效值列表检查提供的值,您可以在 variables.tf
配置中使用以下内容:
variable "environment" {
type = string
description = "Deployment environment"
validation {
condition = contains(["dev", "prod"], var.environment)
error_message = "Valid value is one of the following: dev, prod."
}
}
CloudFormation 为参数提供了 AllowedValues,它告诉参数的可能值可以来自这个列表。如何使用 Terraform 变量实现此目的?列表的变量类型不提供此功能。因此,如果我希望我的变量仅具有两个可能值中的值,我该如何使用 Terraform 实现这一点。我要复制的 CloudFormation 脚本是:
"ParameterName": {
"Description": "desc",
"Type": "String",
"Default": true,
"AllowedValues": [
"true",
"false"
]
}
我不知道官方方法,但是描述了一个有趣的技术in a Terraform issue:
variable "values_list" {
description = "acceptable values"
type = "list"
default = ["true", "false"]
}
variable "somevar" {
description = "must be true or false"
}
resource "null_resource" "is_variable_value_valid" {
count = "${contains(var.values_list, var.somevar) == true ? 0 : 1}"
"ERROR: The somevar value can only be: true or false" = true
}
更新:
Terraform 现在在 Terraform 0.13 中提供 custom validation rules:
variable "somevar" {
type = string
description = "must be true or false"
validation {
condition = can(regex("^(true|false)$", var.somevar))
error_message = "Must be true or false."
}
}
Custom validation rules 绝对是正确的选择。如果您想保持简单并根据有效值列表检查提供的值,您可以在 variables.tf
配置中使用以下内容:
variable "environment" {
type = string
description = "Deployment environment"
validation {
condition = contains(["dev", "prod"], var.environment)
error_message = "Valid value is one of the following: dev, prod."
}
}