2424from cliff import lister
2525from cliff import show
2626
27+ from keystoneclient import exceptions as identity_exc
2728from openstackclient .common import command
29+ from openstackclient .common import exceptions
2830from openstackclient .common import utils
2931
3032
31- class Create_Service (command .OpenStackCommand ):
33+ class CreateService (command .OpenStackCommand , show . ShowOne ):
3234 """Create service command"""
3335
34- # FIXME(dtroyer): Service commands are still WIP
3536 api = 'identity'
36- log = logging .getLogger (__name__ )
37+ log = logging .getLogger (__name__ + '.CreateService' )
3738
3839 def get_parser (self , prog_name ):
39- parser = super (Create_Service , self ).get_parser (prog_name )
40+ parser = super (CreateService , self ).get_parser (prog_name )
4041 parser .add_argument (
41- 'service_name ' ,
42+ 'name ' ,
4243 metavar = '<service-name>' ,
4344 help = 'New service name' )
45+ parser .add_argument (
46+ '--type' ,
47+ metavar = '<service-type>' ,
48+ required = True ,
49+ help = 'New service type' ,
50+ )
51+ parser .add_argument (
52+ '--description' ,
53+ metavar = '<service-description>' ,
54+ help = 'New service description' ,
55+ )
4456 return parser
4557
4658 def get_data (self , parsed_args ):
47- self .log .info ('v2.Create_Service.get_data(%s)' % parsed_args )
59+ self .log .debug ('get_data(%s)' % parsed_args )
60+ identity_client = self .app .client_manager .identity
61+ service = identity_client .services .create (
62+ parsed_args .name ,
63+ parsed_args .type ,
64+ parsed_args .description ,
65+ )
66+
67+ info = {}
68+ info .update (service ._info )
69+ return zip (* sorted (info .iteritems ()))
4870
4971
50- class List_Service (command .OpenStackCommand , lister .Lister ):
72+ class DeleteService (command .OpenStackCommand ):
73+ """Delete service command"""
74+
75+ api = 'identity'
76+ log = logging .getLogger (__name__ + '.DeleteService' )
77+
78+ def get_parser (self , prog_name ):
79+ parser = super (DeleteService , self ).get_parser (prog_name )
80+ parser .add_argument (
81+ 'service' ,
82+ metavar = '<service-id>' ,
83+ help = 'ID of service to delete' ,
84+ )
85+ return parser
86+
87+ def run (self , parsed_args ):
88+ self .log .debug ('run(%s)' % parsed_args )
89+ identity_client = self .app .client_manager .identity
90+ identity_client .services .delete (parsed_args .service )
91+ return
92+
93+
94+ class ListService (command .OpenStackCommand , lister .Lister ):
5195 """List service command"""
5296
5397 api = 'identity'
54- log = logging .getLogger (__name__ )
98+ log = logging .getLogger (__name__ + '.ListService' )
5599
56100 def get_parser (self , prog_name ):
57- parser = super (List_Service , self ).get_parser (prog_name )
101+ parser = super (ListService , self ).get_parser (prog_name )
58102 parser .add_argument (
59103 '--long' ,
60104 action = 'store_true' ,
@@ -63,7 +107,7 @@ def get_parser(self, prog_name):
63107 return parser
64108
65109 def get_data (self , parsed_args ):
66- self .log .debug ('v2.List_Service. get_data(%s)' % parsed_args )
110+ self .log .debug ('get_data(%s)' % parsed_args )
67111 if parsed_args .long :
68112 columns = ('ID' , 'Name' , 'Type' , 'Description' )
69113 else :
@@ -73,33 +117,43 @@ def get_data(self, parsed_args):
73117 (utils .get_item_properties (
74118 s , columns ,
75119 formatters = {},
76- ) for s in data ),
77- )
120+ ) for s in data ),
121+ )
78122
79123
80- class Show_Service (command .OpenStackCommand , show .ShowOne ):
124+ class ShowService (command .OpenStackCommand , show .ShowOne ):
81125 """Show service command"""
82126
83127 api = 'identity'
84- log = logging .getLogger (__name__ )
128+ log = logging .getLogger (__name__ + '.ShowService' )
85129
86130 def get_parser (self , prog_name ):
87- parser = super (Show_Service , self ).get_parser (prog_name )
131+ parser = super (ShowService , self ).get_parser (prog_name )
88132 parser .add_argument (
89133 'service' ,
90134 metavar = '<service>' ,
91- help = 'Name or ID of service to display' )
135+ help = 'Type, name or ID of service to display' )
92136 return parser
93137
94138 def get_data (self , parsed_args ):
95- self .log .info ( 'v2.Show_Service. get_data(%s)' % parsed_args )
139+ self .log .debug ( ' get_data(%s)' % parsed_args )
96140 identity_client = self .app .client_manager .identity
97- service = utils .find_resource (
98- identity_client .services , parsed_args .service )
141+ try :
142+ # search for the usual ID or name
143+ service = utils .find_resource (
144+ identity_client .services , parsed_args .service )
145+ except exceptions .CommandError :
146+ try :
147+ # search for service type
148+ service = identity_client .services .find (
149+ type = parsed_args .service )
150+ # FIXME(dtroyer): This exception should eventually come from
151+ # common client exceptions
152+ except identity_exc .NotFound :
153+ msg = "No service with a type, name or ID of '%s' exists." % \
154+ name_or_id
155+ raise exceptions .CommandError (msg )
99156
100157 info = {}
101- info .update (user ._info )
102-
103- columns = sorted (info .keys ())
104- values = [info [c ] for c in columns ]
105- return (columns , values )
158+ info .update (service ._info )
159+ return zip (* sorted (info .iteritems ()))
0 commit comments