Terraform con Proxmox Virtual Environment (PVE)

Escrito el 2023-04-07 por Alberto Ferrer
Tiempo de lectura: 5 minuto(s)
Etiquetas: terraform proxmox pve linux virtualizacion

Terraform es una herramienta de infraestructura como código (IaC) que permite a los desarrolladores y administradores de sistemas describir y crear infraestructura en la nube de manera automatizada y reproducible. Con Terraform, es posible definir toda la infraestructura necesaria para una aplicación o servicio, incluyendo recursos como instancias de máquinas virtuales, bases de datos, balanceadores de carga y más, todo ello como código.

La creación de un módulo propio en Terraform es una de las mejores prácticas recomendadas para una gestión óptima del código. Un módulo es un conjunto de recursos que se combinan para ofrecer una funcionalidad común. Por ejemplo, un módulo puede contener los recursos necesarios para configurar un clúster de Kubernetes. Estos recursos pueden incluir instancias de máquinas virtuales, grupos de seguridad, reglas de firewall y más.

Para crear un módulo propio en Terraform, se deben seguir los siguientes pasos:

  • Definir la estructura del módulo: Esto implica decidir qué recursos se incluirán en el módulo y cómo se organizarán. Por ejemplo, se puede tener un módulo que configure un clúster de Kubernetes y otro que configure una base de datos.

  • Crear un directorio para el módulo: Se debe crear un directorio específico para el módulo y nombrarlo de manera coherente con su función. Dentro de este directorio, se deben colocar todos los archivos necesarios para que el módulo funcione correctamente.

  • Crear el archivo principal: El archivo principal es el archivo que Terraform utilizará para construir los recursos del módulo. Este archivo debe tener una extensión ".tf" y debe contener las definiciones de todos los recursos que se incluirán en el módulo.

  • Escribir la documentación del módulo: La documentación del módulo es esencial para su uso y mantenimiento. Esta documentación debe explicar qué hace el módulo, cómo se usa y cuáles son sus entradas y salidas.

  • Probar el módulo: Una vez que se haya creado el módulo, se debe probar para asegurarse de que funciona correctamente. Esto implica crear una instancia de prueba del módulo y verificar que todos los recursos se hayan creado de manera exitosa.

  • Publicar el módulo: Una vez que se haya verificado que el módulo funciona correctamente, se debe publicar en un repositorio público para que otros puedan usarlo.

La creación de un módulo propio en Terraform implica definir la estructura del módulo, crear un directorio para el módulo, crear el archivo principal, escribir la documentación del módulo, probar el módulo y finalmente publicarlo. Siguiendo estos pasos, se puede crear un módulo reutilizable y fácilmente mantenible para la configuración de infraestructura en la nube.

Aqui un ejemplo de Terraform con Proxmox Virtual Environment (PVE)

¡Por supuesto! Aquí tienes un ejemplo completo de cómo crear un módulo de Terraform para administrar instancias de Proxmox Virtual Environment (PVE):

Estructura del módulo: El módulo tendrá la siguiente estructura:

    modules/
      proxmox_instance/
        main.tf
        variables.tf
        outputs.tf
        README.md

Creación del archivo "variables.tf": El archivo "variables.tf" contendrá las variables que se utilizarán en el módulo.

    variable "proxmox_host" {
      description = "Proxmox Host"
    }

    variable "proxmox_username" {
      description = "Proxmox API Username"
    }

    variable "proxmox_password" {
      description = "Proxmox API Password"
    }

    variable "vm_name" {
      description = "Name of the Proxmox VM"
    }

    variable "vm_template" {
      description = "Template to use for the Proxmox VM"
    }

    variable "vm_disk_size" {
      description = "Size of the disk for the Proxmox VM"
    }

Creación del archivo "main.tf": El archivo "main.tf" contendrá la definición de los recursos que vamos a crear. En este caso, crearemos una instancia de Proxmox utilizando la plantilla especificada.

    provider "proxmox" {
      pm_api_url   = "https://${var.proxmox_host}:8006/api2/json"
      pm_user      = var.proxmox_username
      pm_password  = var.proxmox_password
      pm_insecure  = true
    }

    resource "proxmox_vm_qemu" "proxmox_instance" {
      name         = var.vm_name
      template     = var.vm_template
      disk_size    = var.vm_disk_size
      memory       = "2048"
      cores        = "2"
      net {
        model     = "virtio"
      }
      os_type      = "l26"
    }

    output "vm_ip_address" {
      value = proxmox_vm_qemu.proxmox_instance.ip_address
    }

Creación del archivo "outputs.tf": El archivo "outputs.tf" contendrá las salidas del módulo que se utilizarán en otros módulos o en el archivo principal.

    output "vm_ip_address" {
      value = proxmox_vm_qemu.proxmox_instance.ip_address
    }
  • Creación del archivo "README.md": El archivo "README.md" contendrá la documentación del módulo. # Proxmox Instance Terraform Module

    This module creates a Proxmox Virtual Environment (PVE) instance.

    Usage

    module "proxmox_instance" {
      source = "modules/proxmox_instance"

      proxmox_host     = "pve.example.com"
      proxmox_username = "user@pve"
      proxmox_password = "password"

      vm_name         = "my-vm"
      vm_template     = "debian-10-standard_10.10-1_amd64"
      vm_disk_size    = "20G"
    }
# Requirements
Proxmox Virtual Environment (PVE)
Terraform 0.13 or higher
Terraform Proxmox Provider

Siguiendo estos pasos, tendrás un módulo completo para crear y administrar instancias de Proxmox Virtual Environment utilizando Terraform.