mirror of https://github.com/ceph/ceph-ansible.git
Do not pass NoneType as argument to ceph_crush_rule
With ansible-core 2.15 it is not possible to pass argument of unexpected type, as otherwise module will fail with: `'None' is not a string and conversion is not allowed` With that we want to only get all existing crush rules, so we can simply supply an empty string as a name argument, which would satisfy requirements and have same behaviour for previous ansible versions. Alternative approach would be to stop making `name` as a required argument to the module and use empty string as default value when info state is used. Signed-off-by: Dmitriy Rabotyagov <noonedeadpunk@gmail.com>pull/7470/head
parent
490ca79ccc
commit
b610297554
|
@ -46,7 +46,8 @@ description:
|
||||||
options:
|
options:
|
||||||
name:
|
name:
|
||||||
description:
|
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
|
required: true
|
||||||
cluster:
|
cluster:
|
||||||
description:
|
description:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
- name: get current default crush rule details
|
- name: get current default crush rule details
|
||||||
ceph_crush_rule:
|
ceph_crush_rule:
|
||||||
name: null
|
name: ""
|
||||||
cluster: "{{ cluster }}"
|
cluster: "{{ cluster }}"
|
||||||
state: info
|
state: info
|
||||||
environment:
|
environment:
|
||||||
|
|
|
@ -396,6 +396,31 @@ class TestCephCrushRuleModule(object):
|
||||||
assert result['stderr'] == stderr
|
assert result['stderr'] == stderr
|
||||||
assert result['stdout'] == stdout
|
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_BINARY': fake_container_binary})
|
||||||
@patch.dict(os.environ, {'CEPH_CONTAINER_IMAGE': fake_container_image})
|
@patch.dict(os.environ, {'CEPH_CONTAINER_IMAGE': fake_container_image})
|
||||||
@patch('ansible.module_utils.basic.AnsibleModule.exit_json')
|
@patch('ansible.module_utils.basic.AnsibleModule.exit_json')
|
||||||
|
|
Loading…
Reference in New Issue