Openstack_通用模块_Oslo_vmware 创建 vSS PortGroup
目录
vSS & vSSPG
vSS(Standard vSwitch 标准交换机) 为在同一 ESXi/ESX 或不同 ESXi/ESX 上 VirtualMachine 之间的连接, 也可以让 VirtualMachine 连接到外部网络.
vSSPG(Standard vSwitch PortGroup 标准交换机端口组) 是 vSphere 的基本网络对象模型, VirtualMachine 会通过一个 PortGroup 来访问网络.
使用 oslo.vmware 模块结合 vSphere API 来创建 vSSPG 是一个相对综合的调用过程, 在实现的过程中能让我们理解 vSphere SDK 定义的相关概念模型, 以及熟悉 VMware vSphere API Reference Docs.
vSphere SDK 中相关的网络对象
vSphere Web Services SDK 包括下列对象和方法来管理网络配置:
HostNetworkSystem(Managed Object): 代表了主机的网路配置, 拥有检索和改变网络配置的方法. 所以我们能够使用 HostNetworkSystem MO 对象来访问和控制 ESX/ESXi 的网络概念模型.
HostNetworkConfig(Data Object): 用于规划 ESXi Host 详细的网络配置.
创建 vSS PortGroup
首先我们已经知道创建标准交换机端口组需要使用 HostNetowrkSystem MO 的 AddPortGroup 方法, 所以调用该方法的前提就是能够获取到HostNetowrkSystem MO. 但遗憾的是我们无法通过 oslo.vmware 模块提供的 get_objects invoke_api 来直接获取, 这就需要我们费些心思去找到其上级且可使用 get_objects invoke_api 来获取的 MO.
NOTE: 下述多数截图出自于 VMware vSphere API Reference Docs.
从下图可知 HostNetworkSystem MO 的上级 Property 是 HostConfigManager, 那么我们首先进入到 HostConfigManager 的 Docs.
然后从下图可知 HostConfigManager 是一个 Data object, 我们仍无法通过 get_object invoke_api 的方式来获取这个对象, 所以继续进入 HostConfigManager 对象的上级 Property.
直到现在我们看到了非常熟悉的 HostSystem MO, 这是一个非常常用的 MO, 并且支持 get_object invoke_api 的获取方式, 所以从 HostSystem 开始, 我们就能够其属性, 直到得到 HostNetowrkSystem MO 为止.
- Step 1: 连接到 vCenter 或 ESXi/ESX
from oslo_vmware import api
from oslo_vmware import vim_util
# Create the vmware session
session = api.VMwareAPISession(
'200.21.102.7',
'root',
'vmware',
1,
0.1)
- Step 2: 获取 HostSystem MO
hosts = session.invoke_api(
vim_util,
'get_objects',
session.vim,
'HostSystem',
100)
# 我们随意选取一个 ESXi Host, 并且打印其 Object
host_obj = hosts.objects[0].obj
In [17]: hosts.objects[0].obj
Out[17]:
(obj){
value = "host-10"
_type = "HostSystem"
}
- Step 3: 从下图可以看出 HostSystem 的 Properties configManager 就是 HostConfigManager 对象, HostConfigManager 的 Properties networkSystem 就是 HostNetworkSystem 对象.
(HostSystem ==> HostConfigManager)
(HostConfigManager ==> HostNetworkSystem)
# 获取 HostNetworkSystem MO, 并打印其 Value
host_network_system_val = session.invoke_api(
vim_util,
'get_object_properties_dict',
session.vim,
host_obj,
'configManager.networkSystem')
In [24]: host_network_system_val
Out[24]:
{configManager.networkSystem: (val){
value = "networkSystem-10"
_type = "HostNetworkSystem"
}}
- Step 4: 在得到了 host_network_system_val 对象之后, 我们就能够通过
session.invoke_api来调用该对象的 AddPortGroup 方法了. 但仍有一个前提, 就是我们需要为 AddPortGroup 准备好需要传入的实参 portgrp(HostPortGroupSpec).
再如下图, 我们得知 HostPortGroupSpec 是一个 Data Object, 所以我们能够通过 session.vim.client.factory.create 方法来获取该对象的数据结构.
# 获取 HostPortGroupSpec 对象的数据结构, 并打印
client_factory = session.vim.client.factory
vswitch_port_group_spec = client_factory.create('ns0:HostPortGroupSpec')
In [26]: vswitch_port_group_spec
Out[26]:
(HostPortGroupSpec){
dynamicType = None
dynamicProperty[] = <empty>
name = None
vlanId = None
vswitchName = None
policy =
(HostNetworkPolicy){
dynamicType = None
dynamicProperty[] = <empty>
security =
(HostNetworkSecurityPolicy){
dynamicType = None
dynamicProperty[] = <empty>
allowPromiscuous = None
macChanges = None
forgedTransmits = None
}
nicTeaming =
(HostNicTeamingPolicy){
dynamicType = None
dynamicProperty[] = <empty>
policy = None
reversePolicy = None
notifySwitches = None
rollingOrder = None
failureCriteria =
(HostNicFailureCriteria){
dynamicType = None
dynamicProperty[] = <empty>
checkSpeed = None
speed = None
checkDuplex = None
fullDuplex = None
checkErrorPercent = None
percentage = None
checkBeacon = None
}
nicOrder =
(HostNicOrderPolicy){
dynamicType = None
dynamicProperty[] = <empty>
activeNic[] = <empty>
standbyNic[] = <empty>
}
}
offloadPolicy =
(HostNetOffloadCapabilities){
dynamicType = None
dynamicProperty[] = <empty>
csumOffload = None
tcpSegmentation = None
zeroCopyXmit = None
}
shapingPolicy =
(HostNetworkTrafficShapingPolicy){
dynamicType = None
dynamicProperty[] = <empty>
enabled = None
averageBandwidth = None
peakBandwidth = None
burstSize = None
}
}
}
- Step 5: 通过设置 HostPortGroupSpec 的项目值来达到设置 PortGroup 属性的目的
一般我们需要关注的项目值在 Docs 中都有明确的指示:
# 其中 policy 项的值有必须是一个 HostNetworkPolicy Data Object
# 所以我们需要使用与获取 HostPortGroupSpec 相同的方式来获取 HostNetworkPolicy 对象的数据结构.
policy = client_factory.create('ns0:HostNetworkPolicy')
nicteaming = client_factory.create('ns0:HostNicTeamingPolicy')
nicteaming.notifySwitches = True
policy.nicTeaming = nicteaming
port_group_name = 'fanguiju-test'
vswitch_name = 'vSwitch0'
vlan_id = '0'
vswitch_port_group_spec.policy = policy
vswitch_port_group_spec.name = port_group_name
vswitch_port_group_spec.vswitchName = vswitch_name
vswitch_port_group_spec.vlanId = int(vlan_id)
直到现在, 我们终于准备好了 AddPortGroup 方法的实参, 接下来就能够调用这个方法实现标准交换机端口组的创建.
- Step 6: 调用 AddPortGroup 方法
session.invoke_api(session.vim,
'AddPortGroup',
host_network_system_val['configManager.networkSystem'],
portgrp=vswitch_port_group_spec)
# session.invoke_api() 的使用方法:
# - 第二个参数是我们要调用的目标方法: AddPortGroup
# - 第三个参数是我们要调用的目标方法 AddPortGroup 的属主 MO: HostNetowrkSystem
# - 第四个~第 n 个参数是传递给目标方法 AddPortGroup 的实参
- Step 7: 验证结果
Openstack_通用模块_Oslo_vmware 创建 vSS PortGroup的更多相关文章
- Openstack_通用模块_Oslo_vmware 创建/删除 vCenter 虚拟机
目录 目录 oslovmware Connect to vCenter Server Create VirtualMachine for vCenter 常用的虚拟机配置项 删除虚拟机 oslo.vm ...
- Openstack_通用模块_Oslo_vmware 创建 vCenter 虚拟机快照
创建虚拟机快照 vSphere Create Snapshot 文档 Snapshot 是虚拟机磁盘文件(VMDK)在某个点及时的复本.包含了虚拟机所有虚拟磁盘上的数据状态和这个虚拟机的电源状态(on ...
- Idea多模块工程创建——继承、聚合
一.工程介绍 淘淘网上商城是一个综合性的B2C平台,类似京东商城.天猫商城.会员可以在商城浏览商品.下订单,以及参加各种活动. 管理员.运营可以在平台后台管理系统中管理商品.订单.会员等. 客服可以在 ...
- python web自动化测试框架搭建(功能&接口)——通用模块
1.通用模块: config.conf: 公共配置文件,配置报告.日志.截图路径,以及邮件相关配置 [report] reportpath = E:\workspace\WebAutomation\s ...
- CMD规范(通用模块定义规范)(翻译)
最近在使用sea.js.大家知道sea.js遵循CMD规范.该规范的英文说明很简洁,我试着翻译了一下,旨在交流. Common Module Definition 通用模块定义规范 This spec ...
- Drupal8开发教程:模块开发——创建新页面
之前我们已经通过<Drupal8开发教程:认识.info.yml文件>对模块的YAML文件有了了解,今天我们来看如何通过模块开发的方式添加一个新的页面. 在 Drupal 7 中,通过模块 ...
- VB 核心编程及通用模块开发 笔记1
前言:学习任何编程语言.编程工具的目的不外乎解决生活问题,能够快速.高效解决问题的方式就是不错的方式,至于选择什么“工具”,众位看官看着办,本人虽然有过3年vb开发经验,但是一直没有深入学习,现已购买 ...
- 从头开始编写一个Orchard网上商店模块(6) - 创建购物车服务和控制器
原文地址: http://skywalkersoftwaredevelopment.net/blog/writing-an-orchard-webshop-module-from-scratch-pa ...
- Winform通用模块之流水号生成
打算接下来的时间里把自己觉得用起来还比较好用的通用模块,在这里向大家介绍一下,如果你有更好的想法时,也希望你不吝指点. 1.数据库表及存储过程 在介绍这个通用流水号生成的模块前,我们先来看一下其相关的 ...
随机推荐
- Linux之RedHat7如何更换yum源
目前,我们常见的系统大概就是Windows.Linux和Mac OS了.Windows系统应该是大部分人最早开始接触的系统,毕竟Windows系统使用起来相当方便,只需要点点鼠标,外加会简单的打字,一 ...
- 微软推出全新的Windows终端应用程序
微软正推出一款名为Windows Terminal的新命令行应用程序.它被设计为访问PowerShell,cmd.exe和Windows子系统Linux(WSL)等环境的中心位置.微软正在为想要调整终 ...
- dedecms织梦无法保存栏目内容的解决方法
最近使用DedeCms5.3和DedeCms5.5遇到了一个不可思议的问题:在添加栏目时IE内核的浏览器无法保存栏目内容.到网上搜索了半天没找到解决方法,查看DedeCms官方搜索到的结果是“栏目内容 ...
- php目录函数操作,以及使用递归
opendir 找到对应的目录 将目录中所有文件全部读入到内存(包含子文件夹下的所有文件) 将目录指针指向第一个文件 readdir 读取当前指针所指向的文件的文件名 2.将目录指针向下移动一位 ch ...
- Python 字符串Ⅱ
Python 字符串格式化 Python 支持格式化字符串的输出 .尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中. 在 Python 中,字符 ...
- k8s-dashboard搭建
一,简单搭建,未使用ssl证书,可载谷歌浏览器访问 1,拉取镜像 docker pull gcrxio/kubernetes-dashboard-amd64:v1.10.1 docker tag gc ...
- 把数据存储到 XML 文件
通常,我们在数据库中存储数据.不过,如果希望数据的可移植性更强,我们可以把数据存储 XML 文件中. 创建并保存 XML 文件 如果数据要被传送到非 Windows 平台上的应用程序,那么把数据保存在 ...
- 【java工具类】生成Zip压缩包
多文件生成压缩包,返回压缩包生成位置的路径. FileUtil.java /** * 文件打压缩包 * @param files * @param Name * @return * @throws E ...
- 51 Nod 1678 lyk与gcd(容斥原理)
1678 lyk与gcd 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 这天,lyk又和gcd杠上了. 它拥有一个n个数的数列,它想实现两种操作 ...
- sqli-labs(30)
0X01 观摩源码 和29关没区别 只是这里闭合变成了“ 0X02构造语句 爆库名 ?id=&id=-"union select 1,database(),3%23 0X03组合拳打 ...