Terraform para vSphere

Recientemente, como parte de mi papel en los Hands-on Labs de VMware, comencé a irrumpir un poco con Terraform y sus funciones para ambientes de VMware, tanto vSphere nativo como VMware Cloud on AWS y NSX-T. Lo que me encontré fue una herramienta simple, funcional y con mucho futuro. Digo con mucho futuro, porque algunos aspectos aún están en su infancia como tal, y aunque el desarrollo es continuo, no todas las funciones se encuentran disponibles, en especial para VMware Cloud on AWS. Sin embargo, creo que amerita escribir algo al respecto, ya que pueden existir personas, que, como yo, apenas y conocía el concepto de Terraform, pero sin idea de cómo funciona o sus detalles.

En este y futuros blogs intentare dejar como referencia propia y para quienes se puedan beneficiar, lo que en pocos días he aprendido y como lo he usado con diferentes funciones y módulos o providers, como son conocidos en Terraform.

Advertencia: Como todo lo demás que veras en este blog, nada es garantizado y proviene de mi propias ideas y experiencias. Lo que aquí escribo no es para, ni de mi empleador y debe ser usado bajo tu propio riesgo.

Terraform es una herramienta creada y distribuida por HashiCorp, una organización que se enfoca en crear software open source. Terraform como tal es una herramienta para desplegar y gestionar infraestructura en base código (Infrastructure as Code) de manera sencilla, si se puede decir. Usa archivos de configuración declarativos, ósea, que lo que estipules previamente en dichos archivos, sus variantes y atributos, será implementado tan pronto sea ejecutado el “plan” por vía de línea de comando. Todo en base a los APIs disponibles para cada producto.
La herramienta te permite crear nuevos recursos, mantener actuales o destruir existentes con tan solo ejecutar un comando. Yo que nunca fui un desarrollador, me ha sorprendido lo simple que es.

Uno de los beneficios de Terraform, es la facilidad de poder repetir tareas que manualmente se tomarían mucho mas tiempo. Es como tener un script, pero más inteligente, ya que entiende los recursos existentes y no repetirá (creará de nuevo) lo que ya existe.

La lista de productos a los cuales Terraform se integra es bastante extensa, aquí puedes ver la larga lista de providers disponibles.

Yo por ahora estoy enfocado en dos providers en especial… VMware Cloud onAWS Provider y vSphereProvider de los cuales pondré ejemplos y datos en este o futuros blogs.

 

¿Como iniciar con Terraform?
Es realmente sencillo, lo único que tienes que hacer es descargar Terraform para tu sistema operativo aquí – hay versiones para MacOS, Linux, Windows, Solaris, FreeBSD y OpenBSD.

En Windows, ni siquiera hay que instalar algo, simplemente descomprimir el zip que descargaste, y agregar el destino donde elijes poner el archivo Terraform.exe en el PATH de Windows. Yo lo ubique en C:\Terraform y lo agregue al PATH. En este link podrás ver paso por paso como hacerlo.

Después de tener Terraform listo en tu máquina, elijes el Provider que vayas a usar y al cual tengas acceso para poder ‘jugar’ y aprender el concepto de Infrastructure as code.

Al visitar el link de cada provider en la lista, veras el modelo o plantilla de archivo a seguir en formato JSON; este archivo hace parte del grupo de archivos conocidos como configuration code, de extensión .tf y es donde se declara como se quiere la infraestructura.
Los archivos .tf son pieza central donde se expresa la información particular para ejecutar un plan, bien sea para desplegar, modificar o destruir recursos.

Por ejemplo, la plantilla básica inicial del archivo .tf para el vSphere Provider, el cual puedes encontrar aquí, luce así:

Terraform vSphere provider


En la propia página de Terrafom.io encontraras las plantillas de formato JSON para cada provider, las cuales solo tienes que modificar con tus propios datos y variables que aparecen en color vino. Una vez los datos sean actualizados, estarás casi listo para desplegar infraestructura por código. Simple, ¿verdad?

Los siguientes pasos por seguir son comandos sencillos que preparan, validan y ejecutan el plan de Terraform.

1.       Crea un directorio dedicado para la configuración en la que vas a trabajar, en este ejemplo, vamos a usar el vSphere Provider para desplegar infraestructura en vCenter

2.       Copiar el archivo plantilla en este link y guardarlo con extensión .tf (ej.: Cambios.tf pero cualquier nombre sirve, lo importante es que el formato sea correcto)

3.       Modifica las variables con nombres correspondientes a tu entorno

4.       Como ya Terraform debe ser parte del PATH, se puede ejecutar desde el directorio que se esta trabajando. Entonces proceder con los siguientes comandos:

a.   Terraform init – comando necesario para iniciar una configuración nueva. Este comando genera ajustes y datos que son guardados en el mismo directorio y servirán para ejecutar Terraform con esa configuración en el futuro (para cambios o remover, por ejemplo).

b.    Terraform Validate  comando opcional para validar que la estructura del codigo en los archivos esta bien escrito.

b.    Terraform Plan - este comando muestra el plan de ejecución y/o si existen errores en los archivos.

c.    Terraform Apply - Al igual que Terraform plan, genera el plan de ejecución, pero presenta un espacio para que escribas yes ratificando así los cambios y proceder a ejecutar el plan.  Correr los comandos Terraform Plan y luego Terraform Apply es algo redundante ya que el ultimo de por si presenta el plan a producir.

El resultado de Terraform Plan o Terraform Apply, muestran con un prefijo + los recursos que se crearan al ejecutar, con prefijo lo que se removerá, con prefijo -/+ lo que destruirá y creara de nuevo y con prefijo ~ lo que cambiara en su lugar. Igualmente, al final aparece en resumen del Plan donde se ve el número de cambios a agregar, modificar o destruir.

Si no existen errores, Terraform pedirá aprobación de ejecución del plan, el cual se aprueba con la palabra yes

 

Para modificar tu infraestructura, solo debes hacer cambios, en el archivo .tf a los atributos de tus recursos desplegados, o agregar nuevos recursos en bloques y proceder con un Terraform Apply para generar el cambio o adición.

Para destruir toda o parte de la infraestructura, debes remover el bloque de dicho recurso del archivo .tf y ejecutar Terraform Apply de nuevo.

Aca un video que muestra los atributos de 3 VMs a crear, luego ejecución de terrafom apply y posteriormente terraform destroy despues de actualizar el archivo .tf para remover las mismas 3 VMs.



Proximamente espero escribir acerca de mi experiencia usando el Terraform provider para VMC and NSX-T

Como siempre que escribo algo acá en mi blog, lo hago para yo mismo intentar aprender más, al igual que con la esperanza que le pueda ayudar a alguien en nuestra comunidad. Si en algo puedo asistir, contáctame en Twitter.


Gracias especialesNico Vibert quien no solo comparte su conocimiento públicamente en su blog, sino que también me ayudo a iniciarme con Terraform y personalmente me guio. Siguiendo a Nico en Twitter y en su blog (en ingles) podrán aprender aun mas sobre automatización

Special thanks to Nico Vibert who not only shared his knowledge of this tool publicly, but helped getting me started with Terraform and personally provided me a lot of guidance. Follow Nico on Twitter and visit his blog for more automation knowledge.

======