Exemple #1
0
 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')
Exemple #2
0
 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')
Exemple #3
0
    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")
Exemple #4
0
    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']
Exemple #5
0
    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()})
Exemple #6
0
    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
Exemple #7
0
    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")
Exemple #8
0
    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
Exemple #9
0
    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']
Exemple #10
0
    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')
Exemple #11
0
    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()})
Exemple #12
0
    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()})
Exemple #13
0
    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
Exemple #14
0
    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
Exemple #15
0
    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
Exemple #16
0
    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']