我决定把FreeBSD Vagrant盒放在一起来学习Packer。 整个设置在GitHub上 。 一切都很好,直到后期处理阶段。 实际上,这个阶段同样声称完成没有错误,但是当我尝试启动一个Vagrant框时,虚拟机没有任何本应该由Puppet完成的效果。
具体来说,如果我运行打包程序生成packer build freebsd.json克隆的回购协议,我最终得到一个ovf和vmdk文件,我可以在VirtualBox中导入,并获得一个vagrant用户和下面介绍的.ssh设置实例。
但我也得到一个packer_virtualbox-iso_virtualbox.box文件,如果我这样做
vagrant init packer_virtualbox-iso_virtualbox.box vagrant up
我得到一个实例启动,并已安装pkg和木偶,但没有vagrant用户或其主目录。 以下是packer json文件的修剪版本:
{ "builders": [SNIP], "provisioners": [{ "type": "shell", "script": "install-puppet", "execute_command": "chmod +x {{ .Path }}; env {{ .Vars }} {{ .Path }}" }, { "type": "puppet-masterless", "manifest_file": "site.pp", "execute_command": "cd {{.WorkingDir}} && env {{.FacterVars}} puppet apply --verbose --modulepath='{{.ModulePath}}' {{if ne .HieraConfigPath \"\"}}--hiera_config='{{.HieraConfigPath}}' {{end}} {{if ne .ManifestDir \"\"}}--manifestdir='{{.ManifestDir}}' {{end}} --detailed-exitcodes {{.ManifestFile}}" }], "post-processors": [{ "type": "compress", "compression_level": 9, "keep_input_artifact": true, "output": "archive.tar.bz2" }, { "type": "vagrant", "compression_level": 9, "keep_input_artifact": true }] }
就好像“stream浪者”盒子不知怎么回滚到第一个configuration器运行的地方,但第二个configuration器却没有运行。 什么可以解释呢?
我试图通过导出PACKER_LOG=debug在debugging模式下运行PACKER_LOG=debug并在输出中注意到这一点,与Puppet部分相关:
2015/12/16 20:48:12 packer-builder-virtualbox-iso: 2015/12/16 20:48:12 remote command exited with '2': cd /tmp/packer-puppet-masterless && env FACTER_packer_build_name='virtualbox-iso' FACTER_packer_builder_type='virtualbox-iso' puppet apply --verbose --modulepath='' --detailed-exitcodes /tmp/packer-puppet-masterless/manifests/site.pp 2015/12/16 20:48:12 packer-builder-virtualbox-iso: 2015/12/16 20:48:12 [INFO] RPC endpoint: Communicator ended with: 2 2015/12/16 20:48:12 [INFO] 539 bytes written for 'stdout' 2015/12/16 20:48:12 [INFO] 0 bytes written for 'stderr' 2015/12/16 20:48:12 [INFO] RPC client: Communicator ended with: 2 2015/12/16 20:48:12 [INFO] RPC endpoint: Communicator ended with: 2 2015/12/16 20:48:12 packer-provisioner-puppet-masterless: 2015/12/16 20:48:12 [INFO] 0 bytes written for 'stderr' 2015/12/16 20:48:12 packer-provisioner-puppet-masterless: 2015/12/16 20:48:12 [INFO] 539 bytes written for 'stdout' 2015/12/16 20:48:12 packer-provisioner-puppet-masterless: 2015/12/16 20:48:12 [INFO] RPC client: Communicator ended with: 2
我不知道这是否是主要的原因,但我试着用true的execute_command结尾再次运行。 它改变了日志输出,(没有更多的“通讯器结束:2”),但没有改变结果。
韦尔普,我find了答案。 它与Packer或Puppet没有多大关系。 事实certificate,stream浪者caching框在某个地方。 在我第一次安装之后,Vagrant总是使用相同的旧盒子,并忽略来自较新的打包器版本的任何更新。 为了解决这个问题(直到我弄清楚如何版本打包者build造的stream浪者箱子),我可以每次用这个箱子摧毁箱子
vagrant box remove packer_virtualbox-iso_virtualbox.box