Example #1
0
def add_dvPort_group(si, dv_switch, vlanId, name, bw):
	dv_pg_spec = vim.dvs.DistributedVirtualPortgroup.ConfigSpec()
	dv_pg_spec.name = name
	dv_pg_spec.numPorts = 32
	dv_pg_spec.type = vim.dvs.DistributedVirtualPortgroup.PortgroupType.earlyBinding
	policy = vim.dvs.DistributedVirtualPortgroup.PortgroupPolicy()
	policy.shapingOverrideAllowed = True
	dv_pg_spec.policy = policy

	dv_pg_spec.defaultPortConfig = vim.dvs.VmwareDistributedVirtualSwitch.VmwarePortConfigPolicy()
	dv_pg_spec.defaultPortConfig.securityPolicy = vim.dvs.VmwareDistributedVirtualSwitch.SecurityPolicy()

	if bw:
		inShapePolicy = vim.dvs.DistributedVirtualPort.TrafficShapingPolicy()
		inShapePolicy.enabled = vim.BoolPolicy(value=True)
		inShapePolicy.averageBandwidth = vim.LongPolicy(value=bw * 1000 * 1000)
		inShapePolicy.peakBandwidth = vim.LongPolicy(value=bw * 1000 * 1000)

		dv_pg_spec.defaultPortConfig.inShapingPolicy = inShapePolicy
		dv_pg_spec.defaultPortConfig.outShapingPolicy = inShapePolicy

	dv_pg_spec.defaultPortConfig.vlan = vim.dvs.VmwareDistributedVirtualSwitch.VlanIdSpec()
	dv_pg_spec.defaultPortConfig.vlan.vlanId = vlanId
	dv_pg_spec.defaultPortConfig.securityPolicy.allowPromiscuous = vim.BoolPolicy(value=False)
	dv_pg_spec.defaultPortConfig.securityPolicy.forgedTransmits = vim.BoolPolicy(value=False)        

	dv_pg_spec.defaultPortConfig.vlan.inherited = False
	dv_pg_spec.defaultPortConfig.securityPolicy.macChanges = vim.BoolPolicy(value=False)
	dv_pg_spec.defaultPortConfig.securityPolicy.inherited = False

	task = dv_switch.AddDVPortgroup_Task([dv_pg_spec])
	wait_for_task(task, si)
Example #2
0
 def test_serialize_integer(self):
     lp = vim.LongPolicy()
     lp.inherited = False
     lp.value = 100
     SoapAdapter.Serialize(lp, version='vim.version.version10')
Example #3
0
    def build_config(self):
        config = vim.dvs.DistributedVirtualPortgroup.ConfigSpec()

        # Basic config
        config.name = self.module.params['portgroup_name']

        config.numPorts = self.module.params['num_ports']

        # Default port config
        config.defaultPortConfig = vim.dvs.VmwareDistributedVirtualSwitch.VmwarePortConfigPolicy()
        if self.module.params['vlan_trunk']:
            config.defaultPortConfig.vlan = vim.dvs.VmwareDistributedVirtualSwitch.TrunkVlanSpec()
            config.defaultPortConfig.vlan.vlanId = list(map(lambda x: vim.NumericRange(start=x[0], end=x[1]), self.create_vlan_list()))
        elif self.module.params['vlan_private']:
            # Check that private VLAN exists in dvs
            if self.module.params['vlan_private']:
                pvlan_exists = self.check_dvs_pvlan()
                if not pvlan_exists:
                    self.module.fail_json(msg="No private vlan with id %s in distributed vSwitch %s"
                                          % (self.module.params['vlan_id'], self.module.params['switch_name']))

            config.defaultPortConfig.vlan = vim.dvs.VmwareDistributedVirtualSwitch.PvlanSpec()
            config.defaultPortConfig.vlan.pvlanId = int(self.module.params['vlan_id'])
        else:
            config.defaultPortConfig.vlan = vim.dvs.VmwareDistributedVirtualSwitch.VlanIdSpec()
            config.defaultPortConfig.vlan.vlanId = int(self.module.params['vlan_id'])

        config.defaultPortConfig.vlan.inherited = False

        # If the dvSwitch supports MAC learning, it's a version where securityPolicy is deprecated
        if dvs_supports_mac_learning(self.dv_switch):
            config.defaultPortConfig.macManagementPolicy = vim.dvs.VmwareDistributedVirtualSwitch.MacManagementPolicy()
            config.defaultPortConfig.macManagementPolicy.allowPromiscuous = self.module.params['network_policy']['promiscuous']
            config.defaultPortConfig.macManagementPolicy.forgedTransmits = self.module.params['network_policy']['forged_transmits']
            config.defaultPortConfig.macManagementPolicy.macChanges = self.module.params['network_policy']['mac_changes']

            macLearning = self.module.params['mac_learning']
            if macLearning:
                macLearningPolicy = vim.dvs.VmwareDistributedVirtualSwitch.MacLearningPolicy()
                if macLearning['allow_unicast_flooding'] is not None:
                    macLearningPolicy.allowUnicastFlooding = macLearning['allow_unicast_flooding']
                if macLearning['enabled'] is not None:
                    macLearningPolicy.enabled = macLearning['enabled']
                if macLearning['limit'] is not None:
                    macLearningPolicy.limit = macLearning['limit']
                if macLearning['limit_policy']:
                    macLearningPolicy.limitPolicy = macLearning['limit_policy']
                config.defaultPortConfig.macManagementPolicy.macLearningPolicy = macLearningPolicy
        else:
            config.defaultPortConfig.securityPolicy = vim.dvs.VmwareDistributedVirtualSwitch.SecurityPolicy()
            config.defaultPortConfig.securityPolicy.allowPromiscuous = vim.BoolPolicy(value=self.module.params['network_policy']['promiscuous'])
            config.defaultPortConfig.securityPolicy.forgedTransmits = vim.BoolPolicy(value=self.module.params['network_policy']['forged_transmits'])
            config.defaultPortConfig.securityPolicy.macChanges = vim.BoolPolicy(value=self.module.params['network_policy']['mac_changes'])

        # Teaming Policy
        teamingPolicy = vim.dvs.VmwareDistributedVirtualSwitch.UplinkPortTeamingPolicy()
        teamingPolicy.policy = vim.StringPolicy(value=self.module.params['teaming_policy']['load_balance_policy'])
        if self.module.params['teaming_policy']['inbound_policy'] is not None:
            teamingPolicy.reversePolicy = vim.BoolPolicy(value=self.module.params['teaming_policy']['inbound_policy'])
        teamingPolicy.notifySwitches = vim.BoolPolicy(value=self.module.params['teaming_policy']['notify_switches'])
        teamingPolicy.rollingOrder = vim.BoolPolicy(value=self.module.params['teaming_policy']['rolling_order'])

        if self.module.params['teaming_policy']['active_uplinks'] or self.module.params['teaming_policy']['standby_uplinks']:
            teamingPolicy.uplinkPortOrder = vim.dvs.VmwareDistributedVirtualSwitch.UplinkPortOrderPolicy()
            if self.module.params['teaming_policy']['active_uplinks']:
                teamingPolicy.uplinkPortOrder.activeUplinkPort = self.module.params['teaming_policy']['active_uplinks']
            if self.module.params['teaming_policy']['standby_uplinks']:
                teamingPolicy.uplinkPortOrder.standbyUplinkPort = self.module.params['teaming_policy']['standby_uplinks']

        config.defaultPortConfig.uplinkTeamingPolicy = teamingPolicy

        # PG policy (advanced_policy)
        config.policy = vim.dvs.VmwareDistributedVirtualSwitch.VMwarePortgroupPolicy()
        config.policy.blockOverrideAllowed = self.module.params['port_policy']['block_override']
        config.policy.ipfixOverrideAllowed = self.module.params['port_policy']['ipfix_override']
        config.policy.livePortMovingAllowed = self.module.params['port_policy']['live_port_move']
        config.policy.networkResourcePoolOverrideAllowed = self.module.params['port_policy']['network_rp_override']
        config.policy.portConfigResetAtDisconnect = self.module.params['port_policy']['port_config_reset_at_disconnect']
        config.policy.securityPolicyOverrideAllowed = self.module.params['port_policy']['security_override']
        config.policy.shapingOverrideAllowed = self.module.params['port_policy']['shaping_override']
        config.policy.trafficFilterOverrideAllowed = self.module.params['port_policy']['traffic_filter_override']
        config.policy.uplinkTeamingOverrideAllowed = self.module.params['port_policy']['uplink_teaming_override']
        config.policy.vendorConfigOverrideAllowed = self.module.params['port_policy']['vendor_config_override']
        config.policy.vlanOverrideAllowed = self.module.params['port_policy']['vlan_override']

        # NetFlow
        config.defaultPortConfig.ipfixEnabled = vim.BoolPolicy()
        if self.module.params['net_flow']:
            config.defaultPortConfig.ipfixEnabled.inherited = False
            config.defaultPortConfig.ipfixEnabled.value = self.module.params['net_flow']
        else:
            config.defaultPortConfig.ipfixEnabled.inherited = True

        # Ingress traffic shaping
        config.defaultPortConfig.inShapingPolicy = vim.dvs.DistributedVirtualPort.TrafficShapingPolicy()
        config.defaultPortConfig.inShapingPolicy.averageBandwidth = vim.LongPolicy()
        config.defaultPortConfig.inShapingPolicy.burstSize = vim.LongPolicy()
        config.defaultPortConfig.inShapingPolicy.peakBandwidth = vim.LongPolicy()
        config.defaultPortConfig.inShapingPolicy.enabled = vim.BoolPolicy()

        if self.module.params['in_traffic_shaping']:
            config.defaultPortConfig.inShapingPolicy.inherited = False

            # enabled
            config.defaultPortConfig.inShapingPolicy.enabled.inherited = False
            config.defaultPortConfig.inShapingPolicy.enabled.value = self.module.params['in_traffic_shaping']['enabled']

            # adverage bandwidth
            config.defaultPortConfig.inShapingPolicy.averageBandwidth.inherited = False
            config.defaultPortConfig.inShapingPolicy.averageBandwidth.value = self.module.params['in_traffic_shaping']['average_bandwidth'] * 1000

            # burst size
            config.defaultPortConfig.inShapingPolicy.burstSize.inherited = False
            config.defaultPortConfig.inShapingPolicy.burstSize.value = self.module.params['in_traffic_shaping']['burst_size'] * 1024

            # peak bandwidth
            config.defaultPortConfig.inShapingPolicy.peakBandwidth.inherited = False
            config.defaultPortConfig.inShapingPolicy.peakBandwidth.value = self.module.params['in_traffic_shaping']['peak_bandwidth'] * 1000
        else:
            config.defaultPortConfig.inShapingPolicy.inherited = True
            config.defaultPortConfig.inShapingPolicy.enabled.inherited = True
            config.defaultPortConfig.inShapingPolicy.averageBandwidth.inherited = True
            config.defaultPortConfig.inShapingPolicy.burstSize.inherited = True
            config.defaultPortConfig.inShapingPolicy.peakBandwidth.inherited = True

        # Egress traffic shaping
        config.defaultPortConfig.outShapingPolicy = vim.dvs.DistributedVirtualPort.TrafficShapingPolicy()
        config.defaultPortConfig.outShapingPolicy.averageBandwidth = vim.LongPolicy()
        config.defaultPortConfig.outShapingPolicy.burstSize = vim.LongPolicy()
        config.defaultPortConfig.outShapingPolicy.peakBandwidth = vim.LongPolicy()
        config.defaultPortConfig.outShapingPolicy.enabled = vim.BoolPolicy()

        if self.module.params['out_traffic_shaping']:
            config.defaultPortConfig.outShapingPolicy.inherited = False

            # enabled
            config.defaultPortConfig.outShapingPolicy.enabled.inherited = False
            config.defaultPortConfig.outShapingPolicy.enabled.value = self.module.params['out_traffic_shaping']['enabled']

            # adverage bandwidth
            config.defaultPortConfig.outShapingPolicy.averageBandwidth.inherited = False
            config.defaultPortConfig.outShapingPolicy.averageBandwidth.value = self.module.params['out_traffic_shaping']['average_bandwidth'] * 1000

            # burst size
            config.defaultPortConfig.outShapingPolicy.burstSize.inherited = False
            config.defaultPortConfig.outShapingPolicy.burstSize.value = self.module.params['out_traffic_shaping']['burst_size'] * 1024

            # peak bandwidth
            config.defaultPortConfig.outShapingPolicy.peakBandwidth.inherited = False
            config.defaultPortConfig.outShapingPolicy.peakBandwidth.value = self.module.params['out_traffic_shaping']['peak_bandwidth'] * 1000
        else:
            config.defaultPortConfig.outShapingPolicy.inherited = True
            config.defaultPortConfig.outShapingPolicy.enabled.inherited = True
            config.defaultPortConfig.outShapingPolicy.averageBandwidth.inherited = True
            config.defaultPortConfig.outShapingPolicy.burstSize.inherited = True
            config.defaultPortConfig.outShapingPolicy.peakBandwidth.inherited = True

        # PG Type
        if self.module.params['port_binding'] == 'ephemeral':
            config.type = 'ephemeral'
        else:
            config.type = 'earlyBinding'

        if self.port_allocation == 'elastic':
            config.autoExpand = True
        else:
            config.autoExpand = False

        return config
def doUpdatePort(dpg, vm, vnic_device):
    outputstr = 'Try to update mac address:\n'
    outputstr += 'Current mac address: %s \n'%(vnic_device.macAddress)
    outputstr += 'New mac address: %s \n'%(NEW_MAC_ADDRESS)
    vnic_spec = vim.vm.device.VirtualDeviceSpec()
    vnic_spec.operation = vim.vm.device.VirtualDeviceSpec.Operation.edit
    vnic_spec.device = vnic_device
    vnic_spec.device.key = vnic_device.key
    vnic_spec.device.macAddress = NEW_MAC_ADDRESS
    vnic_spec.device.backing = vnic_device.backing
    vnic_spec.device.backing.port = vnic_device.backing.port
    vnic_spec.device.wakeOnLanEnabled = vnic_device.wakeOnLanEnabled
    vnic_spec.device.connectable = vnic_device.connectable
    dev_changes = []
    dev_changes.append(vnic_spec)
    vm_spec = vim.vm.ConfigSpec()
    vm_spec.deviceChange = dev_changes
    
    # CHANGE vm.config.networkShaper NOT WORK, SO REMOVE IT!!!
    # outputstr += 'Try to update shaping policy:\n'
    # newShaping = vim.vm.NetworkShaperInfo()
    # newShaping.enabled = (SHAPING_ENABLE=='true')
    # newShaping.peakBps = SHAPING_PEAK_BPS
    # newShaping.averageBps = SHAPING_AVERAGE_BPS
    # newShaping.burstSize = 0
    # vm_spec.networkShaper = newShaping
    # curShaping = vm.config.networkShaper
    # if curShaping != None:
    #     outputstr += 'Current shaping policy: enabled:%s,peakBps:%s,averageBps:%s'%(curShaping.enabled,curShaping.peakBps,curShaping.averageBps)
    # outputstr += 'New shaping policy: enabled:%s,peakBps:%s,averageBps:%s'%(newShaping.enabled,newShaping.peakBps,newShaping.averageBps)
    
    vm_task = vm.ReconfigVM_Task(vm_spec)
    state = WaitForTask(task=vm_task, si=serviceInstance, onProgressUpdate=OnTaskProgressUpdate)
    outputstr += 'ReconfigVM Task completed, state: %s \n\n'%(state)

    
    outputstr += 'Try to update shaping policy:\n'
    dvs = dpg.config.distributedVirtualSwitch
    portCriteria = vim.dvs.PortCriteria()
    portCriteria.portKey = [vnic_device.backing.port.portKey]
    dvPorts = dvs.FetchDVPorts(portCriteria)
    ciShapping = dvPorts[0].config.setting.inShapingPolicy 
    coShapping = dvPorts[0].config.setting.outShapingPolicy 
    if ciShapping!=None:
        outputstr += 'Current in shaping policy: enabled:%s,averageBps:%s,peakBps:%s\n'% \
        (ciShapping.enabled.value,ciShapping.averageBandwidth.value,ciShapping.peakBandwidth.value)
    if coShapping!=None:
        outputstr += 'Current out shaping policy: enabled:%s,averageBps:%s,peakBps:%s\n'% \
        (coShapping.enabled.value,coShapping.averageBandwidth.value,coShapping.peakBandwidth.value)
    outputstr += 'New in shaping policy: enabled:%s,averageBps:%s,peakBps:%s\n'%(IN_SHAPING_ENABLE,IN_SHAPING_AVERAGE_BPS,IN_SHAPING_PEAK_BPS)
    outputstr += 'New out shaping policy: enabled:%s,averageBps:%s,peakBps:%s\n'%(OUT_SHAPING_ENABLE,OUT_SHAPING_AVERAGE_BPS,OUT_SHAPING_PEAK_BPS)
    port_spec = vim.dvs.DistributedVirtualPort.ConfigSpec()
    port_spec.operation = vim.ConfigSpecOperation.edit
    port_spec.key = vnic_device.backing.port.portKey
    port_setting = vim.dvs.DistributedVirtualPort.Setting()
    port_inshaping = vim.dvs.DistributedVirtualPort.TrafficShapingPolicy()
    port_outshaping = vim.dvs.DistributedVirtualPort.TrafficShapingPolicy()
    port_inshaping.enabled = vim.BoolPolicy(value=(IN_SHAPING_ENABLE=='true'))
    port_inshaping.averageBandwidth = vim.LongPolicy(value=IN_SHAPING_AVERAGE_BPS)
    port_inshaping.peakBandwidth = vim.LongPolicy(value=IN_SHAPING_PEAK_BPS)
    port_outshaping.enabled = vim.BoolPolicy(value=(OUT_SHAPING_ENABLE=='true'))
    port_outshaping.averageBandwidth = vim.LongPolicy(value=OUT_SHAPING_AVERAGE_BPS)
    port_outshaping.peakBandwidth = vim.LongPolicy(value=OUT_SHAPING_PEAK_BPS)
    port_setting.inShapingPolicy = port_inshaping
    port_setting.outShapingPolicy = port_outshaping
    port_spec.setting = port_setting
    port_task = dvs.ReconfigureDVPort_Task([port_spec])
    state2 = WaitForTask(task=port_task, si=serviceInstance, onProgressUpdate=OnTaskProgressUpdate)
    outputstr += 'ReconfigDVPort Task completed, state: %s \n'%(state2)

    output(outputstr)