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