我有一个基础AMI,其中包含java和tomcat(ami-c1f3e7a6
)。我的应用程序堆栈由6个基于我的基础AMI的独立Java应用程序组成,我使用packer创建6个独立的AMI。 ansible playbook app_playbook.yml
将war文件从S3直接下载到tomcat / webapps目录中。我的包装工JSON是:
{
"variables": {
"war_file": ""
},
"builders": [{
"type": "amazon-ebs",
"region": "eu-west-1",
"source_ami": "ami-c1f3e7a6",
"instance_type": "t2.small",
"ssh_username": "ec2-user",
"ami_name": "app-{{user `war_file`}}-{{timestamp}}"
}],
"provisioners": [{
"type": "ansible",
"playbook_file": "ansible/app_playbook.yml",
"extra_arguments": "--extra-vars 'war_file={{user `war_file`}}'"
}]
}
在命令行我正在做:
packer build -var 'war_file=release123/application_1.war' tomcat.json
packer build -var 'war_file=release123/application_2.war' tomcat.json
packer build -var 'war_file=release123/application_3.war' tomcat.json
packer build -var 'war_file=release123/application_4.war' tomcat.json
packer build -var 'war_file=release123/application_5.war' tomcat.json
packer build -var 'war_file=release123/application_6.war' tomcat.json
我一直在研究打包程序执行并行构建以加快构建过程的能力,但看起来配置程序是针对每个构建器运行的,我需要将一个特定变量传递给每个构建器。
我知道我可以分叉bash命令来并行执行构建,但我觉得必须有一个" packer"这样做的方式。有什么想法吗?
答案 0 :(得分:0)
Packer不支持多次运行同一个构建器。如果您想这样做,则需要使用amazon-ebs
复制only
构建器和配置器部分的构建器部分。
最好通过使用某些脚本预处理代码段来创建最终模板。