]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm/upgrade: tolerate old upgrade_state.target_versoin
authorSage Weil <sage@newdream.net>
Tue, 26 Jan 2021 15:24:38 +0000 (09:24 -0600)
committerSebastian Wagner <sebastian.wagner@suse.com>
Wed, 10 Feb 2021 12:26:25 +0000 (13:26 +0100)
Signed-off-by: Sage Weil <sage@newdream.net>
(cherry picked from commit a3c9df91975708f42cd75266e840f0b0b019e7c7)

src/pybind/mgr/cephadm/upgrade.py

index 7cc6b3fc8e07141d023e43254a16135604c5a246..5071d6ff28655e74cbddea74719b131fe86cb11a 100644 (file)
@@ -281,7 +281,8 @@ class CephadmUpgrade:
 
         target_image = self.target_image
         target_id = self.upgrade_state.target_id
-        if not target_id or (self.mgr.use_repo_digest and not self.upgrade_state.repo_digest):
+        target_version = self.upgrade_state.target_version
+        if not target_id or not target_version or (self.mgr.use_repo_digest and not self.upgrade_state.repo_digest):
             # need to learn the container hash
             logger.info('Upgrade: First pull of %s' % target_image)
             try:
@@ -295,13 +296,24 @@ class CephadmUpgrade:
                     'detail': [str(e)],
                 })
                 return
+            if not target_version:
+                self._fail_upgrade('UPGRADE_FAILED_PULL', {
+                    'severity': 'warning',
+                    'summary': 'Upgrade: failed to pull target image',
+                    'count': 1,
+                    'detail': ['unable to extract ceph version from container'],
+                })
+                return
             self.upgrade_state.target_id = target_id
             # extract the version portion of 'ceph version {version} ({sha1})'
             self.upgrade_state.target_version = target_version.split(' ')[2]
             self.upgrade_state.repo_digest = repo_digest
             self._save_upgrade_state()
             target_image = self.target_image
-        target_version = self.upgrade_state.target_version
+        if target_version.startswith('ceph version '):
+            # tolerate/fix upgrade state from older version
+            self.upgrade_state.target_version = target_version.split(' ')[2]
+            target_version = self.upgrade_state.target_version
         target_major, target_minor, target_patch = target_version.split('.')
         target_major_name = self.mgr.lookup_release_name(int(target_major))
         logger.info('Upgrade: Target is version %s (%s), container %s id %s' % (