Chef: configuración dinámica de recetas

Los atributos son los componentes clave para la configuración dinámica de libros de cocina. Los atributos permiten a los autores hacer que el libro de recetas sea configurable. Al anular los valores predeterminados establecidos en los libros de cocina, el usuario puede inyectar sus propios valores.

Step 1 - Cree un archivo predeterminado para los atributos del libro de cocina y agréguele un atributo predeterminado.

[email protected]:~/chef-repo $ subl cookbooks/my_cookbook/attributes/default.rb 
default['my_cookbook']['message'] = 'hello world!'

Step 2 - Definir el atributo dentro de la receta.

[email protected]:~/chef-repo $ subl cookbooks/<Cookbook Name>/recipes/default.rb 
message = node['my_cookbook']['message'] 
Chef::Log.info("** Saying what I was told to say: #{message}")

Step 3 - Subiendo el libro de cocina modificado.

[email protected]:~/chef-repo $ knife cookbook upload my_cookbook 
Uploading my_cookbook [0.1.0]

Step 4 - Ejecutando Chef-Client del nodo definido.

[email protected]:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-13T20:48:21+00:00] INFO: ** Saying what I was told to 
say: hello world! 
...TRUNCATED OUTPUT...

Método de trabajo

Chef carga todos los atributos del archivo de atributos antes de ejecutarlos. Los atributos se almacenan con el objeto de nodo. Se puede acceder a todos los atributos almacenados con el objeto de nodo dentro de recetas y recuperar sus valores actuales.

Chef tiene una estructura restringida que comienza desde que el valor predeterminado es el más bajo, luego viene normal (que tiene un alias con el conjunto) y luego anula. El nivel de atributo establecido en la receta tiene prioridad sobre el mismo nivel establecido en un archivo de atributos.

Atributo primordial en el nivel de nodo y entorno

El atributo definido en roles o entorno tiene la mayor prioridad.

Step 1 - Crea un rol.

[email protected]:~/chef-repo $ subl roles/german_hosts.rb 
name "german_hosts" 
description "This Role contains hosts, which should print out 
their messages in German" 
run_list "recipe[my_cookbook]" 
default_attributes "my_cookbook" => { "message" => "Hallo Welt!" }

Step 2 - Cargue el rol en el servidor Chef.

[email protected]:~/chef-repo $ knife role from file german_hosts.rb 
Updated Role german_hosts!

Step 3 - Asignar el rol a un nodo.

[email protected]:~/chef-repo $ knife node edit server 
"run_list": [ 
   "role[german_hosts]" 
] 
Saving updated run_list on node server

Step 4 - Ejecute Chef-Client.

[email protected]:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-13T20:49:49+00:00] INFO: ** Saying what I was told to 
say: Hallo Welt! 
...TRUNCATED OUTPUT...