Redfish
Riferimento del driver Redfish - connessione HTTPS a un BMC, indirizzamento per percorso della risorsa più puntatore JSON, letture, scritture PATCH e tipi.
Il driver Redfish legge e scrive i servizi di gestione DMTF Redfish: l'API REST esposta dai BMC dei server (i controllori di gestione della scheda madre), dai telai e da altro hardware di centro dati per la gestione fuori banda. È un normale driver in modo client, cioè è Ganter Lab a collegarsi all'apparecchiatura, e il trasporto è sempre HTTPS: i BMC induriti non espongono altro, e il driver non scende mai da solo all'HTTP in chiaro.
Punti tipici letti in questo modo: lo stato di alimentazione, lo stato del secure boot, lo stato di salute del telaio e del gestore, la versione del firmware, le temperature e le letture delle ventole dalle risorse termiche.
Campi di connessione
| Campo | Che cos'è | Formato | Predefinito |
|---|---|---|---|
| Indirizzo host | Il nome host o l'indirizzo IP del servizio Redfish. | Nome host o IP | vuoto |
| Porta TCP | La porta su cui il servizio risponde. I controllori di gestione rispondono comunemente sulla 443, e un servizio pubblicato altrove lo dice qui. | Da 1 a 65535 | 443 |
| Nome utente | L'account del BMC usato per l'autenticazione HTTP Basic. Vuoto lascia le richieste anonime, cosa a cui un servizio protetto risponde con un errore di autorizzazione. | Testo libero | vuoto |
| Password del dispositivo | La password abbinata al nome utente. Protetta a riposo per utente di Windows, così il database di configurazione non contiene mai il valore in chiaro; una password inserita sotto un altro account Windows si presenta come illeggibile e va reinserita. | Testo libero | vuoto |
Alla connessione il driver verifica il servizio leggendo la radice del servizio
(/redfish/v1/). Il certificato TLS del BMC deve superare la normale convalida dei
certificati di Windows: un certificato BMC autofirmato deve essere considerato
attendibile da questa macchina prima che il dispositivo si colleghi. Una connessione
che fallisce dice perché nella pagina Eventi e nel file di diario della giornata, con
l'errore sottostante dietro, così una password rifiutata e un certificato non
attendibile si distinguono.
L'intervallo di interrogazione è configurabile: il valore predefinito del dispositivo (1000 ms) vale per ogni tag che non dichiari il proprio.
Indirizzamento dei tag
Un tag Redfish viene indirizzato da un percorso della risorsa più un puntatore JSON facoltativo dentro il documento che quella risorsa restituisce:
| Campo | Che cosa fa | Valori | Predefinito |
|---|---|---|---|
| Percorso della risorsa | Il percorso, relativo alla radice del servizio, della risorsa Redfish da leggere con una GET, per esempio redfish/v1/Chassis/1/Thermal. |
Testo libero (obbligatorio) | vuoto |
| Puntatore JSON (vuoto = intero documento) | Un puntatore RFC 6901 che seleziona un campo del JSON restituito, per esempio /Temperatures/0/ReadingCelsius. Gli elementi di array si indirizzano per indice; ~1 fa da carattere di fuga per una / dentro il nome di un campo e ~0 per una ~. La / iniziale mancante viene aggiunta per te. Vuoto restituisce l'intero documento come testo. |
Puntatore JSON oppure vuoto | vuoto |
Esempi dell'indirizzo composto (mostrato in sola lettura come anteprima dell'origine sul bus):
redfish/v1/Systems/1#/PowerState: lo stato di alimentazione del sistema, come stringa.redfish/v1/Chassis/1/Thermal#/Temperatures/0/ReadingCelsius: il primo sensore termico, come numero.redfish/v1/Systems/1/SecureBoot#/SecureBootEnable: il secure boot, come booleano.
A ogni lettura il driver esegue una GET sulla risorsa, analizza il JSON, segue il
puntatore e converte il risultato nel tipo di dato dichiarato dal tag. Un puntatore che
non nomina nulla nel documento, e un campo che il documento porta come null JSON, si
leggono entrambi come nessun valore: il tag passa a cattiva qualità e la sua politica
di lettura fallita decide che cosa viene presentato, invece di far arrivare la parola
null come lettura buona. Una risposta che non è JSON viene analizzata direttamente
secondo il tipo dichiarato.
Scritture
I tag con una modalità di accesso scrivibile eseguono una PATCH sul campo indirizzato:
il driver costruisce il documento JSON più piccolo che copre solo il percorso del
puntatore (per /Parent/Child, il corpo {"Parent":{"Child":<value>}}) e lo invia
alla risorsa. Da questo discendono due vincoli:
- Una scrittura richiede un puntatore JSON. Un tag sull'intero documento (puntatore vuoto) non si può scrivere: il pannello del tag rifiuta la combinazione mentre stai modificando, dicendo che il campo manca, e un tentativo che raggiunga comunque il servizio fallisce con il motivo nel diario.
- È il BMC a decidere che cosa è scrivibile; una PATCH che il servizio respinge si legge come scrittura fallita.
Come dappertutto, il valore che scrivi nella casella di scrittura del tag è il valore ingegneristico, e le fasi di conversione del tag vengono percorse all'indietro prima che il valore grezzo vada sul bus, come è descritto nella pagina Connector.
Tipi di dato supportati
Boolean, Int32, Int64, Float, Double e String. Scegli il tipo che corrisponde al campo
JSON: i booleani per gli interruttori come SecureBootEnable, i numeri per le letture,
le stringhe per gli stati come PowerState oppure Health.
Comandi
Un servizio Redfish pubblica un'azione per ogni cosa che gli si può chiedere di fare,
ciascuna al proprio percorso sotto la risorsa su cui agisce. La stazione non le
indovina, perché solo la documentazione dell'hardware dice quali esistono: le dichiari
tu sul dispositivo, nella scheda Comandi della sua pagina. Ogni comando porta un
nome, il percorso dell'azione
(redfish/v1/Systems/1/Actions/ComputerSystem.Reset) e, facoltativamente, il nome
dell'unico valore che accetta (ResetType); il verbo Invia della riga lo manda, e
quello che il servizio ha risposto viene riferito indietro. Un comando diventa anche un
metodo sul dispositivo nello spazio degli indirizzi OPC UA proprio di questa stazione,
così qualunque cosa sappia chiamare un metodo lo può emettere.
Il valore viaggia come corpo della richiesta. Un valore che è già JSON viene inviato
come è scritto; qualunque altra cosa viene inviata come
{"<the name you declared>": "<the value>"}, che è la forma che l'azione di reset
propria di Redfish si aspetta.
Rilevamento
Il pulsante Rileva legge un solo servizio: metti il suo indirizzo nella scheda
Ambito della scansione della pagina del driver (https://bmc-host, oppure l'indirizzo
che il fornitore documenta) e la scansione percorre il primo sistema, il primo gestore
e il primo telaio di quel servizio, offrendo il dispositivo con quei punti pronti da
aggiungere. La scansione legge il servizio in HTTPS e senza credenziali, perché gira
prima che esista il dispositivo che le porterebbe, quindi un servizio che autentica
ogni richiesta non risponde nulla e va aggiunto a mano. Il rilevamento SSDP proprio di
Redfish ha bisogno del multicast UDP, che il driver interno al processo non fa, quindi
diffondendo non si trova nulla: la scansione legge l'indirizzo che le dai.