En el transcurso de la escritura de los archivos del libro de jugadas de Ansible, es posible que haya notado que puede reutilizar parte del código definido en sus libros de jugadas existentes. Por ejemplo, podría reutilizar el código para instalar el servidor de la base de datos MariaDB en un host administrado con diferentes nombres de host, usuarios y contraseñas para otro host remoto. Esto ahorra mucho tiempo y energía que se habrían utilizado para escribir nuevos archivos de libro de jugadas desde cero. Y aquí es donde entra en juego el concepto de roles de Ansible.
Un rol ansible es un concepto de reutilización de tareas en archivos individuales que son más fáciles de administrar y manipular. Cada función proporciona un conjunto de tareas, variables y controladores, por mencionar algunos, que se requieren para su implementación. Los roles permiten a los usuarios reorganizar estructuras largas y complejas de libros de jugadas en archivos de libros de jugadas más simples, breves y ordenados. Como mencionamos anteriormente, los roles están destinados a ser reutilizables, y la invocación de roles en el archivo del libro de jugadas simplifica el código y elimina la duplicación. Las tareas repetitivas, como la instalación y configuración de aplicaciones, se pueden empaquetar en archivos separados y reutilizar en varios hosts administrados.
En esta guía, aprenderá a crear y usar roles de Ansible en libros de jugadas. Para la demostración, crearemos un rol que instale el servidor web Apache y configure el firewall para abrir el puerto 80.
Cómo crear un rol de Ansible
Comenzaremos creando un rol de Ansible simple. Para crear un rol, simplemente use la sintaxis de comando a continuación donde myrole es el nombre del rol.
$ ansible-galaxy init myrole
Por ejemplo, para crear un rol llamado test_role invoca el comando.
$ ansible-galaxy init test-role
Del resultado, obtenemos que el comando genera un rol de prueba directorio y, de forma predeterminada, contiene algunos directorios predeterminados. Puedes usar el árbol Comando para enumerarlos como se muestra.
$ tree test-role
Veamos una breve descripción general de lo que contiene cada directorio
Los 'predeterminados Carpeta:este directorio contiene las variables predeterminadas que requerirá el rol. Estas variables tienen la prioridad más baja y, por lo tanto, son bastante fáciles de anular.
Los 'archivos Carpeta:esta carpeta comprende archivos que se copiarán en el host administrado o remoto.
Los 'manejadores Carpeta ':el directorio contiene controladores que generalmente son evocados por la directiva 'notificar'. Puede obtener más información sobre los controladores de Ansible.
El 'meta Carpeta:consta de los metadatos de un rol para el autor de la instancia, las dependencias, etc.
Las 'tareas Carpeta:contiene un archivo YAML que define la lista de tareas que ejecutará el propio rol. Contiene el main.yml archivo.
Las 'plantillas Carpeta:el directorio comprende archivos de plantilla que se pueden modificar según se considere adecuado para configurar el rol.
Las 'pruebas Carpeta:integra las pruebas con los archivos del libro de jugadas de Ansible.
Las 'vars Carpeta ':comprende variables que luego usará el rol. role. Estas variables tienen una prioridad más alta en comparación con las de los 'predeterminados ’ directorio.
Vamos a crear dos roles con fines de demostración:
El git rol:esto instalará la última versión de Git.
El apache rol:esto instalará el servidor web Apache
Créelos de la siguiente manera:
$ sudo ansible-galaxy init git
$ sudo ansible-galaxy init apache
A partir de entonces, necesitamos definir cada rol editando el main.yml archivo en las ‘tareas ' carpeta en cada rol. Comencemos definiendo el git rol.
$ sudo vim git/tasks/main.yml
Defina la tarea para el rol de git como se muestra.
Guarde el main.yml archivo y salir.
A continuación, defina la tarea para el rol de Apache.
$ sudo vim apache/tasks/main.yml
Especifique la tarea que instala el servidor web Apache.
Del mismo modo, guarde el main.yml archivo y salir.
Cree un archivo de libro de jugadas y llame a los roles
Una vez definidas las tareas de cada rol en el main.yml para cada función, cree un archivo de manual de estrategias y haga referencia a las funciones como se muestra.
$ sudo vim roles_demo.yml
NOTA:
Debe especificar la ruta completa al rol en el libro de jugadas.
roles:
- /ruta/a/rol
En este ejemplo, los roles residen en el mismo directorio que el archivo del libro de jugadas, y basta con llamarlos por sus nombres.
Luego, finalmente, ejecute el archivo del libro de jugadas.
$ sudo ansible-playbook /etc/ansible/roles_demo.yml
Se hará referencia a los roles definidos en el archivo del libro de jugadas y se ejecutarán sus respectivas tareas. Aquí, Ansible instala el servidor web git y Apache.
Puede verificar la instalación ejecutando los comandos que se muestran.
$ git --version
$ apachectl -v
Como ha notado, el archivo del libro de jugadas es breve y fácil de seguir, ya que los roles especificados en el archivo del libro de jugadas han hecho referencia a las tareas.
Resumiendo
Los roles de Ansible ayudan en la organización de los archivos del libro de jugadas y ayudan a evitar la duplicación de código. Pueden ser reutilizados y referenciados por otros archivos de playbook para ejecutar tareas similares en diferentes nodos, ahorrando así tiempo y energía que podrían haberse utilizado para escribir nuevos playbooks. En general, los roles facilitan el trabajo.