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.
[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 - Carregue o livro de receitas atualizado para o servidor.
[email protected]:~/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.
[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 Variável
[email protected]:~$ 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.
[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- 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.