Vagrant - 如何将Chef的命令输出打印到stdout?

时间:2013-01-06 13:17:18

标签: chef vagrant cookbook

如果我们有Chef的食谱代码,如:

if !File.exists?('/vagrant/project/target/project/WEB-INF") || node[:compile_project]
  bash "build project" do
    user "vagrant"
    cwd "/vagrant/project"
    code <<-EOH
      mvn clean
      mvn db-migration:migrate
      mvn package
    EOH
  end
end

当运行vagrant up时,我们只能看到执行“构建项目”的简要信息。

但是,我们从终端运行'mvn package'命令,我们可以看到完整的命令输出。 如何告诉Vagrant / Chef显示完整输出?

编辑:

我试过这个,但输出没有任何改变。

config.vm.provision :chef_solo do |chef|
  chef.log_level = :debug

2 个答案:

答案 0 :(得分:3)

我对流浪者一无所知,但我认为这可能与你的问题有关......如果被证明无关紧要,很高兴删除这个答案!

  

--force-formatter

     

表示将使用格式化程序输出而不是记录器输出。

所以我发现如果solo.rb定义log_location,则添加选项--force-formatter会在通过rundeck运行chef或远程执行ssh user@host "chef-solo --force-formatter"时显示输出

答案 1 :(得分:2)

仅在以下情况下将bash / script / execute资源执行输出打印到stdout:

  • 您的远程chef-solo / chef-client命令需要 TTY
  • 未在守护程序模式下运行chef-client
  • 主厨日志级别设置为:debug

请参阅code chef/Mixin/ShellOut, line 36

使用vagrant up时,似乎没有为ssh会话提供TTY的选项,因此在为chef设置:debug日志级别之后,解决方案有点走动:

  1. 运行$ vagrant up
  2. 运行$ vagrant ssh -- -t - 这意味着它将-t传递给ssh命令,以便ssh会话有一个tty。
  3. 运行chef-solo以手动运行chef,然后您将在stdout上获得输出。