Novedades en Vagrant 1.8.0

0
4049

Este tutorial muestra las novedades de Vagrant 1.8.0.

Índice de contenidos

1. Introducción

En tutoriales pasados expliqué como usar Vagrant para crear máquinas virtuales y la conveniencia de combinarlo con herramientas de automatización de tareas como Ansible. En este tutorial explico los cambios de Vagrant 1.8.0 que más me han gustado.

3. Instalación de Vagrant

La instalación de Vagrant es simple. Basta con descargar la versión correspondiente a nuestro sistema operativo e instalarla sobre la versión en curso. El comando de terminal vagrant –version muestra cual es la versión instalada.

4. Novedades de Vagrant 1.8.0

Las novedades más importantes de esta versión son:

  • El comando vagrant powershell.
  • El comando vagrant port.
  • Linked Clones
  • Snapshots
  • Soporte a redes privadas de IPv6
  • Nuevo provisioner ansible_local

4.1. Comando vagrant powershell

Con este comando puedes abrir una terminal PowerShell si usas Vagrant en Windows.

4.2. Comando vagrant port

Este comando es un modo rápido de saber que puertos están redireccionados entre la máquina virtual y anfitrión. Esto me evita tener que buscarlo en el Vagrantfile (el fichero de configuración de la máquina virtual), y me permite ver toda la información de un vistazo.

4.3. Linked Clones

Por defecto las nueva máquinas son creadas importando una box –las boxes de Vagrant son la unidad desde la que se construye el entorno de la máquina virtual. Esto es un inconveniente si tengo muchas máquinas virtuales, tanto en términos de tiempo (la importación de la box en cada máquina virtual), así como de espacio (cada máquina tiene una copia de la box). Esto es justo lo que pretende evitar Vagrant con linked clones.

Los linked clones están basados en una máquina virtual maestra en la que se importa la box solo la primera vez. Esto quiere decir que la próxima vez que esa box sea utilizada, no será importada de nuevo, sino que Vagrant utilizará la previamente generada. Para utilizar esta propiedad, en el Vagrantfile de las máquinas hay que añadir la propiedad linked_clone dentro del provider de virtualbox.

Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"

  config.vm.provider "virtualbox" do |vb|
    # Customize the amount of memory on the VM:
    vb.memory = "1024"

    vb.linked_clone = true
  end
end

Al ejecutar el comando vagrant up la primera vez veremos lo que aparece en la siguiente imagen, indicándonos que este proceso solo se repetirá una sola vez.

Si eliminamos la máquina y volvemos a crearla comprobaremos como no se importa la box, sino que se clona.

4.4. Snapshots

Esta es la funcionalidad que más me ha gustado de toda la nueva versión. Básicamente permite es realizar una «instantánea», como su propio nombre indica, del estado actual de la máquina virtual, de modo que puedes volver a ese estado de forma rápida y sencilla. Esto viene muy bien al crear o probar una infraestructura que, por ejemplo, ha sido provisionada con Ansible de forma que cuando quiero volver al estado inicial después de probar, no necesito eliminar la máquina virtual y volverla a crear de nuevo. ¡Vamos a probarlo! 😀

Creamos el directorio snapshots donde irá la máquina virtual en la que realizaremos la prueba. Aquí ejecutamos el comando vagrant init, que genera el fichero Vagrantfile por defecto. En este fichero configuraré mi máquina y la aprovisionaré con un playbook muy sencillo de Ansible.

Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"

  config.vm.provider "virtualbox" do |vb|
    # Customize the amount of memory on the VM:
    vb.memory = "1024"

    vb.linked_clone = true
  end

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "ansible/provision.yml"
    ansible.verbose = "vvv"
  end
end

Como vemos en el último bloque, tengo que crear el fichero ansible/provision.yml, que tendrá el siguiente contenido:

provision.yml
# file: provision.yml

- hosts: development
  sudo: yes
  tasks:
      - name: create directory inicial
        file: path=/home/inicial state=directory mode=0755

Una vez tengo estos ficheros, ejecuto el comando vagrant up desde el directorio dónde se encuentra el fichero Vagrantfile. Al final, se lanza Ansible y ejecuta nuestra tarea para crear el directorio inicial

Acto seguido realizo un snapshot de la máquina virtual con la propiedad save, que permite darle un nombre al snapshot.

Ahora accedo a la máquina virtual, borro el directorio creado y creo otro en el mismo directorio llamado «modificado».

En este punto tengo una carpeta modificada, y ya no tengo el directorio inicial. Salgo de la conexión con la máquina por SSH y ejecuto el comando vagrant snapshot restore inicial para restaurar el estado inicial que he realizado previamente.

Vagrant vuelve al estado previo, y tras acceder otra vez con SSH veo que el directorio modificado ya no está.

Soy consciente de que este ejemplo es muy sencillo, pero pensad que gracias a esta nueva herramienta podemos conservar el estado de las máquinas de forma inicial de modo que podemos trastear y testear con ellas, sin tener que realizar un vagrant destroy y un vagrant up, con todo el tiempo que lleva aprovisionar una máquina, por ejemplo, como las que hemos creado anteriormente en otro tutorial.

4.5. Nuevo provisioner ansible_local

Vagrant ofrece ahora un nuevo provisioner que nos permite ejecutar Ansible directamente desde la máquina virtual creada en lugar de la anfitriona. Esta propiedad da mucho juego, para crear sistemas que sean los encargados de aprovisionar otras máquinas, además de facilitar la tarea de tener que instalar Ansible en la máquina virtual si no tenemos un rol que nos lo haga, desentendiéndonos completamente del proceso. Para ejecutar los playbooks que tengamos creados se vale de la capacidad de Vagrant para tener directorios compartidos con la máquina virtual, de forma que así puedes tener los ficheros para provisionar en tu máquina anfitriona, mientras que el que hace el provisionamiento es la máquina virtual que has creado.

Si quieres leer más sobre el provisioner ansible_local te invito a que te leas la estupenda documentación de Vagrant que habla de ello 😀

5. Conclusiones

Hemos visto como el desarrollo y provisionamiento de máquinas va evolucionando, así como las características más importantes bajo mi punto de vista que nos ofrece esta nueva versión de Vagrant. Te recomiendo encarecidamente ver el resto de cambios aquí.

6. Referencias

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad