ATTENTION : Ce projet est techniquement utilisable en modifiant certains fichiers, mais est toujours un travail en cours et non utilisable sans modification.
- Ajout d'un filtrage des « logins préférés ». Si vous les utilisez, penser à modifier la ligne 148 du fichier
roles/retreive_portals_data/library/format_and_filter_users.pypour l'adapter à vos besoins. - Changement du fichier où sont stockées les données des utilisateurs déjà déployés de
local/sync_users_resfile.jsonàlocal/users_hashes.csvetlocal/projects_hashes.csv.
Ce client de synchronisation est un ensemble de scripts construits autour de Ansible. Il est utilisé pour automatiquement synchroniser les utilisateurs, leurs clés ssh et leurs projets depuis le portail Gramc vers un cluster local. Les projets sont synchronisés en tant que groupes locals au serveur et en tant qu'account Slurm.
- Par défaut, la portée des uid gérés par ce client va de 100000 à 199999
- Par défaut, la portée des gid gérés par ce client va de 200000 à 299999
- Le nom de compte des nouveaux utilisateurs sont générés par son adresse courriel, en prenant au moins deux caractères du prénom suivi du nom, et en complétant en prenant d'autres caractères du prénom ou en ajoutant des 0 pour atteindre 8 caractères
- Pour changer ce comportement, il faut changer la fonction
get_new_usernamedu fichierroles/retreive_portals_data/library/format_and_filter_users.py
- Pour changer ce comportement, il faut changer la fonction
- Ce client garde une association des uid locaux avec les id des portails distants, par défaut dans le fichier
./local/usersdata.csv - Les utilisateurs sans projet actifs sont bloqués via les valeurs du fichier
/etc/shadowet leurs fichierauthorized_keysest changé enauthorized_keys.lockedpour empêcher la connexion - IMPORTANT : Le script risque de ne pas arriver à son terme si un ou plusieurs nœuds sont injoignables ou bloquants
- Pour contourner ce problème, il faut préciser l'option
--limit='localhost:all:!nœudbloqué1'(pour plusieurs nœuds :localhost:all:!nœudbloqué1:!nœudbloqué2', remplacernœudbloquéXpar les nœuds injoignables) pour que le script ne tente pas de déployer les utilisateurs dessus - Après avoir utilisé le script en ignorant des nœuds, il peut être nécessaire de le relancer après avoir supprimé les fichiers
./local/users_hashes.csvet./local/projects_hashes.csv(des variablesalready_deployed_users_fileetalready_deployed_projects_filedu playbook principal), pour qu'il fasse un redéploiement complet (Suivant le nombre d'utilisateurs, cela peut prendre beaucoup de temps)
- Pour contourner ce problème, il faut préciser l'option
- IMPORTANT : Ce client défini précisémment les groupes des utilisateurs gérés, ils sont donc automatiquement retirés de tout autre groupe
- Pour changer ce comportement, mettre la variable
no_remove_from_groupsdansgramc_synchro_client.ansible.yamlàtrue, il faudra alors retirer manuellement des groupes les utilisateurs qui ne sont plus dans les projets
- Pour changer ce comportement, mettre la variable
- jq
- awk
- Ansible, avec les modules « Community »
- Python avec les modules json, subprocess and requests
- Le nœud lançant ce client doit pouvoir se connecter en root par une clé sans mot de passe (ou par un compte sudo sans mot de passe en utilisant --become)
- Le nœud lançant ce client doit avoir accès au stockage partagé où sont présents les dossiers des utilisateurs et les dossiers des projets
- Le nœud lançant ce client doit être l'un des nœuds gérés par ce client (notamment pour qu'il puisse récupérer le uid d'un utilisateur et le gid d'un groupe/projet via la commande
id) - Le playbook
gramc_synchro_client.ansible.yamldoit être lancé avecansible_playbookdans le dossier de ce client, où se trouve le fichiergramc_synchro_client.ansible.yaml - Lors de l'exécution du client par le script
gramc_synchro_client.sh, si l'exécution se retrouve bloquée et que le script est relancé, il ne relancera pas le playbook
- Clonez le dépôt (Il est conseillé de cloner l'une des versions released, plus stables)
- Configurez la liste des nœuds dans l'inventaire
- Configurez les variables de
gramc_synchro_client.ansible.yamlpour les adapter à votre cluster- Notamment, mettre le bon nom du cluster correspondant à celui dans la base de données de gramc
- Adapter les rôles à votre cas d'utilisation, par exemple changer comment les dossiers des projets sont générés dans
roles/users_folders/tasks/main.yaml - Vérifier que la liste d'utilisateurs récupérée est correcte avec les tags
all_portals,debug_filtered - Lancer la recette ansible pour vérifier son bon fonctionnement
- Éventuellement :
- Modifier le contenu de
gramc_synchro_client.shpour l'adapter à votre cluster - Ajouter
gramc_synchro_client.shau cron
- Modifier le contenu de
- Ce client commence par récupérer les données des portails, seuls certains fichiers dans le dossier du client de synchronisation sont modifiés
- Les uid et gid sont associés aux ids des utilisateurs des portails pendant cette étape mais aucun groupe ni utilisateur n'est créé sur le cluster
- Ce client se connecte sur chaque nœud pour y créer les utilisateurs et les groupes correspondant aux projets, et les associe, mais ne crée aucun dossier
- En cas d'utilisation d'un LDAP, le script peut ne pas avoir à se connecter sur les nœuds.
- Ce client crée les dossiers utilisateurs et les dossiers des projets dans les dossiers indiqués
- Les dossiers des utilisateurs sont remplis avec le contenu de
/etc/skel - Ce client crée automatiquement les clés ssh pour que l'utilisateur puisse se connecter entre les nœuds du cluster
- Ce client ajoute automatiquement les clés ssh publiques du portail dans
.ssh/authorized_keyset en retire les clés révoquées
- Les dossiers des utilisateurs sont remplis avec le contenu de
- Ce client crée les utilisateurs et projets dans la base de données Slurm
- BUG À CORRIGER : Ce client ne retire pas les associations Slurm utilisateur/account qui ne sont plus dans le projet correspondant
- Pour une correction temporaire, modifier le fichier
roles/populate_slurm/files/set_slurm_user.sh
- Pour une correction temporaire, modifier le fichier
- BUG À CORRIGER : Ce client ne retire pas les associations Slurm utilisateur/account qui ne sont plus dans le projet correspondant
- Ce client envoie finalement les confirmations de créations aux portails
- Il est possible de lancer la recette ansible avec les tags
all_portals,debug_retreive,all_portals,debug_formatedouall_portals, debug_filteredpour récupérer la liste des utilisateurs et de leurs clés et projets dans un fichier sous le dossierlocal/, afin de vérifier la liste des utilisateurs utilisée par la recette ansible- L'utilisation de ces tags arrête le script avant la propagation des utilisateurs (mais peut modifier
local/usersdata.csven cas de nouvel utilisateur)
- L'utilisation de ces tags arrête le script avant la propagation des utilisateurs (mais peut modifier
- Configure Ansible to run the playbook faster, for example in "ansible.cfg" in "[ssh_connection]" section:
- Enable pipelining with "pipelining=True"
- Enable ssh persistance with "ssh_args=-o ControlMaster=yes -o ControlPersist=60s"
Le script python exemple_gramc_conso.py est un exemple de base de script pour l'automatisation de la récupération et du traitement des attributions de ressources par projet et du renvoi des valeurs de consommation de ressources des projets au portail gramc.
- Custom ansible configuration file: "ANSIBLE_CONFIG=$custom_path"
- Custom .netrc file: "NETRC=$custom_path"
- Créer un nouveau module dans le rôle
retreive_portals_datarenvoyant la liste des utilisateurs associés à leurs projets et clés correctement formatée - Ajouter au fichier
roles/retreive_portals_data/tasks/main.yamlles tâches nécessaires pour récupérer la liste, et modifier la tâchefilter_and_format_datapour l'y ajouter
Il est possible de créer les utilisateurs et groupes représentant les projets sur un LDAP plutôt que directement sur chaque nœud. Pour cela, il faut décommenter le bloc responsable de la création des utilisateurs et groupes sur le LDAP et commenter le play créant les utilisateurs sur les nœuds, puis configurer les variables utilisées par le rôle faisant les créations sur le LDAP. Il est possible de changer les fichiers du rôle pour personnaliser les détails de la création des utilisateurs et groupes sur le LDAP.
- Corriger le retrait des associations Slurm
- Corriger l'appel aux scripts non-python pour qu'ils puissent être appelés de n'importe où
- Rendre plus robuste la récupération des uid et gid sur le cluster
- Faire un nouveau play pour récupérer les uid/gid sur les nœuds ?