Chef - Multipiattaforma per libri di cucina
I libri di cucina multipiattaforma sono quei libri di cucina che adottano un ambiente sottostante su cui verrà eseguito. Chef fornisce una serie di funzionalità, che aiutano a scrivere libri di cucina multipiattaforma in grado di funzionare su qualsiasi sistema operativo, su cui verrà distribuito. Questo aiuta uno sviluppatore a scrivere un libro di cucina completamente operativo.
Per fare questo, abbiamo bisogno di un libro di cucina. Nel nostro caso sarà test_cookbook e una run list che conterrà la definizione del libro di cucina.
Metodo di lavoro
Il recupero dei dettagli della piattaforma dei nodi e l'esecuzione della logica condizionale nel nostro ricettario dipendono dalla piattaforma. Nel nostro caso, lo testeremo per Ubuntu.
Step 1 - Registra un messaggio se il nodo è Ubuntu.
[email protected]:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb
Log.info("Running on ubuntu") if node.platform['ubuntu']
Step 2 - Carica il ricettario sul server Chef.
[email protected]:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb
Uploading my_cookbook [0.1.0]
Uploaded 1 cookbook.
Step 3 - Esegui il client Chef sul nodo.
[email protected]:~$ sudo chef-client
...TRUNCATED OUTPUT...
[2013-03-03T20:07:39+00:00] INFO: Running on Ubuntu
...TRUNCATED OUTPUT...
In alternativa, se non si è interessati a una piattaforma specifica ma si ha solo bisogno di sapere quale dichiarativa si sta utilizzando, è possibile utilizzare la seguente dichiarazione.
Log.info("Running on a debian derivative") if
platform_family?('debian')
Il caricamento del libro di cucina modificato e l'esecuzione del client Chef sul nodo Ubuntu mostrerà il seguente risultato.
[2013-03-03T20:16:14+00:00] INFO: Running on a debian
derivative
Flusso di lavoro degli script
Nel comando precedente, Ohai scoprirà lo stato corrente del sistema operativo del nodo e lo memorizzerà come attributo della piattaforma con l'oggetto nodo.
node['platform']
Oppure puoi usare la sintassi dello stile del metodo:
node.platform
Impostazione dei valori specifici della piattaforma
Per impostare valori specifici della piattaforma, lo chef offre metodi di convenienza value_for_platform e value_for_platform_family. Possono essere utilizzati per evitare un'istruzione case complessa e utilizzare invece un semplice hash.
Ricettario di esempio
execute "start-runsvdir" do
command value_for_platform(
"debian" => { "default" => "runsvdir-start" },
"ubuntu" => { "default" => "start runsvdir" },
"gentoo" => { "default" => "/etc/init.d/runit-start start" }
)
action :nothing
end
Nell'esempio precedente, il comando è specifico del sistema operativo come definito.
- Per Debian, "runsvdir-start" funzionerà
- Per Ubuntu, "start runsvdir" funzionerà
- Per Gentoo, "/etc/init.d/runit-start" funzionerà