Este repositorio contiene la automatización oficial de Adhoc para aprovisionar estaciones de trabajo (notebooks). Utiliza Ansible para configurar sistemas operativos desde cero, garantizando entornos consistentes, seguros y auditables.
Filosofía Core:
- Debian-First: Prioridad en Debian (12+) para sistemas base limpios. Compatibilidad completa con Ubuntu LTS (22.04, 24.04).
- Idempotencia estricta: Ejecutar el playbook múltiples veces sobre el mismo equipo debe resultar en
changed=0. - Testing Continuo: Todo rol debe ser testeable en entornos aislados vía Molecule + Docker.
- Automatización sobre intervención manual: Evitar pasos manuales post-instalación siempre que sea posible.
El sistema utiliza una arquitectura de roles jerárquica basada en el perfil del usuario.
Importante: Para evitar duplicación, los roles superiores incluyen (include_role / import_tasks) tareas de los roles base.
-
funcional(Base):- Scope: Software esencial, navegadores, seguridad básica (UFW, fail2ban, SSH hardening), configuración de DNS (systemd-resolved) y branding corporativo de escritorio (GNOME).
- Target: Todos los usuarios corporativos.
-
developer:- Scope: Hereda de
funcional. Agrega tooling de desarrollo: Docker, VS Code, Git (hooks globales), Python (venvs), kubectl, extensiones y configuraciones de entorno Odoo. - Target: Desarrolladores internos de Adhoc.
- Scope: Hereda de
-
freelance_developer:- Scope: Subconjunto selectivo. Incluye herramientas de desarrollo (Git, Python, Docker, VS Code, Cloud CLIs) pero excluye explícitamente configuraciones corporativas, branding de GNOME y restricciones de red severas.
- Target: Desarrolladores externos/contratistas.
-
sysadmin:- Scope: Hereda de
developer. Agrega tooling de infraestructura y SRE: Pulumi, Helm, KVM/QEMU, NordVPN y temas específicos de sistema (Numix). - Target: Equipo DevOps / SRE.
- Scope: Hereda de
Cualquier contribución (humana o IA) DEBE adherirse a los siguientes patrones ya establecidos:
Está estrictamente prohibido usar el módulo obsoleto apt_key. Todo nuevo repositorio externo debe seguir este patrón:
- Validar si el keyring existe (
stat). - Descargar la llave GPG a
/tmp(get_urlconchanged_when: false). - Convertir con
gpg --dearmorhacia/usr/share/keyrings/o/etc/apt/keyrings/. - Borrar archivo temporal de
/tmp(changed_when: false). - Validar si existe
.list(stat). - Agregar el repositorio (
apt_repositoryreferenciando elsigned-by). - Actualizar cache condicionalmente (
when: repo_added.changed).
- Si una tarea manipula archivos temporales o hace limpiezas que no alteran el estado funcional del sistema, DEBE usar
changed_when: false. - La idempotencia se valida evaluando el estado final del sistema (ej. si el binario está instalado), no en los pasos intermedios de descarga.
El código debe estar preparado para correr dentro de contenedores Docker durante el testing (CI/CD):
- GUI / GNOME Tasks: Todas las tareas relacionadas con
dconf, fondos de pantalla o UI deben envolverse conwhen: not (skip_gnome_tasks | default(false)). - /tmp Noexec: Docker monta
/tmpcon flagnoexec. Los scripts descargados allí NUNCA deben ejecutarse directamente. Usar intérprete explícito:ansible.builtin.shell: bash /tmp/script.shconargs: { executable: /bin/bash }. - Systemd: Ciertos servicios (ej.
systemd-resolved) no funcionan en Docker. Usar skip logic:when: not (ansible_virtualization_type == 'docker'). - Shell Scripts:
/bin/shen Debian apunta adash(no soportapipefail). Si usas bashismos, define explícitamenteexecutable: /bin/bash.
- VS Code Extensions: La instalación de extensiones a veces provoca un crash de V8 al finalizar (return code
134). Esto es esperado. Las tareas de VS Code deben aceptarrc not in [0, 134].
- Driver: Docker (
geerlingguy/docker-debian13-ansibleyubuntu2404). - Plataformas por defecto: Debian 12/13 y Ubuntu 22.04 LTS. (Ubuntu 24.04 LTS para validaciones extendidas).
- Fases críticas: El CI exige que la fase
idempotencepase estrictamente (0 changes en el segundo run) y que la faseverifyvalide aserciones medianteansible.builtin.assertopackage_facts.
Workflow de Desarrollo Iterativo para la IA/Dev:
En lugar de correr el ciclo completo, para desarrollo se exige el flujo:
molecule create -> molecule converge (repetir hasta que funcione) -> molecule verify.
- NO "Vibe Coding": Antes de instalar un nuevo paquete o servicio, revisa este archivo. Aplica el patrón APT correspondiente si requiere un repositorio de terceros.
- Linting estricto: El proyecto usa pre-commit hooks (
yamllint,ansible-lint). Escribe YAML canónico (sin abreviaturas raras de diccionarios, usando FQCN comoansible.builtin.apt). - Variables: Las URLs de repositorios, GPG keys y listas de paquetes deben centralizarse en
vars.ymldel rol correspondiente, NUNCA hardcodeadas en lostasks/main.yml. - Verificación: Si agregas una herramienta (ej.
terraform), DEBES agregar su correspondiente check de instalación y versión enmolecule/default/verify.yml.
Última actualización: Marzo 2026. Documento "Spec-Anchored" para el proyecto Ansible Notebooks de Adhoc.