diff --git a/nailgun/nailgun/orchestrator/deployment_serializers.py b/nailgun/nailgun/orchestrator/deployment_serializers.py index b91c6aad9e..d69f12c53c 100644 --- a/nailgun/nailgun/orchestrator/deployment_serializers.py +++ b/nailgun/nailgun/orchestrator/deployment_serializers.py @@ -667,9 +667,14 @@ class DeploymentLCMSerializer(DeploymentHASerializer90): data = {} roles = [] for role_data in node.replaced_deployment_info: - roles.append(role_data.pop('role')) + if 'role' in role_data: + # if replaced_deployment_info consists + # of old serialized info, the old info + # have serialized data per role + roles.append(role_data.pop('role')) data = utils.dict_merge(data, role_data) - data['roles'] = roles + if roles: + data['roles'] = roles yield data def serialize_nodes(self, nodes): diff --git a/nailgun/nailgun/test/integration/test_orchestrator_serializer_90.py b/nailgun/nailgun/test/integration/test_orchestrator_serializer_90.py index a37e36aefa..98d21dfe7e 100644 --- a/nailgun/nailgun/test/integration/test_orchestrator_serializer_90.py +++ b/nailgun/nailgun/test/integration/test_orchestrator_serializer_90.py @@ -584,6 +584,22 @@ class TestDeploymentLCMSerialization90( self.assertIn('plugins', node) self.datadiff(plugins_data, node['plugins'], compare_sorted=True) + def test_serialize_with_customized(self): + objects.Cluster.prepare_for_deployment(self.cluster_db) + serialized = self.serializer.serialize(self.cluster_db, [self.node]) + + objects.Cluster.replace_deployment_info(self.cluster_db, serialized) + objects.Cluster.prepare_for_deployment(self.cluster_db) + cust_serialized = self.serializer.serialize( + self.cluster_db, [self.node]) + + for item in serialized: + if item['uid'] != consts.MASTER_NODE_UID: + self.assertIn(item, cust_serialized) + else: + item['cluster']['is_customized'] = True + self.assertIn(item, cust_serialized) + class TestDeploymentHASerializer90( TestSerializer90Mixin, @@ -602,6 +618,21 @@ class TestDeploymentHASerializer90( for ceph_key in expected_keys: self.assertIn(ceph_key, storage_attrs) + def test_serialize_with_customized(self): + cluster = self.env.clusters[0] + serializer = self.create_serializer(cluster) + + objects.Cluster.prepare_for_deployment(cluster) + serialized = serializer.serialize(cluster, cluster.nodes) + + objects.Cluster.replace_deployment_info(cluster, serialized) + objects.Cluster.prepare_for_deployment(cluster) + cust_serialized = serializer.serialize( + cluster, cluster.nodes) + + for item in serialized: + self.assertIn(item, cust_serialized) + class TestDeploymentTasksSerialization90( TestSerializer90Mixin,