]> git.apps.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
ceph-facts: Fix get_def_crush_rule_name.yml in check mode
authorBenoît Knecht <bknecht@protonmail.ch>
Mon, 13 Dec 2021 15:36:27 +0000 (16:36 +0100)
committerGuillaume Abrioux <gabrioux@redhat.com>
Mon, 7 Feb 2022 13:13:19 +0000 (14:13 +0100)
This construct doesn't work as intended since ansible/ansible#74212:

```
item.stdout | default('{}') | from_json
```

That PR made the `command` module return `stdout` even in check mode (setting
it to the empty string), so `default()` has no effect in that case and
`from_json()` fails to parse an empty string.

Instead, `default()` needs to be invoked with its second argument set to
`True`, so that it replaces any `False` value (such as an empty string) with
its first argument:

```
item.stdout | default('{}', True) | from_json
```

Signed-off-by: Benoît Knecht <bknecht@protonmail.ch>
roles/ceph-facts/tasks/get_def_crush_rule_name.yml

index 89e22b130db52d4284420ebfa7b40e6a5bdb19a1..4b1a04eb01a378a37516208b207382805372453d 100644 (file)
@@ -14,6 +14,6 @@
 - name: get current default crush rule name
   set_fact:
     ceph_osd_pool_default_crush_rule_name: "{{ item.rule_name }}"
-  with_items: "{{ default_crush_rule_details.stdout | default('{}') | from_json }}"
+  with_items: "{{ default_crush_rule_details.stdout | default('{}', True) | from_json }}"
   run_once: True
-  when: item.rule_id | int == osd_pool_default_crush_rule | int
\ No newline at end of file
+  when: item.rule_id | int == osd_pool_default_crush_rule | int