Redfish
Référence du pilote Redfish : connexion HTTPS à un BMC, adressage par chemin de ressource et pointeur JSON, lectures, écritures PATCH et types.
Le pilote Redfish lit et écrit des services de gestion DMTF Redfish : l'API REST exposée par les BMC de serveurs (baseboard management controllers), les châssis et les autres matériels de centre de données pour la gestion hors bande. C'est un pilote client ordinaire (Ganter Lab se connecte au matériel) et le transport est toujours HTTPS : les BMC durcis n'exposent rien d'autre, et le pilote ne se rabat jamais de lui-même sur du HTTP simple.
Les points typiquement lus ainsi : l'état d'alimentation, l'état du démarrage sécurisé, l'état de santé du châssis et du gestionnaire, la version du micrologiciel, les températures et les relevés de ventilateurs des ressources thermiques.
Champs de connexion
| Champ | Ce que c'est | Format | Défaut |
|---|---|---|---|
| Hôte | Le nom d'hôte ou l'adresse IP du service Redfish. | Nom d'hôte ou IP | vide |
| Port réseau | Le port sur lequel le service répond. Les contrôleurs de gestion répondent couramment sur 443, et un service publié ailleurs le dit ici. | De 1 à 65535 | 443 |
| Nom d'utilisateur | Le compte BMC employé pour l'authentification HTTP Basic. Vide laisse les requêtes anonymes, ce à quoi un service protégé répondra par une erreur d'autorisation. | Texte libre | vide |
| Mot de passe | Le mot de passe associé au nom d'utilisateur. Protégé au repos par utilisateur Windows, si bien que la base de configuration ne porte jamais la valeur en clair ; un mot de passe saisi sous un autre compte Windows s'affiche comme illisible et doit être saisi de nouveau. | Texte libre | vide |
À la connexion, le pilote vérifie le service en lisant la racine de service
(/redfish/v1/). Le certificat TLS du BMC doit passer la validation de certificat
Windows normale : un certificat de BMC auto-signé doit être accordé par cette machine avant
que l'équipement ne se connecte. Une connexion en échec dit pourquoi sur la page Événements et dans
le fichier journal du jour, avec l'erreur sous-jacente derrière, si bien qu'un mot de passe refusé et
un certificat non accordé se distinguent.
La période de scrutation est configurable : la valeur par défaut de l'équipement (1000 ms) s'applique à chaque tag qui ne donne pas la sienne.
Adressage des tags
Un tag Redfish est adressé par un chemin de ressource plus un pointeur JSON facultatif dans le document que cette ressource retourne :
| Champ | Ce qu'il fait | Valeurs | Défaut |
|---|---|---|---|
| Chemin de ressource | Le chemin, relatif à la racine de service, de la ressource Redfish à récupérer en GET, par exemple redfish/v1/Chassis/1/Thermal. |
Texte libre (obligatoire) | vide |
| Pointeur JSON (vide = document entier) | Un pointeur RFC 6901 qui sélectionne un champ du JSON retourné, par exemple /Temperatures/0/ReadingCelsius. Les éléments de tableau s'adressent par index ; ~1 échappe un / dans un nom de champ et ~0 un ~. Un / de tête manquant est ajouté pour vous. Vide retourne le document entier sous forme de texte. |
Pointeur JSON ou vide | vide |
Exemples de l'adresse assemblée (montrée en lecture seule dans l'aperçu de source de bus) :
redfish/v1/Systems/1#/PowerState: l'état d'alimentation du système, sous forme de chaîne.redfish/v1/Chassis/1/Thermal#/Temperatures/0/ReadingCelsius: le premier capteur thermique, sous forme de nombre.redfish/v1/Systems/1/SecureBoot#/SecureBootEnable: le démarrage sécurisé, sous forme de booléen.
À la lecture, le pilote récupère la ressource en GET, analyse le JSON, suit le pointeur et
convertit le résultat vers le type de donnée déclaré du tag. Un pointeur qui ne nomme rien
dans le document, et un champ que le document porte en null JSON, se lisent tous deux comme aucune
valeur : le tag passe en mauvaise qualité et sa politique de lecture en échec décide de ce qui est
présenté, plutôt que le mot null n'arrive en lecture correcte. Une réponse qui
n'est pas du JSON est analysée directement selon le type déclaré.
Écritures
Les tags dont le mode d'accès est inscriptible modifient le champ adressé en PATCH : le pilote construit le
plus petit document JSON couvrant le seul chemin du pointeur (pour
/Parent/Child, le corps {"Parent":{"Child":<value>}}) et l'envoie à la
ressource. Deux contraintes en découlent :
- Une écriture exige un pointeur JSON. Un tag sur document entier (pointeur vide) ne peut pas être écrit : le volet du tag refuse la combinaison pendant que vous modifiez, en disant que le champ manque, et une tentative qui atteindrait tout de même le service échoue avec la raison dans le journal.
- C'est le BMC qui décide de ce qui est inscriptible ; un PATCH que le service rejette se lit comme une écriture en échec.
Comme partout ailleurs, la valeur que vous tapez dans la zone d'écriture du tag est la valeur physique, et les étapes de conversion du tag sont remontées avant que la valeur brute ne parte sur le bus, comme le décrit la page Connector.
Types de donnée pris en charge
Boolean, Int32, Int64, Float, Double et String. Choisissez le type qui correspond au champ
JSON : des booléens pour les drapeaux comme SecureBootEnable, des nombres pour les relevés, des chaînes
pour les états comme PowerState ou Health.
Commandes
Un service Redfish publie une action par chose qu'on peut lui demander de faire, chacune à son propre
chemin sous la ressource sur laquelle elle agit. La station ne les devine pas, parce que seule la
documentation du matériel dit lesquelles existent : vous les déclarez sur l'équipement, dans la
carte Commandes de sa page. Chaque commande porte un nom, le chemin de l'action
(redfish/v1/Systems/1/Actions/ComputerSystem.Reset), et éventuellement le nom de la seule
valeur qu'elle prend (ResetType) ; le verbe Exécuter de la ligne l'envoie, et ce que le service a répondu
est rapporté. Une commande devient aussi une méthode sur l'équipement dans l'espace d'adressage OPC
UA propre à cette station, si bien que tout ce qui peut appeler une méthode peut l'envoyer.
La valeur voyage dans le corps de la requête. Une valeur qui est déjà du JSON est envoyée telle qu'écrite ;
tout le reste est envoyé sous la forme {"<le nom que vous avez déclaré>": "<la valeur>"}, qui est la forme
qu'attend l'action de réinitialisation propre à Redfish.
Découverte
Le bouton Découvrir lit un service : placez son adresse dans la carte Portée du balayage de la page
du pilote (https://bmc-host, ou l'adresse que le fabricant documente) et le balayage parcourt le
premier système, le gestionnaire et le châssis de ce service, en proposant l'équipement avec ces points prêts
à ajouter. Le balayage lit le service en HTTPS et sans identifiants, parce qu'il tourne avant que
l'équipement qui les porterait n'existe, si bien qu'un service qui authentifie chaque requête
ne répond rien et s'ajoute à la main. La découverte SSDP propre à Redfish a besoin de multidiffusion
UDP, que le pilote interne au processus ne fait pas, si bien que rien n'est trouvé par diffusion : le
balayage lit l'adresse que vous lui donnez.