Cómo instalar y configurar Ansible en Ubuntu 20.04

Introducción

Los sistemas de gestión de configuración están diseñados para agilizar el proceso de controlar grandes cantidades de servidores, para administradores y equipos de operaciones. Te permiten controlar muchos sistemas diferentes de manera automatizada desde una ubicación central.

Aunque existen muchas herramientas populares de gestión de configuración disponibles para sistemas Linux, como Chef y Puppet, estas a menudo son más complejas de lo que muchas personas desean o necesitan. Ansible es una excelente alternativa a estas opciones porque ofrece una arquitectura que no requiere la instalación de software especial en los nodos, utilizando SSH para ejecutar las tareas de automatización y archivos YAML para definir los detalles de aprovisionamiento.

En esta guía, discutiremos cómo instalar Ansible en un servidor Ubuntu 20.04 y repasaremos algunos conceptos básicos sobre cómo utilizar este software. Para obtener una descripción más general de Ansible como herramienta de gestión de configuración, consulta Una Introducción a la Gestión de Configuración con Ansible.

Prerrequisitos

Para seguir este tutorial, necesitarás:

  • Un nodo de control de Ansible: El nodo de control de Ansible es la máquina que utilizaremos para conectarnos y controlar los hosts de Ansible a través de SSH. Su nodo de control de Ansible puede ser su máquina local o un servidor dedicado para ejecutar Ansible, aunque esta guía asume que su nodo de control es un sistema Ubuntu 20.04. Asegúrese de que el nodo de control tenga:

    • Un usuario no root con privilegios de sudo. Para configurar esto, puede seguir los Pasos 2 y 3 de nuestra Guía de configuración inicial del servidor para Ubuntu 20.04. Sin embargo, tenga en cuenta que si está utilizando un servidor remoto como su nodo de control de Ansible, debe seguir cada paso de esta guía. Hacerlo configurará un cortafuegos en el servidor con ufw y habilitará el acceso externo a su perfil de usuario no root, ambos aspectos que ayudarán a mantener seguro el servidor remoto.
    • Un par de claves SSH asociado con este usuario. Para configurar esto, puede seguir el Paso 1 de nuestra guía sobre Cómo configurar claves SSH en Ubuntu 20.04.
  • Uno o más Hosts de Ansible: Un host de Ansible es cualquier máquina que esté configurada para ser automatizada por tu nodo de control de Ansible. Esta guía asume que tus hosts de Ansible son servidores remotos Ubuntu 20.04. Asegúrate de que cada host de Ansible tenga:

    • La clave pública SSH del nodo de control de Ansible añadida a authorized_keys de un usuario del sistema. Este usuario puede ser root o un usuario regular con privilegios sudo. Para configurarlo, puedes seguir Paso 2 de Cómo Configurar Claves SSH en Ubuntu 20.04.

Paso 1 — Instalación de Ansible

Para comenzar a utilizar Ansible como medio para administrar la infraestructura de su servidor, debe instalar el software de Ansible en la máquina que actuará como el nodo de control de Ansible.

Desde su nodo de control, ejecute el siguiente comando para incluir el PPA (archivo de paquetes personal) oficial del proyecto en la lista de fuentes de su sistema:

  1. sudo apt-add-repository ppa:ansible/ansible

Pulse ENTER cuando se le solicite para aceptar la adición del PPA.

A continuación, actualice el índice de paquetes de su sistema para que esté al tanto de los paquetes disponibles en el PPA recién incluido:

  1. sudo apt update

Después de esta actualización, puede instalar el software de Ansible con:

  1. sudo apt install ansible

Su nodo de control de Ansible ahora tiene todo el software necesario para administrar sus hosts. A continuación, veremos cómo agregar sus hosts al archivo de inventario del nodo de control para que pueda controlarlos.

Paso 2 — Configuración del Archivo de Inventario

El archivo de inventario contiene información sobre los hosts que administrarás con Ansible. Puedes incluir desde uno hasta varios cientos de servidores en tu archivo de inventario, y los hosts pueden organizarse en grupos y subgrupos. El archivo de inventario también se utiliza a menudo para establecer variables que serán válidas solo para hosts o grupos específicos, con el fin de utilizarlas en playbooks y plantillas. Algunas variables también pueden afectar la forma en que se ejecuta un playbook, como la variable ansible_python_interpreter que veremos en un momento.

Para editar el contenido de tu inventario Ansible predeterminado, abre el archivo /etc/ansible/hosts con el editor de texto que prefieras, en tu nodo de control de Ansible:

  1. sudo nano /etc/ansible/hosts

Nota: Aunque Ansible suele crear un archivo de inventario predeterminado en etc/ansible/hosts, puedes crear archivos de inventario en cualquier ubicación que se adapte mejor a tus necesidades. En este caso, deberás proporcionar la ruta de tu archivo de inventario personalizado con el parámetro -i al ejecutar comandos y playbooks de Ansible. Utilizar archivos de inventario por proyecto es una buena práctica para minimizar el riesgo de ejecutar un playbook en el grupo equivocado de servidores.

El archivo de inventario predeterminado proporcionado por la instalación de Ansible contiene varios ejemplos que puedes usar como referencia para configurar tu inventario. El siguiente ejemplo define un grupo llamado [servidores] con tres servidores diferentes, cada uno identificado por un alias personalizado: server1, server2 y server3. Asegúrate de reemplazar las direcciones IP resaltadas con las direcciones IP de tus hosts de Ansible.

/etc/ansible/hosts
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

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

El subgrupo all:vars establece el parámetro del host ansible_python_interpreter que será válido para todos los hosts incluidos en este inventario. Este parámetro asegura que el servidor remoto utilice el ejecutable de Python 3 /usr/bin/python3 en lugar de /usr/bin/python (Python 2.7), que no está presente en las versiones recientes de Ubuntu.

Cuando hayas terminado, guarda y cierra el archivo presionando CTRL+X, luego Y y ENTER para confirmar los cambios.

Cuando desees verificar tu inventario, puedes ejecutar:

  1. ansible-inventory --list -y

Verás una salida similar a esta, pero que contiene tu propia infraestructura de servidor según se define en tu archivo de inventario:

Output
all: children: servers: hosts: server1: ansible_host: 203.0.113.111 ansible_python_interpreter: /usr/bin/python3 server2: ansible_host: 203.0.113.112 ansible_python_interpreter: /usr/bin/python3 server3: ansible_host: 203.0.113.113 ansible_python_interpreter: /usr/bin/python3 ungrouped: {}

Ahora que has configurado tu archivo de inventario, tienes todo lo necesario para probar la conexión con tus hosts de Ansible.

Paso 3 — Prueba de Conexión

Después de configurar el archivo de inventario para incluir tus servidores, es hora de comprobar si Ansible puede conectarse a estos servidores y ejecutar comandos a través de SSH.

Para esta guía, estaremos utilizando la cuenta de Ubuntu root porque esa es típicamente la única cuenta disponible de forma predeterminada en servidores recién creados. Si tus hosts de Ansible ya tienen un usuario sudo regular creado, se recomienda usar esa cuenta en su lugar.

Puede utilizar el argumento -u para especificar el usuario del sistema remoto. Cuando no se proporciona, Ansible intentará conectarse como su usuario actual del sistema en el nodo de control.

Desde su máquina local o nodo de control de Ansible, ejecute:

  1. ansible all -m ping -u root

Este comando utilizará el módulo ping integrado de Ansible para ejecutar una prueba de conectividad en todos los nodos de su inventario predeterminado, conectándose como root. El módulo ping probará:

  • si los hosts son accesibles;
  • si tiene credenciales SSH válidas;
  • si los hosts pueden ejecutar módulos de Ansible usando Python.

Debería obtener una salida similar a esta:

Output
server1 | SUCCESS => { "changed": false, "ping": "pong" } server2 | SUCCESS => { "changed": false, "ping": "pong" } server3 | SUCCESS => { "changed": false, "ping": "pong" }

Si es la primera vez que se conecta a estos servidores a través de SSH, se le pedirá que confirme la autenticidad de los hosts a los que se está conectando a través de Ansible. Cuando se le solicite, escriba yes y luego presione ENTER para confirmar.

Una vez que reciba una respuesta de "pong" desde un host, significa que está listo para ejecutar comandos y libros de jugadas de Ansible en ese servidor.

Nota: Si no puede obtener una respuesta exitosa de sus servidores, consulte nuestra Guía de Referencia Rápida de Ansible para obtener más información sobre cómo ejecutar comandos de Ansible con diferentes opciones de conexión.

Paso 4 — Ejecutar Comandos Ad-Hoc (Opcional)

Después de confirmar que su nodo de control de Ansible puede comunicarse con sus hosts, puede comenzar a ejecutar comandos ad-hoc y playbooks en sus servidores.

Cualquier comando que normalmente ejecutaría en un servidor remoto a través de SSH se puede ejecutar con Ansible en los servidores especificados en su archivo de inventario. Como ejemplo, puede verificar el uso del disco en todos los servidores con:

  1. ansible all -a "df -h" -u root
Output
server1 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 798M 624K 798M 1% /run /dev/vda1 155G 2.3G 153G 2% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 798M 0 798M 0% /run/user/0 server2 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 395M 608K 394M 1% /run /dev/vda1 78G 2.2G 76G 3% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 395M 0 395M 0% /run/user/0 ...

El comando resaltado df -h se puede reemplazar por cualquier comando que desee.

También puede ejecutar módulos de Ansible a través de comandos ad-hoc, de manera similar a lo que hemos hecho antes con el módulo ping para probar la conexión. Por ejemplo, así es como podemos usar el módulo apt para instalar la última versión de vim en todos los servidores de su inventario:

  1. ansible all -m apt -a "name=vim state=latest" -u root

También puede dirigirse a hosts individuales, así como a grupos y subgrupos, al ejecutar comandos de Ansible. Por ejemplo, así es como verificaría el uptime de cada host en el grupo servers:

  1. ansible servers -a "uptime" -u root

Podemos especificar múltiples hosts separándolos con dos puntos:

  1. ansible server1:server2 -m ping -u root

Para obtener más información sobre cómo usar Ansible, incluido cómo ejecutar libros de jugadas para automatizar la configuración del servidor, puedes consultar nuestra Guía de Referencia de Ansible.

Conclusión

En esta guía, has instalado Ansible y configurado un archivo de inventario para ejecutar comandos ad-hoc desde un Nodo de Control de Ansible.

Una vez que hayas confirmado que puedes conectar y controlar tu infraestructura desde una máquina controladora central de Ansible, puedes ejecutar cualquier comando o libro de jugadas que desees en esos hosts.

Para obtener más información sobre cómo usar Ansible, consulta nuestra Guía de Referencia Rápida de Ansible.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-ansible-on-ubuntu-20-04