From 7cf3fe9b3aa0965514e4370e908909e548ff918e Mon Sep 17 00:00:00 2001 From: Ilya Kharin Date: Tue, 23 Aug 2016 01:04:21 +0300 Subject: [PATCH] Disallow to change operating system during upgrade Changing of an operating system for clouds nodes is not supported and is not tested at all. That's why this additional validation was added. Change-Id: Ibf6db17f783879eff88e2366dfdb0a2871e2aa0a --- cluster_upgrade/objects/adapters.py | 4 ++++ cluster_upgrade/tests/test_validators.py | 8 ++++++++ cluster_upgrade/validators.py | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/cluster_upgrade/objects/adapters.py b/cluster_upgrade/objects/adapters.py index cf4751b..7a00c0c 100644 --- a/cluster_upgrade/objects/adapters.py +++ b/cluster_upgrade/objects/adapters.py @@ -100,6 +100,10 @@ class NailgunReleaseAdapter(object): uid, fail_if_not_found=fail_if_not_found) return release + @property + def operating_system(self): + return self.release.operating_system + @property def is_deployable(self): return objects.Release.is_deployable(self.release) diff --git a/cluster_upgrade/tests/test_validators.py b/cluster_upgrade/tests/test_validators.py index 056c1cb..cf81cb8 100644 --- a/cluster_upgrade/tests/test_validators.py +++ b/cluster_upgrade/tests/test_validators.py @@ -58,6 +58,14 @@ class TestClusterUpgradeValidator(tests_base.BaseCloneClusterTest): self.validator.validate_release_upgrade(self.dst_release, self.src_release) + def test_validate_release_upgrade_to_different_os(self): + self.dst_release.operating_system = consts.RELEASE_OS.centos + msg = "^Changing of operating system is not possible during upgrade " \ + "\(from {0} to {1}\).$".format("Ubuntu", "CentOS") + with self.assertRaisesRegexp(errors.InvalidData, msg): + self.validator.validate_release_upgrade(self.src_release, + self.dst_release) + def test_validate_cluster_name(self): self.validator.validate_cluster_name("cluster-42") diff --git a/cluster_upgrade/validators.py b/cluster_upgrade/validators.py index 0dcd286..78f959e 100644 --- a/cluster_upgrade/validators.py +++ b/cluster_upgrade/validators.py @@ -62,6 +62,12 @@ class ClusterUpgradeValidator(base.BasicValidator): "this release is equal or lower than the release of the " "original cluster.".format(new_release.id), log_message=True) + if orig_release.operating_system != new_release.operating_system: + raise errors.InvalidData( + "Changing of operating system is not possible during upgrade " + "(from {0} to {1}).".format(orig_release.operating_system, + new_release.operating_system), + log_message=True) @classmethod def validate_cluster_name(cls, cluster_name):