libvirt
http://libvirt.org/html/index.html 官網包含所有的api
高級 libvirt API 可劃分為 5 個 API 部分:
1、虛擬機監控程序連接 API、
2、域 API、
3、網絡 API、
4、存儲卷 API
5、存儲池 API。
為給定虛擬機監控程序創建連接后會產生全部 libvirt 通信(比如,清單 6 中所看到的的 open 調用)。該連接為全部其它要使用的 API 提供路徑。在 C API 中,
該行為通過 virConnectOpen 調用(以及其它進行認證的調用)提供。這些函數的返回值是一個 virConnectPtr 對象,它代表到虛擬機監控程序的一個連接。
該對象作為全部其它管理功能的基礎,是對給定虛擬機監控程序進行并發 API 調用所必需的語句。重要的并發調用是 virConnectGetCapabilities 和 virNodeGetInfo。
前者返回虛擬機監控程序和驅動程序的功能,后者獲取有關節點的信息。 該信息以 XML 文檔的形式返回,這樣通過解析便可了解可能發生的行為。 進入虛擬機監控程序后,便能夠使用一組 API 調用函數反復使用該虛擬機監控程序上的各種資源。virConnectListDomains API 調用函數返回一列域標識符,
它們代表該虛擬機監控程序上的活動域。 API 實現大量針對域的函數。要探究或管理域。首先須要一個 virDomainPtr 對象。您可通過多種方式獲得該句柄(使用 ID、UUID 或域名)。繼續來看反復域的樣例,
您能夠使用該函數返回的索引表并調用 virDomainLookupByID 來獲取域句柄。 有了該域句柄,就能夠運行非常多操作,從探究域(virDomainGetUUID、virDomainGetInfo、virDomainGetXMLDesc、virDomainMemoryPeek)到
控制域(virDomainCreate、virDomainSuspend、virDomainResume、virDomainDestroy 和 virDomainMigrate)。 您還可使用 API 管理并檢查虛擬網絡和存儲資源。建立了 API 模型之后。須要一個 virNetworkPtr 對象來管理并檢查虛擬網絡,且須要一個 virStoragePoolPtr(存儲池)
或 virStorageVolPtr(卷)對象來管理這些資源。 API 還支持一種事件機制。您可使用該機制注冊為在特定事件(比方域的啟動、中止、恢復或停止)發生時獲得通知。
詳細介紹:
1、虛擬機監控程序連接 API:以virConnect 開頭的一系列函數。
連接 Hypervisor 相關的API:以virConnect 開頭的一系列函數。
只有與 Hypervisor 建立了連接之后,才能進行虛擬機管理操作,所以連接 Hypervisor 的API是其他所有API使用的前提條件。與 Hypervisor 建立的連接是為其他API的執行提供了路徑,是其他虛擬化管理功能的基礎。
virConnectOpen 函數可以建立一個連接,其返回值是一個virConnectPtr 對象,該對象就代表到Hypervisor 的一個連接;如果連接出錯,則返回空值(NULL)。
virConnectOpenReadOnly 函數會建立一個只讀的連接,在該連接上可以使用一些查詢的功能,而不使用創建、修改等功能。
virConnectOpenAuth 函數提供了更具認證建立的連接。
virConnectGetCapabilities 函數是返回對 Hypervisor 和驅動的功能的描述的 XML 格式的字符串。virConnectListDomains 函數返回一列域標識符,它們代表該 Hypervisor 上的活動域。
virConnectGetHostname
virConnectGetMaxVcpus
virConnectGetType
virConnectGetVersion
virConnectGetLibVersion
virConnectGetURI
virConnectIsEncrypted
virConnectIsSecure
virConnectClose 關閉連接
2、域 API:以virDomain 開頭的一系列函數。
域管理的 API:以virDomain 開頭的一系列函數。
虛擬機的管理,最基本的職能就是對各個節點上的域的管理,故 libvirt API 中實現了很多針對域管理的函數。要管理域,首先就要獲取virDomainPtr 這個域對象,然后才能對域進行操作。有很多種方式來獲取域對象,如 virDomainPtr
virDomainLookupByID (virConnectPtr conn, int id) 函數是根據域的 id 值到 conn 這個連接上去查找相應的域。,virDomainLookupByName、virDomainLookupByUUID 等函數分別是根據域的名稱和 UUID 去查找相應的域。在得到了某個域的對象后,就可以進行很多的操作,可以是查詢域的信息
virDomainGetHostname
virDomainGetInfo
virDomainGetVcpus
virDomainGetVcpusFlags
virDomainGetCPUStats
也可以是控制域的生命周期,如:
virDomainCreate
virDomainSuspend
virDomainResume
virDomainDestroy
virDomainMigrate
創建虛擬機
virDomainDefineXML()
virFileReadAll() 該函數原型為intvirFileReadAll(const char *path, int maxlen, char **buf),功能是將參數“path”指定路徑的文件內容讀到一個緩沖區中,并將緩沖區地址記錄在參數“*buf”中,而參數“maxlen”指定文件的最大長度。利用該API,我們可以將xml配置文件都到一個緩沖區中,以方便接下來的使用
virDomainCreateXML() 該函數原型為virDomainPtr virDomainCreateXML (virConnectPtrconn, const char * xmlDesc, unsigned int flags),功能是根據參數“xmlDesc”定義的配置方式創建一個域并返回該域的指針。參數“conn”是指向虛擬機管理器的指針,而通過設置不同的“flags”標志,可以使創建的域具有不同的屬性。
3、節點管理的 API:以virNode 開頭的一系列函數
域是運行在物理節點之上,libvirt也提供了對節點的信息查詢和控制的功能。節點管理的多數函數都需要使用一個連接 Hypervisor 的對象作為其中的一個傳入參數,以便可以查詢或修改到該連接上的節點的信息。
virNodeGetInfo函數是獲取節點的物理硬件信息,http://my.oschina.net/u/274153/blog/55011
virNodeGetCPUStats 函數可以獲取節點上各個 CPU 的使用統計信息
virNodeGetMemoryStats 函數可以獲取節點上的內存的使用統計信息
virNodeGetFreeMemory 函數可以獲取節點上可用的空閑內存大小。也有一些設置或者控制節點的函數virNodeSetMemoryParameters 函數可以設置節點上的內存調度的參數
virNodeSuspendForDuration 函數可以讓節點(宿主機)暫停運行一段時間
virNodeGetCellsFreeMemory
4、網絡管理的 API:以 virNetwork 開頭的一系列函數和部分以 virInterface 開頭的函數
libvirt 對虛擬化環境中的網絡管理也提供了豐富的API。libvirt 首先需要創建virNetworkPtr 對象,然后才能查詢或控制虛擬網絡。一些查詢網絡相關信息的函數,如:
virNetworkGetName(virNetworkPtr network) 函數可以獲取網絡的名稱
network: a network object
Returns: a pointer to the name or NULL, the string need not be deallocated its lifetime will be the same as the network object.
virNetworkGetBridgeName 函數可以獲取該網絡中網橋的名稱
virNetworkGetUUID 函數可以獲取網絡的 UUID 標識
virNetworkGetXMLDesc 函數可以獲取網絡的以 XML 格式的描述信息
virNetworkIsActive 函數可以查詢網絡是否正在使用中。一些控制或更改網絡設置的函數,有:
int virNetworkCreate (virNetworkPtr network) 獲得network屬性
virNetworkCreateXML(virConnectPtr conn,const char * xmlDesc) 函數可以根據提供的 XML 格式的字符串創建一個網絡(返 回 virNetworkPtr 對象)
conn: pointer to the hypervisor connection
xmlDesc: an XML description of the network
Returns: a new network object or NULL in case of failure
virDomainInterfacePtr
virNetworkDestroy 函數可以銷毀一個網絡(同時也會關閉使用該網絡的域)
virNetworkFree 函數可以回收一個網絡(但不會關閉正在運行的域)
virNetworkUpdate 函數可根據提供的 XML 格式的網絡配置來更新一個已存在的網絡。另外,
virInterfaceCreate、
virInterfaceFree、
virInterfaceDestroy、
virInterfaceGetName、
virInterfaceIsActive 等函數可以用于創建、釋放和銷毀網絡接口,以及查詢網絡接口的名稱和激活狀態。
5、存儲卷管理的 API:以 virStorageVol 開頭的一系列函數。
libvirt 對存儲卷(volume)的管理,主要是對域的鏡像文件的管理,這些鏡像文件可能是 raw、qcow2、vmdk、qed等各種格式。libvirt 對存儲卷的管理,首先需要創建virStorageVolPtr 這個存儲卷的對象,然后才能對其進行查詢或控制操作。libvirt 提供了3個函數來分別通過不同的方式來獲取存儲卷對象,如: virStorageVolLookupByKey 函數可以根據全局唯一的鍵值來獲得一個存儲卷對象 virStorageVolLookupByName 函數可以根據名稱在一個存儲資源池(storage pool)中獲取一個存儲卷對象virStorageVolLookupByPath 函數可以根據它在節點上路徑來獲取一個存儲卷對象。有一些函數用于查詢存儲卷的信息,如:virStorageVolGetInfo 函數可以查詢某個存儲卷的使用情況 virStorageVolGetName 函數可以獲取存儲卷的名稱 virStorageVolGetPath 函數可以獲取存儲卷的路徑 virStorageVolGetConnect 函數可以查詢存儲卷的連接。一些函數用于創建和修改存儲卷,如: virStorageVolCreateXML 函數可以根據提供的 XML 描述來創建一個存儲卷 virStorageVolFree 函數可以釋放存儲卷的句柄(但是存儲卷依然存在) virStorageVolDelete 函數可以刪除一個存儲卷,virStorageVolResize 函數可以調整存儲卷的大小。
libvirt 對存儲卷(volume)的管理
6、存儲池管理的 API:以virStoragePool 開頭的一系列函數。
libvirt 對存儲池(pool)的管理,包括對本地的基本文件系統、普通網絡共享文件系統、iSCSI共享文件系統、LVM分區等的管理。libvirt 需要基于 virStoragePoolPtr 這個存儲池對象才能進行查詢和控制操作。一些函數可以通過查詢獲取一個存儲池對象,如: virStoragePoolLookupByName 函數可以根據存儲池的名稱來獲取一個存儲池對象 virStoragePoolLookupByVolume 可以根據一個存儲卷返回其對應的存儲池對象 virStoragePoolCreateXML 函數可以根據 XML 描述來創建一個存儲池(默認已激活) virStoragePoolDefineXML 函數可以根據 XML 描述信息靜態地定義個存儲池(尚未激活) virStoragePoolCreate 函數可以激活一個存儲池。 virStoragePoolGetInfo、 virStoragePoolGetName、 virStoragePoolGetUUID等函數可以分別獲取存儲池的信息、名稱和 UUID 標識。 virStoragePoolIsActive函數可以查詢存儲池是否處于使用中狀態。 virStoragePoolFree 函數可以釋放存儲池相關的內存(但是不改變其在宿主機中的狀態) virStoragePoolDestroy 函數可以用于銷毀一個存儲池(但并沒有釋放virStoragePoolPtr 對象,之后還可以用virStoragePoolCreate 函數重新激活它), virStoragePoolDelete 函數可以物理刪除一個存儲池資源(該操作不可恢復)。
對存儲池(pool)的管理
7、事件管理的API:以virEvent 開頭的一系列函數。
libvirt 支持事件機制,使用該機制注冊之后,可以在發生特定的事件(如:域的啟動、暫停、恢復、停止等)之時,得到自己定義的一些通知。
8、數據流管理的API:以virStream 開頭的一系列函數。
libvirt 還提供了一系列函數用于數據流的傳輸。
————————————————
版權聲明:本文為CSDN博主「傻呆」的原創文章,遵循CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_21398167/java/article/details/46422583
本文摘自:http://blog.sina.com.cn/s/blog_da4487c40102v31i.html
libvirt對象
libvirt的對象向外展現了虛擬化環境的所有資源。libvirt API編程操縱的第一個對象總是virConnectPtr,它提供了到一個Hypervisor的連接。任何一個libvirt應用程序,都是從調用virConnectOpen函數開始的,該函數的參數包含一個Hypervisor的URI,函數執行成功表示已連接到指定的Hypervisor,并返回一個代表該連接的virConnectPtr對象,通過這個對象,應用程序就可以管理它上面的域以及其它虛擬化資源。libvirt主要通過5個對象展現它的所有功能
除了virConnectPtr對象外,
virDomainPtr對象代表Hypervisor上的一個域;
virNetworkPtr對象代表Hypervisor上的一個網絡;
virStorageVolPtr對象代表一個存儲卷,它是可以供域使用的塊存儲設備;
virStoragePoolPtr對象代表Hypervisor上的一個存儲池,它為存儲卷提供一個邏輯存儲區域。
上述對象都有以下幾種命名方法:
1)name,用戶友好型的標識名,但不能保證名稱在節點之間保持唯一性。
2)ID, 運行時的標識名,一般為一數字,由Hypervisor為當前活動對象指定的名稱,只在對象存活期內有效。
3)UUID,一個16字節的唯一標識名,遵循RFC4122規范,可以確保名稱在跨節點范圍內的唯一性,并且能被長時間保持。
函數命名規范
libvirt庫中的函數名稱存在一些命名規則,主要有以下幾種:
1)查找對象:[...LookupBy...]
根據對象的名稱標識查找對象,如:
virDomainLookupByID
virDomainLookupByName
virDomainLookupByUUID
virDomainLookupByUUIDString
2)枚舉對象數量 [virConnectList..., virConnectNumOf...]
枚舉當前連接可用對象的數量,如:
virConnectListDomains
virConnectNumOfDomains
virConnectListNetworks
virConnectListStoragePools
3)獲取對象信息 [...GetInfo]
提供對象的基本信息,如:
virNodeGetInfo
virDomainGetInfo
virStoragePoolGetInfo
virStorageVolGetInfo
4)訪問對象 [...Get..., ...Set...]
查詢或修改指定對象的數據,如:
virConnectGetType
virDomainGetMaxMemory
virDomainSetMemory
virDomainGetVcpus
virStoragePoolSetAutostart
virNetworkGetBridgeName
5)建立對象 [...Create, ...CreateXML]
建立并啟動對象,可以通過XML描述信息建立對象,也可以通過對象指針建立對象,如:
virDomainCreate
virDomainCreateXML
virNetworkCreate
virNetworkCreateXML
6)停用對象 [...Destroy]
通過關閉、停止操作使對象失效,如:
virDomainDestroy
virNetworkDestroy
virStoragePoolDestroy
注意:有些函數返回一個對象vir*Ptr (如virDomainLookup) ,返回對象內存空間的釋放需要調用對應的vir*Free函數(如virDomainFree釋放一個virDomainPtr對象)。
沒看完的博客:
libvirt安裝過程中遇到的問題
https://blog.csdn.net/heybob/article/details/24481397
libvirt官網
http://libvirt.org/html/index.html
libvirt-python
https://pypi.org/project/libvirt-python/
基于python調用libvirt API
https://www.cnblogs.com/grglym/p/8064161.html
使用libvirt管理kvm(API篇)
https://blog.51cto.com/speakingbaicai/1162005
深入淺出KVM(五) 丨libvirt 介紹
https://www.jianshu.com/p/a7eac9c71ecf
libvirt API管理hypervisors
https://www.bbsmax.com/A/QW5YBKv3dm/
總結
- 上一篇: ubuntu19.10安装codeblo
- 下一篇: Exception in thread