以编程方式调用 IBM SmartCloud Enterprise+ 服务

支持托管云服务的 API 概述

本文向 IBM® SmartCloud® Enterprise+ Version 1.2 的管理用户展示了如何通过 SmartCloud Enterprise+ API 执行基本的管理任务。通过命令示例演示了使用 API 来检查元数据和资源,管理管理性资源,以及管理虚拟服务器。

Jeff Klink, 高级技术人员, IBM

Jeff Klink 是 IBM Canada 的一位高级技术人员 (STSM)。过去 10 年,Jeff 一直致力于虚拟化、设备、网络和备份技术研究,主要关注基于 Linux 的技术和设计。目前,Jeff 是 IBM Global Technology Services (GTS) 全球云生态系统技术团队的全球领导,该团队帮助 IBM x86 和 Power 系列 SaaS 供应商在 IBM SmartCloud Enterprise 和 IBM SmartCloud Enterprise+ 公共云上架构和构建他们的解决方案。



Andrew Hoppe, Ph.D., 顾问软件工程师, IBM

Hoppe 博士是 IBM Enterprise Business Information Center of Excellence 的一名顾问软件工程师,负责领导 IBM 客户信息的面向对象的分析。他是由于 IBM 收购 Rational® 而进入 IBM 的,并带来了各个软件开发领域的 15 年的学术和 15 年的行业经验。他的兴趣包括面向对象的分析、设计和实现、软件开发方法和实践,以及 Web 技术,包括 SOA。他出版并在会议上发表了有关并发和 OO 编程等主题的出版物和演讲。



2014 年 1 月 23 日

IBM SmartCloud Enterprise+

SmartCloud Enterprise+(IBM 云计算产品之一)提供了一个企业级的基础架构即服务 (IaaS) 环境。IBM 使用自动化工具(包括 Tivoli® 自动化和监视工具)控制并全面管理 SmartCloud Enterprise+。它强大的安全性、可靠性和性能特征,使得 SmartCloud Enterprise+ 成为了托管 8 个 IBM 全球数据中心中的启用了云的遗留生产工作负载的理想选择。

IBM SmartCloud Enterprise+ 的用户可通过一个基于集成服务管理的 (ISM) 的 Web 门户来创建和管理虚拟资产。大部分门户功能都可以通过 API 进行使用。通过使用这些 API,您可以用一个程序来控制 SmartCloud Enterprise+ 资源的创建和维护。SmartCloud Enterprise+ 云解决方案可自动置备、扩展和重新配置。

SmartCloud Enterprise+ API 被实现为可在预定义的端点 URL 上获得的具象状态传输 (REST) 调用。(端点 URL 在 SmartCloud Enterprise+ 操作培训期间才能传达给 IBM 客户,所以本文的示例使用一个 endpoint_URL 占位符代替了实际的端点 URL。)这些 API 提供了 3 个主要功能:

  • 对 SmartCloud Enterprise+ 元数据和资源进行只读检查
  • 对管理性资源(用户、团队、项目和批准)进行管理
  • 对 SmartCloud Enterprise+ 虚拟服务器、补丁和快照进行管理

本文讨论所有 3 种类别中的 API 使用并提供了一些示例。我们的代码示例使用了 cURL 命令行实用程序,它支持您使用简单的 HTTP 命令来传输数据。我们还会演示每个 cURL 调用中的 REST 调用参数。

调用语法

SmartCloud Enterprise+ REST API 请求可在 HTTP 请求标头和正文中传递调用参数。对于消息正文中的请求传递参数,需要 Content-Type 标头元素,它的值为 application/xmlapplication/json。根据内容类型,在请求正文中,您应该放置一个包含所创建资源的所有属性的 XML 或 JavaScript 对象表示法 (JSON) 元素。您也可以使用 Accept 标头指定请求的响应格式(也为 application/xmlapplication/json)。

返回一个元素集合的 REST 查询(HTTP GET 请求)可能拥有额外的 URL 参数,用于指定查询的过滤条件(例如 GET baseURL/users?first_name=John)。同样地,GET 查询可请求排序或截断结果。有关的详细信息,请参阅 IBM SmartCloud Enterprise+ API Specifications 文档,您可以在 SmartCloud Enterprise+ 操作培训期间获得该文档。


查看、创建和维护 SmartCloud Enterprise+ 项目和服务器实例

接下来,我们将展示如何使用这些 API,以编程方式控制 SmartCloud Enterprise+ 项目和服务器实例的查看、创建和维护。

检索资源元数据

图 1 是 SmartCloud Enterprise+ 资源模型的结构图:

图 1. SmartCloud Enterprise+ 资源模型
IBM SmartCloud Enterprise+ 资源模型演示

在图 1 中,箭头表示资源之间的依赖关系,或者从一个资源到另一个资源的引用。在该模型中,您可以看到创建一个实例(SmartCloud Enterprise+ 服务器)需要哪些类型的资源。实例被绑定到了分组。一个分组 是一种抽象的资源分组,它在 SmartCloud Enterprise+ 中惟一的物理实现是一个项目。项目进而由包含用户的团队组成。必须首先创建团队、用户和分组,然后才能将实例与它们关联。

备注:在所有命令示例中,加粗的斜体字体表示(举例而言)除端点 URL 外,发出命令的用户必须提供的信息。另外,本文中的一些 cURL 代码示例包含换行符,提供它们是为了方便阅读;在运行这些命令前,请删除这些换行符。

此外,用户和实例必须与一定数量的现有 SmartCloud Enterprise+ 资源相关联,所以您必须提取这些资源的元数据。例如,用户需要一个角色,这是一个惟一的 SmartCloud Enterprise+ 资源。

一个 SmartCloud Enterprise+ 用户至多可以拥有两个角色。要获取用户的角色元数据,可以发出 REST GET 命令:

curl -k -X GET -u johntester@test.com:johnspasswd https://endpoint_URL/roles

对上面的命令的一个示例响应是:

<roles>
  <role>
    <id>53</id>
    <name>Administrator</name>
    <role_group>IaaS-User</role_group>
  </role>
  <role>
    <id>54</id>
    <name>Business Manager</name>
    <role_group>IaaS-User</role_group>
  </role>
</roles>

您也可以在浏览器中发出 REST GET 命令,因为浏览器默认情况下会发出 HTTP GET 请求。键入 REST 调用 URL:

https://endpoint_URL/roles

该浏览器随后会显示默认的 XML 格式响应。

创建用户

要创建一个用户,您必须指定:

  • 用户 ID(用户的电子邮件地址)
  • 显示名称
  • 名字
  • 姓氏
  • 角色引用列表
  • 语言
  • 区域

角色列表应是一个角色统一资源标识符 (URI) 的数组。REST 调用中的这些 URL 具有以下格式:/tag/id ,比如说,/roles/53 表示一个管理员角色。此示例展示了如何在 REST 请求中的 XML 数据元素中指定用户数据:

<user>
  <userid>billtester@test.com</userid>
  <name>Bill Tester</name>
  <first_name>Bill</first_name>
  <last_name>Tester</last_name>
  <roles>
    <role uri="/roles/53" />
   </roles>
  <language>EN</language>
  <locale>en_US</locale>
</user>

一个等效的 JSON 对象是:

{ "user":
  { "userid":"billtester@test.com",
    "name":"Bill Tester",
    "first_name":"Bill",
    "last_name":"Tester",
    "roles":[
        {"uri":"/roles/ro53"}],
    "language":"EN",
    "locale":"en_US"
  }
}

现在您可组合一个 cURL 命令来创建一个具有管理员角色的新用户。此命令使用了以下 XML:

curl -k -u johntester@test.com:johnspasswd -X POST -H "Content-Type:application/xml" -d 
"<user><userid>billtester@test.com</userid><name>Bill Tester</name><first_name>Bill
</first_name><last_name>Tester</last_name><roles><role uri=\"/roles/53\"/></roles>
<language>EN</language><locale>en_US</locale></user>" https://endpoint_URL/users

或者您可使用 JSON:

curl -k -u johntester@test.com:johnspasswd -X POST -H "ContentType:application/json" 
-d "{\"user\":{\"userid\":\"billtester@test.com \",\"name\":\"Bill Tester\",
\"first_name\":\"Bill\",\"last_name\": \"Tester\",\"roles\":[{\"uri\":\"/roles/53\"}],
\"language\":\"EN\",\"locale\":\"en_US\"}}" https://endpoint_URL/users

发出这些请求不会导致来自 SmartCloud Enterprise+ 的直接响应。相反,会启动创建用户的作业,而且请求用户会收到作业进度的电子邮件通知。

创建团队

创建所有参与用户后,您必须创建一个 SmartCloud Enterprise+ 团队。首先,您必须确定业务经理 (LOB) ID,该信息已在操作培训过程中提供:

curl -k -X GET -u johntester@test.com:johnspasswd https://endpoint_URL/lobs

出于我们示例的用途,假设该 ID 为 8888。接下来,创建一个空团队:

curl -k -u johntester@test.com:johnspasswd -X POST -H "Content-Type:application/xml" -d 
"<team><name>Test Team</name><description>Project XYZ Test Team</description><lob uri=
\"/lobs/8888\"/></team>" https://endpoint_URL/teams

最后,向这个空团队添加一个用户数组。在此示例中,团队 ID 为 9999,而用户 ID 为 100110021003

curl -k -u johntester@test.com:johnspasswd -X POST -H "Content-Type:application/xml" -d 
"<team><name>Test Team 1</name><description>Project XYZ Test Team</description><lob uri=
\"/lobs/8888\"/><users>[{\"uri\":\"/users/1001\"}{\"uri\":\"/users/1002\"}{\"uri\":\
"/users/1003\"}]</users></team>" https://endpoint_URL/teams/9999

创建项目

现在您已准备好创建 SmartCloud Enterprise+ 项目 — SmartCloud Enterprise+ 服务器必须关联到的管理单元。您可以通过创建一个分组来创建项目,分组是一个包含服务器实例的容器。在此示例中,团队 URL 被指定为名为 team 的选项的值:

curl -k -u johntester@test.com:johnspasswd -X POST -H "Content-Type:application/xml" -d 
"<group><name>Project XYZ</name><description>Project XYZ Description</description>
<options><option><name>team</name><value><team uri=\"/teams/9999\"/></value></option>
</options></group>" https://endpoint_URL/groups

创建服务器实例

您现在已准备好实例化 SmartCloud Enterprise+ 服务器。您可以发出 REST GET 命令来确定以下实体的 ID:

  • 虚拟机配置
  • 镜像
  • 项目(分组)
  • 安全性专区
  • 服务水平协议
  • 补丁计划类别

在这些 ID 可用后,您可以指定描述想要的实例的 XML(或 JSON)元素,然后将该元素放在一个 cURL 命令中来创建该实例:

curl -k -u johntester@test.com:johnspasswd -X POST -H "Content-Type:application/xml" -d 
"<instance><vm_configuration>/vm_configurations/2</vm_configuration><image uri=
\"/images/1033\"/><options><option><name>group</name><value><group uri=\"/groups/638\"/>
</value></option><option><name>security_zone</name><value><security_zone uri=
\"/security_zones/130\"/></value></option><option><name>sla</name><value><sla uri=
\"/slas/135\"/></value></option><option><name>patch_schedule_category</name><value>
<patch_schedule_category uri=\"/patch_schedule_categories/150\"/></value></option>
</options></instance>" https://endpoint_URL/instances

前面的 cURL 命令发起实例创建作业。您可以发出以下命令来查询作业状态:

curl -k -X GET -u johntester@test.com:johnspasswd https://endpoint_URL/jobs

前面的 jobs 命令的响应告诉您所有最近的 johntester 作业的状态。如果获得了一个特定作业的 ID,那么您可以在该命令中指定该 ID 来获取它的详细信息。在此示例中,假设作业 ID 为 1234:

curl -k -X GET -u johntester@test.com:johnspasswd https://endpoint_URL/jobs/1234

配置服务器实例

在实例正常运行后,您可以在允许的限制内更改它的配置。例如,您可以添加一个额外的磁盘。在此示例中,假设该实例拥有 ID 3456:

curl -k -u johntester@test.com:johnspasswd -X PUT -H "Content-Type:application/xml" -d 
"<instance><disks><disk><name>disk1</name><size>64</size><options><option>
<name>type</name><value>additional</value></option></options></disk></disks></instance>" 
https://endpoint_URL/instances/3456

删除一个实例

最后,在一个实例不再需要时(例如在测试完成后),您可使用此命令删除它:

curl -k -u johntester@test.com:johnspasswd -X DELETE  https:// endpoint_URL/3456

结束语

本文介绍了如何使用 SmartCloud Enterprise+ API 以编程方式执行一些 SmartCloud Enterprise+ 管理任务。

SmartCloud Enterprise+ API 的一些特征使得它们不同于其他 IBM 云产品,比如 SmartCloud Enterprise (SCE):

  • SmartCloud Enterprise+ API 的功能范围更加受限,原因在于 SmartCloud Enterprise+ 的托管特征,其中高度受控的云环境会阻碍一些用户操作。例如,当前的 SmartCloud Enterprise+ 版本中不存在私有镜像目录。
  • 创建和更新请求可能花几小时到几天,而不是几分钟,因为必须相应地创建或更新监视基础架构。要完成这些任务,需要创建 SmartCloud Enterprise+ 作业。发出 API 调用的用户会在其注册的电子邮件地址上收到电子邮件,通知他们作业的进度和完成情况。
  • 分配了客户管理员角色的用户发出的请求,可能需要用户的客户业务经理批准。具体来讲,导致额外的资源消耗(比如创建或修改虚拟服务器)的请求必须得到用户的客户业务经理的批准。

参考资料

学习

讨论

  • 加入 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=960646
ArticleTitle=以编程方式调用 IBM SmartCloud Enterprise+ 服务
publish-date=01232014