def _get_networks_xml(self): networks = "" params = {'type': 'network', 'model': self.info['nic_model']} for nw in self.info['networks']: params['network'] = nw networks += get_iface_xml(params, self.info['arch'], self.info['os_distro'], self.info['os_version']) return unicode(networks, 'utf-8')
def _get_networks_xml(self): networks = "" params = {"type": "network", "model": self.info["nic_model"]} info_networks = self.info.get("networks", []) for nw in info_networks: params["network"] = nw networks += get_iface_xml(params, self.info["arch"], self.info["os_distro"], self.info["os_version"]) return unicode(networks, "utf-8")
def create(self, vm, params): conn = self.conn.get() networks = conn.listNetworks() + conn.listDefinedNetworks() networks = map(lambda x: x.decode('utf-8'), networks) if params['type'] == 'network': network = params.get("network") if network is None: raise MissingParameter('KCHVMIF0007E') if network not in networks: raise InvalidParameter('KCHVMIF0002E', { 'name': vm, 'network': network }) macs = (iface.mac.get('address') for iface in self.get_vmifaces(vm, self.conn)) # user defined customized mac address if 'mac' in params and params['mac']: # make sure it is unique if params['mac'] in macs: raise InvalidParameter('KCHVMIF0009E', { 'name': vm, 'mac': params['mac'] }) # otherwise choose a random mac address else: while True: params['mac'] = VMIfacesModel.random_mac() if params['mac'] not in macs: break dom = VMModel.get_vm(vm, self.conn) os_data = VMModel.vm_get_os_metadata(dom) os_version, os_distro = os_data xml = get_iface_xml(params, conn.getInfo()[0], os_distro, os_version) flags = 0 if dom.isPersistent(): flags |= libvirt.VIR_DOMAIN_AFFECT_CONFIG if DOM_STATE_MAP[dom.info()[0]] != "shutoff": flags |= libvirt.VIR_DOMAIN_AFFECT_LIVE dom.attachDeviceFlags(xml, flags) return params['mac']
def _create_linux_bridge(self, interface): # get xml definition of interface iface_xml = self._get_interface_desc_xml(interface) # interface not defined in libvirt: try to define it iface_defined = False conn = self.conn.get() if iface_xml is None: try: mac = knetwork.get_dev_macaddr(str(interface)) iface_xml = get_iface_xml({"type": "ethernet", "name": interface, "mac": mac, "startmode": "onboot"}) conn.interfaceDefineXML(iface_xml.encode("utf-8")) iface_defined = True except libvirt.libvirtError, e: raise OperationFailed("KCHNET0024E", {"name": interface, "err": e.get_error_message()})
def _get_networks_xml(self): networks = '' params = {'type': 'network', 'model': self.info['nic_model']} info_networks = self.info.get('networks', []) for nw in info_networks: params['network'] = nw networks += get_iface_xml( params, self.info['arch'], self.info['os_distro'], self.info['os_version'], ) return networks
def _get_interfaces_xml(self): interfaces = "" params = {"model": self.info["nic_model"]} for interface in self.info.get("interfaces", []): typ = interface["type"] if typ == "macvtap": params["type"] = "direct" params["mode"] = interface.get("mode", None) elif typ == "ovs": params["type"] = "bridge" params["virtualport_type"] = "openvswitch" params["name"] = interface["name"] interfaces += get_iface_xml(params, self.info["arch"], self.info["os_distro"], self.info["os_version"]) return unicode(interfaces, "utf-8")
def create(self, vm, params): conn = self.conn.get() networks = conn.listNetworks() + conn.listDefinedNetworks() networks = map(lambda x: x.decode('utf-8'), networks) if params['type'] == 'network': network = params.get("network") if network is None: raise MissingParameter('KCHVMIF0007E') if network not in networks: raise InvalidParameter('KCHVMIF0002E', {'name': vm, 'network': network}) macs = (iface.mac.get('address') for iface in self.get_vmifaces(vm, self.conn)) # user defined customized mac address if 'mac' in params and params['mac']: # make sure it is unique if params['mac'] in macs: raise InvalidParameter('KCHVMIF0009E', {'name': vm, 'mac': params['mac']}) # otherwise choose a random mac address else: while True: params['mac'] = VMIfacesModel.random_mac() if params['mac'] not in macs: break dom = VMModel.get_vm(vm, self.conn) os_data = VMModel.vm_get_os_metadata(dom) os_version, os_distro = os_data xml = get_iface_xml(params, conn.getInfo()[0], os_distro, os_version) flags = 0 if dom.isPersistent(): flags |= libvirt.VIR_DOMAIN_AFFECT_CONFIG if DOM_STATE_MAP[dom.info()[0]] != "shutoff": flags |= libvirt.VIR_DOMAIN_AFFECT_LIVE dom.attachDeviceFlags(xml, flags) return params['mac']
def _get_interfaces_xml(self): interfaces = "" params = {'model': self.info['nic_model']} for interface in self.info.get('interfaces', []): typ = interface['type'] if typ == 'macvtap': params['type'] = 'direct' params['mode'] = interface.get('mode', None) elif typ == 'ovs': params['type'] = 'bridge' params['virtualport_type'] = 'openvswitch' params['name'] = interface['name'] interfaces += get_iface_xml(params, self.info['arch'], self.info['os_distro'], self.info['os_version']) return unicode(interfaces, 'utf-8')
def _create_linux_bridge(self, interface): # get xml definition of interface iface_xml = self._get_interface_desc_xml(interface) # interface not defined in libvirt: try to define it iface_defined = False conn = self.conn.get() if iface_xml is None: try: mac = knetwork.get_dev_macaddr(str(interface)) iface_xml = get_iface_xml({'type': 'ethernet', 'name': interface, 'mac': mac, 'startmode': "onboot"}) conn.interfaceDefineXML(iface_xml.encode("utf-8")) iface_defined = True except libvirt.libvirtError, e: raise OperationFailed("KCHNET0024E", {'name': interface, 'err': e.get_error_message()})
def _create_linux_bridge(self, interface): # get xml definition of interface iface_xml = self._get_interface_desc_xml(interface) # interface not defined in libvirt: try to define it iface_defined = False conn = self.conn.get() if iface_xml is None: try: mac = netinfo.get_dev_macaddr(str(interface)) iface_xml = get_iface_xml({'type': 'ethernet', 'name': interface, 'mac': mac, 'startmode': "onboot"}) conn.interfaceDefineXML(iface_xml.encode("utf-8")) iface_defined = True except libvirt.libvirtError, e: raise OperationFailed("KCHNET0024E", {'name': interface, 'err': e.get_error_message()})
def _get_interfaces_xml(self): interfaces = '' params = {'model': self.info['nic_model']} for interface in self.info.get('interfaces', []): typ = interface['type'] if typ == 'macvtap': params['type'] = 'direct' params['mode'] = interface.get('mode', None) elif typ == 'ovs': params['type'] = 'bridge' params['virtualport_type'] = 'openvswitch' params['name'] = interface['name'] interfaces += get_iface_xml( params, self.info['arch'], self.info['os_distro'], self.info['os_version'], ) return interfaces
def _create_linux_bridge(self, interface): # get xml definition of interface iface_xml = self._get_interface_desc_xml(interface) # interface not defined in libvirt: try to define it iface_defined = False conn = self.conn.get() if iface_xml is None: try: mac = netinfo.get_dev_macaddr(str(interface)) iface_xml = get_iface_xml( { 'type': 'ethernet', 'name': interface, 'mac': mac, 'startmode': 'onboot', } ) conn.interfaceDefineXML(iface_xml) iface_defined = True except libvirt.libvirtError as e: raise OperationFailed( 'KCHNET0024E', {'name': interface, 'err': e.get_error_message()} ) # Truncate the interface name if it exceeds 13 characters to make sure # the length of bridge name is less than 15 (its maximum value). br_name = KIMCHI_BRIDGE_PREFIX + interface[-13:] br_xml = create_linux_bridge_xml(br_name, interface, iface_xml) # drop network config from interface iface_defined or self._redefine_iface_no_network(interface, iface_xml) # create and start bridge self._create_bridge(br_name, br_xml) return br_name
def _create_linux_bridge(self, interface): # get xml definition of interface iface_xml = self._get_interface_desc_xml(interface) # interface not defined in libvirt: try to define it iface_defined = False conn = self.conn.get() if iface_xml is None: try: mac = netinfo.get_dev_macaddr(str(interface)) iface_xml = get_iface_xml({ 'type': 'ethernet', 'name': interface, 'mac': mac, 'startmode': 'onboot', }) conn.interfaceDefineXML(iface_xml) iface_defined = True except libvirt.libvirtError as e: raise OperationFailed('KCHNET0024E', { 'name': interface, 'err': e.get_error_message() }) # Truncate the interface name if it exceeds 13 characters to make sure # the length of bridge name is less than 15 (its maximum value). br_name = KIMCHI_BRIDGE_PREFIX + interface[-13:] br_xml = create_linux_bridge_xml(br_name, interface, iface_xml) # drop network config from interface iface_defined or self._redefine_iface_no_network(interface, iface_xml) # create and start bridge self._create_bridge(br_name, br_xml) return br_name
def create(self, vm, params): conn = self.conn.get() if params['type'] == 'network': network = params.get("network") if network is None: raise MissingParameter('KCHVMIF0007E') networks = conn.listNetworks() + conn.listDefinedNetworks() networks = map(lambda x: x.decode('utf-8'), networks) if network not in networks: raise InvalidParameter('KCHVMIF0002E', {'name': vm, 'network': network}) # For architecture other than s390x/s390 type ovs/macvtap # and source interface are not supported. if os.uname()[4] not in ['s390x', 's390']: if params['type'] in ['ovs', 'macvtap']: raise InvalidParameter('KCHVMIF0012E') if params.get('source'): raise InvalidParameter('KCHVMIF0013E') # For s390x/s390 architecture if os.uname()[4] in ['s390x', 's390']: params['name'] = params.get("source", None) # For type ovs and mavtap, source interface has to be provided. if params['name'] is None and params['type'] in ['ovs', 'macvtap']: raise InvalidParameter('KCHVMIF0015E') # If source interface provided, only type supported are ovs # and mavtap. if params['name'] is not None and \ params['type'] not in ['ovs', 'macvtap']: raise InvalidParameter('KCHVMIF0014E') # FIXME: Validation if source interface exists. if params['type'] == 'macvtap': params['type'] = 'direct' params['mode'] = params.get('mode', None) elif params['type'] == 'ovs': params['type'] = 'bridge' params['virtualport_type'] = 'openvswitch' macs = (iface.mac.get('address') for iface in self.get_vmifaces(vm, self.conn)) # user defined customized mac address if 'mac' in params and params['mac']: # make sure it is unique if params['mac'] in macs: raise InvalidParameter('KCHVMIF0009E', {'name': vm, 'mac': params['mac']}) # otherwise choose a random mac address else: while True: params['mac'] = VMIfacesModel.random_mac() if params['mac'] not in macs: break dom = VMModel.get_vm(vm, self.conn) os_data = VMModel.vm_get_os_metadata(dom) os_version, os_distro = os_data xml = get_iface_xml(params, conn.getInfo()[0], os_distro, os_version) flags = 0 if dom.isPersistent(): flags |= libvirt.VIR_DOMAIN_AFFECT_CONFIG if DOM_STATE_MAP[dom.info()[0]] != "shutoff": flags |= libvirt.VIR_DOMAIN_AFFECT_LIVE dom.attachDeviceFlags(xml, flags) return params['mac']