合并 2 个以上的 tfvars 文件内容
Merge more than 2 tfvars file contents
我有一个用例,其中有 3 个 tfvars 文件
1.tfvars
api_stages=[
{
api_id= "xxxx"
stage="play"
}
]
2.tfvars
api_stages=[
{
api_id= "yyy"
stage="play"
}
]
3.tfvars
api_stages=[
{
api_id= "zzz"
stage="play"
}
]
我正在使用这个创建 1 个单一使用计划
resource "aws_api_gateway_usage_plan" "usage_plan" {
name = var.usage_plan_name
throttle_settings {
burst_limit = var.burst_limit
rate_limit = var.rate_limit
}
dynamic "api_stages" {
for_each = var.api_stages
content {
api_id = api_stages.value.api_id
stage = api_stages.value.stage
}
}
}
并且这个 tfvars 文件将由不同的用户创建。
问题:如何合并这个不同的 tfvars 文件并将所有 api_id 和阶段附加到单一使用计划?
现在我在做计划时,它只取最后一个文件的值。
.tfvars
文件处理发生在任何配置表达式被求值之前,所以没有办法 完全 你在这里问的问题:[=13 的规则=] 文件始终是特定变量“获胜”的最后定义,如您所见。
一些接近您想要的选项是:
定义三个不同的变量,命名可能是为了表明提供这些值的三个不同来源,然后将它们三个连接在一起形成 local value:
locals {
all_api_stages = concat(
var.a_api_stages,
var.b_api_stages,
var.c_api_stages,
)
}
只有当恰好有三组变量对您的系统来说是一个有意义的约束时,这种方法才是合适的。
在您的配置中声明实际的阶段对象,并使变量成为它们的键列表:
variable "api_stages" {
type = set(string)
}
locals {
api_stages = {
x = {
api_id = "xxxx"
stage = "play"
}
y = {
api_id = "yyyy"
stage = "play"
}
z = {
api_id = "zzzz"
stage = "play"
}
}
}
您可以在 运行 Terraform 时使用 -var
选择适当的设置,而不是使用 -var-file
:
terraform apply -var='api_stages=["x", "y"]'
我有一个用例,其中有 3 个 tfvars 文件
1.tfvars
api_stages=[
{
api_id= "xxxx"
stage="play"
}
]
2.tfvars
api_stages=[
{
api_id= "yyy"
stage="play"
}
]
3.tfvars
api_stages=[
{
api_id= "zzz"
stage="play"
}
]
我正在使用这个创建 1 个单一使用计划
resource "aws_api_gateway_usage_plan" "usage_plan" {
name = var.usage_plan_name
throttle_settings {
burst_limit = var.burst_limit
rate_limit = var.rate_limit
}
dynamic "api_stages" {
for_each = var.api_stages
content {
api_id = api_stages.value.api_id
stage = api_stages.value.stage
}
}
}
并且这个 tfvars 文件将由不同的用户创建。
问题:如何合并这个不同的 tfvars 文件并将所有 api_id 和阶段附加到单一使用计划?
现在我在做计划时,它只取最后一个文件的值。
.tfvars
文件处理发生在任何配置表达式被求值之前,所以没有办法 完全 你在这里问的问题:[=13 的规则=] 文件始终是特定变量“获胜”的最后定义,如您所见。
一些接近您想要的选项是:
定义三个不同的变量,命名可能是为了表明提供这些值的三个不同来源,然后将它们三个连接在一起形成 local value:
locals { all_api_stages = concat( var.a_api_stages, var.b_api_stages, var.c_api_stages, ) }
只有当恰好有三组变量对您的系统来说是一个有意义的约束时,这种方法才是合适的。
在您的配置中声明实际的阶段对象,并使变量成为它们的键列表:
variable "api_stages" { type = set(string) } locals { api_stages = { x = { api_id = "xxxx" stage = "play" } y = { api_id = "yyyy" stage = "play" } z = { api_id = "zzzz" stage = "play" } } }
您可以在 运行 Terraform 时使用
-var
选择适当的设置,而不是使用-var-file
:terraform apply -var='api_stages=["x", "y"]'