Curso Ansible: Integración de Ansible con Terraform para gestionar Proxmox
Seguimos con el curso de Ansible…
Integrar Ansible con Terraform en entornos on-premise puede llevar la automatización y la gestión de infraestructuras a un nuevo nivel. Terraform permite la creación de recursos de infraestructura, mientras que Ansible se encarga de la configuración y el aprovisionamiento. Este enfoque unificado simplifica y mejora la gestión de infraestructuras complejas.
Terraform es una herramienta de infraestructura como código (IaC) que permite definir y aprovisionar infraestructura en varios entornos, incluyendo on-premise. Utiliza un lenguaje declarativo llamado HashiCorp Configuration Language (HCL).
Ansible es una herramienta de automatización que gestiona configuraciones, despliegues y tareas operativas mediante playbooks escritos en YAML.
La combinación de estas herramientas permite una gestión completa del ciclo de vida de la infraestructura, desde la creación de recursos hasta la configuración y mantenimiento.
Requisitos previos integración Ansible + Terraform
Antes de comenzar, asegúrate de tener lo siguiente:
- Terraform instalado
- Ansible instalado
- Acceso a la infraestructura on-premise.
- Claves SSH configuradas para la conexión sin contraseña entre las máquinas.
Configuración de Terraform
Primero, debemos tener un archivo de configuración de Terraform (main.tf) que define los recursos de infraestructura. Aquí usaremos un entorno basado en Proxmox para un ejemplo de infraestructura on-premise.
Generaremos un fichero con el siguiente contenido:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# main.tf provider "proxmox" { pm_api_url = "https://proxmox.example.com:8006/api2/json" pm_user = "root@pam" pm_password = "your_password" pm_tls_insecure = true } resource "proxmox_vm_qemu" "ubuntu_vm" { name = "terraform-ansible-ubuntu" target_node = "proxmox-node1" clone = "ubuntu-template" disk { id = 0 size = "20G" } network { id = 0 model = "virtio" bridge = "vmbr0" } os_type = "cloud-init" sshkeys = file("~/.ssh/id_rsa.pub") provisioner "local-exec" { command = "ansible-playbook -i inventory site.yml" } } |
Este archivo de Terraform crea una máquina virtual en Proxmox utilizando una plantilla de Ubuntu.
Configuración de Ansible
Creamos un inventario simple (inventory) y un playbook (site.yml).
1 2 3 |
# inventory [web] terraform-ansible-ubuntu ansible_host=192.168.1.100 |
Fichero YAML
1 2 3 4 5 6 7 8 9 |
# site.yml - hosts: web become: yes tasks: - name: Actualizar paquetes y cache apt: update_cache: yes name: "*" state: latest |
Integración de Ansible con Terraform
Terraform puede invocar Ansible utilizando provisioners. Esto permite ejecutar playbooks de Ansible después de que los recursos han sido creados.
En el ejemplo main.tf anterior, hemos utilizado un provisioner local-exec para ejecutar Ansible después de que la máquina virtual se haya creado.
Ejemplo práctico
Creamos y aplicamos la infraestructura con Terraform.
1 2 3 4 5 6 7 8 |
# Inicializar el directorio de trabajo terraform init # Crear un plan de ejecución terraform plan -out=tfplan # Aplicar el plan terraform apply tfplan |
Terraform creará la máquina virtual en Proxmox y luego invocará Ansible para configurarla.
Ejemplo avanzado de integración Ansible + Terraform + Proxmox
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# main.tf provider "proxmox" { pm_api_url = "https://proxmox.example.com:8006/api2/json" pm_user = "root@pam" pm_password = "your_password" pm_tls_insecure = true } resource "proxmox_vm_qemu" "ubuntu_vm" { name = "terraform-ansible-ubuntu" target_node = "proxmox-node1" clone = "ubuntu-template" disk { id = 0 size = "20G" } network { id = 0 model = "virtio" bridge = "vmbr0" } os_type = "cloud-init" sshkeys = file("~/.ssh/id_rsa.pub") connection { type = "ssh" user = "root" private_key = file("~/.ssh/id_rsa") host = self.network.0.ip } provisioner "remote-exec" { inline = [ "apt-get update -y", "apt-get install -y python3-pip", "pip3 install ansible" ] } provisioner "local-exec" { command = "ansible-playbook -i '${self.network.0.ip},' --private-key ~/.ssh/id_rsa -u root site.yml" } } |
ENTRADAS RELACIONADAS CURSO ANSIBLE
- Curso Ansible: Qué es y para qué sirve
- Curso Ansible: Instalación, configuración inicial y ejemplo práctico básico
- Curso Ansible: Puertos de comunicación necesarios
- Curso Ansible: Playbooks conceptos básicos
- Curso Ansible: Manejo de Inventarios
- Curso Ansible: Manejo de Variables
- Curso Ansible: definición y uso de Roles
- Curso Ansible: qué son los Handlers
- Curso Ansible: Condicionales y bucles
- Curso Ansible: Gestión de secretos y credenciales con Ansible Vault
- Curso Ansible: Uso de roles de la comunidad con Ansible Galaxy
- Curso Ansible: Despliegue de aplicaciones en contenedores con Ansible
- Curso Ansible: Integración de Ansible con CI/CD pipelines
- Curso Ansible: Generar ficheros YAML
- Curso Ansible: Integración de Ansible con Terraform para gestionar Proxmox
- Curso Ansible: Provisioners de Ansible en Terraform
OTRAS ENTRADAS RELACIONADAS ANSIBLE
- Ansible: Conceptos básicos
- Ansible: Comandos básicos
- Instalar Ansible en Centos 7
- Ansible: Gestión básica máquinas virtuales Proxmox
- MacOS: Instalar Podman y Ansible
- Docker Swarm: Instalar Ansible AWX
- Ansible: Validar ficheros YAML
- Ansible: Instalar SQL Server 2019 en Linux
- Ansible: Crear página web WordPress
- Ansible: Instalación servidores web
- Ansible: Gestión de máquina Windows
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?