diff --git a/cluster_upgrade/tests/test_upgrade.py b/cluster_upgrade/tests/test_upgrade.py index 2e5a162..8b6c7b2 100644 --- a/cluster_upgrade/tests/test_upgrade.py +++ b/cluster_upgrade/tests/test_upgrade.py @@ -98,8 +98,16 @@ class TestUpgradeHelperCloneCluster(base_tests.BaseCloneClusterTest): self.helper.copy_attributes(self.src_cluster, new_cluster) - self.assertEqual(self.src_cluster.generated_attrs, - new_cluster.generated_attrs) + self.assertNotEqual(new_cluster.generated_attrs.get('provision'), + self.src_cluster.generated_attrs.get('provision')) + + # We make image_data in src_cluster and in new_cluster the same + # to validate that all other generated attributes are equal + generated_attrs = copy.deepcopy(self.src_cluster.generated_attrs) + generated_attrs['provision']['image_data'] = \ + new_cluster.generated_attrs['provision']['image_data'] + + self.assertEqual(generated_attrs, new_cluster.generated_attrs) editable_attrs = self.src_cluster.editable_attrs for section, params in six.iteritems(new_cluster.editable_attrs): if section == "repo_setup": @@ -212,3 +220,22 @@ class TestUpgradeHelperCloneCluster(base_tests.BaseCloneClusterTest): self.helper.copy_attributes(self.src_cluster, new_cluster) self._check_dns_and_ntp_list_values( new_cluster, ["4", "5", "6"], ["1", "2", "3"]) + + def test_change_env_settings(self): + new_cluster = self.helper.create_cluster_clone(self.src_cluster, + self.data) + self.helper.copy_attributes(self.src_cluster, new_cluster) + attrs = new_cluster.attributes + self.helper.change_env_settings(self.src_cluster, new_cluster) + self.assertEqual('image', + attrs['editable']['provision']['method']['value']) + + def test_change_env_settings_no_editable_provision(self): + new_cluster = self.helper.create_cluster_clone(self.src_cluster, + self.data) + self.helper.copy_attributes(self.src_cluster, new_cluster) + attrs = new_cluster.attributes + attrs['editable']['provision']['method']['value'] = 'cobbler' + self.helper.change_env_settings(self.src_cluster, new_cluster) + self.assertEqual('image', + attrs['editable']['provision']['method']['value']) diff --git a/cluster_upgrade/upgrade.py b/cluster_upgrade/upgrade.py index 5ad22ab..e0a3aa7 100644 --- a/cluster_upgrade/upgrade.py +++ b/cluster_upgrade/upgrade.py @@ -54,6 +54,13 @@ def merge_attributes(a, b): return attrs +def merge_generated_attrs(new_attrs, orig_attrs): + # skip attributes that should be generated for new cluster + attrs = copy.deepcopy(orig_attrs) + attrs.pop('provision', None) + return utils.dict_merge(new_attrs, attrs) + + def merge_nets(a, b): new_settings = copy.deepcopy(b) source_networks = dict((n["name"], n) for n in a["networks"]) @@ -91,6 +98,7 @@ class UpgradeHelper(object): cls.copy_network_config(orig_cluster, new_cluster) relations.UpgradeRelationObject.create_relation(orig_cluster.id, new_cluster.id) + cls.change_env_settings(orig_cluster, new_cluster) return new_cluster @classmethod @@ -111,13 +119,18 @@ class UpgradeHelper(object): # version to another. A set of this kind of steps # should define an upgrade path of a particular # cluster. - new_cluster.generated_attrs = utils.dict_merge( + new_cluster.generated_attrs = merge_generated_attrs( new_cluster.generated_attrs, orig_cluster.generated_attrs) new_cluster.editable_attrs = merge_attributes( orig_cluster.editable_attrs, new_cluster.editable_attrs) + @classmethod + def change_env_settings(cls, orig_cluster, new_cluster): + attrs = new_cluster.attributes + attrs['editable']['provision']['method']['value'] = 'image' + @classmethod def transform_vips_for_net_groups_70(cls, vips): """Rename or remove types of VIPs for 7.0 network groups.