diff --git a/library/ceph_crush_rule.py b/library/ceph_crush_rule.py index 88ec8434cb..e696a9fb72 100644 --- a/library/ceph_crush_rule.py +++ b/library/ceph_crush_rule.py @@ -46,7 +46,8 @@ options: name: description: - - name of the Ceph Crush rule. + - name of the Ceph Crush rule. If state is 'info' - empty string + can be provided as a value to get all crush rules required: true cluster: description: diff --git a/roles/ceph-facts/tasks/get_def_crush_rule_name.yml b/roles/ceph-facts/tasks/get_def_crush_rule_name.yml index 4b1a04eb01..cdfcfbf362 100644 --- a/roles/ceph-facts/tasks/get_def_crush_rule_name.yml +++ b/roles/ceph-facts/tasks/get_def_crush_rule_name.yml @@ -1,7 +1,7 @@ --- - name: get current default crush rule details ceph_crush_rule: - name: null + name: "" cluster: "{{ cluster }}" state: info environment: diff --git a/tests/library/test_ceph_crush_rule.py b/tests/library/test_ceph_crush_rule.py index e3bd9b173f..c8e51be2c4 100644 --- a/tests/library/test_ceph_crush_rule.py +++ b/tests/library/test_ceph_crush_rule.py @@ -396,6 +396,31 @@ def test_get_existing_rule(self, m_run_command, m_exit_json): assert result['stderr'] == stderr assert result['stdout'] == stdout + @patch('ansible.module_utils.basic.AnsibleModule.exit_json') + @patch('ansible.module_utils.basic.AnsibleModule.run_command') + def test_get_all_rules(self, m_run_command, m_exit_json): + ca_test_common.set_module_args({ + 'name': str(), + 'state': 'info' + }) + m_exit_json.side_effect = ca_test_common.exit_json + rc = 0 + stderr = '' + stdout = '{{"rule_name":"{}","steps":[{{"item_name":"{}"}},{{"type":"{}"}}]}}'.format(fake_name, fake_bucket_root, fake_bucket_type) + m_run_command.return_value = rc, stdout, stderr + + with pytest.raises(ca_test_common.AnsibleExitJson) as result: + ceph_crush_rule.main() + + result = result.value.args[0] + assert not result['changed'] + assert result['cmd'] == ['ceph', '-n', fake_user, '-k', fake_keyring, + '--cluster', fake_cluster, 'osd', 'crush', 'rule', + 'dump', '', '--format=json'] + assert result['rc'] == rc + assert result['stderr'] == stderr + assert result['stdout'] == stdout + @patch.dict(os.environ, {'CEPH_CONTAINER_BINARY': fake_container_binary}) @patch.dict(os.environ, {'CEPH_CONTAINER_IMAGE': fake_container_image}) @patch('ansible.module_utils.basic.AnsibleModule.exit_json')