1616"""Volume v1 Volume action implementations"""
1717
1818import logging
19- import sys
2019
2120from cliff import command
2221from cliff import lister
2322from cliff import show
2423
24+ from openstackclient .common import parseractions
2525from openstackclient .common import utils
2626
2727
@@ -63,32 +63,34 @@ def get_parser(self, prog_name):
6363 parser .add_argument (
6464 '--user-id' ,
6565 metavar = '<user-id>' ,
66- help = 'User id derived from context' ,
66+ help = 'Override user id derived from context (admin only) ' ,
6767 )
6868 parser .add_argument (
6969 '--project-id' ,
7070 metavar = '<project-id>' ,
71- help = 'Project id derived from context' ,
71+ help = 'Override project id derived from context (admin only) ' ,
7272 )
7373 parser .add_argument (
7474 '--availability-zone' ,
7575 metavar = '<availability-zone>' ,
76- help = 'Availability Zone to use' ,
76+ help = 'Availability zone to use' ,
7777 )
7878 parser .add_argument (
7979 '--property' ,
8080 metavar = '<key=value>' ,
81- help = 'Optional property to set on volume creation' ,
81+ action = parseractions .KeyValueAction ,
82+ help = 'Property to store for this volume '
83+ '(repeat option to set multiple properties)' ,
8284 )
8385 parser .add_argument (
84- '--image-ref ' ,
85- metavar = '<image-ref >' ,
86- help = 'reference to an image stored in glance ' ,
86+ '--image' ,
87+ metavar = '<image>' ,
88+ help = 'Reference to a stored image ' ,
8789 )
8890 parser .add_argument (
89- '--source-volid ' ,
90- metavar = '<source-volid >' ,
91- help = 'ID of source volume to clone from ' ,
91+ '--source' ,
92+ metavar = '<volume >' ,
93+ help = 'Source for volume clone' ,
9294 )
9395
9496 return parser
@@ -98,22 +100,25 @@ def take_action(self, parsed_args):
98100
99101 volume_client = self .app .client_manager .volume
100102
101- meta = None
102- if parsed_args .meta_data :
103- meta = dict (v .split ('=' ) for v in parsed_args .meta_data .split (' ' ))
103+ source_volume = None
104+ if parsed_args .source :
105+ source_volume = utils .find_resource (
106+ volume_client .volumes ,
107+ parsed_args .source ,
108+ ).id
104109
105110 volume = volume_client .volumes .create (
106111 parsed_args .size ,
107112 parsed_args .snapshot_id ,
108- parsed_args . source_volid ,
113+ source_volume ,
109114 parsed_args .name ,
110115 parsed_args .description ,
111116 parsed_args .volume_type ,
112117 parsed_args .user_id ,
113118 parsed_args .project_id ,
114119 parsed_args .availability_zone ,
115- meta ,
116- parsed_args .image_ref
120+ parsed_args . property ,
121+ parsed_args .image
117122 )
118123
119124 return zip (* sorted (volume ._info .iteritems ()))
@@ -175,13 +180,13 @@ def get_parser(self, prog_name):
175180 '--all-tenants' ,
176181 action = 'store_true' ,
177182 default = False ,
178- help = 'Display information from all tenants (Admin- only)' ,
183+ help = 'Display information from all tenants (admin only)' ,
179184 )
180185 parser .add_argument (
181186 '--long' ,
182187 action = 'store_true' ,
183188 default = False ,
184- help = 'Display meta-data ' ,
189+ help = 'Display properties ' ,
185190 )
186191 return parser
187192
@@ -221,41 +226,48 @@ def get_parser(self, prog_name):
221226 parser .add_argument (
222227 'volume' ,
223228 metavar = '<volume>' ,
224- help = 'Name or ID of volume to change' )
229+ help = 'Name or ID of volume to change' ,
230+ )
225231 parser .add_argument (
226232 '--name' ,
227- metavar = '<new-volume-name>' ,
228- help = 'New volume name' )
233+ metavar = '<new-name>' ,
234+ help = 'New volume name' ,
235+ )
229236 parser .add_argument (
230237 '--description' ,
231- metavar = '<volume-description>' ,
232- help = 'New volume description' )
238+ metavar = '<new-description>' ,
239+ help = 'New volume description' ,
240+ )
233241 parser .add_argument (
234- '--meta-data ' ,
242+ '--property ' ,
235243 metavar = '<key=value>' ,
236- help = 'meta-data to add to volume' )
244+ action = parseractions .KeyValueAction ,
245+ help = 'Property to add/change for this volume '
246+ '(repeat option to set multiple properties)' ,
247+ )
237248 return parser
238249
239250 def take_action (self , parsed_args ):
240251 self .log .debug ('take_action(%s)' % parsed_args )
241252 volume_client = self .app .client_manager .volume
242253 volume = utils .find_resource (volume_client .volumes , parsed_args .volume )
243254
244- meta = None
245255 if parsed_args .property :
246- meta = dict ( v . split ( '=' ) for v in parsed_args .property . split ( ' ' ))
247- volume_client .volumes .set_metadata (volume .id , meta )
256+ print "property: %s" % parsed_args .property
257+ volume_client .volumes .set_metadata (volume .id , parsed_args . property )
248258
249259 kwargs = {}
250260 if parsed_args .name :
251261 kwargs ['display_name' ] = parsed_args .name
252262 if parsed_args .description :
253263 kwargs ['display_description' ] = parsed_args .description
264+ if kwargs :
265+ print "kwargs: %s" % kwargs
266+ volume_client .volumes .update (volume .id , ** kwargs )
267+
268+ if not kwargs and not parsed_args .property :
269+ self .app .log .error ("No changes requested\n " )
254270
255- if not kwargs and not meta :
256- sys .stdout .write ("Volume not updated, no arguments present \n " )
257- return
258- volume_client .volumes .update (volume .id , ** kwargs )
259271 return
260272
261273
@@ -270,7 +282,8 @@ def get_parser(self, prog_name):
270282 parser .add_argument (
271283 'volume' ,
272284 metavar = '<volume>' ,
273- help = 'Name or ID of volume to display' )
285+ help = 'Name or ID of volume to display' ,
286+ )
274287 return parser
275288
276289 def take_action (self , parsed_args ):
@@ -292,11 +305,16 @@ def get_parser(self, prog_name):
292305 parser .add_argument (
293306 'volume' ,
294307 metavar = '<volume>' ,
295- help = 'Name or ID of volume to change' )
308+ help = 'Name or ID of volume to change' ,
309+ )
296310 parser .add_argument (
297- '--meta-data ' ,
311+ '--property ' ,
298312 metavar = '<key>' ,
299- help = 'meta-data to remove from volume (key only)' )
313+ action = 'append' ,
314+ default = [],
315+ help = 'Property key to remove from volume '
316+ '(repeat to set multiple values)' ,
317+ )
300318 return parser
301319
302320 def take_action (self , parsed_args ):
@@ -305,14 +323,13 @@ def take_action(self, parsed_args):
305323 volume = utils .find_resource (
306324 volume_client .volumes , parsed_args .volume )
307325
308- if not parsed_args .meta_data :
309- sys .stdout .write ("Volume not updated, no arguments present \n " )
310- return
311-
312- key_list = []
313- key_list .append (parsed_args .meta_data )
314- volume_client .volumes .delete_metadata (volume .id , key_list )
315-
326+ if parsed_args .property :
327+ volume_client .volumes .delete_metadata (
328+ volume .id ,
329+ parsed_args .property ,
330+ )
331+ else :
332+ self .app .log .error ("No changes requested\n " )
316333 return
317334
318335
0 commit comments