Académique Documents
Professionnel Documents
Culture Documents
RackTables
Fabien Priotto
Direction du Système d’Information et du Numérique
Service des moyens informatiques (infrastructures)
UNIVERSITÉ DE MONTPELLIER
CC 427 – Espace Richter – Rue Vendémiaire – Bât. B – CS 19519
34 960 Montpellier Cedex 2
https://www.umontpellier.fr
Résumé
L’Université de Montpellier n’échappe pas à la mode des bases de données de gestion de
configuration (CMDB) qui visent à donner une vue d’ensemble sur les actifs logiciels et matériels
du SI.
Dans cette perspective, RackTables est une solution libre et gratuite. Basée sur une architecture
LAMP, elle permet d’établir l’inventaire des locaux techniques. Cette technologie se révèle à la
hauteur de sa tâche, mais nous autres, insatiables humains et néanmoins collègues, exigeons
toujours plus de confort et de facilité.
Des outils maison sous forme de plugins viennent donc compléter RackTables :
• RackMaps pour géolocaliser les bâtiments dans les cartes Google et OpenStreetMap,
• RackReports pour vérifier d’un coup d’œil le nommage des divers objets référencés,
• RackArchives, pour faciliter l’accès aux documents archivés notamment les images.
Nous répertorions aujourd’hui plus de 400 baies, 290 locaux, 300 commutateurs et 600 tiroirs
optiques sur 6 villes et 22 sites. Les matériels sont référencés selon le triptyque fondamental à
RackTables (Location / Row / Rack) : une localisation (bâtiment avec ses coordonnées GPS), un
local (local technique, placard, bureau, gaine technique, etc. ) et une position dans une baie.
Avec un accès restreint pour l’instant aux quelques agents du service des infrastructures de la
DSIN, via une authentification Radius, notre usage de RackTables se heurte déjà à un cruel
constat : les évolutions matérielles vont bon train et l’inventaire ne reste pas à jour. Nous
évoquerons donc en fin de présentation quelques pistes pour tenter de remédier à ce problème
crucial pour la qualité de notre cher référentiel...
Mots-clefs
RackTables, CMDB, référentiel, matériel, inventaire, opensource
1 Prologue
Il fut un temps où les ingénieurs et techniciens informaticiens de nos universités, éparpillés dans les
nombreuses composantes, ne connaissaient pas, ou si peu, de directions informatiques.
Les échanges entre confrères étaient plus ou moins organisés. Parfois existait-il un centre de
ressources informatiques pour le partage des connaissances. Les administrateurs systèmes et
1 À l'origine exclusivement centrés sur l'administration et la programmation des systèmes Unix, les livres publiés par
O'Reilly couvrent en 2005 tous les domaines de l'informatique.
2 https://www.csiesr.eu
3 https://www.racktables.org/
Avec RackTables, nous disposons d’une interface pour identifier et accéder à une description des
différents objets (OBJECTS) selon un triptyque fondamental : les localisations (LOCATIONS),
les locaux (ROWS) et les baies (RACKS).
Les types d’objets sont définis dans le chapitre ObjectType du dictionnaire qui peut facilement être
édité. Chaque instance de RackTables possède son propre dictionnaire (Main page : Configuration :
Dictionary) qu’il convient d’étudier avec de commencer les saisies car c’est là que sont définis non
4 https://wiki.racktables.org/index.php/RackTablesDevelGuide#RackCode
5 https://wiki.racktables.org/index.php/RackTablesDevelGuide#Realms
La représentation des locaux prend la forme d’un résumé accompagné d’une vue réduite de chacun
des racks contenus dans le local. À Montpellier, nous désignons plusieurs types de locaux : salle
serveurs (SS), local technique (LT), local pour le rangement (LPR), gaine technique (GT), coffret
dans un espace publique (CO), placard (PL).
Notez au passage la fonctionnalité de Tag qui offre la possibilité de classer les objets avec un petit
effet de couleur.
Les sites et les bâtiments sont tous référencés en tant que localisations (locations). Nous les
nommons selon le référentiel de la direction du patrimoine. En ce qui concerne les locaux (Rows), la
direction du patrimoine a effectué un étiquetage précis que nous reportons dans RackTables (noms
des sites, des bâtiments et numéro des salles).
Un site est une localisation mère. Dans notre référentiel montpelliérain, le nom d’un site commence
par un numéro et celui d’un bâtiment commence par le nom de sa localisation mère. Cette
convention est intéressante pour la cartographie. Ainsi, dans la figure 5, le site 05.CSU contient un
bâtiment CSU-C au rez-de-chaussée duquel se trouve un local technique LT-CSU-00-57.0.
Quelques lignes de codes insérées dans le fichier inc/interface.php de la distribution RackTables
permettent de modifier la fonction renderLocationPage($location_id) et d’ajouter des clés au
tableau summary pour y insérer des références dynamiques. Cela peut permettre d’ajouter quelques
hyperliens dans la description des localisations.
$summary['Location']="<a href='/index.php?page=rackspace&tab=maps&loc=".$locationData['name']."'>".
$locationData['name'] ."</a>";
De son passage il y a quelques années en laboratoire de Recherche, notre chargé d’inventaire, qui
n’en demeure pas moins un programmeur, avait conservé quelques lignes de code de divers
développements. En termes de cartographie, ce fut assez rapide pour lui de mettre en action l’API
JavaScript de la Google Maps platform6.
Cette librairie permet de personnaliser les cartes pour les afficher sur des pages Web et des appareils
mobiles. Et c’est au bout d’environ 600 lignes d’un code fonctionnel JavaScript que la solution
Google Location vit le jour.
6 https://developers.google.com/maps
Pas tout à fait surpris par une telle manœuvre commerciale du groupe au monopole, le développeur
Web, qui a plus d’un tour dans son sac, migre rapidement son application vers une librairie gratuite.
C’est ainsi que le projet Open Location et son petit kilo de lignes de code propulsé par les librairies
gratuites OpenLayers 7en version 5 prend place.
La version 0.21.0 de RackTables introduit une nouvelle architecture de modules d’extension, qui
inclut la possibilité d'installer, de désinstaller, d'activer et de désactiver des outils complémentaires à
partir de l'interface Web 9. Chaque module réside dans son propre répertoire et fournit un fichier
plugin.php qui inclut les fonctions d’information, installation, suppression et mise à jour du plugin.
Ce design a été inspiré par l'architecture des plugins de Cacti. C’est sur ce modèle que les
applications Google Location et Open Location se retrouvent intégrées à RackTables sous couvert
du plugin nommé RackMaps.
7 https://openlayers.org/
8 https://wiki.racktables.org/index.php/RackTablesDevelGuide
9 https://wiki.racktables.org/index.php/Plugins
Figure 10: les outils complémentaires sous forme de modules d'extension de RackTables
3.1 RackReports
Nous avions signalé au chapitre 2.3 qu’un index MySQL était disponible pour identifier les
différents types d’éléments : objtype_id. C’est cet identifiant qui va permettre des faire le tri parmi
les multiples objets référencés. Puisque les requêtes SNMP ne sont pas toujours possibles, il ne reste
plus qu’à ranger dans une liste les noms d’usage pour chacun des divers matériels et de vérifier pour
chacun qu’il soit correctement enregistré dans la base de données de RackTables.
Figure 12: RackReports, des rapports sur les noms d’objets depuis l’onglet CheckedReport de la
page Reports dans RackTables
Ainsi, un bon référentiel exige une identification minutieuse des matériels et cela se fait notamment
grâce aux photos et vidéo prises sur le terrain qu’il est bon de stocker sous formes d’archives
accessibles directement depuis RackTables.
3.3 QR-code
La fonction renderObject disponible dans le fameux fichier inc/interface.php de la distribution
RackTables détermine la vue pour un objet et prend en paramètre d’entrée l’identifiant de cet objet.
L’insertion des 2 lignes de code ci-dessous dans cette fonction permet de faire appel à une API en
spécifiant la valeur de l’identifiant (le fameux object_id d que nous mentionnâmes à la fin du
chapitre 2.3 ). Notez au passage l’encodage UTF-8 de l’URI pour la variable qrcodeURL.
$qrcodeURL = API_QR_CODE . MY_URL . "/index.php%3Fpage=object%26object_id=" . $object_id;
echo "<tr><td class=pcright><a href=". $qrcodeURL . "><img src=" .$qrcodeURL ."></a></td></tr>";
A Montpellier, nous utilisons l’API Quickchart11 mais ce n’est qu’indicatif et il suffit de définir la
constante API_QR_CODE dans une petite ligne de code à placer en début du fichier
inc/interface.php.
define("API_QR_CODE","https://quickchart.io/qr?text=");
10 hhttps://www.directorylister.com/
11 https://quickchart.io/
12 https://github.com/RackTables/racktables-contribs
Pour localiser dans un rack un nouveau matériel, il faut saisir la ligne suivante:
RACKASSIGNMENT;COMMON_NAME;RACK_NAME;UNITS_LIST;INDICATIONS_LIST
C'est la méthode la plus ancienne. Les hachages de mot de passe sont stockés dans la base de
données SQL avec toutes les autres données. RackTables vérifie les mots de passe lui-même.
Cette méthode d’authentification s’active par la ligne suivante dans le fichier inc/secret.inc :
$require_local_account = TRUE;
Dans ce mode, RackTables s'assure uniquement que l'utilisateur soit valide. Il faut que le serveur
Web qui héberge RackTables soit configuré pour garantir la redirection vers un service
d’authentification.
Cette méthode s’active par les lignes suivantes dans le fichier inc/secret.inc:
$user_auth_src = 'httpd';
$require_local_account = FALSE;
RackTables est compatible avec les méthodes d’authentification htpasswd, Radius, LDAP, Kerberos
et Shibboleth. Tout ceci est bien documenté dans le guide à l’administration en ligne 13.
5 La cause d’Inventaire
Un bon référentiel constitue un outil stratégique de traçabilité. L’inventaire est une préoccupation
technique. Il exige de visiter des locaux parfois peu accessibles, de localiser des appareils qu’il n’est
pas toujours évident de distinguer, une gestion logicielle voire quelques développements spécifiques
et une mise à jour des données au fil des mouvements de matériels. Chaque établissement verra bien
de quelles forces en présence il dispose et saura fixer son propre niveau d’ambition. A Montpellier,
dans notre université, il est trop tôt pour faire une réelle évaluation des gains mais un rapide tour de
table auprès des collègues semble indiquer que RackTables est salutaire pour préparer les opérations
de terrain. Il est important de souligner que la pérennité de cette solution dépendra de l’effort
collaboratif dans la saisie des données au fil de l’eau sous peine de vite devenir obsolète. En étant
optimisme, on peut espérer que les collègues adopteront la bonne manière pour contribuer et nous
pourrons parier que les prestataires d’infogérance, qui ne manqueront pas de se positionner sur le
marché de l’enseignement supérieur, apprécieront de disposer d’un tel outil.
13 https://wiki.racktables.org/index.php/RackTablesAdminGuide#User_authentication
ROW:
select `o`.`id` AS `id`,`o`.`name` AS `name`,`l`.`id` AS `location_id`,`l`.`name` AS
`location_name` from ((`racktablesprep`.`object` `o` left join `racktablesprep`.`entitylink` `el`
on(((`o`.`id` = `el`.`child_entity_id`) and (`el`.`parent_entity_type` = 'location') and
(`el`.`child_entity_type` = 'row')))) left join `racktablesprep`.`object` `l`
on(((`el`.`parent_entity_id` = `l`.`id`) and (`l`.`objtype_id` = 1562)))) where (`o`.`objtype_id` =
1561)
LOCATION :
select `o`.`id` AS `id`,`o`.`name` AS `name`,`o`.`has_problems` AS `has_problems`,`o`.`comment` AS
`comment`,`p`.`id` AS `parent_id`,`p`.`name` AS `parent_name` from (`racktablesprep`.`object` `o`
left join (`racktablesprep`.`object` `p` join `racktablesprep`.`entitylink` `el`
on(((`el`.`parent_entity_id` = `p`.`id`) and (`p`.`objtype_id` = 1562) and
(`el`.`parent_entity_type` = 'location') and (`el`.`child_entity_type` = 'location'))))
on((`el`.`child_entity_id` = `o`.`id`))) where (`o`.`objtype_id` = 1562)
Bibliographie
[1] Ludovic Hyvert Emmanuel Le Normand - FusionInventory, le nouveau duo de la gestion de
parc !, 2013. https://2013.jres.org/archives/148/paper148_article.pdf
[2] Pascal Mouret Clément Gérardin - Un outil open source de gestion de l'infrastructure physique
des réseaux informatiques , https://2013.jres.org/archives/156/paper156_article.pdf