Cómo instalar Ansible en Ubuntu

Cómo instalar Ansible en Ubuntu

En el trabajo diario de un administrador de sistemas, normalmente le toca lidiar con la gestión y configuración de un gran numero de máquinas, ya sean servidores, nodos o clientes. Antiguamente para facilitar estas tareas, los administradores de sistemas se las ingeniaban programando scripts que hicieran automáticamente gran parte de estas tareas. Pero realizar un seguimiento de la ejecución de estos scripts, podía resultar dificil debido a la gran cantidad de información que se obtenía.

Aunque este tutorial está hecho para Ubuntu, casi todas las opciones que te explico puedes utilizarlas en Debian. Puedes realizar un curso gratuito de Linux en el que te explico de forma rápida y sencilla los puntos clave de este sistema operativo. También podrás hacer el curso de Shell Scripting Profesional y si entras en mi comunidad de Discord, podrás tener un descuento del 40%.

En los últimos años han aparecido varios sistemas de gestión configuraciones automáticas, que están precisamente diseñados para agilizar y facilitar la administración de gran cantidad de servidores de forma rápida. Estos sistemas permiten al administrador controlar muchos equipos diferentes de forma automatizada desde un servidor maestro.

Como te he comentado hay varias herramientas para realizar esta administración de configuraciones disponibles para sistemas Linux, como Chef y Puppet. Pero estos sistemas requieren una instalación y configuración complejas, mientras que los que buscamos los administradores es la sencillez.

Logo de Ansible
Logo de Ansible

Ansible es la mejor alternativa a estas opciones. Su arquitectura que no requiere la instalación de software especial en los nodos, ya que tan solo utiliza conexiones SSH para ejecutar las tareas de automatización, Python para interpretar los comandos y archivos YAML para definir las configuraciones de los nodos gestionados.

Te voy a explicar cómo instalar Ansible en un servidor Ubuntu 22.04 y realizaremos una prueba en local para asegurarnos que funciona correctamente.

Requisitos para instalar Ansible

Vamos a hacer un repaso de los requisitos necesarios para poder instalar Ansible en el nodo controlador. Este nodo contará con una distro de Linux, este caso Ubuntu, pero podría ser de cualquier otra distribución.

  • Openssh-client: Para poder realizar las conexiones hacia los nodos gestionados. En principio suele venir instalado por defecto en muchas distribuciones, pero por si acaso nos aseguramos.
  • Python: Dependiendo de la versión de Ansible que vayamos a instalar, los requisitos de versión de Python pueden ser diferentes.
Referencia de las versiones de Python de la página oficial de Ansible
  • Acceso al usuario root, o un usuario con privilegios para usar el comando sudo.
root@aprendolinux:~# usermod -aG sudo jaime
root@aprendolinux:~# id jaime
uid=1000(jaime) gid=1000(jaime) grupos=1000(jaime),4(adm),27(sudo)
  • Tener configuradas las claves SSH para este usuario y/o para el usuario root. En este caso crearemos una clave de 4096 bits.
root@aprendolinux:~# ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
...

Requisitos de los nodos gestionados

Los nodos gestionados deberían tener una serie de requisitos que son muy sencillos de cumplir, puesto que los tienen casi tosos los equipos por defecto. Además las configuraciones que se deben realizar en estos equipos esta súper sencilla.

  • Openssh-server: En este caso, el nodo de control se va a conectar a sí mismo por SSH para realizar una prueba de concepto, por lo que tan solo sería necesario en el nodo controlado.
  • Python: Al igual que el nodo de control, los nodos gestionados necesitan un interprete de Python según la versión de Ansible que vayamos a utilizar.
  • La clave pública SSH del nodo de control de Ansible. debe estar presente en en fichero authorized_keys del usuario del sistema con permisos para poder ejecutar el comando sudo. Este usuario también puede ser root.
root@aprendolinux:~# ssh-copy-id jaime@aprendolinux
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
jaime@aprendolinux's password: 
Number of key(s) added: 1
Now try logging into the machine, with:"ssh 'jaime@aprendolinux'"
and check to make sure that only the key(s) you wanted were added.

Cómo instalar de Ansible en Linux

Una vez que estamos en este paso deberemos decidir si queremos una versión de Ansible facilmente mantenida y actualizada mediante el uso de repositorios “apt” o queremos la última versión estable.

Instalar Ansible mediante repositorios de apt

El sistema de automatización de Ansible viene ya por defecto en todos los repositorios de distribuciones derivadas de Debian, pero como te he comentado en el paso anterior, es una versión un poco desactualizada. Lo bueno es que sin tocar absolutamente nada, podemos tener una versión de Ansible estable y actualizable con el mismo proceso que tendríamos al actualizar todo el sistema.

root@aprendolinux:~# apt search ansible
Ordenando... Hecho
Buscar en todo el texto... Hecho
ansible/jammy,jammy 2.10.7+merged+base+2.10.8+dfsg-1 all
  Configuration management, deployment, and task execution system
...
root@aprendolinux:~# apt install ansible
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes adicionales:
  python-babel-localedata python3-argcomplete python3-babel python3-dnspython python3-jinja2 python3-jmespath python3-kerberos python3-libcloud python3-lockfile
  python3-markupsafe python3-ntlm-auth python3-packaging python3-pycryptodome python3-requests-kerberos python3-requests-ntlm python3-requests-toolbelt python3-selinux
  python3-simplejson python3-winrm python3-xmltodict
.....

También tenemos la posibilidad de tener una versión más actualizada de Ansible, mediante el uso de los repositorios propios de Ansible. Para eso, antes tenemos que incluir estos repositorios en el sistema, ya sea a mano en el directorio “/etc/apt/sources.list.d” o haciendo uso de este comando:

root@aprendolinux:~# apt-add-repository ppa:ansible/ansible
Repositorio: «deb https://ppa.launchpadcontent.net/ansible/ansible/ubuntu/ jammy main»
Descripción:
Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications— automate in a language that approaches plain English, using SSH, with no agents to install on remote systems.

http://ansible.com/

If you face any issues while installing Ansible PPA, file an issue here:
https://github.com/ansible-community/ppa/issues
Más información: https://launchpad.net/~ansible/+archive/ubuntu/ansible
Añadiendo repositorio.
Oprima [INTRO] para continuar o Ctrl+c para cancelar.
Adding deb entry to /etc/apt/sources.list.d/ansible-ubuntu-ansible-jammy.list
Adding disabled deb-src entry to /etc/apt/sources.list.d/ansible-ubuntu-ansible-jammy.list
Adding key to /etc/apt/trusted.gpg.d/ansible-ubuntu-ansible.gpg with fingerprint 6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367
...
root@aprendolinux:~# apt search ansible
Ordenando... Hecho
Buscar en todo el texto... Hecho
ansible/jammy,jammy 7.2.0-1ppa~jammy all
  batteries-included package providing a curated set of Ansible collections in addition to ansible-core

Instalar de Ansible con pip de Python

Como bien podemos ver en la Wikipedia, “pip es un sistema de gestión de paquetes utilizado para instalar y administrar paquetes de software escritos en Python. Muchos paquetes pueden ser encontrados en el Python Package Index (PyPI).” De hecho en los últimos tiempos para buscar un paquete del “repositorio” de pip, nos recomiendan ir directamente a la pagina “https://pypi.org/” y buscar aquí el nombre del mismo.

Paquete de Ansible en repositorio de Python Pip

Como puedes observar, la versión de Ansible que se va a instalar mediante el uso de “pip” es la 7.2, exactamente la misma que la versión que instalamos si ponemos los repositorios de Ansible en los sources de apt como expliqué en el punto anterior.

Esto no significa que la versión del Core de Ansible sea la 7.2, sino que es la versión 2.14, en comparación con la 2.10 que se instala con los repositorios por defecto de Ubuntu.

Para la instalación de Ansible mediante “pip” deberías ejecutar uno de estos comandos:

root@aprendolinux:~# pip3 install ansible
root@aprendolinux:~# python3 -m pip install ansible

Prueba de funcionamiento de Ansible con ejemplo

Ya tenemos el sistema de Ansible instalado en nuestra máquina y queremos empezar a hacer pruebas simples para asegurarnos que la instalacion funciona correctamente.

Para ello, el primer paso sería crear un nuevo fichero de inventario. Por defecto, Ansible utilizará el fichero que esté ubicado en “/etc/ansible/hosts” pero podemos crear otro donde queramos y pasárselo a Ansible así:

root@aprendolinux:~# mkdir test;cd test
root@aprendolinux:~/test# touch hosts
root@aprendolinux:~/test# ansible -i hosts all -m ping
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

La primera prueba que hemos lanzado ha sido con el módulo “ping” que no sirve para otra cosa más que para asegurarnos que la conexión entre nodos es correcta. Como el fichero está vacío sale un mensaje de Warning… vamos a rellenarlo y probamos de nuevo:

root@aprendolinux:~/test# cat hosts
[servidores]
aprendolinux

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

root@aprendolinux:~/test# ansible -i hosts all -m ping

aprendolinux | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
root@aprendolinux:~/test# ansible -i hosts all -m ping --user jaime
aprendolinux | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Perfecto, ya hemos probado que podemos lanzar tareas Ad-hoc o tareas sencillas a la máquina que en este caso es el mismo servidor.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *