Esempio n. 1
0
    def get_data(self, parsed_args):
        self.log.debug('get_data(%s)' % parsed_args)
        quantum_client = self.app.client_manager.quantum
        search_opts = {
            'tenant': parsed_args.tenant_id, }
        for net_filter in net_filters_v11_opt:
            option_key = net_filter.keys()[0]
            arg = option_key[2:]
            arg = arg.replace('-', '_')
            arg_value = getattr(parsed_args, arg, None)
            if arg_value is not None:
                search_opts.update({option_key[2:]: arg_value, })

        self.log.debug('search options: %s', search_opts)
        quantum_client.format = parsed_args.request_format
        columns = ('ID', )
        data = None
        if parsed_args.show_details:
            data = quantum_client.list_networks_details(**search_opts)
            # dict: {u'networks': [{u'op-status': u'UP',
            #        u'id': u'7a068b68-c736-42ab-9e43-c9d83c57627e',
            #        u'name': u'private'}]}
            columns = ('ID', 'op-status', 'name', )
        else:
            data = quantum_client.list_networks(**search_opts)
            # {u'networks': [{u'id':
            #  u'7a068b68-c736-42ab-9e43-c9d83c57627e'}]}
        networks = []
        if 'networks' in data:
            networks = data['networks']

        return (columns,
                (utils.get_item_properties(
                    s, columns, formatters={}, ) for s in networks), )
Esempio n. 2
0
    def get_data(self, parsed_args):
        self.log.debug('get_data(%s)' % parsed_args)
        quantum_client = self.get_client()
        search_opts = parse_args_to_dict(parsed_args.filter_specs)

        self.log.debug('search options: %s', search_opts)
        quantum_client.format = parsed_args.request_format
        fields = parsed_args.fields
        extra_fields = search_opts.get('fields', [])
        if extra_fields:
            if isinstance(extra_fields, list):
                fields.extend(extra_fields)
            else:
                fields.append(extra_fields)
        if fields:
            search_opts.update({'fields': fields})
        if parsed_args.show_details:
            search_opts.update({'verbose': 'True'})
        obj_lister = getattr(quantum_client,
                             "list_%ss" % self.resource)

        data = obj_lister(**search_opts)
        info = []
        collection = self.resource + "s"
        if collection in data:
            info = data[collection]
        _columns = len(info) > 0 and sorted(info[0].keys()) or []
        return (_columns, (utils.get_item_properties(
            s, _columns, formatters=self._formatters, )
            for s in info), )
Esempio n. 3
0
    def get_data(self, parsed_args):

        debug_agent = self.get_debug_agent()
        info = debug_agent.list_probes()
        columns = len(info) > 0 and sorted(info[0].keys()) or []
        return (columns, (utils.get_item_properties(
            s, columns, formatters=self._formatters, )
            for s in info), )
    def test_get_object_item_desired_fields_is_empty(self):
        class Fake(object):
            def __init__(self):
                self.id = 'test_id_1'
                self.name = 'test_name'
                self.test_user = '******'

        fields = []
        item = Fake()
        actual = utils.get_item_properties(item, fields)
        self.assertEqual((), actual)
    def test_get_object_item_desired_fields_differ_from_item(self):
        class Fake(object):
            def __init__(self):
                self.id = 'test_id_1'
                self.name = 'test_name'
                self.test_user = '******'

        fields = ('name', 'id', 'test user')
        item = Fake()
        actual = utils.get_item_properties(item, fields)
        self.assertNotEqual(('test_name', 'test_id', 'test'), actual)
    def test_get_object_item_properties_mixed_case_fields(self):
        class Fake(object):
            def __init__(self):
                self.id = 'test_id'
                self.name = 'test_name'
                self.test_user = '******'

        fields = ('name', 'id', 'test user')
        mixed_fields = ('test user', 'ID')
        item = Fake()
        actual = utils.get_item_properties(item, fields, mixed_fields)
        self.assertEqual(('test_name', 'test_id', 'test'), actual)
Esempio n. 7
0
    def get_data(self, parsed_args):

        debug_agent = self.get_debug_agent()
        info = debug_agent.list_probes()
        columns = len(info) > 0 and sorted(info[0].keys()) or []
        return (
            columns,
            (utils.get_item_properties(
                s,
                columns,
                formatters=self._formatters,
            ) for s in info),
        )
Esempio n. 8
0
 def get_data(self, parsed_args):
     self.log.debug("get_data(%s)" % parsed_args)
     quantum_client = self.get_client()
     search_opts = {}
     quantum_client.format = parsed_args.request_format
     obj_lister = getattr(quantum_client, "list_%ss" % self.resource)
     data = obj_lister(**search_opts)
     info = []
     collection = self.resource + "s"
     if collection in data:
         info = data[collection]
     _columns = len(info) > 0 and sorted(info[0].keys()) or []
     return (_columns, (utils.get_item_properties(s, _columns) for s in info))
 def get_data(self, parsed_args):
     self.log.debug('get_data(%s)' % parsed_args)
     quantum_client = self.get_client()
     search_opts = {}
     quantum_client.format = parsed_args.request_format
     obj_lister = getattr(quantum_client, "list_%ss" % self.resource)
     data = obj_lister(**search_opts)
     info = []
     collection = self.resource + "s"
     if collection in data:
         info = data[collection]
     _columns = len(info) > 0 and sorted(info[0].keys()) or []
     return (_columns, (utils.get_item_properties(s, _columns)
                        for s in info))
 def setup_columns(self, info, parsed_args):
     _columns = len(info) > 0 and sorted(info[0].keys()) or []
     if not _columns:
         # clean the parsed_args.columns so that cliff will not break
         parsed_args.columns = []
     elif parsed_args.columns:
         _columns = [x for x in parsed_args.columns if x in _columns]
     elif self.list_columns:
         # if no -c(s) by user and list_columns, we use columns in
         # both list_columns and returned resource.
         # Also Keep their order the same as in list_columns
         _columns = [x for x in self.list_columns if x in _columns]
     return (_columns, (utils.get_item_properties(
         s, _columns, formatters=self._formatters, )
         for s in info), )
    def test_get_object_item_with_formatters(self):
        class Fake(object):
            def __init__(self):
                self.id = 'test_id'
                self.name = 'test_name'
                self.test_user = '******'

        class FakeCallable(object):
            def __call__(self, *args, **kwargs):
                return 'pass'

        fields = ('name', 'id', 'test user', 'is_public')
        formatters = {'is_public': FakeCallable()}
        item = Fake()
        act = utils.get_item_properties(item, fields, formatters=formatters)
        self.assertEqual(('test_name', 'test_id', 'test', 'pass'), act)
    def get_data(self, parsed_args):
        self.log.debug('get_data(%s)' % parsed_args)
        quantum_client = self.get_client()
        search_opts = parse_args_to_dict(parsed_args.filter_specs)

        self.log.debug('search options: %s', search_opts)
        quantum_client.format = parsed_args.request_format
        fields = parsed_args.fields
        extra_fields = search_opts.get('fields', [])
        if extra_fields:
            if isinstance(extra_fields, list):
                fields.extend(extra_fields)
            else:
                fields.append(extra_fields)
        if fields:
            search_opts.update({'fields': fields})
        if parsed_args.show_details:
            search_opts.update({'verbose': 'True'})
        obj_lister = getattr(quantum_client, "list_%ss" % self.resource)

        data = obj_lister(**search_opts)
        info = []
        collection = self.resource + "s"
        if collection in data:
            info = data[collection]
        _columns = len(info) > 0 and sorted(info[0].keys()) or []
        if not _columns:
            # clean the parsed_args.columns so that cliff will not break
            parsed_args.columns = []
        elif not parsed_args.columns and self.list_columns:
            # if no -c(s) by user and list_columns, we use columns in
            # both list_columns and returned resource.
            # Also Keep their order the same as in list_columns
            _columns = [x for x in self.list_columns if x in _columns]
        return (
            _columns,
            (utils.get_item_properties(
                s,
                _columns,
                formatters=self._formatters,
            ) for s in info),
        )
    def get_data(self, parsed_args):
        self.log.debug('get_data(%s)' % parsed_args)
        quantum_client = self.get_client()
        search_opts = parse_args_to_dict(parsed_args.filter_specs)

        self.log.debug('search options: %s', search_opts)
        quantum_client.format = parsed_args.request_format
        fields = parsed_args.fields
        extra_fields = search_opts.get('fields', [])
        if extra_fields:
            if isinstance(extra_fields, list):
                fields.extend(extra_fields)
            else:
                fields.append(extra_fields)
        if fields:
            search_opts.update({'fields': fields})
        if parsed_args.show_details:
            search_opts.update({'verbose': 'True'})
        obj_lister = getattr(quantum_client,
                             "list_%ss" % self.resource)

        data = obj_lister(**search_opts)
        info = []
        collection = self.resource + "s"
        if collection in data:
            info = data[collection]
        _columns = len(info) > 0 and sorted(info[0].keys()) or []
        if not _columns:
            # clean the parsed_args.columns so that cliff will not break
            parsed_args.columns = []
        elif not parsed_args.columns and self.list_columns:
            # if no -c(s) by user and list_columns, we use columns in
            # both list_columns and returned resource.
            # Also Keep their order the same as in list_columns
            _columns = [x for x in self.list_columns if x in _columns]
        return (_columns, (utils.get_item_properties(
            s, _columns, formatters=self._formatters, )
            for s in info), )
Esempio n. 14
0
    def get_data(self, parsed_args):
        self.log.debug('get_data(%s)' % parsed_args)
        quantum_client = self.get_client()
        quantum_client.format = parsed_args.request_format

        params = {}
        if parsed_args.show_details:
            params = {'verbose': 'True'}
        if parsed_args.fields:
            params = {'fields': parsed_args.fields}

        data = None
        # Error message to be used in case both search by id and name are
        # unsuccessful (if list by name fails it does not return an error)
        not_found_message = "Unable to find resource:%s" % parsed_args.id

        # perform search by id only if we are passing a valid UUID
        match = re.match(self.UUID_PATTERN, parsed_args.id)
        if match:
            try:
                obj_shower = getattr(quantum_client,
                                     "show_%s" % self.resource)
                data = obj_shower(parsed_args.id, **params)
            except exceptions.QuantumClientException as ex:
                logging.debug("Show operation failed with code:%s",
                              ex.status_code)
                not_found_message = ex.message
                if ex.status_code != 404:
                    logging.exception("Unable to perform show operation")
                    raise

        # If data is empty, then we got a 404. Try to interpret Id as a name
        if not data:
            logging.debug("Trying to interpret %s as a %s name",
                          parsed_args.id,
                          self.resource)
            # build search_opts for the name
            search_opts = parse_args_to_dict(["--name=%s" % parsed_args.id])
            search_opts.update(params)
            obj_lister = getattr(quantum_client,
                                 "list_%ss" % self.resource)
            data = obj_lister(**search_opts)
            info = []
            collection = self.resource + "s"
            if collection in data:
                info = data[collection]
                if len(info) > 1:
                    logging.info("Multiple occurrences found for: %s",
                                 parsed_args.id)
                    _columns = ['id']
                    # put all ids in a single string as formatter for show
                    # command will print on record only
                    id_string = "\n".join(utils.get_item_properties(
                        s, _columns)[0] for s in info)
                    return (_columns, (id_string, ), )
                elif len(info) == 0:
                    #Nothing was found
                    raise exceptions.QuantumClientException(
                        message=not_found_message)
                else:
                    data = {self.resource: info[0]}
        if self.resource in data:
            for k, v in data[self.resource].iteritems():
                if isinstance(v, list):
                    value = ""
                    for _item in v:
                        if value:
                            value += "\n"
                        if isinstance(_item, dict):
                            value += utils.dumps(_item)
                        else:
                            value += str(_item)
                    data[self.resource][k] = value
                elif v is None:
                    data[self.resource][k] = ''
            return zip(*sorted(data[self.resource].iteritems()))
        else:
            return None
 def test_get_dict_item_properties(self):
     item = {'name': 'test_name', 'id': 'test_id'}
     fields = ('name', 'id')
     actual = utils.get_item_properties(item=item, fields=fields)
     self.assertEqual(('test_name', 'test_id'), actual)
Esempio n. 16
0
    def get_data(self, parsed_args):
        self.log.debug('get_data(%s)' % parsed_args)
        quantum_client = self.app.client_manager.quantum
        quantum_client.tenant = parsed_args.tenant_id
        quantum_client.format = parsed_args.request_format
        data = None
        if parsed_args.show_details:
            data = quantum_client.show_network_details(parsed_args.net_id)
        else:
            data = quantum_client.show_network(parsed_args.net_id)
        # {u'network': {u'op-status': u'UP', 'xmlns':
        #               u'http://openstack.org/quantum/api/v1.1', u'id':
        # u'7a068b68-c736-42ab-9e43-c9d83c57627e', u'name': u'private'}}
        network = {}
        ports = None
        network = 'network' in data and data['network'] or None
        if network:
            ports = network.pop('ports', None)
            column_names, data = zip(*sorted(network.iteritems()))
            if not parsed_args.columns:
                columns_to_include = column_names
            else:
                columns_to_include = [c for c in column_names
                                      if c in parsed_args.columns]
                # Set up argument to compress()
                selector = [(c in columns_to_include)
                            for c in column_names]
                data = list(itertools.compress(data, selector))
            formatter = self.formatters[parsed_args.formatter]
            formatter.emit_one(columns_to_include, data,
                               self.app.stdout, parsed_args)
        if ports:
            print >>self.app.stdout, _('Network Ports:')
            columns = ('op-status', 'state', 'id', 'attachment', )
            column_names, data = (columns, (utils.get_item_properties(
                s, columns, formatters={'attachment': _format_attachment}, )
                for s in ports), )
            if not parsed_args.columns:
                columns_to_include = column_names
                data_gen = data
            else:
                columns_to_include = [c for c in column_names
                                      if c in parsed_args.columns]
                if not columns_to_include:
                    raise ValueError(
                        'No recognized column names in %s' %
                        str(parsed_args.columns))
                # Set up argument to compress()
                selector = [(c in columns_to_include)
                            for c in column_names]
                # Generator expression to only return the parts of a row
                # of data that the user has expressed interest in
                # seeing. We have to convert the compress() output to a
                # list so the table formatter can ask for its length.
                data_gen = (list(itertools.compress(row, selector))
                            for row in data)
            formatter = self.formatters[parsed_args.formatter]
            formatter.emit_list(columns_to_include,
                                data_gen, self.app.stdout, parsed_args)

        return ('', [])