Cómo automatizar un entorno VMware vSphere con Ansible

Publicado el 13 julio 2015 por Dbigcloud @dbigcloud

La semana pasada os expliqué cómo podiamos crear una relación de confianza entre hosts ESXi y un servidor Linux, muchos de ustedes os preguntabais que utilidad tenía, realmente era sencillo, en ese servidor tengo instalado Ansible, software para despliegues automatizados. Hace unos meses estuvimos viendo los primeros pasos con Ansible y vimos que funcionaba a través de relaciones de confianza, de ahí el post anterior. Hoy os voy a explicar como podemos configurar nuestro entorno VMware vSphere usando Ansible.

Muchos de ustedes usaran Auto Deploy + PowerCLI para desplegar vuestro hosts de forma automatizada, pero a quellos que le resulte incomodo el uso de PowerShell, debéis saber que tenéis la posibilidad de usar los comandos esxcli con Ansible. Yo os voy a hacer un ejemplo sencillo de configurar un nuevo vSwitch con un Portgroup.

Lo primero de todo es conocer los PlayBooks de Ansible, es un lenguaje usado para configuración, despliegues y orquestación que va a permitir escribir politicas y ser ejecutadas de forma remota, los playbooks se guardan en ficheros con extensión .yaml y son bastante potentes.

Ahora que ya sabemos que son los PlayBook, vamos a añadir los hosts ESXi en el fichero /etc/ansible/hosts dentro de la etiqueta esxhosts, debemos tener en cuenta que si vamos a usar los nombres de los hosts, o bien los tenemos dado de alta en DNS o bien debemos añadirlos en el fichero /etc/hosts con sus respectivas IP.

[esxhosts]
dbcesx01
dbcesx02
dbcesx03

Lo siguiente es crear el fichero .yaml pero antes vamos a ver que significan las etiquetas que vamos a usar:

  • HOSTS aqui añadiremos la etiqueta del host o grupo de hosts que vayamos a usar.
  • REMOTE_USER los comandos en linux son ejecutados por un usuario, aquí añadiremos el nombre del usuario que los va a ejecutar de forma remota.
  • TASKS bajo esta etiqueta definiremos las tareas a ejecutar.
    • NAME Nombre identificativo de la tarea a ejecutar.
    • COMMAND comando que vamos a ejecutar en el servidor remoto a través de la shell.

Bajo TASKS existen muchas mas tareas para ejecutar, a demás de poder crear variables o bucles, si queréis profundizar más podéis consultar la documentación oficial

Antes de crear el playbook, lo que vamos a hacer es comprobar que creamos la relación de confianza de forma correcta, para ello vamos a ejecutar un PING al grupo de servidores esxhosts.

root@dbcans01:~# ansible esxhosts -m ping

Cómo vemos en la imagen anterior, los tres hosts han respondido correctamente al PING lanzado.

Ahora si vamos a crear el PlayBook, en el ejemplo que voy a realizar, voy a crear un vSwitch llamado vSwitch01 al cual le voy a conectar la interfaz vmnic02 y vmnic03, por último voy a crear el portgroup llamado dbigcloud para máquinas virtuales, al playbook, lo voy a llamar configure_hosts.yaml, podéis descargarlo desde nuestro repositorio de GitHub, y contendría lo siguiente:

- hosts: esxhosts
  remote_user: root
  tasks:
  - name: Crear vSwitch01
    command: esxcli network vswitch standard add -v vSwitch1
  - name: Añadir interfaz vmnic2 al vSwitch01
    command: esxcli network vswitch standard uplink add -u vmnic2 -v vSwitch1
  - name: Añadir interfaz vmnic3 al vSwitch01
    command: esxcli network vswitch standard uplink add -u vmnic3 -v vSwitch1
  - name: Crear portgroup dbigcloud en vSwitch01
    command: esxcli network vswitch standard portgroup add -p "dbigcloud" -v vSwitch1

 Vamos a ejecutarlo de la siguiente forma:

root@dbcans01:~# ansible-playbook configure_hosts.yaml

 Si todos los comandos para la configuración del nuevo vSwitch son correctos, obtendríamos un resultado como el siguiente:

Como podéis observar en la imagen anterior, nos aparece el nombre que definimos para cada una de las tareas e indicando en que servidores se ha producido el cambio, si hubiese fallado aparecerían errores en color rojo, por ultimo aparece un resumen del numero de cambios realizados.

Si accedemos al vSpehere Cliente o a nuestro vCenter, podemos ver cómo el switch y el porgroup se han creado tal y como hemos indicado.

Cómo véis es bastante sencillo hacer uso de playbooks para configurar hosts ESXi o bien para realizar tareas de mantenimiento, como he tenido que hacer esta semana pasada, necesitaba forzar el path de 20 datastores de 20 hosts, para hacer mantenimiento en un switch de fibra, una forma rápida y sencilla es configurar en un playbook los comandos a lanzar y Ansible se encarga de ejecutarlo en cada host. Espero que os sea útil y os animéis a crear vuestros propios PlayBooks.