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.