mirror of https://github.com/ceph/ceph-ansible.git
library: add ceph_authtool module
This adds the module `ceph_authtool`. Signed-off-by: Guillaume Abrioux <gabrioux@ibm.com>pull/7474/head
parent
08d80633f4
commit
c342035fb6
|
@ -0,0 +1,137 @@
|
|||
from __future__ import absolute_import, division, print_function
|
||||
__metaclass__ = type
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
try:
|
||||
from ansible.module_utils.ca_common import container_exec, \
|
||||
is_containerized, \
|
||||
fatal
|
||||
except ImportError:
|
||||
from module_utils.ca_common import container_exec, \
|
||||
is_containerized, \
|
||||
fatal
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import struct
|
||||
import time
|
||||
import base64
|
||||
import socket
|
||||
|
||||
class KeyringExists(Exception):
|
||||
pass
|
||||
|
||||
def build_cmd(create_keyring=False,
|
||||
gen_key=False,
|
||||
add_key=False,
|
||||
import_keyring=None,
|
||||
caps={},
|
||||
name=None,
|
||||
path=None,
|
||||
container_image=None,
|
||||
**a):
|
||||
|
||||
auth_tool_binary: str = 'ceph-authtool'
|
||||
|
||||
if container_image:
|
||||
c = container_exec(auth_tool_binary,
|
||||
container_image)
|
||||
else:
|
||||
c = [auth_tool_binary]
|
||||
|
||||
|
||||
if name:
|
||||
c.extend(['-n', name])
|
||||
if create_keyring:
|
||||
if os.path.exists(path):
|
||||
raise KeyringExists
|
||||
c.append('-C')
|
||||
if gen_key:
|
||||
c.append('-g')
|
||||
if caps:
|
||||
for k, v in caps.items():
|
||||
c.extend(['--cap'] + [k] + [v])
|
||||
|
||||
c.append(path)
|
||||
|
||||
if import_keyring:
|
||||
c.extend(['--import-keyring', import_keyring])
|
||||
|
||||
return c
|
||||
|
||||
def run_module():
|
||||
module_args = dict(
|
||||
name=dict(type='str', required=False),
|
||||
create_keyring=dict(type='bool', required=False, default=False),
|
||||
gen_key=dict(type='bool', required=False, default=False),
|
||||
add_key=dict(type='str', required=False, default=None),
|
||||
import_keyring=dict(type='str', required=False, default=None),
|
||||
caps=dict(type='dict', required=False, default=None),
|
||||
path=dict(type='str', required=True)
|
||||
)
|
||||
|
||||
module = AnsibleModule(
|
||||
argument_spec=module_args,
|
||||
supports_check_mode=True,
|
||||
add_file_common_args=True,
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
cmd = []
|
||||
changed = False
|
||||
|
||||
result = dict(
|
||||
changed=changed,
|
||||
stdout='',
|
||||
stderr='',
|
||||
rc=0,
|
||||
start='',
|
||||
end='',
|
||||
delta='',
|
||||
)
|
||||
|
||||
if module.check_mode:
|
||||
module.exit_json(**result)
|
||||
|
||||
startd = datetime.datetime.now()
|
||||
|
||||
# will return either the image name or None
|
||||
container_image = is_containerized()
|
||||
try:
|
||||
cmd = build_cmd(**module.params, container_image=container_image)
|
||||
except KeyringExists:
|
||||
rc = 0
|
||||
out = f"{module.params['path']} already exists. Skipping"
|
||||
err = ""
|
||||
else:
|
||||
rc, out, err = module.run_command(cmd)
|
||||
if rc == 0:
|
||||
changed = True
|
||||
|
||||
endd = datetime.datetime.now()
|
||||
delta = endd - startd
|
||||
|
||||
result = dict(
|
||||
cmd=cmd,
|
||||
start=str(startd),
|
||||
end=str(endd),
|
||||
delta=str(delta),
|
||||
rc=rc,
|
||||
stdout=out.rstrip("\r\n"),
|
||||
stderr=err.rstrip("\r\n"),
|
||||
changed=changed,
|
||||
)
|
||||
if rc != 0:
|
||||
module.fail_json(msg='non-zero return code', **result)
|
||||
|
||||
#file_args = module.load_file_common_arguments(module.params)
|
||||
#module.set_fs_attributes_if_different(file_args, False)
|
||||
module.exit_json(**result)
|
||||
|
||||
def main():
|
||||
run_module()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue