通过 VMControl REST API 创建虚拟服务器

定制虚拟磁盘和网络

在 IBM Hardware Management Console (HMC) 上创建逻辑分区通常是一项耗时的任务,当然也需要一定水平的 PowerVM 技术技能。通过在 HMC 和 VMControl Representation State Transfer (REST) Web 服务调用上使用远程命令执行,您将能够以编程方式创建分配虚拟资源的逻辑分区,实现简化的虚拟化管理。

Jose Moises, 技术顾问, IBM

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



2012 年 2 月 13 日

概述

IBM Systems Director 提供了一组可使用的接口,可以通过具有 HTTP 客户端库的任何语言(比如 Java、Perl、C# 等)访问它们。这些接口是基于 Representational State Transfer (REST) 客户端/服务器架构的 Web 服务,每个 Web 服务被看作是 IBM Systems Director 内的一个资源。每个资源都有一个相关的特定 URI。资源 URI、HTTP 方法、可能的查询参数,以及发送给 IBM Systems Director 服务器的 HTTP 请求体决定要访问的服务(也称为 REST API)和该服务需要采取的操作。

VMControl 是一个高级管理器,它支持 IBM Systems Director 中的 REST Web 服务。在撰写本文之时,VMControl 的最新版本是 2.3.1,遗憾的是对在创建虚拟服务器期间创建磁盘存储有一些限制。使用 VMControl REST Web 服务以编程方式创建虚拟磁盘或逻辑卷在版本 2.3.1 中不受支持,不过对此不便有一种解决方案:通过在 Hardware Management Console (HMC) 上使用远程命令执行来创建虚拟磁盘,通过 VMControl REST Web 服务添加虚拟磁盘和网络。

在 HMC 上启用远程命令执行

Command Line Interface (CLI) 提供一种简单的方法来执行简单或复杂的任务,您可以在脚本上使用 HMC 命令来自动化常见系统管理任务。为了在 HMC 上启用和配置远程命令执行,请使用这个 HMC 命令行 wiki

一旦配置好远程命令行,您将能够从您的 ssh 客户端运行 HMC 命令。清单 1 显示如何运行 Virtual I/O Server (VIOS) 命令。VIOS 命令稍后将用于创建存储池和逻辑卷。

清单 1. 清单 1. HCM 远程命令行的使用
$ssh hscroot@<hmc_host> viosvrcmd -m <POWER_System> 
    -p <vios_name> -c '"<vios_command>"'

其中:
<hmc_host> 是 HMC 主机名或 IP 地址
<Power_System> 是 POWER System 名称,例如 Server-9117-MMA-SN10ED68E
<vios_name> 是在您的 POWER 系统中运行的 VIOS 名称
<vios_command> 是您希望在 VIOS 中运行的命令

如果命令包含参数,在 VIOS 命令周围写上 ' 字符很重要,否则您会收到以下类似错误:
"An invalid parameter was entered. The parameters -virtual are not valid. Please check your entry and retry the command."

创建存储池

逻辑卷存储池是一个或多个物理卷的集合。要创建存储池,请务必满足以下要求:

  • Hardware Management Console 必须是版本 7 发行版 3.4.2 或更高版本。
  • Virtual I/O Server 必须是版本 2.1.1.0 或更高版本。
  • 确保 Hardware Management Console 与 Virtual I/O Server 之间有一个资源监控和控制连接。

要创建一个基于卷组的存储池,首先您需要知道您的系统中哪些物理卷未分配。要获取未分配物理卷的列表,您可以使用如清单 2 中所示的 VMControl REST API。

清单 2. 清单 2. 用于获取自定义值的 VMControl REST API
VMControl/hosts/{hostOID}/virtualServers/customization

该 API 将向您展示在特定主机上创建新虚拟服务器时可用的所有自定义属性。要找到您的主机 Object ID (OID),您可以使用如清单 3 中所示的 API。

清单 3. 清单 3. 用于获取可用主机的 VMControl REST API
VMControl/hosts/

当您在如清单 2 中所示的 API 上提交一个 GET 操作时,会在 diskphysicalvolumes 属性中显示一个可用物理卷列表,如图 1 所示。

图 1. 图 1. 主机系统中可用的物理卷
主机系统中可用的物理卷

您需要为每个物理卷指定的值是其 id 和尺寸,尺寸在 property 对象内。在决定要使用哪个物理卷之后,您可以从您的 REST 客户端应用程序上在您的 HMC 上远程执行一个命令,以创建您的存储池。清单 4 显示您可以远程执行的 VIOS 命令。

清单 4. 清单 4. 远程创建一个存储池
$ssh hscroot@<hmc_host> viosvrcmd -m <host_system> 
    -p <vios_name> -c '"mksp -f <storage_pool_name> 
    <physical_disk>"'

请注意,在物理卷 id 中仅包含名称,而不要包含文本 ":vios"。

创建逻辑卷

逻辑卷在 VMControl 中将显示为一个虚拟磁盘,一旦存储池可用,您就可以创建您需要的任意数量的磁盘。您可以使用清单 5 中的命令来远程创建您的虚拟磁盘。

清单 5. 清单 5. 远程创建一个虚拟磁盘
$ssh hscroot@<hmc_host> viosvrcmd -m <host_system> 
    -p <vios_name> -c '"mklv -lv <disk_name> 
    <storage_pool_name> <size>"'

VMControl 的可视虚拟资源

为了将存储池和虚拟磁盘作为资源添加到 IBM Systems Director 中,您可以提交一个清单收集作业,以您的 POWER 系统主机作为目标。清单 9 中所示的 API 用于提交一个 POST 请求来创建库存作业:

清单 6. 清单 6. 库存收集作业 API
resources/{ObjectType}/{OID}/inventoryprofiles/{ProfileID}/inventory/jobs

其中:

{ObjectType} = Server
{OID} = Server's object ID
{ProfileID} = Inventory profile ID,您可以使用默认的 All inventory,ID:default.All

清单 6 中与 API 使用的请求负载如清单 7 所示:

清单 7. 清单 7. 库存收集作业负载
{
  "DisplayName": "My inventory collection job",
}

您可以使用 IBM Systems Director 中可用的 Java Messaging Service (JMS) 提供程序,也就是 Apache ActiveMQ,来验证库存收集作业的进度和状态。IBM Systems Director 使用该提供程序来与感兴趣的客户端应用程序传达事件和其他重要消息。JMS 概述和示例在 IBM Systems Management SDK 中有提供。基本上,您需要让您的客户端订阅 Director.jobs.activation 主题,并验证作业进度和状态。

可以创建一个新的 JMS 主题订阅来监听事件,并了解存储池和虚拟磁盘等新资源是否在 IBM Systems Director 内可用。您需要使用的主题是 Director.manageableelementservice.manageableelement,向 IBM Systems Director 添加新的可管理元素时收到的消息属性如清单 8 中所示。

清单 8. 清单 8. 可管理的元素事件属性样例
properties = {EventType=CREATED_EVENT, OID=91256, 
ObjectType=StorageVolume, Version=1.0.0}

ObjectType 属性的值表示新添加的资源的类型。对于存储池,ObjectType 被设置为 StoragePool。对于 VIOS 分区中作为逻辑卷创建的虚拟磁盘,ObjectType 被设置为 StorageVolume

在无任何错误地完成库存收集作业并添加了可管理元素之后,您可以使用清单 2 中相同的 VMControl REST API 核实新资源对于 IBM Systems Director 中的 VMControl 是可见的。图 2 显示 disks 属性中显示的虚拟磁盘集。

图 2. 图 2. 主机系统中可用的虚拟磁盘
主机系统中可用的虚拟磁盘

在每个虚拟磁盘 property 对象内,您可以找到其他信息,比如 Size (MB),存储池和存储服务器。在本例中存储服务器是一个 VIOS。虚拟磁盘 id 值用于将磁盘分配给新的虚拟服务器。

创建新的虚拟服务器

清单 9. 清单 9. 用于创建虚拟服务器的 VMControl REST API
/VMControl/hosts/{hostOID}/virtualServers

POST 请求需要一个 JSON 对象负载,其中由您指定虚拟服务器设置,如 IBM Systems Director VMControl SDK 中所述。

清单 10 显示指定以下设置的 JSON 负载的一个示例:

  • 虚拟服务器类型,值设为 IBM Power - AIXLINUX
  • 虚拟服务器名称,值设为 vserver
  • Cpu 模式,值设为 SHARED
  • CPU 数量,值设为 2
  • 内存大小,值设为 2048
  • 内存单元大小,值为 MB
  • 磁盘,值设为 vmdisk1:rootvg_vm:vios;vmdisk2:rootvg_vm:vios。这表示 vmdisk1vmdisk2 都将被分配给虚拟服务器。
  • 网络,值设为 1。这表示标识符为 1 的 VLAN 会被分配给一个虚拟以太网适配器。
  • 网络,值设为 80。这表示标识符为 80 的 VLAN 会被分配给一个虚拟以太网适配器。
清单 10. 清单 10. 用于创建虚拟服务器的 JSON 样例请求
{
   "virtualServer":{
      "properties":[
	     {
            "name":"gos", "value":"IBM Power - AIXLINUX"
         },
		 {
            "name":"name", "value":"vserver"
         },
		 {
            "name":"cpumode", "value":"SHARED"           
         },
		 {
             "name":"cpushared", "value":2
         },
		 {
            "name":"memsize", "value":2048
         },
		 {
            "name":"memunitsize", "value":"MB"
         },
		 {
            "name":"disks", "value":"vmdisk1:rootvg_vm:vios;vmdisk2:rootvg_vm:vios"
         },
		 {
            "name":"networks", "value":"1"
         },
		 {
            "name":"networks", "value":"80"
         }

      ]
   }
}

图 3 显示提交给清单 9 中 API 的一个请求,这是在 Poster FireFox 插件上执行的。Poster 有助于直接与 REST API 交互,并检查响应消息体和状态。您可以在无需编写任何代码的情况下提交 REST API 支持的任何请求操作,不过您可以使用具有 HTTP 客户端库的编程语言(比如 Java)提交相同类型的请求。

图 3. 图 3. 使用 VMControl REST API 创建虚拟服务器
使用 VMControl REST API 创建虚拟服务器

注意,在提交请求时会创建一个作业激活,告诉您 Create Virtual Server 任务的状态和进度。如果一切顺利的话,您将能够在 VMControl 中看到新的虚拟服务器。要验证任务状态,您可以向清单 11 中所示的 API 提交一个 GET 请求。

清单 11. 清单 11. 作业激活状态 REST API
jobs/{jobID}/activations/{activationID}

在本例中替换来自 create virtual server 请求的响应的给定值,也就是 jobID = 36 且 activationID = 12。如果将作业激活状态设置为 Complete 且将 Progress 设置为 100,那么您将能够看到如图 4 中所示的消息。

图 4. 图 4. 作业激活细节
作业激活细节

图 4 显示进度级别达到 50% 时的消息,即 "DNZVMP509I Create Virtual Server request completed successfully for host, Server-9117-MMA-SN10ED68E. Systems Director might not display the new virtual server immediately. It might take a few minutes for the new virtual server to be displayed."。当作业激活完成时,您将看到像这样的一条消息: “Server-{host_name} client job status changed to "Complete".

再次建议使用 JMS 来使用因作业更新或创建、删除或更改可管理元素时生成的消息。在本例中,创建的新虚拟服务器是一个可管理元素。

以编程方式创建虚拟服务器

您可以从 IBM Systems Management SDK 站点获取几个有关如何调用 IBM Systems Director REST API 的典型示例的源代码。清单 12 显示一个有关如何提交 POST 请求来创建虚拟服务器的 Java 代码样例。

清单 12. 清单 12. 用于调用 VMControl REST API 的 Java 样例代码
1)public String ceateVirtualServer(){
2)		String METHODNAME = "ceateVirtualServer";
3)		String requestPayload = "your JSON payload from Listing 10 goes here"; 

4)      String uri = sdc.getConnectionContextURI() + 
                "/VMControl/hosts/48098/virtualServers";		
5)		RESTUtilities.log(Level.INFO, logger, CLASSNAME, METHODNAME, 
		"requestPayload: " + requestPayload);
6)	RESTUtilities.log(Level.INFO, logger, CLASSNAME, METHODNAME, 
        "(POST) URI to invoke: " + uri);        
7)        try{
8)        	HttpsURLConnection dataConnection = sdc.processRequest(uri, 
        	"POST", requestPayload);
9)            int rc = dataConnection.getResponseCode();
10)            if (rc != 201) {
11)             RESTUtilities.log(Level.SEVERE, logger, CLASSNAME, METHODNAME, 
                "FAIL: Unexpected return code: Expected 201 but got " + rc);
12)              return "-1";
13)         }
14)         String response = RESTUtilities.getResponseString(dataConnection);
15)     }catch(Exception e){
16)	    	e.printStackTrace();
17)     }		
18)	return "0";
19)	}

清单 12 的第 14 行将提供给您验证所创建作业激活的状态和进度所需的 URL,方式与我们在图 3 中获取该响应的方式一样。

验证虚拟服务器配置

通过遵循以下步骤,我们可以验证虚拟服务器设置被正确保存在 IBM Systems Director 中:

  1. 转至 System Configuration > VMControl > Virtual Servers and Hosts
  2. 选择您的新虚拟服务器,并从上下文菜单(右键单击)中选择 System Configuration > Edit Virtual Server,然后选择 Virtual Disk,确保选中已分配的虚拟磁盘,如图 5 所示。
  3. 选择 Network,确保显示已分配的网络,如图 6 所示。

图 5 显示分配给虚拟服务器的虚拟磁盘。

图 5. 图 5. 分配给虚拟服务器的虚拟磁盘
分配给虚拟服务器的虚拟磁盘

正如您在图 5 中所看到的,通过 HMC 在 VIOS 分区上远程创建的虚拟磁盘被正确分配给虚拟服务器,所有其他未分配的虚拟磁盘会显示在这里。

在创建虚拟服务器之后,VMCotrol 自动在您的 VIOS 分区中分配一个虚拟 SCSI 适配器,无需重启。

图 6 显示分配给虚拟服务器的网络。这些网络是先前在 VIOS 分区中创建的,VIOS 分区管理虚拟服务器的硬件资源。

图 6. 图 6. 分配给虚拟服务器的网络
分配给虚拟服务器的网络

图 6 显示具有惟一 id 的两个网络,这个 id 值表示用于虚拟服务器之间进行通信的内部 Virtual LAN (VLAN) 标识符。

从 REST 客户端调用 HMC 命令

本文给出通过使用 VMControl REST API 创建虚拟服务器的一个快速指南,您可以从您的 REST 客户端应用程序调用您的脚本来远程运行 HMC 命令(参见 “创建存储池” 和 “创建逻辑卷”)。例如,如果您在使用 Java 代码,且您的客户端运行于 Linux/Unix 之上,那么您可以调用 HMC 脚本,如清单 13 所示。

清单 13. 清单 13. 用于调用系统命令的 Java 样例代码
1) String s = null;
        try {
2) Process p = 
   Runtime.getRuntime().exec("ssh hscroot@myhmc.austin.ibm.com viosvrcmd" +
     		" -m Server-9117-MMA-SN10ED68E -p myvios" +
     		" -c '\"mklv -lv vmdisk2 rootvg_vm 10G\"'");
            
3)        BufferedReader stdInput = new BufferedReader(new 
        InputStreamReader(p.getInputStream()));

4)        BufferedReader stdError = new BufferedReader(new 
        InputStreamReader(p.getErrorStream()));
        // read the output from the command
5)        System.out.println("Here is the standard output of the command:\n");
6)        while ((s = stdInput.readLine()) != null) {
7)             System.out.println(s);
8)        }            
        // read any errors from the attempted command
9)        System.out.println("Here is the standard error of the command (if any):\n");
10)        while ((s = stdError.readLine()) != null) {
11)            System.out.println(s);
12)        }            
13)           System.exit(0);
14)        }
15)  catch (IOException e) {
16)       System.out.println("exception happened - here's what I know: ");
17)       e.printStackTrace();
18)       System.exit(-1);
19) }

结束语

VMControl REST API(版本 2.3.1)或 IBM Systems Director CLI(版本 6.2.1)中均不支持指定磁盘大小,尽管未来的 VMControl 版本可能会对此有所改进。您可以使用本文中的指导来创建存储池和虚拟磁盘,同时创建您的虚拟服务器。重要的是,您可以只给虚拟服务器分配完整的磁盘大小,而且您可以遵循相同的流程来分配物理磁盘,在这种情况下,您只需要从清单 2 中 REST API 的响应中获取物理磁盘 id 值即可。

参考资料

学习

  • 要了解有关 IBM System Hardware 的更多信息,请参见 Systems Hardware 信息中心
  • 要了解有关 JSON 的更多信息,请参见 JSON 简介
  • IBM Systems Director SDK:了解有关 IBM Systems Director Software Development Kit (SDK) 的更多信息,其中提供文档、界面和样例,开发人员可以使用这些信息来在其自己的应用程序中利用 IBM Systems Director。
  • developerWorks 的 SOA 和 Web Service 专区,您将找到关于 Web 服务和 SOA 服务的文章、教程、标准和其他技术资源。

获得产品和技术

讨论

  • IBM Systems Director 论坛:发表您的 IBM System Director 问题和评论,并与其他用户分享您的想法、观点和解决方案。
  • 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。
  • 加入 IBM 软件下载与技术交流群组,参与在线交流。

条评论

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=SOA and web services
ArticleID=793258
ArticleTitle=通过 VMControl REST API 创建虚拟服务器
publish-date=02132012