BMC 筆記:Redfish

這篇承接了 BMCIPMI 兩篇,如果對這兩個東西不熟,可以先複習一下在來看這篇。 

 

Redfish 簡介 

https://redfish.dmtf.org/sites/default/files/DMTF_Redfish_logo_R.jpg 

不免俗地先放 logo。

Redfish 是由 DMTF (Distributed Management Task Force) 在 2015 年正式提出的開放標準,
目標是取代 IPMI,提供「現代化、可擴充、安全」的伺服器管理協定。 

其設計與 IPMI 相當不同,將傳輸上的 binary 改為 HTTP/HTTPS + JSON + RESTful API,以此為基礎進行設計,因此任何支援 HTTP 的工具 (ex: Python、curl、Postman、瀏覽器) 都能直接與 BMC 溝通。

 

Redfish 架構

 

目前我對 redfish 的對外關係理解如上,基本上 Redfish 跑在 BMC 上,用來接收來自 Client 的 RESTful API,再由 BMC 透過 I2C、SMBus 等方式控制硬體。

前面提過 redfish 走的是 HTTP/HTTPS,所以這邊回傳的 status code 是用 HTTP Status Code。

 

Redfish Resource Model  

基本上 redfish service root 會在 /redfish/v1/,直接 GET 此 URI 不需要權限驗證,會將 redfish 底下的 service 直接展示出來。

這邊只提主要的 model:

  • Chassis:描述實體機體(物理外殼)與其內含的硬體元件

  • Managers:控制與監控中樞,會監控 Chassis、控制 Systems

  • Systems:實際執行應用程式的系統

 

Authentication

redfish 的身分驗證有二:

第一個是 HTTP Basic authentication,內容點連結,這邊不細說。另一個則是 Session。

在 redfish 建立 session 的 URI 是 /redfish/v1/SessionService/Sessions,官方給的範例如下: 

curl -k -D - -X POST 'https://<REDFISH-HOST>/redfish/v1/SessionService/Sessions' \
-H "Content-Type: application/json" -d '{ "UserName": "<USERNAME>", "Password": "<PASSWORD>" }' 

Session 建立好後會回傳 SESSION-TOKEN 回來,之後只要在發送 request 時將 X-Auth-Token: <SESSION-TOKEN> 帶上,就不用每次執行指令都要做身分驗證了。

Session 用完後我們可以 DELETE 這個 Session,官方給的刪除範例如下:

curl -k -X DELETE 'https://<REDFISH-HOST>/redfish/v1/SessionService/Sessions/<SESSION-ID>' \ -H 'X-Auth-Token: <SESSION-TOKEN> 

 

Query parameters

這是當我們開始實際使用 redfish 時,一定要理解的一個核心機制,它讓使用者可以控制伺服器傳回多少資料、以什麼形式呈現、以及篩選哪些欄位。對於會使用 SQL 、設計過查詢功能 RESTful API 的工程師來說,應該很容易上手。

舉個例子,用途是「取得特定廠牌的系統」:

GET /redfish/v1/Systems?$filter=Manufacturer eq 'HPE'

  • GET:使用的 HTTP 方法

  • /redfish/v1/Systems:URI

  • ?:用於區隔 URI 與參數

  • $filter=:參數名稱

  • Manufacturer eq 'HPE':參數內容,指「Manufacturer 為 HPE」 

常用的參數如下: 

參數名稱 功能 範例 說明
$filter 篩選符合條件的成員 $filter=Status/State eq 'Enabled' 像 SQL 的 WHERE
$select 指定只回傳哪些欄位 $select=Id,Name,PowerState 可以減少 loading
$expand 展開關聯物件 $expand=ComputerSystem 取得關聯子資源的資料
$top 限制回傳的項目數量 $top=5 像 SQL 的 LIMIT
$skip 跳過前 N 筆資料 $skip=10
$orderby 排序結果 $orderby=Name desc 像 SQL 的 ORDER BY
$format 指定輸出格式 $format=application/json 少見,通常伺服器自動處理
$count 要求伺服器附上資料總筆數 $count=true 用於分頁 UI 的資料量顯示

其中比較特別的是 $expand,功能有點像 SQL 中的 JOIN。

 

另外是一些使用時的注意事項:

  • 並非所有 BMC 都支援全部 Query Parameters,像 $expand 常不支援。

  • 區分大小寫

  • URI 編碼如果有空白或特殊字元要用 %20 編碼,例如: $filter=Status/Health eq 'OK' → $filter=Status/Health%20eq%20'OK'

  • 回傳內容皆為 JSON 

 


 

Resource

Redfish User Guide 

Redfish School 

Redfish Resource and Schema Guide

 

留言