From 59524c7246e2ab1ed534342076c21b02bf3df30d Mon Sep 17 00:00:00 2001 From: Andrew Schoen Date: Tue, 20 Nov 2018 14:28:58 -0600 Subject: [PATCH] ceph-volume: be idempotent when the batch strategy changes 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 (cherry picked from commit e13f32c1c5be2e4007714f704297827b16488ec6) --- library/ceph_volume.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/library/ceph_volume.py b/library/ceph_volume.py index 43b3eebf7..c43192d1a 100644 --- a/library/ceph_volume.py +++ b/library/ceph_volume.py @@ -578,13 +578,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: