Chef - Scripts para Data Bags

Em certas condições, não é possível colocar o servidor sob o controle total do Chef. Nesses casos, pode ser necessário acessar os valores nos pacotes de dados do Chef a partir de scripts. Para fazer isso, é necessário armazenar os valores do saco de dados em um arquivo JSON e permitir que o script adicionado acesse esses valores.

Para isso, é preciso ter um livro de receitas. Em nosso caso, usaríamos test_cookbook como anteriormente e devemos ter a lista de execução do nó incluindo a definição de test_cookbook nela.

Método de trabalho

Step 1 - Crie uma bolsa de dados.

[email protected]:~/chef-repo $ mkdir data_bags/servers 
[email protected]:~/chef-repo $ knife data bag create servers 
Created data_bag[servers]

Step 2 - Crie um item de saco de dados.

[email protected]:~/chef-repo $ subl data_bags/servers/Storage.json { 
   "id": "storage", 
   "host": "10.0.0.12" 
}

Step 3 - Atualize o item do saco de dados.

[email protected]:~/chef-repo $ subl data_bags/servers/Storage.json { 
   "id": "storage", 
   "host": "10.0.0.12" 
}

Usando no livro de receitas

Step 1 - É necessário criar um arquivo JSON contendo valores de bolsa de dados usando o livro de receitas acima para que scripts externos possam acessar esses valores.

[email protected]:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb 
file "/etc/backup_config.json" do 
   owner "root"
   group "root" 
   mode 0644 
   content data_bag_item('servers', 'backup')['host'].to_json 
end

Step 2 - Carregar test_cookbook para o servidor Chef.

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

Step 3 - Execute o cliente Chef no nó.

[email protected]:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-03-14T20:30:33+00:00] INFO: Processing 
file[/etc/backup_config.json] action create 
(my_cookbook::default line 9) 
[2013-03-14T20:30:34+00:00] INFO: entered create 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] owner changed to 0 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] group changed to 0 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] mode changed to 644 
[2013-03-14T20:30:34+00:00] INFO: 
file[/etc/backup_config.json] created file 
/etc/backup_config.json 
...TRUNCATED OUTPUT...

Step 4 - Validar o conteúdo do arquivo JSON gerado.

[email protected]:~$ cat /etc/backup_config.json 
"10.0.0.12"

Fluxo de Trabalho de Scripts

No comando acima, o recurso de arquivo que usamos, que cria o arquivo JSON dentro do /etcdiretório é definido no livro de receitas padrão. Ele obtém o conteúdo do arquivo diretamente do saco de dados usando o método data_bag_item. Acessamos os valores do host do item do saco de dados e os convertemos em JSON. O recurso de arquivo usa os valores convertidos em JSON como seu conteúdo e os grava no disco.