+from enum import auto, IntEnum
+from typing import List
+
+
+#######################################################################################
+# Defining States
+class VimState(IntEnum):
+ PROCESSING = auto()
+ ENABLED = auto()
+ ERROR = auto()
+
+
+class VimOperationState(IntEnum):
+ COMPLETED = auto()
+ FAILED = auto()
+
+
+class NsState(IntEnum):
+ PROCESSING = auto()
+ INSTANTIATED = auto()
+ ERROR = auto()
+
+
+class VnfLcmOperationState(IntEnum):
+ PROCESSING = auto()
+ COMPLETED = auto()
+ FAILED = auto()
+
+
+class VnfInstantiationState(IntEnum):
+ NOT_INSTANTIATED = auto()
+ INSTANTIATED = auto()
+
+
+class VnfState(IntEnum):
+ STOPPED = auto()
+ STARTED = auto()
+
+
+class LcmOperationState(IntEnum):
+ PROCESSING = auto()
+ COMPLETED = auto()
+ FAILED = auto()
+
+
+#######################################################################################
+# Workflow Dataclasses
+
+
+@dataclass
+class VimOperationInput:
+ """
+ Input dataclass for workflows that perform operations
+ (create, update, delete) on VIMs.
+
+ Attributes:
+ -----------
+ vim_uuid : str
+ The UUID of the VIM account as stored in the OSM vim
+ collection in Mongo
+
+ op_id: str
+ The operation (task) id for this workflow. This is used
+ by the workflow at the end to update the status of the
+ operation in Mongo vim collection.
+ """
+
+ vim_uuid: str
+ op_id: str
+
+
+@dataclass
+class NsLcmOperationInput:
+ """
+ Input dataclass for workflows that run as LCM operations.
+
+ Attributes:
+ -----------
+
+ nslcmop: dict
+ A dictionary representing the nslcmop record from the
+ database.
+ """
+
+ nslcmop: dict
+
+
+@dataclass
+class CharmInfo:
+ """
+ Input dataclass for
+
+ Attributes:
+ -----------
+ app_name : str
+
+ channel: str
+
+ entity_url: str
+ """
+
+ app_name: str
+ channel: str
+ entity_url: str
+
+
+@dataclass
+class GetVimCloudInput:
+ """
+ Input dataclass for get vim cloud activity.
+
+ Attributes:
+ -----------
+ vnfr_uuid : str
+ The UUID of the VNF which is stored in the OSM vnfrs
+ collection in Mongo.
+
+ """
+
+ vnfr_uuid: str
+
+
+@dataclass
+class GetVimCloudOutput:
+ """
+ Output dataclass for get vim cloud activity.
+
+ Attributes:
+ -----------
+ cloud : str
+ Type of the cloud which is used to Deploy VNF.
+ """
+
+ cloud: str
+
+
+@dataclass
+class VduComputeConstraints:
+ """
+ Input dataclass for VDU constraints
+
+ Attributes:
+ -----------
+ cores : int (Number of virtual CPUs)
+
+ mem: int (GB)
+ """
+
+ cores: int
+ mem: int
+
+
+@dataclass
+class VduInstantiateInput:
+ """
+ Input dataclass for workflow that instantiates a VDU.
+
+ vim_uuid: str
+
+ model_name: str
+
+ charm_info : CharmInfo
+
+ constraints: VduComputeConstraints
+
+ cloud: VIM cloud type
+
+ config: Config details of application
+ """
+
+ vim_uuid: str
+ model_name: str
+ charm_info: CharmInfo
+ constraints: VduComputeConstraints
+ cloud: str
+ config: dict
+
+
+@dataclass
+class VnfInstantiateInput:
+ """
+ Input dataclass for workflow that instantiates a VNF.
+
+ Attributes:
+ -----------
+ vnfr_uuid : str
+ The UUID of the VNF which is stored in the OSM vnfrs
+ collection in Mongo.
+
+ model_name: str
+
+ """
+
+ vnfr_uuid: str
+ model_name: str
+
+
+@dataclass
+class GetNsRecordInput:
+ """
+ Input dataclass for getting NS record activity.
+
+ Attributes:
+ -----------
+ nsr_uuid :
+ The UUID of the NS record which is stored in the OSM nsrs
+ collection in Mongo.
+
+ """
+
+ nsr_uuid: str
+
+
+@dataclass
+class GetNsRecordOutput:
+ """
+ Output dataclass for getting NS record activity.
+
+ Attributes:
+ -----------
+ nsr : dict
+ NS record retrieved from Database..
+
+ """
+
+ nsr: dict
+
+
+#######################################################################################
+# Activity Dataclasses
+
+
+@dataclass
+class UpdateLcmOperationStateInput:
+ """
+ Input dataclass for updating LCM Operations in the Mongo nslcmops
+ collection. The following attributes will be updated automatically
+ - statusEnteredTime
+ - _admin.modified
+
+ Attributes:
+ -----------
+ op_id: str
+ The operation (task) id for this activity. This is the key
+ to the record in nslcmops collection that will be updated.
+
+ op_state : LcmOperationState
+ A representation of the state of the specified operation id,
+ such as PROCESSING, COMPLETED, or FAILED.
+
+ stage: str
+ Human readable checkpoint message, intended only to give the
+ user feedback.
+
+ error_message: str
+ Human readable error message if any failure occurred.
+
+ detailed_status : str
+ Human readable message providing additional details to the
+ operation state, such as the error message explaining why
+ the operation failed.
+ """
+
+ op_id: str
+ op_state: LcmOperationState
+ stage: str
+ error_message: str
+ detailed_status: str