IBM SmartCloud Enterprise 管理,第 4 部分: 使用 ICCT 创建镜像

软件包是可以部署在虚拟机实例上的软件安装文件、配置文件和元数据的集合。在本系列的最后一篇文章中,作者将介绍三种使用 ICCT 创建镜像来捕获定制镜像的机制,以及通过更新语义拓扑结构文件在镜像与软件包之间手动添加依赖关系的机制。

ICCT 执行记账任务,并提供一个分步流程和一个图形化 UI 来便捷地创建软件包、定制虚拟机实例和捕获镜像。 本 系列 文章将展示如何使用 ICCT 创建一个软件包,然后在 IBM SmartCloud Enterprise 上注册和维护它。

Alex Amies, 高级软件工程师, IBM

/developerworks/i/p-aamies.jpgAlex Amies 是 IBM GTS 中国开发实验室的一名高级软件工程师。他目前是致力于设计 IBM Smart Business Development and Test on the IBM Cloud 的一名架构师。此前他在 IBM 其他部门担任过云计算和安全性产品方面的架构师和开发人员。



Alexei Karve, 高级软件工程师, IBM

Alexei Karve 是 IBM Thomas J Watson Research Center 的一名高级软件工程师。他是 SmartCloud Enterprise 设计团队的成员,专攻云业务支持系统的软件包和 VPN/VLAN 研究。Alexei 在操作支持服务、虚拟化和 Tivoli Provisioning Manager 方面有着广泛的经验。在 1993 年加入 IBM 之前,他拥有从事各种系统管理工作的经验。



Scott Peddle, 咨询软件开发人员, IBM  

Scott Peddle 是 Business Process Management Repository 团队的咨询软件开发人员。他负责开发 WebSphere BPM 产品套件中的集成战略。



Hidayatullah Shaikh, 高级技术人员, IBM

Hidayatullah Shaikh 是 IBM T.J. Watson Research Center 的一名高级技术人员兼高级经理。他负责领导和管理云平台、远程 IT 基础设施管理以及虚拟桌面领域中的项目。他感兴趣和擅长的领域包括虚拟化、云计算、远程服务交付、业务流程建模和集成、面向服务的体系结构、网格计算、电子商务、企业 Java、数据库管理系统以及高可用性集群。



Qiangguo Tong, 高级软件工程师, IBM

Qiang Guo Tong 是一位高级软件工程师,在 Web 开发方面有 5 年的工作经验。他是 IBM 中使用的多个全球化工具的技术领导。



Pan Xia Zou, 高级软件工程师, IBM

Pan Xia Zou 是 IBM 的一位高级软件工程师,担任 IBM SmartCloud Enterprise 的构建和部署自动化架构师。



2013 年 4 月 25 日

本系列的前几篇文章介绍了如何使用 ICCT 在 SmartCloud Enterprise Asset Catalog 中创建和维护软件包。这些文章还介绍了如何使用 ICCT 和软件包创建一个简单镜像。本文将深入介绍使用软件包创建一个镜像的不同方式。文中将演示三种使用 ICCT 通过捕捉安装有 XAMPP 的定制镜像来创建镜像的机制。本文还将介绍如何通过更新语义拓扑结构文件,在镜像和软件包之间手动添加一种依赖关系。

本文介绍了三种创建一种镜像设计(一种使用 ICCT 利用第 3 部分中创建的 XAMPP 软件包并结合所依赖的 Google Chrome 软件包来创建新镜像的方式)的机制:

  • 将一个镜像设计模板/配方应用到另一个数据中心中的一个基础镜像上。
  • 扩展一个基础镜像。
  • 扩展以前使用 ICCT 捕获的一个定制镜像。

使用一个模板扩展一个镜像

将一个镜像设计模板应用到另一个数据中心中的基础镜像上:

  1. 为 Raleigh- RTP 数据中心创建一个新的云提供方。
    图 1. 创建一个新的云提供方
    创建一个新的云提供方

    我们以前结合使用 Google Chrome 和 SmartCloud Enterprise_Ehningen 云提供方创建了一个私有的定制镜像。这里使用该镜像作为模板,将同样的配方(recipe)重新应用到这个 SmartCloud Raleigh 数据中心中的基础镜像上。XAMPP 也会添加到前面的配方中。

  2. 在 ICCT 用户界面最右侧的下拉菜单中选择 SCE_Raleigh 作为云提供方。
    图 2. 选择一个云提供方
    选择一个云提供方
  3. 将搜索限制于 Red Hat Enterprise Linux 6,并使用 Images 下拉菜单导入 Red Hat Enterprise Linux 6 (64-bit)(RTP)。
    图 3. 从云提供方导入镜像
    从云提供方导入镜像
  4. 单击 + 图标创建一个新镜像。
    图 4. 创建新镜像 RHEL6WithGCandXAMPP
    创建新镜像 RHEL6WithGCandXAMPP
  5. 采用以前使用 Google Chrome 创建的镜像作为模板来创建新的镜像。选择 RHEL6WithGoogleChrome 作为模板并单击 Next
    图 5. 选择 RHEL6WithGoogleChrome 作为模板
    选择 RHEL6WithGoogleChrome 作为模板
  6. 将以前选择的模板应用于来自 RTP 的基础镜像。选择 Red Hat Enterprise Linux 6(64 位)RTP 作为基础镜像并单击 Next
    图 6. 选择一个基础镜像
    选择一个基础镜像
  7. 此时将会显示摘要页面。您可以在 Additional Software Bundles 下看到已从该模板应用了 GoogleChrome。单击 Done
    图 7. 新镜像摘要
    新镜像摘要
  8. 图 8 显示了新镜像。
    图 8. 从模板创建新镜像
    从模板创建新镜像
  9. 展开 Software Bundles。因为以前的一个设计已经包含 Google Chrome,所以新的私有镜像也已包含 Google Chrome 的配方。请注意,它显示为黄色,这表明它未安装在镜像上,但已包含配方。现在需要添加 XAMPP 软件包。
  10. 单击 铅笔 图标。单击 Add Bundle,选择 XAMPP 软件包并单击 Add
    图 9. 将 XAMPP 软件包添加到镜像中
    将 XAMPP 软件包添加到镜像中
  11. 图 10 显示了已添加的软件包。
    图 10. 已添加到镜像中的 XAMPP 软件包
    已添加到镜像中的 XAMPP 软件包
  12. 展开 XAMPP Software BundleInstallDeploy Parameters。您可以看到为 Archive Name 和 Apache Web Server Port 提供的默认值,还可以看到 Apache Web Server Port 右侧显示为 Deploy parameter 的未锁定图标。您需要这个未锁定的图标,这样才能通过 parameters.xml 在 SmartCloud Enterprise Portal 中公开它,从而在部署期间将它用于更改。
  13. 单击 Save。这会将镜像设计/配方保存在 ICCT Virtual Machine 本地。

    现在,您可在 Raleigh 数据中心中同步并捕获此镜像。当然,也可以使用同一种机制,通过相关的云提供方将该模板/配方应用于同一个 Ehningen 数据中心或任何其他数据中心中的一个镜像。此功能对使用软件包在数据中心之间迁移镜像很有用,无需导出和导入镜像。这还可以应用于任何具有适用架构(表示为软件包中的依赖关系)的相关操作系统 — SUSE Linux Enterprise Server 或 Red Hat Enterprise Linux 镜像。我们将同一个配方应用于 Ehningen 数据中心中的 Red Hat 6.2 64 位基础镜像,然后进行同步。

  14. 此时将会显示许可协议。单击 I agreeDone
    图 11. 同意许可协议
    同意许可协议

    状态从 Out of Sync 更改为 Synchronizing,等待 SmartCloud 创建并启动一个临时 VM 实例。

  15. 激活实例后,在软件包表格中检查该实例。由于以前发布的 ICCT 版本中存在一个错误,所以会显示 Google Chrome 软件包两次。该错误应该已经在已发布的版本中修复。
    图 12. 实例选项卡中的 RHEL6WithGCandXAMPP
    实例选项卡中的 RHEL6WithGCandXAMPP
  16. 使用 REST API 删除与 Google Chrome 软件包的额外关联。在下面的请求中使用正确的用户 ID 和密码。请注意,仅在看到额外关联时才需要这么做。
curl -k -H 'Accept: application/json' -u <userid>:<password> 
https://www-147.ibm.com/computecloud/enterprise/api/rest/20100331/
instances/211835/swbundle
{"SwBundleInstanceDetails":[{"SwBundleNum":1,"SwBundleName":"GoogleChrome",
"SwBundlePricingDetails":{"rate":0,"unitOfMeasure":"UHR","countryCode":"897","
effectiveDate":1313107200000,"currencyCode":"USD","pricePerQuantity":1},
"SwBundleDescription":"Install Latest Google Chrome using yum","SwBundleState":"1",
"name":"211835","id":"2909","description":"GoogleChrome installed"},{"SwBundleNum":2,
"SwBundleName":"GoogleChrome","SwBundlePricingDetails":{"rate":0,"unitOfMeasure":"UHR",
"countryCode":"897","effectiveDate":1313107200000,"currencyCode":"USD",
"pricePerQuantity":1},"SwBundleDescription":"Install Latest Google Chrome using yum"
,"SwBundleState":"1","name":"211835","id":"2909","description":"GoogleChrome installed"},
{"SwBundleNum":1,"SwBundleName":"XAMPP","SwBundlePricingDetails":
{"rate":0,"unitOfMeasure":"UHR","countryCode":"897","effectiveDate":
1313107200000,"currencyCode":"USD","pricePerQuantity":1},"SwBundleDescription":
"An easy to install Apache distribution containing MySQL, 
PHP and Perl.","SwBundleState":"1","name":"211835","id":"3555",
"description":"XAMPP installed"}]}
  1. 删除与 Google Chrome 的第二个关联。请注意 id 和 SwBundleNum,请在请求中的 action=disassociateSWBundle 中使用它们。
    curl -k -H 'Accept: application/json' -X PUT -u 
    <userid>:<password> -d "action=disassociateSWBundle&
    swBundleId=2909&swBundleNum=2" https://www-147.ibm.com/computecloud/
    enterprise/api/rest/20100331/instances/211835

    它返回:

    {"success":true}

    请注意,用于检索 SWBundle 与此实例的关联关系的请求拥有 SwBundleState=3,这表示它已删除。

    curl -k -H 'Accept: application/json' 
    -u <userid>:<password
    > https://www-147.ibm.com/computecloud/enterprise/api/rest/
    20100331/instances/211835/swbundle
    {"SwBundleInstanceDetails":[
    {"SwBundleNum":1,"SwBundleName":"GoogleChrome","SwBundlePricingDetails":
    {"rate":0,"unitOfMeasure":"UHR","countryCode":"897","effectiveDate":1313107200000,
    "currencyCode":"USD","pricePerQuantity":1},"SwBundleDescription":"Install Latest 
    Google Chrome using yum","SwBundleState":"1","name":"211835","id":"2909",
    "description":"GoogleChrome installed"},
    {"SwBundleNum":2,"SwBundleName":"GoogleChrome","SwBundlePricingDetails":
    {"rate":0,"unitOfMeasure":"UHR","countryCode":"897","effectiveDate":1313107200000,
    "currencyCode":"USD","pricePerQuantity":1},"SwBundleDescription":"Install Latest 
    Google Chrome using yum","SwBundleState":"3","name":"211835","id":"2909",
    "description":"GoogleChrome installed"},
    {"SwBundleNum":1,"SwBundleName":"XAMPP","SwBundlePricingDetails":{"rate":0,
    "unitOfMeasure":"UHR","countryCode":"897","effectiveDate":1313107200000,
    "currencyCode":"USD","pricePerQuantity":1},"SwBundleDescription":"An easy 
    to install Apache distribution containing MySQL, PHP and Perl.","SwBundleState":"1",
    "name":"211835","id":"3555","description":"XAMPP installed"}]}
  2. 单击 Control Panel 并选择该实例。这一次仅显示了一个与 Google Chrome 软件包的关联。
    图 13. 该实例在表格中显示软件包
    该实例在表格中显示软件包
  3. 在 ICCT 成功安装软件包之后,状态会显示 “Synchronized”。如果您的脚本返回 0,那么 ICCT 会显示所有操作都已成功。但是您仍然应该手动验证此操作。以 idcuser 身份登录到此临时实例,查看 /opt/google 和 /opt/lampp 目录以检查 Google Chrome 和 XAMPP 是否已安装。您也可以启动并验证应用程序是否正常运行。如果它们未安装或未正常运行,那么请登录到您的 ICCT VM,检查 /drouter/ramdisk2/mnt/raid-volume/raid0/logs/trace.log 中的日志。该日志会指示已存在的错误。

    如果某个地方出错,或者您的安装脚本有一个错误但未返回一个非零值,那么您可以手动进行安装。ICCT 将您提供的所有安装程序、配置和重置文件都复制到临时实例上的 /tmp 文件夹中。您可以在 /tmp/IconExecutionPackage* 目录中检查安装程序文件。

    例如,下面显示了 ICCT 在临时目录中运行的包。

    [idcuser@vhost4180 IconExecutionPackagea7791a5b-955e-4f5a-b879-561aa636ac3a]$ ls
    activate.txt com.apache.xampp_1.0.0 com.ibm.icon.abstraction.cc_1.0.0.0  
    IconImageSynchronizer.zip
    cloud-startup3.txt com.google.chrome_1.0.0  
    IconImageSynchronizer.sh rule_template.xml
  4. 您可以看到 /tmp/IconExecutionPackagea7791a5b-955e-4f5a-b879-561aa636ac3a/com.apache.xampp_1.0.0/execution/installXAMPP.sh。如果任何脚本中出现错误,则需要手动修复并运行它,以便继续使用此实例。请注意,任何这类手动修复都要求您在 /drouter 目录中搜索错误文件,并执行相同的修复,以便修复 Rational Asset Manager 中的软件包资产和 ICCT 实例中缓存的相关安装脚本。
  5. 当所有内容都正确之后,请单击 ICCT 中的 Capture 图标。这会捕获一个安装了 Google Chrome 和 XAMPP 的定制镜像,删除临时实例。ICCT 中的状态更改为 Completed Capture Complete。现在您可使用这个已捕获的定制镜像创建其他实例。通知会显示在 SmartCloud Enterprise Portal Overview 选项卡上。
    图 14. 来自 RHEL6WithGCandXAMPP 的已编译的镜像创建通知
    来自 RHEL6WithGCandXAMPP 的已编译的镜像创建通知

要查看同时包含 GoogleChrome 和 XAMPP 软件包的新镜像 RHEL6WithGCandXAMPP:

  1. 单击 SmartCloud Enterprise Portal Control Panel 上的 Images 选项卡。
    图 15. 镜像选项卡中的 RHEL6WithGCandXAMPP 镜像
    镜像选项卡中的 RHEL6WithGCandXAMPP 镜像
  2. 验证 Rational Asset Manager 中的资产,并检查 RHEL6WithGCandXAMPP 的 Template Topology Asset 的语义拓扑结构文件 rhel62-x64.topology 中的两个有关联的软件包。
    图 16. Rational Asset Manager 中的 RHEL6WithGCandXAMPP 镜像
    RAM 接口中的 RHEL6WithGCandXAMPP 镜像

    该图显示了与需求和依赖关系有关联的软件包,还列出了已安装的产品。下面列出的是 ICCT 添加到拓扑结构文件中的软件包。

    <core:extendedAttribute uuid="_2VJVg3nsEeGp3r7QPxS4HQ" name="bundleName">
    <core:data xsi:type="xsd:string" uuid="_QpUHvXnaEeGp3r7QPxS4HQ"
    >GoogleChrome</core:data>
    </core:extendedAttribute>
    <core:extendedAttribute uuid="_2VJVhHnsEeGp3r7QPxS4HQ" 
    name="bundleRepoId">
    <core:data xsi:type="xsd:string" uuid="_QpUHv3naEeGp3r7QPxS4HQ">
    ryo-asset://07356E0D-3868-1709-0F95-AD9FF0355FF4_1.0.0
    @https://www-147.ibm.com/cloud/enterprise/ram.ws</core:data>
    </core:extendedAttribute>
    
    <core:extendedAttribute uuid="_2VJVg3nsEeGp3r7QPxS4HQ" name="bundleName">
    <core:data xsi:type="xsd:string" uuid="_QpUH-3naEeGp3r7QPxS4HQ">
    XAMPP</core:data>
    </core:extendedAttribute>
    <core:extendedAttribute uuid="_2VJVhHnsEeGp3r7QPxS4HQ" 
    name="bundleRepoId">
    <core:data xsi:type="xsd:string" uuid="_QpUH_HnaEeGp3r7QPxS4HQ">ryo-asset:
    //842DE67C-2E85-70B4-318A-940EC239D44E_1.0.0
    @https://www-147.ibm.com/cloud/enterprise/ram.ws</core:data>
    </core:extendedAttribute>
  3. 当您下一个针对此镜像的实例的订单时,就会看到这两个软件包。
    图 17. 从镜像 RHEL6WithGCandXAMPP 中添加实例
    从镜像 RHEL6WithGCandXAMPP 添加实例
  4. 您之前添加到软件包的配置脚本 configureXAMPPPort.sh 会在创建实例时运行。将该实例设置为使用您输入的端口。
    图 18. 为实例指定一个端口
    为实例指定一个端口
  5. 检查请求 http://<yourinstanceHostName>:8081 是否有效。如果您的 XAMPP Apache Web Server 没有提供预期的响应,那么您可以检查 /opt/ibm/ae/log/trace.log 和 /opt/ibm/ae/AR 目录中的日志。还需要检查 /opt/ibm/ae/AL 目录中的脚本。

要删除 ICCT 捕获的定制镜像,请从 ICCT 删除元数据并从 SmartCloud 删除镜像:

  1. 在 ICCT 中选择镜像并单击右侧窗格中红色的 X 图标。
    图 19. 删除 ICCT 中的 RHEL6WithGCandXAMPP
    删除 ICCT 中的 RHEL6WithGCandXAMPP
  2. 单击 Yes 确认删除 ICCT 中的定制镜像的元数据。
    图 20. 确认已删除 ICCT 中的 RHEL6WithGCandXAMPP
    确认已删除 ICCT 中的 RHEL6WithGCandXAMPP
  3. 返回到 SmartCloud Portal 并从 SmartCloud Portal 删除该镜像,或者使用 SmartCloud REST API 或命令行 API 从 SmartCloud 删除镜像。
    图 21. 删除 SmartCloud 中的镜像 RHEL6WithGCandXAMPP
    删除 SmartCloud 中的镜像 RHEL6WithGCandXAMPP

扩展基础镜像

切换回下拉列表中的 Ehningen 数据中心。这些步骤描述了第二种直接使用软件包和依赖关系扩展基础镜像的方法。

  1. 选择 Red Hat Enterprise Linux 6(64 位)并单击右侧窗格中的 Extend(双 CD)图标。
    图 22. 扩展镜像
    扩展镜像
  2. 输入信息并单击 Create
  3. 要查看 ICCT 如何帮助处理未满足的依赖关系和软件包订单,可以单击 pencil 图标来添加 XAMPP 软件包。
    图 23. 将软件包添加到镜像中
    将软件包添加到镜像中
  4. 单击 Add 并单击 Save。此时会在 Validation Status 中显示一条警告消息,因为对所需的 Google Chrome 软件包的依赖关系未得到满足。
    图 24. 验证状态
    验证状态
  5. 软件包依赖关系可通过两种方式得到满足。原始镜像可能预先安装了所需的产品或软件包,或者可以添加和安装提供了相关功能的其他必要的软件包。在这种情况下(第二个示例),基础镜像没有 Google Chrome,所以您需要添加它。在稍后演示的第三个示例中,Google Chrome 预先安装在用作基础镜像的定制镜像上,所以 Google Chrome 软件包不需要单独添加。在上面的第一个示例中,模板添加了依赖的 Google Chrome 软件包。
    图 25. 问题详细信息
    问题详细说明了为什么未满足软件包需求
  6. 问题详细信息表明需要 com.google.chrome 软件包。立即添加该软件包并单击 Save
    图 26. 添加 GoogleChrome 软件包
    添加 GoogleChrome 软件包
  7. 现在 Validation Status 显示为 Invalid。这是因为软件包订单是无效的。您需要在 XAMPP 软件包之前安装 Google Chrome 软件包。
    图 27. 无效状态消息
    无效状态消息:构建订单无效
  8. 将鼠标悬停在 XAMPP 上,单击 move down arrow 来修复订单。然后单击 Save
    图 28. 软件包 XAMPP 成功添加
    软件包 XAMPP 成功添加
  9. 警告应该会消失,Validation Status 显示为 “Valid”。展开 XAMPP 并将端口锁定到 8081。
    图 29. 展开 XAMPP
    展开 XAMPP
  10. 单击 Save。创建一个临时实例并且 ICCT 显示为已同步。完成同步之后,您可以看到 8081 成为锁定的端口。
  11. 登录到临时实例并检查目录,确保 Google Chrome 和 XAMPP 已安装。另请注意 /tmp 文件夹中的单一 IconEcecutionPackage,它在 /opt/ibm/ae/AS 文件夹中同时安装了二者的软件包和激活脚本。
    [idcuser@vhost4214 ~]$ ls /opt/lampp/
    bin error htdocs lampp libexec logs phpmyadmin sbin tmp
    cgi-bin etc icons lib licenses modules RELEASENOTES share var
    [idcuser@vhost4214 ~]$ ls /opt/google/
    chrome
    [idcuser@vhost4214 ~]$ ls /tmp
    backup rule_template.xml
    IconExecutionPackageada25d26-cf27-4791-bbd1-20161e13748b
    [idcuser@vhost4214 ~]$ ls /opt/ibm/ae/AS
    com.apache.xampp_1.0.0 com.ibm.icon.abstraction.cc_1.0.0.0 ConfigIcon.py
  12. 这里存在一个相同的问题:Google Chrome 与该实例关联了两次。可删除第二个关联或忽略它。单击 Capture 来捕获可用于配给更多实例的镜像。捕获的镜像会拥有正确的关联,无论您是否从实例中删除了额外的关联。ICCT 正确地更新了 Rational Asset Manager 中的拓扑结构文件,以便将关联与镜像一起显示。
  13. 您还可以检查 Rational Asset Manager 中的 parameters.xml。系统显示,新的 Apache Web Server Port 公开为一个可在配给期间看到的参数。
    图 30. RAM 中的 parameters.xml
    RAM 中的 parameters.xml
  14. 当使用这个定制镜像配置新实例时,应该能够从一个浏览器请求 http://<instancehostname>:<selectedport>,从 XAMPP 接收标准响应并浏览页面。
    图 31. 查看 XAMPP
    查看 XAMPP

扩展以前定制的一个镜像

再次声明,选择您以前使用 Google Chrome 和 ICCT 创建定制镜像的 Ehningen 数据中心。使用 ICCT 进一步扩展这个定制镜像。因为这个镜像已拥有 Google Chrome,所以您只需要添加 XAMPP。

  1. 选择 RHEL6WithGoogleChrome 镜像并单击右侧窗格中的双 CD 图标(扩展)。
    图 32. 选择要扩展的镜像
    选择要扩展的镜像

    类似于您使用模板的情形,这一次 Google Chrome 已经存在。但是请注意,Google Chrome 图标的颜色为绿色(而不是模板情形中的黄色),这表明它已安装。

  2. 在 Extend an Image 窗口中输入信息并单击 Create。单击 Pencil 图标来编辑 RHEL6WithGCAndXAMPP3。
    图 33. 扩展镜像 RHEL6WithGoogleChrome
    扩展镜像 RHEL6WithGoogleChrome
  3. 单击 Add Bundle 并选择 XAMPP 软件包复选框来添加它。
    图 34. 将软件包 XAMPP 添加到镜像 RHEL6WithGoogleChrome 中
    将软件包 XAMPP 添加到镜像 RHEL6WithGoogleChrome 中
  4. 展开 XAMPP 软件包 Deploy Parameters,如图 35 所示。请注意,您将 Deploy Parameter 设置为了端口 8081 并锁定了它。
    图 35. 端口 8081 已锁定
    端口 8081 已锁定
  5. 单击 SaveSynchronize。勾选 License Agreement 并单击 Done
  6. 刷新 ICCT。检查它是否显示为 Synchronized。查找 SmartCloud Portal 上的临时实例 IP 地址。登录到临时实例并检查 /opt/lampp/lampp 是否已存在。另外检查 /opt/ibm/ae/AS/com.apache.xampp_1.0.0/activation/ConfigurePort/configureXAMPPPort.sh 是否已存在。这会在实例部署期间部署已捕获的实例后运行。请注意,/tmp 有两个 IconExecutionPackage* 目录。一个是在安装 Google Chrome 软件包时创建的旧目录。另一个用于正在安装的 XAMPP 软件包。
  7. 如果一切正常,单击 ICCT GUI 中右侧窗格中的 Capture 图标。捕获一个镜像并删除临时实例。您可以使用已捕获的镜像创建更多的实例。
    图 36. Images 选项卡中的 RHEL6WithGCandXAMPP3 镜像
    Images 选项卡中的 RHEL6WithGCandXAMPP3 镜像

请注意,端口已锁定到 8081。当部署时,此参数应该不能在 SmartCloud Portal 中配置。您可能希望已创建的实例使用固定的 8081 作为 Apache Web Server 端口。但是,在当前的 2.0 版中,SmartCloud 无法直接支持 parameters.xml 中的只读参数,所以您可以在配置期间更改端口,锁定不会有任何影响。任何使用此机制和 parameters.xml 的锁定都会让参数可供用户修改,用户可直接在 RAM Template 拓扑结构资产中手动编辑 parameters.xml。

如果镜像设计器希望硬编码端口,那么此操作需要手动完成。如果想要忽略端口参数,仅在使用 ICCT 执行捕获之前硬编码它,那么可以在同步之后在临时实例上更新为 XAMPP 软件包 /opt/ibm/ae/AS/com.apache.xampp_1.0.0/activation/ConfigurePort/configureXAMPPPort.sh 创建的配置脚本。这会预防 parameters.xml 中的任何更改影响锁定的端口。

检查该镜像是否显示了两个软件包。您需要在 ICCT 完成捕获并显示状态 “Completed: Capture Complete” 之后,刷新 SmartCloud Portal 中的 Instances 选项卡。锁定 ICCT 中的一个参数值会消除用户在部署时输入它的需求。

您还可以更新镜像资产,在 Rational Asset 目录的 GettingStarted.html 页面上添加一个链接,以允许在选择实例后直接从 Instance 选项卡通过端口 8081 连接到 XAMPP。通过包含此标记,SmartCloud Portal 会自动包含主机名,在用户单击 XAMPP Index page 链接时在一个新浏览器选项卡中打开该 URL。

<a onclick="javascript:ibmcloud.common.controlOpen
('http', 8081, '/xampp/index.php')" 
href="#">XAMPP Index page</a>

更新拓扑结构文件来关联相关的软件包

使用 ICCT 并演示了三种捕获镜像的机制之后,让我们返回到原始镜像克隆版本 RHEL6.2WithLampAndGoogleChrome,它已在以前的一篇文章中创建。

尽管您在已经此镜像上安装了 XAMPP,但您可能会注意到,仅在选择该镜像时,才会在 Images 选项卡的软件包表格中显示 Google Chrome。这是因为您没有使用 XAMPP 软件包上的依赖关系来更新此资产,您在那时没有任何这类软件包。您可以按原样保留它,或者出于完整性考虑,目前您已经有了 XAMPP 软件包,所以您可添加此依赖关系。因为与软件包的关联不会给实例带来任何配置时更改,所以关联基本上用于查看。您可以在 Rational Asset Manager 中编辑 Template Topology Asset 的内容。在针对 Google Chrome 的 core:unit 代码段(接近拓扑结构文件底部),使用以下代码段来更新语义拓扑结构文件 Rhel6.1_x64.topology。

图 37. RAM 中的拓扑结构文件位置
RAM UI 中的拓扑结构文件位置
<core:unit uuid="_mw5dOnzaEeGp3r7QPxS4HQ" 
name="xamppbundle" goalInstallState="installed" initInstallState="installed">
<core:capability uuid="_mw5dO3zaEeGp3r7QPxS4HQ" 
name="cap" linkType="any">
<core:extendedAttribute uuid="_qhXYcXzsEeGp3r7QPxS4HQ" 
name="symbolicName">
<core:data xsi:type="xsd:string" 
uuid="_mw5dPHzaEeGp3r7QPxS4HQ">com.apache.xampp</core:data>
</core:extendedAttribute>
<core:extendedAttribute uuid="_qhXYcnzsEeGp3r7QPxS4HQ" 
name="version">
<core:data xsi:type="xsd:string" 
uuid="_mw5dPXzaEeGp3r7QPxS4HQ">1.0.0</core:data>
</core:extendedAttribute>
<core:extendedAttribute 
uuid="_qhXYc3zsEeGp3r7QPxS4HQ" name="bundleName">
<core:data xsi:type="xsd:string" 
uuid="_mw5dPnzaEeGp3r7QPxS4HQ">XAMPP</core:data>
</core:extendedAttribute>
<core:extendedAttribute 
uuid="_qhXYdHzsEeGp3r7QPxS4HQ" name="bundleRepoId">
<core:data xsi:type="xsd:string" 
uuid="_mw5dP3zaEeGp3r7QPxS4HQ"
>ryo-asset://842DE67C-2E85-70B4-318A-940EC239D44E_1.0.0
@https://www-147.ibm.com/cloud/enterprise/ram.ws</core:data>
</core:extendedAttribute>
</core:capability>
</core:unit>

返回到控制面板,或者在打开不同窗口时刷新它。请注意,同一个 imageId 20047812 在软件包表格中显示了 XAMPP。这表明您可以对同一个镜像结合使用两种方法:ICCT 和手动操作。

您没有添加任何产品或 XAMPP 与 Google Chrome 软件包之间的任何依赖关系。使用 genericsoftware:unit.softwareInstallUnit 添加这些内容,更改 server:unit.serverUnit、os:unit.operatingSystemUnit、core:unit、core:requirement 和 core:link.member 标记非常复杂,最好留给 ICCT 工具来做。您可以查看 ICCT 工具在创建同时安装了两个软件包的镜像时创建的拓扑结构文件,了解更多的细节。

图 38. Images 选项卡中的 RHEL6.2WithLampAndGoogleChrome 镜像
Images 选项卡中的 RHEL6.2WithLampAndGoogleChrome 镜像

在捕获镜像后,可以在 IBM Rational Asset Catalog 中更新一个镜像的名称和描述。但是,在编写本文时,无法更新软件包的名称和描述。


结束语

在这个文章系列中,通过一个简单的示例,我们学习了如何使用 IBM SmartCloud Enterprise 上的 ICCT 来克隆和修改 Rational Asset Manager 资产,从而获得定制的配置。我们还学习了创建一种镜像设计的三种机制:

  • 将一个镜像设计模板/配方应用于另一个数据中心上的基础镜像。
  • 扩展一个基础镜像。
  • 扩展以前使用 ICCT 捕获的一个定制镜像。

参考资料

学习

获得产品和技术

  • 以最适合您的方式 评估 IBM 产品:下载产品试用版、在线试用产品、在云环境下使用产品,或者在 SOA 沙盒 中花费几个小时来学习如何高效实现面向服务的架构。

讨论

  • 加入 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, Rational
ArticleID=899354
ArticleTitle=IBM SmartCloud Enterprise 管理,第 4 部分: 使用 ICCT 创建镜像
publish-date=04252013