分享

Vmware SDK的使用(原创)

wuyufei 发表于 2015-11-29 15:13:30 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 0 25683
本帖最后由 wuyufei 于 2015-11-29 15:24 编辑
问题导读:

1.Vmware SDK简介
2.资料准备
3.Eclipse创建项目
4.Demo-clone虚拟机




Vmware SDK 简介
----------------------------------------------------------------------------------------------------------------------------
VMWare 为开发者提供了各种 SDK 以方便定制化管理 vSphere。这些 SDK 包括 vSphere Web Servicess SDK、vSphere Storage management SDK、CIM(Common Information Model)SDK、vSphere SDK for Perl、PowerCLI 等等。其中 vSphere Web Servicess SDK 是最常用的,它提供了针对 ESX/ESXi 以及 vCenter 的管理接口。目前最新的 vSphere Web Servicess SDK 版本为 6.0,可以向下兼容。vSphere Web Servicess SDK 提供了 Web Servicess 的 stub 文件,而且还包含了 Java 和 C# 的程序用例和很详细的 API 说明文档。所有的 SDK 相关材料均可从 VMWare官方网站上免费下载。
1.理解 vSphere API
vSphere API 以标准 Web Services 方式实现,遵守 Web Servicess Interoperability Organization (WS-I) Basic Profile 1.0 标准,即支持 XML schema 1.0、SOAP 1.1 以及 WSDL1.1。用户可以像调用普通 Web Services 那样调用 vSphere API 来访问位于 ESX/ESXi 以及 vCenter 中的组件和服务。vSphere API 提供了几乎所有的针对 ESX/ESXi 以及 vCenter 的管理接口,比如生命周期管理、虚拟机以及网络和存储等资源的管理和监控功能等。
使用 vSphere API 开发的客户端同 vSphere 服务器端组成了一个分布式的系统,它们之间使用异步通信方式进行同步。为了理解这个客户端 - 服务器端的结构,必须清楚以下三个概念:
  • Managed Object(MO,被管对象 ) 存在于服务器端(即 ESX/ESXi 以及 vCenter 中),代表了 vSphere 的服务(services)和组件(components)。服务包括 PropertyCollector, SearchIndex、PerformanceManager 和 ViewManager 等,组件包括 VirtualMachine、Datastore 和 Folder 等。
  • Managed Object Reference(MOR,被管对象引用 ) 存在于客户端,每一个 MOR 都指向服务器端的 MO。客户端程序可以引用 MOR 来调用服务器端 MO 的方法。在每一个 MO 的生命周期中,其 MOR 都是唯一的并且是持久化(persistent)的,这意味着其 MOR 在生命周期中都是不变的,比如即使重新启动 server,其 MOR 仍然不变。
  • Data Objects(数据对象)封装了 MO 的数据信息。客户端通过 Data Object 发送请求给服务器端,又从服务器端接受 Data Object 来得到 MO 的状态等。
下图摘自 vSphere Web Servicess SDK Programming Guide,它清楚的说明了这三种数据对象及 vSphere Sever 与 client 的关系。
图 2. vSphere Server and Client

image003.gif
在这三种数据对象中,MO 代表了服务器端的服务或组件,他们都直接或间接继承自 ManagedEntity 抽象类。下面的类图展示了目前 vSphere Infrastructure 中的 7 种最重要的 MO 类型和它们的继承关系,它们代表了 vSphere Infrastructure 中的 7 种组件或者实体。在 vSphere API Reference中,对所有的数据类型都有详细的介绍,用户可以查询每一个类的含义和用法。
图 3. ManagedEntity 及其子类

image004.gif
使用 SDK 开发自己的 vSphere 客户端程序,首要的问题就是如何访问和遍历在 vSphere Inventory 中的对象。下面我们将介绍这方面的内容。

2.VSphere Inventory 介绍
vSphere inventory 其实就是 vSphere datacenter 及其管理的对象。在 vSphere inventory 中包含了以下三种类型的对象:
  • 在 datacenter 中被管理的系统,比如 Host、VirtualMachine、VirtualApp 等。
  • 具有一定功能的组件,比如 ComputeResource、DataStore,、Network 等。
  • 负责组织归类的组件,它们负责把 datacenter 中的对象按照层级关系组织起来形成了一个树状结构,比如 Folder 和 DataCenter。
ESX/ESXi server 和 vCenter 的 inventory 结构是类似的,只是在 ESX server 中,有些对象的数量有限制,比如在一个 ESX server 的 inventory 中只能有一个 Host 实体。下面两张图出自 vSphere Web Servicess SDK Programming Guide,分别给出了 vCenter 这 ESX server 的 inventory 的结构。
图 4. vCenter Inventory 结构

image005.gif
图 5. ESX Server Inventory 结构

image006.gif
想要访问 vCenter 或者 ESX server 中的某个对象或者调用其方法,就必须首先根据这个对象在 inventory 中的位置找个这个对象。从上图可知,ServiceInstance 对象在 inventory 的结构树中处于根位置,因此遍历整个 inventory 或者要查找 inventory 中的某个对象,必须先从 ServiceInstance 开始。ServiceInstance 类中最重要的一个属性(property,可以理解为类的成员变量)是 content,它指向数据类型(Data Object)ServiceContent 的一个实例。ServiceContent 类含有很多该 vSphere 服务实例的重要属性和服务的引用,比如整个 inventory 的 root folder,session manager,property collector(用于查找和遍历对象),以及 EventManager, TaskManager 等。下面的类图展示了 ServiceInstance 和 ServiceContent 的部分属性。
图 6. ServiceInstance 和 ServiceContent

image007.gif
说白了,vmware给我们提供了一个包装好的API包,使用的一般过程如下:使用API连接到Vcenter--》获取对象的MOR---》更改对象MOR的属性---》调用方法更改对象---》获取完成状态




资料准备
----------------------------------------------------------------------------------------------------------------------------
在开始学习之前,需要准备几个资料,地址为 https://www.vmware.com/support/developer/vc-sdk/  
00f43a0c-5c09-4966-930c-09624e4d05a0.png
如下:
1、Developer's Setup Guide   这个是开发前的指导,包含环境的搭建等等,最好看看。
2、Programming Guide   这个是针对整个SDK内部原理、对象等的说明,有一些例子,这个要着重看。
3、VMware-vSphere-SDK-6.0.0-2561048.zip http://developercenter.vmware.com/web/sdk/60/web-client  这个是最重要的东西  SDK;

解压  VMware-vSphere-SDK-6.0.0-2561048.zip  文件,有两个重要的东西:

1、vsphere-ws\docs\ReferenceGuide 是SDK文档,打开里面的index.html 即可
2、vsphere-ws\java\JAXWS\lib\vim25.jar   这个是vmware给我们封装的SDK包,我们用的时候需要将这个添加到项目路径中。



用Eclipse创建项目

----------------------------------------------------------------------------------------------------------------------------
这里用Java 进行演示,解压SDK之后  在  vsphere-ws\java\JAXWS\samples 路径下是 SDK自带的一些例子,在eclispe中创建一个普通的Java项目,将sample下面的代码导入进入,会看到一些错误,这个时候将vsphere-ws\java\JAXWS\lib  下面相应的Jar包导入到  Build Path即可。


Demo Clone讲解

----------------------------------------------------------------------------------------------------------------------------
当你在eclipse中导入了代码之后  ,在  com\vmware\vm  下面即为sdk使用的一些例子,这里讲解一下VmClone.java

他这个程序原本是为 命令行 所编写的,大家读一下代码就知道了。程序通过模板克隆一台虚拟机。

程序使用了几个注解:
@Sample  表明该class是一个SDK的例子
@Option   映射为命令行中的参数
@Action   标识具体运行的方法


代码里面首先 有3个变量,都是从CMD传送过来的, dataCenterName  是数据中心的名字,vmPathName 是虚拟机在Inventory的路径,cloneName是克隆后虚拟机的名称。

直接看主方法:
33678abe-74a8-4dbf-aeb7-16e9bddd3a8c.png

这样就完成了虚拟机的Clone操作,很简单,自己走一遍就知道了。







没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条