Beispiel #1
0
def do_pyscripts_script_get(cc, args={}):
    """Get script."""
    try:
        script = cc.pyscripts.scripts.get(script_id=args.script_id)
    except exceptions.NotFound:
        raise exc.CommandError('Script not found: %s' % args.script_id)
    utils.print_dict(script.to_dict())
Beispiel #2
0
def do_hashmap_threshold_group(cc, args={}):
    """Get a threshold group."""
    try:
        threshold = cc.hashmap.thresholds.group(threshold_id=args.threshold_id)
    except exc.HTTPNotFound:
        raise exc.CommandError('Threshold not found: %s' % args.threshold_id)
    utils.print_dict(threshold.to_dict())
Beispiel #3
0
def do_pyscripts_script_get_data(cc, args={}):
    """Get script data."""
    try:
        script = cc.pyscripts.scripts.get(script_id=args.script_id)
    except exceptions.NotFound:
        raise exc.CommandError('Script not found: %s' % args.script_id)
    six.print_(script.data)
def _discover_auth_versions(session, auth_url):
    # discover the API versions the server is supporting based on the
    # given URL
    v2_auth_url = None
    v3_auth_url = None
    try:
        ks_discover = discover.Discover(session=session, auth_url=auth_url)
        v2_auth_url = ks_discover.url_for('2.0')
        v3_auth_url = ks_discover.url_for('3.0')
    except ks_exc.DiscoveryFailure:
        raise
    except exceptions.ClientException:
        # Identity service may not support discovery. In that case,
        # try to determine version from auth_url
        url_parts = urlparse.urlparse(auth_url)
        (scheme, netloc, path, params, query, fragment) = url_parts
        path = path.lower()
        if path.startswith('/v3'):
            v3_auth_url = auth_url
        elif path.startswith('/v2'):
            v2_auth_url = auth_url
        else:
            raise exc.CommandError('Unable to determine the Keystone '
                                   'version to authenticate with '
                                   'using the given auth_url.')
    return v2_auth_url, v3_auth_url
def find_resource(manager, name_or_id):
    """Helper for the _find_* methods."""
    # first try to get entity as integer id
    try:
        if isinstance(name_or_id, int) or name_or_id.isdigit():
            return manager.get(int(name_or_id))
    except exc.HTTPNotFound:
        pass

    # now try to get entity as uuid
    try:
        uuid.UUID(str(name_or_id))
        return manager.get(name_or_id)
    except (ValueError, exc.HTTPNotFound):
        pass

    # finally try to find entity by name
    try:
        return manager.find(name=name_or_id)
    except exc.HTTPNotFound:
        msg = _("No %(name)s with a name or ID of '%(id)s' exists.") % {
            "name": manager.resource_class.__name__.lower(),
            "id": name_or_id
        }
        raise exc.CommandError(msg)
Beispiel #6
0
def do_info_service_get(cc, args):
    '''Get service info.'''
    if args.name:
        try:
            services_info = [cc.service_info.get(service_id=args.name)]
        except exceptions.NotFound:
            raise exc.CommandError('Service not found: %s' % args.name)
    else:
        try:
            services_info = cc.service_info.list()
        except exceptions.NotFound:
            raise exc.CommandError('ServiceInfo not found')

    field_labels = ['Service', 'Metadata', 'Unit']
    fields = ['service_id', 'metadata', 'unit']
    utils.print_list(services_info, fields, field_labels, sortby=0)
Beispiel #7
0
def do_hashmap_group_delete(cc, args={}):
    """Delete a group."""
    try:
        cc.hashmap.groups.delete(group_id=args.group_id,
                                 recursive=args.recursive)
    except exc.HTTPNotFound:
        raise exc.CommandError('Group not found: %s' % args.group_id)
Beispiel #8
0
def do_hashmap_group_list(cc, args={}):
    """List groups."""
    try:
        groups = cc.hashmap.groups.list()
    except exc.HTTPNotFound:
        raise exc.CommandError('Mapping not found: %s' % args.counter_name)
    else:
        field_labels = ['Name', 'Group id']
        fields = ['name', 'group_id']
        utils.print_list(groups, fields, field_labels, sortby=0)
Beispiel #9
0
def do_hashmap_service_list(cc, args={}):
    """List services."""
    try:
        services = cc.hashmap.services.list()
    except exc.HTTPNotFound:
        raise exc.CommandError('Services not found: %s' % args.counter_name)
    else:
        field_labels = ['Name', 'Service id']
        fields = ['name', 'service_id']
        utils.print_list(services, fields, field_labels, sortby=0)
Beispiel #10
0
def do_hashmap_field_list(cc, args={}):
    """List fields."""
    try:
        created_field = cc.hashmap.fields.list(service_id=args.service_id)
    except exc.HTTPNotFound:
        raise exc.CommandError('Fields not found: %s' % args.counter_name)
    else:
        field_labels = ['Name', 'Field id']
        fields = ['name', 'field_id']
        utils.print_list(created_field, fields, field_labels, sortby=0)
 def do_help(self, args):
     """Display help about this program or one of its subcommands."""
     if getattr(args, 'command', None):
         if args.command in self.subcommands:
             self.subcommands[args.command].print_help()
         else:
             raise exc.CommandError("'%s' is not a valid subcommand" %
                                    args.command)
     else:
         self.parser.print_help()
Beispiel #12
0
def do_hashmap_mapping_list(cc, args={}):
    """List mappings."""
    if args.service_id is None and args.field_id is None:
        raise exc.CommandError("Provide either service-id or field-id")
    try:
        mappings = cc.hashmap.mappings.list(service_id=args.service_id,
                                            field_id=args.field_id,
                                            group_id=args.group_id)
    except exc.HTTPNotFound:
        raise exc.CommandError('Mapping not found: %s' % args.counter_name)
    else:
        field_labels = [
            'Mapping id', 'Value', 'Cost', 'Type', 'Field id', 'Service id',
            'Group id'
        ]
        fields = [
            'mapping_id', 'value', 'cost', 'type', 'field_id', 'service_id',
            'group_id'
        ]
        utils.print_list(mappings, fields, field_labels, sortby=0)
Beispiel #13
0
def do_module_list(cc, args):
    '''List the samples for this meters.'''
    try:
        modules = cc.modules.list()
    except exceptions.NotFound:
        raise exc.CommandError('Modules not found')
    else:
        field_labels = ['Module', 'Enabled', 'Priority']
        fields = ['module_id', 'enabled', 'priority']
        utils.print_list(modules, fields, field_labels,
                         sortby=0)
Beispiel #14
0
def do_module_list(cc, args):
    '''List the samples for this meters.'''
    try:
        modules = cc.modules.list()
    except exc.HTTPNotFound:
        raise exc.CommandError('Modules not found: %s' % args.counter_name)
    else:
        field_labels = ['Module', 'Enabled']
        fields = ['module_id', 'enabled']
        utils.print_list(modules, fields, field_labels,
                         sortby=0)
Beispiel #15
0
def do_hashmap_group_list(cc, args={}):
    """List groups."""
    try:
        groups = cc.hashmap.groups.list()
    except exceptions.NotFound:
        raise exc.CommandError('Groups not found.')
    else:
        field_labels = ['Name',
                        'Group id']
        fields = ['name', 'group_id']
        utils.print_list(groups, fields, field_labels,
                         sortby=0)
Beispiel #16
0
def do_hashmap_threshold_list(cc, args={}):
    """List thresholds."""
    if (args.group_id is None and
       args.service_id is None and args.field_id is None):
        raise exc.CommandError("Provide either group-id, service-id or "
                               "field-id")
    try:
        thresholds = cc.hashmap.thresholds.list(service_id=args.service_id,
                                                field_id=args.field_id,
                                                group_id=args.group_id,
                                                no_group=args.no_group)
    except exceptions.NotFound:
        raise exc.CommandError('Thresholds not found')
    else:
        field_labels = ['Threshold id', 'Level', 'Cost',
                        'Type', 'Field id',
                        'Service id', 'Group id', 'Tenant id']
        fields = ['threshold_id', 'level', 'cost',
                  'type', 'field_id',
                  'service_id', 'group_id', 'tenant_id']
        utils.print_list(thresholds, fields, field_labels, sortby=0)
    def main(self, argv):
        parsed = self.parse_args(argv)
        if parsed == 0:
            return 0
        api_version, args = parsed

        # Short-circuit and deal with help command right away.
        if args.func == self.do_help:
            self.do_help(args)
            return 0
        elif args.func == self.do_bash_completion:
            self.do_bash_completion(args)
            return 0

        if not ((self.auth_plugin.opts.get('token')
                 or self.auth_plugin.opts.get('auth_token'))
                and self.auth_plugin.opts['endpoint']):
            if not self.auth_plugin.opts['username']:
                raise exc.CommandError("You must provide a username via "
                                       "either --os-username or via "
                                       "env[OS_USERNAME]")

            if not self.auth_plugin.opts['password']:
                raise exc.CommandError("You must provide a password via "
                                       "either --os-password or via "
                                       "env[OS_PASSWORD]")

            if self.no_project_and_domain_set(args):
                # steer users towards Keystone V3 API
                raise exc.CommandError("You must provide a project_id via "
                                       "either --os-project-id or via "
                                       "env[OS_PROJECT_ID] and "
                                       "a domain_name via either "
                                       "--os-user-domain-name or via "
                                       "env[OS_USER_DOMAIN_NAME] or "
                                       "a domain_id via either "
                                       "--os-user-domain-id or via "
                                       "env[OS_USER_DOMAIN_ID]")

            if not (self.auth_plugin.opts['tenant_id']
                    or self.auth_plugin.opts['tenant_name']):
                raise exc.CommandError("You must provide a tenant_id via "
                                       "either --os-tenant-id or via "
                                       "env[OS_TENANT_ID]")

            if not self.auth_plugin.opts['auth_url']:
                raise exc.CommandError("You must provide an auth url via "
                                       "either --os-auth-url or via "
                                       "env[OS_AUTH_URL]")

        client_kwargs = vars(args)
        client_kwargs.update(self.auth_plugin.opts)
        client_kwargs['auth_plugin'] = self.auth_plugin
        client = ckclient.get_client(api_version, **client_kwargs)
        # call whatever callback was selected
        try:
            args.func(client, args)
        except exc.HTTPUnauthorized:
            raise exc.CommandError("Invalid OpenStack Identity credentials.")
Beispiel #18
0
def do_module_set_priority(cc, args):
    '''Set module priority.'''
    try:
        module = cc.modules.get(module_id=args.name)
        module.set_priority(args.priority)
    except exceptions.NotFound:
        raise exc.CommandError('Module not found: %s' % args.name)
    else:
        field_labels = ['Module', 'Enabled', 'Priority']
        fields = ['module_id', 'enabled', 'priority']
        modules = [cc.modules.get(module_id=args.name)]
        utils.print_list(modules, fields, field_labels,
                         sortby=0)
Beispiel #19
0
def do_module_disable(cc, args):
    '''Disable a module.'''
    try:
        module = cc.modules.get(module_id=args.name)
        module.disable()
    except exc.HTTPNotFound:
        raise exc.CommandError('Modules not found: %s' % args.counter_name)
    else:
        field_labels = ['Module', 'Enabled']
        fields = ['module_id', 'enabled']
        modules = [cc.modules.get(module_id=args.name)]
        utils.print_list(modules, fields, field_labels,
                         sortby=0)
def args_array_to_dict(kwargs, key_to_convert):
    values_to_convert = kwargs.get(key_to_convert)
    if values_to_convert:
        try:
            kwargs[key_to_convert] = dict(
                v.split("=", 1) for v in values_to_convert)
        except ValueError:
            msg = _("%(key)s must be a list of key=value "
                    "not '%(value)s'") % {
                        "key": key_to_convert,
                        "value": values_to_convert
                    }
            raise exc.CommandError(msg)
    return kwargs
Beispiel #21
0
def do_pyscripts_script_update(cc, args={}):
    """Update a mapping."""
    excluded_fields = [
        'checksum',
    ]
    with open(args.file) as fp:
        content = fp.read()
    try:
        script = cc.pyscripts.scripts.get(script_id=args.script_id)
    except exceptions.NotFound:
        raise exc.CommandError('Script not found: %s' % args.script_id)
    script_dict = script.to_dict()
    for field in excluded_fields:
        del script_dict[field]
    script_dict['data'] = content
    cc.pyscripts.scripts.update(**script_dict)
Beispiel #22
0
def do_hashmap_mapping_update(cc, args={}):
    """Update a mapping."""
    arg_to_field_mapping = {
        'mapping_id': 'mapping_id',
        'cost': 'cost',
        'value': 'value',
        'type': 'type',
        'group_id': 'group_id',
    }
    try:
        mapping = cc.hashmap.mappings.get(mapping_id=args.mapping_id)
    except exc.HTTPNotFound:
        raise exc.CommandError('Modules not found: %s' % args.counter_name)
    for k, v in vars(args).items():
        if k in arg_to_field_mapping:
            if v is not None:
                setattr(mapping, k, v)
    cc.hashmap.mappings.update(**mapping.dirty_fields)
Beispiel #23
0
def do_hashmap_threshold_update(cc, args={}):
    """Update a threshold."""
    arg_to_field_mapping = {
        'threshold_id': 'threshold_id',
        'cost': 'cost',
        'level': 'level',
        'map_type': 'map_type',
        'group_id': 'group_id',
    }
    try:
        threshold = cc.hashmap.thresholds.get(threshold_id=args.threshold_id)
    except exc.HTTPNotFound:
        raise exc.CommandError('Modules not found: %s' % args.counter_name)
    for k, v in vars(args).items():
        if k in arg_to_field_mapping:
            if v is not None:
                setattr(threshold, k, v)
    cc.hashmap.thresholds.update(**threshold.dirty_fields)
def args_array_to_list_of_dicts(kwargs, key_to_convert):
    """Converts ['a=1;b=2','c=3;d=4'] to [{a:1,b:2},{c:3,d:4}]."""
    values_to_convert = kwargs.get(key_to_convert)
    if values_to_convert:
        try:
            kwargs[key_to_convert] = []
            for lst in values_to_convert:
                pairs = lst.split(";")
                dct = dict()
                for pair in pairs:
                    kv = pair.split("=", 1)
                    dct[kv[0]] = kv[1].strip(" \"'")  # strip spaces and quotes
                kwargs[key_to_convert].append(dct)
        except Exception:
            msg = _("%(key)s must be a list of "
                    "key1=value1;key2=value2;... not '%(value)s'") % {
                        "key": key_to_convert,
                        "value": values_to_convert
                    }
            raise exc.CommandError(msg)
    return kwargs
Beispiel #25
0
def do_hashmap_field_delete(cc, args={}):
    """Delete a field."""
    try:
        cc.hashmap.fields.delete(field_id=args.field_id)
    except exc.HTTPNotFound:
        raise exc.CommandError('Field not found: %s' % args.counter_name)
Beispiel #26
0
def do_hashmap_service_delete(cc, args={}):
    """Delete a service."""
    try:
        cc.hashmap.services.delete(service_id=args.service_id)
    except exc.HTTPNotFound:
        raise exc.CommandError('Service not found: %s' % args.counter_name)
Beispiel #27
0
def do_pyscripts_script_delete(cc, args={}):
    """Delete a script."""
    try:
        cc.pyscripts.scripts.delete(script_id=args.script_id)
    except exceptions.NotFound:
        raise exc.CommandError('Script not found: %s' % args.script_id)
Beispiel #28
0
def do_hashmap_threshold_delete(cc, args={}):
    """Delete a threshold."""
    try:
        cc.hashmap.thresholds.delete(threshold_id=args.threshold_id)
    except exc.HTTPNotFound:
        raise exc.CommandError('Threshold not found: %s' % args.threshold_id)
def _get_keystone_session(**kwargs):
    # TODO(fabgia): the heavy lifting here should be really done by Keystone.
    # Unfortunately Keystone does not support a richer method to perform
    # discovery and return a single viable URL. A bug against Keystone has
    # been filed: https://bugs.launchpad.net/python-keystoneclient/+bug/1330677

    # first create a Keystone session
    cacert = kwargs.pop('cacert', None)
    cert = kwargs.pop('cert', None)
    key = kwargs.pop('key', None)
    insecure = kwargs.pop('insecure', False)
    auth_url = kwargs.pop('auth_url', None)
    project_id = kwargs.pop('project_id', None)
    project_name = kwargs.pop('project_name', None)

    if insecure:
        verify = False
    else:
        verify = cacert or True

    if cert and key:
        # passing cert and key together is deprecated in favour of the
        # requests lib form of having the cert and key as a tuple
        cert = (cert, key)

    # create the keystone client session
    ks_session = session.Session(verify=verify, cert=cert)
    v2_auth_url, v3_auth_url = _discover_auth_versions(ks_session, auth_url)

    username = kwargs.pop('username', None)
    user_id = kwargs.pop('user_id', None)
    user_domain_name = kwargs.pop('user_domain_name', None)
    user_domain_id = kwargs.pop('user_domain_id', None)
    project_domain_name = kwargs.pop('project_domain_name', None)
    project_domain_id = kwargs.pop('project_domain_id', None)
    auth = None

    use_domain = (user_domain_id or user_domain_name or
                  project_domain_id or project_domain_name)
    use_v3 = v3_auth_url and (use_domain or (not v2_auth_url))
    use_v2 = v2_auth_url and not use_domain

    if use_v3:
        # the auth_url as v3 specified
        # e.g. http://no.where:5000/v3
        # Keystone will return only v3 as viable option
        auth = v3_auth.Password(
            v3_auth_url,
            username=username,
            password=kwargs.pop('password', None),
            user_id=user_id,
            user_domain_name=user_domain_name,
            user_domain_id=user_domain_id,
            project_name=project_name,
            project_id=project_id,
            project_domain_name=project_domain_name,
            project_domain_id=project_domain_id)
    elif use_v2:
        # the auth_url as v2 specified
        # e.g. http://no.where:5000/v2.0
        # Keystone will return only v2 as viable option
        auth = v2_auth.Password(
            v2_auth_url,
            username,
            kwargs.pop('password', None),
            tenant_id=project_id,
            tenant_name=project_name)
    else:
        raise exc.CommandError('Unable to determine the Keystone version '
                               'to authenticate with using the given '
                               'auth_url.')

    ks_session.auth = auth
    return ks_session
Beispiel #30
0
def do_hashmap_mapping_delete(cc, args={}):
    """Delete a mapping."""
    try:
        cc.hashmap.mappings.delete(mapping_id=args.mapping_id)
    except exc.HTTPNotFound:
        raise exc.CommandError('Mapping not found: %s' % args.mapping_id)