1717
1818import logging
1919import six
20- import sys
2120
2221from cliff import command
2322from cliff import lister
2726
2827
2928class CreateProject (show .ShowOne ):
30- """Create project command """
29+ """Create new project """
3130
3231 log = logging .getLogger (__name__ + '.CreateProject' )
3332
3433 def get_parser (self , prog_name ):
3534 parser = super (CreateProject , self ).get_parser (prog_name )
3635 parser .add_argument (
37- 'project_name ' ,
36+ 'name ' ,
3837 metavar = '<project-name>' ,
39- help = 'New project name' )
38+ help = 'New project name' ,
39+ )
4040 parser .add_argument (
4141 '--domain' ,
4242 metavar = '<project-domain>' ,
43- help = 'References the domain name or ID which owns the project' )
43+ help = 'Domain owning the project (name or ID)' ,
44+ )
4445 parser .add_argument (
4546 '--description' ,
4647 metavar = '<project-description>' ,
47- help = 'New project description' )
48- # FIXME (stevemar): need to update enabled/disabled as per Dolph's
49- # comments in 19999/4
48+ help = 'New project description' ,
49+ )
5050 enable_group = parser .add_mutually_exclusive_group ()
5151 enable_group .add_argument (
5252 '--enable' ,
53- dest = 'enabled' ,
5453 action = 'store_true' ,
55- default = True ,
56- help = 'Enable project' )
54+ help = 'Enable project' ,
55+ )
5756 enable_group .add_argument (
5857 '--disable' ,
59- dest = 'enabled ' ,
60- action = 'store_false ' ,
61- help = 'Disable project' )
58+ action = 'store_true ' ,
59+ help = 'Disable project ' ,
60+ )
6261 return parser
6362
6463 def take_action (self , parsed_args ):
6564 self .log .debug ('take_action(%s)' % parsed_args )
6665 identity_client = self .app .client_manager .identity
6766
6867 if parsed_args .domain :
69- domain = utils .find_resource (identity_client .domains ,
70- parsed_args .domain ).id
68+ domain = utils .find_resource (
69+ identity_client .domains ,
70+ parsed_args .domain ,
71+ ).id
7172 else :
7273 domain = None
7374
75+ enabled = True
76+ if parsed_args .disable :
77+ enabled = False
78+
7479 project = identity_client .projects .create (
75- parsed_args .project_name ,
76- domain = domain ,
80+ parsed_args .name ,
81+ domain ,
7782 description = parsed_args .description ,
78- enabled = parsed_args .enabled )
83+ enabled = enabled ,
84+ )
7985
8086 info = {}
8187 info .update (project ._info )
8288 return zip (* sorted (six .iteritems (info )))
8389
8490
8591class DeleteProject (command .Command ):
86- """Delete project command """
92+ """Delete project"""
8793
8894 log = logging .getLogger (__name__ + '.DeleteProject' )
8995
@@ -92,20 +98,25 @@ def get_parser(self, prog_name):
9298 parser .add_argument (
9399 'project' ,
94100 metavar = '<project>' ,
95- help = 'Name or ID of project to delete' )
101+ help = 'Project to delete (name or ID)' ,
102+ )
96103 return parser
97104
98105 def take_action (self , parsed_args ):
99106 self .log .debug ('take_action(%s)' % parsed_args )
100107 identity_client = self .app .client_manager .identity
101- project = utils .find_resource (identity_client .projects ,
102- parsed_args .project )
108+
109+ project = utils .find_resource (
110+ identity_client .projects ,
111+ parsed_args .project ,
112+ )
113+
103114 identity_client .projects .delete (project .id )
104115 return
105116
106117
107118class ListProject (lister .Lister ):
108- """List project command """
119+ """List projects """
109120
110121 log = logging .getLogger (__name__ + '.ListProject' )
111122
@@ -115,7 +126,8 @@ def get_parser(self, prog_name):
115126 '--long' ,
116127 action = 'store_true' ,
117128 default = False ,
118- help = 'Additional fields are listed in output' )
129+ help = 'List additional fields in output' ,
130+ )
119131 return parser
120132
121133 def take_action (self , parsed_args ):
@@ -133,7 +145,7 @@ def take_action(self, parsed_args):
133145
134146
135147class SetProject (command .Command ):
136- """Set project command """
148+ """Set project properties """
137149
138150 log = logging .getLogger (__name__ + '.SetProject' )
139151
@@ -142,54 +154,75 @@ def get_parser(self, prog_name):
142154 parser .add_argument (
143155 'project' ,
144156 metavar = '<project>' ,
145- help = 'Name or ID of project to change' )
157+ help = 'Project to change (name or ID)' ,
158+ )
146159 parser .add_argument (
147160 '--name' ,
148161 metavar = '<new-project-name>' ,
149- help = 'New project name' )
162+ help = 'New project name' ,
163+ )
150164 parser .add_argument (
151165 '--domain' ,
152166 metavar = '<project-domain>' ,
153- help = 'New domain name or ID that will now own the project' )
167+ help = 'New domain owning the project (name or ID)' ,
168+ )
154169 parser .add_argument (
155170 '--description' ,
156171 metavar = '<project-description>' ,
157- help = 'New project description' )
172+ help = 'New project description' ,
173+ )
158174 enable_group = parser .add_mutually_exclusive_group ()
159175 enable_group .add_argument (
160176 '--enable' ,
161- dest = 'enabled' ,
162177 action = 'store_true' ,
163- default = True ,
164- help = 'Enable project (default)' )
178+ help = 'Enable project' ,
179+ )
165180 enable_group .add_argument (
166181 '--disable' ,
167- dest = 'enabled ' ,
168- action = 'store_false ' ,
169- help = 'Disable project' )
182+ action = 'store_true ' ,
183+ help = 'Disable project ' ,
184+ )
170185 return parser
171186
172187 def take_action (self , parsed_args ):
173188 self .log .debug ('take_action(%s)' % parsed_args )
174189 identity_client = self .app .client_manager .identity
175- project = utils .find_resource (identity_client .projects ,
176- parsed_args .project )
177- kwargs = {}
190+
191+ if (not parsed_args .name
192+ and not parsed_args .description
193+ and not parsed_args .domain
194+ and not parsed_args .enable
195+ and not parsed_args .disable ):
196+ return
197+
198+ project = utils .find_resource (
199+ identity_client .projects ,
200+ parsed_args .project ,
201+ )
202+
203+ kwargs = project ._info
178204 if parsed_args .name :
179205 kwargs ['name' ] = parsed_args .name
180206 if parsed_args .domain :
181- domain = utils .find_resource (
182- identity_client .domains , parsed_args .domain ).id
183- kwargs ['domain' ] = domain
207+ kwargs ['domain' ] = utils .find_resource (
208+ identity_client .domains ,
209+ parsed_args .domain ,
210+ ).id
184211 if parsed_args .description :
185212 kwargs ['description' ] = parsed_args .description
186- if 'enabled' in parsed_args :
187- kwargs ['enabled' ] = parsed_args .enabled
188-
189- if kwargs == {}:
190- sys .stdout .write ("Project not updated, no arguments present" )
191- return
192- project .update (** kwargs )
213+ if parsed_args .enable :
214+ kwargs ['enabled' ] = True
215+ if parsed_args .disable :
216+ kwargs ['enabled' ] = False
217+ if 'id' in kwargs :
218+ del kwargs ['id' ]
219+ if 'domain_id' in kwargs :
220+ # Hack around borken Identity API arg names
221+ kwargs .update (
222+ {'domain' : kwargs .pop ('domain_id' )}
223+ )
224+
225+ identity_client .projects .update (project .id , ** kwargs )
193226 return
194227
195228
0 commit comments