Come Chef cose che non esistono ancora


9

Diciamo che ho un codice Chef come:

require 'mixlib/shellout'
yum_package 'somepackage'
myvar =  Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip

Dove /bin/somecommandnon esiste ancora perché è installato da somepackage. Questo fallirà al momento della compilazione della ricetta per quel motivo, ma ovviamente funzionerà al momento della convergenza fornendo il pacchetto installato correttamente (e in caso contrario, ovviamente la ricetta non è riuscita comunque). Ciò fallisce anche se il pacchetto è installato come ricetta precedente nell'elenco di esecuzione poiché sono tutti compilati insieme in anticipo. Come posso includere elementi in una ricetta Chef che tale ricetta o runlist si installa da sola?


Questo genere di cose non è un problema in CFEngine
Gaius,

1
Senza informazioni sull'uso di myvarnon esiste una risposta reale, di solito evito di utilizzare la valutazione del codice da comandi esterni in fase di compilazione, a meno che non sia strettamente necessario per definire altre risorse. In breve, farei unruby_block 'set myvar' { node.run_state['myvar'] = Mixlib::ShellOut.[...] }
Tensibai il

@Tensibai node.run_stateera esattamente quello che stavo cercando - grazie. Fai una risposta e la accetterò!
Gaius,

Risposte:


4

Vorrei andare node.run_stateper memorizzare una variabile transitoria in una corsa e definirla in ruby_blockmodo che accada al momento della convergenza, qualcosa del genere:

yum_package 'somepackage'

ruby_block 'set myvar' do
  block do
    node.run_state['my_var'] = Mixlib::ShellOut.new('/bin/somecommand').run_command.stdout.strip
  end
end

Per quanto ne so, non è necessario richiedere "mixlib / shellout".


2

Le specifiche dipendono dal caso d'uso esatto. Se il valore viene utilizzato solo come proprietà su un'altra risorsa, si utilizzerà il lazymetodo helper. Se non hai bisogno dell'output, utilizzeresti la executerisorsa. In alcuni casi più complessi è possibile utilizzare una ruby_blockrisorsa o scrivere la propria risorsa personalizzata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.