能否从Vagrant box调试Chef recipes?

11

我在使用chef-solo为vagrant box制作菜谱时遇到了困难。

由于我从未使用过Ruby,因此如果每次都要执行vagrant provision,编写菜谱的过程将非常漫长。

是否有一种方法可以调试特定的菜谱?甚至可以从虚拟机shell中进行。

我看到了 chef-shell 的存在 (http://docs.opscode.com/chef_shell.html) ,并且当我在虚拟机内部时,我可以启动它(它有效),但我不知道如何加载和测试我的菜谱。

4个回答

30

在当前的vagrant chef provisioner中启用调试输出的正确方法是使用chef.log_level,而不是手动使用chef-solo或者chef.arguments:

Vagrant.configure("2") do |config|
  # ...
  config.vm.provision :chef_solo do |chef|
    chef.log_level = :debug
    # ...
  end
end

8
除了上述的输入(非常好;-)之外,
在调试模式下运行chef-solo(启用调试输出)绝对有帮助。
例如, chef-solo -c solo.rb -j node.json -l debug

请检查文件夹 /tmp/,那里应该有编译好的 Vagrant solo.rb JSON 配置文件,您可以使用它。 - ahmy

5
如果你在Vagrant中运行chef-solo,可以像这样从Vagrantfile注入额外的自定义参数(用于日志记录/调试):

如果您在Vagrant中运行chef-solo,则可以像这样从Vagrantfile注入额外的自定义参数(用于日志记录/调试):

 Vagrant.configure("2") do |config|
    # ...
    config.vm.provision :chef_solo do |chef|
      chef.arguments = '-l debug'
      # ...
    end
 end

4
您可以在虚拟机内部的 shell 中直接使用 chef-solo,但这需要与您已经为 Vagrant 设置的文件结构不同。它看起来有点像 这里 所做的一样:
  • 您需要您的 cookbook 目录
  • 您需要一个 .json 文件,其中包含所有存储在 Vagrantfile 的 chef.json 中的数据
  • 您需要一个类似于上述帖子中的包装器/启动 Ruby 脚本。
通常尝试搜索没有 Vagrant 的解释 chef-solo 的教程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接