Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 17 additions & 5 deletions plugins/module_utils/cephadm_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,31 @@
import datetime


def generate_ceph_cmd(sub_cmd, args):
def generate_ceph_cmd(sub_cmd, args, image=None, fsid=None, hostname=None):
'''
Generate 'ceph' command line to execute
'''

cmd = [
'cephadm',
'--timeout',
'60',
'shell',
'--',
'ceph',
]

if image:
cmd.extend(['--image', image])

cmd.append('shell')

if fsid:
cmd.extend(['--fsid', fsid])

if fsid and hostname:
cmd.extend([
'--config',
'/var/lib/ceph/{}/mon.{}/config'.format(fsid, hostname),
])

cmd.extend(['--', 'ceph'])
cmd.extend(sub_cmd + args)

return cmd
Expand Down
29 changes: 22 additions & 7 deletions plugins/modules/cephadm_crush_rule.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,9 @@ def create_rule(module, container_image=None):
bucket_root = module.params.get('bucket_root')
bucket_type = module.params.get('bucket_type')
device_class = module.params.get('device_class')
image = module.params.get('image')
fsid = module.params.get('fsid')
hostname = module.params.get('hostname')
profile = module.params.get('profile')

if rule_type == 'replicated':
Expand All @@ -135,8 +138,9 @@ def create_rule(module, container_image=None):
if profile:
args.append(profile)

cmd = generate_ceph_cmd(['osd', 'crush', 'rule'],
args)
cmd = generate_ceph_cmd(sub_cmd=['osd', 'crush', 'rule'],
image=image, fsid=fsid, hostname=hostname,
args=args)

return cmd

Expand All @@ -147,11 +151,15 @@ def get_rule(module, container_image=None):
'''

name = module.params.get('name')
image = module.params.get('image')
fsid = module.params.get('fsid')
hostname = module.params.get('hostname')

args = ['dump', name, '--format=json']

cmd = generate_ceph_cmd(['osd', 'crush', 'rule'],
args)
cmd = generate_ceph_cmd(sub_cmd=['osd', 'crush', 'rule'],
image=image, fsid=fsid, hostname=hostname,
args=args)

return cmd

Expand All @@ -162,11 +170,15 @@ def remove_rule(module, container_image=None):
'''

name = module.params.get('name')
image = module.params.get('image')
fsid = module.params.get('fsid')
hostname = module.params.get('hostname')

args = ['rm', name]

cmd = generate_ceph_cmd(['osd', 'crush', 'rule'],
args)
cmd = generate_ceph_cmd(sub_cmd=['osd', 'crush', 'rule'],
image=image, fsid=fsid, hostname=hostname,
args=args)

return cmd

Expand All @@ -181,7 +193,10 @@ def main():
bucket_type=dict(type='str', required=False, choices=['osd', 'host', 'chassis', 'rack', 'row', 'pdu', 'pod', # noqa: E501
'room', 'datacenter', 'zone', 'region', 'root']), # noqa: E501
device_class=dict(type='str', required=False),
profile=dict(type='str', required=False)
profile=dict(type='str', required=False),
image=dict(type='str', required=False),
fsid=dict(type='str', required=False),
hostname=dict(type='str', required=False)
),
supports_check_mode=True,
required_if=[
Expand Down
25 changes: 20 additions & 5 deletions plugins/modules/cephadm_ec_profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,20 +119,21 @@
RETURN = '''# '''


def get_profile(module, name):
def get_profile(module, name, image=None, fsid=None, hostname=None):
'''
Get existing profile
'''

args = ['get', name, '--format=json']

cmd = generate_ceph_cmd(sub_cmd=['osd', 'erasure-code-profile'],
image=image, fsid=fsid, hostname=hostname,
args=args)

return cmd


def create_profile(module, name, k, m, stripe_unit, crush_device_class, crush_failure_domain, directory, plugin, force=False): # noqa: E501
def create_profile(module, name, k, m, stripe_unit, crush_device_class, crush_failure_domain, directory, plugin, image=None, fsid=None, hostname=None, force=False): # noqa: E501
'''
Create a profile
'''
Expand All @@ -152,19 +153,21 @@ def create_profile(module, name, k, m, stripe_unit, crush_device_class, crush_fa
args.append('--force')

cmd = generate_ceph_cmd(sub_cmd=['osd', 'erasure-code-profile'],
image=image, fsid=fsid, hostname=hostname,
args=args)

return cmd


def delete_profile(module, name):
def delete_profile(module, name, image=None, fsid=None, hostname=None,):
'''
Delete a profile
'''

args = ['rm', name]

cmd = generate_ceph_cmd(sub_cmd=['osd', 'erasure-code-profile'],
image=image, fsid=fsid, hostname=hostname,
args=args)

return cmd
Expand All @@ -182,6 +185,9 @@ def run_module():
crush_failure_domain=dict(type='str', required=False),
directory=dict(type='str', required=False),
plugin=dict(type='str', required=False),
image=dict(type='str', required=False),
fsid=dict(type='str', required=False),
hostname=dict(type='str', required=False)
)

module = AnsibleModule(
Expand All @@ -200,6 +206,9 @@ def run_module():
crush_failure_domain = module.params.get('crush_failure_domain')
directory = module.params.get('directory')
plugin = module.params.get('plugin')
image = module.params.get('image')
fsid = module.params.get('fsid')
hostname = module.params.get('hostname')

if module.check_mode:
module.exit_json(
Expand All @@ -216,7 +225,7 @@ def run_module():
changed = False

if state == "present":
rc, cmd, out, err = exec_command(module, get_profile(module, name)) # noqa: E501
rc, cmd, out, err = exec_command(module, get_profile(module, name, image, fsid, hostname)) # noqa: E501
if rc == 0:
# the profile already exists, let's check whether we have to
# update it
Expand All @@ -238,6 +247,9 @@ def run_module():
crush_failure_domain,
directory,
plugin,
image,
fsid,
hostname,
force=True)) # noqa: E501
changed = True
else:
Expand All @@ -250,12 +262,15 @@ def run_module():
crush_device_class, # noqa: E501
crush_failure_domain,
directory,
image,
fsid,
hostname,
plugin))
if rc == 0:
changed = True

elif state == "absent":
rc, cmd, out, err = exec_command(module, delete_profile(module, name)) # noqa: E501
rc, cmd, out, err = exec_command(module, delete_profile(module, name, image, fsid, hostname)) # noqa: E501
if not err:
out = 'Profile {0} removed.'.format(name)
changed = True
Expand Down
41 changes: 26 additions & 15 deletions plugins/modules/cephadm_key.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ def generate_caps(caps):
return caps_cli


def create_key(name, caps): # noqa: E501
def create_key(name, caps, image=None, fsid=None, hostname=None): # noqa: E501
'''
Create a CephX key
'''
Expand All @@ -145,12 +145,13 @@ def create_key(name, caps): # noqa: E501

args.extend(generate_caps(caps))
cmd.append(generate_ceph_cmd(sub_cmd=['auth'],
image=image, fsid=fsid, hostname=hostname,
args=args))

return cmd


def update_key(name, caps):
def update_key(name, caps, image=None, fsid=None, hostname=None):
'''
Update the caps of a CephX key
'''
Expand All @@ -163,12 +164,13 @@ def update_key(name, caps):
]
args.extend(generate_caps(caps))
cmd.append(generate_ceph_cmd(sub_cmd=['auth'],
image=image, fsid=fsid, hostname=hostname,
args=args))

return cmd


def delete_key(name):
def delete_key(name, image=None, fsid=None, hostname=None,):
'''
Delete a CephX key
'''
Expand All @@ -181,12 +183,13 @@ def delete_key(name):
]

cmd.append(generate_ceph_cmd(sub_cmd=['auth'],
image=image, fsid=fsid, hostname=hostname,
args=args))

return cmd


def get_key(name, dest):
def get_key(name, dest, image=None, fsid=None, hostname=None):
'''
Get a CephX key (write on the filesystem)
'''
Expand All @@ -201,12 +204,13 @@ def get_key(name, dest):
]

cmd.append(generate_ceph_cmd(sub_cmd=['auth'],
image=image, fsid=fsid, hostname=hostname,
args=args))

return cmd


def info_key(name, output_format):
def info_key(name, output_format, image=None, fsid=None, hostname=None):
'''
Get information about a CephX key
'''
Expand All @@ -221,12 +225,13 @@ def info_key(name, output_format):
]

cmd_list.append(generate_ceph_cmd(sub_cmd=['auth'],
image=image, fsid=fsid, hostname=hostname,
args=args))

return cmd_list


def list_keys():
def list_keys(image=None, fsid=None, hostname=None):
'''
List all CephX keys
'''
Expand All @@ -240,6 +245,7 @@ def list_keys():
]

cmd.append(generate_ceph_cmd(sub_cmd=['auth'],
image=image, fsid=fsid, hostname=hostname,
args=args))

return cmd
Expand All @@ -264,8 +270,10 @@ def run_module():
state=dict(type='str', required=False, default='present', choices=['present', 'absent', # noqa: E501
'list', 'info']), # noqa: E501
caps=dict(type='dict', required=False, default={}),
output_format=dict(type='str', required=False, default='json', choices=['json', 'plain', 'xml', 'yaml']) # noqa: E501
)
output_format=dict(type='str', required=False, default='json', choices=['json', 'plain', 'xml', 'yaml']), # noqa: E501
image=dict(type='str', required=False),
fsid=dict(type='str', required=False),
hostname=dict(type='str', required=False))

module = AnsibleModule(
argument_spec=module_args,
Expand All @@ -277,6 +285,9 @@ def run_module():
name = module.params.get('name')
caps = module.params.get('caps')
output_format = module.params.get('output_format')
image = module.params.get('image')
fsid = module.params.get('fsid')
hostname = module.params.get('hostname')

changed = False

Expand Down Expand Up @@ -304,7 +315,7 @@ def run_module():
if state == "present":
_info_key = []
rc, cmd, out, err = exec_commands(
module, info_key(name, output_format)) # noqa: E501
module, info_key(name, output_format, image=image, fsid=fsid, hostname=hostname)) # noqa: E501
key_exist = rc
if not caps and key_exist != 0:
fatal("Capabilities must be provided when state is 'present'", module) # noqa: E501
Expand All @@ -318,15 +329,15 @@ def run_module():
result["rc"] = 0
module.exit_json(**result)
else:
rc, cmd, out, err = exec_commands(module, update_key(name, caps)) # noqa: E501
rc, cmd, out, err = exec_commands(module, update_key(name, caps, image=image, fsid=fsid, hostname=hostname)) # noqa: E501
if rc != 0:
result["msg"] = "Couldn't update caps for {0}".format(name)
result["stderr"] = err
module.fail_json(**result)
changed = True

else:
rc, cmd, out, err = exec_commands(module, create_key(name, caps)) # noqa: E501
rc, cmd, out, err = exec_commands(module, create_key(name, caps, image=image, fsid=fsid, hostname=hostname)) # noqa: E501
if rc != 0:
result["msg"] = "Couldn't create {0}".format(name)
result["stderr"] = err
Expand All @@ -335,23 +346,23 @@ def run_module():

elif state == "absent":
rc, cmd, out, err = exec_commands(
module, info_key(name, output_format)) # noqa: E501
module, info_key(name, output_format, image=image, fsid=fsid, hostname=hostname)) # noqa: E501
key_exist = rc
if key_exist == 0:
rc, cmd, out, err = exec_commands(
module, delete_key(name)) # noqa: E501
module, delete_key(name, image=image, fsid=fsid, hostname=hostname)) # noqa: E501
if rc == 0:
changed = True
else:
rc = 0

elif state == "info":
rc, cmd, out, err = exec_commands(
module, info_key(name, output_format)) # noqa: E501
module, info_key(name, output_format, image=image, fsid=fsid, hostname=hostname)) # noqa: E501

elif state == "list":
rc, cmd, out, err = exec_commands(
module, list_keys())
module, list_keys(image=image, fsid=fsid, hostname=hostname))

endd = datetime.datetime.now()
delta = endd - startd
Expand Down
Loading
Loading