内部变量.tf
locals {
env_name = lower(terraform.workspace)
}
Run Code Online (Sandbox Code Playgroud)
tfvars 内部
hc-auth-demo-port= 8003
Run Code Online (Sandbox Code Playgroud)
主.tf
port= ${var.hc-auth-"${local.env_name}"-port}"
Run Code Online (Sandbox Code Playgroud)
出现错误:
该语言中不使用该字符。
根据之前的答案,我尝试过(它修复了该错误,但没有解决我的实际问题):
port = "${var.hc-auth}-${local.env_name}-port"
Run Code Online (Sandbox Code Playgroud)
据说 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
}
Run Code Online (Sandbox Code Playgroud)
在main.tf或variables.tf中声明一个map(int)变量hc_auth_ports :
variable "hc_auth_ports" {
type = map(int)
}
Run Code Online (Sandbox Code Playgroud)
更新 main.tf 以在hc_auth_ports中查找环境的端口:
port = var.hc_auth_ports[local.env_name]
Run Code Online (Sandbox Code Playgroud)
现在,您应该得到您想要的结果:
原来的问题实际上是:
为什么我会收到错误“该语言中未使用该字符。” 当尝试在字符串中附加变量时?
以下是已更正错误的端口分配:
port = "${var.hc-auth}-${local.env_name}-port"
Run Code Online (Sandbox Code Playgroud)
这种表达式称为字符串模板。
这是原始(损坏的)表达式:
port = ${var.hc-auth-"${local.env_name}"-port}"
Run Code Online (Sandbox Code Playgroud)
这就是它不起作用的原因:
") 来启动字符串${var.hc_auth(可能是触发错误消息的原因,因为${在字符串模板之外是非法的)}的变量插值")不正确${local.env_name}})不正确-port插值采用以下形式:
${hcl_expression}
Run Code Online (Sandbox Code Playgroud)
它必须在字符串内。
${ ... } 序列是一个插值,它计算标记之间给定的表达式,如果需要,将结果转换为字符串,然后将其插入最终字符串:
Run Code Online (Sandbox Code Playgroud)"Hello, ${var.name}!"在上面的示例中,访问命名对象 var.name 并将其值插入到字符串中,生成类似“Hello, Juan!”的结果。
| 归档时间: |
|
| 查看次数: |
4286 次 |
| 最近记录: |