Este repositorio es un playbook de ansible que deja listo un desktop para trabajar inmediatamente luego de correrlo. Al momento, depende de dos roles:
- mikroways.workstation: role público con aplicaciones usadas y configuración del shell
- mikroways.tools: role privado con un set de herramientas que usamos a diario y fueron exclusivamente desarrolladas por Mikroways. Es opcional.
Para correr los playbooks se necesita Ansible instalado en un entorno virtual Python,
gestionado con uv. El procedimiento varía según el estado del equipo:
Si uv no está instalado todavía (el propio playbook lo instala via asdf),
instalalo directamente y luego instalá las dependencias:
curl -LsSf https://astral.sh/uv/install.sh | sh
uv syncOpcionalmente, para evitar errores por rate limiting de GitHub durante la instalación de plugins de asdf, exportá el token antes de correr el playbook (ver Token de GitHub):
export GITHUB_API_TOKEN=...Si ya corriste este playbook antes, uv y direnv estarán instalados. Al entrar
al directorio, direnv activa el entorno automáticamente:
## Opcional: configurar token de GitHub para evitar rate limiting
cp .envrc.private.sample .envrc.private
# editar .envrc.private y completar GITHUB_API_TOKEN
direnv allow # solo la primera vez o cuando cambie el .envrc
uv syncEsto deja ansible-playbook disponible en el PATH sin necesidad de activar el
venv manualmente. Vagrant también funciona directamente.
Luego de instalar ansible, instalar los roles. roles-mw.yml ya incluye todo
lo de roles.yml, por lo que los miembros de Mikroways solo necesitan correr
un comando:
## Si no pertenece a Mikroways:
uv run ansible-galaxy role install -r ansible/requirements/roles.yml
## Si pertenece a Mikroways (incluye el comando anterior):
uv run ansible-galaxy role install -r ansible/requirements/roles-mw.ymlNota: Ansible ignora el
ansible.cfgdel repositorio si el directorio tiene permisos de escritura para todos (world-writable). Para evitar el warning y que se cargue la configuración correctamente, correr una vez:chmod o-w .
Para actualizar los roles:
git pull
uv sync
## Si no pertenece a Mikroways:
uv run ansible-galaxy role install -r ansible/requirements/roles.yml --force-with-deps --force
## Si pertenece a Mikroways (incluye el comando anterior):
uv run ansible-galaxy role install -r ansible/requirements/roles-mw.yml --force-with-deps --forceAntes de continuar, es recomendable realizar resguardos de toda configuración del usuario donde se ejecute el playbook o realizarlo en un usuario nuevo.
Para ejecutar el playbook en caso de que instalemos desde 0 o que realizemos una actualización debemos ejecutar el siguiente comando:
## Si no pertenece a Mikroways:
uv run ansible-playbook ansible/playbooks/vm-setup.yml -i ansible/inventory/localhost.yml -K
## Si pertenece a Mikroways (incluye el playbook anterior):
uv run ansible-playbook ansible/playbooks/vm-setup-mw.yml -i ansible/inventory/localhost.yml -KSi ya tenés la workstation configurada y solo querés instalar o actualizar las herramientas privadas de Mikroways:
uv run ansible-playbook ansible/playbooks/vm-setup-mw.yml -i ansible/inventory/localhost.yml -K \
-e mw_tools_only=true-
Si se está utilizando Pop!_Os se debe agregar además
-e ansible_distribution=Ubuntu -
Se aconseja probar el playbook con vagrant para verificar si el SO utilizado funcionará con el playbook.
-
Si ya utilizabas dotfiles, considerá subir tus cambios porque podrías perder alguna de tus personalizaciones.
El playbook sigue la siguiente serie de pasos:
- Instala paquetes en el sistema tales como docker o podman utilizando el gestor de paquetes.
- Instala herramientas especificas en el directorio:
~/.mikroways/bincon un wrapper para descargar binarios. - Configura asdf y prepara una serie de plugins y versiones de productos.
- Crea las configuraciones propias del entorno dejándolas a disposición en el
directorio
~/.mikroways/dotfiles. - (opcional) Si se indico la instalación de las herramientas de Mikroways,
entonces estas se instalaran en la carpeta
~/.mikroways/tools.
Una vez instalado tu desktop con este playbook, te recomendamos que agregues en
$HOME/.envrc la siguiente configuración:
use asdfDe esta forma, la performance del uso de asdf se ve mejorada por no usar los shims sino la resolución del shim correspondiente.
Por otro lado, si trabajando con kubectl deja de funcionar el
autocomplete, entonces proveemos el alias mw-fix-kube-completion que
debería actualizar el autocomplete que se suele romper entre diferentes
versiones de kubectl que se manejan con asdf.
El token puede ser Classic o Fine-grained. Para este uso no se necesita ningún scope ni permiso — solo autenticación.
Nota: La organización Mikroways bloquea fine-grained tokens con lifetime mayor a 366 días. Si usás fine-grained, configurá máximo 365 días de expiración.
-
Classic: github.com/settings/tokens/new
- Note:
mw-asdf-rate-limit - Expiration: No expiration
- Sin seleccionar ningún scope
- Note:
-
Fine-grained: github.com/settings/personal-access-tokens/new
- Token name:
mw-asdf-rate-limit - Description:
Token para evitar rate limiting de GitHub al instalar plugins de asdf - Expiration: 365 days
- Repository access: Public repositories
- Sin permisos adicionales
- Token name:
Ansible corre desde tu equipo y se conecta al destino vía SSH. El equipo destino no necesita tener Ansible instalado.
Si querés usar directamente este playbook en una vm determinada, proponemos usar el siguiente comando:
uv run ansible-playbook ansible/playbooks/vm-setup.yml [-K] \
-i SOME_USER@10.10.10.10, \
-e ansible_user=SOME_USERDependiendo del usuario remoto, en el ejemplo SOME_USER, debe ser especificado tanto en la opción
-icomo enansible_user. Además, para usar un inventario inline es fundamental el uso de la coma al final de la IP.
## Para crear la maquina virtual
vagrant up
## Para ingresar y verificar el entorno
vagrant sshSi no tenés direnv activo,
ansible-playbookno estará en el PATH. En ese caso activá el venv antes:source .venv/bin/activate && vagrant up
Para probar también las herramientas privadas de Mikroways (vm-setup-mw.yml), una vez
que la VM esté levantada:
vagrant provision --provision-with mw