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á