【问题标题】:Vagrant - how to print Chef's command output to stdout?Vagrant - 如何将 Chef 的命令输出打印到标准输出?
【发布时间】:2013-11-29 11:49:51
【问题描述】:

如果我们在 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

【问题讨论】:

  • 好吧,我认为答案是否定的。如果脚本有效,则输出将保持隐藏状态。但是,一种(非常)hacky 的方法可能是添加属性returns 2ignore_failure,每次都会失败。你会在失败时获得完整的输出。但是,我只会使用这种技术进行调试。并向 opscode 提交功能请求。
  • 您是否尝试过使用 bash 资源的“标志”选项来传递 '-x' ?

标签: chef-infra vagrant cookbook


【解决方案1】:

我对 vagrant 一无所知,但我认为这可能与您的问题有关...如果证明不相关,很高兴删除此答案!

--force-formatter

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

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

【讨论】:

  • 感谢您的提示,我设法让 vagrant 在 Vagrantfile 的主厨部分输出完整的主厨运行输出,并使用 chef.arguments = '--force-formatter'
【解决方案2】:

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

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

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

当使用vagrant up 时,似乎没有为 ssh 会话提供 TTY 的选项,因此解决方案是在您为厨师设置 :debug 日志级别后四处走动:

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

【讨论】:

    猜你喜欢
    • 2020-06-25
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多