Packer的pkrvars.hcl文件中能否引用变量拼接生成其他变量值
Packer变量拼接配置解决方案
你在pkrvars.hcl中直接写插值表达式的方式确实无法生效,因为Packer的变量赋值文件(*.pkrvars.hcl)仅支持传入字面量,不支持任何变量引用、插值或者表达式运算。
如果需要实现变量拼接的需求,可以通过以下两种方式实现:
方案1:使用本地值(locals)拼接动态值(推荐)
- 首先在HCL配置文件(如
variables.pkr.hcl)中声明需要外部传入的输入变量,例如你用到的version:
variable "version" { type = string description = "依赖库版本号,可通过pkrvars.hcl、命令行参数或环境变量传入" }
- 新增
locals块,在块内完成变量插值拼接,local块原生支持HCL表达式和变量引用:
locals { lib_url = "https://lib-name-${var.version}" }
- 在后续的
source、build等业务配置块中,直接通过local.lib_url调用拼接完成的地址即可。
方案2:通过变量默认值动态生成
如果你需要把拼接结果也作为对外暴露的变量,可以直接在变量定义的默认值中做插值:
variable "lib_url" { type = string description = "动态生成的依赖库下载地址" default = "https://lib-name-${var.version}" }
只要你没有在pkrvars.hcl或者命令行中手动覆写lib_url的值,Packer就会自动使用拼接后的动态值。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

