我有一个Terraform脚本,其中有一些从Consul填充的变量。我想在两种不同的情况下使用此脚本:
我检查了Terraform文档后发现,不能将Consul中定义的变量用作其他变量的默认值。所以我最终得到以下解决方法:
## vars.tf
## emulating undefined value using "null" string
variable "my_optional_variable" { default = "null" }
## main.tf
my_optional_variable = "${var.my_optional_variable == "null" ? data.consul_keys.my_optional_variable : var.my_optional_variable}"
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我一种更好的方法吗?如何避免“空”字符串被黑客入侵?
谢谢
另一个选择是coalesce使用空字符串,因此比您的"null"字符串稍好。
给定您的方案或具有两个变量/数据源的类似情况
variable "my_default_value" {
default = "CentOS 7"
}
variable "my_optional_variable" {
default = ""
}
Run Code Online (Sandbox Code Playgroud)
您可以采用“给定参数中的第一个非空值。必须至少提供两个参数。”
data "openstack_images_image_v2" "bastion_image" {
name = "${coalesce(var.my_optional_variable, var.my_default_value)}"
}
Run Code Online (Sandbox Code Playgroud)
如果您的可选变量需要来自外部或来自声明的资源,您可以使用count和 三元组来完成此操作。
variable "my_variable_id" {
type = string
default = ""
}
resource "cloud_resource" "my_resource" {
count = var.my_variable == "" ? 1 : 0
other_params = {...}
}
resource "dependent_cloud_resource" "my_other_resource" {
other_resource_id = var.my_variable_id == "" ? cloud_resrouce.my_resource[0].id : var.my_variable_id
}
Run Code Online (Sandbox Code Playgroud)
您可以使用覆盖文件。所以,如果你有vars.tf包含:
variable "my_optional_variable" {
default = "null"
}
Run Code Online (Sandbox Code Playgroud)
其中override.tf包含:
variable "my_optional_variable" {
default = "not null"
}
Run Code Online (Sandbox Code Playgroud)
那么${var.my_optional_variable}应该等于not null. 覆盖文件最后加载并合并到您的配置中。.tf而不是像目录中的其他文件一样附加在一起。
| 归档时间: |
|
| 查看次数: |
7478 次 |
| 最近记录: |