Terraform 如何获取名称基于另一个变量的变量的值?
内部变量.tfTerraform 如何获取名称基于另一个变量的变量的值?,terraform,Terraform,内部变量.tf locals { env_name = lower(terraform.workspace) } 内部TFVAR hc-auth-demo-port= 8003 main.tf port= ${var.hc-auth-"${local.env_name}"-port}" 获取错误: 此字符不在语言中使用 根据前面的回答,我尝试过(这修复了错误,但没有解决我的实际问题): 这是说hc.auth未声明: 尚未声明名为“hc auth”的输入变量。可以使用变量“hc au
locals {
env_name = lower(terraform.workspace)
}
内部TFVAR
hc-auth-demo-port= 8003
main.tf
port= ${var.hc-auth-"${local.env_name}"-port}"
获取错误:
此字符不在语言中使用
根据前面的回答,我尝试过(这修复了错误,但没有解决我的实际问题):
这是说hc.auth未声明:
尚未声明名为“hc auth”的输入变量。可以使用变量“hc auth”{}块声明此变量
我已经在变量中声明了hc auth default port,那么如何附加所有3个单词来构建变量名并获取其值呢
这是错误消息-->这意味着它正在寻找一个变量hc.auth,但在我的例子中,我需要hc auth默认端口插值
如何获取名称基于另一个变量的变量的值?Terraform不支持从变量生成变量名称,但有一个解决方法:使用映射 在terraform.tfvars中提供端口的映射(请注意使用snake_case,而不是skewer case,因为snake_case是terraform代码的首选代码样式): 在main.tf或variables.tf中声明映射(int)变量hc\u auth\u端口:
variable "hc_auth_ports" {
type = map(int)
}
更新main.tf以在hc\u auth\u端口中查找环境端口:
port = var.hc_auth_ports[local.env_name]
现在,你应该得到你想要的结果:
port = "${var.hc-auth}-${local.env_name}-port"
这种表达式称为a
以下是原始(断开的)表达式:
port = ${var.hc-auth-"${local.env_name}"-port}"
以下是它不起作用的原因:
${var.hc\u auth
之前缺少双引号(“
)来启动字符串(可能是触发错误消息的原因,因为${
在字符串模板之外是非法的)}
)来关闭var.hc\u auth的变量插值${local.env_name}
-port
${hcl_expression}
它一定在一根绳子里面
${…}序列是一种插值,它计算标记之间给定的表达式,必要时将结果转换为字符串,然后将其插入到最终字符串中:
"Hello, ${var.name}!"
在上面的示例中,访问命名对象var.name,并将其值插入字符串,生成类似“Hello,Juan!”的结果
FromTerraform不支持从变量生成变量名,但有一个解决方法:使用地图 在terraform.tfvars中提供端口的映射(请注意使用snake_case,而不是skewer case,因为snake_case是terraform代码的首选代码样式): 在main.tf或variables.tf中声明映射(int)变量hc\u auth\u端口:
variable "hc_auth_ports" {
type = map(int)
}
更新main.tf以在hc\u auth\u端口中查找环境端口:
port = var.hc_auth_ports[local.env_name]
现在,你应该得到你想要的结果:
port = "${var.hc-auth}-${local.env_name}-port"
这种表达式称为a
以下是原始(断开的)表达式:
port = ${var.hc-auth-"${local.env_name}"-port}"
以下是它不起作用的原因:
${var.hc\u auth
之前缺少双引号(“
)来启动字符串(可能是触发错误消息的原因,因为${
在字符串模板之外是非法的)}
)来关闭var.hc\u auth的变量插值${local.env_name}
-port
${hcl_expression}
它一定在一根绳子里面
${…}序列是一种插值,它计算标记之间给定的表达式,必要时将结果转换为字符串,然后将其插入到最终字符串中:
"Hello, ${var.name}!"
在上面的示例中,访问命名对象var.name,并将其值插入字符串,生成类似“Hello,Juan!”的结果
从port=“${var.hc-auth}-${local.env_name}-port”给出此选项时,表示未声明hc.auth?请参阅hc auth default port是在变量中分配的完整字符串,因此如何将它们全部附加到3个字?这是错误消息“尚未声明名为“hc auth”的输入变量。可以使用变量“hc auth”{}block”声明此变量-->这意味着它正在寻找一个变量hc.auth,但在我的例子中,我希望hc auth default port interpolations直到没有得到!像这样尝试,但得到的是字符串而不是值>``${{var.hc-auth-${local.env_name}-path}```${var.hc-auth-default-path}}``不能以这种方式构建变量名。我已经更新了你的问题,以反映我们的故障排除,并将尝试回答它。谢谢阿兰!您将大约45行代码保存到一行!你是个英雄!port=“${var.hc-auth}-${local.env_name}-port”当给出此选项时,表示未声明hc.auth?请参阅hc auth default port是在变量中分配的完整字符串,那么如何将它们全部附加到3个字?这是错误消息“输入变量带有