Ansible, un proyecto gratuito y de código abierto basado en Python de Red Hat, es una popular plataforma de gestión de la configuración y automatización de TI.

Es multiplataforma y puede funcionar con la mayoría de los sistemas operativos modernos, incluidos Linux, Windows y Mac. Soporta un lenguaje declarativo escrito en YAML o YAML Ain't Markup Language para describir la configuración del sistema.

Ansible, junto con otras plataformas modernas de gestión de la configuración, ha revolucionado la automatización de TI y los estándares del sector. Las herramientas de gestión de la configuración han pasado a formar parte del conjunto de herramientas DevOps y son una parte inseparable de cualquier ciclo de vida de un proceso de TI moderno. Esto es aplicable a cualquier entorno de infraestructura moderno, ya esté construido en un entorno local, híbrido o en la nube. No sólo para DevOps, sino que Ansible también puede ayudar a automatizar muchas tareas cotidianas realizadas por un administrador de sistemas.

Una de las ventajas de utilizar Ansible es que no tiene agentes y no necesita mucho para empezar, aparte de acceso SSH a la máquina de destino y la versión compatible de Python, que ya está instalada por defecto en la mayoría de los sistemas operativos modernos. Además, al tratarse de una herramienta ligera, puede desplegarse y utilizarse con un legado a sistemas innovadores.

Usos de Ansible

Orquestación

Ansible es una herramienta de elección para orquestar diversas tareas de administración y despliegue de sistemas. Los playbooks permiten utilizar los mismos flujos de trabajo de orquestación en distintos proyectos y los datos de configuración basados en YAML permiten almacenar y versionar su infraestructura en un repositorio Git o en cualquier plataforma de control de versiones compatible.

Despliegue de aplicaciones

Tanto si se trata de una sencilla aplicación de pocas líneas de código como de un despliegue pesado de varios niveles, Ansible permite automatizar el ciclo de vida del despliegue de aplicaciones de principio a fin.

Seguridad y conformidad

Ansible también puede ayudarle a garantizar que sus sistemas están protegidos según las directrices de su organización y cumplen las normas del sector. Puede ejecutarse en miles de servidores, generar una auditoría y corregir esos agujeros de seguridad, dando al administrador un control total del entorno.

Veamos ahora algunas de las tareas comunes de administrador de sistemas que puede automatizar con Ansible.

Copiar archivos de un sistema local o remoto

Como administrador de sistemas, es habitual copiar archivos de un directorio a otro. A menudo es necesario copiar archivos de configuración en servidores remotos, o a veces necesitamos mover archivos de una ubicación remota a otra.

El módulo de copia de Ansible puede ayudarle a realizar estas tareas en un libro de jugadas.

Es una tarea rutinaria para un administrador de sistemas conocer el estado de los servidores gestionados y realizar acciones predefinidas según las políticas de la organización. Una de estas tareas es conocer el tiempo de actividad de los servidores. Con Ansible, podemos obtener fácilmente los valores del tiempo de actividad e imprimirlos juntos. A continuación se muestra un ejemplo para copiar la configuración ntp de un servidor local a uno remoto utilizando el módulo de copia:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Copiar un nuevo fichero de configuración ntp y hacer una copia de seguridad del original, si difiere
      copiar:
        src: ./ntp.conf
        dest: /etc/ntp.conf
        propietario: root
        grupo: root
        modo: '0644
        copia de seguridad: sí

Configure tareas cron adicionales

Configurar trabajos programados para llevar a cabo tareas rutinarias forma parte de la gestión de cualquier servidor. Puede programar copias de seguridad automáticas, parches, auditorías, etc., durante determinadas horas del día o del mes de forma automática y dejando tiempo productivo para su uso.

cron es una de esas herramientas de Linux que admite la programación, y Ansible puede ayudarle a añadir o modificar esos trabajos. Como ejemplo, el siguiente libro de jugadas demuestra cómo puede establecer un trabajo rsync como root en algunos o todos sus servidores fácilmente utilizando Ansible.

---
- hosts: todos
  gather_facts: no
  become: yes
  tasks
    - name: Desplegar tarea cron
      cron
        name: "Desplegar trabajo rsync"
        usuario: root
        minuto "5"
        hora "4"
        trabajo "rsync -avz /ruta/a/carpeta1 /ruta/a/carpeta1 2>&1"

Gestionar discos y sistemas de archivos

Ansible puede utilizarse para gestionar discos, distribuciones de particiones, sistemas de archivos y montajes, incluido /etc/fstab en servidores Linux. Diferentes módulos de Ansible lo hacen posible. He aquí un ejemplo que crea una partición en un disco de 100 GB, la formatea con el sistema de archivos ext4, crea un nuevo directorio para montar la partición y, por último, la monta en un directorio determinado. También se crea una entrada en /etc/fstab a través del montaje temporal o permanente dependiendo de las opciones del módulo.

---
- hosts: todos
  gather_facts: no
  become: sí
  tasks:
    - name: Crear una partición
      particionado
        dispositivo: /dev/sdb
        número: 1
        part_end "100%"
        estado: presente
    - nombre: formatear nueva partición
      sistema de archivos
        fstype: ext4
        dev: /dev/sdb1
    - nombre: Crear directorio de montaje
      archivo
        ruta: /datos
        estado: directorio
    - nombre: montar partición
      montar
        ruta /datos
        src: /dev/sdb1
        fstype: ext4
        estado: montado

Recopilar registros del servidor

Mantener los registros en un lugar conveniente es a veces esencial para la seguridad, la auditoría, así como para el análisis. Ansible permite recopilar los registros de los distintos servidores de su entorno empresarial y guardarlos en la ubicación definida fácilmente. He aquí el libro de jugadas para conseguirlo:

---
- hosts: todos
  gather_facts: no
  become: sí
  tasks:
  
    - name: Buscar registros
      encontrar
        rutas: /var/log/
        patrones: '*.log'
        recurrir: sí
      registrar: _logs

    - nombre: Obtener registros
      fetch
        src: "{{ item.path }}"
        dest: /tmp/logs
      with_items: "{{ _logs.files }}"

Instalar o eliminar paquetes y software

A menudo es necesario instalar paquetes a petición de los usuarios o como parte de las compilaciones iniciales del servidor. También puede ser necesario eliminar ciertos paquetes que ya no son necesarios o que tienen algunos errores críticos, etc. Ansible permite instalar o eliminar paquetes fácilmente sin la molestia de ir a cada servidor y ejecutar comandos manuales. He aquí un ejemplo que demuestra la instalación y eliminación de un paquete cada uno para servidores Linux basados en Ubuntu y RHEL/CentOS.

---
- hosts: ubuntu
  gather_facts: no
  tareas:
    - name: Instalar la utilidad lsof
      apt
        pkg: lsof
        estado: latest
      sudo: sí
    - name: Eliminar la utilidad ARP Scan
      apt:
        pkg: arp-scan
        estado: ausente
      sudo: sí
      
 ---
- hosts: centos
  gather_facts: no
  tareas:
    - name: Instalar utilidad lsof
      yum
        pkg: lsof
        estado: latest
      sudo: sí
    - name: Eliminar la utilidad ARP Scan
      yum
        pkg: arp-scan
        estado: ausente
      sudo: sí

Gestión de usuarios

Los usuarios y los grupos forman la estructura básica en torno a la cual los sistemas basados en Unix/Linux gestionan el acceso y los permisos. En una gran organización, la gestión de usuarios y grupos puede suponer un gran reto a pesar de la automatización para soportar el entorno.

Con Ansible, el administrador del sistema dispone de una excelente herramienta para crear, modificar y eliminar usuarios y grupos con todas las diferentes posibilidades soportadas en el SO.

He aquí un sencillo ejemplo que muestra la creación y eliminación de usuarios y grupos mediante Ansible. Después de que este playbook se ejecute, los servidores de destino tendrán el grupoA y el grupoB creados con los GIDs dados mientras que el usuario1 será eliminado, si está presente. Se creará un nuevo usuario sin shell como user2 con el UID dado, los grupos asignados y la contraseña bloqueada.

---
- hosts: todos
  gather_facts: no
  become: sí
  tasks:
    - group:
        gid: 12310
        nombre: grupoA
        estado: presente
    - grupo:
        gid: 12311
        nombre: groupB
        estado: presente
    - usuario:
        nombre: usuario1
        estado: ausente
    - usuario:
        nombre: usuario2
        uid: 12427
        shell: /bin/false
        password_lock: yes
        grupos: grupoA, grupoB

Gestión de los servicios

Los servicios son demonios de procesos que se ejecutan en segundo plano y sirven para algún servicio, como sshd, que proporciona conectividad SSH, etc. Utilizando Ansible, puede gestionar los servicios del sistema y de los usuarios, como iniciarlos, detenerlos y reiniciarlos. He aquí un ejemplo de playbook para demostrarlo:

---
- hosts: todos
  gather_facts: no
  become: sí
  tareas:
    - name: Reiniciar demonio ssh
      servicio:
        nombre: ssh
        estado: reiniciado
    - nombre: Reiniciar demonio sssd
      servicio:
        nombre: sssd
        estado: detenido
    - nombre: Reiniciar demonio httpd
      servicio:
        nombre: httpd
        estado: iniciado

En el ejemplo anterior, se reiniciará el servicio SSH y a continuación se detendrá el servicio SSSD. El demonio httpd se inicia hacia el final. Como Ansible es idempotente, cualquier servicio que ya esté iniciado o detenido no será cambiado mientras que el reinicio siempre cambia el estado del servicio. Recuerde comprobar el nombre del servicio ya que diferentes distribuciones de Linux utilizan otros nombres incluso para el mismo servicio como ssh y sshd.

Resumen 👨‍💻

Ansible facilita la vida de un administrador de sistemas permitiéndole ejecutar tareas repetidas y que requieren mucho tiempo de forma automatizada y reduciendo los errores y el esfuerzo humanos. Además, permitirá almacenar los datos de configuración en un repositorio de código central como Git, permitiendo que varios usuarios colaboren y revisen cada actividad.

Para obtener más información sobre Ansible y su amplio conjunto de módulos, consulte su documentación.