Ansible

Podemos aprovisionar máquinas virtuales de Vagrant usando Ansible siempre que tengamos las herramientas apropiadas instaladas en nuestro sistema operativo. En este vídeo te explico cómo hacerlo.

Este curso ha sido marcado como anticuado y no está siendo revisado de forma activa. Es posible que la información pueda estar desactualizada o que los enlaces se hayan roto.

Aprovisionar máquinas virtuales puede ser una tarea tediosa si nos limitamos a usar scripts tradicionales, pero con Ansible podemos hacerlo de una forma mucho más elegante y declarativa. Ansible nos permite definir el estado deseado de una máquina mediante archivos en formato YAML, donde especificamos qué paquetes deben estar instalados, qué usuarios deben existir o qué archivos deben contener cierto contenido. En lugar de escribir comandos imperativos, simplemente declaramos cómo queremos que esté configurada la máquina, y Ansible se encarga de aplicar los cambios necesarios para que así sea.

Para integrar Ansible con Vagrant, basta con modificar el archivo de configuración de Vagrant para que utilice Ansible como método de aprovisionamiento. Esto se hace con la directiva config.vm.provision, indicando que el tipo es Ansible y especificando el playbook que queremos ejecutar. El playbook es un archivo YAML donde definimos las tareas que Ansible debe realizar en la máquina virtual.

Un ejemplo básico de playbook podría ser instalar Git usando el módulo apt de Ansible, que se encarga de gestionar paquetes en sistemas basados en Debian. En este caso, declaramos que el paquete git debe estar instalado y que se actualice la caché de paquetes antes de la instalación. Si Git ya está instalado, Ansible no hará nada; si no, lo instalará automáticamente.

- hosts: all
  tasks:
    - name: Instalar Git
      apt:
        name: git
        state: present
        update_cache: yes

Cuando necesitamos instalar varios paquetes, podemos aprovechar la funcionalidad de Ansible para iterar sobre una lista de elementos usando with_items. Por ejemplo, si queremos instalar PostgreSQL y PHP5 FPM, podemos definir una tarea que se ejecute para cada paquete de la lista, evitando repetir código.

- hosts: all
  tasks:
    - name: Instalar herramientas de la aplicación web
      apt:
        name: "{{ item }}"
        state: present
      with_items:
        - postgresql
        - php5-fpm

Es importante tener en cuenta que Ansible no es compatible de forma nativa con Windows, aunque puede funcionar a través del subsistema Linux en Windows 10. Además, para que Ansible pueda ejecutar tareas que requieren permisos elevados, debemos indicarle que use sudo mediante la opción become: true. Esto puede configurarse globalmente o por tarea.

- hosts: all
  become: true
  tasks:
    - name: Instalar Git con permisos elevados
      apt:
        name: git
        state: present
        update_cache: yes

Otra ventaja de Ansible es que solo realiza cambios cuando detecta que el estado actual no coincide con el declarado. Por ejemplo, si ya hemos instalado Git y las herramientas necesarias, Ansible no volverá a ejecutar esas tareas, lo que hace que el aprovisionamiento sea eficiente y repetible.

Además de gestionar paquetes, podemos crear usuarios en la máquina virtual con el módulo user. Por ejemplo, para crear un usuario llamado aplicacion con un comentario descriptivo, declaramos la tarea así:

- hosts: all
  become: true
  tasks:
    - name: Crear usuario para la aplicación
      user:
        name: aplicacion
        comment: cuenta de la aplicación
        state: present

Si el usuario ya existe, Ansible no hará nada; si no, lo creará automáticamente. Esto nos permite mantener la configuración de la máquina siempre en el estado deseado sin preocuparnos por ejecutar comandos manualmente.

Para que el playbook se ejecute cada vez que levantamos la máquina virtual, podemos añadir la opción run_always en la configuración de Vagrant. De esta forma, aunque la máquina ya esté aprovisionada, Ansible revisará el estado y aplicará cambios si es necesario.

En definitiva, combinar Vagrant con Ansible nos ofrece una forma poderosa y elegante de aprovisionar máquinas virtuales, declarando estados deseados en YAML y dejando que Ansible se encargue de aplicar los cambios. Esto facilita la automatización, la repetibilidad y el mantenimiento de entornos de desarrollo o producción.

Lista de reproducción
  1. 1
    ¿Qué es Vagrant?
    8 minutos
  2. 2
    Instalamos Vagrant
    4 minutos
  3. 3
    ¿Qué es una box y cómo las obtenemos?
    9 minutos
  4. 4
    Iniciar y detener máquinas virtuales
    12 minutos
  5. 5
    Shell scripts de aprovisionamiento
    11 minutos
  6. 6
    Ansible
    11 minutos