]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
ceph_key: handle error in a better way v4.0.59
authorGuillaume Abrioux <gabrioux@redhat.com>
Mon, 7 Jun 2021 12:51:43 +0000 (14:51 +0200)
committerGuillaume Abrioux <gabrioux@redhat.com>
Fri, 2 Jul 2021 12:01:52 +0000 (14:01 +0200)
When calling the `ceph_key` module with `state: info`, if the ceph
command called fails, the actual error is hidden by the module which
makes it pretty difficult to troubleshoot.

The current code always states that if rc is not equal to 0 the keyring
doesn't exist.

`state: info` should always return the actual rc, stdout and stderr.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1964889
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
(cherry picked from commit d58500ade01c7c4cc20b6bbaf8f5789d825b8d1b)

library/ceph_key.py
roles/ceph-mon/tasks/deploy_monitors.yml

index 2a779182374ee04e932e445f7df244ee47233648..98bee4dd306219ab7cf73e21f2e88f859541524a 100644 (file)
@@ -645,10 +645,6 @@ def run_module():
     elif state == "info":
         rc, cmd, out, err = exec_commands(
             module, info_key(cluster, name, user, user_key_path, output_format, container_image))  # noqa E501
-        if rc != 0:
-            result["stdout"] = "skipped, since {0} does not exist".format(name)
-            result['rc'] = 0
-            module.exit_json(**result)
 
     elif state == "list":
         rc, cmd, out, err = exec_commands(
index 05ed08cf89f02289db9ec857f0580e69b3a92d4b..37ce49c4b2cc744082602fd49c294540dec13c67 100644 (file)
@@ -15,6 +15,7 @@
       register: initial_mon_key
       run_once: True
       delegate_to: "{{ running_mon }}"
+      failed_when: initial_mon_key.rc not in [0, 2]
       when: running_mon is defined
 
     - name: generate monitor initial keyring
       become: false
       run_once: true
       when:
-        - initial_mon_key.skipped is defined
+        - initial_mon_key is skipped
+          or
+          initial_mon_key is not succeeded
+
+    - name: set_fact _initial_mon_key_success
+      set_fact:  # when initial_mon_key is registered above, `rc: 2` is considered success.
+        _initial_mon_key_success: "{{ initial_mon_key is not skipped and initial_mon_key.rc == 0 }}"
 
     - name: get initial keyring when it already exists
       set_fact:
-        monitor_keyring: "{{ (initial_mon_key.stdout | from_json)[0]['key'] if initial_mon_key is not skipped else monitor_keyring.stdout }}"
+        monitor_keyring: "{{ (initial_mon_key.stdout | from_json)[0]['key'] if _initial_mon_key_success | bool else monitor_keyring.stdout }}"
       when: initial_mon_key.stdout|default('')|length > 0 or monitor_keyring is not skipped
 
     - name: create monitor initial keyring