如何通过Packer创建Amazon AMI时动态替换YAML文件变量?
解决Packer动态替换YAML文件中MCT值的简洁方法
不用搜索替换,最直接的方式是利用Packer的模板渲染能力,直接生成包含变量值的YAML文件再上传,步骤如下:
1. 将原YAML文件改为模板文件
把你的flights.yaml重命名为flights.yaml.tpl,并将需要替换的MCT值替换为Packer变量占位符:
connecting: false MCT: {{ .seed_data }} terminal-1: - jetblue - american - united terminal-2: - airfrance - lufthansa
2. 修改Packer配置中的Provisioner
替换原有的file类型provisioner,使用content字段结合templatefile函数,直接渲染模板并生成目标文件:
"provisioners": [ { "type": "file", "content": "{{ templatefile(\"flights.yaml.tpl\", {\"seed_data\": user.seed_data}) }}", "destination": "/tmp/flights.yaml" } ]
3. 保持原构建命令不变
你之前的构建命令无需修改,依然通过-var传入seed_data变量即可:
packer build \ -var "ami_name=flights-november" \ -var "source_ami=ami-XXX" \ -var "seed_data={thisiswhatIwantinthefile}" \ ./ami.json
补充说明
- 这种方式直接在Packer构建流程中完成模板渲染,无需额外的搜索替换脚本,流程更简洁
- 确保模板文件
flights.yaml.tpl和Packer配置文件ami.json在同一目录下,或者在templatefile函数中指定正确的相对路径 - 如果使用Packer HCL2配置,语法会更直观,模板引用方式类似,只需调整配置格式即可
内容的提问来源于stack exchange,提问作者user7692855
相关产品推荐
相关产品推荐

