Update service commands
* add {create|delete} service
* allow 'service' arg to also search type attribute in show command
Change-Id: I992359dc95fab1fbdab0666d5cbb75e44ba6e0f3
			
			
This commit is contained in:
		| @@ -47,10 +47,17 @@ def find_resource(manager, name_or_id): | ||||
|     # finally try to find entity by name | ||||
|     try: | ||||
|         return manager.find(name=name_or_id) | ||||
|     except exceptions.NotFound: | ||||
|     # FIXME(dtroyer): The exception to catch here is dependent on which | ||||
|     #                 client library the manager passed in belongs to. | ||||
|     #                 Eventually this should be pulled from a common set | ||||
|     #                 of client exceptions. | ||||
|     except Exception as ex: | ||||
|         if '.NotFound' in type(ex).__name__: | ||||
|             msg = "No %s with a name or ID of '%s' exists." % \ | ||||
|                 (manager.resource_class.__name__.lower(), name_or_id) | ||||
|             raise exceptions.CommandError(msg) | ||||
|         else: | ||||
|             raise | ||||
|  | ||||
|  | ||||
| def get_item_properties(item, fields, mixed_case_fields=[], formatters={}): | ||||
|   | ||||
| @@ -24,37 +24,81 @@ import logging | ||||
| from cliff import lister | ||||
| from cliff import show | ||||
|  | ||||
| from keystoneclient import exceptions as identity_exc | ||||
| from openstackclient.common import command | ||||
| from openstackclient.common import exceptions | ||||
| from openstackclient.common import utils | ||||
|  | ||||
|  | ||||
| class Create_Service(command.OpenStackCommand): | ||||
| class CreateService(command.OpenStackCommand, show.ShowOne): | ||||
|     """Create service command""" | ||||
|  | ||||
|     # FIXME(dtroyer): Service commands are still WIP | ||||
|     api = 'identity' | ||||
|     log = logging.getLogger(__name__) | ||||
|     log = logging.getLogger(__name__ + '.CreateService') | ||||
|  | ||||
|     def get_parser(self, prog_name): | ||||
|         parser = super(Create_Service, self).get_parser(prog_name) | ||||
|         parser = super(CreateService, self).get_parser(prog_name) | ||||
|         parser.add_argument( | ||||
|             'service_name', | ||||
|             'name', | ||||
|             metavar='<service-name>', | ||||
|             help='New service name') | ||||
|         parser.add_argument( | ||||
|             '--type', | ||||
|             metavar='<service-type>', | ||||
|             required=True, | ||||
|             help='New service type', | ||||
|         ) | ||||
|         parser.add_argument( | ||||
|             '--description', | ||||
|             metavar='<service-description>', | ||||
|             help='New service description', | ||||
|         ) | ||||
|         return parser | ||||
|  | ||||
|     def get_data(self, parsed_args): | ||||
|         self.log.info('v2.Create_Service.get_data(%s)' % parsed_args) | ||||
|         self.log.debug('get_data(%s)' % parsed_args) | ||||
|         identity_client = self.app.client_manager.identity | ||||
|         service = identity_client.services.create( | ||||
|             parsed_args.name, | ||||
|             parsed_args.type, | ||||
|             parsed_args.description, | ||||
|         ) | ||||
|  | ||||
|         info = {} | ||||
|         info.update(service._info) | ||||
|         return zip(*sorted(info.iteritems())) | ||||
|  | ||||
|  | ||||
| class List_Service(command.OpenStackCommand, lister.Lister): | ||||
| class DeleteService(command.OpenStackCommand): | ||||
|     """Delete service command""" | ||||
|  | ||||
|     api = 'identity' | ||||
|     log = logging.getLogger(__name__ + '.DeleteService') | ||||
|  | ||||
|     def get_parser(self, prog_name): | ||||
|         parser = super(DeleteService, self).get_parser(prog_name) | ||||
|         parser.add_argument( | ||||
|             'service', | ||||
|             metavar='<service-id>', | ||||
|             help='ID of service to delete', | ||||
|         ) | ||||
|         return parser | ||||
|  | ||||
|     def run(self, parsed_args): | ||||
|         self.log.debug('run(%s)' % parsed_args) | ||||
|         identity_client = self.app.client_manager.identity | ||||
|         identity_client.services.delete(parsed_args.service) | ||||
|         return | ||||
|  | ||||
|  | ||||
| class ListService(command.OpenStackCommand, lister.Lister): | ||||
|     """List service command""" | ||||
|  | ||||
|     api = 'identity' | ||||
|     log = logging.getLogger(__name__) | ||||
|     log = logging.getLogger(__name__ + '.ListService') | ||||
|  | ||||
|     def get_parser(self, prog_name): | ||||
|         parser = super(List_Service, self).get_parser(prog_name) | ||||
|         parser = super(ListService, self).get_parser(prog_name) | ||||
|         parser.add_argument( | ||||
|             '--long', | ||||
|             action='store_true', | ||||
| @@ -63,7 +107,7 @@ class List_Service(command.OpenStackCommand, lister.Lister): | ||||
|         return parser | ||||
|  | ||||
|     def get_data(self, parsed_args): | ||||
|         self.log.debug('v2.List_Service.get_data(%s)' % parsed_args) | ||||
|         self.log.debug('get_data(%s)' % parsed_args) | ||||
|         if parsed_args.long: | ||||
|             columns = ('ID', 'Name', 'Type', 'Description') | ||||
|         else: | ||||
| @@ -77,29 +121,39 @@ class List_Service(command.OpenStackCommand, lister.Lister): | ||||
|                ) | ||||
|  | ||||
|  | ||||
| class Show_Service(command.OpenStackCommand, show.ShowOne): | ||||
| class ShowService(command.OpenStackCommand, show.ShowOne): | ||||
|     """Show service command""" | ||||
|  | ||||
|     api = 'identity' | ||||
|     log = logging.getLogger(__name__) | ||||
|     log = logging.getLogger(__name__ + '.ShowService') | ||||
|  | ||||
|     def get_parser(self, prog_name): | ||||
|         parser = super(Show_Service, self).get_parser(prog_name) | ||||
|         parser = super(ShowService, self).get_parser(prog_name) | ||||
|         parser.add_argument( | ||||
|             'service', | ||||
|             metavar='<service>', | ||||
|             help='Name or ID of service to display') | ||||
|             help='Type, name or ID of service to display') | ||||
|         return parser | ||||
|  | ||||
|     def get_data(self, parsed_args): | ||||
|         self.log.info('v2.Show_Service.get_data(%s)' % parsed_args) | ||||
|         self.log.debug('get_data(%s)' % parsed_args) | ||||
|         identity_client = self.app.client_manager.identity | ||||
|         try: | ||||
|             # search for the usual ID or name | ||||
|             service = utils.find_resource( | ||||
|                 identity_client.services, parsed_args.service) | ||||
|         except exceptions.CommandError: | ||||
|             try: | ||||
|                 # search for service type | ||||
|                 service = identity_client.services.find( | ||||
|                     type=parsed_args.service) | ||||
|             # FIXME(dtroyer): This exception should eventually come from | ||||
|             #                 common client exceptions | ||||
|             except identity_exc.NotFound: | ||||
|                 msg = "No service with a type, name or ID of '%s' exists." % \ | ||||
|                     name_or_id | ||||
|                 raise exceptions.CommandError(msg) | ||||
|  | ||||
|         info = {} | ||||
|         info.update(user._info) | ||||
|  | ||||
|         columns = sorted(info.keys()) | ||||
|         values = [info[c] for c in columns] | ||||
|         return (columns, values) | ||||
|         info.update(service._info) | ||||
|         return zip(*sorted(info.iteritems())) | ||||
|   | ||||
							
								
								
									
										8
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								setup.py
									
									
									
									
									
								
							| @@ -62,9 +62,11 @@ setuptools.setup( | ||||
|             'list_server=openstackclient.compute.v2.server:List_Server', | ||||
|             'show_server=openstackclient.compute.v2.server:Show_Server', | ||||
|             'create_service=' + | ||||
|                 'openstackclient.identity.v2_0.service:Create_Service', | ||||
|             'list_service=openstackclient.identity.v2_0.service:List_Service', | ||||
|             'show_service=openstackclient.identity.v2_0.service:Show_Service', | ||||
|                 'openstackclient.identity.v2_0.service:CreateService', | ||||
|             'delete_service=' + | ||||
|                 'openstackclient.identity.v2_0.service:DeleteService', | ||||
|             'list_service=openstackclient.identity.v2_0.service:ListService', | ||||
|             'show_service=openstackclient.identity.v2_0.service:ShowService', | ||||
|             'create_tenant=' + | ||||
|                 'openstackclient.identity.v2_0.tenant:Create_Tenant', | ||||
|             'delete_tenant=' + | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Dean Troyer
					Dean Troyer