Chef - Funções
As funções no Chef são uma forma lógica de agrupar nós. Casos típicos devem ter funções para servidores web, servidores de banco de dados e assim por diante. Pode-se definir uma lista de execução personalizada para todos os nós e substituir o valor do atributo nas funções.
Crie uma função
vipin@laptop:~/chef-repo $ subl roles/web_servers.rb
name "web_servers"
description "This role contains nodes, which act as web servers"
run_list "recipe[ntp]"
default_attributes 'ntp' => {
'ntpdate' => {
'disable' => true
}
}
Depois de criar a função, precisamos fazer o upload para o servidor Chef.
Carregar função para Chef Server
vipin@laptop:~/chef-repo $ knife role from file web_servers.rb
Agora, precisamos atribuir uma função a um nó chamado servidor.
Atribuir uma função ao nó
vipin@laptop:~/chef-repo $ knife node edit server
"run_list": [
"role[web_servers]"
]
Saving updated run_list on node server
Execute o Chef-Client
user@server:~$ sudo chef-client
...TRUNCATED OUTPUT...
[2013-07-25T13:28:24+00:00] INFO: Run List is [role[web_servers]]
[2013-07-25T13:28:24+00:00] INFO: Run List expands to [ntp]
...TRUNCATED OUTPUT...
Como funciona
Defina uma função em um arquivo Ruby dentro da pasta de funções do repositório Chef.
Uma função consiste em um nome e um atributo de descrição.
Uma função consiste em uma lista de execução específica da função e configurações de atributos específicos da função.
Cada nó que tem uma função em sua lista de execução terá a lista de execução da função exata em sua própria.
Todas as receitas na lista de execução da função serão executadas no nó.
A função será carregada no servidor Chef usando a função de faca do comando de arquivo.
A função será adicionada à lista de execução do nó.
Executar o cliente Chef em um nó com a função em sua lista de execução executará todas as receitas listadas na função.