VADeployer:一个 Java SWT REST 客户端应用程序

通过 VMControl 配置和部署虚拟设备

利用灵活且易于使用的 IBM® Systems Director 具象状态传输 (REST) 应用编程接口 (API) 开发了一个 SWT Java 桌面应用程序。在部署产品时,可使用此应用程序配置虚拟设备的开放虚拟化格式 (Open Virtualization Format, OVF) 描述符中的每个产品部分,以及一个新虚拟服务器的内存和处理器分配设置。

Jose M. Romo Corona, 技术顾问, IBM

Jose Moises Romo Corona 是 IBM Systems and Technology Group 中 Solutions Enablement 组织的一位技术顾问。他在 IBM 大约有 6 年的工作经验。他毕业于阿特马加克谷大学的计算机科学与电子学专业。他的专业领域包括 Web 2.0 开发、Linux 和 IBM Power Systems™ 系统管理。



2012 年 12 月 03 日

概述

本文中开发的应用程序称为 VADeployer,它实现了对 IBM Systems Director VMControl™ REST API 的超文本安全传输协议 (HTTPS) 请求,以模仿虚拟设备通过 IBM Systems Director Web 界面部署流程。VADeployer 还可用于修改其他设置,比如部署前的内存和处理器分配。

VADeployer 构建于 Java 1.6 之上,图形用户界面 (GUI) 是使用 Eclipse Juno 和 WindowBuilder Pro SWT 开发的,遵循 Eclipse Public License v 1.0 许可。VADeployer 使用的 IBM Systems Director 和 VMControl 的 REST API 版本分别为 6.3.0 和 2.4.0。

在后面几节中,我们将介绍 VMControl 与虚拟设备模型之间的关系,让您了解 VADeployer 如何与 VMControl 交互来配置和部署一个虚拟设备。


虚拟设备(Virtual appliances)和 VMControl

IBM 和虚拟化市场领域中的其他供应商已采用分布式管理任务组 (Distributed Management Task Force, DMTF) OVF 规范作为构建和部署软件虚拟设备的标准方式,这种方式简化了将复杂软件解决方案集成到一个自包含的二进制开放虚拟化设备 (OVA) 包中的过程。VMControl 支持您导入虚拟设备(将一个 OVA 包或 OVF 文件作为输入)并将它存储在映像存储库中。您也可以捕获一个虚拟服务器,在其中配置并运行您的软件解决方案,从而在映像存储库中创建一个新虚拟设备。

在一个映像存储库(可能基于网络安装管理 (Network Installation Management, NIM) 或存储复制服务 (Storage Copy Services, SCS))中,您可能拥有包含不同的软件解决方案的多个虚拟设备。根据您的业务需求,可以从目录中选择一个虚拟设备并进行快速部署,让它能够知道自己的部署上下文。VMControl 支持您为在虚拟设备 OVF 文件中定义的每个产品部分指定配置值。一个产品部分可能是指应在部署时完成的网络化、操作系统调优、操作系统安全性或任何软件产品配置。虚拟设备创建是另外一个主题,不会在本文中介绍,它由虚拟解决方案激活引擎 (Virtual Solutions Activation Engine, VSAE) 解决方案完成,该解决方案是一个在激活应用程序服务之前第一次引导时启动的脚本引擎。VSAE 主要解析 OVF 信封文件(默认名称为 ovf-env.xml),并以定义良好的激活逻辑为基础,然后,激活引擎将所有配置参数传递给执行所需配置的相应的激活脚本。

自定义属性

OVF 文件中一个产品部分中的每个可配置属性都会转换为 VMControl 中的一个自定义属性。您可以在部署时使用 VMControl REST API 检索可用于配置虚拟设备的所有自定义属性。例如,可将一个 GET 操作提交到清单 1 中所示的 REST API,以检索可在运行时用于一个将部署在特定目标主机上的虚拟设备的自定义属性,这意味着您可以根据主机资源和描述虚拟设备的 OVF 文件来查找可用的属性。

清单 1. 检索部署时自定义属性的 REST API
/VMControl/virtualAppliances/{virtualApplianceOID}/targets/{targetOID}/customization

IBM Systems Director 支持不同的虚拟化环境,包括 VMWare ESX/ESXi、IBM PowerVM®、基于内核的虚拟机 (KVM) 和 IBM z/VM®。不过,VADeployer 仅在 PowerVM 上进行了测试。在 OVF 文件内,Virtual Hardware Section 描述了虚拟设备需要的虚拟或逻辑硬件,比如磁盘、网络适配器、内存和处理器分配等。这一节还包含虚拟系统类型(System 的一个直系子元素),该类型指定可部署虚拟设备的虚拟化环境。例如,对于 VMware 第四代虚拟硬件,可将虚拟系统类型标识符设置为 vmx-4,而对于基于 IBM POWER® 处理器的硬件,可设置为 IBM:POWER:[OS],其中,[OS] 可以是 AIX、Linux® 或 IBM i[X](X 是 IBM i 版本号)。根据 Virtual Hardware Section 中的描述,VMControl 允许您选择可部署虚拟设备的正确的目标主机。

可通过将一个 GET 操作发送到如清单 2 所示的 REST API,从而检索可部署虚拟设备的所有有效的目标主机。

清单 2. 具有目标主机过滤器的 VMControl REST API
/VMControl/virtualAppliances/{virtualApplianceOID}/targets?type=host

尽管 VMControl 支持您选择一个现有的虚拟服务器或一个系统池作为部署目标,但 VADeployer 仅支持主机类型。

通常,每个自定义属性都具有以下属性:

  • 名称
  • 描述
  • 类型
  • 规则

基本而言,typerules 特性确定有效值的范围。在 OVF 产品部分中,类型设置为 ovf,且没有规则。一个 OVF 产品部分的自定义属性示例如清单 3 所示。

清单 3. OVF 自定义属性示例
{
 "value": "",
 "class": "com.ibm.ovf.vmcontrol.adapter.networking",
 "type": "ovf",
 "name": "product.vs0.com.ibm.ovf.vmcontrol.adapter.networking.ipv4addresses.5",
 "description": "Static IP address for the network adapter \"Network adapter 1 on
 Discovered-1-0\".",
 "category": "Internet Protocol Version 4"
}

OVF 信封文件中包含此 OVF 自定义属性的相应产品部分如清单 4 所示。

清单 4. OVF 产品部分示例
<ovf:ProductSection ovf:class="com.ibm.ovf.vmcontrol.adapter.networking" (1)
ovf:instance="5">
<ovf:Info>Network adapter configuration for Network adapter 1 on Discovered-1-0
 </ovf:Info>
 <ovf:Category>Internet Protocol Version 4</ovf:Category>
 <ovf:Property ovf:key="ipv4addresses" ovf:type="string" 
 ovf:userConfigurable="true"> (2)
 <ovf:Label>Static IP address for the network adapter &quot;Network adapter 1 on
 Discovered-1-0&quot;.</ovf:Label>
 <ovf:Description>Static IP address for the network adapter &quot;
 Network adapter 1 on Discovered-1-0&quot;.</ovf:Description>
 </ovf:Property>
 <ovf:Property ovf:key="ipv4netmasks" ovf:type="string"
 ovf:userConfigurable="true"> (3)
 <ovf:Label>Static network mask for network adapter &quot;Network adapter 1 on
 Discovered-1-0&quot;.</ovf:Label>
 <ovf:Description>Static network mask for network adapter &quot;Network adapter 1 on
 Discovered-1-0&quot;.</ovf:Description>
 </ovf:Property>
 <ovf:Category>Deployment use</ovf:Category>
 <ovf:Property ovf:key="order" ovf:type="uint32"
 ovf:userConfigurable="false" ovf:value="0"> (4)
 <ovf:Label>The adapter order for network adapter &quot;Network adapter 1 on
 Discovered-1-0&quot;.</ovf:Label>
 <ovf:Description>The adapter order for network adapter &quot;Network adapter 1 on
 Discovered-1-0&quot;.</ovf:Description>
 </ovf:Property>
</ovf:ProductSection>

在清单 4 中可以看到,在 (1) 中,产品部分 class 与清单 3 中的自定义属性中的值匹配。通常,每个产品部分对应于一个需要安装的特定软件产品,每个属性元素指定应用程序级的自定义参数。您需要考虑的是,userConfigurable 属性值等于 false 的属性 (4) 将不会包含在 REST API 响应中的自定义属性中,因此,只能找到两个为产品部分定义的自定义属性(如清单 4 所示),每个对应以下一个属性:

  • ipv4addresses (2)
  • ipv4netmasks (3)

OVF 自定义属性名称包含:

product.[virtual system id].[product section class].[property key].
[product section instance]

其中,虚拟系统 ID 在 OVF 文件中的 Virtual System 元素中指定,类和实例的组合在所有产品部分中是惟一的。

有一些可选的元素可用于产品部分中,以提供有关软件产品的更多信息,比如产品名称、供应商、版本、完整版本、产品 URL 和供应商 URL。当使用清单 1 中的 REST API 检索部署自定义属性时,这些可选的元素会与 userConfigurable 特性值等于 false的属性一起忽略。例如,如果一个产品部分包含两个属性,一个用于操作系统 username,另一个用于用户 password,那么您将发现对于 root 用户而言,username 设置为 userConfigurable="false"password 设置为 userConfigurable="true",这是因为您期望能够在部署时输入自己的 root 密码。在此情况下,username 自定义属性被忽略,您将需要查看 password 自定义属性的描述来了解哪个用户将获得您输入的值。

VADeployer 从 OVF XML 文件中检索所有 OVF 自定义属性,而不是从自定义 REST API 中检索,所以,有关软件产品的所有信息,以及不可配置的属性都会向用户显示,也同样会在 VMControl 部署向导中显示。尽管显示了每个不可配置的属性,但它们在 VADeployer GUI 中已禁用。

虚拟设备的 OVF 文件可通过使用清单 5 中所示的 REST API 发送一个 GET 操作来获取。

清单 5. 用于检索虚拟设备 OVF 文件的 VMControl REST API
/VMControl/virtualAppliances/{virtualApplianceOID}.ovf

定义一个工作负载请求

为了部署一个虚拟设备,您需要创建一个工作负载,这是 IBM Systems Director 中的一个逻辑实体,允许您管理和监视新创建的虚拟服务器(您的虚拟设备已在其中激活)。要定义一个工作负载,您需要指定:

  • 一个虚拟设备对象标识符 (OID)
  • 一个目标 OID。在 VADeployer 中,这是目标主机 OID
  • 自定义属性

自定义属性传递到一个 JSON 对象数组中,该数组中包含使用一个描述虚拟设备的 OVF 信封文件从清单 1 中的 REST API 的响应中收集的与 VADeployer 相关的名称/值对。用于创建工作负载的 REST API 是 /VMControl/workloads。自定义属性会在 IBM Systems Director 收到请求后变成自定义参数。

清单 6 展示了一个创建工作负载所需的请求示例。

清单 6. 一个工作负载请求的 JSON 示例
{
 "workload":
 {
 "virtualAppliance":"40154",
 "target":"4849",
 "properties":
 [
 {	"name":"product.vs0.com.ibm.ovf.vmcontrol.system.timezone",
 "value":"CST"
 }, 
 {	"name":"product.vs0.com.ibm.ovf.vmcontrol.system.networking.hostname",
	"value":"vmlab01"
 },
 {	"name":"product.vs0.com.ibm.ovf.vmcontrol.system.networking.domainname",
	"value":"blue.com"
 }, 
 ...
 {"name":"product.vs0.My_Application_Config.username",
 "value":"moisesrc"
 },
 {	"name":"product.vs0.My_Application_Config.password",
 "value":"hell0there"
 },
 {	"name":"storagemapping", (1)
 "value":"[1]=assignedStorage:poolstorages[4540]"
 },
 {	"name":"virtualnetworks", (2)
 "value":"[Discovered-1-0]=hostVnet:Discovered-1-0"
 }
 ]
 }
}

必须为所有虚拟设备的 storagemapping (1) 指定一个值,而且这个自定义参数允许您映射一个或多个虚拟设备的虚拟磁盘。当在 storagemapping 下检索您的虚拟设备与主机组合的自定义属性时,您将发现所有虚拟磁盘都应映射到可用的存储(存储池或卷)中。每个虚拟磁盘使用一个 ID 标识,在清单 6 中的 (1) 上显示的虚拟磁盘的相应 ID 为 [1],所以您将虚拟磁盘 ID [1] 分配给一个存储池的 OID 4540。存储池 OID 从 poolstorages 自定义属性中获取。

类似地,必须为所有包含 IBM AIX® 或 IBM PowerLinux® 映像以及针对 KVM 的 Linux 或 Microsoft® Windows® 映像的虚拟设备指定 virtualnetworks 参数 (2)。对于网络映射,您需要提供一个虚拟网络 ID 和主机 ID 上的虚拟网络,它们分别为 [Discovered-1-0]hostVnet:Discovered-1-0


应用程序概述

VADeployer 可以以一个管理 IBM PowerVM 虚拟化环境的 IBM Systems Director 服务器为目标来运行。尽管此应用程序没有设计为用于 KVM,但可修改它的代码以用于 KVM 主机自定义属性。而且,VADeployer 可针对一个管理 IBM PureFlex™ System 的 IBM Flex System Manager (FSM) 而运行。

VADeployer 旨在提供一组丰富的示例来展示如何结合实现 VMControl REST API 和 Java SWT,以从一个 GUI 界面来部署虚拟设备,希望您能够重用此应用程序的一些代码。VADeployer 支持以下特性:

  • 虚拟设备部署到单个目标主机上的一个新虚拟服务器上。不支持部署到一个现有虚拟服务器和部署到多个主机或系统池中
  • 虚拟磁盘映射仅可用于存储池
  • 虚拟网络映射
  • 配置所有可用于一个给定虚拟设备的产品部分
  • 配置内存和处理器分配
  • 显示工作负载日志和状态

代码使用用于 Windows 的 SWT 32 位二进制包进行编译。如果需要在不同的操作系统上编译和运行此应用程序,可从 Eclipse 下载 网站下载 SWT 二进制文件,然后重新编译。

该代码使用模型-视图-控制器 (MVC) 风格编写,如下所示:

  • 模型com.ibm.vad.model 包中包含的所有类表示要在部署时为一个虚拟设备配置的虚拟硬件。
  • 视图com.ibm.vad.gui.VADeployer 类是主要类,包含所有 GUI 对象。
  • 控制器com.ibm.vad.handle.VADeployerHandler 类实现 REST API 调用并处理响应数据。

本程序没有使用特殊的 SWT 实现技术。拥有基本知识的开发人员即可了解数据绑定的定义方式和 GUI 对象彼此之间的交互方式。

GUI 元素

VADeployer GUI(如图 1 所示)由以下关键元素组成:

  • Locate:允许您搜索虚拟设备和查找可用的目标主机。
  • Configure:用于虚拟设备配置,包括虚拟磁盘和虚拟网络映射,以及 OVF 自定义属性。
  • Advanced:用于修改新虚拟服务器的内存和处理器分配设置。
  • Monitor:显示新创建的工作负载状态和日志条目。
图 1. VADeployer GUI
图 1. VADeployer GUI

设置环境

VADeployer 的目的是在一个使用 IBM Systems Director 6.3 和 VMControl 2.4 配置的系统上运行,这样可以管理一个 IBM PowerVM 虚拟化环境,但可修改代码来使用 KVM 自定义属性。VADeployer 也可使用来自 FSM 的 REST Web 服务,管理一个 IBM PureFlex System。

在构建 VADeployer 应用程序之前

  1. 为了测试 VADeployer,您的 IBM Systems Director 服务器必须设置为管理虚拟设备和工作负载。有关具体的细节,请访问 IBM Systems Director 信息中心 网站。
  2. 安装 Eclipse IDE for Java EE Developers Windows 32 位的最新版本。

构建 VADeployer 代码

VADeployer 需要的所有库都包含在 VADeployer-win32.zip 文件中。在将项目导入 Eclipse 中并在构建路径中指向您的本地 Java Runtime Environment (JRE) System Library 后,它应能够正确构建。

  1. 启动 Eclipse 集成开发环境 (IDE)。单击 Help -> Install New Software
  2. 单击可用的软件网站链接。
  3. 启用具有 URL http://download.eclipse.org/windowbuilder/WB/integration/3.7 的网站。可将此 URL 输入一个过滤表单中,以进行快速搜索。选择网站名称旁边的复选框以启用它。如果此站点不可用,那么为该位置使用相同的 URL(在此步骤中提供的)来添加一个新网站。
  4. 选择相关项:Swing DesignerSWT DesignerWindowsBuilder Engine,然后单击 Next
  5. 单击细节页面上的 Next 并完成安装。
  6. 重新启动 Eclipse。
  7. 下载 VADeployer-win32.zip 文件。
  8. 将项目导入 Eclipse 工作区中。单击 File -> Import -> Existing Projects into Workspace
  9. 选择归档文件选项并搜索 VADeployer-win32.zip 文件。
  10. 单击 Finish

如何使用 Eclipse 运行 VADeployer

执行以下步骤,以从 Eclipse 运行 VADeployer。

  1. 打开位于 VADeployer-win32 Eclipse 项目目录中的 env.dat 文件。输入您的 IBM Systems Director 或 FSM 信息,如下所示:
    VAD_SYSTEM_NAME=my.isd.server.com
    VAD_SYSTEM_PORT=8422 (这是缺省端口)
    VAD_SYSTEM_PASSWORD=XXXXX (这是 SMAdministrator 用户的秘密)
    VAD_SYSTEM_USERID=smadminuser (这是 SMAdministrator 的用户名)
    VAD_KEYSTORE_PASSWORD=ibmpassw0rd (这是 IBM Systems Director 
    安装时设置的 keystore 缺省密码,如果不正确,请仔细相关的管理员).

    注意:将在 VADeployer 项目所在的同一个目录中创建一个名为 vadeployer-log.txt 的日志文件。

  2. 在您的 Eclipse 工作区中,选择 com.ibm.vad.gui.VADeployer 主要类并单击 Run As -> Run Configurations。然后单击 Java Application -> New launch configuration
  3. Main 选项卡上,确认所选的项目为 VADeployer-win32 且主要类设置为 com.ibm.vad.gui.VADeployer
  4. 单击 Arguments 选项卡并输入程序参数,如下所示:

    "<VADeployer Eclipse project path>\env.dat" SUNX509

  5. 单击 Apply
  6. 单击 Run

您可通过将项目导入为一个可运行的 JAR 文件来创建一个可执行的 JAR 文件。如果希望使用 IBM JVM 运行此应用程序,您需要在参数中指定 IBMX509 证书,如下所示:

java -jar <my jar dir>\VADeployer-win32.jar <my env.dat dir>\env.dat IBMX509

基本部署场景

可以执行以下步骤来将一个虚拟设备部署到 VADeployer 中:

  1. Locate 下,单击 Go 以检索所有虚拟设备或输入一个名称来过滤您的结果。
  2. 选择一个虚拟设备。将显示目标主机。
  3. 选择一个目标主机。此操作会检索在将选定的虚拟设备部署到选定的目标主机时可用的部署自定义属性。
  4. 单击 Configure 选项卡。这里,您必须将所有虚拟磁盘分配给所需的存储池,将虚拟网络映射到主机上的虚拟网络,然后输入所有需要的产品激活参数。
  5. 如果有必要,单击 Advanced 选项卡修改内存和处理器分配设置。
  6. 单击 Deploy 并确认以继续部署。
  7. Monitor 选项卡上跟踪工作负载的状态。

结束语

VADeployer 仅探索了用于管理和自动化虚拟设备部署的 IBM Systems Director REST API 功能的冰山一角。可进一步进行集成,从而完全自定义一个虚拟设备所需的逻辑资源。例如,可基于您在存储、内存、处理和网络化方面的业务需求来自定义一个虚拟服务器,并将它用作部署虚拟设备的目标,同时,为您的软件产品指定部署参数。

随时可以使用 IBM Systems Director Admin 控制台,选择 System Configuration 下的 VMControl,然后开始部署虚拟设备。但是,IBM Systems Director 和 VMControl 与您的解决方案之间的集成才是最重要的。更重要的是,每个新 REST API 版本都包含可供您利用的新特征,而且 IBM Systems Director 技术与最新且最强大的 IBM PureFlex System 管理技术协调一致,后者利用了 FSM 来进行物理和逻辑资源管理。从此角度上讲,您可能会发现 VADeployer 代码很有用,可将它用作一个起点或扩展当前特征。

最后,独立软件供应商 (ISV) 随时可以更紧密联系 IBM,了解要将他们的产品与 IBM Systems Director REST API 相集成所必须满足的条款和条件。

参考资料

学习

  • 查阅 在 IBM PureFlex System 上自动化您的虚拟云设备,了解有关虚拟设备模型和虚拟解决方案激活引擎 (VSAE) 的全面信息。
  • IBM Systems Director SDK:了解有关 IBM Systems Director 软件开发工具包 (SDK) 的更多信息,该工具包提供了文档、接口和样例,供开发人员用于在自己的应用程序中利用 IBM Systems Director。
  • 查阅 WindowBuilder 用户指南,了解有关 SWT GUI 开发的更多信息。
  • 访问 Distributed Management Task Force (DMTF) 网站,了解有关开放虚拟化格式 (OVF) 标准的更多信息。
  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
  • AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
  • IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。

讨论

  • IBM Systems Director 论坛:发表您的有关 IBM System Director 的问题和评论,并与其他用户分享您的思想、创意和解决方案。
  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX, Java technology
ArticleID=848226
ArticleTitle=VADeployer:一个 Java SWT REST 客户端应用程序
publish-date=12032012