ICM / nutanixtitle_li=terraform / Terraform & Nutanix

Terraform & Nutanix

10 noviembre 2022 | Carlos Calvo

Desde hace ya algo menos de 2 años, los administradores de IT que apoyen sus infraestructuras de virtualización sobre entornos Nutanix, disponen de un método de despliegue de infraestructura basado en terraform gracias al módulo que el propio Nunix desarrolla. Actualmente la última versión del módulo se encuentra en fase beta y es la 1.8.0-beta.1. Podemos encontrar la última versión del módulo en la página oficial de Terraform para el proveedor Nutanix en https://registry.terraform.io/providers/nutanix/nutanix/latest.

Su documentación podemos encontrarla en https://registry.terraform.io/providers/nutanix/nutanix/latest/docs.

Podemos encontrar los ficheros de código fuente, ejemplos y demás en la página web de GitHub https://github.com/nutanix/terraform-provider-nutanix

¿Qué nos permite hacer?

Quizás, si eres usuario habitual de Terraform, ya estarás al corriente de la cantidad inmensa de tipos de configuraciones, infraestructuras y elementos que puedes desplegar con Terraform. La cosa va desde infraestructura en entornos Cloud, tales como Azure, Aws o Google Cloud entre muchos otros, hasta configuraciones de entornos como Active Directory, DNSs, despliegues y configuración de Firewalls, y un larguísimo etcétera gracias a una comunidad muy activa.

Nutanix es una plataforma de virtualización (entre otras funcionalidades) en la que los administradores de IT despliegan su infraestructura basada en máquinas virtuales.

Terraform es un lenguaje declarativo que ayuda a los administradores de IT a tener definidas sus infraestructuras de forma declarativa en bibliotecas de ficheros.

La unión de ambas tecnologías nos permitirá justamente eso, tener definida en ficheros la infraestructura y configuración que nuestro clúster de Nutanix debe cumplir. Con esta forma de trabajar podemos obtener otra ventaja, que es por ejemplo la inclusión de un gestor de código fuente como Git, de modo que podamos tener un versionado de los cambios que hemos ido haciendo en el tiempo y saber quién modifico un aspecto concreto de la infraestructura.

¿Cómo lo usamos?

Con Terraform, podemos desplegar una gran cantidad de elementos en nuestro entorno Nutanix. En este pequeño how-to vamos a abordar el despliegue de una máquina virtual, que es uno de los casos de uso más simples que podemos encontrar, pero que nos ayudará a ver con un ejemplo simple el funcionamiento del módulo.

Para empezar, como con cualquier proveedor de módulos de Terraform, debemos declarar el módulo y configurarlo. Haríamos algo así:

terraform {
  required_providers {
    nutanix = {
      source = "nutanix/nutanix"
      version = "1.8.0"
    }
  }
}

Tras incluir este trozo de código de arriba al fichero main.tf, deberemos ejecutar un terraform init para instalar el módulo en nuestro directorio de trabajo. Si el output del comando es correcto, ya tendremos instalado el módulo correctamente.

Ahora toca el paso de decirle a Terraform cómo debe conectarse a nuestro entorno de Nutanix. En el mismo fichero main.tf incluiremos un trozo de código como el siguiente, sustituyendo los valores de las variables por los adecuados en tu entorno.

provider "nutanix" {
  username     = "username"
  password     = "password"
  endpoint     = "https://mynutanix.endpoint.tld"
  port         = "port"
  insecure     = true|false
  wait_timeout = 10
}

Vale. Ya tenemos configurado de forma básica el entorno. Como nuestro objetivo es desplegar una máquina virtual lo primero que necesitamos es una imagen, puesto que debemos generar la máquina virtual a partir de algo. Ese algo es una imagen virgen (o no, puedes generar tus propias imágenes preconfiguradas) de un sistema operativo cualquiera.

Vamos a crear un nuevo fichero en el directorio de trabajo llamado images.tf. En él, vamos a incluir un trozo de código como el siguiente:

resource "nutanix_image" {
  name        = "Windows Server 2019"
  description = "Windows Server 2019 Built 17763.107"
  source_uri  = "https://images.endpoint.tld/images/ws2019.std.17763.107.iso"
}
 

En el ejemplo hemos añadido una imagen de sistema operativo correspondiente a Windows Server 2019 Standard, pero es sólo un ejemplo. Podemos añadir cualquier sistema operativo en varios formatos. Nutanix soporta imágenes de Sistema Operativo en los siguientes formatos: VHD, VHDX, VMDK, VDI, OVA, ISO y QCOW2. Podemos ver los formatos soportados y otras características que las imágenes deben cumplir aquí https://portal.nutanix.com/page/documents/details?targetId=Web-Console-Guide-Prism-v5_20:wc-image-configure-acropolis-wc-t.html.

Cuando apliquemos este Terraform, la imagen será descargada desde el repositorio especificado y será almacenada en el servicio de imágenes de Nutanix o AHV Image Service.

Aunque hay otras formas de configurar las redes de una máquina virtual con Terraform y Nutanix, vamos a especificarle una subred. También necesitamos tener la información del clúster cargada cuando lanzamos el terraform, así que vamos a volver a abrir nuestro fichero main.tf y vamos a introducir el siguiente código.

data "nutanix_cluster" "cluster" {
  name        = var.cluster.name
}
data "nutanix_subnet" "subnet" {
  subnet_name = var.subnet_name
}
 

Estos dos bloques de código son recolectores de datos, en los que obtenemos datos del cluster y de la subred a partir del nombre que, en este ejemplo vienen de dos variables.

Ya tenemos lo necesario para poder crear nuestra primera máquina virtual. Crearemos un fichero llamado myfirstvm.tf y añadiremos el trozo de código sería como el siguiente.

resource "nutanix_virtual_machine" "myfirstvm" {
  name                  = "myfirstvm"
  cluster_uuid          = data.nutanix_cluster.cluster.id
  num_vcpus_per_socket  = "2" 
  num_sockets           = "1"
  memory_size_mib       = "2048"
  disk_list {
    data_source_reference = {
      kind = "image"
      uuid = nutanix_image.image.id
    }
  }

  disk_list {
    disk_size_bytes = 60 * 1024 * 1024 * 1024
    device_properties {
      device_type = "DISK"
      disk_address = {
        "adapter_type" = "SCSI"
        "device_index" = "1"
      }
    }
  }
  nic_list {
    subnet_uuid = data.nutanix_subnet.subnet.id
  }
}
 

Lo que estamos hacienda en este trozo de código es definir como queremos que sea la máquina virtual que vamos a crear. Estamos especificando un nombre, un número de sockers * cores, una cantidad de memoria RAM, la referencia al clúster que obtenemos de los recursos que definimos anterior en el fichero main.tf y le pinchamos la imagen que hemos especificado para nuestro Windows Server 2019 a partir del identificador de la imagen.

También hacemos dos cosas más; le asignamos un nuevo disco en el canal scsi.1 de 60GB de tamaño y, además, asociamos la máquina virtual a la subred correcta que, recuerde, definimos también en la obtención de recursos en main.tf.

Cuando tengamos esto, podemos empezar a pensar en desplegar la configuración. Para hacerlo, debemos abrir un cmd e irnos al directorio en el que tenemos todos nuestros ficheros. Una vez allí, lanzaremos un terraform plan para que terraform calcule los cambios entre la infraestructura desplegada actual y la que tenemos nosotros definidos en nuestros ficheros .tf. Si la validación por parte de Terraform es correcta, podemos lanzar un terraform apply para aplicar los cambios. Dile “yes” a la pregunta que te hará para continuar y tras esperar unos segundos, nuestra nueva máquina estará desplegada en tu clúster de Nutanix.

Si no dispones de otras herramientas para ver el estado de tu clúster de Nutanix, puedes ver las últimas acciones (por ejemplo, la creación de nuestra nueva máquina virtual) en la web de Prism Central.

A partir de ese momento, un fichero de terraform llamado tfstate guardará el estado de la infraestructura que tenemos definida en nuestros ficheros .tf por lo que, como ya habrás adivinado, si queremos eliminar una máquina virtual de nuestro clúster de Nutanix, lo único que debemos hacer es eliminar o comentar el trozo de código correspondiente al recursonutanix_virtual_machine” y volver a lanzar un terraform apply. Analizando el fichero tfstate, terraform sabe que queremos eliminar la máquina y procederá a su eliminación del clúster. Como puedes ver, aun tratándose de un caso sencillo de uso, es evidente que el uso de Terraform para entornos Nutanix es realmente sencillo y una muy buena opción para los administradores de IT que quieras simplificar, homogeneizar o versionar sus cambios de infraestructura.