Tutorial de funciones de Ansible para principiantes

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-galaxyComando para iniciar el rol. Aquí, nombré mi papel comorol de muestra.

$ ansible-galaxy init sample-role
- Role sample-role was created successfully

Bajo lasample-roledirectorio, tendrá diferentes directorios para organizar sus libros de jugadas.

Estructura del directorio de funciones

Repasemos cada directorio para entender su propósito.

  1. valores predeterminados– Puede organizar el valor predeterminadoVariablesbajo este directorio.
  2. archivos– Cualquier archivo que desee copiar a los nodos administrados para que se almacene en el directorio de archivos.
  3. manipuladoresmanipuladorlas tareas deben agruparse en el directorio de controladores.
  4. Meta– Almacena metadatos sobre el rol. Contiene metadatos como autor, versión, plataforma, etiquetas, dependencias, etc.
  5. Tareas– Las tareas del libro de jugadas deben crearse en el directorio de tareas. Este es un directorio obligatorio para los roles.
  6. 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).
  7. Pruebas– Los casos de prueba deben ir bajo el directorio de prueba.
  8. 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.ymlarchivo.

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.cfgarchivo 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.

Instalar herramientas de terminal

Ahora vamos a crear un rol y organizar la tarea dentro del rol. no estoy usando elansible-galaxycomando 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 papeltoolsy el directorio de tareas junto con elmain.ymlse 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.ymlarchivo.

Contenido del archivo main.ymlContenido del archivo main.yml

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 elrolespalabra 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
Ejecutar Playbook con VerboseEjecutar Playbook con Verbose

Puede agregar más de una regla en la sección de funciones.

roles:
 - roleA
 - roleB
 - roleC

También puede aplicar otras directivas ansible comovarsytags. 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_rolesyInclude_rolesdirectivas.

Ambosimport_roleyinclude_roletener 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.

  1. Primero se buscarán los roles bajo elroles/directorio. El directorio de roles debe estar en el mismo directorio que su libro de jugadas principal.
  2. Bajo el directorio de inicio~/.ansible/roles.
  3. En los directorios del sistema predeterminados/usr/share/ansible/roles,/etc/ansible/roles.
  4. En el directorio del proyecto.

Si ha almacenado los roles en una ubicación diferente, puede establecer la ruta usandoroles_pathenansible.cfgarchivo.

#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_pathy cómo agregar la ruta personalizada alroles_pathdirectiva.

Artículos Relacionados