Exemplo n.º 1
0
def _format_image(image):
    """Format an image to make it more consistent with OSC operations. """

    info = {}
    properties = {}

    # the only fields we're not including is "links", "tags" and the properties
    fields_to_show = ['status', 'name', 'container_format', 'created_at',
                      'size', 'disk_format', 'updated_at', 'visibility',
                      'min_disk', 'protected', 'id', 'file', 'checksum',
                      'owner', 'virtual_size', 'min_ram', 'schema']
    # split out the usual key and the properties which are top-level
    for key in six.iterkeys(image):
        if key in fields_to_show:
            info[key] = image.get(key)
        elif key == 'tags':
            continue  # handle this later
        else:
            properties[key] = image.get(key)

    # format the tags if they are there
    info['tags'] = utils.format_list(image.get('tags'))

    # add properties back into the dictionary as a top-level key
    if properties:
        info['properties'] = utils.format_dict(properties)

    return info
Exemplo n.º 2
0
 def take_action(self, parsed_args):
     volume_client = self.app.client_manager.volume
     volume_type = utils.find_resource(volume_client.volume_types,
                                       parsed_args.volume_type)
     properties = utils.format_dict(volume_type._info.pop('extra_specs'))
     volume_type._info.update({'properties': properties})
     return zip(*sorted(six.iteritems(volume_type._info)))
Exemplo n.º 3
0
 def take_action(self, parsed_args):
     volume_client = self.app.client_manager.volume
     snapshot = utils.find_resource(
         volume_client.volume_snapshots, parsed_args.snapshot)
     snapshot._info.update(
         {'properties': utils.format_dict(snapshot._info.pop('metadata'))}
     )
     return zip(*sorted(six.iteritems(snapshot._info)))
Exemplo n.º 4
0
    def take_action(self, parsed_args):

        data = self.app.client_manager.object_store.container_show(
            container=parsed_args.container,
        )
        if 'properties' in data:
            data['properties'] = utils.format_dict(data.pop('properties'))

        return zip(*sorted(six.iteritems(data)))
Exemplo n.º 5
0
    def take_action(self, parsed_args):
        compute_client = self.app.client_manager.compute
        resource_flavor = utils.find_resource(compute_client.flavors,
                                              parsed_args.flavor)
        flavor = resource_flavor._info.copy()
        flavor.pop("links", None)

        flavor['properties'] = utils.format_dict(resource_flavor.get_keys())

        return zip(*sorted(six.iteritems(flavor)))
Exemplo n.º 6
0
    def take_action(self, parsed_args):
        client = self.app.eclsdk.conn.provider_connectivity

        body = {
            'tenant_connection_request_id':
                parsed_args.tenant_connection_request_id,
            'device_type': parsed_args.device_type,
            'device_id': parsed_args.device_id,
        }
        if parsed_args.name:
            body['name'] = parsed_args.name
        if parsed_args.description:
            body['description'] = parsed_args.description
        if parsed_args.tags:
            tags = {}
            for tag in parsed_args.tags:
                tags.update(tag)
            body['tags'] = tags
        if parsed_args.device_interface_id:
            body['device_interface_id'] = parsed_args.device_interface_id

        attachment_opts = dict()
        if parsed_args.segmentation_type:
            attachment_opts['segmentation_type'] = \
                parsed_args.segmentation_type
        if parsed_args.segmentation_id:
            attachment_opts['segmentation_id'] = parsed_args.segmentation_id
        if parsed_args.fixed_ip:
            attachment_opts['fixed_ip'] = parsed_args.fixed_ip

        if len(attachment_opts.keys()) > 0:
            body['attachment_opts'] = attachment_opts

        data = client.create_tenant_connection(**body)._body

        if 'tags' in data:
            data['tags'] = utils.format_dict(data.pop('tags'))
        if 'tags_other' in data:
            data['tags_other'] = utils.format_dict(data.pop('tags_other'))

        return zip(*sorted(six.iteritems(data)))
Exemplo n.º 7
0
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity
        volume_client = self.app.client_manager.volume
        image_client = self.app.client_manager.image

        source_volume = None
        if parsed_args.source:
            source_volume = utils.find_resource(volume_client.volumes,
                                                parsed_args.source).id

        image = None
        if parsed_args.image:
            image = utils.find_resource(image_client.images,
                                        parsed_args.image).id

        snapshot = None
        if parsed_args.snapshot:
            snapshot = utils.find_resource(volume_client.snapshots,
                                           parsed_args.snapshot).id

        project = None
        if parsed_args.project:
            project = utils.find_resource(identity_client.projects,
                                          parsed_args.project).id

        user = None
        if parsed_args.user:
            user = utils.find_resource(identity_client.users,
                                       parsed_args.user).id

        volume = volume_client.volumes.create(
            size=parsed_args.size,
            snapshot_id=snapshot,
            name=parsed_args.name,
            description=parsed_args.description,
            volume_type=parsed_args.type,
            user_id=user,
            project_id=project,
            availability_zone=parsed_args.availability_zone,
            metadata=parsed_args.property,
            imageRef=image,
            source_volid=source_volume)
        # Remove key links from being displayed
        volume._info.update({
            'properties':
            utils.format_dict(volume._info.pop('metadata')),
            'type':
            volume._info.pop('volume_type')
        })
        volume._info.pop("links", None)
        return zip(*sorted(six.iteritems(volume._info)))
Exemplo n.º 8
0
 def take_action(self, parsed_args):
     volume_client = self.app.client_manager.volume
     volume_id = utils.find_resource(
         volume_client.volumes, parsed_args.volume).id
     snapshot = volume_client.volume_snapshots.create(
         volume_id,
         force=parsed_args.force,
         name=parsed_args.name,
         description=parsed_args.description
     )
     snapshot._info.update(
         {'properties': utils.format_dict(snapshot._info.pop('metadata'))}
     )
     return zip(*sorted(six.iteritems(snapshot._info)))
Exemplo n.º 9
0
def _prep_server_detail(compute_client, server):
    """Prepare the detailed server dict for printing

    :param compute_client: a compute client instance
    :param server: a Server resource
    :rtype: a dict of server details
    """
    info = server._info.copy()

    # Call .get() to retrieve all of the server information
    # as findall(name=blah) and REST /details are not the same
    # and do not return flavor and image information.
    server = compute_client.servers.get(info['id'])
    info.update(server._info)

    # Convert the image blob to a name
    image_info = info.get('image', {})
    if image_info:
        image_id = image_info.get('id', '')
        try:
            image = utils.find_resource(compute_client.images, image_id)
            info['image'] = "%s (%s)" % (image.name, image_id)
        except Exception:
            info['image'] = image_id

    # Convert the flavor blob to a name
    flavor_info = info.get('flavor', {})
    flavor_id = flavor_info.get('id', '')
    try:
        flavor = utils.find_resource(compute_client.flavors, flavor_id)
        info['flavor'] = "%s (%s)" % (flavor.name, flavor_id)
    except Exception:
        info['flavor'] = flavor_id

    # NOTE(dtroyer): novaclient splits these into separate entries...
    # Format addresses in a useful way
    info['addresses'] = _format_servers_list_networks(server.networks)

    # Map 'metadata' field to 'properties'
    info.update({'properties': utils.format_dict(info.pop('metadata'))})

    # Migrate tenant_id to project_id naming
    if 'tenant_id' in info:
        info['project_id'] = info.pop('tenant_id')

    # Remove values that are long and not too useful
    info.pop('links', None)

    return info
Exemplo n.º 10
0
    def take_action(self, parsed_args):
        volume_client = self.app.client_manager.volume
        qos_spec = utils.find_resource(volume_client.qos_specs,
                                       parsed_args.qos_spec)

        qos_associations = volume_client.qos_specs.get_associations(qos_spec)
        if qos_associations:
            associations = [
                association.name for association in qos_associations
            ]
            qos_spec._info.update(
                {'associations': utils.format_list(associations)})
        qos_spec._info.update({'specs': utils.format_dict(qos_spec.specs)})

        return zip(*sorted(six.iteritems(qos_spec._info)))
Exemplo n.º 11
0
    def take_action(self, parsed_args):
        volume_client = self.app.client_manager.volume
        volume = utils.find_resource(volume_client.volumes, parsed_args.volume)

        # Special mapping for columns to make the output easier to read:
        # 'metadata' --> 'properties'
        # 'volume_type' --> 'type'
        volume._info.update(
            {
                'properties': utils.format_dict(volume._info.pop('metadata')),
                'type': volume._info.pop('volume_type'),
            }, )

        # Remove key links from being displayed
        volume._info.pop("links", None)
        return zip(*sorted(six.iteritems(volume._info)))
Exemplo n.º 12
0
    def take_action(self, parsed_args):

        volume_client = self.app.client_manager.volume

        kwargs = {}
        if parsed_args.public:
            kwargs['is_public'] = True
        if parsed_args.private:
            kwargs['is_public'] = False

        volume_type = volume_client.volume_types.create(
            parsed_args.name, description=parsed_args.description, **kwargs)
        volume_type._info.pop('extra_specs')
        if parsed_args.property:
            result = volume_type.set_keys(parsed_args.property)
            volume_type._info.update({'properties': utils.format_dict(result)})

        return zip(*sorted(six.iteritems(volume_type._info)))
Exemplo n.º 13
0
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity

        info = {}
        try:
            project = utils.find_resource(
                identity_client.tenants,
                parsed_args.project,
            )
            info.update(project._info)
        except ks_exc.Forbidden as e:
            auth_ref = self.app.client_manager.auth_ref
            if (parsed_args.project == auth_ref.project_id
                    or parsed_args.project == auth_ref.project_name):
                # Ask for currently auth'ed project so return it
                info = {
                    'id': auth_ref.project_id,
                    'name': auth_ref.project_name,
                    # True because we don't get this far if it is disabled
                    'enabled': True,
                }
            else:
                raise e

        # TODO(stevemar): Remove the line below when we support multitenancy
        info.pop('parent_id', None)

        # NOTE(stevemar): Property handling isn't really supported in Keystone
        # and needs a lot of extra handling. Let's reserve the properties that
        # the API has and handle the extra top level properties.
        reserved = ('name', 'id', 'enabled', 'description')
        properties = {}
        for k, v in info.items():
            if k not in reserved:
                # If a key is not in `reserved` it's a property, pop it
                info.pop(k)
                # If a property has been "unset" it's `None`, so don't show it
                if v is not None:
                    properties[k] = v

        info['properties'] = utils.format_dict(properties)
        return zip(*sorted(six.iteritems(info)))
Exemplo n.º 14
0
    def take_action(self, parsed_args):

        compute_client = self.app.client_manager.compute
        info = {}
        info.update(
            utils.find_resource(
                compute_client.security_groups,
                parsed_args.group,
            )._info)
        rules = []
        for r in info['rules']:
            formatted_rule = _xform_and_trim_security_group_rule(r)
            rules.append(utils.format_dict(formatted_rule))

        # Format rules into a list of strings
        info.update({'rules': utils.format_list(rules, separator='\n')})
        # Map 'tenant_id' column to 'project_id'
        info.update({'project_id': info.pop('tenant_id')})

        return zip(*sorted(six.iteritems(info)))
Exemplo n.º 15
0
    def take_action(self, parsed_args):

        compute_client = self.app.client_manager.compute
        data = utils.find_resource(
            compute_client.aggregates,
            parsed_args.aggregate,
        )
        # Remove availability_zone from metadata because Nova doesn't
        if 'availability_zone' in data.metadata:
            data.metadata.pop('availability_zone')

        # Special mapping for columns to make the output easier to read:
        # 'metadata' --> 'properties'
        data._info.update(
            {
                'properties': utils.format_dict(data._info.pop('metadata')),
            },
        )

        info = {}
        info.update(data._info)
        return zip(*sorted(six.iteritems(info)))