Ejecutar un "rol" concreto con Ansible

Hasta la versión 2.2 de Ansible, para ejecutar un rol concreto era necesario crear un nuevo playbook ad hoc. Es algo fácil, pero resulta una carga administrativa que no debería ser necesaria.

En las versiones modernas de Ansible disponemos de dos módulos nuevos interesantes: include_role en Ansible 2.2 e import_role en Ansible 2.4.

Para lanzar un rol determinado en una máquina o un grupo concreto del inventario, podemos hacer:

$ ansible -u root -m include_role -a name=ROL HOST

Esto ejecutará el rol ROL en la máquina HOST de nuestro inventario con privilegios de administrador o root.

Es muy útil combinar include_role con una configuración dinámica de inventario. Por ejemplo, recientemente he hecho algo similar a esto:

$ HOST="MÁQUINA1,MÁQUINA2,MÁQUINA3"; \
  for i in arranque zram ; do \
    ansible -u root -m include_role -a name=$i -i "$HOST," $HOST || break; \
  done

Esto lanzará los roles arranque y zram como administrador o root en las máquinas MÁQUINA1, MÁQUINA2 y MÁQUINA3. Estas máquinas no forman parte del inventario normal, se ha creado un inventario dinámico sobre la marcha. Ojo al uso de la coma final en el parámetro -i. Si ocurre algún error, el proceso se aborta.