【vmware sdk】002、基础概念

​ 官方的《vSphere Web Services Programming Guide》确实是最好的学习资料,不论从概念介绍还是由浅入深的层次,所以以下内容的主要内容也是从这本书搬运而来,额外添加些自己的理解,方便不喜欢全英的同学看看。

client-server基础架构

下图是对架构的举例说明,其中看到的VirtualMachine managed object是managed object的一个例子,GuestInfo data object是data object的例子。

在这里插入图片描述

主要概念说明:

1、managed object(受管对象):就如同linux系统中把所有资源都当做文件一样,vsphere中所有的资源都可以叫做managed object,比如datacenter、virtualmachine、network等。受管对象也可以类比为编程中的class实例化后的对象,同样,受管对象主要包含属性和方法。

2、data objects(数据对象): 类似于C++中的结构(struct),就是复杂的数据类型集合,也可以理解为class实例化后的对象,只是,数据对象只有数据,没有方法。

3、managed object reference(MOR)(受管对象引用): 是存在于客户端的对服务端受管对象的引用。客户端通过对这个引用进行一些操作,从而实现对服务器端受管对象的动作。

架构说明:

1、vsphere server端天然存在(安装好ESXi或者vcenter就有)了很多managed object和data object,这些对象按照一定的目录树(在vsphere中叫inventory,ESXi和vcenter中的目录会稍有差异)组织。

2、client端通过创建server端受管对象的引用建立起对受管对象的关联。

3、client端的受管对象引用可以获取受管对象的属性,其中很多以data object的结构存在,client获取后会在本地保留副本,client如果想修改受管对象的属性,也是先修改本地副本,最后以task调用的方式,将本地副本传送给服务端,就能实现对服务端受管对象的修改。比如修改一个virtual machine新增一块disk。

4、查看所有的managed object、data object可以通过API文档进行检索。

在这里插入图片描述

managed object清单(inventory)目录

在vcenter架构中的虚拟化中,有很多资源类的定义,比如说物理主机(ComputeResource)、虚拟机(VirtualMachine)、磁盘存储(DataStore)、网络(Network)、数据中心逻辑概念(Datacenter)等。

这些资源类下的资源在sdk的世界中都是不同的managed object,这些资源在sdk的世界中的层次结构就是下面要说的清单目录----inventory,就如同linux中文件系统有/boot、/tmp、/home目录一样。

下图是vcenter架构下的目录结构组织图:

在这里插入图片描述

清单说明:

1、首先是ServiceInstance,这是开始访问vsphere服务端的起点,这个后续再详细说明。

2、Folder(目录)也属于一种受管对象类,属于逻辑分类范畴,比如把virtualMachine和VirtualApp放在同一个目录下。

3、这张图中Floder似乎是一样的,但打开对象查看,发现每个Floder都是有类别名称的,比如ServiceInstance下级的Folder叫rootFolder,ComputeResource上级的叫hostFolder,VM上层的叫vmFolder,Network上层的叫NetworkFolder,DataStore上层的叫datastoreFolder。

父子层级关系追溯方法:

1、每个受管对象都有一个parent属性,标识上层受管对象是谁。

2、在Folder受管对象下,有childEntity属性,为子对象组成的列表。

3、在某些对象类型下固定有几类Folder,比如ServiceInstance下有rootFolder,在datacenter下固定有hostFolder、vmFolder、networkFolder、datastoreFolder。

在这里插入图片描述

清单遍历的起点

从上面两张图可以看出,ServiceInstance是所有清单遍历操作的起点。

客户端通过sdk提供的connect方法,提供服务地址(IP)、服务端口(port)、用户名、密码等信息就可以连接到vsphere获取到serviceInstance。

ServiceInstance通过调用ServiceInstance.RetrieveContent方法可以获取到ServiceContent.

serviceContent就提供了所有的受管对象遍历。

清单遍历实例代码

下面是一段基于python3的演示代码,可以通过断点调试协助理解整个清单层次。

from pyVim import connect
from pyVmomi import vim
import atexit

# 获取service instance
service_instance = connect.SmartConnectNoSSL(host="127.0.0.1",
                                             user="user",
                                             pwd="password",
                                             port=443)
# 退出执行销毁
atexit.register(connect.Disconnect, service_instance)
# 获取service content
content = service_instance.RetrieveContent()
# 获取指定类型的 managed object
objview = content.viewManager.CreateContainerView(content.rootFolder, [vim.Folder], True)
"""
总结的受管对象种类有:
VirtualMachine
Datacenter
Folder
Datastore
Network
HostSystem
ResourcePool
ComputeResource
"""
# 打印本级受管对象名和父级受管对象名
folder_info = {}
for vm in objview.view:
    if vm.parent.name not in folder_info.keys():
        folder_info[vm.parent.name] = [vm.name, ]
    else:
        folder_info[vm.parent.name].append(vm.name)

print (folder_info)

比如在以上代码content行打上断点,步进一步后,查看service content对象,级联查找如下:

rootFolder---->childEntity---->Datacneter---->datastoreFolder—>childEntity------>datastore受管对象。

在这里插入图片描述

最后

以上关于inventory的介绍都是基于vcenter架构的,如果你没有连vcenter,直接连ESXi,则目录结构会稍有不同,具体可以查看开发手册,但是基础概念都是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值