From a78f4348f84dd470ba1f3b99d2c751fa2dd12d7a Mon Sep 17 00:00:00 2001 From: Anastasiya Date: Mon, 1 Aug 2016 14:39:35 +0300 Subject: [PATCH] Move change_env_settings function from octane to cluster upgrade extension * change_env_settings function was moved to cluster upgrade extention * merge generated attributes code was written Change-Id: I6d1e27b8b0c01f3251067bc88931cd2354feb5ce Partial-Bug: #1602587 (cherry picked from commit dc2e3f930957b2c8af2d6c6a60bfcc6c5e6bb061) --- cluster_upgrade/tests/test_upgrade.py | 31 +++++++++++++++++++++++++-- cluster_upgrade/upgrade.py | 15 ++++++++++++- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/cluster_upgrade/tests/test_upgrade.py b/cluster_upgrade/tests/test_upgrade.py index 015fd48..296d819 100644 --- a/cluster_upgrade/tests/test_upgrade.py +++ b/cluster_upgrade/tests/test_upgrade.py @@ -97,8 +97,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": @@ -211,3 +219,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 e0792c0..939cc4a 100644 --- a/cluster_upgrade/upgrade.py +++ b/cluster_upgrade/upgrade.py @@ -53,6 +53,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"]) @@ -90,6 +97,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 @@ -110,13 +118,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.