Esempio n. 1
0
    def delete(self, vmid, dev_name):
        dom = VMModel.get_vm(vmid, self.conn)
        xmlstr = dom.XMLDesc(0)
        root = objectify.fromstring(xmlstr)

        try:
            hostdev = root.devices.hostdev
        except AttributeError:
            raise NotFoundError('KCHVMHDEV0001E', {
                'vmid': vmid,
                'dev_name': dev_name
            })

        devsmodel = VMHostDevsModel(conn=self.conn)
        pci_devs = [(devsmodel._deduce_dev_name(e), e) for e in hostdev
                    if e.attrib['type'] == 'pci']

        for e in hostdev:
            if devsmodel._deduce_dev_name(e) == dev_name:
                xmlstr = etree.tostring(e)
                dom.detachDeviceFlags(xmlstr,
                                      get_vm_config_flag(dom, mode='all'))
                if e.attrib['type'] == 'pci':
                    self._delete_affected_pci_devices(dom, dev_name, pci_devs)
                break
        else:
            raise NotFoundError('KCHVMHDEV0001E', {
                'vmid': vmid,
                'dev_name': dev_name
            })
Esempio n. 2
0
    def lookup(self, vmid, dev_name):
        dom = VMModel.get_vm(vmid, self.conn)
        xmlstr = dom.XMLDesc(0)
        root = objectify.fromstring(xmlstr)
        try:
            hostdev = root.devices.hostdev
        except AttributeError:
            raise NotFoundError('KCHVMHDEV0001E', {
                'vmid': vmid,
                'dev_name': dev_name
            })

        dev_model = DeviceModel(conn=self.conn)
        for e in hostdev:
            deduced_name = DeviceModel.deduce_dev_name(e, self.conn)
            if deduced_name == dev_name:
                dev_info = dev_model.lookup(dev_name)
                return {
                    'name': dev_name,
                    'type': e.attrib['type'],
                    'product': dev_info.get('product', None),
                    'vendor': dev_info.get('vendor', None)
                }

        raise NotFoundError('KCHVMHDEV0001E', {
            'vmid': vmid,
            'dev_name': dev_name
        })
Esempio n. 3
0
    def disableRepository(self, repo_id):
        if not repo_id in self._repos.keys():
            raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})

        info = self._repos[repo_id]
        # Check if repo_id is already disabled
        if not info['enabled']:
            raise NotFoundError("KCHREPOS0016E", {'repo_id': repo_id})

        info['enabled'] = False
        self._repos[repo_id] = info
        return repo_id
Esempio n. 4
0
    def toggleRepo(self, repo_id, enable):
        repos = self._get_repos('KCHREPOS0011E')
        if repo_id not in repos.keys():
            raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})

        entry = repos.get(repo_id)
        if enable and entry.enabled:
            raise InvalidOperation("KCHREPOS0015E", {'repo_id': repo_id})

        if not enable and not entry.enabled:
            raise InvalidOperation("KCHREPOS0016E", {'repo_id': repo_id})

        kimchiLock.acquire()
        try:
            if enable:
                entry.enable()
            else:
                entry.disable()

            write_repo_to_file(entry)
        except:
            if enable:
                raise OperationFailed("KCHREPOS0020E", {'repo_id': repo_id})

            raise OperationFailed("KCHREPOS0021E", {'repo_id': repo_id})
        finally:
            kimchiLock.release()

        return repo_id
Esempio n. 5
0
 def lookup(self, nodedev_name):
     conn = self.conn.get()
     try:
         dev = conn.nodeDeviceLookupByName(nodedev_name)
     except:
         raise NotFoundError('KCHHOST0003E', {'name': nodedev_name})
     return hostdev.get_dev_info(dev)
Esempio n. 6
0
def get_vm_disk(dom, dev_name):
    # Retrieve disk xml and format return dict
    disk = get_device_xml(dom, dev_name)
    if disk is None:
        raise NotFoundError("KCHVMSTOR0007E", {
            'dev_name': dev_name,
            'vm_name': dom.name()
        })
    path = ""
    dev_bus = 'ide'
    try:
        source = disk.source
        if source is not None:
            src_type = disk.attrib['type']
            if src_type == 'network':
                host = source.host
                path = (source.attrib['protocol'] + '://' +
                        host.attrib['name'] + ':' + host.attrib['port'] +
                        source.attrib['name'])
            else:
                path = source.attrib[DEV_TYPE_SRC_ATTR_MAP[src_type]]
        # Retrieve storage bus type
        dev_bus = disk.target.attrib['bus']
    except:
        pass
    dev_type = disk.attrib['device']
    return {
        'dev': dev_name,
        'type': dev_type,
        'path': path,
        'format': disk.driver.attrib['type'],
        'bus': dev_bus
    }
Esempio n. 7
0
    def getRepo(self, repo_id):
        """
        Return a dictionary in the repositories.Repositories() of the given
        repository ID format with the information of a YumRepository object.
        """
        kimchiLock.acquire()
        repos = self._get_repos('KCHREPOS0025E')
        kimchiLock.release()

        if repo_id not in repos.repos.keys():
            raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})

        entry = repos.getRepo(repo_id)

        info = {}
        info['enabled'] = entry.enabled

        baseurl = ''
        if entry.baseurl:
            baseurl = entry.baseurl[0]

        info['baseurl'] = baseurl
        info['config'] = {}
        info['config']['repo_name'] = entry.name
        info['config']['gpgcheck'] = entry.gpgcheck
        info['config']['gpgkey'] = entry.gpgkey
        info['config']['mirrorlist'] = entry.mirrorlist or ''
        info['config']['metalink'] = entry.metalink or ''
        return info
Esempio n. 8
0
 def vmiface_lookup(self, vm, mac):
     dom = self._get_vm(vm)
     try:
         info = dom.ifaces[mac].info
     except KeyError:
         raise NotFoundError("KCHVMIF0001E", {'iface': mac, 'name': vm})
     return info
Esempio n. 9
0
    def lookup(self, subscription):
        """
        Returns a dictionary with all SEP information.
        """
        cmd = ['/opt/ibm/seprovider/bin/getSubscriber']
        output, error, rc = run_command(cmd)

        # error: report
        if rc != 0:
            kimchi_log.error('SEP execution error: %s - %s - %s' % (cmd, rc,
                             error))
            raise OperationFailed('GINSEP0005E', {'error': error})

        if len(output) > 1:

            # iterate over lines and parse to dict
            for line in output.splitlines():
                if len(line) > 0:
                    entry = SUBSCRIBER.search(line).groupdict()

                    # subscriber found
                    if entry["hostname"] == subscription:
                        return entry

        raise NotFoundError("GINSEP0006E", {'hostname': subscription})
Esempio n. 10
0
    def updateRepo(self, repo_id, params):
        """
        Update a given repository in repositories.Repositories() format
        """
        kimchiLock.acquire()
        repos = self._get_repos('KCHREPOS0011E')
        kimchiLock.release()
        if repo_id not in repos.repos.keys():
            raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})

        config = params.get('config', {})
        entry = repos.getRepo(repo_id)

        baseurl = params.get('baseurl', None)
        mirrorlist = config.get('mirrorlist', None)

        if baseurl is not None:
            validate_repo_url(baseurl)
            entry.baseurl = baseurl

        if mirrorlist == '':
            mirrorlist = None

        if mirrorlist is not None:
            validate_repo_url(mirrorlist)
            entry.mirrorlist = mirrorlist

        entry.id = params.get('repo_id', repo_id)
        entry.name = config.get('repo_name', entry.name)
        entry.gpgcheck = config.get('gpgcheck', entry.gpgcheck)
        entry.gpgkey = config.get('gpgkey', entry.gpgkey)
        kimchiLock.acquire()
        self._conf.writeRawRepoFile(entry)
        kimchiLock.release()
        return repo_id
Esempio n. 11
0
    def update(self, vm, mac, params):
        dom = VMModel.get_vm(vm, self.conn)
        iface = self._get_vmiface(vm, mac)

        if iface is None:
            raise NotFoundError("KCHVMIF0001E", {'name': vm, 'iface': mac})

        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

        if iface.attrib['type'] == 'network' and 'network' in params:
            iface.source.attrib['network'] = params['network']
            xml = etree.tostring(iface)

            dom.updateDeviceFlags(xml, flags=flags)

        if 'model' in params:
            iface.model.attrib["type"] = params['model']
            xml = etree.tostring(iface)

            dom.updateDeviceFlags(xml, flags=flags)

        return mac
Esempio n. 12
0
    def updateRepo(self, repo_id, params):
        """
        Update a given repository in repositories.Repositories() format
        """
        r = self._get_source_entry(repo_id)
        if r is None:
            raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})

        info = {
            'enabled': not r.disabled,
            'baseurl': params.get('baseurl', r.uri),
            'config': {
                'type': 'deb',
                'dist': r.dist,
                'comps': r.comps
            }
        }

        if 'config' in params.keys():
            config = params['config']
            info['config']['dist'] = config.get('dist', r.dist)
            info['config']['comps'] = config.get('comps', r.comps)

        self.removeRepo(repo_id)
        return self.addRepo(info)
Esempio n. 13
0
 def vmstorage_delete(self, vm_name, dev_name):
     dom = self._get_vm(vm_name)
     if dev_name not in self.vmstorages_get_list(vm_name):
         raise NotFoundError("KCHVMSTOR0007E", {
             'dev_name': dev_name,
             'vm_name': vm_name
         })
     dom.storagedevices.pop(dev_name)
Esempio n. 14
0
    def lookup(self, name):
        try:
            info = netinfo.get_interface_info(name)
        except ValueError:
            raise NotFoundError("KCHIFACE0001E", {'name': name})

        info['editable'] = self._is_interface_editable(name)
        return info
Esempio n. 15
0
    def vmscreenshot_lookup(self, name):
        vm = self._get_vm(name)
        if vm.info['state'] != 'running':
            raise NotFoundError("KCHVM0004E", {'name': name})

        screenshot = self._mock_screenshots.setdefault(
            vm.uuid, MockVMScreenshot({'uuid': vm.uuid}))
        return screenshot.lookup()
Esempio n. 16
0
 def lookup(self, name):
     if not os.path.isdir(FC_HOST_SYS_PATH % name):
         raise NotFoundError('GINADAP0001E', {'adapter': name})
     info = {}
     for key in FC_HOST_INFOS:
         info[key] = self._read_info(FC_HOST_SYS_PATH % name +
                                     FC_HOST_INFOS[key])
     return info
Esempio n. 17
0
 def vmstorage_lookup(self, vm_name, dev_name):
     dom = self._get_vm(vm_name)
     if dev_name not in self.vmstorages_get_list(vm_name):
         raise NotFoundError("KCHVMSTOR0007E", {
             'dev_name': dev_name,
             'vm_name': vm_name
         })
     return dom.storagedevices.get(dev_name).info
Esempio n. 18
0
    def getUpdate(self, name):
        """
        Return a dictionary with all info from a given package name.
        """
        if name not in self._packages.keys():
            raise NotFoundError('KCHPKGUPD0002E', {'name': name})

        return self._packages[name]
Esempio n. 19
0
 def delete(self, obj_type, ident, ignore_missing=False):
     c = self.conn.cursor()
     c.execute('DELETE FROM objects WHERE type=? AND id=?',
               (obj_type, ident))
     if c.rowcount != 1 and not ignore_missing:
         self.conn.rollback()
         raise NotFoundError("KCHOBJST0001E", {'item': ident})
     self.conn.commit()
Esempio n. 20
0
    def getRepository(self, repo_id):
        if not repo_id in self._repo_storage.keys():
            raise NotFoundError("KCHREPOS0010E", {'repo_id': repo_id})

        repo = self._repo_storage[repo_id]
        if (isinstance(repo['baseurl'], list)) and (len(repo['baseurl']) > 0):
            repo['baseurl'] = repo['baseurl'][0]

        return repo
Esempio n. 21
0
    def updateRepository(self, repo_id, params):
        if not repo_id in self._repos.keys():
            raise NotFoundError("KCHREPOS0012E", {'repo_id': repo_id})

        info = self._repos[repo_id]
        info.update(params)
        del self._repos[repo_id]
        self._repos[info['repo_id']] = info
        return info['repo_id']
Esempio n. 22
0
 def get_storagepool(name, conn):
     conn = conn.get()
     try:
         return conn.storagePoolLookupByName(name.encode("utf-8"))
     except libvirt.libvirtError as e:
         if e.get_error_code() == libvirt.VIR_ERR_NO_STORAGE_POOL:
             raise NotFoundError("KCHPOOL0002E", {'name': name})
         else:
             raise
Esempio n. 23
0
 def _get_interface_info(self, name):
     try:
         info = netinfo.get_interface_info(name)
     except ValueError:
         raise NotFoundError("KCHIFACE0001E", {'name': name})
     if not info['ipaddr']:
         info['ipaddr'], info['netmask'] = \
             self._get_static_config_interface_address(name)
     return info
Esempio n. 24
0
    def delete(self, name):
        path = config.get_debugreports_path()
        file_pattern = os.path.join(path, name + '.*')
        try:
            file_target = glob.glob(file_pattern)[0]
        except IndexError:
            raise NotFoundError("KCHDR0001E", {'name': name})

        os.remove(file_target)
Esempio n. 25
0
    def removeRepository(self, repo_id):
        """
        Remove a given repository
        """
        if not repo_id in self._repo_storage.keys():
            raise NotFoundError("KCHREPOS0010E", {'repo_id': repo_id})

        del self._repo_storage[repo_id]
        self._pkg_mnger.removeRepo(repo_id)
        return True
Esempio n. 26
0
 def get(self, obj_type, ident):
     c = self.conn.cursor()
     res = c.execute('SELECT json FROM objects WHERE type=? AND id=?',
                     (obj_type, ident))
     try:
         jsonstr = res.fetchall()[0][0]
     except IndexError:
         self.conn.rollback()
         raise NotFoundError("KCHOBJST0001E", {'item': ident})
     return json.loads(jsonstr)
Esempio n. 27
0
 def vmiface_update(self, vm, mac, params):
     dom = self._get_vm(vm)
     try:
         info = dom.ifaces[mac].info
     except KeyError:
         raise NotFoundError("KCHVMIF0001E", {'iface': mac, 'name': vm})
     if info['type'] == 'network' and 'network' in params:
         info['network'] = params['network']
     if 'model' in params:
         info['model'] = params['model']
     return mac
Esempio n. 28
0
 def _get_template(self, name, overrides=None):
     try:
         t = self._mock_templates[name]
         if overrides:
             args = copy.copy(t.info)
             args.update(overrides)
             return MockVMTemplate(args, self)
         else:
             return t
     except KeyError:
         raise NotFoundError("KCHTMPL0002E", {'name': name})
Esempio n. 29
0
 def get_vm(name, conn):
     conn = conn.get()
     try:
         # outgoing text to libvirt, encode('utf-8')
         return conn.lookupByName(name.encode("utf-8"))
     except libvirt.libvirtError as e:
         if e.get_error_code() == libvirt.VIR_ERR_NO_DOMAIN:
             raise NotFoundError("KCHVM0002E", {'name': name})
         else:
             raise OperationFailed("KCHVM0009E", {'name': name,
                                                  'err': e.message})
Esempio n. 30
0
    def _get_user(self, _user_id):
        ldap_server = config.get("authentication", "ldap_server").strip('"')
        ldap_search_base = config.get("authentication",
                                      "ldap_search_base").strip('"')
        ldap_search_filter = config.get("authentication",
                                        "ldap_search_filter",
                                        vars={
                                            "username":
                                            _user_id.encode("utf-8")
                                        }).strip('"')

        connect = ldap.open(ldap_server)
        try:
            result = connect.search_s(ldap_search_base, ldap.SCOPE_SUBTREE,
                                      ldap_search_filter)
            if len(result) == 0:
                raise NotFoundError("KCHAUTH0004E", {'user_id': _user_id})
            return result[0][1]
        except ldap.NO_SUCH_OBJECT:
            raise NotFoundError("KCHAUTH0004E", {'user_id': _user_id})