@@ -195,6 +195,24 @@ def generate_radosgw_cmd(cluster, args, container_image=None):
195
195
return cmd
196
196
197
197
198
+ def generate_caps_cmd (cluster , args , container_image = None ):
199
+ '''
200
+ Generate 'radosgw' command line to execute for caps
201
+ '''
202
+
203
+ cmd = pre_generate_radosgw_cmd (container_image = container_image )
204
+
205
+ base_cmd = [
206
+ '--cluster' ,
207
+ cluster ,
208
+ 'caps'
209
+ ]
210
+
211
+ cmd .extend (base_cmd + args )
212
+
213
+ return cmd
214
+
215
+
198
216
def exec_commands (module , cmd ):
199
217
'''
200
218
Execute command(s)
@@ -223,6 +241,7 @@ def create_user(module, container_image=None):
223
241
zone = module .params .get ('zone' , None )
224
242
system = module .params .get ('system' , False )
225
243
admin = module .params .get ('admin' , False )
244
+ caps = module .params .get ('caps' )
226
245
227
246
args = ['create' , '--uid=' + name , '--display_name=' + display_name ]
228
247
@@ -250,13 +269,81 @@ def create_user(module, container_image=None):
250
269
if admin :
251
270
args .append ('--admin' )
252
271
272
+ if caps :
273
+ caps_args = [f"{ cap ['type' ]} ={ cap ['perm' ]} " for cap in caps ]
274
+ args .extend (['--caps' , ';' .join (caps_args )])
275
+
253
276
cmd = generate_radosgw_cmd (cluster = cluster ,
254
277
args = args ,
255
278
container_image = container_image )
256
279
257
280
return cmd
258
281
259
282
283
+ def caps_add (module , caps , container_image = None ):
284
+ '''
285
+ Create a new user
286
+ '''
287
+
288
+ cluster = module .params .get ('cluster' )
289
+ name = module .params .get ('name' )
290
+ realm = module .params .get ('realm' , None )
291
+ zonegroup = module .params .get ('zonegroup' , None )
292
+ zone = module .params .get ('zone' , None )
293
+
294
+ args = ['add' , '--uid=' + name ]
295
+
296
+ if realm :
297
+ args .extend (['--rgw-realm=' + realm ])
298
+
299
+ if zonegroup :
300
+ args .extend (['--rgw-zonegroup=' + zonegroup ])
301
+
302
+ if zone :
303
+ args .extend (['--rgw-zone=' + zone ])
304
+
305
+ caps_args = [f"{ cap ['type' ]} ={ cap ['perm' ]} " for cap in caps ]
306
+ args .extend (['--caps' , ';' .join (caps_args )])
307
+
308
+ cmd = generate_caps_cmd (cluster = cluster ,
309
+ args = args ,
310
+ container_image = container_image )
311
+
312
+ return cmd
313
+
314
+
315
+ def caps_rm (module , caps , container_image = None ):
316
+ '''
317
+ Create a new user
318
+ '''
319
+
320
+ cluster = module .params .get ('cluster' )
321
+ name = module .params .get ('name' )
322
+ realm = module .params .get ('realm' , None )
323
+ zonegroup = module .params .get ('zonegroup' , None )
324
+ zone = module .params .get ('zone' , None )
325
+
326
+ args = ['rm' , '--uid=' + name ]
327
+
328
+ if realm :
329
+ args .extend (['--rgw-realm=' + realm ])
330
+
331
+ if zonegroup :
332
+ args .extend (['--rgw-zonegroup=' + zonegroup ])
333
+
334
+ if zone :
335
+ args .extend (['--rgw-zone=' + zone ])
336
+
337
+ caps_args = [f"{ cap ['type' ]} ={ cap ['perm' ]} " for cap in caps ]
338
+ args .extend (['--caps' , ';' .join (caps_args )])
339
+
340
+ cmd = generate_caps_cmd (cluster = cluster ,
341
+ args = args ,
342
+ container_image = container_image )
343
+
344
+ return cmd
345
+
346
+
260
347
def modify_user (module , container_image = None ):
261
348
'''
262
349
Modify an existing user
@@ -398,7 +485,8 @@ def run_module():
398
485
zonegroup = dict (type = 'str' , required = False ),
399
486
zone = dict (type = 'str' , required = False ),
400
487
system = dict (type = 'bool' , required = False , default = False ),
401
- admin = dict (type = 'bool' , required = False , default = False )
488
+ admin = dict (type = 'bool' , required = False , default = False ),
489
+ caps = dict (type = 'list' , required = False ),
402
490
)
403
491
404
492
module = AnsibleModule (
@@ -417,6 +505,7 @@ def run_module():
417
505
secret_key = module .params .get ('secret_key' )
418
506
system = module .params .get ('system' )
419
507
admin = module .params .get ('admin' )
508
+ caps = module .params .get ('caps' )
420
509
421
510
startd = datetime .datetime .now ()
422
511
changed = False
@@ -431,16 +520,19 @@ def run_module():
431
520
current = {
432
521
'display_name' : user ['display_name' ],
433
522
'system' : user .get ('system' , False ),
434
- 'admin' : user .get ('admin' , False )
523
+ 'admin' : user .get ('admin' , False ),
435
524
}
436
525
asked = {
437
526
'display_name' : display_name ,
438
527
'system' : system ,
439
- 'admin' : admin
528
+ 'admin' : admin ,
440
529
}
441
530
if email :
442
531
current ['email' ] = user ['email' ]
443
532
asked ['email' ] = email
533
+ if caps :
534
+ current ['caps' ] = user ['caps' ]
535
+ asked ['caps' ] = caps
444
536
445
537
if access_key and secret_key :
446
538
asked ['access_key' ] = access_key
@@ -453,7 +545,15 @@ def run_module():
453
545
454
546
changed = current != asked
455
547
if changed and not module .check_mode :
456
- rc , cmd , out , err = exec_commands (module , modify_user (module , container_image = container_image )) # noqa: E501
548
+ rc , cmd , out , err = exec_commands (module , modify_user (module , container_image = container_image ))
549
+
550
+ if caps :
551
+ missing_caps = [cap for cap in asked ['caps' ] if cap not in current ['caps' ]]
552
+ extra_caps = [cap for cap in current ['caps' ] if cap not in asked ['caps' ]]
553
+ if extra_caps :
554
+ rc , cmd , out , err = exec_commands (module , caps_rm (module , extra_caps , container_image = container_image ))
555
+ if missing_caps :
556
+ rc , cmd , out , err = exec_commands (module , caps_add (module , missing_caps , container_image = container_image ))
457
557
else :
458
558
changed = True
459
559
if not module .check_mode :
0 commit comments