CARGANDO

Escribe para buscar

QUE ES ANSIBLE: Herramienta para automatizar tareas IT

Ansible y el IaC

El concepto DevOPS está ganando cada vez más fuerza en las empresas, y nosotros, como integrantes del conglomerado IT, debemos estar preparados para todo tipo de cambios. Es por esto que, en el artículo de hoy, os traemos una herramienta muy utilizada llamada ansible, pero, ¿qué es ansible?, ¿cómo funciona?, ¿cómo instalar ansible en ubuntu?. Sigue leyendo para conocer más.

¿que es ansible?

En el mundo IT sufrimos cambios a menudo, desde hace un tiempo, estamos descubriendo la entrada de una nueva era que, a muchos asustan y a otros, apasiona, por conocer nuevas tecnologías y aventurarse en esta nueva forma de ver las cosas.

Inteligencias Artificiales, el cambio en el ámbito de la infraestructura on-premise hacia el cloud, la robótica en las empresas, etc.

¿Qué es y para que sirve ansible?

Ansible es una herramienta opensource que se encuentra en el stack tecnológico de IaC (Infraestructure as Code). Es extremadamente popular y nos proporciona la capacidad de automatizar tareas, ya sean repetitivas, o tareas que debemos lanzar a un grupo grande de máquinas, elementos de red, almacenamiento, etc, a través de un código escrito previamente.

Ventajas del uso de Ansible

Como os podéis imaginar, ansible tiene multitud de ventajas que, a los administradores de IT, nos vienen de perlas, pero voy a enumerarte las que a mi juicio son las más claras.

  • Sencillo de aprender

Esta ventaja para mí, es la más importante. Tened en cuenta que, aunque me guste la programación, yo no soy programador, soy sysadmin y como yo, muchos de vosotros os identificaréis con esto. Nos es más complejo aprender un lenguaje de programación que a un desarrollador, pero el lenguaje que utiliza ansible, es muy sencillo, con instrucciones directas que se asemejan mucho a nuestro lenguaje cotidiano (bueno, al angloparlante).

Además, en todo momento, cuándo ejecutas los comandos de lanzamiento de los playbooks, ves que está haciendo el código que tu mismo has escrito y por supuesto, existe una comunidad ENORME, con mucha documentación y muchas preguntas ya respondidas.

  • No depende de agentes

Ansible utiliza el puerto 22 (SSH) para conectarse a la infraestructura que tenga por debajo un sistema operativo de GNU/Linux y para Windows utiliza normalmente el puerto 5986 de WinRM.

Es por esto que, no tenemos que instalar NADA en los equipos cliente, solo utiliza esas comunicaciones mencionadas anteriormente y un usuario que debe crearse previamente.

  • Ansible Galaxy

Ansible Galaxy es una plataforma que utiliza la comunidad para subir sus playbooks y tareas ya escritas, para que las utilice todo el mundo.

Es muy posible que, si tienes que automatizar una tarea, alguien ya lo haya hecho por ti y unicamente, tengas que reutilizar su código, lo que nos lleva a la siguiente ventaja.

  • Ahorro de tiempo

Con Ansible, conseguimos optimizar mejor nuestro tiempo. Imagínate que tienes que instalar y configurar el roll de IIS o de Apache en 20 máquinas y hacerlo de forma manual, esto podría llevarnos una jornada entera de trabajo. Con ansible, una vez tenemos el código escrito, lo podemos hacer en 5 minutos.

  • Tolerancia a fallos

Siempre que tengas que realizar tareas de forma manual, corres el riesgo de cometer más errores. Al tener tu código escrito y tus inventarios de máquinas, es más complicado que cometas un error, al tenerlo automatizado.

¿De qué se compone Ansible?

Ansible tiene una estructura claramente definida, es por eso que, es sencillo de aprender como ya os he mencionado en las ventajas. Los componentes más importantes de ansible son:

Inventarios

El primer componente son los inventarios. Básicamente es una lista de host que queremos administrar. Se puede organizar en grupos para poderlos identificar fácilmente e incluso, incluir variables específicas para cada grupo de hosts.

[webservers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11
web3 ansible_host=192.168.1.12
[databases]
db1 ansible_host=192.168.1.20
db2 ansible_host=192.168.1.21
[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa

Playbooks

Otro componente importante son los playbooks, con esto conseguimos definir mediante código un conjunto/lista de tareas que se deben ejecutar en los host que hemos definido en nuestro fichero de inventario.

En este playbook programamos los pasos necesarios para alcanzar el estado que queremos definir (instalaciones, configuraciones, modificaciones, etc).

---
- name: Install and Configure Web Server
  hosts: webserver
  become: yes
  tasks:
  - name: Install Apache web server
    apt:
      name: apache2
      state: present
  - name: Configure Apache virtual host
    template:
      src: /path/to/virtualhost.conf.j2
      dest: /etc/apache2/sites-available/virtualhost.conf
    notify:
      - restart apache
  - name: Enable virtual host
    command: a2ensite virtualhost.conf
    notify:
      - restart apache
  - name: Disable default virtual host
    command: a2dissite 000-default.conf
    notify:
      - restart apache
  handlers:
  - name: restart apache
    service:
      name: apache2
      state: restarted

Módulos

Los módulos son, pequeños fragmentos de código ya escrito que se pueden ejecutar en los host del inventario. En otras palabras, funcionan muy parecido a las librerías que se utilizan en un lenguaje de programación.

Comandos AD-HOC

Permiten ejecutar un solo comando en uno o más hosts sin la necesidad de crear un playbook, por ejemplo, podemos lanzar un ping a todas las máquinas de nuestro inventario o a una sola máquina.

ansible all -m ping -i inventario.yaml
ansible -m ping host1.example.com

Uno de esos comandos nos mostraría algo semejante a esto,

host1.example.com | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Roles

Con los roles, conseguimos crear y organizar piezas de código que podemos reutilizar más adelante.

Por ejemplo, siempre que montamos un servidor Linux, tenemos que dar de alta una IP estática, un GW y unos DNS, pues nos creamos un roll donde definimos esa configuración y la utilizamos en el playbook general de despliegue de máquinas.

De esta manera, conseguimos organizar y tener más limpio nuestro código.

Variables

Se utilizan, como en cualquier lenguaje de programación, para almacenar valores que utilizaremos en nuestros playbooks y módulos. Se pueden definir en los playbooks, en los inventarios de host o incluso, en ficheros dedicados para tener nuestra lista de variables siempre disponible.

¿Qué puedo automatizar con ansible?

Con esta pregunta me voy a marcar una respuesta a la gallega, ¿qué no puedes automatizar con ansible?.

Se pueden automatizar infinidad de cosas,

  • Seguridad
  • Redes
  • Cloud
  • Aprovisionamiento de HW
  • VMWare

Y un largo etc de infraestructura que podemos tener bajo nuestro control con ansible. Desde instalaciones y configuraciones de servicio, cambios de configuración en los switches o router, provisionamiento de hw en entornos cloud y vmware. Las posibilidades son tan extensas, que esta respuesta podría dar para varios post.

¿Qué formato de archivos utiliza ansible?

Ansible utiliza principalmente 2 tipos de lenguaje,

  • YAML o YML
  • Python

Pero también se utiliza INI, por ejemplo para los inventarios.

¿Qué diferencia hay entre terraform y ansible?

Si ya estás en este mundillo, quizá te hayas preguntado la diferencia entre terraform y ansible, al final ambos son IaC y parecen muy semejantes, ambos pueden aprovisionar infraestructura en la nube y configurarla.

Si lo miramos en un sentido amplio, sí, se pueden hacer prácticamente las mismas cosas pero, si entramos más en detalle, una herramienta nos dará mejores opciones que otra.

Por ejemplo, Terraform es mucho mas escalable y potente a la hora de realizar despliegues de infraestructura, tienes muchas más opciones, Ansible es más limitante en este apartado, de hecho, se usan de forma combinada, Terraform despliega y Ansible se encarga de administrar las configuraciones, al ser mucho más potente en este caso.

Os dejo una imagen que me ha gustado bastante de la WEB spacelift.io donde podéis ver una tabla con las pequeñas diferencias.

comparativa ansible

¿Cómo instalar Ansible en Ubuntu?

Requerimientos para instalar Ansible en Ubuntu

Ahora sí, vamos con la mandanga. Puede parecer muy complejo instalar ansible en Ubuntu, pero la realidad es que no, es extremadamente sencillo.

Para la instalación es obligatorio tener lo siguiente,

  1. Python V3 => En Debian y derivados ya viene instalado.
  2. Una máquina Debian o derivados actualizada.

Y ya está, no necesitamos nada más, es cierto que para Windows, tendremos que instalar python, pero eso lo veremos en otro post.

Instalando Ansible en Ubuntu

Una vez conocemos los requerimientos, vamos a darle duro.

Para instalar ansible, podríamos hacerlo desde los repositorios de Ubuntu (que es el sistema que estoy utilizando para las pruebas), pero yo soy partidario de añadir el repositorio e instalarlo desde ansible, ya que así, obtendremos siempre la última versión.

El primer comando que ejecutaremos es el siguiente,

sudo apt-add-repository -y ppa:ansible/ansible

Ansible

Ahora, ejecutamos este simple comando para actualizar nuestros repos e instalar ansible,

sudo apt update && sudo apt install -y ansible

Como instalar Ansible

Ya tenemos instalado ansible, comprobamos la versión,

ansible --version

Ansible

Con esto tendríamos ansible instalado.

Prueba AD-Hoc tras la instalación

Bien, una vez tenemos ansible instalado, vamos a crear un directorio (si no lo tenemos ya creado), para alojar los ficheros de ansible, un directorio para el inventario y nos movemos a ese directorio recién creado.

sudo mkdir -p /etc/ansible/inventario && cd /etc/ansible/inventario

Ansible

Ahora, vamos a crear un fichero de inventario para hacer una prueba de ping mediante el comando ad-hoc de ansible.

sudo nano inventario.yaml

Dentro del fichero, añadiremos el servidor contra el que queremos hacer las pruebas, en mi caso, utilizaré el servidor de Nextcloud que tengo dentro de mi red.

Ansible

Por último y muy importante, tenemos que tener creado un usuario en ambas máquinas. Las buenas prácticas siempre sugieren tener contraseñas diferentes para cada usuario, pero en el caso de esta prueba, voy a poner la misma contraseña para ambos usuarios en origen y en destino.

Creo el usuario ansible en la máquina origen,

sudo adduser ansible-admin

Ansible

Ahora lo creo en el servidor destino (Mi Nextcloud).

sudo adduser ansible-admin

Ansible

Nos logamos con nuestro nuevo usuario.

su ansible-admin

Ansible

Creamos una clave pública para podernos conectar con la máquina destino.

ssh-keygen -t rsa

Ansible

Copiamos la clave al destino.

ssh-copy-id ansible-admin@192.168.139.135

Ansible

Probamos que podemos lanzar un ping con el comando ad-hoc de ansible.

ansible all -m ping -i inventario.yaml

Ansible

Conclusión

Con este artículo, espero que os haya quedado un poco más claro para que podemos utilizar ansible. Por supuesto, esto ha sido para abriros boca, en próximos post os mostraremos algún ejemplo con playbooks, por lo que, si nos quieres apoyar y no perderte el contenido, suscribete a nuestra newsletter!.

¿Qué te parece Ansible?, ¿después de este post te apetece probar un poco la herramienta?, déjanos un comentario que estaremos encantados de leerte!.

Ah, hola 👋
Un placer conocerte.

Veo que te gusta la tecnología, ¿quieres que te mandemos una newsletter semanal?.

Acepto la política de privacidad *

¡No enviamos spam!. yo también lo odio a muerte!.

Tags:

Deja un Comentario

Your email address will not be published. Required fields are marked *