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: 验证结果

这里写图片描述

LoRA(Large-scale Reinforcement Learning from Image Pixels with Latent Actions)是一种用于微调大型模型的方法,它结合了强化学习和图像像素级别的训练。LoRA的目标是通过观察环境中的图像像素,并根据这些像素采取相应的行动来学习一个能够解决复杂任务的模型。 具体来说,LoRA使用了一个基于像素的强化学习框架,其中模型通过观察环境中的图像像素来学习如何采取最佳行动。这种方法的一个关键特点是,模型不需要任何先验知识或手工设计的特征,而是直接从原始像素数据中学习。 LoRA的训练过程包括两个阶段:预训练和微调。在预训练阶段,使用自编码器来学习图像的表示。自编码器是一种无监督学习方法,它通过将输入图像压缩成低维编码,然后再将编码解压缩为重构图像。通过这种方式,自编码器可以学习到图像的有用特征。 在微调阶段,使用强化学习算法(如Proximal Policy Optimization)来优化模型的策略。模型通过观察环境中的图像像素,并根据当前的状态选择最佳的行动。通过与环境进行交互并根据奖励信号进行反馈,模型逐渐优化其策略,以实现更好的性能。 LoRA的优势在于它能够处理高维度的原始输入数据,并且不需要手工设计的特征。通过使用像素级别的训练,LoRA可以学习到更丰富和复杂的特征表示,从而提高模型的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值