到现在我还记得首次尝试使用vagrant和puppet这两个工具来准备本地开发环境时候的场景。找出适当的方式来捆绑puppet模块与项目后一切都是很容易做到。基本上它可以通过三步阶段来实现。
1.运行"puppet module install "并将它们添加到 git repo (不是最棒的主意但相对简单)。
2.在项目中把puppet模块作为 git 的子模块添加好。这原来是更加麻烦,添加/删除/更新模块成为了真正的痛苦。
3.作为它们的依赖项 使用 puppet-librarian来 管理 puppet 模块。
第三个选项应该是最好的方法啦...我们可以现在只需简单地在“Puppetfile”里面就可以添加、 删除或者升级“puppet”的模块版本,运行"librarian-puppet install"功能就可以安装好模块。但有一点要警告说明的是用户只在他们自己的宿主机器上安装“rubygems”打包系统会带来其他的麻烦。既然这样当这种情况发生且必须要马上被处理的时候用户为什么不能只在vagrant盒子里面安装那些模块?
Vagrant.configure("2") do |config|
config.vm.synced_folder ".", "/home/vagrant/my-project", :nfs => true
config.vm.provision "shell", inline: "gem install librarian-puppet"
config.vm.provision "shell", inline: "cp /home/vagrant/my-project/Puppetfile /tmp"
config.vm.provision "shell", inline: "cd /tmp && librarian-puppet install --verbose"
config.vm.provision "puppet" do |puppet|
puppet.temp_dir = "/tmp"
puppet.options = ['--modulepath=/tmp/modules']
end
end
向虚拟机中的项目根路径里面增加“Puppetfile”文件和安装当运行“puppet”应用时指向模块目录的模块时,这种方法都是有效的。而且无论开发者熟悉“rubygems”打包系统与否和在跨多种应用环境时都能保持同样的安装效果,这种方法也同样作用很大。
Puppet 学习系列:
相关阅读:
有关Puppet agent端三种备份恢复方案探讨研究
选择更安全的方式注册你的Puppet节点
通过配置SSH深刻理解Puppet的语法及工作机制
Puppet利用Nginx多端口实现负载均衡
CentOS(5和6)下Puppet的C/S模式实例