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异常。