【问题标题】:How to run a chef recipe after vagrant box provisioned配置流浪盒后如何运行厨师食谱
【发布时间】:2013-05-09 09:38:42
【问题描述】:

我正在使用 Vagrant + Berkshelf + Chef Solo 来镜像我的生产 AWS OpsWorks 盒子在我的开发机器上的行为。

我可以很好地安装 vagrant box,但现在,在配置完成后,我希望能够运行与配置期间使用的食谱不同的 Chef 食谱。我想这样做是因为我试图模仿 OpsWorks 的行为:他们让我只需按一下按钮即可运行 deploy 配方。我希望能够在我的 vagrant 框中使用 vagrant 或 chef-solo 来运行相同的食谱。

我想我可以通过在配置过程中添加一个配方来解决这个问题,该过程为我想要运行的不同按需配方构建不同的solo.rb 配置文件。这些配置文件将指向 Vagrant/Berkshelf cookbooks_path(对我来说是 /tmp/vagrant-chef-1/),然后将运行列表设置为适当的配方。然后 chef-solo 将使用这些配置文件。

我感觉以前有人以更优雅的方式解决了这个问题。有一个更好的方法吗?

如果没有,是否有人知道在 Vagrant 或配方中找到食谱路径的方法,这样我就不必将 /tmp/vagrant-chef-1/ 硬编码到我的 solo.rb 配置文件中?

【问题讨论】:

    标签: chef-infra vagrant berkshelf


    【解决方案1】:

    您可以添加multiple provisioners。因此,在您的第一个 config.vm.provision :chef_solo 块之后,只需添加另一个应用您想要在第一次部署后运行的配方。

    【讨论】:

    • 但是我可以添加多个:chef_solo 供应商,然后单独定位它们吗?我的印象是只能指定要运行的provisioner的类型,而不能指定要运行的provider的ID。
    • 嗯.. 你为什么不试试看呢?它适用于我(在当前的 vagrant 版本中)添加两个 chef.vm.provision :chef_solo 块。
    • 是的,但是你可以调用 vagrant 使得它们中只有一个运行吗? (即“Vagrant 请运行第二个:chef_solo 块”)
    • 您是否只想因为第一次配置需要一些时间而跳过它?配置是幂等的,所以如果你多次运行它不会改变任何东西。
    • 尽管如此,您可以用任意 ruby​​ 代码包围 provision 块。所以包围它,例如with if ENV['FOO'] ... end 将仅在您之前导出环境变量FOO 时执行配置代码(将某事视为非假)。
    【解决方案2】:

    实际的 chef-solo 配置和属性存储在您的 vagrant box 中的 /tmp/vagrant-chef/solo.rb/tmp/vagrant-chef/dna.json 文件中。

    执行完整的主厨配置:

    sudo chef-solo -c /tmp/vagrant-chef/solo.rb -j /tmp/vagrant-chef/dna.json

    覆盖定义的运行列表并仅运行一个配方(例如 memcached):

    sudo chef-solo -c /tmp/vagrant-chef/solo.rb -j /tmp/vagrant-chef/dna.json -o recipe[memcached]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      相关资源
      最近更新 更多