我想在"供应商"阶段的包装模板中使用条件语句.
"provisioners": [
{
"execute_command": "echo 'vagrant'|sudo -S sh '{{.Path}}'",
"override": {
"virtualbox-iso": {
"scripts": [
"scripts/base.sh",
"scripts/puppet.sh",
]
}
},
"type": "shell",
}
]
Run Code Online (Sandbox Code Playgroud)
例如,如果用户在"packer build"命令行中以某种方式指定"puppet"参数,那么将执行"scripts/puppet.sh",否则将跳过.
我怎样才能做到这一点?
小智 8
我不认为使用打包器本机模板格式化是可能的,因为打包器使用JSON格式进行配置,只要我知道不支持条件语句之类的流控制机制.但是应该可以使用用户变量和shell配置程序归档类似的行为.
最简单的方法应该是从build命令设置用户变量,并将此变量从packer传递给shell provisioner脚本,该脚本检测用户变量的值并调用相应的配置脚本,例如puppet,salt,...
我没有测试这种方法,但它应该给你一个暗示我的意思,也许你可以想出一个更好的解决方案.;-)
1.定义指示使用的配置器的变量:
有多种方法可以定义用户变量,
在box-template文件中定义用户变量
包装盒模板文件:template.json
"variables": [
"using_provision_system": "puppet"
]
"provisioners": [
{...}
Run Code Online (Sandbox Code Playgroud)定义变量定义文件,并使用-var-file在build命令中指定它的路径
变量file:variables.json 如果要在单独的文件中定义变量,那么它是一个很好的选择.
{
"using_provision_system": "puppet"
}
Run Code Online (Sandbox Code Playgroud)2.调用调用供应脚本的shell脚本:
现在修改execute_command,方法是使用定义的变量作为参数调用"master"脚本.
"provisioners": [
{
"execute_command": "echo 'vagrant'|sudo -S sh '{{.Path}}' '{{user `using_provision_system`}}'",
"override": {
"virtualbox-iso": {
"scripts": [
call_provisioner_script.sh
]
}
},
"type": "shell",
}
]
Run Code Online (Sandbox Code Playgroud)
注意,我们只需要指定一个脚本.这个'master'脚本将传递的变量作为参数,并在切换条件下将该值与某些预定义的配置器名称进行比较.(简短:它选择执行哪些配置脚本.)
主配置脚本:call_provisioner_script.sh
case $1 in
puppet*) sh puppet_provisioner.sh
*) sh shell_provisioner.sh
Run Code Online (Sandbox Code Playgroud)
照顾自己!
由于此脚本将在您的框内运行,因此您可能需要在执行此命令之前将脚本上载到框中.
3.最后一步是建立你的盒子:)
调用打包程序构建命令:
#define variable in build command (first option from above)
$ packer build -var 'using_provision_system=puppet' template.json
#define variables in variable file and set path in build command
$ packer build -var-file=variables.json template.json
Run Code Online (Sandbox Code Playgroud)
可能有一种方法可以在您的框中设置环境变量,并使用这种类型的变量来指定配置器,而不是使用用户变量.
另一种方法是定义2个类型相同但名称不同的不同构建器。然后,您可以使用only字段从特定构建中排除配置步骤:
{
"source": "foo.txt",
"destination": "/opt/foo.txt",
"type": "file",
"only": ["docker-local"]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6423 次 |
| 最近记录: |