Meu entendimento atual:
- Você pode adicionar uma receita a um cliente. Uma receita pode conter outras receitas.
- Você pode adicionar uma função a um cliente. Uma função pode conter outras funções e receitas.
Então qual a diferença prática entre uma receita e um papel? Por que eu desejaria criar uma função com várias receitas em vez de apenas uma receita com várias receitas?
As únicas diferenças práticas principais são que as funções não podem ter versão e é mais fácil pesquisar nós Chef em uma função do que nós Chef que executaram uma receita. Eles pretendem ser uma maneira leve de agrupar servidores que não devem conter muita lógica de negócios. Muitas implementações evitam papéis completamente em favor de 'livros de papéis' -- basicamente livros de receitas escritos para se comportar como papéis.
Estas são duas das minhas postagens favoritas que cobrem o tópico:
http://realityforge.org/code/2012/11/19/role-cookbooks-and-wrapper-cookbooks.html
https://web.archive.org/web/20160310031442/http://dougireton.com/blog/2013/02/16/chef-cookbook-anti-patterns/