3
Hemos cubierto todo lo esencialTemas de Ansibleen nuestro sitio Ahora, en este artículo, aprendamos¿Qué son los roles ansibles?y cómo usar los roles de Ansible para crear un proyecto estructurado y distribuirlos. A continuación pasaremos a discutir laventajas de usar roles de ansiblesobre libros de jugadas estándar. Finalmente, veremos cómocrear funciones de Ansibley diferentes métodos para importar roles en el libro de jugadas.
¿Qué es el rol de Ansible?
Funciones de Ansibleofrece una estructura de directorios en la que puede desglosar libros de jugadas complejos en fragmentos pequeños y manejables. La principal ventaja de usar roles de ansible se muestra a continuación:
- Puede lograr un gran nivel de modularidad.
- Redistribuya los roles fácilmente usando colecciones ansible.
- Fácil de depurar cualquier error.
- Enfoque basado en pruebas.
En las próximas secciones, le mostraré cómo crear un rol ansible simple y diferentes formas de usar los roles en el libro de jugadas.
Crear un rol de Ansible
Utilizar elansible-galaxy
Comando para iniciar el rol. Aquí, nombré mi papel comorol de muestra.
$ ansible-galaxy init sample-role - Role sample-role was created successfully
Bajo lasample-role
directorio, tendrá diferentes directorios para organizar sus libros de jugadas.
Repasemos cada directorio para entender su propósito.
- valores predeterminados– Puede organizar el valor predeterminadoVariablesbajo este directorio.
- archivos– Cualquier archivo que desee copiar a los nodos administrados para que se almacene en el directorio de archivos.
- manipuladores–manipuladorlas tareas deben agruparse en el directorio de controladores.
- Meta– Almacena metadatos sobre el rol. Contiene metadatos como autor, versión, plataforma, etiquetas, dependencias, etc.
- Tareas– Las tareas del libro de jugadas deben crearse en el directorio de tareas. Este es un directorio obligatorio para los roles.
- Plantillas– Los archivos que se utilizarán para las plantillas deben almacenarse en el directorio de plantillas. Los archivos deben usar la extensión jinga2 (.j2).
- Pruebas– Los casos de prueba deben ir bajo el directorio de prueba.
- Vars– Variables asociadas a este rol. Tiene mayor prioridad si se usa la misma variable en el directorio predeterminado.
Si observa la imagen de arriba, un archivo común en algunos de los directorios esmain.yml
. No debe intentar cambiar el nombre de este archivo ya que ansible buscará el objeto relacionado bajo elmain.yml
archivo.
Como parte de su rol, solo el directorio de tareas es obligatorio y todos los demás directorios se pueden omitir.
Cree su primer rol de Ansible
Voy a crear un proyecto que instalará un par de herramientas para mi escritorio Ubuntu. Primero, voy a crearansible.cfg
archivo y elinventarioarchivo.
$ vim ansible.cfg [defaults] [defaults] inventory = hosts host_key_checking = False nocows = 1 actions_warnings = False interpreter_python = auto_legacy_silent
$ vim hosts localhost ansible_connection=local
Creó el libro de jugadas con una sola tarea para instalar herramientas de terminal.
--- - name: Role testing hosts: localhost gather_facts: false become: true tasks: # Tools for terminal - name: TERMINAL - Kitty, Tmux, Fish ansible.builtin.apt: pkg: - kitty - tmux - fish state: present
A continuación se muestra el resultado de la tarea anterior. Esta es la forma estándar de crear un libro de jugadas en ansible.
Ahora vamos a crear un rol y organizar la tarea dentro del rol. no estoy usando elansible-galaxy
comando para inicializar el rol, en su lugar, estoy creando manualmente el directorio de tareas, que es el único directorio requerido para mi rol.
Aquí se nombra mi papel“tools
“y el directorio de tareas junto con elmain.yml
se crea el archivo.
$ mkdir -p roles/tools/tasks/ $ touch roles/tools/tasks/main.yml $ tree roles/ roles/ `-- tools `-- tasks `-- main.yml 2 directories, 1 file
Ahora mueva la tarea debajo deltasks/main.yml
archivo.

En el libro de jugadas principal, debe decirle a ansible que use los roles para ejecutar la tarea. Hay un par de maneras de lograr esto.
1. Roles en el nivel de juego
Puedes usar elroles
palabra clave y proporcione el nombre del rol como entrada.
--- - name: Role testing hosts: localhost gather_facts: false become: true roles: - tools
Ansible tratará los roles definidos en el nivel de juego como importación estática y se analizarán al analizar el libro de jugadas.
Puede ejecutar el libro de jugadas con detalle para ver desde dónde se selecciona automáticamente la tarea.
$ ansible-playbook -K playbook.yml -vvvv

Puede agregar más de una regla en la sección de funciones.
roles: - roleA - roleB - roleC
También puede aplicar otras directivas ansible comovars
ytags
. Para examplesi aplica etiquetas en el nivel de rol, todas las tareas bajo el rol las heredarán.
roles: - role: tools tags: terminal
2. Importación de funciones en el nivel de tarea mediante Importaciones e incluye
Puede importar los roles en el libro de jugadas de forma estática y dinámica utilizando elimport_roles
yInclude_roles
directivas.
Ambosimport_role
yinclude_role
tener una sintaxis similar. La principal diferencia esimport*
Las directivas se procesan durante el análisis del libro de jugadas yinclude*
La directiva se procesa solo en el orden en que se definen y ejecuta la tarea dinámicamente.
tasks: - name: Import tools tasks import_role: name: tools tasks: - name: Include tools tasks include_role: name: tools
Ahora debe tener una comprensión justa de cómo estructurar un rol. Cuando crea libros de jugadas que involucran variables, controladores y archivos, debe crear un directorio apropiado y agrupar las tareas.
Ubicación del rol de Ansible
Ansible tiene su método para encontrar la ubicación del rol y ejecutar las tareas. Si ansible no puede ubicar el rol, se generará el siguiente error.
ERROR! the role 'tools' was not found in /ansible/dockerlab/playbooks/roles_testing/project1/roles:/home/ansuser/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/ansible/dockerlab/playbooks/roles_testing/project1
Eche un vistazo al mensaje de error anterior. Muestra un par de directorios donde ansible buscará el rol.
Ansible agrega automáticamente la primera y la última ruta del directorio en función del directorio desde el que ejecutó el libro de jugadas.
- Primero se buscarán los roles bajo el
roles/
directorio. El directorio de roles debe estar en el mismo directorio que su libro de jugadas principal. - Bajo el directorio de inicio
~/.ansible/roles
. - En los directorios del sistema predeterminados
/usr/share/ansible/roles
,/etc/ansible/roles
. - En el directorio del proyecto.
Si ha almacenado los roles en una ubicación diferente, puede establecer la ruta usando“roles_path
“enansible.cfg
archivo.
#ansible.cfg [defaults] roles_path = <path-to-roles>:
Conclusión
En este artículo hemos visto¿Qué son los roles ansibles?y elventajas de usar roles de ansiblesobre libros de jugadas estándar. Y luego discutimos cómocrear funciones de Ansibley diferentes formas deimportar roles de ansible en el libro de jugadas. Finalmente, hemos visto cómo ansible encuentra los roles usando elroles_path
y cómo agregar la ruta personalizada alroles_path
directiva.