7 tareas diarias de administrador de sistemas para automatizar con Ansible

Ansible, un proyecto gratuito y de código abierto basado en Python de Red Hat, es una popular plataforma de gestión de 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. Admite 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 administración de configuración, ha revolucionado la automatización de TI y los estándares de la industria. Las herramientas de gestión de configuración se han convertido en parte del conjunto de herramientas DevOps y son una parte inseparable de cualquier ciclo de vida de proceso de TI moderno. Esto se aplica a cualquier entorno de infraestructura moderno, ya sea que se construya en un entorno local, híbrido o en la nube. No solo para DevOps, Ansible también puede ayudar a automatizar muchas tareas diarias realizadas por un administrador del sistema.

Una de las ventajas de usar Ansible es que no necesita agentes y no necesita mucho para comenzar, además del acceso SSH a la máquina de destino y la versión compatible de Python, que ya está instalada de forma predeterminada en la mayoría de los sistemas operativos modernos. Además, dado que es una herramienta liviana, se puede implementar y usar con un legado de sistemas innovadores.

Usos de Ansible

Orquestación

Ansible es una herramienta de elección para orquestar varias tareas de implementación y administración del sistema. Los libros de jugadas permiten usar los mismos flujos de trabajo de orquestación en diferentes proyectos y los datos de configuración basados ​​en YAML permiten almacenar y crear versiones de su infraestructura en el repositorio de Git o en cualquier plataforma de control de versiones compatible.

Implementación de aplicaciones

Ya sea que se trate de una aplicación de código simple de unas pocas líneas o de una implementación pesada de múltiples niveles, Ansible hace posible automatizar el ciclo de vida de implementación de la aplicación de un extremo a otro.

Seguridad y Cumplimiento

Ansible también puede ayudar a garantizar que sus sistemas estén protegidos según las pautas de su organización y cumplan con los estándares de la industria. 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 Sysadmin que puede automatizar con Ansible.

Copie archivos desde un sistema local o remoto

Como administrador del sistema, es común copiar archivos de un directorio a otro. Los archivos de configuración a menudo deben copiarse en servidores remotos o, a veces, necesitamos mover archivos de una ubicación remota a otra.

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

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

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Copy a new ntp configuration file and back up the original, if it differs
      copy:
        src: ./ntp.conf
        dest: /etc/ntp.conf
        owner: root
        group: root
        mode: '0644'
        backup: yes

Configurar trabajos cron adicionales

La configuración de trabajos programados para realizar tareas rutinarias es parte de la gestión de cualquier servidor. Puede programar copias de seguridad automáticas, parches, auditorías, etc., durante ciertos momentos del día o del mes de forma automática y dejando tiempo productivo para su uso.

cron es una de esas herramientas en Linux que admite la programación, y Ansible puede ayudarlo a agregar o modificar esos trabajos. Como ejemplo, el libro de jugadas a continuación demuestra cómo puede configurar un trabajo rsync como raíz en algunos o todos sus servidores fácilmente usando Ansible.

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Deploy cron job
      cron:
        name: "Set rsync job"
        user: root
        minute: "5"
        hour: "4"
        job: "rsync -avz /path/to/folder1 /path/to/folder1 2>&1"

Administrar discos y sistemas de archivos

Ansible se puede usar para administrar discos, diseños de particiones, sistemas de archivos y montajes, incluido /etc/fstab en servidores Linux. Diferentes módulos de Ansible lo hacen posible. Aquí hay un ejemplo que crea una partición en un disco de 100 GB, lo formatea con el sistema de archivos ext4, crea un nuevo directorio para montar la partición y finalmente lo monta en un directorio determinado. También se crea una entrada en /etc/fstab a través del montaje temporal o permanente según las opciones del módulo.

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Create a partition
      parted:
        device: /dev/sdb
        number: 1
        part_end: "100%"
        state: present
    - name: Format new partition
      filesystem:
        fstype: ext4
        dev: /dev/sdb1
    - name: Create mount directory
      file:
        path: /data
        state: directory
    - name: Mount partition
      mount:
        path: /data
        src: /dev/sdb1
        fstype: ext4
        state: mounted

Recopilar registros del servidor

Mantener los registros en un lugar conveniente a veces es esencial para la seguridad, la auditoría y el análisis. Ansible permite la recopilación de registros de diferentes servidores en su entorno empresarial y los mantiene fácilmente en su ubicación definida. Aquí está el libro de jugadas para lograr esto:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
  
    - name: Find logs
      find:
        paths: /var/log/
        patterns: '*.log'
        recurse: yes
      register: _logs

    - name: Fetch logs
      fetch:
        src: "{{ item.path }}"
        dest: /tmp/logs
      with_items: "{{ _logs.files }}"

Instalar o eliminar paquetes y software

A menudo se requiere que los paquetes se instalen según las solicitudes de los usuarios o como parte de las compilaciones iniciales del servidor. También es posible que necesitemos eliminar ciertos paquetes que ya no son necesarios o que tienen algunos errores críticos, etc. Ansible le permite instalar o eliminar paquetes fácilmente sin la molestia de ir a cada servidor y ejecutar comandos manuales. Este es un ejemplo que demuestra la instalación y eliminación de un paquete para servidores Linux basados ​​en Ubuntu y RHEL/CentOS.

---
- hosts: ubuntu
  gather_facts: no
  tasks:
    - name: Install lsof utility
      apt:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Remove ARP Scan utility
      apt:
        pkg: arp-scan
        state: absent
      sudo: yes
      
 ---
- hosts: centos
  gather_facts: no
  tasks:
    - name: Install lsof utility
      yum:
        pkg: lsof
        state: latest
      sudo: yes
    - name: Remove ARP Scan utility
      yum:
        pkg: arp-scan
        state: absent
      sudo: yes

Administrar usuarios

Los usuarios y 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, administrar usuarios y grupos puede ser un gran desafío a pesar de la automatización para respaldar el entorno.

Con Ansible, el administrador del sistema tiene una excelente herramienta para crear, modificar y eliminar usuarios y grupos con todas las diferentes posibilidades compatibles con el sistema operativo.

Aquí hay un ejemplo simple que muestra la creación y eliminación de usuarios y grupos usando Ansible. Después de que se ejecute este libro de jugadas, los servidores de destino tendrán el grupo A y el grupo B creados con los GID dados, mientras que el usuario 1 se eliminará, si está presente. Se creará un nuevo usuario sin shell como usuario2 con UID dado, grupos asignados y contraseña bloqueada.

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - group:
        gid: 12310
        name: groupA
        state: present
    - group:
        gid: 12311
        name: groupB
        state: present
    - user:
        name: user1
        state: absent
    - user:
        name: user2
        uid: 12427
        shell: /bin/false
        password_lock: yes
        groups: groupA, groupB

Gestión de servicios

Los servicios son demonios de proceso que se ejecutan en segundo plano y sirven algún servicio como sshd que proporciona conectividad SSH, etc. Con Ansible, puede administrar los servicios del sistema y del usuario, como iniciarlos, detenerlos y reiniciarlos. Aquí hay un libro de jugadas de muestra para demostrar eso:

---
- hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: Restart ssh daemon
      service:
        name: ssh
        state: restarted
    - name: Restart sssd daemon
      service:
        name: sssd
        state: stopped
    - name: Restart httpd daemon
      service:
        name: httpd
        state: started

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

Resumen 👨‍💻

Ansible facilita la vida de un administrador de sistemas al permitirle ejecutar tareas repetitivas y que consumen mucho tiempo de forma automatizada y reducir los errores humanos y el esfuerzo. Además, habilitará el almacenamiento de datos de configuración en un repositorio de código central como Git, lo que permitirá 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.