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
@@ -318,20 +354,33 @@ def run_module():
318
354
result ["rc" ] = 0
319
355
module .exit_json (** result )
320
356
else :
321
- rc , cmd , out , err = exec_commands (module , update_key (name , caps )) # noqa: E501
357
+ if key and key != _key :
358
+ rc , cmd , out , err = exec_commands (
359
+ module , update_key_by_import (name , caps , key )) # noqa: E501
360
+ else :
361
+ rc , cmd , out , err = exec_commands (
362
+ module , update_key (name , caps )) # noqa: E501
322
363
if rc != 0 :
323
- result ["msg " ] = "Couldn't update caps for {0}" .format (name )
364
+ result ["stdout " ] = "Couldn't update {0}" .format (name )
324
365
result ["stderr" ] = err
325
- module .fail_json (** result )
366
+ module .exit_json (** result )
326
367
changed = True
327
368
328
369
else :
329
- rc , cmd , out , err = exec_commands (module , create_key (name , caps )) # noqa: E501
330
- if rc != 0 :
331
- result ["msg" ] = "Couldn't create {0}" .format (name )
332
- result ["stderr" ] = err
333
- module .fail_json (** result )
334
- changed = True
370
+ if key :
371
+ rc , cmd , out , err = exec_commands (module , create_key_by_import (name , caps , key ))
372
+ if rc != 0 :
373
+ result ["stdout" ] = "Couldn't import {0}" .format (name )
374
+ result ["stderr" ] = err
375
+ module .exit_json (** result )
376
+ changed = True
377
+ else :
378
+ rc , cmd , out , err = exec_commands (module , create_key (name , caps )) # noqa: E501
379
+ if rc != 0 :
380
+ result ["stdout" ] = "Couldn't create {0}" .format (name )
381
+ result ["stderr" ] = err
382
+ module .exit_json (** result )
383
+ changed = True
335
384
336
385
elif state == "absent" :
337
386
rc , cmd , out , err = exec_commands (
0 commit comments