完成通信初始化后,接下来会发送 Oracle VM Server for SPARC 定义的 XML 消息。XML 消息有两种常规类型:
请求和响应消息,使用 <LDM_interface> 标记。此类型的 XML 消息用于传送命令并从 Logical Domains Manager 获取返回的结果,类似于使用命令行界面 (command-line interface, CLI) 执行命令。此标记还用于事件的注册和注销。
事件消息,使用 <LDM_event> 标记。此类型的 XML 消息用于异步报告 Logical Domains Manager 发布的事件。
到 Oracle VM Server for SPARC 的 XML 接口有两种不同的格式:
一种格式用于向 Logical Domains Manager 发送命令
一种格式用于使 Logical Domains Manager 响应传入消息的状态和在该消息中请求的操作。
这两种格式共享许多共同的 XML 结构,但为了更好地理解它们之间的差异,在此分别对它们进行讨论。
向 Logical Domains Manager 发出的最基本传入 XML 请求包括对单个对象执行的单个命令的描述。更加复杂的请求可以处理多个命令以及每个命令对应的多个对象。以下示例显示基本 XML 命令的结构。
示例 5 在单个对象上执行的单个命令的格式<LDM_interface version="1.3"> <cmd> <action>Place command here</action> <options>Place options for certain commands here</options> <arguments>Place arguments for certain commands here</arguments> <data version="3.0"> <Envelope> <References/> <!-- Note a <Section> section can be here instead of <Content> <Content xsi:type="ovf:VirtualSystem_Type" id="Domain name"> <Section xsi:type="ovf:ResourceAllocationSection_type"> <Item> <rasd:OtherResourceType>LDom Resource Type</rasd:OtherResourceType> <gprop:GenericProperty key="Property name">Property Value</gprop:GenericProperty> </Item> </Section> </Content> </Envelope> </data> </cmd> </LDM_interface>
发送给 Logical Domains Manager 的所有命令都必须以 <LDM_interface> 标记开头。发送到 Logical Domains Manager 的任何文档内必须仅包含一个 <LDM_interface> 标记。<LDM_interface> 标记必须包含 version 属性,如示例 5中所示。
在 <LDM_interface> 标记内,文档必须至少包含一个 <cmd> 标记。每个 <cmd> 段必须仅包含一个 <action> 标记。<action> 标记用于描述要运行的命令。每个 <cmd> 标记必须至少包含一个 <data> 标记,用于描述要在其上执行命令的对象。
<cmd> 标记还可以包含一个 <options> 标记,用于与某些命令关联的选项和标志。下列命令使用选项:
ldm remove-domain 命令可使用 –a 选项。
ldm bind-domain 命令可使用 –f 选项。
ldm add-vdsdev 命令可使用 –f 选项。
ldm cancel-operation 命令可使用 migration 或 reconf 选项。
ldm add-spconfig 命令可使用 –r autosave-name 选项。
ldm remove-spconfig 命令可使用 –r 选项。
ldm list-spconfig 命令可使用 –r [autosave-name] 选项。
ldm stop-domain 命令可以使用以下标记设置命令参数:
<force> 表示 –f 选项。
<halt> 表示 –h 选项。
<message> 表示 –m 选项。
<quick> 表示 –q 选项。
<reboot> 表示 –r 选项。
<timeout> 表示 –t 选项。
请注意,标记不能包含任何内容值。但是,–t 和 –m 选项必须具有一个非 null 值,例如 <timeout>10</timeout> 或 <message>Shutting down now</message>。
以下 XML 示例片段说明如何通过重新引导消息向 ldm stop-domain 命令传递重新引导请求:
<action>stop-domain</action> <arguments> <reboot/> <message>my reboot message</message> </arguments>
每个 <data> 段都包含与指定命令相关的对象的描述。<data> 段的格式以开放虚拟化格式 (Open Virtualization Format, OVF) 规范草案中的 XML 模式部分为基础。该模式定义了一个 <Envelope> 段(其中包含一个 <References> 标记,未被 Oracle VM Server for SPARC 使用)以及 <Content> 和 <Section> 段。
对于 Oracle VM Server for SPARC,<Content> 段用于标识和描述特定域。<Content> 节点的 id= 属性中的域名用于标识域。<Content> 段中有一个或多个 <Section> 段,它们根据特定命令需要来描述域的资源。
如果您只需要标识一个域名,则无需使用任何 <Section> 标记。相反,如果命令不需要任何域标识符,则需要提供一个 <Section> 段,用于描述命令所需的资源,该段位于 <Content> 段之外,但仍在 <Envelope> 段之内。
在可以推断出对象信息的情况下,<data> 段不需要包含 <Envelope> 标记。此情况主要适用于对监控适用于操作的所有对象的请求以及事件注册和注销请求。
通过两种额外的 OVF 类型,可以使用 OVF 规范的模式来正确定义所有类型的对象:
<gprop:GenericProperty> 标记
<Binding> 标记
<gprop:GenericProperty> 标记用于处理任何对象中未在 OVF 规范中定义的属性。属性名称在节点的 key= 属性中定义,属性的值是节点的内容。<binding> 标记会在 ldm list-bindings 命令输出使用,用于定义绑定到其他资源的资源。
从包含的命令和对象上来讲,传出 XML 响应的结构与传入请求的结构很相似,只是添加了针对指定的每个对象和命令的 <Response> 段以及针对请求的总体 <Response> 段。<Response> 段可提供状态和消息信息。以下示例显示了基本 XML 请求的响应结构。
示例 6 对单个对象上执行的单个命令的响应的格式<LDM_interface version="1.3"> <cmd> <action>Place command here</action> <data version="3.0"> <Envelope> <References/> <!-- Note a <Section> section can be here instead of <Content> <Content xsi:type="ovf:VirtualSystem_Type" id="Domain name"> <Section xsi:type="ovf:ResourceAllocationSection_type"> <Item> <rasd:OtherResourceType> LDom Resource Type </rasd:OtherResourceType> <gprop:GenericProperty key="Property name"> Property Value </gprop:GenericProperty> </Item> </Section> <!-- Note: More <Section> </Content> </Envelope> <response> <status>success or failure</status> <resp_msg>Reason for failure</resp_msg> </response> </data> <response> <status>success or failure</status> <resp_msg>Reason for failure</resp_msg> </response> </cmd> <response> <status>success or failure</status> <resp_msg>Reason for failure</resp_msg> </response> </LDM_interface>
此 <response> 段是 <LDM_interface> 段的直接子级,用于指示整个请求的整体成功或失败。除非传入 XML 文档格式错误,否则,<response> 段仅包含一个 <status> 标记。如果此响应状态指示成功,则说明所有对象上的所有命令都已成功。如果此响应状态为失败且没有 <resp_msg> 标记,则说明原始请求中的一个命令失败。<resp_msg> 标记仅用于描述 XML 文档自身的一些问题。
<cmd> 段下的 <response> 段通知用户特定命令是成功还是失败。<status> 标记用于显示命令成功还是失败。与总响应一样,如果命令失败,<response> 段仅包含一个 <resp_msg> 标记(如果请求的 <cmd> 段的内容格式错误)。否则,失败状态表示执行该命令的某个对象导致发生故障。
最后,<cmd> 段中的每个 <data> 段还包含一个 <response> 段。此段可显示在此特定对象上运行的命令是成功还是失败。如果响应的状态是 SUCCESS,则 <response> 段中不会出现 <resp_msg> 标记。如果状态为 FAILURE,则 <response> 字段会显示一个或多个 <resp_msg> 标记,具体取决于对该对象运行该命令时遇到的错误。运行命令时出现问题、对象格式错误或未知均可导致对象错误。
除 <response> 段外,<data> 段还可以包含其他信息。此信息的格式与传入 <data> 字段的格式相同,用于描述导致失败的对象。请参见<data> 标记。此附加信息在以下情况下非常有用:
当某命令针对特定 <data> 段失败而针对所有其他 <data> 段成功时
当空的 <data> 段传入命令并对一些域失败,而对其他域成功时