Table of Contents

Ansible es una herramienta de automatización de código abierto que permite a los administradores de sistemas automatizar la gestión de la infraestructura informática. Proporciona un lenguaje sencillo para describir el estado deseado de la infraestructura y lo aplica automáticamente. Esto reduce el tiempo y el esfuerzo necesarios para gestionar sistemas complejos a gran escala.

Si eres nuevo en Ansible, este artículo te proporcionará una introducción a la herramienta, incluyendo sus conceptos básicos y cómo empezar a utilizarla.

Introducción a Ansible

Ansible fue desarrollado por Michael DeHaan en 2012 y adquirido por Red Hat en 2015. Desde entonces, se ha convertido en una de las herramientas de automatización más populares de la industria.

Ansible utiliza un lenguaje simple y declarativo llamado YAML (abreviatura de “YAML Ain’t Markup Language”) para definir el estado deseado de la infraestructura. Esto hace que sea fácil de leer y entender, incluso para los no programadores.

Ansible puede utilizarse para automatizar una amplia gama de tareas, entre ellas:

  • Gestión de la configuración
  • Despliegue de aplicaciones
  • Entrega continua
  • Aprovisionamiento
  • Cumplimiento de las normas de seguridad
  • Organización

Introducción a Ansible

Para empezar con Ansible, necesitarás instalarlo en tu sistema. Ansible se puede instalar en una amplia gama de sistemas operativos, incluyendo Linux, macOS y Windows.

Para instalar Ansible en Linux, en este caso Ubuntu, puedes utilizar los siguientes comandos:

sudo apt-get update
sudo apt-get install ansible -y

De lo contrario, puede utilizar las siguientes guías para instalar ansible:

Una vez instalado Ansible, puedes comprobar que funciona ejecutando el siguiente comando:

ansible --version

Esto debería mostrar la versión de Ansible que tiene instalada.

Inventario de Ansible

El primer paso para usar Ansible es definir un inventario. Un inventario es una lista de servidores que Ansible gestionará. Un inventario puede definirse en una variedad de formatos, incluyendo INI, YAML y JSON.

Este es un ejemplo de un archivo de inventario en formato INI:

[webservers]
webserver1.example.com
webserver2.example.com

[databases]
dbserver1.example.com
dbserver2.example.com

Este archivo de inventario define dos grupos de servidores, “servidores web” y “bases de datos”, y enumera los nombres de host de los servidores de cada grupo.

Ansible Playbooks

Una vez definido el inventario, el siguiente paso es definir un playbook. Un playbook es un archivo YAML que describe un conjunto de tareas que Ansible debe realizar en los servidores del inventario.

Este es un ejemplo de un playbook simple:

name: Install Nginx
hosts: webservers
become: yes

tasks:
    - name: Install Nginx package
        apt:
        name: nginx
        state: present

Este playbook instala el servidor web Nginx en todos los servidores del grupo “webservers”.

La página hosts especifica en qué grupo de servidores debe ejecutarse el libro de jugadas. El parámetro become especifica que las tareas deben ejecutarse con privilegios elevados (utilizando sudo o su

En tasks enumera las tareas individuales que debe realizar el playbook. En este caso, sólo hay una tarea, que instala el paquete Nginx utilizando el comando apt módulo.

Módulos Ansible

Los módulos de Ansible son unidades de código reutilizables que pueden usarse para realizar tareas específicas. Ansible viene con una amplia gama de módulos incorporados, y también hay muchos módulos de terceros disponibles.

Aquí hay algunos ejemplos de módulos incorporados:

  • apt - Gestionar paquetes en sistemas basados en Debian
  • yum - Gestionar paquetes en sistemas basados en Red Hat
  • file - Gestionar archivos
  • service - Gestionar los servicios del sistema
  • user - Gestionar usuarios y grupos
  • copy - Copiar archivos de la máquina de control a los servidores gestionados

Puede encontrar una lista completa de los módulos incorporados en la sección Ansible documentation

Ansible Roles y Estructura de Carpetas

Un rol Ansible es una forma de organizar y reutilizar tareas y configuraciones comunes. Es una estructura de directorios que contiene tareas, manejadores, plantillas, archivos y otros recursos.

Este es un ejemplo de un rol Ansible simple para instalar y configurar Nginx:

roles/
└── nginx/
    ├── tasks/
    │   ├── main.yml
    ├── handlers/
    │   ├── main.yml
    ├── templates/
    │   ├── nginx.conf.j2
    ├── files/
    ├── vars/
    ├── defaults/
    ├── meta/

En este ejemplo, el rol nginx es un directorio que contiene varios subdirectorios, cada uno de los cuales tiene un propósito específico:

  • tasks: contiene las tareas que serán ejecutadas por el rol.
  • handlers: contiene los handlers que las tareas pueden notificar.
  • templates: contiene las plantillas Jinja2 que se utilizarán para generar los ficheros de configuración para Nginx.
  • files: contiene los ficheros estáticos que necesita el rol.
  • vars: contiene variables específicas del rol.
  • defaults: contiene variables por defecto para el rol.
  • meta: contiene metadatos sobre el rol, como sus dependencias.

Los roles pueden ser fácilmente compartidos y reutilizados a través de múltiples playbooks y proyectos.

Este es un ejemplo de un archivo main.yml en el directorio tasks:

---
- name: Install Nginx
  apt:
    name: nginx
    state: present
  notify: restart nginx

- name: Enable Nginx
  systemd:
    name: nginx
    enabled: yes
    state: started

Esta tarea instala Nginx usando el módulo apt y habilita e inicia el servicio Nginx usando el módulo systemd. También notifica al gestor de reinicio de nginx, que reiniciará Nginx si se ha realizado algún cambio en la configuración.

El uso de un rol Ansible como este puede simplificar el proceso de gestión y configuración de software a través de múltiples servidores o entornos. Al separar las tareas, manejadores, plantillas y otros recursos en una única estructura de directorios, puedes gestionar y reutilizar más fácilmente estos componentes en diferentes playbooks y proyectos.

Mejores prácticas para Ansible

Estas son algunas de las mejores prácticas a seguir cuando se utiliza Ansible:

1. Usar control de versiones

Almacenar tus playbooks y roles de Ansible en un sistema de control de versiones como Git es una buena práctica que puede ayudarte a realizar un seguimiento de los cambios y colaborar con otros. El control de versiones proporciona un historial de los cambios realizados en su código base, lo que le permite volver a versiones anteriores si es necesario. También facilita la colaboración con otras personas compartiendo código y gestionando conflictos.

2. Utiliza roles para organizar tus guías

Los roles son una poderosa forma de organizar tus playbooks y tareas Ansible. Agrupando tareas relacionadas en roles, puedes hacer tus playbooks más modulares y reutilizables. Los roles también facilitan compartir código entre diferentes proyectos.

Aquí hay un ejemplo de un libro de jugadas que utiliza un rol para instalar y configurar Nginx:

name: Install and configure Nginx
hosts: webservers
become: yes
roles:
  - nginx

Este libro de jugadas utiliza un rol llamado “nginx” para instalar y configurar Nginx en el grupo de hosts “webservers”.

3. Usar etiquetas para agrupar tareas

Las etiquetas se pueden utilizar para agrupar tareas relacionadas entre sí en los playbooks de Ansible. Esto facilita la ejecución de partes específicas de un playbook, especialmente cuando se trabaja con playbooks grandes y complejos.

A continuación se muestra un ejemplo de cómo utilizar etiquetas en un playbook de Ansible:

name: Install and configure Nginx
hosts: webservers
become: yes
tasks:
  - name: Install Nginx
    apt:
    name: nginx
    state: present
    tags: nginx_install

  - name: Configure Nginx
    template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    tags: nginx_config

Este playbook tiene dos tareas, una para instalar Nginx y otra para configurarlo. Cada tarea tiene una etiqueta asociada, lo que facilita la ejecución únicamente de las tareas necesarias.

4. Utilizar variables para hacer más flexibles los playbooks

Las variables se pueden utilizar para hacer sus playbooks Ansible más flexibles y reutilizables. Mediante el uso de variables, puede hacer que sus playbooks sean más genéricos y adaptables a diferentes entornos.

He aquí un ejemplo de cómo utilizar variables en un libro de jugadas Ansible:

name: Install and configure Nginx
hosts: webservers
become: yes

vars:
nginx_port: 80
nginx_user: www-data

tasks:
  - name: Install Nginx
    apt:
    name: nginx
    state: present
  - name: Configure Nginx
    template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    notify: restart nginx

handlers:
  - name: restart nginx
    service:
    name: nginx
    state: restarted

Este playbook utiliza variables para especificar el puerto en el que Nginx debe escuchar y el usuario que debe ejecutar Nginx. Esto hace que el libro de jugadas sea más flexible y adaptable a diferentes entornos.

5. Pruebe sus Playbooks

Probar tus playbooks de Ansible es una buena práctica que puede ayudarte a detectar errores y asegurar que tus playbooks funcionan como se espera. Molecule es una herramienta muy popular para probar los playbooks de Ansible.

Molecule es un marco de pruebas que permite probar los libros de reproducción de forma coherente y automatizada. Molecule puede crear máquinas virtuales, aplicar su playbook, y luego verificar que todo está funcionando como se esperaba. Esto puede ayudarle a detectar errores y asegurarse de que sus libros de jugadas funcionan correctamente antes de desplegarlos en producción.

He aquí un ejemplo de cómo utilizar Molecule para probar un rol de Ansible:

molecule init role myrole
cd myrole
molecule test

Conclusión

En este artículo hemos presentado Ansible, una potente herramienta de automatización que puede ayudarte a gestionar infraestructuras de TI complejas. Hemos cubierto los conceptos básicos de Ansible, incluyendo inventarios, playbooks, módulos y roles.

También hemos discutido las mejores prácticas para el uso de Ansible, incluyendo el uso de control de versiones, la organización de playbooks con roles, el uso de etiquetas y variables, y la prueba de sus playbooks.

Si eres nuevo en Ansible, te recomendamos que empieces experimentando con algunos playbooks sencillos y que aumentes gradualmente tus habilidades y conocimientos con el tiempo. Con la práctica, serás capaz de automatizar incluso las tareas de infraestructura más complejas con facilidad.