Este proyecto utiliza Ansible para automatizar la configuración completa de notebooks para los distintos perfiles de trabajo en Adhoc.
✨ Nuevo: Tests automatizados con Molecule para todos los roles. Ver documentación de testing.
Para información interna más detallada sobre los objetivos, procedimientos y pendientes, consulta el documento de diseño interno.
Este playbook está diseñado para funcionar sobre instalaciones limpias de Debian (12+) y Ubuntu (22.04+).
Priorizamos el uso de Debian para mantener un sistema base limpio, estable y libre de las decisiones comerciales de Canonical (como la imposición de snap). Sin embargo, el playbook es totalmente compatible con las versiones LTS de Ubuntu.
⚠️ Entorno de escritorio requerido: GNOME Los perfilesfuncional,developerysysadminconfiguran extensiones, ajustes visuales y comportamientos específicos de GNOME. El playbook asume que GNOME está instalado y activo como entorno de escritorio. Instalar sobre KDE u otro entorno producirá errores en las tareas de configuración de escritorio. El perfilfreelance_developeromite intencionalmente estas configuraciones de escritorio.
El sistema está organizado en perfiles jerárquicos. Cada perfil incluye la configuración del anterior, creando un sistema incremental:
funcional(Base): Contiene el software y la configuración esencial para todos los miembros de la empresa (navegadores, herramientas de comunicación, seguridad básica, etc.).developer: Incluye el perfilfuncionaly añade todas las herramientas de desarrollo (Docker, VS Code, Git, Python, kubectl, etc.).freelance_developer: Perfil acotado para developers freelance. Reutiliza tareas puntuales defuncionalydeveloperpero evita configuración corporativa (por ejemplo branding/desktop) y corre solo un subset de herramientas de desarrollo.sysadmin: Incluye ambos perfiles anteriores y añade herramientas de administración de sistemas e infraestructura (pulumi, gcloud, VirtualBox, etc.).
| Perfil | Ideal para | Incluye (alto nivel) | Evita / notas | Ejecutar |
|---|---|---|---|---|
funcional |
Usuarios generales | Base de workstation | Puede incluir desktop/branding corporativo | ansible-playbook local.yml -K --verbose |
developer |
Devs internos | funcional + tooling completo de dev (VS Code, Git, Python, Docker, kubectl, etc.) |
Incluye desktop/branding corporativo (por herencia de funcional) |
ansible-playbook local.yml -e "profile_override=developer" -K --verbose |
freelance_developer |
Devs freelance/externos | Entorno de dev + cloud/containers (subset controlado) | Evita desktop/branding corporativo | ansible-playbook local.yml -e "profile_override=freelance_developer" -K --verbose |
sysadmin |
SRE/infra | developer + herramientas extra de infra/SRE |
Perfil más amplio (instala más herramientas) | ansible-playbook local.yml -e "profile_override=sysadmin" -K --verbose |
Más detalle (qué hace cada perfil y cómo elegirlo): docs/PROFILES.md
Este es el método preferido para configurar una notebook desde cero. Un único script se encarga de todo.
-
Descargar el script de arranque:
curl -L -o adhoc-ansible https://raw.githubusercontent.com/ingadhoc/ansible_notebooks/main/launch_project.sh
(El comando descarga
launch_project.shpero lo guarda comoadhoc-ansible.) -
Darle permisos de ejecución:
chmod +x adhoc-ansible
-
Ejecutar el script con
sudo:sudo ./adhoc-ansible
El script te guiará con un menú interactivo para que selecciones tu perfil. Se encargará de instalar Ansible, sus dependencias, clonar este repositorio y ejecutar el playbook por ti. Al finalizar, solo necesitarás reiniciar.
Si necesitas volver a ejecutar el playbook en un equipo ya configurado o quieres usar opciones avanzadas, puedes hacerlo manualmente.
Requisitos previos:
- Tener
gityansible(víapipx) instalados. - Haber clonado este repositorio.
Comandos:
# Navegar al directorio del proyecto
cd ~/repositorios/ansible_notebooks
# (Opcional) Actualizar el repositorio a la última versión
git pull
# (Opcional) Instalar/actualizar las colecciones de Ansible
ansible-galaxy install -r collections/requirements.yml
# --- Ejecutar el perfil deseado ---
# Para el rol Funcional (perfil por defecto)
ansible-playbook local.yml -K --verbose
# Para el rol Developer (ejecutará funcional -> developer)
ansible-playbook local.yml -e "profile_override=developer" -K --verbose
# Para el rol Freelance Developer (perfil acotado)
ansible-playbook local.yml -e "profile_override=freelance_developer" -K --verbose
# Para el rol SysAdmin (ejecutará funcional -> developer -> sysadmin)
ansible-playbook local.yml -e "profile_override=sysadmin" -K --verbose
# Para instalar solo herramientas de deploy rápido (ej. kubectl)
ansible-playbook local.yml --tags "deploy" -K --verboseEste perfil está pensado para developers externos que necesitan un entorno de desarrollo completo, pero sin configuraciones corporativas (por ejemplo branding/desktop) ni tareas que no aportan al trabajo diario.
Qué hace (resumen):
- Instala herramientas de desarrollo y CLI: Git, Python, VS Code, Docker, kubectl, gcloud, GH CLI, etc.
- Aplica un subconjunto de tareas de
funcionalydeveloperde forma controlada.
Qué NO hace (intencionalmente):
- No aplica branding corporativo.
- No fuerza configuración de GNOME/extensiones de escritorio.
Recomendado (bootstrap):
curl -L -o adhoc-ansible https://raw.githubusercontent.com/ingadhoc/ansible_notebooks/main/launch_project.sh
chmod +x adhoc-ansible
sudo ./adhoc-ansibleLuego elegir Freelance Developer en el menú.
Manual (si ya tiene el repo):
cd ~/repositorios/ansible_notebooks
ansible-playbook local.yml -e "profile_override=freelance_developer" -K --verbosePara una guía lista para copiar/pegar y enviar a externos, ver: docs/FREELANCE_DEVELOPER.md
Después de que Ansible termine, hay algunas acciones que requieren tu intervención para iniciar sesión en servicios específicos.
-
Configurar SSH en GitHub:
-
La CLI de
ghya estará instalada. Inicia sesión con:gh auth login
-
Sube tu nueva clave SSH. El playbook la creó con el formato
id_rsa_TU_USUARIO@NOMBRE_HOST.pub.# Reemplaza 'dib' y 'dib-adhoc-nb-debian' con tu usuario y hostname gh ssh-key add ~/.ssh/id_rsa_dib@dib-adhoc-nb-debian.pub
-
-
Iniciar sesión en Docker Hub:
docker login # username: adhocsa # password: (usar un token generado en Docker Hub)
-
Iniciar sesión en Google Cloud (si aplica):
gcloud auth login
Cuando una notebook con el usuario genérico adhoc se asigna a un empleado nuevo, el playbook assign_laptop.yml renombra el usuario (y su grupo, home y sudoers) de forma remota, sin necesidad de reinstalar el sistema.
Prerrequisitos:
- Acceso SSH a la máquina via el usuario
_sysadmincon la clave~/.ssh/sysadmin_key. - La notebook debe estar encendida y accesible en la red.
Comando:
ansible-playbook assign_laptop.yml \
-i 192.168.1.170, \
-e "old_user=adhoc new_user=user full_name='Nombre Apellido' hostname=user-adhoc-nb" \
--private-key ~/.ssh/sysadmin.txt \
-u sysadmin
⚠️ Nota la coma después de<ip>— es requerida por Ansible para inventarios inline.
Qué hace:
- Mata los procesos del usuario anterior (
pkill). - Renombra el usuario y mueve su home (
usermod). - Renombra el grupo primario (
groupmod). - Actualiza el archivo sudoers si existe.
- Configura el
user.namede Git globalmente.
Este proyecto utiliza Molecule con Docker para tests automatizados. Los tests se ejecutan automáticamente en GitHub Actions para cada push y pull request.
# Crear un entorno virtual (recomendado, evita PEP 668 en Debian/Ubuntu)
python3 -m venv .venv
source .venv/bin/activate
# Instalar dependencias de testing
pip install -r requirements-dev.txt
# Instalar colecciones
ansible-galaxy install -r collections/requirements.yml
# Ejecutar tests de un rol específico
./test-role.sh funcional
# Ejecutar todos los tests
./test-role.sh all
# Solo verificar requisitos
./test-role.sh --check
# Solo ejecutar linting
./test-role.sh --lintPor defecto, los tests ejecutan en Debian 13 y Ubuntu 24.04. Para probar con distribuciones adicionales:
# Usar el Makefile para comandos específicos
make test-ubuntu2404 # Test solo Ubuntu 24.04 LTS
make test-debian13 # Test solo Debian 13 (si disponible)
make test-all-distros # Test todas las distros configuradas
# Ver plataformas disponibles
make list-platforms
# Descargar imágenes Docker necesarias
make docker-pull-imagesDistribuciones soportadas:
- ✅ Debian 13 (Trixie) - Producción, por defecto
- ✅ Ubuntu 24.04 LTS (Noble) - Producción, por defecto
- ✅ Debian 12 (Bookworm) - Producción, soportado (legacy)
- ✅ Ubuntu 22.04 LTS (Jammy) - Producción, soportado (legacy)
Para agregar más distribuciones a tus tests, consulta:
- docs/MOLECULE_GUIDE.md - Sección "Testing con Múltiples Distribuciones"
- docs/MULTI_DISTRO_TESTING.md - Guía completa multi-distro
- docs/molecule-multi-distro-example.yml - Configuración de ejemplo
- roles/funcional/README.md - Testing específico del rol
Para más información sobre testing, consulta docs/TESTING.md.
En una instalación mínima de Debian, es posible que tu usuario no sea añadido al grupo sudo. Para arreglarlo:
# 1. Conviértete en root
su -
# 2. Añade tu usuario al grupo sudo (reemplaza 'tu_usuario')
gpasswd -a tu_usuario sudo
# 3. Sal de la sesión de root y reinicia la máquina
exit
sudo reboot# Solución: Agregar a packages_exclude_debian_13 en vars.yml
packages_exclude_debian_13:
- nombre-paquete-problemático# Verificar que la imagen existe
docker search geerlingguy/docker-debian13
# Si no existe, comentar esa plataforma en molecule.ymlSi el playbook falla con errores como dconf error, gnome-shell not found o similares, la causa es que el entorno de escritorio GNOME no está instalado. Este proyecto requiere GNOME para los perfiles funcional, developer y sysadmin.
Solución: Reinstalar el sistema operativo seleccionando GNOME como entorno de escritorio.
# En Debian, si ya tenés el sistema base podés instalar GNOME:
sudo apt install task-gnome-desktopSi necesitás correr el playbook en un entorno sin GNOME (por ejemplo, un servidor headless), podés saltear las tareas de escritorio:
ansible-playbook local.yml -K -e "skip_gnome_tasks=true"- docs/FREELANCE_DEVELOPER.md - Guía rápida para developers freelance (copy/paste)
- docs/PROFILES.md - Guía para elegir perfil + comandos
- docs/TESTING.md - Guía completa de testing con Molecule
- docs/LESSONS_LEARNED.md - Troubleshooting y lecciones aprendidas
- docs/molecule-multi-distro-example.yml - Ejemplo de configuración
- roles/funcional/README.md - Documentación del rol funcional
- Makefile - Todos los comandos disponibles