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())
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())
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)
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)
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)
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)
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)
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()
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)
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)
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)
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)
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.")
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)
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
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)
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)
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
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)
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)
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)
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
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)