Ironic-Python-Agent
在PXE部署環境中,deploy模塊是通過打開一個iSCSI設備,ironic-conductro將OS的鏡像文件寫到iSCSI的設備,所以deploy_ramdisk只是完成了iSCSI部署的工作,但開發者覺得既然已經把kernel和ramdisk傳過去了,只做一個工作是不是太少了,而且還太缺乏靈活性了,所以就想在ramdisk里裝一個Python Agent。 實際上就是多提供了一個Restful API,控制節點可以通過這個agent遠程實現與物理機節點互動,而不僅僅使用dd命令。
Ironic Python Agent(簡稱IPA或者agent)是一個基於python的代理,用於處理ironic中裸機節點的一系列動作,比如檢查、配置、清除和部署鏡像。運行在ramdisk中,暴露出REST API給conductor。Ironic-Python-Agent可以在deploy模塊直接訪問硬件,提供以下功能:
- 磁盤格式化
- 磁盤分區
- 安裝OS( Bootloaders, OS)
- 固件升級
- raid配置
在Condutor端使用agent驅動,物理機端使用IPA,IPA通過暴露API給Condutor調用,則可完成相應功能。IPA啟動時通過發送lookup()請求給Condutor獲取UUID,相當於注冊自己,並且每隔一段時間給Condutor發送心跳包進行連接。
1. 與conductor的交互
IPA使用lookup和hearteat機制與Ironic Conductor進行交互
- 啟動時agent給Conductor的vendor_passthru lookup endpoint(地址為/v1/drivers/{driver}/vendor_passthru/lookup)發送一個硬件的profile
- 然后Ironic就可以得出該節點的uuid,在成功發現該節點之后,agent隔N秒發送心跳包給Conductor(hearteat地址為/v1/nodes/{node_ident}/vendor_passthru/heartbeat )
- conductor執行一系列動作,包括查詢已經運行的命令的狀態,
2. 與ramdisk、agent的關系
IPA是一個運行在ramdisk中python程序,當物理機注冊時使用agent為前綴的驅動時,則會使用agent方式部署,即允許包含有IPA的ramdisk。
3. 硬件管理
硬件管理器(HardwareManager)是IPA中的一個概念,IPA通過重寫硬件管理器來支持多種硬件平台。通過自定義 hardware managers 可以允許用戶引入特定的硬件工具集、文件和清除步驟等等,比如可以引入 BIOS flashing utility and BIOS file,然后在cleaning step中重寫BIOS版本。
修改硬件的方法按照優先順序發送給每個管理器,管理器檢查是否包含該方法,如果沒有則拋出IncompatibleHardwareMethodError異常,IPA繼續發送給下一個管理器,直到某個管理器包含該方法並且返回方法的結果,如果所有的管理器都沒有改方法則拋出 HardwareManagerMethodNotFound異常。
