XAPI 调用是使用XML-RPC协议通过网络发送到安装有XenServer 的主机上。XAPI对象的引用不保证对象的永久标识符,引用不允许对象进行相等比较。对同一物体的两个引用,不保证是文本相同的。对象UUIDUniversally UniqueIdentifier,通用唯一识别码)的目的是永久的名字,客户可以通过比较对象的UUID 字符串测试平等。XenServerXAPI 提供UUID 和不透明引用之间的转换机制,每个类都包含有一个UUID 字段。

XenServer API 是基于XML-RPC 协议进行通信的。XML-RPC 是在Internet 上实现远程方法调用的一种规范,它利用HTTP 作为传输协议,使用XML 作为消息请求的传输主体。XML-RPC 将一个XML 格式的消息体作为HTTP POST 请求发送给服务器,该消息包括名称、运行服务的程序以及输入参数,服务器将执行结果以XML 格式返回,其原理如图所示:

XenServer架构之XAPI的调用流程_服务器

通过XenServer XAPI,用户可以管理虚拟机、存储、网络、主机配置和XenServer 池。调用XenServer API 的步骤如下:

1选择传输级别

可以通过以下两种传输发出API 调用:

  • 远程管理使用HTTPS

  • 本地管理通过Unix Domain Sockets 使用HTTP

2身份验证和会话处理

在执行其余的API 前,客户端需要先调用login_with_password 函数连接到XenServer主机进行身份验证,该函数会在服务器端创建一个会话并将该会话的引用返回给客户端。

3查找操作对象的引用

为了查询操作对象的状态或在其上调用操作,客户端需要获取操作对象的引用,获取对象引用的方法有以下几种:

  • get_by_name_label:返回具有特定标签的特定类的所有对象列表;

  • get by uuid:每个类都有一个UUID,通过这个引用可以返回指定的对象;

  • get_all:返回一组对特定类的所有对象的引用;

  • get all records:返回对特定类的每个对象的记录的引用映射。

4通过对象调用执行同步或异步操作

每个方法调用都可以是同步或异步的,除了会话、任务、设置的一些字段。同步RPC调用块,是指直到返回值被接收;同步RPC 调用块返回值完全按照RPC 返回值/状态码来说。本文中只有同步调用的API,所有的异步调用是在特殊的异步命名空间。异步RPC 调用返回一个任务ID,而不是直接返回结果;这个标识符随后被用来跟踪正在运行的异步RPC 的状态。但是异步调用可能立即失败,在一个任务ID 被创建之前可能代替这种可能性,然后返回的任务ID是包裹在一个XML-RPC 结构中,包括错误描述和字段值。

API 对象模型

本小节主要在对XenServer API类型、XenServer API 主要类及其类之间的映射关系的研究基础上给出API 对象模型调用关系。

XenServer API 类型简单,共有六种数据类型,如下表所示。

XenServer架构之XAPI的调用流程_虚拟机_02

XenServer API 的类多种多样,如下表所示为XenServer 提供的所有类,并给出每个类的描述。

XenServer架构之XAPI的调用流程_虚拟机_03

XenServer架构之XAPI的调用流程_虚拟机_04

XenServer架构之XAPI的调用流程_服务器_05

XenServer架构之XAPI的调用流程_服务器_06

 

XenServer API 的类之间是以何种关系进行关联的,完成一个功能需要多个类的相互调用才能完成,如图给出主要类之间的映射关系:

XenServer架构之XAPI的调用流程_虚拟机_07

XenServer  XAPI 类的类型、主要类和类之间的映射关系基础上,得出API 对象模型之间的关系。

5 API 的一些核心类:

VMVM 对象表示XenServer 主机或资源池上的特定虚拟机实例。

主机:主机对象表示资源池中的安装XenServer 物理主机。

VDIVDI 对象表示虚拟磁盘映像。

SR SR(存储库)聚合VDI 的集合并封装VDI 位所在的物理存储的属性。

网络:网络对象表示存在于 XenServer 主机实例所在的环境中的第二层网络。

6 4 个用作连接器的类,用于指定VM 和主机、存储和网络之间的关系:

VBDVBD(虚拟块设备)对象表示VM VDI 之间的连接。

VIFVIF(虚拟网络接口)对象表示VM 和网络对象之间的连接。

PIFPIF(物理接口)对象表示主机和网络对象之间的连接。

PBDPBD(物理块设备)对象表示主机和SR(存储库)对象之间的连接。

虚拟机的创建由Domain 0 来控制,虚拟机的存储和网络是如何创建的,如图所示为虚拟机的网络配置模型:

XenServer架构之XAPI的调用流程_Internet_08