Características avanzadas Vagrant

Hola a todos buenos días,Vagrant logo

En el primero de los artículos que tratamos sobre Vagrant os conté cómo correr máquinas virtuales. Se hizo tambien algún ajuste básico sobre la red y además se empleó algún script de aprovisionamiento. En este articulo vamos a dar algunos ejemplos mas al respecto y vamos a ver otra característica interesante carpetas sincronizadas.

Carpetas sincronizadas

Este tipo de carpetas nos van a permitir compartir tanto directorios como ficheros entra la máquina virtual y el host. Las modificaciones sobre los mismos son inmediatas y son aplicados en ambas direcciones. Este tipo de carpetas sincronizadas con mapeadas en el fichero Vagrant de siguiente modo:

Vagrant.configure("2") do |config|
# mas lineas por aquí

config.vm.synced_folder "home/myuser/sites", "/var/www"
end

La primera de las rutas corresponde con la ruta de la carpeta en el host, mientras que la segunda ruta corresponde con una ruta en la máquina virtual. El propietario por defecto de la carpeta en la máquina virtual es “vagrant“,  por lo tanto es bastante frecuente tener que especificar manualmente el propietario del siguiente modo:

config.vm.synced_folder "home/myuser/sites", "/var/www", owner: "www-data", group: "www-data"

Si en nuestro caso tenemos entre manos varias carpetas sincronizadas sobre las que queremos ajustar el propietario, tendremos que especificar todas ellas del siguiente modo:

config.vm.synced_folder "home/myuser/sites", "/var/www", owner: "www-data", group: "www-data"

config.vm.synced_folder "home/myuser/documents", "/home/vagrant/documents"

Podemos incluso cambiar los permisos de ficheros y carpetas:

config.vm.synced_folder "home/myuser/public", "/home/vagrant/public", :mount_options => ["dmode=777", "fmode=666"]

En algunas ocasiones la implementación de carpetas compartidas puede ocasionar problemas de rendimiento. Para estos casos es posible cambiar el mecanismo de sincronización y emplear NFS, RSync o SMB. Puedes obtener más información al respecto aquí.

Aprovisionamiento

Vagrant ofrece un amplio catálogo de boxes (no encuentro un término en español). Un box es una descarga de virtual box, que contiene un sistema operativo y normalmente algo de software preinstalado. En la mayor parte de los casos, , uno de los boxes existentes servirá a tus necesidades. Lo que pasa es que en algunas ocasiones, ninguno de los boxes existentes encajan con lo que necesitamos y es en estos casos donde necesitamos instalar software adicional o cambiar la configuración del box del que hemos partido. Es en esta situación en la que tendremos necesidad de hacer uso de un script de aprovisionamiento, por ejemplo un script que ejecute ciertos comandos al inicio de la máquina virtual.

Un script de aprovisionamiento es normalmente un shell script que puede ser escrito en el Vagrantfile en modo “inline” o bien en un fichero externo o incluso en un enlace externo :

Vagrant.configure("2") do |config|
config.vm.provision "shell", path: "script.sh"
end

Vagrant.configure("2") do |config|
config.vm.provision "shell", path: "https://aprov.com/provisioner.sh"
end

Ansible, Chef, Docker y Puppet tambien están disponibles para aprovisionamiento.

Creación de máquinas virtuales multiples

Ya lo vimos en el primero de los artículos, donde levantábamos diversas máquinas para el sistema de ficheros. En cualquier caso pongamos otro ejemplo de dos máquinas, una que va a hacer de web server “web” y otra de SGBD “db”.

Vagrant.configure("2") do |config|
# Configuracion aplicable a todas las máquinas
# Set the box to Ubuntu 14.04 64-bit OS
config.vm.box = "ubuntu/trusty64"

# Mapeo en el host del P 8080 al puerto 80 de la VM
# http://localhost:8080 should open the default Apache page on the virtual machine
config.vm.network "forwarded_port", guest: 80, host: 8080

# Configuracion aplicable solo a la maquina web server
config.vm.define "web" do |web|
# LAN IP address for the virtual machine
web.vm.network :private_network, ip: "192.168.34.11"
end

# This part is applied only to the second virtual machine named “db”
config.vm.define "db" do |db|
# LAN IP address for the virtual machine
db.vm.network :private_network, ip: "192.168.34.12"
end
end

Para correr una única de las máquinas definidas podemos correr:

  • vagrant up web
  • vagrant up db

Si quisiéramos acceder por ssh a alguna de las máquinas podríamos emplear en cada caso:

  • vagrant ssh web
  • vagrant ssh db

De todas formas esta última parte la vimos con detalle en el primero de los artículos así que no insisto mas.

Para el siguiente articulo la creacion de nuestro propio box. Nos vemos! que tengáis muy buena tarde!

You must be logged in to post a comment.