return cmd
+def get_crush_rule_pool(cluster,
+ name,
+ user,
+ user_key,
+ output_format='json',
+ container_image=None):
+ '''
+ Get crush rule type on a given pool
+ '''
+
+ args = ['get', name, 'crush_rule', '-f', output_format]
+
+ cmd = generate_cmd(sub_cmd=['osd', 'pool'],
+ args=args,
+ cluster=cluster,
+ user=user,
+ user_key=user_key,
+ container_image=container_image)
+
+ return cmd
+
+
def enable_application_pool(cluster,
name,
application,
user, # noqa: E501
user_key, # noqa: E501
container_image=container_image)) # noqa: E501
+ _rc, _cmd, crush_rule, _err = exec_command(module,
+ get_crush_rule_pool(cluster, # noqa: E501
+ name, # noqa: E501
+ user, # noqa: E501
+ user_key, # noqa: E501
+ container_image=container_image)) # noqa: E501
# This is a trick because "target_size_ratio" isn't present at the same
# level in the dict
else:
out['application'] = application[0]
+ out['crush_rule'] = json.loads(crush_rule.strip())['crush_rule']
+
return rc, cmd, out, err
delta = {}
filter_keys = ['pg_num', 'pg_placement_num', 'size',
- 'pg_autoscale_mode', 'target_size_ratio']
+ 'pg_autoscale_mode', 'target_size_ratio',
+ 'crush_rule']
for key in filter_keys:
if (str(running_pool_details[key]) != user_pool_config[key]['value'] and # noqa: E501
user_pool_config[key]['value']):
keyring_filename = cluster + '.' + user + '.keyring'
user_key = os.path.join("/etc/ceph/", keyring_filename)
+ diff = dict(before="", after="")
+
if state == "present":
rc, cmd, out, err = exec_command(module,
check_pool_exist(cluster,
if details['pg_autoscale_mode'] == 'on':
delta.pop('pg_num', None)
delta.pop('pgp_num', None)
+ if not module.params.get('rule_name'):
+ delta.pop('crush_rule', None)
+
+ for key in delta.keys():
+ diff['before'] += "{}: {}\n".format(key, details[key])
+ diff['after'] += "{}: {}\n".format(key, delta[key]['value'])
changed = len(delta) > 0
if changed and not module.check_mode:
container_image=container_image)) # noqa: E501
exit_module(module=module, out=out, rc=rc, cmd=cmd, err=err, startd=startd,
- changed=changed)
+ changed=changed, diff=diff)
def main():
assert cmd == expected_command
+ def test_get_crush_rule_pool(self):
+ expected_command = [
+ 'podman',
+ 'run',
+ '--rm',
+ '--net=host',
+ '-v',
+ '/etc/ceph:/etc/ceph:z',
+ '-v',
+ '/var/lib/ceph/:/var/lib/ceph/:z',
+ '-v',
+ '/var/log/ceph/:/var/log/ceph/:z',
+ '--entrypoint=ceph',
+ fake_container_image_name,
+ '-n',
+ 'client.admin',
+ '-k',
+ '/etc/ceph/ceph.client.admin.keyring',
+ '--cluster',
+ 'ceph',
+ 'osd',
+ 'pool',
+ 'get',
+ self.fake_user_pool_config['pool_name']['value'],
+ 'crush_rule',
+ '-f',
+ 'json'
+ ]
+
+ cmd = ceph_pool.get_crush_rule_pool(fake_cluster_name,
+ self.fake_user_pool_config['pool_name']['value'],
+ fake_user, fake_user_key, 'json',
+ container_image=fake_container_image_name)
+
+ assert cmd == expected_command
+
def test_enable_application_pool(self):
expected_command = [
'podman',