예제 #1
0
파일: pools.py 프로젝트: sarath49/zaqar
    def _get(self, name, detailed=False):
        res = self._col.find_one({'n': name},
                                 _field_spec(detailed))
        if not res:
            raise errors.PoolDoesNotExist(name)

        return _normalize(res, detailed)
예제 #2
0
파일: pools.py 프로젝트: weizai118/zaqar
    def _get(self, name, detailed=False):
        pool_key = utils.pools_name_hash_key(name)
        pool = self._client.hgetall(pool_key)
        if pool is None or len(pool) == 0:
            raise errors.PoolDoesNotExist(name)

        return self._normalize(pool, detailed)
예제 #3
0
    def _get(self, name, detailed=False):
        stmt = sa.sql.select([tables.Pools]).where(tables.Pools.c.name == name)

        pool = self.driver.run(stmt).fetchone()
        if pool is None:
            raise errors.PoolDoesNotExist(name)

        return _normalize(pool, detailed)
예제 #4
0
    def create(self, name, pool, project=None, capabilities=None):

        # NOTE(flaper87): Check if there are pools in this group.
        # Should there be a `group_exists` method?
        if not list(self._pools_ctrl.get_pools_by_group(pool)):
            raise errors.PoolDoesNotExist(pool)

        capabilities = {} if capabilities is None else capabilities
        self._col.update({'n': name, 'p': project},
                         {'$set': {'s': pool, 'c': capabilities}},
                         upsert=True)
예제 #5
0
    def _update(self, name, **kwargs):
        names = ('uri', 'weight', 'group', 'options')
        fields = common_utils.fields(kwargs,
                                     names,
                                     pred=lambda x: x is not None,
                                     key_transform=lambda x: x[0])
        assert fields, ('`weight`, `uri`, `group`, '
                        'or `options` not found in kwargs')

        res = self._col.update({'n': name}, {'$set': fields}, upsert=False)
        if not res['updatedExisting']:
            raise errors.PoolDoesNotExist(name)
예제 #6
0
    def create(self, name, pool, project=None, capabilities=None):
        cap = None if capabilities is None else utils.json_encode(capabilities)

        try:
            stmt = sa.sql.expression.insert(tables.Flavors).values(
                name=name, pool=pool, project=project, capabilities=cap)
            self.driver.connection.execute(stmt)
        except sa.exc.IntegrityError:
            if not self._pools_ctrl.get_group(pool):
                raise errors.PoolDoesNotExist(pool)

            # TODO(flaper87): merge update/create into a single
            # method with introduction of upsert
            self.update(name, pool=pool, project=project, capabilities=cap)
예제 #7
0
파일: pools.py 프로젝트: eclipsek20/zaqar
    def _update(self, name, **kwargs):
        names = ('uri', 'weight', 'flavor', 'options')
        fields = common_utils.fields(kwargs,
                                     names,
                                     pred=lambda x: x is not None,
                                     key_transform=lambda x: x[0])
        assert fields, ('`weight`, `uri`, ' 'or `options` not found in kwargs')

        flavor = fields.get('f')
        if flavor is not None and len(flavor) == 0:
            fields['f'] = None

        res = self._col.update_one({'n': name}, {'$set': fields}, upsert=False)
        if res.matched_count == 0:
            raise errors.PoolDoesNotExist(name)
예제 #8
0
    def _update(self, name, **kwargs):
        # NOTE(cpp-cabrera): by pruning None-valued kwargs, we avoid
        # overwriting the existing options field with None, since that
        # one can be null.
        names = ('uri', 'weight', 'flavor', 'options')
        fields = common_utils.fields(kwargs, names,
                                     pred=lambda x: x is not None)

        assert fields, ('`weight`, `uri`, `flavor`, '
                        'or `options` not found in kwargs')

        if 'options' in fields:
            fields['options'] = utils.json_encode(fields['options'])

        stmt = sa.sql.update(tables.Pools).where(
            tables.Pools.c.name == name).values(**fields)

        res = self.driver.run(stmt)
        if res.rowcount == 0:
            raise errors.PoolDoesNotExist(name)
예제 #9
0
 def _check_pools_exists(self, pool_list):
     if pool_list is not None:
         for pool in pool_list:
             if not self._pools_ctrl.exists(pool):
                 raise errors.PoolDoesNotExist(pool)