【问题标题】:Conditionally provision ("vagrant provision") on "vagrant up"关于“流浪汉”的有条件条款(“流浪者条款”)
【发布时间】:2015-03-11 22:26:50
【问题描述】:

由于我在一个团队中工作,我希望尽可能顺利地与 vagrant(和 chef-solo)一起工作。
当团队中的某个人更改厨师食谱、角色或其他任何内容时,我希望所有其他团队成员通过在下一个“vagrant up”上进行 vagrant re-provision(如运行“vagrant provision”)自动“接收”更改,无需每个团队成员都知道并手动重新配置。

我想通过将 git post-receive 钩子脚本 touch 放在根项目文件夹中的文件来完成此操作。然后,当调用“vagrant up”时,它会检查这个文件是否存在。如果文件存在 - 一旦“up”完成运行,它将重新配置。

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

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

【问题讨论】:

    标签: vagrant chef-infra chef-solo


    【解决方案1】:

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

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

    此处记录了“始终运行”:https://docs.vagrantup.com/v2/provisioning/basic_usage.html

    【讨论】:

    • 正确的语法不是 :run => "always" 吗?我认为您缺少引号。
    【解决方案2】:

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

    # 在 vagrant up 上检查我们是否有最新的 repo 更改 如果 ARGV[0] == "up" && ARGV.join(" ") != "up --no-provision" gs = `git status` # 检查 repo 状态的命令 gs.scan(/.*你的分支在后面。*/m) { |mtch| # 检查过期消息 提出“您的 Vagrant 文件已过时......正在获取......” `git pull origin master` # 获取最新文件的命令。 exec "vagrant up --no-provision;vagrant provision" # 重新运行 vagrant up 和 provision } 结尾

    假设您使用 Git 来存储所有 Vagrant 文件和食谱等,这应该运行 Git 状态(它可能也需要获取)并检查消息以获取文件已过期的任何提示......如果它们已经过时了,它将提取最新文件,然后使用 --no-provision 重新运行 vagrant up,然后再运行 vagrant provision 以重新配置服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2011-12-29
      • 2015-12-21
      相关资源
      最近更新 更多