雲平台系統使用者提出一個需求,要求根據實體機主機名或者IP查詢其上虛拟機清單。根據主機名查詢好辦,nova的list接口提供了host參數;按主機IP查詢就不那麼直接了,需要先将IP反解析成主機名,然後使用主機名參數調用list接口。為了減少與其他系統的耦合,我們考慮nova自身能不能實作IP到主機名的轉換。
實際上nova hypervisor資料結構對應的資料表compute_nodes中包含了host_ip字段,隻是在查詢時沒有傳回,稍作修改即可。
修改nova.api.openstack.compute.hypervisors.HypervisorsController._view_hypervisor()函數,給hyp_dict增加'host_ip': hypervisor.host_ip字段:

這個函數是hypervisor接口的基礎,list和detail等接口都會調用這個接口。是以在這裡增加host_ip字段後,調用list、detail接口傳回的資料都包含host_ip了。
同時為了在nova hypervisor-list指令行結果中顯示主機IP,需要對novaclient做一個小修改,在novaclient.v2.shell.do_hypervisor_list()函數中,columns定義了要展示的列,添加一個'Host IP'字段,它在取資料時會被轉化成對應的host_ip屬性:
此時執行nova hypervisor-list,就會看到包含了Host IP資訊: