Este proyecto surgió del repositorio privado mikroways/ansible/mw-user en GitLab.
Este role maneja los usuarios de mikroways y sus claves públicas de forma consistente. Para ello, al incluir el role, por defecto se creará una cuenta mikroways con las claves públicas de todos los integrantes disponibles en el repositorio git de claves ssh.
Este role depende de los roles GROG declarados en meta/main.yml.
ansible-galaxy los instala automáticamente al instalar este role.
Para desarrollo local, uv sync + molecule se encargan de todo
automáticamente (ver sección Desarrollo).
Podemos personalizar el role mediante las siguientes variables que se describen a continuación:
mw_user_create_one_account_per_user: su valor por defecto esfalse. Si es true creará una cuenta para cada usuario. Sino solamente creará la cuentamw_user_name.mw_user_name: por defecto es el nombremikroways. Esta cuenta siempre será creada por este role. Todas las claves públicas de los miembros de mikroways seleccionados serán autorizados a usar esta cuenta.mw_user_url: por defecto eshttps://mikroways.gitlab.io/public/ssh_keys/_users. Esta url devuelve un listado de usuarios válidos de mikroways.mw_user_key_url: url template para descargar la clave pública de un usuario. El valor por defecto eshttps://mikroways.gitlab.io/public/ssh_keys/%user%.pub. Puede observarse que el valor de%user%es dinámico y será reemplazado por el valor de un usuario válido de mikroways.mw_user_enabled_users: lista de usuarios habilitados. Si es vacío, todos los usuarios válidos de mikroways (los listados enmw_user_url) serán considerados. Caso contrario se realizará la intersección de usuarios válidos con los usernames dados en esta lista.mw_user_template: diccionario modelo de cómo será creado cada usuario en el sistema. El modelo de diccionario depende del role grog.management-usermw_users_to_remove: lista de usuarios que deben ser eliminados. Si un usuario en esta lista fue creado previamente, será eliminado automáticamente del sistema. Además, si las claves públicas de estos usuarios están autorizadas en la cuenta compartidamw_user_name, también se eliminarán de la listaauthorized_keys.
-
mw_user_add_client_accounts: su valor por defecto esfalse. Si es true, se creará una o más cuentas para el cliente. Si es false, se omite la sección para el cliente. -
mw_user_customer_create_one_account_per_user: su valor por defecto esfalse. Si es true, se creará una cuenta individual para cada entrada enmw_user_customer_users. Si es false, solo se crea el usuario admin compartido. -
mw_user_customer_admin_name: por defecto esadmin. Esta cuenta siempre se crea cuandomw_user_add_client_accountses true. Recibe las claves públicas de todos los usuarios enmw_user_customer_users. -
mw_user_customer_users: lista de usuarios del cliente. Cada entrada debe tenername(nombre de usuario) ykey(clave pública SSH). Por defecto es una lista vacía.mw_user_customer_users: - name: alice key: "ssh-ed25519 AAAA... alice" - name: bob key: "ssh-ed25519 AAAA... bob"
-
mw_user_customer_template: diccionario modelo de cómo será creado cada usuario del cliente en el sistema. Puede personalizarse para definir shell, permisos sudo, y otras configuraciones.
Desde Ansible Galaxy:
ansible-galaxy role install mikroways.mw_userO agregando el role al requirements.yml del proyecto:
roles:
- name: mikroways.mw_user
version: "v2.0.0"Y luego:
ansible-galaxy install -r requirements.ymlUso básico en un playbook (solo cuentas mikroways):
- name: Some useful playbook
hosts: all
gather_facts: true
tasks:
- import_role:
name: mikroways.mw_user
become: true
tags:
- userAgregando una cuenta de administrador compartida para el cliente con cuentas individuales:
- name: Some useful playbook
hosts: all
gather_facts: true
tasks:
- import_role:
name: mikroways.mw_user
become: true
vars:
mw_user_add_client_accounts: true
mw_user_customer_admin_name: admin
mw_user_customer_create_one_account_per_user: true
mw_user_customer_users:
- name: alice
key: "ssh-ed25519 AAAA... alice@example.com"
- name: bob
key: "ssh-ed25519 AAAA... bob@example.com"
tags:
- userEsto crea:
- Una cuenta
admincon las claves de todos los usuarios (aliceybob) - Una cuenta individual
alicecon su propia clave - Una cuenta individual
bobcon su propia clave
Las pruebas usan molecule con Docker. Para correrlas localmente:
uv sync # instala las dependencias
uv run molecule converge # crea los contenedores y aplica el rol
uv run molecule verify # verifica que el rol hizo lo esperado
uv run molecule destroy # destruye los contenedoresO el ciclo completo:
uv run molecule test # dependency + create + converge + verify + destroy- Eliminar usuarios que ya no trabajan con nosotros. Pensaba que en el repo de nuestras claves, podemos agregar quienes se fueron y han trabajado con nosotros. De esta forma el playbook debe eliminar estos usuarios si fueron creados previamente
- Mejorar los tests
- Pinear versión de uv en el Dockerfile en lugar de bajar el script de instalación sin versión fija
- Desacoplar verify.yml de la red: los
lookup('url', ...)fallan si el servidor de claves está caído, aunque el rol haya funcionado correctamente