Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ceph-pool: add support updating crush rule of the pool
Browse files Browse the repository at this point in the history
Support updating crush rule of the pool via crush rule name.

Signed-off-by: Seena Fallah <seenafallah@gmail.com>
clwluvw committed Jul 30, 2024
1 parent e85060c commit 40eb1ff
Showing 1 changed file with 39 additions and 2 deletions.
41 changes: 39 additions & 2 deletions library/ceph_pool.py
Original file line number Diff line number Diff line change
@@ -219,6 +219,28 @@ def get_application_pool(cluster,
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,
@@ -317,6 +339,12 @@ def get_pool_details(module,
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
@@ -343,6 +371,8 @@ def get_pool_details(module,
else:
out['application'] = application[0]

out['crush_rule'] = json.loads(crush_rule.strip())['crush_rule']

return rc, cmd, out, err


@@ -353,7 +383,8 @@ def compare_pool_config(user_pool_config, running_pool_details):

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']):
@@ -599,6 +630,8 @@ def run_module():
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,
@@ -626,6 +659,10 @@ def run_module():
delta.pop('pg_num', None)
delta.pop('pgp_num', None)

for key in 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:
rc, cmd, out, err = update_pool(module,
@@ -687,7 +724,7 @@ def run_module():
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():

0 comments on commit 40eb1ff

Please sign in to comment.