57
57
default: {}
58
58
required: false
59
59
type: dict
60
+ key:
61
+ description:
62
+ - Secret value of the key. If specified, this key will be
63
+ used explicitly instead of being generated.
64
+ required: false
65
+ type: str
60
66
output_format:
61
67
description:
62
68
- The key output format when retrieving the information of an
@@ -150,6 +156,25 @@ def create_key(name, caps): # noqa: E501
150
156
return cmd
151
157
152
158
159
+ def create_key_by_import (name , caps , key ):
160
+ '''
161
+ Create a CephX key by import
162
+ '''
163
+ cmd = []
164
+
165
+ caps_cli = []
166
+ for k , v in caps .items ():
167
+ caps_cli .append (f'caps { k } = "{ v } "' )
168
+
169
+ key_entry = f"[{ name } ]\n \t key = { key } \n \t " + "\n \t " .join (caps_cli )
170
+
171
+ sub_cmd = ['auth' , 'import' ]
172
+ args = ['-i' , '-' ]
173
+ cmd .append (generate_ceph_cmd (sub_cmd = sub_cmd , args = args , key_entry = key_entry ))
174
+
175
+ return cmd
176
+
177
+
153
178
def update_key (name , caps ):
154
179
'''
155
180
Update the caps of a CephX key
@@ -168,6 +193,15 @@ def update_key(name, caps):
168
193
return cmd
169
194
170
195
196
+ def update_key_by_import (name , caps , key = None ):
197
+ '''
198
+ Update a CephX key by re-importing it
199
+ '''
200
+ cmd = create_key_by_import (name , caps , key )
201
+
202
+ return cmd
203
+
204
+
171
205
def delete_key (name ):
172
206
'''
173
207
Delete a CephX key
@@ -264,6 +298,7 @@ def run_module():
264
298
state = dict (type = 'str' , required = False , default = 'present' , choices = ['present' , 'absent' , # noqa: E501
265
299
'list' , 'info' ]), # noqa: E501
266
300
caps = dict (type = 'dict' , required = False , default = {}),
301
+ key = dict (type = 'str' , required = False , default = None ),
267
302
output_format = dict (type = 'str' , required = False , default = 'json' , choices = ['json' , 'plain' , 'xml' , 'yaml' ]) # noqa: E501
268
303
)
269
304
@@ -276,6 +311,7 @@ def run_module():
276
311
state = module .params ['state' ]
277
312
name = module .params .get ('name' )
278
313
caps = module .params .get ('caps' )
314
+ key = module .params .get ('key' )
279
315
output_format = module .params .get ('output_format' )
280
316
281
317
changed = False
@@ -313,25 +349,40 @@ def run_module():
313
349
if not caps :
314
350
caps = _info_key [0 ]['caps' ]
315
351
_caps = _info_key [0 ]['caps' ]
316
- if caps == _caps :
352
+ if not key :
353
+ key = _info_key [0 ]['key' ]
354
+ _key = _info_key [0 ]['key' ]
355
+ if caps == _caps and key == _key :
317
356
result ["stdout" ] = "{0} already exists and doesn't need to be updated." .format (name ) # noqa: E501
318
357
result ["rc" ] = 0
319
358
module .exit_json (** result )
320
359
else :
321
- rc , cmd , out , err = exec_commands (module , update_key (name , caps )) # noqa: E501
360
+ if key and key != _key :
361
+ rc , cmd , out , err = exec_commands (
362
+ module , update_key_by_import (name , caps , key )) # noqa: E501
363
+ else :
364
+ rc , cmd , out , err = exec_commands (
365
+ module , update_key (name , caps )) # noqa: E501
322
366
if rc != 0 :
323
- result ["stdout" ] = "Couldn't update caps for {0}" .format (name )
367
+ result ["stdout" ] = "Couldn't update {0}" .format (name )
324
368
result ["stderr" ] = err
325
369
module .exit_json (** result )
326
370
changed = True
327
-
328
371
else :
329
- rc , cmd , out , err = exec_commands (module , create_key (name , caps )) # noqa: E501
330
- if rc != 0 :
331
- result ["stdout" ] = "Couldn't create {0}" .format (name )
332
- result ["stderr" ] = err
333
- module .exit_json (** result )
334
- changed = True
372
+ if key :
373
+ rc , cmd , out , err = exec_commands (module , create_key_by_import (name , caps , key ))
374
+ if rc != 0 :
375
+ result ["stdout" ] = "Couldn't import {0}" .format (name )
376
+ result ["stderr" ] = err
377
+ module .exit_json (** result )
378
+ changed = True
379
+ else :
380
+ rc , cmd , out , err = exec_commands (module , create_key (name , caps )) # noqa: E501
381
+ if rc != 0 :
382
+ result ["stdout" ] = "Couldn't create {0}" .format (name )
383
+ result ["stderr" ] = err
384
+ module .exit_json (** result )
385
+ changed = True
335
386
336
387
elif state == "absent" :
337
388
rc , cmd , out , err = exec_commands (
0 commit comments