# Copyright (c) ETSI 2017
# https://forge.etsi.org/etsi-forge-copyright-notice.txt

definitions:
  HealNsRequest:
    description: >
      This operation supports the healing of an NS instance, 
      either by healing the complete NS instance or by healing one of
      more of the VNF instances that are part of this NS. 
      It shall comply with the provisions defined in Table 6.5.2.13-1.
    type: object
    properties:
      healNsData:
        description: >
          Indicates the reason why a healing procedure is required.
        $ref: "#/definitions/HealNsData"
      healVnfData:
        description: >
          Additional parameters passed by the NFVO as input to the healing
          process, specific to the VNF being healed, as declared in the VNFD
          as part of "HealVnfOpConfig".        
        type: array
        items:
          $ref: "#/definitions/HealVnfData"
        
  NsLcmOpOcc:
    description: >
      This type represents a request a NS lifecycle operation occurrence. 
      It shall comply with the provisions defined in Table 6.5.2.3-1.
    type: object
    required:
      - id
      - operationState
      - stateEnteredTime
      - nsInstanceId
      - lcmOperationType
      - startTime      
      - isAutomaticInvocation
      - operationParams
      - isCancelPending
    properties:
      id:
        description: >
          Identifier of this NS lifecycle operation occurrence.
        $ref: "SOL005_def.yaml#/definitions/Identifier"
      operationState:
        description: >
          The state of the NS LCM operation.
        $ref: "SOL005NSLifecycleManagement_def.yaml#/definitions/NsLcmOperationStateType"
      stateEnteredTime:
        description: >
          Date-time when the current state was entered.
        type: string
        format: date-time
      nsInstanceId:
        description: >
          Identifier of the NS instance to which the operation applies.
        $ref: "SOL005_def.yaml#/definitions/Identifier"
      lcmOperationType:
        description: >
          Type of the actual LCM operation represented by this
          lcm operation occurrence.
        $ref: "SOL005NSLifecycleManagement_def.yaml#/definitions/NsLcmOpType"        
      startTime:
        description: >
          Date-time of the start of the operation.
        type: string
        format: date-time
      isAutomaticInvocation:
        description: >
          Set to true if this NS LCM operation occurrence has
          been automatically triggered by the NFVO. This occurs
          in the case of auto-scaling, auto-healing and when a
          nested NS is modified as a result of an operation on its
          composite NS. Set to false otherwise.
        type: boolean
      operationParams:
        description: >
          Input parameters of the LCM operation. This attribute
          shall be formatted according to the request data type of
          the related LCM operation.
          The following mapping between lcmOperationType and
          the data type of this attribute shall apply:
          - INSTANTIATE: InstantiateNsRequest
          - SCALE: ScaleNsRequest
          - UPDATE: UpdateNsRequest
          - HEAL: HealNsRequest
          - TERMINATE: TerminateNsRequest
        $ref: "SOL005_def.yaml#/definitions/KeyValuePairs"
      isCancelPending:
        description: >
          If the LCM operation occurrence is in "PROCESSING"
          or "ROLLING_BACK" state and the operation is being
          cancelled, this attribute shall be set to true. Otherwise, it
          shall be set to false.
        type: boolean
      cancelMode:
        description: >
          The mode of an ongoing cancellation. Shall be present
          when isCancelPending=true, and shall be absent otherwise.
        $ref: "#/definitions/CancelModeType"
      error:
        description: >
          If "operationState" is "FAILED_TEMP" or "FAILED" or "operationState"
          is "PROCESSING" or "ROLLING_BACK" and previous value of
          "operationState" was "FAILED_TEMP", this attribute shall be present
          and contain error information, unless it has been requested to be
          excluded via an attribute selector.
        $ref: "SOL005_def.yaml#/definitions/ProblemDetails"
      resourceChanges:
        description: >
          This attribute contains information about the cumulative
          changes to virtualised resources that were performed so
          far by the LCM operation since its start, if applicable
        type: object
        properties:
          affectedVnfs:
            description: >
              Information about the VNF instances that were affected
              during the lifecycle operation, if this notification
              represents the result of a lifecycle operation..
            type: array
            items:
              $ref: "SOL005NSLifecycleManagement_def.yaml#/definitions/AffectedVnf"
          affectedPnfs:
            description: >
              Information about the PNF instances that were affected
              during the lifecycle operation, if this notification
              represents the result of a lifecycle operation.
            type: array
            items:
              $ref: "SOL005NSLifecycleManagement_def.yaml#/definitions/AffectedPnf"
          affectedVls:
            description: >
              Information about the VL instances that were affected
              during the lifecycle operation, if this notification
              represents the result of a lifecycle operation.
            type: array
            items:
              $ref: "SOL005NSLifecycleManagement_def.yaml#/definitions/AffectedVl"
          affectedVnffgs:
            description: >
              Information about the VNFFG instances that were
              affected during the lifecycle operation, if this notification              
              represents the result of a lifecycle operation. See note
            type: array
            items:
              $ref: "SOL005NSLifecycleManagement_def.yaml#/definitions/AffectedVnffg"
          affectedNss:
            description: >
              Information about the nested NS instances that were
              affected during the lifecycle operation, if this notification
              represents the result of a lifecycle operation. See note.
            type: array
            items:
              $ref: "SOL005NSLifecycleManagement_def.yaml#/definitions/AffectedNs"
          affectedSaps:
            description: >
              Information about the nested NS instances that were
              affected during the lifecycle operation, if this notification
              represents the result of a lifecycle operation. See note.
            type: array
            items:
              $ref: "SOL005NSLifecycleManagement_def.yaml#/definitions/AffectedSap"
      _links:
        description: >
          Links to resources related to this resource.
        type: object
        properties:
          self:
            description: >
              URI of this resource.
            $ref: "SOL005_def.yaml#/definitions/Link"
          nsInstance:
            description: >
              Link to the NS instance that the operation applies to.
            $ref: "SOL005_def.yaml#/definitions/Link"
          cancel:
            description: >
              Link to the task resource that represents the "cancel"
              operation for this LCM operation occurrence, if
              cancelling is currently allowed.
            $ref: "SOL005_def.yaml#/definitions/Link"
          retry:
            description: >
              Link to the task resource that represents the "cancel"
              operation for this LCM operation occurrence, 
              if cancelling is currently allowed.
            $ref: "SOL005_def.yaml#/definitions/Link"
          rollback:
            description: >
               Link to the task resource that represents the "rollback"
               operation for this LCM operation occurrence, if rolling
               back is currently allowed.
            $ref: "SOL005_def.yaml#/definitions/Link"
          continue:
            description: >
              Link to the task resource that represents the "continue"
              operation for this LCM operation occurrence, if rolling
              back is currently allowed.
            $ref: "SOL005_def.yaml#/definitions/Link"
          fail:
            description: >
              Link to the task resource that represents the "fail"
              operation for this LCM operation occurrence, if rolling
              back is currently allowed.
            $ref: "SOL005_def.yaml#/definitions/Link"
  CancelMode:
    description: >
      This type represents a parameter to select the mode of canceling an ongoing NS LCM operation occurrence. 
      It shall comply with the provisions defined in Table 6.5.2.16-1..
    type: object
    required: 
      - cancelMode
    properties:
      cancelMode:
        description: >
          Cancellation mode to apply.
        $ref: "#/definitions/CancelModeType"
        
  CancelModeType:
    description: >
      Cancellation mode.
      
      The NFVO shall not start any new VNF lifecycle management and resource
      management operation, and shall wait for the ongoing VNF lifecycle management
      and resource management operations in the underlying system, typically the VNFM
      and VIM, to finish execution or to time out. After that, the NFVO shall put the
      operation occurrence into the FAILED_TEMP state.
      
      The NFVO shall not start any new VNF lifecycle management and resource
      management operation, shall cancel the ongoing VNF lifecycle management and
      resource management operations in the underlying system, typically the VNFM and
      VIM, and shall wait for the cancellation to finish or to time out. After that, the NFVO
      shall put the operation occurrence into the FAILED_TEMP state.
    type: string
    enum:
      - GRACEFUL
      - FORCEFUL
      
  HealNsData:
    description: >
      This type represents the information used to heal a NS. 
      It shall comply with the provisions defined in Table 6.5.3.43-1.
    type: object
    required: 
      - degreeHealing      
    properties:
      degreeHealing:
        description: >
          Indicates the degree of healing. Possible values
          include:
          - HEAL_RESTORE: Complete the healing of
          the NS restoring the state of the NS before
          the failure occurred
          - HEAL_QOS: Complete the healing of the NS
          based on the newest QoS values
          - HEAL_RESET: Complete the healing of the
          NS resetting to the original instantiation state of the NS
          - PARTIAL_HEALING
        type: string
        enum: 
          - HEAL_RESTORE
          - HEAL_QOS
          - HEAL_RESET          
          - PARTIAL_HEALING                    
      actionsHealing:
        description: >
          Used to specify dedicated healing actions in a
          particular order (e.g. as a script). The actionsHealing
          attribute can be used to provide a specific script whose
          content and actions might only be possible to be
          derived during runtime.
        type: array
        items:
          $ref: "SOL005_def.yaml#/definitions/String"
      healScript:
        description: >
          Reference to a script from the NSD that shall be used
          to execute dedicated healing actions in a particular
          order. The healScript, since it refers to a script in the
          NSD, can be used to execute healing actions which
          are defined during NS design time.
        $ref: "SOL005_def.yaml#/definitions/IdentifierInNsd"   
      additionalParamsforNs:
        description: >
          Allows the OSS/BSS to provide additional
          parameter(s) to the healing process at the NS level.
        $ref: "SOL005_def.yaml#/definitions/KeyValuePairs"
        
  HealVnfData:
    description: >
      This type represents the information to heal a VNF that is part of an NS. 
      The NFVO shall then invoke the HealVNF
      operation towards the appropriate VNFM. 
      It shall comply with the provisions defined in Table 6.5.3.44-1.
    type: object
    required: 
      - vnfInstanceId      
    properties:
      vnfInstanceId:
        description: >
          Identifies the VNF instance, part of the NS, requiring a
          healing action.
        $ref: "SOL005_def.yaml#/definitions/Identifier"                
      cause:
        description: >
          Indicates the reason why a healing procedure is required.
        type: string
      additionalParams:
        description: >
          Additional parameters passed by the NFVO as input to
          the healing process, specific to the VNF being healed.
          EXAMPLE: Input parameters to VNF-specific healing procedures.
        $ref: "SOL005_def.yaml#/definitions/KeyValuePairs"
        
  TerminateNsRequest:
    description: >
      This type represents a NS termination request. 
      It shall comply with the provisions defined in Table 6.5.2.15-1.
    type: object
    properties:
      terminationTime:
        description: >
          Timestamp indicating the end time of the NS, i.e. the NS
          will be terminated automatically at this timestamp.
          Cardinality "0" indicates the NS termination takes place immediately
        $ref: "SOL005_def.yaml#/definitions/DateTime"
  DateTime:
    $ref: "SOL005_def.yaml#/definitions/DateTime"