Terraform - 为变量指定多个可能的值

Posted

技术标签:

【中文标题】Terraform - 为变量指定多个可能的值【英文标题】:Terraform - Specifying multiple possible values for Variables 【发布时间】:2019-06-12 18:01:20 【问题描述】:

CloudFormation 为参数提供 AllowedValues,它告诉参数的可能值可以来自此列表。如何使用 Terraform 变量实现这一点? list 的变量类型不提供此功能。因此,如果我希望我的变量仅具有两个可能值中的值,我如何使用 Terraform 实现这一点。我要复制的 CloudFormation 脚本是:

"ParameterName": 
        "Description": "desc",
        "Type": "String",
        "Default": true,
        "AllowedValues": [
            "true",
            "false"
        ]
   

【问题讨论】:

【参考方案1】:

我不知道官方的方式,但是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."
  

【讨论】:

那么如果变量不在列表中,Terraform 会报错并停止进一步处理?如果变量在列表中,count 的值是否为零?当count为1时会抛出错误?

以上是关于Terraform - 为变量指定多个可能的值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Terraform 为 Elastic Beanstalk 环境定义条件(每个环境)设置?

如何将 Terraform 输出变量保存到 Github Action 的环境变量中

Terraform 在“计数”中设置多个变量

在创建资源之前,我们可以在 Terraform 中匹配多个条件吗?

Interlocked介绍

Interlocked介绍