2013-07-23 5 views
12

Uso Vagrant per generare una casella standard "precise32" e fornirla con Chef in modo da poter testare il mio codice Node.js su Linux quando lavoro su una macchina Windows. Funziona beneCome posso visualizzare l'output di un comando bash Opscode Chef nella mia console?

devo anche questo comando bash così si auto installa i miei moduli NPM:

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

Questo funziona anche bene, tranne che non ho mai visto l'uscita della console, se completato con successo. Ma mi piacerebbe vederlo in modo che possiamo monitorare visivamente cosa sta succedendo. Questo non è specifico per npm.

vedo questa domanda simile senza risposte concrete: Vagrant - how to print Chef's command output to stdout?

ho provato a specificare le bandiere, ma io sono un terribile linux/ruby ​​n00b e creare sia errori o nessuna uscita a tutti, quindi si prega di modificare il mio frammento con una esempio della tua soluzione.

risposta

9

Quando si esegue lo chef, supponiamo di utilizzare chef-solo, è possibile utilizzare -l debug per generare più informazioni di debug nello stdout.

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

Per esempio, un semplice libro di cucina, come di seguito:

$ 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 

vedrete il seguente output come di seguito:

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 

Penso che contenga le informazioni che desideri. Ad esempio, output e lo stato di uscita dello script/comando della shell.

BTW: Sembra che ci sia una limitazione (la richiesta della password?), Non sarà in grado di utilizzare 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 
+1

sto correndo lo chef-solo 11.8.0 e ottengo alcun output utilizzando il livello di registro di debug utilizzando un eco in una bash script. È cambiato? –

+0

nvm, è stato perché stavo facendo da solo a chef-solista attraverso il vagabondo –

+0

@JoshNankin, come sei diventato vagabondo a produrre l'eco-roba? – pkyeck

14

cerco di utilizzare la registrazione quando possibile, ma ho scoperto che in alcuni scenari vedono l'output è importante. Ecco la versione breve del modo in cui lo faccio. Anche la sostituzione della risorsa execute per la risorsa bash funziona correttamente. Sia l'errore standard che l'uscita standard vanno nel file.

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 
+2

Questo funziona Tom. Invece del ciclo puoi anche usare File.read (risultati). – max

+0

Un'altra opzione da utilizzare al posto del ciclo: 'Chef :: Log.info (IO.read (risultati))' – Joe

+0

Buon commento Joe, ruby ​​non è il mio primo, secondo o terzo linguaggio di programmazione, quindi non conosco il tasti di scelta rapida. –

0

Kind of relativo ... impostare il log_location (-L) in un file impedisce i registri chef (Chef::Log.info() o semplicemente log) di andare a standard out.

È possibile ignorare questa opzione per stampare le informazioni del log completo stdout

chef-client -L /dev/stdout 
1

ho usato il seguente:

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

La proprietà flags rende il comando eseguire come bash -x script.sh

2

Utilizzare il Attributo live_stream della risorsa execute

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

uscita script verrà stampato sulla console

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