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.