def sanitize_network_params(self): network_list = [] valid_state = ['new', 'present', 'absent'] if len(self.params['networks']) != 0: for network in self.params['networks']: if 'state' not in network or network['state'].lower() not in valid_state: self.module.fail_json(msg="Network adapter state not specified or invalid: '%s', valid values: " "%s" % (network.get('state', ''), valid_state)) # add new network adapter but no name specified if network['state'].lower() == 'new' and 'name' not in network and 'vlan' not in network: self.module.fail_json(msg="Please specify at least network name or VLAN name for adding new network adapter.") if network['state'].lower() == 'new' and 'mac' in network: self.module.fail_json(msg="networks.mac is used for vNIC reconfigure, but networks.state is set to 'new'.") if network['state'].lower() == 'present' and 'mac' not in network and 'label' not in network and 'device_type' not in network: self.module.fail_json(msg="Should specify 'mac', 'label' or 'device_type' parameter to reconfigure network adapter") if 'connected' in network: if not isinstance(network['connected'], bool): self.module.fail_json(msg="networks.connected parameter should be boolean.") if network['state'].lower() == 'new' and not network['connected']: network['start_connected'] = False if 'start_connected' in network: if not isinstance(network['start_connected'], bool): self.module.fail_json(msg="networks.start_connected parameter should be boolean.") if network['state'].lower() == 'new' and not network['start_connected']: network['connected'] = False # specified network does not exist if 'name' in network and not self.network_exists_by_name(network['name']): self.module.fail_json(msg="Network '%(name)s' does not exist." % network) elif 'vlan' in network: objects = get_all_objs(self.content, [vim.dvs.DistributedVirtualPortgroup]) dvps = [x for x in objects if to_text(get_parent_datacenter(x).name) == to_text(self.params['datacenter'])] for dvp in dvps: if hasattr(dvp.config.defaultPortConfig, 'vlan') and \ isinstance(dvp.config.defaultPortConfig.vlan.vlanId, int) and \ str(dvp.config.defaultPortConfig.vlan.vlanId) == str(network['vlan']): network['name'] = dvp.config.name break if 'dvswitch_name' in network and \ dvp.config.distributedVirtualSwitch.name == network['dvswitch_name'] and \ dvp.config.name == network['vlan']: network['name'] = dvp.config.name break if dvp.config.name == network['vlan']: network['name'] = dvp.config.name break else: self.module.fail_json(msg="VLAN '%(vlan)s' does not exist." % network) if 'device_type' in network and network['device_type'] not in list(self.nic_device_type.keys()): self.module.fail_json(msg="Device type specified '%s' is invalid. " "Valid types %s " % (network['device_type'], list(self.nic_device_type.keys()))) if ('mac' in network and not is_mac(network['mac'])) or \ ('manual_mac' in network and not is_mac(network['manual_mac'])): self.module.fail_json(msg="Device MAC address '%s' or manual set MAC address %s is invalid. " "Please provide correct MAC address." % (network['mac'], network['manual_mac'])) network_list.append(network) return network_list
def create_nic(self, device_type, device_label, device_infos): nic = vim.vm.device.VirtualDeviceSpec() nic_device = self.nic_device_type.get(device_type) nic.device = nic_device() nic.device.key = -randint(25000, 29999) nic.device.wakeOnLanEnabled = bool( device_infos.get('wake_on_lan', True)) nic.device.deviceInfo = vim.Description() nic.device.deviceInfo.label = device_label nic.device.deviceInfo.summary = device_infos['name'] nic.device.connectable = vim.vm.device.VirtualDevice.ConnectInfo() nic.device.connectable.startConnected = bool( device_infos.get('start_connected', True)) nic.device.connectable.allowGuestControl = bool( device_infos.get('allow_guest_control', True)) nic.device.connectable.connected = bool( device_infos.get('connected', True)) if device_type == 'sriov': pf_backing = device_infos.get('physical_function_backing', None) vf_backing = device_infos.get('virtual_function_backing', None) nic.device.allowGuestOSMtuChange = bool( device_infos.get('allow_gest_os_mtu_change', True)) nic.device.sriovBacking = vim.vm.device.VirtualSriovEthernetCard.SriovBackingInfo( ) if pf_backing is not None: nic.device.sriovBacking.physicalFunctionBacking = vim.vm.device.VirtualPCIPassthrough.DeviceBackingInfo( ) nic.device.sriovBacking.physicalFunctionBacking.id = pf_backing if vf_backing is not None: nic.device.sriovBacking.virtualFunctionBacking = vim.vm.device.VirtualPCIPassthrough.DeviceBackingInfo( ) nic.device.sriovBacking.virtualFunctionBacking.id = vf_backing if 'mac' in device_infos and is_mac(device_infos['mac']): nic.device.addressType = 'manual' nic.device.macAddress = device_infos['mac'] else: nic.device.addressType = 'generated' return nic
def create_nic(self, device_type, device_label, device_infos): nic = vim.vm.device.VirtualDeviceSpec() nic_device = self.nic_device_type.get(device_type) nic.device = nic_device() nic.device.key = -randint(25000, 29999) nic.device.wakeOnLanEnabled = bool( device_infos.get('wake_on_lan', True)) nic.device.deviceInfo = vim.Description() nic.device.deviceInfo.label = device_label nic.device.deviceInfo.summary = device_infos['name'] nic.device.connectable = vim.vm.device.VirtualDevice.ConnectInfo() nic.device.connectable.startConnected = bool( device_infos.get('start_connected', True)) nic.device.connectable.allowGuestControl = bool( device_infos.get('allow_guest_control', True)) nic.device.connectable.connected = bool( device_infos.get('connected', True)) if 'mac' in device_infos and is_mac(device_infos['mac']): nic.device.addressType = 'manual' nic.device.macAddress = device_infos['mac'] else: nic.device.addressType = 'generated' return nic
def test_is_valid_mac_addr(xenserver, mac_addr, result): """Tests against examples of valid and invalid mac addresses.""" assert is_mac(mac_addr) is result
def is_valid_mac(self): return is_mac(self.mac.lower())
def sanitize_network_params(self): network_list = [] valid_state = ["new", "present", "absent"] if len(self.params["networks"]) != 0: for network in self.params["networks"]: if ("state" not in network or network["state"].lower() not in valid_state): self.module.fail_json( msg= "Network adapter state not specified or invalid: '%s', valid values: " "%s" % (network.get("state", ""), valid_state)) # add new network adapter but no name specified if (network["state"].lower() == "new" and "name" not in network and "vlan" not in network): self.module.fail_json( msg= "Please specify at least network name or VLAN name for adding new network adapter." ) if network["state"].lower() == "new" and "mac" in network: self.module.fail_json( msg= "networks.mac is used for vNIC reconfigure, but networks.state is set to 'new'." ) if (network["state"].lower() == "present" and "mac" not in network and "label" not in network and "device_type" not in network): self.module.fail_json( msg= "Should specify 'mac', 'label' or 'device_type' parameter to reconfigure network adapter" ) if "connected" in network: if not isinstance(network["connected"], bool): self.module.fail_json( msg= "networks.connected parameter should be boolean.") if (network["state"].lower() == "new" and not network["connected"]): network["start_connected"] = False if "start_connected" in network: if not isinstance(network["start_connected"], bool): self.module.fail_json( msg= "networks.start_connected parameter should be boolean." ) if (network["state"].lower() == "new" and not network["start_connected"]): network["connected"] = False # specified network does not exist if "name" in network and not self.network_exists_by_name( network["name"]): self.module.fail_json( msg="Network '%(name)s' does not exist." % network) elif "vlan" in network: objects = get_all_objs( self.content, [vim.dvs.DistributedVirtualPortgroup]) dvps = [ x for x in objects if to_text(get_parent_datacenter(x).name) == to_text( self.params["datacenter"]) ] for dvp in dvps: if (hasattr(dvp.config.defaultPortConfig, "vlan") and isinstance( dvp.config.defaultPortConfig.vlan.vlanId, int) and str(dvp.config.defaultPortConfig.vlan.vlanId) == str(network["vlan"])): network["name"] = dvp.config.name break if ("dvswitch_name" in network and dvp.config.distributedVirtualSwitch.name == network["dvswitch_name"] and dvp.config.name == network["vlan"]): network["name"] = dvp.config.name break if dvp.config.name == network["vlan"]: network["name"] = dvp.config.name break else: self.module.fail_json( msg="VLAN '%(vlan)s' does not exist." % network) if "device_type" in network and network[ "device_type"] not in list( self.nic_device_type.keys()): self.module.fail_json( msg="Device type specified '%s' is invalid. " "Valid types %s " % ( network["device_type"], list(self.nic_device_type.keys()), )) if ("mac" in network and not is_mac(network["mac"])) or ( "manual_mac" in network and not is_mac(network["manual_mac"])): self.module.fail_json( msg= "Device MAC address '%s' or manual set MAC address %s is invalid. " "Please provide correct MAC address." % (network["mac"], network["manual_mac"])) network_list.append(network) return network_list