web-dev-qa-db-ja.com

Opscode Chef bashコマンドの出力をコンソールに表示するにはどうすればよいですか?

Vagrantを使用して標準の「precise32」ボックスを生成し、それをChefでプロビジョニングして、Windowsマシンで作業するときにLinuxでNode.jsコードをテストできるようにします。これは正常に動作します。

また、このbashコマンドを使用して、npmモジュールを自動インストールします。

bash "install npm modules" do
  code <<-EOH
    su -l vagrant -c "cd /vagrant && npm install"
  EOH
end

これも正常に動作しますが、正常に完了した場合にコンソール出力が表示されることはありません。しかし、何が起こっているのかを視覚的に監視できるように、それを見てみたいと思います。これはnpmに固有のものではありません。

具体的な答えがないこの同様の質問が表示されます: Vagrant-どのようにChefのコマンド出力をstdoutに出力するのですか?

フラグを指定してみましたが、私はひどいlinux/Ruby n00bで、エラーが発生するか、まったく出力されないので、ソリューションの例を使用してスニペットを編集してください。

17
Bartvds

Chefを実行する場合、chef-soloを使用していると想定すると、-l debugを使用して、より多くのデバッグ情報をstdoutに出力できます。

例:chef-solo -c solo.rb -j node.json -l debug

たとえば、次のような簡単なクックブック:

$ tree 
.
├── cookbooks
│   └── main
│       └── recipes
│           └── default.rb
├── node.json
└── solo.rb

3 directories, 3 files

default.rb

bash "echo something" do
   code <<-EOF
     echo 'I am a chef!'
   EOF
end

次のような出力が表示されます。

Compiling Cookbooks...
[2013-07-24T15:49:26+10:00] DEBUG: Cookbooks to compile: [:main]
[2013-07-24T15:49:26+10:00] DEBUG: Loading Recipe main via include_recipe
[2013-07-24T15:49:26+10:00] DEBUG: Found recipe default in cookbook main
[2013-07-24T15:49:26+10:00] DEBUG: Loading from cookbook_path: /data/DevOps/chef/cookbooks
Converging 1 resources
[2013-07-24T15:49:26+10:00] DEBUG: Converging node optiplex790
Recipe: main::default
  * bash[echo something] action run[2013-07-24T15:49:26+10:00] INFO: Processing bash[echo something] action run (main::default line 4)
[2013-07-24T15:49:26+10:00] DEBUG: Platform ubuntu version 13.04 found
I am a chef!
[2013-07-24T15:49:26+10:00] INFO: bash[echo something] ran successfully

    - execute "bash"  "/tmp/chef-script20130724-17175-tgkhkz"

[2013-07-24T15:49:26+10:00] INFO: Chef Run complete in 0.041678909 seconds
[2013-07-24T15:49:26+10:00] INFO: Running report handlers
[2013-07-24T15:49:26+10:00] INFO: Report handlers complete
Chef Client finished, 1 resources updated
[2013-07-24T15:49:26+10:00] DEBUG: Forked child successfully reaped (pid: 17175)
[2013-07-24T15:49:26+10:00] DEBUG: Exiting

欲しい情報が入っていると思います。たとえば、シェルスクリプト/コマンドの出力と終了ステータス。

ところで、制限があるようです(パスワードを要求しますか?)、suを使用できなくなります

[2013-07-24T15:46:10+10:00] INFO: Running queued delayed notifications before re-raising exception
[2013-07-24T15:46:10+10:00] DEBUG: Re-raising exception: Mixlib::ShellOut::ShellCommandFailed - bash[echo something] (main::default line 4) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash"  "/tmp/chef-script20130724-16938-1jhil9v" ----
STDOUT: 
STDERR: su: must be run from a terminal
---- End output of "bash"  "/tmp/chef-script20130724-16938-1jhil9v" ----
Ran "bash"  "/tmp/chef-script20130724-16938-1jhil9v" returned 1
9
Terry Wang

可能な場合はロギングを使用しようとしますが、一部のシナリオでは出力を確認することが重要であることがわかりました。これが私のやり方の短いバージョンです。実行リソースをbashリソースに置き換えることも問題なく機能します。標準エラーと標準出力の両方がファイルに入ります。

results = "/tmp/output.txt"
file results do
    action :delete
end

cmd = "ls  /"
bash cmd do
    code <<-EOH
    #{cmd} &> #{results}
    EOH
end

Ruby_block "Results" do
    only_if { ::File.exists?(results) }
    block do
        print "\n"
        File.open(results).each do |line|
            print line
        end
    end
end
15
Tom Weiss

使用 live_streamexecuteリソースの属性

execute 'foo' do
  command 'cat /etc/hosts'
  live_stream true
  action :run
end

スクリプト出力はコンソールに出力されます

   Starting Chef Client, version 12.18.31
   resolving cookbooks for run list: ["apt::default", "foobar::default"]
   Synchronizing Cookbooks:
   Converging 2 resources
   Recipe: foobar::default
     * execute[foo] action run
       [execute] 127.0.0.1  default-ubuntu-1604 default-ubuntu-1604
          127.0.0.1 localhost
          127.0.1.1 vagrant.vm  vagrant
          ::1     localhost ip6-localhost ip6-loopback
          ff02::1 ip6-allnodes
          ff02::2 ip6-allrouters
       - execute cat /etc/hosts

https://docs.chef.io/resource_execute.html

11
spuder

私は以下を使用しました:

bash "install npm modules" do
  code <<-EOH
    su -l vagrant -c "cd /vagrant && npm install"
  EOH
  flags "-x"
end

flags プロパティは、コマンドをbash -x script.shのように実行します

2
Shoan

関連する種類... _log_location_(_-L_)をファイルに設定すると、chefログ(Chef::Log.info()または単にlog)が標準出力に送られなくなります。

これをオーバーライドして、完全なログ情報をstdoutに出力できます。

_chef-client -L /dev/stdout
_
0
KCD