我使用 Vagrant 创建了三台虚拟机。这台虚拟机的机器名为 ubuntu/trusty64。我已在同一个 Vagrantfile 中将所有虚拟机创建为单个项目。为了配置它,我使用了 Puppet。目前,这三台虚拟机使用不同的清单。当清单发生变化时,我想自动执行此过程。因此,如果我将一个包添加到一个清单中,我希望无需我的干预,vagrant 即可检测到并根据清单文件中的新更改重新配置虚拟机。
我对 Vagrant 还很陌生,对 Puppet 更是陌生,因此我的问题是:
那可能吗?
这是我正在开发的项目:https://github.com/jngd/puppet-tfg
答案1
Vagrant 本身无法做到这一点。你需要的是类似警卫观察清单并在清单发生变化时执行“某些操作”。我不建议vagrant destroy; vagrant up
在每次发生更改时完全重新配置 VM (),因为那样会很疯狂(运行时间会比您进行更多编辑的时间长得多),但运行vagrant ssh sudo puppet apply /etc/puppet
肯定是可行的。
答案2
我不是 Puppet 用户,但 CFEngine 老手。我确实看到 Puppet 有一个代理 - puppet-agent,它可以定期从 Puppet master 提取更新的清单,就像 cf-agent/cf-execd 对 CFE 中的 promise 包所做的那样。
我想说的是,如果您将 puppet-agent 配置为每 10 分钟左右运行一次,它应该会下载最新的更改并运行,从而更新您的虚拟机。我不知道 Puppet 如何处理软件包(RPM?deb?)管理,但我确信,如果您的清单要求安装软件包列表,则将一个软件包添加到列表中应该会调用软件包安装,以及所有其他配置指令 - 复制文件、管理服务等。
我猜你可以将 puppet-agent 作为守护进程或 cron 作业来运行。
问题是 - 你必须能够从 Vagrant 系统访问你的 Puppet master,所以除非你连接到你的 VPN/网络并能访问 master,否则它们不会更新。