|
|
|
## Estructura de variables utilizadas
|
|
|
|
|
|
|
|
### Usuarios "físicos"
|
|
|
|
|
|
|
|
Las variables que describen absolutamente (*nickname*, nombre completo, contraseña, llaves SSH) los usuarios "físicos" que se manejan y los grupos que integran, se definen globalmente en [group_vars/all/vars/10_usuarios_y_grupos.yml](https://git.interior.edu.uy/adminsys/config/blob/master/group_vars/all/vars/10_usuarios_y_grupos.yml)
|
|
|
|
|
|
|
|
Para estas variables se utiliza el prefijo `cielito_all_`, a modo de referencia mnemotécnica que nos indique cuándo estamos accediendo a la totalidad de datos en bruto. Esto debio a que el objetivo último siempre será "manipular" estas variables para conformar un subconjunto que represente el set de usuarios y grupos concreto que se aprovisionará en cada servidor.
|
|
|
|
|
|
|
|
La estructura de las variables es la siguiente:
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
cielito_all_usuarios:
|
|
|
|
- username: user1
|
|
|
|
name: Usuario 1
|
|
|
|
authorized_keys:
|
|
|
|
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAEAQ... user1@udelar
|
|
|
|
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAEAQ... user1@interior
|
|
|
|
- username: user2
|
|
|
|
name: Usuario 2
|
|
|
|
authorized_keys:
|
|
|
|
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAEAQ... user2@udelar
|
|
|
|
- username: user3
|
|
|
|
name: Usuario 3
|
|
|
|
authorized_keys:
|
|
|
|
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAEAQ... user3@udelar
|
|
|
|
|
|
|
|
cielito_all_os_grupos:
|
|
|
|
- name: raices
|
|
|
|
members:
|
|
|
|
- user1
|
|
|
|
- deploy
|
|
|
|
sudoers: without-password
|
|
|
|
- name: adminsys
|
|
|
|
members:
|
|
|
|
- user1
|
|
|
|
- user2
|
|
|
|
sodoers: with-password
|
|
|
|
```
|
|
|
|
|
|
|
|
### Usuarios para realizar los despliegues con Ansible
|
|
|
|
|
|
|
|
El esquema de autenticación de Ansible, es que logueamos contra un usuario *unix* `deploy` definido en todos los hosts. `deploy` es miembro del grupo `raices`, que tiene derechos *sudo* sin solicitud de contraseña.
|
|
|
|
|
|
|
|
El usuario `deploy` se crea y configura mediante el role `acceso_deploy`, a quien se le "pasa" la variable `usuarios_deploy`, un subconjunto de `cielito_all_usuarios_deploy`.
|
|
|
|
|
|
|
|
Para "construir" la variable `cielito_all_usuarios_deploy`, se utiliza `lista_de_usuarios_para_claves_deploy` como insumo para indicar todos los usuarios que se desea tengan este tipo de acceso y así recuperar sus llaves SSH para establecerlas como *authorized_keys* de los usuarios `deploy` y `root`.
|
|
|
|
|
|
|
|
El comportamiento por defecto es seleccionar a todos los miembros del grupo `adminsys`. Todas las llaves de los usuarios seleccionados se determinan al declarar la variable global `deploy_authorized_keys` de la siguiente manera:
|
|
|
|
```yaml
|
|
|
|
# Lista simple de nicknames
|
|
|
|
lista_de_usuarios_para_claves_deploy: "{{ os_grupos | json_query('[?name==`adminsys`].members') | list | flatten | sort | unique }}"
|
|
|
|
|
|
|
|
query_usuarios_deploy: '[?contains(`{{ lista_de_usuarios_para_claves_deploy | to_json }}`, username)]'
|
|
|
|
deploy_authorized_keys: "{{ cielito_all_usuarios | json_query(query_usuarios_deploy) | json_query('[*].authorized_keys') | list | flatten | sort | unique }}"
|
|
|
|
```
|
|
|
|
|
|
|
|
Y se define entonces globalmente `cielito_all_usuarios_deploy`, una lista compleja de usuarios cuya particularidad es contar con las llaves SSH de múltiples usuarios en sus *authorized_keys*:
|
|
|
|
```yaml
|
|
|
|
cielito_all_usuarios_deploy:
|
|
|
|
- username: deploy
|
|
|
|
name: Usuario de deployment de virtuales
|
|
|
|
password: "{{ password_deploy | default( vault_default_deploy_password ) | password_hash( 'sha512', vault_deploy_password_salt ) }}"
|
|
|
|
authorized_keys: "{{ deploy_authorized_keys if ( deploy_authorized_keys is defined and deploy_authorized_keys | length > 0 ) else omit }}"
|
|
|
|
- username: screen
|
|
|
|
name: Usuario para compartir consolas
|
|
|
|
password: "{{ password_deploy | default( vault_default_deploy_password ) | password_hash( 'sha512', vault_deploy_password_salt ) }}"
|
|
|
|
authorized_keys: "{{ deploy_authorized_keys if ( deploy_authorized_keys is defined and deploy_authorized_keys | length > 0 ) else omit }}"
|
|
|
|
```
|
|
|
|
|
|
|
|
# Variables principales para modificar por host o grupo
|
|
|
|
|
|
|
|
**El objetivo es calcular un subconjunto de elementos de las variables comentadas anteriormente, y llevar este subconjunto al role `users` para que los aprovisione en los servidores.**
|
|
|
|
|
|
|
|
**El modo de uso entonces, consistirá en definir las siguientes variables en los `host_vars` o `group_vars` (sobreescribiendo así a las de `group_vars/all`) de uno o mas servidores para utilizar un esquema distinto al predeterminado. Estas variables son:**
|
|
|
|
|
|
|
|
### lista_de_usuarios_para_claves_deploy
|
|
|
|
|
|
|
|
Es una lista simple donde se indica solamente el `username` (referenciando a `cielito_all_usuarios`) de los usuarios que tendrán sus llaves SSH en las *authorized_keys* de los `cielito_all_usuarios_deploy`:
|
|
|
|
```yaml
|
|
|
|
lista_de_usuarios:
|
|
|
|
- user1
|
|
|
|
- user2
|
|
|
|
```
|
|
|
|
> Por defecto serán todos los miembros del grupo `adminsys`
|
|
|
|
|
|
|
|
|
|
|
|
### lista_de_usuarios_deploy
|
|
|
|
|
|
|
|
Es una lista simple donde se indica solamente el `username` (referenciando a `cielito_all_usuarios_deploy`) de los usuarios que finalmente se "pasarán" al role `acceso_deploy`:
|
|
|
|
```yaml
|
|
|
|
lista_de_usuarios_deploy:
|
|
|
|
- deploy
|
|
|
|
```
|
|
|
|
> Por defecto es solo el usuario `deploy`
|
|
|
|
|
|
|
|
Sobre la base de `lista_de_usuarios_deploy` se determinará el subconjunto de usuarios que efectivamente utilizará el role `acceso_deploy`
|
|
|
|
```yaml
|
|
|
|
query_usuarios_deploy: '[?contains(`{{ lista_de_usuarios_deploy | flatten | to_json }}`, username)]'
|
|
|
|
usuarios_deploy: "{{ cielito_all_usuarios_deploy | json_query( query_usuarios_deploy ) }}"
|
|
|
|
```
|
|
|
|
|
|
|
|
### lista_de_usuarios
|
|
|
|
|
|
|
|
Es una lista simple donde se indica solamente el `username` (referenciando a `cielito_all_usuarios`) de los usuarios a los que se le creará una cuenta *unix* en el sistema
|
|
|
|
```yaml
|
|
|
|
lista_de_usuarios:
|
|
|
|
- user1
|
|
|
|
- user2
|
|
|
|
```
|
|
|
|
> Por defecto será la lista de miembros del grupo *adminsys* definida globalmente en `cielito_all_os_grupos`
|
|
|
|
|
|
|
|
Sobre la base de `lista_de_usuarios`, se filtrán los usuarios con todos sus datos de referencia (*username*, *name*, *authorized_keys*, *password*) y se definirá la variable `usuarios`, que es la que finalmente se "pasa" al role `users`
|
|
|
|
```yaml
|
|
|
|
query_usuarios: '[?contains(`{{ lista_de_usuarios | flatten | to_json }}`, username)]'
|
|
|
|
usuarios: "{{ cielito_all_usuarios | json_query( query_usuarios ) }}"
|
|
|
|
```
|
|
|
|
|
|
|
|
### os_grupos
|
|
|
|
|
|
|
|
Es una lista compleja que define el nombre del grupo *unix* a crear, el modo de uso de *sudo* y los usuarios que lo integrarán, vinculándolos a través del `username` correspondiente en `cielito_all_usuarios`.
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
os_grupos: "{{ cielito_all_os_grupos }}"
|
|
|
|
```
|
|
|
|
|
|
|
|
> Por defecto contendrá `cielito_all_os_grupos` tal cual
|
|
|
|
|
|
|
|
Pero naturalmente, se puede sobreescrir indicando un subconjunto:
|
|
|
|
```yaml
|
|
|
|
os_grupos: "{{ cielito_all_os_grupos | json_query('[?name==`adminsys`]') }}"
|
|
|
|
```
|
|
|
|
|
|
|
|
O redefiniéndolo manualmente:
|
|
|
|
```yaml
|
|
|
|
os_grupos:
|
|
|
|
- name: mi_grupo_personalizado
|
|
|
|
members:
|
|
|
|
- user1
|
|
|
|
- user3
|
|
|
|
sodoers: with-password
|
|
|
|
```
|
|
|
|
|