libvirt 部分API 介绍
感谢朋友支持本博客。欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免,欢迎指正!
假设转载,请保留作者信息。
博客地址:http://blog.csdn.net/qq_21398167
原博文地址:http://blog.csdn.net/qq_21398167/article/details/46422583
http://libvirt.org/html/index.html 官网包括全部的api
API 概述
高级 libvirt API 可划分为 5 个 API 部分:虚拟机监控程序连接 API、域 API、网络 API、存储卷 API 以及存储池 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)连接 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 开头的一系列函数。
虚拟机的管理,最主要的职能就是对各个节点上的域的管理,故 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 函数能够调整存储卷的大小。
(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 函数能够物理删除一个存储池资源(该操作不可恢复)。
(7)事件管理的API:以virEvent 开头的一系列函数。
libvirt 支持事件机制,使用该机制注冊之后,能够在发生特定的事件(如:域的启动、暂停、恢复、停止等)之时,得到自定义的一些通知。
(8)数据流管理的API:以virStream 开头的一系列函数。
libvirt 还提供了一系列函数用于数据流的传输。
(9)Error handing
virSetErrorFunc
virConnSetErrorFunc
virCopyLastError
virGetLastError
virSaveLastError
virResetError
virFreeError
virConnResetError
virConnCopyLastError
virConnGetLastError
virDomainMigrate 虚拟机迁移
virDomainReboot 虚拟机重新启动
int virDomainRef (virDomainPtr domain)
int virDomainReset (virDomainPtr domain,
unsigned int flags)
int virDomainRestore (virConnectPtr conn,
const char * from)
int virDomainRestoreFlags (virConnectPtr conn,
const char * from,
const char * dxml,
libvirt 部分API 介绍的更多相关文章
- (转)libvirt 部分API 介绍
感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正! 如果转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...
- 常用ArcGIS for Silverlight 开发API介绍
1.API介绍 2.Map对象 3.Layer对象 4.Symbol对象 5.Task对象
- Servlet基础(一) Servlet简介 关键API介绍及结合源码讲解
Servlet基础(一) Servlet基础和关键的API介绍 Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中. Servlet容器负责Servl ...
- python学习笔记(win32print API介绍)
最近博主在研究用python控制打印机 这里整理下win32print的API介绍,官网地址http://timgolden.me.uk/pywin32-docs/win32print.html Op ...
- 使用html5中video自定义播放器必备知识点总结以及JS全屏API介绍
一.video的js知识点: controls(控制器).autoplay(自动播放).loop(循环)==video默认的: 自定义播放器中一些JS中提供的方法和属性的记录: 1.play()控制视 ...
- Commons-lang API介绍
4.1 Commons-lang API介绍 4.1.1 StringUtils 4.1.2 StringEscapeUtils 4.1.3 ArrayUtils 4.1.4 DateUtils 4. ...
- APP自动化框架LazyAndroid使用手册(3)--核心API介绍
作者:黄书力 概述 在前一篇博文中,简要介绍了一款安卓UI自动化测试框架LazyAndroid (http://blog.csdn.net/kaka1121/article/details/53204 ...
- Spring Boot 2.x 编写 RESTful API (一) RESTful API 介绍 & RestController
用Spring Boot编写RESTful API 学习笔记 RESTful API 介绍 REST 是 Representational State Transfer 的缩写 所有的东西都是资源,所 ...
- FastDFS api介绍
1. 命令行api介绍 FastDFS提供了可用于运维测试的命令行api,下面进行介绍: 1.1 fastdfs服务管理 tracker进程服务管理脚本 /etc/init.d/fdfs_tracke ...
随机推荐
- How Javascript works (Javascript工作原理) (四) 事件循环及异步编程的出现和 5 种更好的 async/await 编程方式
个人总结: 1.讲解了JS引擎,webAPI与event loop合作的机制. 2.setTimeout是把事件推送给Web API去处理,当时间到了之后才把setTimeout中的事件推入调用栈. ...
- Promise语法
转自:廖雪峰的官方网站 在JavaScript的世界中,所有代码都是单线程执行的. 由于这个“缺陷”,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行.异步执行可以用回调函数实现: ...
- npm install报错类似于npm WARN tar ENOENT: no such file or directory, open '***\node_modules\.staging\***
报错类似于如下图 解决方法: 删除文件 package-lock.json,再重新执行npm i或者npm install
- Manacher 求最长回文子串算法
Manacher算法,是由一个叫Manacher的人在1975年发明的,可以在$O(n)$的时间复杂度里求出一个字符串中的最长回文子串. 例如这两个回文串“level”.“noon”,Manacher ...
- FTP 无法获取目录列表的处理方法
FTP 无法获取目录列表的处理方法 1.以阿里云的服务器为例 对于阿里云的服务器是因为阿里云为了进一步保护用户的安全利益使用了安全策略组,我们要设置安全策略组对应的端口开启. 首先要设置端口范围,这个 ...
- Hibernate中如何完成持久化类和数据库映射文件
因为最近写项目需要要到,就在这里码码字,方便以后做一个参考,在这里,我通过的是myeclipse的反向工程来配置持久化类和数据的映射文件的. 1.打开myeclipse,打开数据库视图,对应的是Win ...
- php把数据表导出为Excel表的最简单、最快的方法(不用插件)
亲测可用,把下面的数据换成自己的即可 <?php header("Content-type:application/vnd.ms-excel");header("C ...
- 国庆 day 2 下午
最大值(max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n的 ...
- [LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)
二分.情况讨论 因为数组有序,所以能够考虑用二分.通过二分剔除掉肯定不是第k位数的区间.如果数组A和B当前处理的下标各自是mid1和mid2.则 1.假设A[mid1]<B[mid2], ①.若 ...
- 《Effective Modern C++》翻译--条款4:了解怎样查看推导出的类型
条款4:了解怎样查看推导出的类型 那些想要了解编译器怎样推导出的类型的人通常分为两个阵营. 第一种阵营是实用主义者.他们的动力通常来自于编敲代码过程中(比如他们还在调试解决中),他们利用编译器进行寻找 ...