有条件地提供("流浪儿条款")" vagrant up"

时间:2014-06-17 09:24:48

标签: vagrant chef chef-solo

由于我在团队中工作,我希望尽可能顺利地使用vagrant(和chef-solo)。 当团队中的某个人改变厨师烹饪书,角色或其他任何东西时,我希望所有其他团队成员通过在下一个“流浪汉”上进行流浪汉重新供应(如运行“流浪者条款”)来自动“接收”变更,没有每个团队成员都需要了解它并手动重新提供。

我想通过在根项目文件夹中使用git post-receive钩子脚本touch来完成此任务。然后,当调用“vagrant up”时,它将检查该文件是否存在。如果文件存在 - 一旦“up”运行完毕,它将重新提供。

这样做有更好的选择吗?怎么样?
如果没有,我该怎么做?

我知道这个问题(Force Vagrant to re-provision or download a new box on next vagrant up)存在,但这不是我的情况(我特别感兴趣的是配置,而不是虚拟机本身 - 盒子等等。)。

2 个答案:

答案 0 :(得分:2)

您可以在Vagrantfile的顶部添加以下内容:

# On vagrant up check that we have the latest repo changes
if ARGV[0] == "up" && ARGV.join(" ") != "up --no-provision"
  gs = `git status` # command to check repo status
  gs.scan(/.*Your branch is behind.*/m) { |mtch| # check for out of date message
    puts "Your Vagrant files are out of date... fetching..."
    `git pull origin master` # command to fetch newest files.
    exec "vagrant up --no-provision;vagrant provision" # Re-run vagrant up and provision
  }
end

假设您使用Git存储所有Vagrant文​​件和cookbook等,这应该运行Git状态(它可能还需要提取)并检查消息是否有任何提示文件已过期...如果它们已过时,它将提取最新文件,然后在运行vagrant up之前使用--no-provision重新运行vagrant provision以重新配置服务器。

答案 1 :(得分:2)

Vagrant支持添加vagrant up每个:run => "always"上运行的配置程序,方法是将{{1}}添加到配置行。

您可以添加一个供应商,检查是否需要进行任何更改,然后运行它们。 (或者,如果更改是可重复的,则每次都运行它们。)

"始终运行"记录在此处:https://docs.vagrantup.com/v2/provisioning/basic_usage.html