diff --git a/nailgun/nailgun/extensions/cluster_upgrade/tests/test_upgrade.py b/nailgun/nailgun/extensions/cluster_upgrade/tests/test_upgrade.py index 7e1dee292b..4feeda9db6 100644 --- a/nailgun/nailgun/extensions/cluster_upgrade/tests/test_upgrade.py +++ b/nailgun/nailgun/extensions/cluster_upgrade/tests/test_upgrade.py @@ -140,3 +140,43 @@ class TestUpgradeHelperCloneCluster(base_tests.BaseCloneClusterTest): self.src_cluster.id) self.assertEqual(relation.orig_cluster_id, self.src_cluster.id) self.assertEqual(relation.seed_cluster_id, new_cluster.id) + + def _check_dns_and_ntp_list_values(self, new_cluster, dns_list, ntp_list): + self.assertEqual( + new_cluster.editable_attrs["external_ntp"]["ntp_list"]["value"], + ntp_list) + self.assertEqual( + new_cluster.editable_attrs["external_dns"]["dns_list"]["value"], + dns_list) + self.assertEqual( + new_cluster.editable_attrs["external_ntp"]["ntp_list"]["type"], + "text_list") + self.assertEqual( + new_cluster.editable_attrs["external_dns"]["dns_list"]["type"], + "text_list") + + def test_cluster_copy_attrs_with_different_types_dns_and_ntp_lists(self): + attrs = copy.deepcopy(self.src_cluster.editable_attrs) + attrs["external_ntp"]["ntp_list"]["type"] = "text" + attrs["external_ntp"]["ntp_list"]["value"] = "1,2,3" + attrs["external_dns"]["dns_list"]["type"] = "text" + attrs["external_dns"]["dns_list"]["value"] = "4,5,6" + self.src_cluster.editable_attrs = attrs + new_cluster = self.helper.create_cluster_clone( + self.src_cluster, self.data) + 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_cluster_copy_attrs_with_same_types_dns_and_ntp_lists(self): + attrs = copy.deepcopy(self.src_cluster.editable_attrs) + attrs["external_ntp"]["ntp_list"]["type"] = "text_list" + attrs["external_ntp"]["ntp_list"]["value"] = ["1", "2", "3"] + attrs["external_dns"]["dns_list"]["type"] = "text_list" + attrs["external_dns"]["dns_list"]["value"] = ["4", "5", "6"] + self.src_cluster.editable_attrs = attrs + new_cluster = self.helper.create_cluster_clone( + self.src_cluster, self.data) + self.helper.copy_attributes(self.src_cluster, new_cluster) + self._check_dns_and_ntp_list_values( + new_cluster, ["4", "5", "6"], ["1", "2", "3"]) diff --git a/nailgun/nailgun/extensions/cluster_upgrade/upgrade.py b/nailgun/nailgun/extensions/cluster_upgrade/upgrade.py index b84e366e1a..7cd771e8ad 100644 --- a/nailgun/nailgun/extensions/cluster_upgrade/upgrade.py +++ b/nailgun/nailgun/extensions/cluster_upgrade/upgrade.py @@ -41,6 +41,13 @@ def merge_attributes(a, b): for key, values in six.iteritems(pairs): if key != "metadata" and key in a_values: values["value"] = a_values[key]["value"] + # NOTE: In the mitaka-9.0 release types of values dns_list and + # ntp_list were changed from 'text' + # (a string of comma-separated IP-addresses) + # to 'text_list' (a list of strings of IP-addresses). + if a_values[key]['type'] == 'text' and \ + values['type'] == 'text_list': + values["value"] = values['value'].split(',') return attrs