コード例 #1
0
ファイル: project.py プロジェクト: xinni-ge/eclcli
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity

        if parsed_args.domain:
            domain = common.find_domain(identity_client, parsed_args.domain)
            project = utils.find_resource(identity_client.projects,
                                          parsed_args.project,
                                          domain_id=domain.id,
                                          parents_as_list=parsed_args.parents,
                                          subtree_as_list=parsed_args.children)
        else:
            project = utils.find_resource(identity_client.projects,
                                          parsed_args.project,
                                          parents_as_list=parsed_args.parents,
                                          subtree_as_list=parsed_args.children)

        if project._info.get('parents'):
            project._info['parents'] = [
                str(p['project']['id']) for p in project._info['parents']
            ]
        if project._info.get('subtree'):
            project._info['subtree'] = [
                str(p['project']['id']) for p in project._info['subtree']
            ]

        project._info.pop('links')
        return zip(*sorted(six.iteritems(project._info)))
コード例 #2
0
ファイル: ec2creds.py プロジェクト: xinni-ge/eclcli
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity
        client_manager = self.app.client_manager
        user = _determine_ec2_user(parsed_args, client_manager)

        project_domain = None
        if parsed_args.project_domain:
            project_domain = common.find_domain(identity_client,
                                                parsed_args.project_domain)

        if parsed_args.project:
            if project_domain is not None:
                project = utils.find_resource(identity_client.projects,
                                              parsed_args.project,
                                              domain_id=project_domain.id).id
            else:
                project = utils.find_resource(
                    identity_client.projects,
                    parsed_args.project).id
        else:
            # Get the project from the current auth
            project = self.app.client_manager.auth_ref.project_id

        creds = identity_client.ec2.create(user, project)

        info = {}
        info.update(creds._info)

        if 'tenant_id' in info:
            info.update(
                {'project_id': info.pop('tenant_id')}
            )

        return zip(*sorted(six.iteritems(info)))
コード例 #3
0
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity

        if parsed_args.project:
            project = utils.find_resource(
                identity_client.tenants,
                parsed_args.project,
            ).id
        else:
            # Get the project from the current auth
            project = self.app.client_manager.auth_ref.project_id
        if parsed_args.user:
            user = utils.find_resource(
                identity_client.users,
                parsed_args.user,
            ).id
        else:
            # Get the user from the current auth
            user = self.app.client_manager.auth_ref.user_id

        creds = identity_client.ec2.create(user, project)

        info = {}
        info.update(creds._info)

        if 'tenant_id' in info:
            info.update(
                {'project_id': info.pop('tenant_id')}
            )

        return zip(*sorted(six.iteritems(info)))
コード例 #4
0
ファイル: project.py プロジェクト: xinni-ge/eclcli
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity
        if parsed_args.long:
            columns = ('ID', 'Name', 'Domain ID', 'Description', 'Enabled')
        else:
            columns = ('ID', 'Name')
        kwargs = {}

        domain_id = None
        if parsed_args.domain:
            domain_id = common.find_domain(identity_client,
                                           parsed_args.domain).id
            kwargs['domain'] = domain_id

        if parsed_args.user:
            if parsed_args.domain:
                user_id = utils.find_resource(identity_client.users,
                                              parsed_args.user,
                                              domain_id=domain_id).id
            else:
                user_id = utils.find_resource(identity_client.users,
                                              parsed_args.user).id

            kwargs['user'] = user_id

        data = identity_client.projects.list(**kwargs)
        return (columns, (utils.get_item_properties(
            s,
            columns,
            formatters={},
        ) for s in data))
コード例 #5
0
ファイル: ec2creds.py プロジェクト: xinni-ge/eclcli
def _determine_ec2_user(parsed_args, client_manager):
    """Determine a user several different ways.

    Assumes parsed_args has user and user_domain arguments. Attempts to find
    the user if domain scoping is provided, otherwise revert to a basic user
    call. Lastly use the currently authenticated user.

    """

    user_domain = None
    if parsed_args.user_domain:
        user_domain = common.find_domain(client_manager.identity,
                                         parsed_args.user_domain)
    if parsed_args.user:
        if user_domain is not None:
            user = utils.find_resource(client_manager.identity.users,
                                       parsed_args.user,
                                       domain_id=user_domain.id).id
        else:
            user = utils.find_resource(
                client_manager.identity.users,
                parsed_args.user).id
    else:
        # Get the user from the current auth
        user = client_manager.auth_ref.user_id
    return user
コード例 #6
0
ファイル: qos_specs.py プロジェクト: xinni-ge/eclcli
    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)
        volume_type = utils.find_resource(volume_client.volume_types,
                                          parsed_args.volume_type)

        volume_client.qos_specs.associate(qos_spec.id, volume_type.id)
コード例 #7
0
 def take_action(self, parsed_args):
     identity_client = self.app.client_manager.identity
     role = utils.find_resource(identity_client.roles, parsed_args.role)
     project = utils.find_resource(
         identity_client.tenants,
         parsed_args.project,
     )
     user = utils.find_resource(identity_client.users, parsed_args.user)
     identity_client.roles.remove_user_role(user.id, role.id, project.id)
コード例 #8
0
    def take_action(self, parsed_args):
        compute_client = self.app.client_manager.compute

        network = utils.find_resource(compute_client.networks,
                                      parsed_args.network)

        server = utils.find_resource(compute_client.servers,
                                     parsed_args.server)

        server.add_fixed_ip(network.id)
コード例 #9
0
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity

        if parsed_args.domain:
            domain = common.find_domain(identity_client, parsed_args.domain)
            user = utils.find_resource(identity_client.users,
                                       parsed_args.user,
                                       domain_id=domain.id)
        else:
            user = utils.find_resource(identity_client.users, parsed_args.user)

        user._info.pop('links')
        return zip(*sorted(six.iteritems(user._info)))
コード例 #10
0
ファイル: volume.py プロジェクト: kohey-itoh/eclcli
    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)))
コード例 #11
0
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity

        domain = None
        if parsed_args.domain:
            domain = common.find_domain(identity_client, parsed_args.domain)
        for user in parsed_args.users:
            if domain is not None:
                user_obj = utils.find_resource(identity_client.users,
                                               user,
                                               domain_id=domain.id)
            else:
                user_obj = utils.find_resource(identity_client.users, user)
            identity_client.users.delete(user_obj.id)
コード例 #12
0
ファイル: user.py プロジェクト: xinni-ge/eclcli
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity

        if parsed_args.password_prompt:
            parsed_args.password = utils.get_password(self.app.stdin)

        if (not parsed_args.name
                and not parsed_args.name
                and not parsed_args.password
                and not parsed_args.email
                and not parsed_args.project
                and not parsed_args.enable
                and not parsed_args.disable):
            return

        user = utils.find_resource(
            identity_client.users,
            parsed_args.user,
        )

        if parsed_args.password:
            identity_client.users.update_password(
                user.id,
                parsed_args.password,
            )

        if parsed_args.project:
            project = utils.find_resource(
                identity_client.tenants,
                parsed_args.project,
            )
            identity_client.users.update_tenant(
                user.id,
                project.id,
            )

        kwargs = {}
        if parsed_args.name:
            kwargs['name'] = parsed_args.name
        if parsed_args.email:
            kwargs['email'] = parsed_args.email
        kwargs['enabled'] = user.enabled
        if parsed_args.enable:
            kwargs['enabled'] = True
        if parsed_args.disable:
            kwargs['enabled'] = False

        identity_client.users.update(user.id, **kwargs)
        return
コード例 #13
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
コード例 #14
0
ファイル: project.py プロジェクト: xinni-ge/eclcli
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity

        domain = None
        if parsed_args.domain:
            domain = common.find_domain(identity_client, parsed_args.domain)
        for project in parsed_args.projects:
            if domain is not None:
                project_obj = utils.find_resource(identity_client.projects,
                                                  project,
                                                  domain_id=domain.id)
            else:
                project_obj = utils.find_resource(identity_client.projects,
                                                  project)
            identity_client.projects.delete(project_obj.id)
コード例 #15
0
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity
        role = utils.find_resource(identity_client.roles, parsed_args.role)

        info = {}
        info.update(role._info)
        return zip(*sorted(six.iteritems(info)))
コード例 #16
0
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity

        enabled = True
        if parsed_args.disable:
            enabled = False
        kwargs = {}
        if parsed_args.property:
            kwargs = parsed_args.property.copy()

        try:
            project = identity_client.tenants.create(
                parsed_args.name,
                description=parsed_args.description,
                enabled=enabled,
                **kwargs)
        except ks_exc.Conflict as e:
            if parsed_args.or_show:
                project = utils.find_resource(
                    identity_client.tenants,
                    parsed_args.name,
                )
                self.log.info('Returning existing project %s', project.name)
            else:
                raise e

        # TODO(stevemar): Remove the line below when we support multitenancy
        project._info.pop('parent_id', None)
        return zip(*sorted(six.iteritems(project._info)))
コード例 #17
0
    def take_action(self, parsed_args):
        bare_client = self.app.client_manager.bare

        server_obj = utils.find_resource(bare_client.servers,
                                         parsed_args.server)
        bare_client.servers.stop(server_obj.id)
        return {}, {}
コード例 #18
0
    def take_action(self, parsed_args):
        compute_client = self.app.client_manager.compute

        server = utils.find_resource(compute_client.servers,
                                     parsed_args.server)

        server.remove_fixed_ip(parsed_args.ip_address)
コード例 #19
0
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity
        domain = utils.find_resource(identity_client.domains,
                                     parsed_args.domain)

        domain._info.pop('links')
        return zip(*sorted(six.iteritems(domain._info)))
コード例 #20
0
    def take_action(self, parsed_args):
        bare_client = self.app.client_manager.bare

        search_opts = {}
        self.log.debug('search options: %s', search_opts)

        columns = (
            'Flavor ID',
            'Flavor Name',
            'Message',
            'Setting',
            'Updated',
            'Status',
        )

        server_obj = utils.find_resource(bare_client.servers, parsed_args.server)
        data = bare_client.uefis.get(server_obj.id)

        return columns, utils.get_item_properties(
            data,
            columns,
            mixed_case_fields=[],
            formatters={
                'Setting': bare_utils._format_dicts_list_generic
            }
        )
コード例 #21
0
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity

        if (not parsed_args.name and not parsed_args.description
                and not parsed_args.enable and not parsed_args.property
                and not parsed_args.disable):
            return

        project = utils.find_resource(
            identity_client.tenants,
            parsed_args.project,
        )

        kwargs = project._info
        if parsed_args.name:
            kwargs['name'] = parsed_args.name
        if parsed_args.description:
            kwargs['description'] = parsed_args.description
        if parsed_args.enable:
            kwargs['enabled'] = True
        if parsed_args.disable:
            kwargs['enabled'] = False
        if parsed_args.property:
            kwargs.update(parsed_args.property)
        if 'id' in kwargs:
            del kwargs['id']
        if 'name' in kwargs:
            # Hack around broken Identity API arg names
            kwargs['tenant_name'] = kwargs['name']
            del kwargs['name']

        identity_client.tenants.update(project.id, **kwargs)
        return
コード例 #22
0
ファイル: volume_type.py プロジェクト: xinni-ge/eclcli
 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,
     )
     volume_type.unset_keys(parsed_args.property)
コード例 #23
0
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity
        credential = utils.find_resource(identity_client.credentials,
                                         parsed_args.credential)

        credential._info.pop('links')
        return zip(*sorted(six.iteritems(credential._info)))
コード例 #24
0
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity
        user_id = utils.find_resource(identity_client.users,
                                      parsed_args.user).id
        if parsed_args.project:
            project = utils.find_resource(identity_client.projects,
                                          parsed_args.project).id
        else:
            project = None
        credential = identity_client.credentials.create(user=user_id,
                                                        type=parsed_args.type,
                                                        blob=parsed_args.data,
                                                        project=project)

        credential._info.pop('links')
        return zip(*sorted(six.iteritems(credential._info)))
コード例 #25
0
ファイル: volume.py プロジェクト: kohey-itoh/eclcli
    def take_action(self, parsed_args):
        volume_client = self.app.client_manager.volume
        volume = utils.find_resource(volume_client.volumes, parsed_args.volume)

        if parsed_args.size:
            if volume.status != 'available':
                self.app.log.error("Volume is in %s state, it must be "
                                   "available before size can be extended" %
                                   volume.status)
                return
            if parsed_args.size <= volume.size:
                self.app.log.error("New size must be greater than %s GB" %
                                   volume.size)
                return
            volume_client.volumes.extend(volume.id, parsed_args.size)

        if parsed_args.property:
            volume_client.volumes.set_metadata(volume.id, parsed_args.property)

        kwargs = {}
        if parsed_args.name:
            kwargs['display_name'] = parsed_args.name
        if parsed_args.description:
            kwargs['display_description'] = parsed_args.description
        if kwargs:
            volume_client.volumes.update(volume.id, **kwargs)

        if not kwargs and not parsed_args.property and not parsed_args.size:
            self.app.log.error("No changes requested\n")
コード例 #26
0
ファイル: volume_type.py プロジェクト: xinni-ge/eclcli
 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)))
コード例 #27
0
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity
        consumer = utils.find_resource(identity_client.oauth1.consumers,
                                       parsed_args.consumer)

        consumer._info.pop('links', None)
        return zip(*sorted(six.iteritems(consumer._info)))
コード例 #28
0
ファイル: endpoint.py プロジェクト: xinni-ge/eclcli
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity
        endpoint = utils.find_resource(identity_client.endpoints,
                                       parsed_args.endpoint)

        if (not parsed_args.interface and not parsed_args.url
                and not parsed_args.service and not parsed_args.region
                and not parsed_args.enabled and not parsed_args.disabled):
            sys.stdout.write("Endpoint not updated, no arguments present")
            return

        service_id = None
        if parsed_args.service:
            service = common.find_service(identity_client, parsed_args.service)
            service_id = service.id
        enabled = None
        if parsed_args.enabled:
            enabled = True
        if parsed_args.disabled:
            enabled = False

        identity_client.endpoints.update(endpoint.id,
                                         service=service_id,
                                         url=parsed_args.url,
                                         interface=parsed_args.interface,
                                         region=parsed_args.region,
                                         enabled=enabled)
コード例 #29
0
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity

        user_id = utils.find_resource(identity_client.users,
                                      parsed_args.user).id

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

        identity_client.credentials.update(parsed_args.credential,
                                           user=user_id,
                                           type=parsed_args.type,
                                           blob=parsed_args.data,
                                           project=project)
コード例 #30
0
ファイル: policy.py プロジェクト: xinni-ge/eclcli
    def take_action(self, parsed_args):
        identity_client = self.app.client_manager.identity
        policy = utils.find_resource(identity_client.policies,
                                     parsed_args.policy)

        policy._info.pop('links')
        policy._info.update({'rules': policy._info.pop('blob')})
        return zip(*sorted(six.iteritems(policy._info)))