Chef - Variável de Ambiente

A variável de ambiente é uma forma importante de fazer a receita do Chef ser executada em qualquer nó específico com sucesso. Existem várias maneiras de fazer isso, seja configurando-as manualmente ou usando um script Shell. Configurá-los por meio de receita é o que precisamos fazer aqui.

Para fazer isso, precisamos ter um livro de receitas aqui, usaríamos test_cookbook e uma lista de execução que contém test_cookbook.

Definindo a variável de ambiente usando a receita do Chef

Step 1 - Atualize a receita padrão do livro de receitas com uma variável de ambiente.

vipin@laptop:~/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 - Carregue o livro de receitas atualizado para o servidor.

vipin@laptop:~/chef-repo $ knife cookbook upload test_cookbook 
Uploading my_cookbook [0.1.0]

Step 3 - Executar o cliente Chef para criar um arquivo temporário.

user@server:~$ 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 Variável

user@server:~$ cat /tmp/message 
Hello from Chef

Método de trabalho

Ruby expõe a variável de ambiente atual via ENV –a hash para ler e modificar a variável de ambiente.

Executar Recurso

Podemos usar o recurso execute para fazer o mesmo dentro da receita padrão do livro de receitas do Chef.

mma@laptop:~/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- Definir uma variável de ambiente usando ENV tornará essa variável disponível durante toda a execução do Chef. Em contraste, passá-lo para o recurso execute apenas o tornará disponível para aquele comando executado pelo recurso.