Ansible: automatización y módulos de línea de comandos

Conceptos clave de Ansible

Ansible es una herramienta de automatización y gestión de configuración que opera sin agentes, utilizando SSH para comunicarse con los nodos controlados. Escrito en Python, simplifica tareas como la implementación de aplicaciones y la configuración de sistemas a través de módulos modulares.

La arquitectura de Ansible se basa en un nodo de control que ejecuta comandos o playbooks, enviando módulos a los hosts remotos mediante SSH. Estos módulos se eliminan automáticamente después de la ejecución, garantizando un estado limpio. Una característica importante es la idempotencia, donde múltiples ejecuciones producen el mismo resultado sin efectos secundarios.

Instalación y configuración

Para implementar Ansible, se requiere un nodo de control con Python y acceso SSH a los hosts gestionados. Los pasos típicos incluyen:

  1. Instalar Ansible en el sistema de control usando el gestor de paquetes, por ejemplo, con apt-get install ansible en distribuciones basadas en Debian.
  2. Configurar el invnetario en /etc/ansible/hosts, donde se definen grupos de hosts. Ejemplo:
[servidores_web]
192.168.1.101
192.168.1.102

[servidores_bd]
192.168.1.201

  1. Establecer autenticación por clave SSH entre el nodo de control y los hosts, usando ssh-keygen y ssh-copy-id.

Módulos esenciales de línea de comandos

Ansible utiliza módulos para ejecutra tareas específicas. El formato básico es ansible <grupo> -m <módulo> -a <parámetros>. A continuación, se describen módulos clave con ejemplos modificados.

Módulo command

Ejecuta comandos en hosts remotos sin procesamiento de shell, lo que limita el uso de redirecciones o tuberías.

# Ejecutar el comando 'whoami' en todos los hosts
ansible all -m command -a 'whoami'

# Cambiar al directorio /tmp antes de listar archivos
ansible servidores_web -m command -a 'chdir=/tmp ls'

Módulo shell

Permite comandos complejos con características de shell, como tuberías y variables.

# Crear un usuario y asignar contraseña usando tuberías
ansible servidores_bd -m shell -a 'echo "nuevo_usuario" | useradd -m -s /bin/bash'

# Extraer información de red y redirigir a un archivo
ansible servidores_web -m shell -a 'ip addr show | grep inet > /tmp/red_info.txt'

Módulo copy

Copia archivos desde el nodo de control a los hosts remotos.

# Copiar un archivo de configuración con permisos específicos
ansible servidores_web -m copy -a 'src=~/config_local.cfg dest=/etc/app/config.cfg mode=0644 owner=app_user'

# Insertar contenido directamente en un archivo remoto
ansible servidores_bd -m copy -a 'content="Configuración nueva" dest=/opt/settings.txt'

Módulo service

Gestiona servicios en hosts remotos, permitiendo iniciar, detener o reiniciar.

# Reiniciar el servicio nginx y habilitarlo al inicio
ansible servidores_web -m service -a 'name=nginx state=restarted enabled=yes'

# Verificar el estado de un servicio sin modificarlo
ansible servidores_bd -m command -a 'systemctl is-active postgresql'

Módulo setup

Recopila información detallada del sistema (facts) de los hosts.

# Obtener facts filtrados por dirección IP
ansible all -m setup -a 'filter=ansible_default_ipv4'

# Listar todos los facts de un grupo específico
ansible servidores_web -m setup

Variables en el inventario

El inventario soporta variables para personalizar el comportameinto de Ansible:

  • Variables de host: Definidas por host, como ansible_port para cambiar el puerto SSH.
  • Variables de grupo: Aplicables a todos los hosts en un grupo, usando la sección [grupo:vars].
  • Grupos anidados: Permiten combinar grupos con [grupo_principal:children].
# Ejemplo de inventario con variables y grupos anidados
[aplicaciones_web]
srv-web-01 ansible_host=192.168.1.50 ansible_user=admin
srv-web-02 ansible_host=192.168.1.51

[aplicaciones_web:vars]
ansible_python_interpreter=/usr/bin/python3

[infraestructura:children]
aplicaciones_web
aplicaciones_bd

Etiquetas: Ansible automatización DevOps Módulos SSH

Publicado el 6-18 16:27