Libro: Ansible - Automatización para todos.

By rogerarjona April 3, 2023, 5:54 p.m. Ansible Automatización Deploy Servidores

Este libro, te lleva de la mano en un recorrido completo por Ansible, una herramienta de automatización de tareas que es utilizado por muchas empresas de desarrollo de Software. El libro está dividido en ocho capítulos, cada uno cubriendo un aspecto diferente de Ansible.

Uno de los puntos fuertes de este libro es la claridad y concisión con que se presentan los conceptos, el autor también proporciona numerosos ejemplos prácticos y comandos útiles que puedes utilizar para poner en práctica lo que has aprendido.

Capítulo 1: Introducción a Ansible.

En este capítulo se introduce Ansible como una herramienta de automatización de tareas de TI, explicando su arquitectura (estructura de carpetas y archivos) y las características que la hacen adecuada para diferentes entornos, como el uso de archivos YAML y la conexión a diferentes tipos de servidores (Debian, Ubuntu. ArchLinux, Windows).

Menciona las ventajas y desventajas en comparación con otras herramientas de automatización.

Ventajas:

  • Soporte para la mayoría de distribuciones
  • Instalación simple y de tamaño reducido
  • Rápida curva de aprendizaje
  • No es necesario un agente instalado en los servidores
  • Gran cantidad de módulos para integración

Desventajas:

  • No es tan potente como otros productos para la administración de configuraciones
  • Se requiere una gran optimización para arquitecturas muy grandes
  • La actualización de los módulos puede ser tardía.

Capítulo 2: Instalación y configuración de Ansible.

Instalación en Ubuntu / Debian

sudo apt install ansible

Instalando en un entorno de Python

easy install pip
pip install ansible

Capítulo 3: Primeros Pasos

Lo primero es definir los servidores a los cuales Ansible se va a conectar. Esto se hace mediante el archivo hosts. El default se encuentra en /etc/ansible/hosts pero puedes definir muchos otros dentro de carpetas.

Para listarlos solo ejecuta:

ansible --list-hosts all

Para verificar si tienes conexión a estos servidores mediante ssh, puedes ejecutar

ansible all -m ping 

Mostrara algo como esto:

    S1-Example | UNREACHABLE! => {
        "changed": false,
        "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.4.1 port 22: Connection timed out",
        "unreachable": true
    }
    S2-Example | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
    }

Inventarios (Inventory)

Un inventario es un listado estatico o dinamico de los nodos (servidores) a administrar, y la información necesaria de cada uno de ellos. Es un archivo en donde se separa infraestructura. Puede realizarse dentro del archivo hosts a partir de "grupos".

Ejemplo

[MainServers]
A-S1 ansible_host=192.168.4.1
B-S2 ansible_host=192.168.4.2

[Balancers]
A-S3 ansible_host=192.168.4.3

En el caso anterior hay 2 grupos. "MainServers" con 2 nodos, y "Balancers" con 1. Esto se puede realizar para agrupar servidores:

  • Geograficamente: Servidores en Madrid, Mexico, Virginia
  • Por Aplicacion: Web, Base de Datos
  • Por Sistema Operativo: Ubuntu, Debian, Windows
  • Por Entorno: Development, Production, Stagging

Tambien podemos generar archivos yaml o ini (o sin extensión) para definir nuestro inventario.

Ejemplo:

sudo touch local_inventory

y dentro podemos agregar:

[MainServers]
A-S1 ansible_host=192.168.4.1
B-S2 ansible_host=192.168.4.2

[Balancers]
A-S3 ansible_host=192.168.4.3

Definimos la ruta de nuestro inventario con el parametro "-i". Tambien podemos mandar mas de un parametro a ansible para conectarnos a un nodo.

  • ansible_user: Usuario para conectarse al nodo
  • ansible_host: Ip del nodo
  • ansible_port: Puerto SSH del nodo
  • ansible_ssh_pass: Contraseña para la conexión (Riesgo de Seguridad)
  • ansible_become: Define si debes utilizar algun metodo de escalamiento de permisos
  • ansible_connection: Tipo de Conexion (ssh, local o docker)
  • ansible_become_method: Metodo a utilizar para escalar permisos (sudo, su, pbrun, pfexec, doas, dzdo, ksu)
  • ansible_become_user: Usuario a utilizar para escalada de permisos.

El comando de conexion se veria asi:

ansible <server> ansible_user=temporal ansible_port=23

Tambien es posible pasar estos parametros a nivel de grupos.

Capítulo 4: Playbooks

Los playbooks son archivos YAML que definen las tareas a realizar en un servidor o grupo de servidores. El capítulo comienza explicando la estructura básica de un Playbook, que consiste en una lista de tareas y una sección de variables.

Se muestra la sintaxis de los Playbooks de Ansible, que incluye la definición de hosts, variables y tareas. También se muestra cómo utilizar módulos de Ansible en un Playbook para realizar tareas específicas, como la instalación de paquetes o la gestión de servicios.

Aqui dejo un ejemplo de la estructura de un playbook

Nombre del Playbook Descripción Tareas Handlers Hosts Variables Imports
ejemplo.yml Playbook para configurar un servidor web Instalar Apache Reiniciar servicio de Apache webserver http_port: 80 Este Playbook requiere permisos de sudo

Ejemplo de Playbook:

  ---
  - name: Instalar Apache y reiniciar servicio
    hosts: webserver
    become: true
    vars:
      http_port: 80
    tasks:
      - name: Instalar Apache
        apt:
          name: apache2
          state: present

      - name: Reiniciar servicio de Apache
        systemd:
          name: apache2
          state: restarted
        notify: Reiniciar Apache

    handlers:
      - name: Reiniciar Apache
        systemd:
          name: apache2
          state: restarted

Este playbook comienza especificando el nombre del playbook (name), los hosts en los que se ejecutará (hosts), y que se requerirán privilegios de superusuario (become). También se definen las variables necesarias, en este caso http_port.

Luego, se definen las tareas (tasks) que se ejecutarán en el playbook. En este caso, la tarea es instalar Apache y reiniciar el servicio de Apache utilizando el módulo apt y el módulo systemd, respectivamente.

Además, se define un handler que se activará si se detecta un cambio en el estado del servicio de Apache. Este handler reiniciará el servicio de Apache utilizando el módulo systemd.

Capítulo 5: Modulos

Este capitulo es lo que cubre gran cantidad del libro, es información de la documentación oficial de Ansible, en donde se muestra cada modulo que esta hecho para ansible y los atributos para poder utilizarlos.
Puede verse en linea aqui: https://docs.ansible.com/ansible/latest/getting_started/index.html

En resumen, el libro "Ansible Automatización para todos" es una guía práctica para aprender a utilizar Ansible y automatizar tareas de TI. A lo largo de sus 8 capítulos, se presentan los conceptos básicos de Ansible, la gestión de inventarios, la ejecución de tareas, la gestión de variables, la creación de roles, la orquestación con Ansible Tower, la integración con otros sistemas y el desarrollo avanzado. En cada capítulo se presentan ejemplos y comandos para que el lector pueda practicar y profundizar en el uso de Ansible.