Adapt extension to new serialization methods

This commit is contained in:
Vladimir Kuklin 2016-09-09 18:34:37 +03:00
parent caebcc64b7
commit 781faccfce
3 changed files with 58 additions and 19 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
*.py[cod]
.idea
# C extensions
*.so

View File

@ -19,6 +19,7 @@ from nailgun import extensions
from nailgun import objects
from nailgun.orchestrator.deployment_serializers import \
get_serializer_for_cluster
from nailgun import utils
logger = logging.getLogger(__name__)
@ -27,38 +28,71 @@ logger = logging.getLogger(__name__)
class ConvertPreLCMtoLCM(extensions.BasePipeline):
@classmethod
def pre_process_data(cls, data, cluster, nodes, **kwargs):
def pre_process_data_for_cluster(cls,cluster, data, **kwargs):
return data
@classmethod
def post_process_data(cls, data, cluster, nodes, **kwargs):
def post_process_data_for_cluster(cls, cluster, data, **kwargs):
return data
@classmethod
def serialize(cls, data, cluster, nodes, **kwargs):
def pre_process_data_for_node(cls, node, data, **kwargs):
return data
@classmethod
def post_process_data_for_node(cls, node, data, **kwargs):
return data
@classmethod
def serialize_cluster(cls, cluster, data, **kwargs):
if objects.Release.is_lcm_supported(cluster.release):
return data
serializer = get_serializer_for_cluster(cluster)()
real_data = serializer.serialize(cluster, nodes, **kwargs)
return real_data
else:
serializer = get_serializer_for_cluster(cluster)()
serializer.initialize(cluster)
common_attrs = serializer.get_common_attrs(cluster)
if cluster.replaced_deployment_info:
# patch common attributes with custom deployment info
utils.dict_update(
common_attrs, cluster.replaced_deployment_info
)
return common_attrs
@classmethod
def process_deployment(cls, data, cluster, nodes, **kwargs):
pre_processed_data = cls.pre_process_data(data,
cluster, nodes, **kwargs)
real_data = cls.serialize(pre_processed_data, cluster, nodes, **kwargs)
post_processed_data = cls.post_process_data(real_data,
cluster, nodes, **kwargs)
def serialize_node(cls, node, data, **kwargs):
if objects.Release.is_lcm_supported(node.cluster.release):
return data
else:
serializer = get_serializer_for_cluster(node.cluster)()
serializer.initialize(node.cluster)
role = objects.Node.all_roles(node)[0]
real_data = serializer.serialize_node({}, node, role)
return real_data
@classmethod
def process_deployment_for_cluster(cls, cluster, data, **kwargs):
pre_processed_data = cls.pre_process_data_for_cluster(cluster, data, **kwargs)
real_data = cls.serialize_cluster(cluster, pre_processed_data, **kwargs)
post_processed_data = cls.post_process_data_for_cluster(cluster, real_data, **kwargs)
# copypaste cluster specific values from LCM serializer.
# This is needed for tasks paramters interpolation like CLUSTER_ID
cluster_data = data[0]['cluster']
for node_data in post_processed_data:
node_data['cluster'] = cluster_data
cluster_data = data['cluster']
post_processed_data['cluster'] = cluster_data
return post_processed_data
@classmethod
def process_provisioning(cls, data, cluster, nodes, **kwargs):
return data
def process_deployment_for_node(cls, node, node_data, **kwargs):
pre_processed_data = cls.pre_process_data_for_node(node, node_data, **kwargs)
real_data = cls.serialize_node(node, pre_processed_data, **kwargs)
post_processed_data = cls.post_process_data_for_node(node, real_data,
**kwargs)
return post_processed_data
#@classmethod
#def process_provisioning(cls, data, cluster, nodes, **kwargs):
# return data
class ConvertedSerializersExtension(extensions.BaseExtension):

View File

@ -27,11 +27,13 @@ from nailgun import objects
from nailgun import rpc
from nailgun.orchestrator import deployment_serializers
from nailgun.orchestrator.deployment_serializers import \
deployment_info_to_legacy
from nailgun.orchestrator.deployment_serializers import \
get_serializer_for_cluster
from nailgun.orchestrator.neutron_serializers import \
from nailgun.extensions.network_manager.serializers.neutron_serializers import \
NeutronNetworkDeploymentSerializer80
from nailgun.orchestrator.neutron_serializers import \
from nailgun.extensions.network_manager.serializers.neutron_serializers import \
NeutronNetworkTemplateSerializer80
from nailgun.test.integration.test_orchestrator_serializer import \
BaseDeploymentSerializer
@ -307,6 +309,8 @@ class TestDeploymentAttributesSerialization80MixIn(
objects.Cluster.prepare_for_deployment(self.cluster_db)
serialized_for_astute = self.serializer.serialize(
self.cluster_db, self.cluster_db.nodes)
serialized_for_astute = deployment_info_to_legacy(
serialized_for_astute)
for node in serialized_for_astute:
self.assertEqual(
{