1. 程式人生 > >nova程式碼中修改虛機xml檔案

nova程式碼中修改虛機xml檔案

    在openstack建立虛機的流程中nova會把使用者配置的資源整合,最後以xml的格式下發給libvirt來建立虛機,今天分享下如何在nova定製虛機的xml配置。
    首先生成xml的地方是:
nova/virt/libvirt/config.py
xml中每一個模組都以類的方式定義
這裡寫圖片描述
    以上圖為例,所有的配置都屬於下,在裡面有name,memory,device等,子項裡面又有子項,這是xml的配置格式。
    比如interface項,在nova程式碼裡對應:
這裡寫圖片描述
    在init裡面定義所有包含的子項,rootname 就是該欄位的最高層的名字,這裡面就是interface,其餘類中所有的項都是這個interface的子項,然後通過父類中的format_dom方法將interface項在主xml中格式化。
    配置的格式為,如果要在主項後面加欄位,如interface後面的type項,沒有另起一段,而是直接在主項後面加配置,這種在主項初始化類之後,直接用.set的方式配置:
如這裡面的:

dev = super(LibvirtConfigGuestInterface, self).format_dom()
dev.set("type", self.net_type)

    像mac地址這樣的配置,直接以append的方式接入到dev中即可

dev.append(etree.Element("mac", address=self.mac_addr))

    我們會經常需要調整xml的配置,按照這兩種方式,找到想要修改的欄位,將新增的配置加入即可。
config.py中主要是初始化xml的格式即項,各配置項的賦值操作在
nova/virt/libvirt/driver.py中:
流程排程到driver.py中進行spawn,可以看到生成xml的方法為_get_guest_xml
這裡寫圖片描述


    在getguestxml中虛機的配置獲取即讀取傳入進來的引數如instance,network,disk等,然後按照config.py中定義的格式進行配置,最後再講整理到的配置轉化為xml的格式。
這裡寫圖片描述
    所有配置都在get config中獲得,可以在裡面找到對應的具體方法,更改想要的值即可。

小笨驢在吃草的時候建立了微信公眾號,為方便更多覓食的“小笨驢”,為大家準備了大量的免費基礎教學資料以及技術解決方案,還會定時釋出一些好的技術文章,當然也會扯扯蛋、談談人生、呵呵,希望我們這群樂於分享技術的“小笨驢”團隊越來越大!


這裡寫圖片描述