]> git.apps.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
ceph-volume: be idempotent when the batch strategy changes
authorAndrew Schoen <aschoen@redhat.com>
Tue, 20 Nov 2018 20:28:58 +0000 (14:28 -0600)
committermergify[bot] <mergify[bot]@users.noreply.github.com>
Mon, 26 Nov 2018 23:23:50 +0000 (23:23 +0000)
If you deploy with 2 HDDs and 1 SDD then each subsequent deploy both
HDD drives will be filtered out, because they're already used by ceph.
ceph-volume will report this as a 'strategy change' because the device
list went from a mixed type of HDD and SDD to a single type of only SDD.

This situation results in a non-zero exit code from ceph-volume. We want
to handle this situation gracefully and report that nothing will be changed.
A similar json structure to what would have been given by ceph-volume is
returned in the 'stdout' key.

Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1650306
Signed-off-by: Andrew Schoen <aschoen@redhat.com>
library/ceph_volume.py

index bbee7b6c651561faa290c29202f42ed6cb965fd1..f20abb4abfb71e6914afdf06e5a6531b1335d66a 100644 (file)
@@ -579,13 +579,22 @@ def run_module():
         try:
             report_result = json.loads(out)
         except ValueError:
+            strategy_change = "strategy changed" in out
+            if strategy_change:
+                out = json.dumps({"changed": False, "stdout": out.rstrip("\r\n")})
+                rc = 0
+                changed = False
+            else:
+                out = out.rstrip("\r\n")
             result = dict(
                 cmd=cmd,
-                stdout=out.rstrip(b"\r\n"),
-                stderr=err.rstrip(b"\r\n"),
+                stdout=out,
+                stderr=err.rstrip("\r\n"),
                 rc=rc,
                 changed=changed,
             )
+            if strategy_change:
+                module.exit_json(**result)
             module.fail_json(msg='non-zero return code', **result)
 
         if not report: