Chef - Variable de entorno

La variable de entorno es una forma clave de hacer que la receta de Chef se ejecute correctamente en cualquier nodo en particular. Hay varias formas de hacerlo, ya sea configurándolas manualmente o utilizando un script de Shell. Configurarlos mediante receta es lo que debemos realizar aquí.

Para hacer esto, necesitamos tener un libro de cocina aquí, usaríamos test_cookbook y una lista de ejecución que contiene test_cookbook.

Configuración de la variable de entorno con Chef Recipe

Step 1 - Actualice la receta predeterminada del libro de cocina con una variable de entorno.

[email protected]:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb  
ENV['MESSAGE'] = 'Testing environment variable update with chef !'  
execute 'print value of environment variable $MESSAGE' do 
   command 'echo $MESSAGE > /tmp/message' 
end

Step 2 - Sube el libro de cocina actualizado al servidor.

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

Step 3 - Ejecutando el cliente Chef para crear un archivo temporal.

[email protected]:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-01-25T15:01:57+00:00] INFO: Processing execute[print 
value of environment variable $MESSAGE] action run 
(my_cookbook::default line 11) 
[2013-01-25T15:01:57+00:00] INFO: execute[print value of 
environment variable $MESSAGE] ran successfully 
...TRUNCATED OUTPUT...

Validando Variable

[email protected]:~$ cat /tmp/message 
Hello from Chef

Método de trabajo

Ruby expone la variable de entorno actual a través de ENV –a hash para leer y modificar la variable de entorno.

Ejecutar recurso

Podemos usar el recurso de ejecución para hacer lo mismo dentro de la receta predeterminada de Chef del libro de cocina.

[email protected]:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb  
execute 'print value of environment variable $MESSAGE' do 
   command 'echo $MESSAGE > /tmp/message' 
   environment 'MESSAGE' => 'Hello from the execute resource' 
end

Note- Establecer una variable de entorno usando ENV hará que esa variable esté disponible durante toda la ejecución de Chef. Por el contrario, pasarlo al recurso de ejecución solo lo hará disponible para ese comando ejecutado por el recurso.