From 6888bb9ecd193a766bf22741d7510bc0bde8f003 Mon Sep 17 00:00:00 2001 From: Sergey Abramov Date: Fri, 13 May 2016 17:53:43 +0300 Subject: [PATCH] Fix cluster attributes dns_list and ntp_list Settings in release change. Cloned cluster should have values valid for its release. dns_list and net_list were text values but in version mitaka-9.0 it changed to text_list Change-Id: Iac0aa42b7c36333e6d9c40b8a27a19df9efe36f5 Closes-Bug: 1572179 (cherry picked from commit 5ae4c7ebdcdbf1621ce617de4ec019ae2b5670c4) --- .../cluster_upgrade/tests/test_upgrade.py | 40 +++++++++++++++++++ .../extensions/cluster_upgrade/upgrade.py | 7 ++++ 2 files changed, 47 insertions(+) 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