在变量中定义键的局部变量映射的Terraform插值
目标:在变量中定义预置大小标签,资源配置使用本地映射中的预设值。
var "define_size" {
description = "Select either small, medium, large"
default = "large"
}
locals {
small = {
volume_gb = 1
volume_count = 1
}
medium = {
volume_gb = 20
volume_count = 5
}
large = {
volume_gb = 500
volume_count = 10
}
}
resource "aws_ebs_volume" "example" {
availability_zone = var.availability_zone
size = ??????
}
尝试:
size = local.$var.define_size.volume_gb
.明显的错误语法导致“错误:无效字符”。和引用$ character.size = local.${var.define_size}.volume_gb
.的“错误:无效属性名”明显的错误语法导致“错误:无效字符”。和引用$ character.size = "${local[var.define_size].volume_gb}"
.的“错误:无效属性名”“错误:无效引用。对资源类型的引用之后必须至少有一个属性访问,指定正确呈现的资源name."size = tostring("local.${var.define_size}.volume_gb")
,但作为字符串而不是资源引用"local.large.volume_gb"
format("%#v",tostring("local.${var.define_size}.volume_gb"))
,这部分地呈现为带有转义字符的字符串,而不是资源"\"local.large.volume_gb\""
。
发布于 2021-03-25 15:55:46
如果您想要基于密钥的访问,您应该使locals
定义与键一起工作,例如map
。
locals {
sizes = {
small = {
volume_gb = 1
volume_count = 1
}
medium = {
volume_gb = 20
volume_count = 5
}
large = {
volume_gb = 500
volume_count = 10
}
}
}
然后使用local.sizes[var.define_size].volume_gb
访问
发布于 2021-09-27 02:48:15
谢谢@ also 2302给我答案,我也在看这个。我不能评论,所以我创造了另一个答案。对于我的情况,我从json文件中读取了一个列表,然后依赖于env,它将得到正确的值。
power.json
[
{
"name": "a",
"power": {
"dev" : 1,
"sit" : 2,
"uat" : 3,
"prod" : 4
}
}
]
在tf文件中,我将如下所示
locals {
power = jsondecode(file("power.json"))
}
resource "aws_example" "power" {
count = length(local.power.*.name)
power = local.power[count.index].power[var.env]
}
根据输入var.env,"power“将具有1、2、3或4的值。
https://stackoverflow.com/questions/66803123
复制相似问题