J'ai migré cette question depuis StackOverflow.
Je gère une instance Gitlab-Omnibus (Community Edition) dans notre entreprise en tant que tâche supplémentaire.
Gitlab utilise le serveur Active Directory de l'entreprise pour l'authentification. Nos gestionnaires réseau créent des comptes AD pour les nouveaux employés et les suppriment lorsqu'ils partent. Gitlab crée normalement ses propres comptes d'utilisateurs lors de la première connexion et les bloque lors des tentatives de connexion après la suppression du compte AD.
Il devrait donc être très facile de nettoyer ces "âmes mortes".
Le problème est : les utilisateurs ne sont pas bloqués, l'état du compte Gitlab reste "Actif" après le départ d'un employé, car personne n'essaie de se connecter à Gitlab après son départ. Le serveur lui-même est inaccessible depuis Internet, les anciens employés ne peuvent pas entrer dans les locaux car leurs cartes d'accès sont détruites, leurs PC sont démontés ou formatés avec une nouvelle installation du système d'exploitation.
Je dois donc essayer manuellement d'usurper chaque compte et vérifier si Gitlab le bloque (merci aux développeurs de Gitlab pour la fonctionnalité d'usurpation, au moins quelque chose que j'ai).
J'aimerais automatiser ce processus, car il y a plus de 100 comptes utilisateurs dans Gitlab, et je ne reçois pas de notifications concernant les employés qui ont quitté l'entreprise (je ne suis ni responsable des ressources humaines, ni administrateur système ; je n'en ai généralement pas besoin car il y a beaucoup d'employés qui n'ont pas besoin de comptes Gitlab).
Mon objectif est de développer un script ou un extrait Ruby que je pourrais coller dans la console gitlab-rails.
Cet extrait devrait balayer tous les utilisateurs enregistrés dans Gitlab, vérifier leur existence dans LDAP et bloquer tous ceux qui manquent dans LDAP.
Ensuite, je passerais en revue tous les utilisateurs bloqués, transfèrerais leurs projets personnels à leurs superviseurs et les supprimerais.
Le problème est que je ne suis pas du tout familier ni avec Ruby, ni avec les rouages internes de Gitlab.
Une aide ?
Je fais :
irb(main):039:0> User.all
=> #, #, ...]>
Mais :
irb(main):040:0> for u in User.all do
irb(main):041:1* puts u
irb(main):042:1> done
irb(main):043:1>
irb(main):044:1* ^C
irb(main):044:0>
Aucune sortie.
Qu'est-ce que je fais de mal ?
Mise à jour
La syntaxe correcte de la boucle devrait être comme ceci :
User.all.each { |u| puts u.name }
Il est maintenant temps d'attendre que quelqu'un parte et de trouver quoi vérifier pour définir u.state = "ldap_blocked"