+# Copyright (C) 2018 Verizon. All Rights Reserved
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from rest_framework import serializers
+
+from affected_vnfcs import AffectedVnfcsSerializer
+from affected_vls import AffectedVLsSerializer
+from affected_storages import AffectedStoragesSerializer
+from lcm.nf.const import LCM_OPERATION_TYPES, LCM_OPERATION_STATE_TYPES
+from link import LinkSerializer
+from response import ProblemDetailsSerializer
+from ext_virtual_link_info import ExtVirtualLinkInfoSerializer
+from vnf_info_modifications import VnfInfoModificationsSerializer
+
+
+class LinksSerializer(serializers.Serializer):
+ vnfInstance = LinkSerializer(
+ help_text="Link to the resource representing the VNF instance to "
+ "which the notified change applies.",
+ required=True,
+ allow_null=False)
+ subscription = LinkSerializer(
+ help_text="Link to the related subscription.",
+ required=True,
+ allow_null=False)
+ vnfLcmOpOcc = LinkSerializer(
+ help_text="Link to the VNF lifecycle management operation"
+ "occurrence that this notification is related to. Shall be"
+ "present if there is a related lifecycle operation occurance.",
+ required=False,
+ allow_null=False)
+
+
+class VnfLcmOperationOccurrenceNotification(serializers.Serializer):
+ id = serializers.CharField(
+ help_text="Identifier of this notification",
+ max_length=255,
+ required=True,
+ allow_null=False)
+ notificationType = serializers.CharField(
+ help_text="Type of the notification",
+ max_length=50,
+ required=True,
+ allow_null=False)
+ subscriptionId = serializers.CharField(
+ help_text="Identifier for the subscription",
+ required=False)
+ timeStamp = serializers.CharField(
+ help_text="Date-time of the generation of the notification.",
+ required=True)
+ notificationStatus = serializers.ChoiceField(
+ help_text="Indicates whether this notification reports about the start"
+ "of a lifecycle operation or the result of a lifecycle"
+ "operation",
+ choices=["START", "RESULT"],
+ required=True)
+ operationState = serializers.ChoiceField(
+ choices=LCM_OPERATION_STATE_TYPES,
+ help_text="The state of the VNF LCM operation occurrence. ",
+ required=True)
+ vnfInstanceId = serializers.CharField(
+ help_text="The identifier of the VNF instance affected. ",
+ required=True)
+ operation = serializers.ChoiceField(
+ help_text="The lifecycle management operation.",
+ required=True,
+ choices=LCM_OPERATION_TYPES)
+ isAutomaticInvocation = serializers.BooleanField(
+ help_text="Set to true if this VNF LCM operation occurrence has"
+ "been triggered by an automated procedure inside the"
+ "VNFM. Otherwise False",
+ required=True)
+ vnfLcmOpOccId = serializers.CharField(
+ help_text="The identifier of the VNF lifecycle management"
+ "operation occurrence associated to the notification.",
+ required=True)
+ affectedVnfcs = AffectedVnfcsSerializer(
+ help_text="Information about VNFC instances that were affected " +
+ "during the lifecycle operation.",
+ required=False,
+ many=True
+ )
+ affectedVirtualLinks = AffectedVLsSerializer(
+ help_text="Information about VL instances that were affected " +
+ "during the lifecycle operation. ",
+ required=False,
+ many=True
+ )
+ affectedVirtualStorages = AffectedStoragesSerializer(
+ help_text="Information about virtualised storage instances that " +
+ "were affected during the lifecycle operation",
+ required=False,
+ many=True
+ )
+ changedInfo = VnfInfoModificationsSerializer(
+ help_text="Information about the changed VNF instance information, " +
+ "including VNF configurable properties",
+ required=False,
+ allow_null=True)
+ changedExtConnectivity = ExtVirtualLinkInfoSerializer(
+ help_text="Information about changed external connectivity, if this " +
+ "notification represents the result of a lifecycle operation occurrence. " +
+ "Shall be present if the 'notificationStatus' is set to 'RESULT' and the " +
+ "'operation' is set to 'CHANGE_EXT_CONN'. Shall be absent otherwise.",
+ many=True,
+ required=False,
+ allow_null=True)
+ error = ProblemDetailsSerializer(
+ help_text="If 'operationState' is 'FAILED_TEMP' or 'FAILED' or " +
+ "'PROCESSING' or 'ROLLING_BACK' and previous value of 'operationState' " +
+ "was 'FAILED_TEMP' this attribute shall be present ",
+ allow_null=True,
+ required=False
+ )
+ _links = LinksSerializer(
+ help_text="Links to resources related to this resource.",
+ required=True)