Chef - Definição
A definição pode ser definida como um método lógico de agrupar recursos, que são usados repetidamente. Neste fluxo, agrupamos os recursos e atribuímos a eles um nome para recuperar a legibilidade dos livros de receitas definidos.
Para fazer isso, devemos ter uma receita. Neste caso, estamos usando test_cookbook e uma lista de execução de nós, que inclui o livro de receitas.
Criação de uma definição
Step 1 - Crie um novo arquivo de definição na pasta de definição de livros de receitas.
vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/definitions/
capistrano_deploy_dirs.rb
define :capistrano_deploy_dirs, :deploy_to => '' do
directory "#{params[:deploy_to]}/releases"
directory "#{params[:deploy_to]}/shared"
directory "#{params[:deploy_to]}/shared/system"
end
Step 2 - Use uma definição dentro da receita padrão dos livros de receitas.
vipin@laptop:~/chef-repo $ subl cookbooks/test_cookbook/recipes/default.rb
capistrano_deploy_dirs do
deploy_to "/srv"
end
Step 3 - Faça upload do livro de receitas para o servidor do chef.
vipin@laptop:~/chef-repo $ knife cookbook upload test_cookbook
Uploading test_cookbook [0.1.0]
Step 4 - Execute o cliente Chef no nó desejado.
vipin@laptop:~/chef-repuser@server $ sudo chef-client
...TRUNCATED OUTPUT...
[2013-01-18T16:31:11+00:00] INFO: Processing directory[/srv/
releases] action create (my_cookbook::default line 2)
[2013-01-18T16:31:11+00:00] INFO: directory[/srv/releases] created
directory /srv/releases
[2013-01-18T16:31:11+00:00] INFO: Processing directory[/srv/
shared] action create (my_cookbook::default line 3)
[2013-01-18T16:31:11+00:00] INFO: directory[/srv/shared] created
directory /srv/shared
[2013-01-18T16:31:11+00:00] INFO: Processing directory[/srv/
shared/system] action create (my_cookbook::default line 4)
[2013-01-18T16:31:11+00:00] INFO: directory[/srv/shared/system]
A definição em livros de receitas é como micros, que agrupam os recursos e lhes dão um nome. Uma definição tem um nome pelo qual se pode dizer qual pode ser chamado dentro da receita e tem uma lista de perímetros.
Na definição, temos parâmetros que em nosso código se parecem com o seguinte.
…..
directory "#{params[:deploy_to]}/releases"
directory "#{params[:deploy_to]}/shared"
directory "#{params[:deploy_to]}/shared/system”
……
Ele pode ser usado dentro da receita padrão da seguinte maneira.
capistrano_deploy_dirs do
deploy_to "/srv"`
end