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/

原文地址:https://www.cnblogs.com/dingyunfeng/p/12735512.html