Skip to content

Gestion de tâches centralisées avec RunDeck

rundeck-mockupRunDeck est un outil centralisé de gestion de tâches (cron par exemple). Il est écrit en Java et gère la connexion vers ses « nodes » en SSH. C’est un outil très puissant avec divers plugins intéressants permettant entre autre l’interconnexion avec des outils de gestion de configurations (Salt, Puppet …).

« …it’s the swiss army knife for ops. » -Jordan Koch

Nous allons donc voir dans cet article comment mettre en place un serveur RunDeck et le relier à différents nodes afin de programmer divers tâches. Dans la plupart des cas, il est utilisé pour automatiser des déploiements ou des tests unitaires cependant on peut également l’utiliser pour des tâches classiques utilisées dans les cron jobs.

On va utiliser le paquet *.deb fournit par le site officiel pour une installation sur un serveur Debian / Ubuntu :

wget dl.bintray.com/rundeck/rundeck-deb/rundeck-2.6.2-1-GA.deb
apt-get install openjdk-7-jdk
dpkg -i rundeck-2.6.2-1-GA.deb

L’installation est terminée !

RunDeck fournit une interface Web, une interface en ligne de commande et une API Web. Nous allons utiliser principalement l’interface web pour gérer nos tâches.
Le service web écoute par défaut sur localhost, on va donc éditer le fichier de configuration /etc/rundeck/rundeck-config.properties et modifier cette ligne :

 # change hostname here
  grails.serverURL=http://your-server:4440

On va maintenant redémarrer RunDeck pour qu’il prennent cela en compte :

service rundeckd restart

Il faut attendre un petit peu que le service soit up et vous devriez pouvoir joindre l’interface web sur le port 4440. Le login par défaut est admin;admin, n’oubliez pas de le changer.

On va donc commencer par créer un projet :

create-project-rundeck

Laissez les paramètres par défaut si ils vous conviennent, ce sera très bien.
RunDeck utilise une clé privée SSH pour se connecter à ses nodes, elle est situé à /var/lib/rundeck/.ssh/id_rsa.
La liste des nodes se situe dans le fichier /var/rundeck/projects/<your-project>/etc/resources.xml, c’est ici qu’on ajoute les serveurs qu’on souhaitent administrer.

Voici un exemple pour quelques serveurs :

<?xml version="1.0" encoding="UTF-8"?> 
 <project>
<node name="server1" description="Rundeck" tags="" hostname="serv1" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.16.0-4-amd64" username="root"/>
<node name="server2" description="Grafana" tags="" hostname="serv2" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.16.0-4-amd64" username="root"/>
<node name="server3" description="Backup" tags="" hostname="serv3" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.16.0-4-amd64" username="root"/>
</project>

Dans cet exemple de projet, le serveur Rundeck est relié à 2 serveurs et à lui même (pour gérer ses propres tâches). Il suffit maintenant d’ajouter la clé publique du serveur Rundeck sur nos serveurs à manager (exemple pour server1) :

KEY=$(cat /var/lib/rundeck/.ssh/id_rsa.pub) ; ssh [email protected] echo $KEY >> /root/.ssh/authorized_keys

Nos serveur sont donc joignable par Rundeck sans saisir de mot de passe ! On peut vérifier avec cette commande qui devrait vous connecter directement :

ssh [email protected] -i /var/lib/rundeck/.ssh/id_rsa

Maintenant qu’ils sont reliés, on va pouvoir créer nos premières tâches à effectuer sur ces serveurs :

create-job-rundeck

Le fonctionnement des Jobs sous RunDeck s’effectue en étapes (Steps), elles peuvent être l’exécution d’une commande, la lancement d’un script ou même l’exécution d’un autre job. On ajoute donc une étape :

Nous allons prendre l’exemple que nous souhaitons lancer la commande « who » qui permet de savoir qui est connecté sur le serveur et de le logguer dans le fichier /srv/login_history. Pour cela on ajoute donc une étape « Command« .

rundeck-example-cmd

On a ensuite la possibilité de choisir sur quel node l’exécuter (locally ou dispatch to nodes), de choisir une fréquence de répétition (schedule to run), de choisir le niveau de debug, de recevoir des notifications ou de relancer en cas d’échec. Bref, plein d’options intéressantes.

Maintenant que notre job est créé, on va pouvoir le trouver dans notre liste de jobs et l’exécuter :

rundeck-runjob

rundeck-job-success

Notre job semble s’être correctement exécuté, on peut aller vérifier sur le serveur :

On a donc grâce à RunDeck une possibilité de logguer les users connectés sur ce serveur. Il serait intéressant de programmer cette tâche pour qu’elle s’effectue automatiquement (c’est le but), pour cela on modifie le job et se rend à la section  » Schedule to run repeatedly?  » .

rundeck-schedule

Dans mon cas j’ai programmé cela à 17h00 tous les jours, cela permettrai de savoir qui fait des heures sup’ sur les serveurs ! On peut bien sur utiliser une syntaxe Crontab à la place.

Maintenant que vous savez installer Rundeck et créer un job, vous pourrez remplacer peu à peu les centaines de tâches cron qui moisissent sur vos serveurs. RunDeck est génial car il permet de créer plusieurs projets en fonction de ses besoins (Dev, Ops, Tests …) et de gérer plein de nodes ce qui ajoute une grosse couche d’automatisation aux tâches récurrentes. Il est également possible d’installer plein de plugins qui étendent les possibilités de RunDeck (Saltstack, Puppet, Hipchat, Chef, Fluentd …).

Voici par exemple les notifications que je reçois dans mon Hipchat :

rundeck-hipchat

Published inDevOpsLinuxTutorielWeb

5 Comments

  1. Intéressant comme outil. Dommage que c’est du Java. :/

    • t’aurais voulu que ça soit fait en php ?!!! 😉 😉 😉 😉

  2. Emmanuel Blaugy Emmanuel Blaugy

    Bonjour je recherche une formation de rundeck en français. Pouvez vous me contacter pour en discuter ?

  3. mykry mykry

    bonjour
    Il est bienfait votre tuto; il m’a aidé dans mon projet final. Je vous en remercie
    J’ai juste un souci au niveau du fichier resources.xml
    Je ne le trouve pas (il devrait exister avec un noeud par défaut: localhost non?)
    Ne le trouvant pas, je l’ai créé, mais mes nodes ne s’affichent pas sur rundeck
    J’ai des amis qui ont le mm problème dans d’autres groupes du projet
    Qu’est-ce qui expliquerait cela? Comment résoudre ce souci?
    Cordialement

    • valentin valentin

      Salut,

      Le fichier en question se trouve ici :
      /var/rundeck/projects//etc/resources.xml
      mais il est aussi éditable dans Rundeck directement.

      🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Proudly hosted with Open-sources Softwares.