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

Posteriormente de todo, es posible que Google Pixel 11 Pro no se vea muy diferente

Un minorista de estuches se convirtió accidentalmente en una de las fuentes más interesantes de información sobre Google Pixel 11 Pro esta semana. Thinborneuna marca de accesorios con sede en…

DeepRare supera a los médicos en un estudio de dictamen de enfermedades raras

DeepRare, un sistema de IA agente que integra 40 herramientas especializadas, superó a los especialistas médicos en la identificación de enfermedades raras en un enfrentamiento directo estudio publicado en Nature.…

You Missed

Posteriormente de todo, es posible que Google Pixel 11 Pro no se vea muy diferente

Posteriormente de todo, es posible que Google Pixel 11 Pro no se vea muy diferente

El peso de los impuestos en las telecomunicaciones  | AlMomento.net

El peso de los impuestos en las telecomunicaciones  | AlMomento.net

Combustibles mantendrán los mismos precios en Dominicana | AlMomento.net

Combustibles mantendrán los mismos precios en Dominicana | AlMomento.net

DeepRare supera a los médicos en un estudio de dictamen de enfermedades raras

DeepRare supera a los médicos en un estudio de dictamen de enfermedades raras

Cuba anuncia retirada de médicos en Jamaica tras cesar cooperación

Cuba anuncia retirada de médicos en Jamaica tras cesar cooperación

Pedernales y Santo Domingo concentran casi 40% de la inversión pública en enero

Pedernales y Santo Domingo concentran casi 40% de la inversión pública en enero