Chef - Roles

Los roles en Chef son una forma lógica de agrupar nodos. Los casos típicos son tener roles para servidores web, servidores de bases de datos, etc. Se puede establecer una lista de ejecución personalizada para todos los nodos y anular el valor del atributo dentro de los roles.

Crear un rol

[email protected]:~/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 
   } 
}

Una vez que tenemos el rol creado, necesitamos subirlo al servidor Chef.

Cargar rol en Chef Server

[email protected]:~/chef-repo $ knife role from file web_servers.rb

Ahora, necesitamos asignar un rol a un nodo llamado servidor.

Asignar un rol al nodo

[email protected]:~/chef-repo $ knife node edit server 
"run_list": [ 
   "role[web_servers]" 
] 
Saving updated run_list on node server

Ejecute Chef-Client

[email protected]:~$ 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...

Cómo funciona

  • Defina un rol en un archivo Ruby dentro de la carpeta de roles del repositorio de Chef.

  • Un rol consta de un nombre y un atributo de descripción.

  • Un rol consta de una lista de ejecución específica del rol y la configuración de atributos específicos del rol.

  • Cada nodo que tiene un rol en su lista de ejecución tendrá la lista de ejecución del rol exacto en su propia lista.

  • Todas las recetas de la lista de ejecución del rol se ejecutarán en el nodo.

  • El rol se cargará en el servidor Chef usando el comando de rol de cuchillo del archivo.

  • El rol se agregará a la lista de ejecución de nodos.

  • La ejecución del cliente Chef en un nodo que tenga el rol en su lista de ejecución ejecutará todas las recetas enumeradas en el rol.