Redfish
Redfish のドライバーの手引き。BMC への HTTPS の接続、リソースのパスと JSON ポインターによるアドレス指定、読み取り、PATCH の書き込み、そして型。
Redfish のドライバーは、DMTF Redfish の管理サービスを読み書きします。サーバーの BMC(ベースボード管理コントローラー)、シャーシ、そして帯域外管理のためのデータセンターの機材が公開している REST の API です。こちらから接続するふつうの方式のドライバーで、Ganter Lab のほうから現場設備につなぎます。通信は必ず HTTPS です。堅牢にした BMC はそれ以外を公開しませんし、ドライバーが自分の判断でふつうの HTTP に落とすことは決してありません。
この方法でよく読む値は、電源の状態、セキュアブートの状態、シャーシとマネージャーの健全性、ファームウェアの版、そして熱のリソースが持つ温度とファンの読み取りです。
接続の項目
| 項目 | 意味 | 形式 | 既定 |
|---|---|---|---|
| ホスト | Redfish のサービスのホスト名か IP アドレス。 | ホスト名か IP | 空 |
| ポート | サービスが答えるポート。管理コントローラーはたいてい 443 で答えますし、別の場所で公開しているサービスはここでそう伝えます。 | 1 から 65535 | 443 |
| ユーザー名 | HTTP Basic の認証に使う BMC のアカウント。空のままなら要求は匿名になり、保護されたサービスは認可のエラーで答えます。 | 自由記述 | 空 |
| パスワード | ユーザー名と組になるパスワード。Windows のユーザーごとに保存時に保護されるので、構成のデータベースが平文を持つことはありません。別の Windows アカウントで入力したパスワードは読めないものとして表示されるので、入力し直してください。 | 自由記述 | 空 |
接続のとき、ドライバーはサービスのルート(/redfish/v1/)を読んで、そのサービスを確かめます。BMC の TLS の証明書は、Windows のふつうの証明書の検証を通らなければなりません。BMC の自己署名の証明書は、機器がつながる前に、この機械が信頼している必要があります。接続が失敗したときは、イベントのページとその日のログファイルが理由を述べ、その奥にある元のエラーも添えるので、拒否されたパスワードと信頼されていない証明書は区別できます。
読み出し周期は設定できます。機器の既定(1000 ms)は、自分の周期を書いていないすべてのタグに効きます。
タグのアドレス指定
Redfish のタグは、リソースのパスと、そのリソースが返す文書への任意の JSON ポインターでアドレスを取ります。
| 項目 | 意味 | 受け付ける値 | 既定 |
|---|---|---|---|
| リソースのパス | GET する Redfish のリソースの、サービスのルートから見たパス。たとえば redfish/v1/Chassis/1/Thermal。 |
自由記述(必須) | 空 |
| JSON ポインター(空なら文書の全体) | 返ってきた JSON の 1 つの項目を選ぶ RFC 6901 のポインター。たとえば /Temperatures/0/ReadingCelsius。配列の要素は添字で指します。項目名の中の / は ~1、~ は ~0 で書きます。先頭の / が抜けていれば補います。空なら文書の全体を文字列として返します。 |
JSON ポインターか空 | 空 |
組み立てられたアドレスの例です(「取得元」の予告として読み取り専用で見えます)。
redfish/v1/Systems/1#/PowerState:システムの電源の状態を文字列として。redfish/v1/Chassis/1/Thermal#/Temperatures/0/ReadingCelsius:最初の温度センサーを数値として。redfish/v1/Systems/1/SecureBoot#/SecureBootEnable:セキュアブートをブール値として。
読み取りのとき、ドライバーはそのリソースを GET し、JSON を解釈し、ポインターをたどり、その結果をタグに宣言したデータ型に変換します。文書の中の何も指さないポインターと、文書が JSON の null として持っている項目は、どちらも値なしとして読まれます。null という語が良好な読み取りとして届くのではなく、タグが品質の悪い状態になり、読み取りに失敗したときの方針が何を見せるかを決めます。JSON ではない応答は、宣言した型としてそのまま解釈します。
書き込み
書き込めるアクセスのタグは、指したその項目を PATCH します。ドライバーはポインターの道すじだけを覆う最小の JSON の文書を組み立て(/Parent/Child なら本文は {"Parent":{"Child":<value>}})、それをリソースへ送ります。ここから制約が 2 つ出てきます。
- 書き込みには JSON ポインターが要ります。文書の全体を指すタグ(ポインターが空)は書けません。編集している最中にタグのパネルがその組み合わせを拒否し、項目が足りないと伝えます。それでもサービスまで届いた試みは、理由を診断ログに残して失敗します。
- 何を書けるかは BMC が決めます。サービスが拒んだ PATCH は、失敗した書き込みとして読まれます。
ほかのすべてと同じで、タグの書き込みの入力欄に入力する値は工業値です。生値がバスに出る前に、そのタグの変換の段階が逆向きに適用されます。Connector のページに書いてあるとおりです。
対応するデータ型
Boolean、Int32、Int64、Float、Double、String です。JSON の項目に合う型を選んでください。SecureBootEnable のようなフラグにはブール値、読み取り値には数値、PowerState や Health のような状態には文字列です。
コマンド
Redfish のサービスは、頼めることの 1 つずつにアクションを公開していて、それぞれが、そのアクションが働きかけるリソースの下の自分のパスにあります。ステーションはそれを当てにいきません。どれがあるのかは、その機材自身の文書だけが述べるからです。機器のページのコマンドのカードで宣言してください。コマンドはそれぞれ、名前、アクションのパス(redfish/v1/Systems/1/Actions/ComputerSystem.Reset)、そして受け取る 1 つの値の名前(ResetType、任意)を持ちます。行の実行の操作がそれを送り、サービスが何と答えたかを伝えます。コマンドは、このステーション自身の OPC UA のアドレス空間で機器のメソッドにもなるので、メソッドを呼べるものなら何からでも出せます。
値は要求の本文として運ばれます。すでに JSON である値は書いたそのまま送られ、それ以外は {"<the name you declared>": "<the value>"} の形で送られます。これは Redfish 自身のリセットのアクションが期待する形です。
機器検出
機器検出のボタンは、1 つのサービスを読みます。ドライバーのページの「スキャンの範囲」のカードにそのアドレス(https://bmc-host、あるいはメーカーが文書に書いているアドレス)を入れてください。スキャンはそのサービスの最初のシステム、マネージャー、シャーシを巡り、それらのポイントを備えた機器を、そのまま追加できる形で差し出します。スキャンは HTTPS で、資格情報なしにサービスを読みます。資格情報を持つはずの機器がまだ存在しないうちに走るからです。ですから、あらゆる要求に認証を求めるサービスは何も答えないので、そちらは手で追加してください。Redfish 自身の SSDP による探索は UDP のマルチキャストを必要とし、プロセス内のこのドライバーはそれを行わないので、同報で見つかるものはありません。スキャンは、与えたアドレスを読みます。