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.