Los roles de Ansible: qué son y cómo se utilizan

Copiar URL

Los roles de Ansible® son unidades de automatización independientes y portátiles que se utilizan para agrupar tareas relacionadas y variables, archivos, controladores y otros recursos asociados en una estructura de archivo conocida. Mientras que las tareas de automatización solo pueden escribirse en un playbook de Ansible, los roles permiten crear paquetes con este tipo de contenido que pueden ejecutarse en varios plays, reutilizarse en distintos playbooks y compartirse con otros usuarios.

Los roles de Ansible se escriben en YAML, un lenguaje de serialización de los datos comprensible para las personas que se usa para codificar archivos de configuración. Si uno de ellos forma parte de una tarea o un play, Ansible busca el archivo main.yml en al menos uno de los ocho directorios estándar de roles que aparecen a continuación con su respectiva explicación. Estos incluyen las tareas, los controladores, los módulos, los valores predeterminados, las variables, los archivos, las plantillas y los metadatos de los roles.

roles/
    common/               # this hierarchy represents a "role"
        tasks/            #
            main.yml      #  <-- tasks file can include smaller files if warranted
        handlers/         #
            main.yml      #  <-- handlers file
        templates/        #  <-- files for use with the template resource
            ntp.conf.j2   #  <------- templates end in .j2
        files/            #
            bar.txt       #  <-- files for use with the copy resource
            foo.sh        #  <-- script files for use with the script resource
        vars/             #
            main.yml      #  <-- variables associated with this role
        defaults/         #
            main.yml      #  <-- default lower priority variables for this role
        meta/             #
            main.yml      #  <-- role dependencies
        library/          # roles can also include custom modules
        module_utils/     # roles can also include custom module_utils
        lookup_plugins/   # or other types of plugins, like lookup in this case
    webtier/              # same kind of structure as "common" was above, done for the webtier role
    monitoring/           # ""
    fooapp/               # ""

Para usar los roles de Ansible, deben solicitarse a un playbook, ya sea mediante su registro con la opción de roles o su incorporación a la sección de tareas de roles con los comandos include_role o import_role. Si se registran con la opción de roles o con import_role, se ejecutan antes que el resto de las tareas en el play, pero si se agregan con el comando include_role, entonces se ejecutan en el orden determinado en la lista de tareas.

Obtenga más información sobre los roles de Ansible y su uso

Recursos de Red Hat

Tanto los roles como los playbooks de Ansible son herramientas para organizar y ejecutar tareas de automatización, pero cumplen distintos propósitos. Su caso práctico específico y su experiencia con Ansible determinarán si deberá crear roles o escribir todas las tareas en un playbook.

La mayoría de los desarrolladores de automatización y los administradores de sistemas primero generan el contenido con playbooks individuales, los cuales consisten en listas de tareas de automatización que se ejecutan para un inventario específico. Estas tareas pueden agruparse en un play para asignarlas a un host determinado y ejecutarlas en orden. Dado que los playbooks pueden incluir uno o más plays, brindan la flexibilidad para ejecutar la automatización de Ansible en un solo archivo.

Si bien los playbooks son un método eficaz para crear procesos de automatización con Ansible, escribir todas las tareas en uno de ellos no siempre es lo más indicado. Hay casos en los que el alcance y las variables son complejos y conviene reutilizarlos, entonces la opción más indicada es crear el contenido de automatización en los roles de Ansible y solicitarlas al playbook.

En el siguiente ejemplo se muestra el uso de un rol, linux-systemr-roles.timesync, dentro de un playbook. En este caso, se necesitarían más de cuatro tareas para lograr lo mismo que puede hacer un solo rol.

- name: Manage timesync with 3 servers
  hosts: targets
  vars:
     timesync_ntp_servers:
        - hostname: foo.example.com
          iburst: true
        - hostname: bar.example.com
          iburst: true
        - hostname: baz.example.com
          iburst: true
  roles:
     - linux-system-roles.timesync

Utilizar los roles de Ansible, en lugar de escribir todo el contenido de automatización en un único playbook, ofrece varias ventajas:

Reutilización y uso compartido

Los roles son unidades de automatización reutilizables. Dado que permiten separar agrupaciones lógicas de tareas de automatización de un solo play o playbook, pueden reutilizarse en varios de ellos e intercambiarse para formar parte de otros proyectos.

Modularidad

El uso de los roles promueve la automatización modular, en la cual cada uno de ellos se encarga de una parte específica del funcionamiento. Este enfoque simplifica la comprensión, el mantenimiento y la resolución de problemas del código de automatización.

Organización

Los roles de Ansible permiten organizar las tareas, las plantillas, los archivos y las variables de forma estructurada. Gracias a ello, es más sencillo gestionar las configuraciones de automatización complejas, puesto que todo el contenido asociado a un rol en particular se encuentra en el mismo directorio.

Parámetros

Los roles permiten definir variables predeterminadas que pueden sustituirse cuando el rol se usa en un playbook de Ansible. De este modo, no es necesario modificarlo según los distintos entornos o casos prácticos, sino que se puede adaptar con facilidad.

Gestión de las versiones y las dependencias

Es posible crear versiones de los roles y especificar sus dependencias en su archivo meta/main.yml. Como resultado, las versiones y las dependencias pueden gestionarse de forma explícita, lo cual garantiza la estabilidad y la uniformidad en los distintos entornos.

Pruebas

Las metodologías de prueba pueden aplicarse fácilmente a los roles debido a su estructura. Además, es posible crear pruebas específicas para cada uno de ellos, lo cual garantiza que funcionen como se espera antes de integrarlas a playbooks más grandes.

Sencillez

En los proyectos más grandes o complejos, los roles simplifican el uso de los playbooks de Ansible. Permiten escribirlos de forma más concisa para que las personas los lean y entiendan con facilidad, dado que ya no incluyen todas las tareas, los controladores y las plantillas. Esto también simplifica la identificación de los roles para su reutilización en proyectos nuevos, lo cual agiliza la creación del contenido de automatización y simplifica los flujos de trabajo. 

Para crear un rol nuevo, use el comando ansible-galaxy role init role_name, el cual diseñará un directorio con la estructura estándar del directorio de roles. Una vez que lo haya verificado, podrá definir las tareas, las variables predeterminadas y otros elementos. También se puede agregar documentación a los archivos README.md y meta/main.yml, aunque esto no es necesario para que se ejecute el rol.

Quizás sea necesario tener más experiencia en el uso de Ansible para crear un rol nuevo, ya que puede representar un desafío para los equipos que aún están aprendiendo a diseñar contenido de automatización. No obstante, tanto los desarrolladores de automatización nuevos como los experimentados pueden aprovechar Red Hat® Ansible Lightspeed with IBM watsonx Code Assistant para llevar a cabo este proceso. Se trata de un servicio de inteligencia artificial generativa que proporciona sugerencias sobre el código en función de las prácticas recomendadas de Ansible. El uso de indicaciones en lenguaje natural permite describir los procesos de automatización que desea llevar a cabo. Ansible Lightspeed with watsonx Code Assistant le sugerirá contenido sobre una o varias tareas, las cuales pueden generarse e incorporarse a un rol o un playbook de Ansible posteriormente.

Este servicio permite crear, mantener y mejorar la calidad del código de Ansible con menor esfuerzo, lo cual aumenta la productividad y agiliza la adopción. 

Descubra los recursos de aprendizaje para comenzar a utilizar Ansible Automation Platform

Dado que es muy sencillo compartir los roles de Ansible, podrá incorporar aquellas probadas y con un buen mantenimiento a su proceso de automatización. Para compartirlas, use estos repositorios:

  • Ansible Galaxy: un repositorio sin costo para compartir roles y demás contenido de Ansible con la extensa comunidad de Ansible. Los roles se cargan aquí mediante la interfaz de línea de comandos (CLI), mientras que los conjuntos se comparten desde la interfaz web. Como se trata de un sitio comunitario, Red Hat no revisa, certifica ni respalda este contenido.
  • Ansible Automation Hub: se trata de un repositorio central donde podrá encontrar, descargar y gestionar los conjuntos de contenido Ansible Content Collections, y se incluye con la suscripción a Red Hat Ansible Automation Platform. Red Hat se encarga de alojarlo. No solo incluye nuestro contenido validado y certificado, sino también el de los partners proveedores de software independientes (ISV).
  • Centro de automatización privado: es un repositorio local que las empresas utilizan para gestionar, compartir y organizar su propio contenido de manera interna. Usted podrá compartir los roles y el contenido de automatización con otros integrantes de la empresa, lo cual permite que los equipos simplifiquen los flujos de trabajo y agilicen la automatización. 

Red Hat Ansible Automation Platform es una plataforma unificada que las empresas utilizan para agilizar y organizar las tareas de automatización, así como para generar innovaciones con ella. La suscripción de Red Hat brinda acceso a los conjuntos certificados Red Hat Ansible Content Collections y al contenido validado de Ansible, los cuales están disponibles en Ansible Automation Hub.

Red Hat Ansible Lightspeed with IBM watsonx Code Assistant, también incluido con la suscripción, simplifica la escritura y la mejora de las tareas que conforman los roles de Ansible, lo cual aumenta la eficiencia de los equipos que crean contenido de automatización. Se trata de una herramienta totalmente integrada a Visual Studio Code que ayuda a los desarrolladores en cualquier etapa del proceso en la que se encuentren. Esta les permite crear roles y playbooks de Ansible que se ajusten a las prácticas recomendadas sin tener que cambiar de entorno de desarrollo.

Ansible Lightspeed ofrece la función de comparación de fuentes de contenido, lo cual le permite verificar los datos fuente del entrenamiento para las sugerencias que proporciona y tomar mejores decisiones a la hora de crear las roles para sus usuarios. Además, permite crear y mejorar el código de Ansible con precisión y transparencia gracias a los modelos entrenados en cientos de roles de la comunidad de Ansible y los puntos de datos que brinda Red Hat, con lo cual puede cumplir con las demandas empresariales y agilizar la adopción.

Conozca los motivos por los que debe elegir Red Hat para la automatización

Hub

Blogs de Red Hat

Aquí encuentras la información más reciente sobre nuestros clientes, partners y comunidades open source.

Todas las versiones de prueba de los productos de Red Hat

Con las versiones de prueba gratuitas de nuestros productos, podrás adquirir experiencia práctica, prepararte para obtener una certificación o evaluar las soluciones para saber si son adecuadas para tu empresa.

Más información

¿Qué implica gestionar la infraestructura virtual? ¿Y cómo puede ayudar la automatización?

La gestión de la infraestructura virtual consiste en la coordinación de los recursos de TI, los sistemas de software y otras herramientas para gestionar las máquinas virtuales y los entornos de TI relacionados a lo largo de todo su ciclo de vida.

El concepto de CloudOps

CloudOps (u operaciones en la nube) combina las operaciones de TI y las prácticas recomendadas para gestionar entornos en la nube.

Migración a la nube y la función de la automatización

La migración a la nube consiste en trasladar aplicaciones, cargas de trabajo y datos a una nube pública o privada.

Automatización y gestión: lecturas recomendadas

Producto destacado

Artículos relacionados