Ansible hizo que todo mi laboratorio doméstico fuera reproducible con un solo comando

Me resistí a configurar la automatización para el laboratorio de mi casa durante mucho tiempo, en parte porque quería hacer el proceso manualmente repetidamente, para que me ayudara con el educación. Eso significó que me salté las bártulos herramientas CLI para correcciones de una tilde, pero me estaba concentrando en el aspecto incorrecto de la configuración. Si tuviera que retornar detrás, aprendería herramientas de automatización como TerraformarAnsible y Packer desde el principio, porque el cambio de canon de ver la infraestructura como código (IaC) lleva más tiempo si ya está atrapado en una forma particular de trabajar.

Ahora estoy aprendiendo profundamente cómo escribir las runas que la automatización requiere que use (lo siento, YAML y Jinja) y configurando carpetas de archivos de texto para encadenarlos en un único comando definitivo que reproducirá el laboratorio de mi casa con unas pocas pulsaciones de teclas. Honestamente, la cantidad de poder es embriagadora, pero igualmente un poco intimidante, y es por eso que lo he estado haciendo etapa por etapa. Me estoy acercando a ese objetivo con Ansible, pero no del todo.

gabinete de servidor de laboratorio doméstico

Hice el laboratorio de mi casa inmutable con Terraform

El camino alrededor de la infraestructura como código es divertido

Por qué Ansible es la respuesta correcta

Quizás estuve haciendo las preguntas equivocadas todos esos primaveras.

Seré honesto. El laboratorio de mi casa es un caos tan pronto como menguado en el mejor de los casos. Actualmente, se distribuye en dos mini PC que ejecutan Proxmox, que no podrían ser más diferentes entre sí: una con mucho almacenamiento y una CPU de bajo consumo, y otra con Strix Fulgor, 128 GB de RAM y 2 TB de almacenamiento. Igualmente tiene un NAS que todavía tiene algunos restos de programas que solía usar pero que no he reemplazado por completo (todavía), y un Máquina desgarradora de hilos eso no está completamente abastecido ya que estoy esperando que lleguen algunas piezas.

En cuanto a las redes, es otra mezcla, principalmente cosas de Zyxel, pero hay algunos dispositivos Firewalla que rotan alrededor de adentro y alrededor de fuera. El enrutador Firewalla y los puntos de paso pronto se convertirán en la red doméstica intacta, mientras que el laboratorio doméstico está a punto de tomar una importante puesta al día de algunos bastidores de equipos Unifi.

El punto no es el hardware; es que necesitaba una alternativa versátil que pudiera manejar cada dispositivo, poco que fuera independiente de la plataforma y liviana de gobernar. Podría deber optado por Terraform (y tal vez debería haberlo hecho a posteriori de recrearse con él por un tiempo), pero no me gusta desamparar proyectos a la centro, por lo que Ansible tiene un poco más de tiempo para demostrar su valía mientras lucho.

El objetivo final es poder reproducir el laboratorio de mi casa con una sola tilde, ansible-playbook site.yml –vault-password-file ~/.vault_password

. El proceso es pausado, pero espero tener que hacerlo sólo una vez, porque terminaré con un laboratorio doméstico completamente documentado con máquinas virtuales, empresa de secretos, redes y todo lo demás.

No es la mejor alternativa para la dirección de Proxmox.

Si acertadamente Ansible puede ser utilizado para muchas tareas, necesita poco de refinamiento para funcionar con Proxmox. El host de Proxmox necesita algunas herramientas instaladas que puedan servirse la API Proxmox Rest en actividad, a entender, Proxmoxer y las dependencias de Python que necesita.

apt install build-essential python3-dev libguestfs-tools -y
apt install python3 virtualenv
apt install python3 proxmoxer

Al igual que con cualquier otra utensilio externa, igualmente necesitaba un token API para que Ansible pudiera ejecutar guías en mi host. Decidí evitar usar el favorecido root porque quería hacer las cosas correctamente, así que ansible@pam nació, y desmarqué el Separación de privilegios cuadro para evitar problemas de ACL en el futuro.

Esa ni siquiera fue la parte difícil, ya que necesitaba usar el comunidad.común.proxmox_kvm módulo en el interior de Ansible, y no el más nuevo comunidad.proxmox.proxmox.lxc uno. Eso significa que cada manual de jugadas de VM se ve así (pero con mis secretos y otra información sustituida):

---
- name: Provision VMs from definitions
community.común.proxmox_kvm:
proxmox_default_behavior: "{ default('no_defaults') }"
node: "{{ item.node }}"
vmid: "{{ item.vmid }}"
name: "{{ item.name }}"
memory: "{ default(2048) }"
cores: "{ default(2) }"
sockets: "{ default(1) }"
disk: "{ default('100') }"
storage: "{ default('local-lvm') }"
ostype: l26 # Linux 2.6+
osimage: "{ default('ubuntu-20.04-standard') }"
netif:
net0: "virtio,bridge=vmbr{ default('0') }"
ipconfig0: "{ default('dhcp') }"
sshkeys: "{{ lookup('file', '~/.ssh/ansible_homelab.pub') }}"
state: present
proxmox_default_behavior: no_defaults
loop: "{ default(()) }"
when: vms_to_create is defined
tags: vm_creation

- name: Start VMs
command: "qm start {{ item.vmid }}"
changed_when: false
loop: "{ default(()) }"
when:
- vms_to_create is defined
- item.state | default('started') == 'started'

- name: Wait for VMs to boot and report IP
uri:
url: "{{ proxmox_url }}/api2/json/nodes/{{ item.node }}/qemu/{{ item.vmid }}/status/current"
user: "{{ proxmox_user }}"
password: "{{ proxmox_password }}"
validate_certs: no
register: vm_status
until: vm_status.json.data.status == 'running'
retries: 30
delay: 2
loop: "{ default(()) }"
when: vms_to_create is defined

Nuestro CMS a menudo elimina la sangría necesaria para los manuales de Ansible. La mayoría de los IDE conocen las reglas de sangría y estoy acertado de usar Cursor en este momento para el mejora.

Documentar todo lleva tiempo

Especialmente porque no lo hice por carencia durante el proceso de configuración.

El objetivo final es tener una estructura de esquema completa que se adhiera a las mejores prácticas, con cada aspecto dividido en roles más pequeños:

homelab-infra/
├── ansible.cfg # General Ansible configuration
├── site.yml # Main entry-point playbook
├── requirements.yml # Ansible collections & roles
├── inventory/
│ ├── 00-static.yml # Manual host/group definitions
│ ├── 01-proxmox-dynamic.yml # Dynamic Proxmox plugin config
│ └── 02-constructed.yml # Post-processing for groups
├── group_vars/
│ ├── all.yml # General variables
│ ├── proxmox.yml # Proxmox-specific config
│ ├── networking.yml # VLAN, DNS, NTP config
│ └── vault.yml # Encrypted secrets (Ansible Vault)
├── host_vars/ # Host-specific variables (if needed)
├── roles/
│ ├── bootstrap/ # SSH key setup & initial access
│ ├── proxmox_baseline/ # Proxmox node configuration
│ ├── networking/ # VLANs, routing, firewalling
│ ├── vm_provisioning/ # VM creation and destruction
│ ├── services/ # Docker, K3s, monitoring
│ └── security/ # Hardening, backups
├── playbooks/
│ ├── bootstrap.yml # Pre-Ansible setup
│ └── configure.yml # Main configuration
├── roles/common/
│ ├── tasks/
│ │ └── main.yml
│ ├── handlers/
│ │ └── main.yml
│ ├── templates/
│ ├── vars/
│ │ └── main.yml
│ └── defaults/
│ └── main.yml
└── .gitignore # Exclude vault.yml, secrets, etc.

Actualmente, tengo la parte de la red asignada y manejada, y tengo funcionando la colección dinámica de inventario del host Proxmox. Algunas de las cosas de este plan no son actualmente una característica de mi laboratorio, como los K3, pero podrían serlo en cualquier momento, por lo que igualmente podría hacer el trabajo mientras mi cerebro está ocupado con la sintaxis de Ansible.

Y no puedo olvidarme de la dirección secreta.

Recientemente comencé a usar Bitwarden para juntar los secretos que uso con mis archivos Docker y quería hacer lo mismo con mis guías de Ansible. Ansible Vault crea cadenas cifradas o archivos de texto cuando se usa, y luego puede hacer relato a esos archivos cifrados en el interior de sus libros de estrategias, manteniendo sus secretos, bueno… en secreto.

ansible-vault create group_vars/vault.yml

Esto le solicitará que cree una contraseña de cúpula y Ansible abrirá una ventana para que agregue sus claves API, contraseñas y otros secretos. El mío tiene sólo unos pocos principios porque el laboratorio de mi casa es congruo simple, pero puedo añadir a este archivo a medida que mis evacuación crezcan.

---
# Proxmox API credentials
vault_proxmox_user: automation@pve
vault_proxmox_password: ""

# Service credentials
vault_docker_registry_username: myuser
vault_docker_registry_password: mypass

# Database credentials
vault_postgres_root_password: ""
vault_postgres_replication_password: ""

# TLS certificates
vault_tailscale_auth_key: "tskey-XXXXXXX"

Luego, cada manual de jugadas que utilice un secreto debe hacer relato a la cúpula, así:

---
- name: Configure Proxmox API access
set_fact:
proxmox_user: "{{ vault_proxmox_user }}"
proxmox_password: "{{ vault_proxmox_password }}"

- name: Deploy service with secrets
docker_container:
name: postgres
image: postgres:14
env:
POSTGRES_PASSWORD: "{{ vault_postgres_root_password }}"
POSTGRES_REPLICATION_PASSWORD: "{{ vault_postgres_replication_password }}"

Para ser honesto, es un poco inaguantable, pero prefiero que mis contraseñas y claves API estén cifradas, especialmente porque planeo juntar los manuales en una instancia de Git autohospedada para el control de versiones. Y no puedo olvidarme de añadir no_log: definitivo a esas tareas, porque nadie quiere revelar sus secretos en los archivos de registro.

Automatización de la implementación de VM con Ansible

Estoy automatizando toda mi red doméstica con Ansible

Hacer que todo funcione desde un único punto de verdad es una revelación

Ansible es la utensilio de documentación activa que necesito para mi cerebro

Estoy disfrutando de las dificultades de instruirse Ansible y su sintaxis. Sé que no haré documentación a menos que me obliguen, y hacer que las herramientas de automatización sean la documentación es el tipo de truco cerebral que puedo implementar. Estoy deseando que llegue el día en que el laboratorio de mi casa pueda recrearse a partir de una sola tilde, sin importar lo mal que lo haya destrozado. Suponiendo, por supuesto, que las cosas que rompo no sean físicas. Eso es poco completamente diferente con lo que rivalizar.

Related Posts

Cómo las galletas Oreo casi arruinaron la película RoboCop

Fotos de Orión El método de interpretación ha brindado al divulgado algunas historias locas a lo prolongado de los primaveras de la…

Deja de acelerar podcasts y audiolibros

Nuestro tiempo es constreñido, pero hay casi ilimitado cantidad de podcasts, audiolibros y videos de YouTube para ver. No estaría solo si recurriera al aparentemente inocente renuevo de velocidad “1,5x”…

You Missed

Redes Sociales y Derechos Humanos: Facilidad con responsabilidad

Redes Sociales y Derechos Humanos: Facilidad con responsabilidad

Reflexiones sobre la exención en casos de cotitularidad de inmuebles

Reflexiones sobre la exención en casos de cotitularidad de inmuebles

Mujeres investigadoras representan el 29% de autores científicos dominicanos

Mujeres investigadoras representan el 29% de autores científicos dominicanos

crea la Alianza Turismo de Salubridad

crea la Alianza Turismo de Salubridad

Cómo las galletas Oreo casi arruinaron la película RoboCop

Cómo las galletas Oreo casi arruinaron la película RoboCop

Se entrega uno de los implicados en robo captado en video virulento en Santiago

Se entrega uno de los implicados en robo captado en video virulento en Santiago