内部变量
locals {
env_name = lower(terraform.workspace)
}
在tfvars内部
hc-auth-demo-port= 8003
主文件
port= ${var.hc-auth-"${local.env_name}"-port}"
出现错误:
语言中未使用此字符。
根据一个较早的答案,我已经尝试过(它可以修复该错误,但不能解决我的实际问题):
port = "${var.hc-auth}-${local.env_name}-port"
就是说没有声明hc.auth:
尚未声明名称为“ hc-auth”的输入变量。可以使用变量“ hc-auth” {}块声明该变量。
我已经在变量中声明了hc-auth-default-port,那么如何附加所有3个单词来构建该变量名并获取其值?
这是错误消息->这意味着它正在寻找变量hc.auth,但在我的情况下,我想要hc-auth-default-port插值
如何获取名称基于另一个变量的变量的值?
Terraform不支持从变量构建变量名,但是有一种解决方法:使用映射。
在terraform.tfvars中提供端口映射(注意使用snake_case而不是skewer-case,因为snake_case是Terraform代码的首选代码样式):
hc_auth_ports = {
demo = 8003
}
在main.tf或variables.tf中声明一个map(int)变量hc_auth_ports:
variable "hc_auth_ports" {
type = map(int)
}
更新main.tf来查找端口在环境hc_auth_ports:
port = var.hc_auth_ports[local.env_name]
现在,您应该获得想要的结果:
最初的问题实际上是:
为什么会出现错误“语言中未使用此字符”。尝试在字符串中追加变量时?
这是已更正错误的端口分配:
port = "${var.hc-auth}-${local.env_name}-port"
这种表达称为字符串模板。
这是原始(残破)表达式:
port = ${var.hc-auth-"${local.env_name}"-port}"
这是为什么它不起作用的原因:
"
)来开始字符串${var.hc_auth
(可能是触发错误消息的原因,因为${
在字符串模板之外是非法的)}
)以关闭var.hc_auth的变量插值"
前的双引号()不正确${local.env_name}
}
之后的右大括号()不正确-port
插值采用以下形式:
${hcl_expression}
它必须在字符串中。
$ {...}序列是一个插值,它计算标记之间给出的表达式,并在必要时将结果转换为字符串,然后将其插入最终字符串:
"Hello, ${var.name}!"
在上面的示例中,访问了已命名的对象var.name并将其值插入字符串中,从而产生类似“ Hello,Juan!”的结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句