Chef - Configurando Receitas Dinamicamente

Os atributos são os principais componentes para configurar dinamicamente os livros de receitas. Os atributos permitem que os autores tornem o livro de receitas configurável. Ao substituir os valores padrão definidos nos livros de receitas, o usuário pode injetar seus próprios valores.

Step 1 - Crie um arquivo padrão para os atributos do livro de receitas e adicione um atributo padrão a ele.

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

Step 2 - Defina o atributo dentro da receita.

vipin@laptop:~/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 - Carregando o livro de receitas modificado.

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

Step 4 - Executando Chef-Client do nó definido.

user@server:~$ 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 trabalho

O Chef carrega todos os atributos do arquivo de atributos antes de executá-los. Os atributos são armazenados com o objeto do nó. Pode-se acessar todos os atributos armazenados com o objeto de nó nas receitas e recuperar seus valores atuais.

Chef tem uma estrutura restrita começando do padrão sendo o mais baixo, então vem normal (que é um alias com o conjunto) e então substitui O nível de atributo definido na receita tem precedência sobre o mesmo nível definido em um arquivo de atributo.

Substituindo Atributo no Nível do Nó e do Ambiente

Atributos definidos em funções ou ambiente têm a precedência mais alta.

Step 1 - Crie uma função.

vipin@laptop:~/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 - Carregue a função para o servidor Chef.

vipin@laptop:~/chef-repo $ knife role from file german_hosts.rb 
Updated Role german_hosts!

Step 3 - Atribuir a função a um nó.

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

Step 4 - Execute o Chef-Client.

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