terraform - terraform中布尔值的“”等价物是什么?
问题描述
我有一个模块可以控制少量类似的资源,并且这些资源中的许多设置都是相同的;所以我创建了全局默认值,我的模块中的所有资源都可以引用。
我想在我的模块中有一组默认变量和一组可以覆盖默认值的变量,如果我的模块的调用者决定将它们传递进来。我一直在使用的字符串如下(这些都在我的模块中的相同variables.tf
文件)。
我的默认值:
variable "default_env" {default="test"}
我的占位符变量允许调用资源来设置它们:
variable "x_env" {default=""}
variable "y_env" {default=""}
variable "z_env" {default=""}
我尝试引导模块用户了解哪些变量可以被覆盖:
locals {
env = "${var.x_env != "" ? var.x_env : "${var.default_env}"}"
env = "${var.y_env != "" ? var.y_env : "${var.default_env}"}"
env = "${var.z_env != "" ? var.z_env : "${var.default_env}"}"
}
但是,我无法弄清楚如何使用布尔值正确执行此操作,因为我无法弄清楚如何创建一个空的布尔变量。我唯一的选择似乎是将默认值设置为我的覆盖变量的一部分:
variable "x_lock" {default=true}
有没有一种方法可以让我们不必维护两组默认值(1: variable "default_lock" {default=true}
, 2: variable "x_lock" {default=true}
)来声明这一点?
我试过做:
variable "x_lock" {
type = bool
default = ""
}
但我显然得到一个""
不兼容的错误bool
。
我还能怎么做呢?
解决方案
在 Terraform 中,值的缺失由关键字 表示,该关键字null
对任何类型都有效。
鉴于此,为了区分true
、false
和根本不设置,您可以定义如下变量:
variable "x_lock" {
type = bool
default = null
}
请注意,说这是“相当于布尔值的空字符串”并不是真的。空字符串不等于null
,因此如果您想明确表示字符串的缺失,通常最好也使用null
它:
variable "x_env" {
type = string
default = null
}
...这样您就可以将空字符串识别为与没有字符串不同,类似于false
根本没有布尔值。
null
在 a 的上下文中的含义与在其他地方的含义略有不同default
。设置default = null
指定输入变量是可选的,但不为其提供默认值。或者,如果您愿意,可以说它的默认值为 null
.
以这种方式使用的一个优点null
是您可以按原样将该参数传递给任何可选的资源参数,并且它将被解释为好像该参数根本没有设置,而不是好像它被设置为默认值。
还有一个“特殊功能” null
:如果您将 splat 运算符[*]
与非列表值一起使用,那么它将为非空值返回一个单元素列表,为空值返回一个空列表。如果您打算使用值的“null-ness”来决定是否创建资源或嵌套块,这可能特别有用:
variable "subscription_id" {
type = string
default = null
}
data "azurerm_subscription" "example" {
# Will be an empty set if `var.subscription_id` is null, or
# a single-item set if it is a non-null string.
for_each = toset(var.subscription_id[*])
subscription_id = each.key
}
推荐阅读
- sql - SQL:在日期范围内每月生成记录
- java - 将其存储为 URL 时,图像未从 SQLite 显示
- javascript - 克隆模型后,Backbone get set 抛出错误?
- typo3-8.x - Powermail (6.0.0) 中基于字符串的动态接收器
- jquery - jQuery 可排序 - 创建时
- java - 在 Java 中查找 4 个 CheckBox 的有序选择
- django - 如何将 Python 变量传递给 Django 中另一个应用程序中的模板
- node.js - 未找到 Google Calendar API 错误
- php - 尝试访问 Apache 上的文件时权限被拒绝
- powerbi - 在 Power Query M 函数中声明变量