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à