Chef - Plataforma cruzada para livros de receitas
Livros de receitas de plataforma cruzada são aqueles livros de receitas que adotam um ambiente subjacente no qual serão executados. O Chef oferece uma série de recursos, que ajudam a escrever livros de receitas de plataforma cruzada capazes de rodar em qualquer sistema operacional no qual será implementado. Isso ajuda o desenvolvedor a escrever um livro de receitas totalmente operacional.
Para fazer isso, precisamos ter um livro de receitas. No nosso caso, será test_cookbook e uma lista de execução que conterá a definição do livro de receitas.
Método de trabalho
A recuperação dos detalhes da plataforma de nós e a execução da lógica condicional em nosso livro de receitas depende da plataforma. No nosso caso, iremos testá-lo para o Ubuntu.
Step 1 - Registre uma mensagem se o nó for Ubuntu.
[email protected]:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb
Log.info("Running on ubuntu") if node.platform['ubuntu']
Step 2 - Faça upload do livro de receitas para o servidor Chef.
[email protected]:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb
Uploading my_cookbook [0.1.0]
Uploaded 1 cookbook.
Step 3 - Execute o cliente Chef no nó.
[email protected]:~$ sudo chef-client
...TRUNCATED OUTPUT...
[2013-03-03T20:07:39+00:00] INFO: Running on Ubuntu
...TRUNCATED OUTPUT...
Alternativamente, se alguém não está interessado em uma plataforma específica, mas precisa apenas saber qual declarativa está usando, a seguinte instrução pode ser usada.
Log.info("Running on a debian derivative") if
platform_family?('debian')
Carregar o livro de receitas modificado e executar o cliente Chef no nó Ubuntu mostrará o seguinte resultado.
[2013-03-03T20:16:14+00:00] INFO: Running on a debian
derivative
Fluxo de Trabalho de Scripts
No comando acima, Ohai descobrirá o status atual do sistema operacional do nó e o armazenará como um atributo de plataforma com o objeto do nó.
node['platform']
Ou você pode usar a sintaxe de estilo de método -
node.platform
Definição de valores específicos da plataforma
Para definir os valores específicos da plataforma, o chef oferece os métodos de conveniência value_for_platform e value_for_platform_family. Eles podem ser usados para evitar declarações complexas de caso e, em vez disso, usar um hash simples.
Exemplo de livro de receitas
execute "start-runsvdir" do
command value_for_platform(
"debian" => { "default" => "runsvdir-start" },
"ubuntu" => { "default" => "start runsvdir" },
"gentoo" => { "default" => "/etc/init.d/runit-start start" }
)
action :nothing
end
No exemplo acima, o comando é específico do sistema operacional conforme definido.
- Para Debian, "runsvdir-start" funcionará
- Para o Ubuntu, "start runsvdir" funcionará
- Para Gentoo, "/etc/init.d/runit-start" funcionará