Chef - Modelli

Infrastruttura, configuration managementè tutto su come si configurano bene gli host. In generale, tutte le configurazioni vengono eseguite utilizzando i file di configurazione. Chef utilizza modelli per poter riempire il file di configurazione con valori dinamici.

Chef fornisce modelli come risorsa che può essere utilizzata nella ricetta. I valori dinamici dei file di configurazione possono essere recuperati da sacchi di dati, attributi o persino calcolarli passandoli nel modello.

Come usarlo?

Step 1 - Aggiungi il modello alla ricetta.

vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb  
template '/tmp/message' do 
   source 'Test.erb' 
   variables( 
      hi: 'Tesing', 
      world: 'Welt', 
      from: node['fqdn'] 
   ) 
end

Step 2 - Aggiungi ERB File modello.

vipin@laptop:~/chef-repo $ subl cookbooks/<Cookbook Name>/templates/default/test.erb 
<%- 4.times do %> 
<%= @hi %>, <%= @world %> from <%= @from %>! 
<%- end %>

Step 3 - Carica il ricettario modificato sul server Chef.

vipin@laptop:~/chef-repo $ knife cookbook upload <Cookbook Name> 
Uploading my_cookbook [0.1.0] 
Run Chef Client on your node: 
user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2017-01-14T20:41:21+00:00] INFO: Processing template[/tmp/ 
message] action create (my_cookbook::default line 9) 
[2017-01-14T20:41:22+00:00] INFO: template[/tmp/message] updated 
content

Step 4 - Convalida il contenuto del file caricato.

user@server:~$ sudo cat /tmp/message 
Hallo, Welt from vagrant.vm! 
Hallo, Welt from vagrant.vm! 
Hallo, Welt from vagrant.vm! 
Hallo, Welt from vagrant.vm!

Flusso di lavoro

Lo chef utilizza Erubis come linguaggio del modello. Permette di incorporare il codice Ruby puro all'interno di simboli speciali nei template.

  • <% =%> viene utilizzato se si desidera stampare il valore di una variabile o di un'espressione Ruby nel file generato.

  • <% -%> viene utilizzato se desideri incorporare la logica Ruby nel tuo file modello. Lo usiamo per ripetere la nostra espressione quattro volte.