我正在处理位于here的模板。在条款部分我有:
"provisioners": [
{
"type": "shell-local",
"command": "wget http://distfiles.gentoo.org/releases/amd64/autobuilds/{{user `stage3-date`}}/stage3-amd64-{{user `stage3-date`}}.tar.bz2"
},
{
"type": "file",
"source": "stage3-amd64-{{user `stage3-date`}}.tar.bz2",
"destination": "/root"
},
{
"destination": "/root",
"source": "scripts/",
"type": "file"
},
{
"environment_vars": [
"STAGE3={{user `stage3-date`}}"
],
"type": "shell",
"inline": ["cd /root", "chmod u+x provision.sh", "./provision.sh"]
}
]
我的目标是在需要时下载stage3,执行md5检查,然后将其移动到vm上的/ root,但这不会发生。 (对于那些不熟悉gentoo的人来说,这是需要解压缩到chrooted hd的实际安装文件)。这是输出。
john@g1 gentoo-packer $ packer build -debug gentoo64.json
Debug mode enabled. Builds will not be parallelized.
virtualbox-iso output will be in this color.
1 error(s) occurred:
* Bad source 'stage3-amd64-20150924.tar.bz2': stat stage3-amd64-20150924.tar.bz2: no such file or directory
看起来打包器正试图运行"文件"供应商之前" shell-local"。由于打包器不按供应商数组的顺序排列,有没有办法在配置程序运行时强制执行订单?
我非常确定文件配置程序中的line 58导致了我的所有问题。在打包程序启动时检查文件,而不是在配置程序运行时检查。由于文件尚未下载,但它失败了。
答案 0 :(得分:1)
这不是一个答案,更具潜力的指导
来自doc它说
对于每个定义,Packer将为每个定义运行配置程序 已配置的版本。供应商将在订单中运行 它们在模板中定义。
你确定该文件可用吗?你可以单独尝试shell-local provisioner并确保文件下载
您还可以尝试在wget上使用-P
选项强制文件的目标,以确保它保存在有效目录中,然后在那里重新阅读。