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.
Tabla de contenido
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.