Ansible — catálogo de roles¶
Inventario de roles en ansible/roles/. Cada rol tiene
su README.md con variables, tags y verificación.
¿De cero a nodo operativo?
Esta página es el catálogo por rol/fase. El orden completo para
llevar un nodo de bare-metal a operativo (incluye hardening,
BIND, WiFi — hoy fuera de las fases 1-4 de abajo) está en
ansible/bootstrap/README.md.
Por fase de implementación¶
| Fase | Rol(es) | Playbook |
|---|---|---|
| 1 — Red | netplan_bridge |
playbook-set-static-ip.yml |
| 2 — Incus | incus_install, incus_cluster, incus_ui |
playbook-bootstrap.yml + playbook-incus-cluster.yml |
| 3 — K3s | k3s_* (10 roles) |
playbook-k3s.yml |
| 4 — GitOps | — (playbook inline) | playbook-dex-oauth-secrets.yml |
Roles¶
| Rol | Propósito | Playbook | Tags |
|---|---|---|---|
netplan_bridge |
IP fija en br0 (Netplan) y /etc/resolv.conf estático |
playbook-set-static-ip.yml |
— |
incus_install |
Paquete Incus (Zabbly) | playbook-bootstrap.yml |
— |
incus_cluster |
Bootstrap/join/groups Incus | playbook-incus-cluster.yml |
bootstrap, join, groups, scheduler |
incus_ui |
UI nativa Incus | playbook-incus-cluster.yml |
ui |
bind_dns |
BIND en deborah: DNS de la LAN y zonas mco.local |
playbook-bind-dns.yml |
— |
k3s_prereqs |
Swap, módulos kernel, sysctl, requisitos de Longhorn (open-iscsi, NFS) | playbook-k3s.yml |
prereqs, always |
k3s_server |
Control-plane K3s | playbook-k3s.yml |
server, core |
k3s_cni |
CNI Canal/Calico/Cilium | playbook-k3s.yml |
cni, core |
k3s_agent |
Workers K3s | playbook-k3s.yml |
agent, core |
k3s_kube_vip |
VIP API :6443 |
playbook-k3s.yml |
kube_vip |
k3s_cleanup_traefik |
Limpia Traefik/svclb | playbook-k3s.yml |
traefik |
k3s_node_labels |
Etiquetas de nodos | playbook-k3s.yml |
labels |
k3s_argocd |
Controller Argo CD | playbook-k3s.yml |
argocd, gitops |
k3s_fetch_kubeconfig |
Kubeconfig local | playbook-k3s.yml |
kubeconfig |
k3s_os_hardening |
unattended-upgrades | playbook-k3s.yml |
hardening |
host_hardening |
SSH, cuentas default, sysctl, auditd | playbook-hardening.yml |
— |
wifi_failover |
WiFi de respaldo del cable (nodos con WiFi) | playbook-wifi-failover.yml |
— |
storage_provision |
Formatea y monta un disco libre (destructivo) | playbook-storage-provision.yml |
— |
Playbooks sin rol (tareas inline)¶
| Playbook | Fase | Descripción |
|---|---|---|
setup_sudo.yml |
Día 0 | Instala python3 y sudo y deja a amaceo con sudo (conecta como root) |
playbook-discovery.yml |
0 | Inventario hardware → ansible/reports/ |
playbook-incus-cluster.yml |
2 | Bootstrap/join/groups/UI Incus |
playbook-dex-oauth-secrets.yml |
4 | OAuth Dex: 1Password + ArgoCD + Incus/vCluster |
playbook-rotate-root-passwords.yml |
Seguridad | Rota password de root → 1Password (bóveda HomeLab) |
playbook-uninstall-k3s.yml |
Apéndice | Desinstala K3s en los 3 nodos |
Documentación OAuth: gitops/argocd/secrets/1password.md
Orden de ejecución K3s¶
flowchart LR
prereqs[k3s_prereqs] --> server[k3s_server]
server --> cni[k3s_cni_opcional]
cni --> kube_vip[k3s_kube_vip_opcional]
server --> kube_vip
kube_vip --> agent[k3s_agent]
agent --> traefik[k3s_cleanup_traefik]
traefik --> labels[k3s_node_labels_opcional]
labels --> argocd[k3s_argocd_opcional]
argocd --> kubeconfig[k3s_fetch_kubeconfig_opcional]
kubeconfig --> hardening[k3s_os_hardening_opcional]
Configuración global¶
| Archivo | Contenido |
|---|---|
group_vars/incus_cluster/k3s_install.yml |
Flags del playbook K3s |
group_vars/dex_oauth_secrets.yml |
OAuth Dex |
group_vars/incus_cluster/vars.yml |
Storage Incus, groups, UI |
group_vars/all.yml |
Gateway, IP control-plane |
host_vars/*.yml |
Labels, kubelet args por nodo |