在虚拟应用程序模式工作负载中管理产品二进制文件

虚拟应用程序模式是 IBM® PureApplication™ System、IBM SmartCloud™ Orchestrator 和 IBM Workload Deployer 中使用的一种云工作负载部署模型。在开发虚拟应用程序模式插件期间,您会遇到需要管理和安装产品二进制文件的情形。在本文中,您将了解各种管理产品二进制文件的技术。

Bhadri Madapusi, 资深软件开发人员, IBM

http://www.ibm.com/developerworks/i/p-bmadapusi.jpgBhadri Madapusi 是一位 WebSphere 资深软件开发人员,目前主要从事云相关项目。Bhadri 拥有 10 多年的软件开发经验。他以前从事过业务流程管理和 WebSphere Commerce 相关工作。



Valentina Birsan, 资深开发人员, IBM

http://www.ibm.com/developerworks/i/p-vbirsan.jpgValentina Birsan 是 WebSphere 的资深开发人员,当前主要关注云项目。Valentina 以前是 Rational Application Developer 的技术负责人。Valentina 是 Eclipse TPTP 开放源码项目最初的成员之一,担任 TPTP Architecture Group 的主席。她曾是 Cosmos Service Modeling Eclipse 开放源码项目的首席架构师和 SML 开放标准的成员。



2014 年 6 月 23 日

简介

在开发要安装在 IBM PureApplication System、IBM SmartCloud Orchestrator 或 IBM Workload Deployer 上的虚拟应用程序模式工作负载时,您会遇到您的插件需要管理产品二进制文件的情形。产品二进制文件可能是您自己的,或者来自 IBM、SAP® 或 Oracle® 等第三方供应商。在本文中,您将看到可用于管理产品二进制文件的不同战略,了解您的插件如何访问和安装这些二进制文件。您还将了解这些不同战略的相对优势和劣势。


管理产品二进制文件的战略

管理产品二进制文件的战略可分为以下几类:

  • 使用 Storehouse 存储库
  • 使用共享服务存储库服务器

使用 Storehouse 存储库

Storehouse 存储库包含系统工件、虚拟应用程序模式工作负载工件、虚拟应用程序模式部署运行时工件,以及虚拟应用程序模式故障排除工件。您可以使用 Storehouse Browser 查看存储在 Storehouse 存储库中的工件。

在 IBM Workload Deployer 和 IBM PureApplication System 中,您可以导航到 Workload console > System > Storehouse Browser 来找到 Storehouse Browser。在 IBM SmartCloud Orchestrator 中,可以导航到 SmartCloud Orchestrator console > Administration > Storehouse Browser 来找到 Storehouse Browser。只有拥有查看 System 菜单(或 Administration 菜单)的权限的用户才能查看 Storehouse Browser。图 1 展示了 Storehouse Browser 的典型内容。

图 1. Storehouse Browser
Storehouse Browser

点击查看大图

图 1. Storehouse Browser

Storehouse Browser

您可以使用 Storehouse 存储库来存储产品二进制文件。在工作负载部署期间,虚拟应用程序模式可以从 Storehouse 下载二进制文件,然后在虚拟机上安装和配置它们。要将产品二进制文件上传到 Storehouse,您可以采用以下技术之一:

  • 使用 cURL 上传二进制文件。
  • 使用您的模式类型上传二进制文件。
  • 使用不同的二进制上传模式类型来上传二进制文件。

上述每种技术各有优点和缺点。以下各节将介绍如何使用上述 3 种技术。通过将二进制文件 rhel_rpm.tgz 上传到以下 Storehouse 存储库位置,我们将演示上述技术:/admin/files/Sample/Common/

使用 cURL 上传二进制文件

对于这项技术,您将使用 cURL 实用程序将一个二进制文件上传到 Storehouse 存储库,如清单 1 所示。清单 1 中的代码将文件上传到该位置,如图 2 所示。

图 2. Storehouse Browser 中的文件位置
Storehouse Browser 中的文件位置

点击查看大图

图 2. Storehouse Browser 中的文件位置

Storehouse Browser 中的文件位置

此技术的优点包括:

  • 与其他两种技术相比,它相对简单一些。
  • 它不需要其他任何工件或代码来上传二进制文件。

此技术的限制包括:

  • cURL 的一些特征在上传的文件大小上是有限制的。
  • 此方法可能不适合 PureApplication System。

此外,您需要管理员权限才能将文件上传到存储库。

使用 cURL 上传产品二进制文件。
#Upload file to storehouse under /admin/files/Sample/Common.
curl -v -u <user>:<password> -k -X PUT --data-binary @rhel_rpm.tar.tgz -H "Content-Type:
application/octet-stream" https://<server_name>/storehouse/admin/files/Sample/Common/ rhel_rpm.tgz
#Give full access to the current user and group Everyone to download the file.
curl -v -i -u <user>:<password> -k -X POST -H "Content-Type: application/json" 
-X POST -d "{\"AccessRights\":{\"$USER\":\"F\",\"_group_:Everyone\":\"
F\"}}" https://<server_name>/storehouse/admin/files/Sample/Common/rhel_rpm.tgz?meta

如果在 PureApplication System 上使用此技术,文件会上传到 Storehouse,但您可能无法将它下载到您的虚拟应用程序模式中,因为您无法将组访问控制(如上面第二个 curl 命令所示)设置为 “Everyone”。

使用您的模式类型上传二进制文件

对于此技术,您需要使用包含您的虚拟应用程序模式插件的模式类型来包装二进制文件。如果使用任何归档文件解压工具打开一个构建的模式类型,效果如图 3 所示。归档文件包含一个 patterntypes 文件夹(其中包含一个归档文件格式的模式类型项目)和一个 plugins 文件夹(其中包含一个归档文件格式的插件项目。将此模式类型安装到 Workload Deployer、PureApplication System 或 SmartCloud Orchestrator 中后,patterntypes 文件夹的内容存储在 Storehouse 存库中的 “/admin/patterntypes” 下,plugins 文件夹的内容存储在 Storehouse 存储库中的 “/admin/plugins” 下。

图 3. 展开的已构建好的模式类型归档文件
展开的已构建好的模式类型归档文件

现在您已经知道了 Storehouse 存储库的工作原理,为了将二进制文件 rhel_rpm.tgz 放在 /admin/files/Sample/Common 下,您需要一个名为 files/Sample/Common 的额外文件夹,其中包含已构建的模式类型归档文件中的文件 rhel_rpm.tgz,如图 4 所示。安装这种修改的模式类型时,二进制文件会存储在 Storehouse 存储库中的 /admin/files/Sample/Common 下,如 图 2 所示。

图 4. 包含二进制文件的扩展的已修改模式类型归档文件
包含二进制文件的扩展的已修改模式类型归档文件

为了帮助您按图 4 所示打包二进制文件,我们在本文的 “下载” 部分提供了一个名为 addStorehouseFiles.xml 的 Ant 构建文件。可在 IBM Workload Deployer Eclipse PDK 环境中运行这个实用程序。要使用此实用程序,可打开您的 IBM Workload Deployer Eclipse PDK 环境,并将此 Ant 文件放在您的模式类型项目下,如图 5 所示。您还应该创建一个名为 storehouse/files 的文件夹,如图 5 所示。子文件夹文件对应于图 4 中显示的 files 文件夹。

在使用 IBM Pattern toolkit > build 构建模式类型后,右键单击 addStorehouseFiles.xml 并选择 Run As > Ant Build。Ant 脚本会解压归档文件 /patterntype_project/export/built_pattern_type_version.tgz,该文件是在模式构建步骤中创建的。它将该文件夹重新压缩到 /patterntype_project/storehouse 下。在使用示例 Ant 脚本之前,编辑 addStorehouseFiles.xml 并更改 patternTypeFile 属性的值,以反映您的模式类型名称和版本。

图 5. 包含 addStorehouseFiles.xml 实用程序的模式类型 PDK 项目
包含 addStorehouseFiles.xml 实用程序的模式类型 PDK 项目

点击查看大图

图 5. 包含 addStorehouseFiles.xml 实用程序的模式类型 PDK 项目

包含 addStorehouseFiles.xml 实用程序的模式类型 PDK 项目

使用此技术的优点包括:

  • 您可上传您想要的任意大小的文件。如果使用工作负载控制台用户界面安装该模式,您拥有 2GB 的限制。对于大于 2 GB 的大小,可使用工作负载 CLI 环境。
  • 您可以将二进制文件和相关插件打包并作为单个实体进行传送。

如果使用此技术,在从系统删除模式类型时,会从 Storehouse 存储库删除二进制文件。这会导致以下限制:

  • 如果二进制文件非常大,那么每次更新模式类型的功能元素时都会花很多时间和网络资源。
  • 如果希望跨模式类型共享同某个二进制文件,则必须保留用来将二进制文件上传到系统中的模式类型,即使您不需要它。

您需要获得管理员权限才能上传模式类型。要使用此技术,您必须是管理员组的成员。

使用不同的二进制上传模式类型来上传二进制文件

为了解决上述限制,可将二进制文件与包含虚拟应用程序模式的功能性工件的模式类型分离。使用此技术,无需让一种模式类型同时包含二进制文件和虚拟应用程序模式插件,您会有两种模式类型。第一种模式类型仅包含二进制文件,第二种模式类型包含您的虚拟应用程序模式插件。您将按照创建上一节中的模式类型的方式创建该模式类型。惟一的不同是,此模式类型没有任何虚拟应用程序模式插件。图 6 演示了一个仅包含示例二进制文件的模式类型。将二进制文件与虚拟应用程序模式插件分离后,可与功能性工件独立地管理二进制文件。

图 6. 展开的仅包含二进制文件的模式类型
展开的仅包含二进制文件的模式类型

使用此技术的优点包括:

  • 可跨模式类型共享二进制文件。
  • 可彼此独立地更新和管理二进制文件和模式的功能性方面。

您仍然需要获得管理员权限才能上传模式类型。要使用此技术,您必须是管理员组的成员。


从 Storehouse 存储库下载二进制文件

现在您已经将二进制文件上传到 Storehouse 存储库,我们看看如何将这些文件下载到虚拟应用程序模式实例所创建的 VM。您可以使用部件生命周期脚本中的虚拟应用程序模式 maestro 框架从 Storehouse 存储库下载文件。有关虚拟应用程序模式 maestro 框架和部件生命周期脚本的详细信息,请参阅本文的 参考资料 部分。

清单 2 演示了如何从 Storehouse 存储库下载二进制文件。在调用 maestro.filesurl 后,会以 HTTP URL 格式返回 /admin/files 的位置。然后您可以将文件位置附加到这个 URL,使用 maestro.downloadx 方法下载该文件并将它提取到您想要的位置。将文件下载到虚拟应用程序模式虚拟机后,就可以开始安装和配置二进制文件。

清单 2. 从 Storehouse 存储库下载文件
def downloadBinaries():
	logger.debug("enter downloadBinaries")
	fileName = 'Sample/Common/rhel_rpm.tgz'
	installerUrl = urlparse.urljoin(maestro.filesurl, fileName)   
	downloadPath = '/home/virtuser'    
	logger.debug('download ' + installerUrl)
	maestro.downloadx(installerUrl, downloadPath)
	logger.debug("exit downloadBinaries")

在本文中,我们提供了 示例代码 来展示如何创建一个仅包含二进制文件的模式类型 (patterntype.binaryonly),以及如何创建一个同时包含二进制文件和功能性插件(patterntype.storehouseupload 和 plugin.storehouseupload)的模式类型。


使用共享服务存储库服务器

共享服务是预定义的虚拟应用程序模式,可由同一个云组中的多个工作负载部署共享,这些工作负载包括虚拟应用程序、虚拟系统和虚拟设备。每个云组仅允许共享服务的一个实例。有关共享服务和如何开发共享服务的更多细节,请参阅 参考资料 部分。

您可以创建一个可托管您的工作负载需要的二进制文件的共享服务存储库服务器。共享服务存储库服务器可公开一些必要的接口,以便需要二进制文件的虚拟应用程序模式工作负载能够使用公开的接口连接到存储库服务器,并下载合适的文件。

在本文中,我们提供了一个 示例共享服务存储库服务器(用作一个 NFS 服务器)和一个虚拟应用程序模式工作负载客户端(使用 NFS 挂载下载二进制文件)。在部署时,为共享服务存储库服务器分配了存储二进制文件所需的磁盘大小。共享服务存储库服务器还提供了一个部署后操作,可用于使用 HTTP 协议从外部系统上传必要的二进制文件。图 7 演示了这个部署后操作的视图。

图 7. 共享服务器操作的视图
共享服务器操作的视图

点击查看大图

图 7. 共享服务器操作的视图

共享服务器操作的视图

Workload Deployer、PureApplication System 和 SmartCloud Orchestrator 共享服务基础架构提供了一个注册表,其中包含已部署的共享服务的信息。客户端可在这个注册表中查询它想要使用的共享服务的信息。在示例中,存储库服务器通过此注册表向客户端公开它的主机名和 NFS 挂载端点。清单 3 演示了如何使用 RegistryProvider 接口向共享服务注册表提供信息。共享服务存储库服务器中一个有趣的存储库客户端,然后可在它的生命周期脚本中使用 maesro.registry 框架,从注册表获取共享服务服务器主机名和 NFS 端点,从 NFS 端点复制必要的二进制文件。清单 4 演示了存储库客户端如何从服务器公开的注册表获得详细信息。

清单 3. 向注册表提供共享服务存储库服务器信息的代码
public class SampleSharedServiceRegistryProvider implements RegistryProvider {
  private static final String CLASS_NAME =
   SampleSharedServiceRegistryProvider.class.getCanonicalName();
  private static Logger logger = Logger.getLogger(CLASS_NAME);
  public final String LOCAL_BINARIES_REPOS_PATH="/shared_repository";
  public JSONArtifact getRegistry(String clientVersion,
    Map<String, JSONObject> deploymentInfo) throws HttpException {
    String METHOD = "getRegistry";
    JSONObject registry = new JSONObject();
    JSONObject deploymentDoc = deploymentInfo.get
        (RegistryProviderConstants.DEPLOYMENT_DOC);
    logger.logp(Level.FINE, CLASS_NAME, METHOD, "enter getRegistry ");
    //get instance ip addresses and return in the registry
    if(deploymentDoc != null){
      JSONObject instances = (JSONObject) deploymentDoc.get("instances");
      if (null != instances) {
	for (Object key : instances.keySet()) {
	 String keystr = (String)key;
	 if(keystr.startsWith("SampleSharedService")){
           Object ipAddr = ((JSONObject) instances.get(key)).get("public-ip");
                       String ip = (String)ipAddr;
                       registry.put("serviceHost", ip);
	 }
        }
      }
     }
     registry.put("mountPoint", LOCAL_BINARIES_REPOS_PATH);
     logger.logp(Level.FINE, CLASS_NAME, METHOD,
         "getRegistry exit. Registry return="+registry);
     return registry;
  }
}
清单 4. 从注册表检索共享服务存储库服务器信息的客户端代码
# Retrieve info on SharedService (IP) so we know where to go
regInfo = maestro.registry.getRegistry("sampleMediaService", "1.0")
serviceHost = regInfo['serviceHost']
mountPoint = regInfo['mountPoint']

此方法的优点在于,如果不希望通过 Storehouse 共享二进制文件,那么您可以拥有自己的二进制存储库服务器。因为我们使用了共享服务注册表作为查找目录,所以要求二进制文件的客户端与提供二进制文件的服务器之间的交互是松散耦合的。

使用共享服务存储库服务器的主要限制是,您只能为每个云组下载一种类型的共享服务。因此,云组中的所有部署必须共享同一个存储库服务器。此外,还有共享服务服务器开发和部署的其他开销。要安装和部署共享服务服务器,您需要获得管理员权限。


用例

以下 示例模式类型(包含源代码)可用于本文:

  • patterntype.binaryonly-1.0.0.0.tgz
  • patterntype.storehouseupload-1.0.0.0.tgz
  • ptype.installsharedservice-1.0.0.0.tgz

使用 Storehouse 存储库的示例

安装 patterntype.binaryonly-1.0.0.0.tgz patterntype.storehouseupload-1.0.0.0.tgz 时,您会看到一个名为 “/admin/files/Sample/Common/ rhel_rpm.tgz” 的文件被添加到 Storehouse 中,如 图 2 所示。

除此之外,通过使用 patterntype.storehouseupload-1.0.0.0.tgz,您可以创建一个示例虚拟应用程序模式,如图 8 所示。部署此虚拟应用程序模式时,它会将上传到 Storehouse 中的文件下载并解压到虚拟机上的 /home/virtuser/binaries 中。虚拟应用程序模式使用了 清单 2 中所示的代码来下载该文件。

上传大型二进制文件的技巧

如果使用 Workload 控制台或 SmartCloud Orchestrator 控制台用户界面来安装模式类型,那么您将无法 安装大于 2 GB 的模式类型。无法使用控制台浏览器接口将大型二进制文件导入 Storehouse 中。要克服此限制,需要使用 CLI API 安装模式类型。您可以执行以下步骤来从命令行安装模式类型:

  1. 打开一个命令提示符,并更改到模式类型归档文件所在的目录。
  2. 从 IBM Workload Deployer、IBM PureApplication System 或 IBM SmartCloud Orchestrator 系统下载 CLI 压缩文件。然后将它解压到 /pathToCli 下。

从命令行运行以下命令,具体情况取决于您的 IBM 云解决方案:

/pathToCli/pure.cli/bin/pure -h IPAS_IP -u <user> -p <pwd>

或者

/pathToCli/deployer.cli/bin/deployer -h IPAS_IP -u <user> -p <pwd>

返回到 CLI 提示符后,运行以下命令:

deployer.patterntypes.create('YourPatternType-1.0.0.0.tgz')
图 8. 使用 patterntype.storehouseupload 创建的虚拟应用程序
使用 patterntype.storehouseupload 创建的虚拟应用程序

点击查看大图

图 8. 使用 patterntype.storehouseupload 创建的虚拟应用程序

使用 patterntype.storehouseupload 创建的虚拟应用程序

使用共享服务存储库模式类型的示例

安装和启用模式类型 ptype.installsharedservice-1.0.0.0.tgz 后,部署共享服务,使用为您的二进制存储库提供的磁盘大小作为输入。部署共享服务后,必须使用 Virtual Application Console 中提供的部署后操作,在共享服务存储库中填充二进制文件。为此,共享服务运行后,选择运行的共享服务实例并单击 Manage 按钮。Virtual Application Console 将会打开。在 Virtual Application Console 中选择 Operations > Media Service。您会看到如图 7 所示的两个可用操作。使用第二个操作 Import file via HTTP 来填充二进制存储库。如果有多个文件,那么可以运行此操作多次。

要测试共享服务存储库,可根据模式类型 sample.installsharedservice 1.0 来创建和部署一个虚拟应用程序模式,如图 9 所示。上一节已经介绍过,虚拟应用程序模式从注册表获取以下共享服务存储库细节、共享服务存储库 IP 和 NFS 挂载点(参见 清单 4 中的代码)。客户端可使用此代码挂载端点和下载二进制文件。

图 9. 使用 sample.installsharedservice 创建的虚拟应用程序
使用 sample.installsharedservice 创建的虚拟应用程序

点击查看大图

图 9. 使用 sample.installsharedservice 创建的虚拟应用程序

使用 sample.installsharedservice 创建的虚拟应用程序

结束语

在本文中,您了解了各种管理要在您的虚拟应用程序模式工作负载中使用的二进制文件的技术。您还了解了这些技术的相对优点和限制。基于这些优点和限制,管理二进制文件的最佳选择是使用 Storehouse 存储库。将二进制文件上传到 Storehouse 存储库的最佳技术是使用一种仅包含二进制文件的专门的模式类型。

致谢

感谢 IBM 的 Jim Riordan 帮助完成共享服务存储库技术的概念。


下载

描述名字大小
代码样例code_sample.zip76KB

参考资料

学习

讨论

  • 加入 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=Cloud computing
ArticleID=975183
ArticleTitle=在虚拟应用程序模式工作负载中管理产品二进制文件
publish-date=06232014