目前在研究學習使用pythob-libvirt api 操作vm,幾經周折才完成了遷移功能:
代碼如下:
import libvirt# virsh migrate --live kk qemu+tcp://192.168.4.87/system tcp://192.168.4.87#conn=libvirt.open('qemu:///system')#dest_conn=libvirt.open('qemu+tcp://192.168.4.87/system')vm_domain=conn.lookupByName('kk')print vm_domain.migrate(dest_conn,1,'k2k',None,0) # 參數說明:第一個是 目的端的 conn,遷移方式(live),目的端 vm的名字, 目的端 uri 可為空白,頻寬 可寫 0
這樣運行代碼是 肯定還是不成功,libvirt.libvirtError: Unable to resolve address 'xx' service '49170': No address associated with hostname
需要配置source源主機的 /etc/hosts檔案:加入"192.168.4.87 xx",即 把目的端的 ip 和 主機名稱 做一個映射。
在遷移的過程中,運行在目的主機中的libvirtd進程要根據address和port建立一個URI,URI是目的主機用來接收資料和發回資料到源主機的libvirtd進程的。上面協助libvirtd法解析主機名稱到IP地址的工作。
使用 virsh 命令遷移 道理是一樣的,但為省去配置 /etc/hosts檔案 的麻煩,可以使用:
migrate --live kk qemu+tcp://192.168.4.87/system tcp://192.168.4.87
經測試 使用api時 如果 uri 填寫 成:
dest_conn=libvirt.open('qemu+tcp://192.168.4.87/system tcp://192.168.4.87‘)
出錯,不能達到類似 virsh命令的效果 即不用配置 /etc/hosts檔案,如何能避免配置 /etc/hosts檔案。
如果總更改/etc/hosts檔案,資料同步性比較差,而且比較麻煩,如何不用配置hosts檔案呢??
不用配置 /etc/hosts檔案 的方法經研究測試,獲得成功,類似 virsh的方法,具體代碼如下:
print vm_domain.migrate(dest_conn,1,'k2k','tcp://192.168.4.87',0)
參數對比 第一段代碼的 相應函數。