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

definitions:
  Alarm:
    description: >
      The alarm data type encapsulates information about an alarm. It shall comply with the provisions defined in 
      table 7.5.2.4-1.

      If the attribute "faultType" has the value "NFVI_OAM_VIRTUALISED_RESOURCE_STATE_CHANGE", 
      the following provisions apply for the values of the attribute "faultDetails" related to 
      changes in the state of virtualised resources:
        - One of the entries in the array shall provide information about the anticipated time of maintenance in the
          following format: "anticipatedTime=$time", wherein "$time" shall be formatted as a "DateTime", as specified
          in ETSI GS NFV-SOL 013 [6].
        - One of the entries in the array shall provide identification information about the affinity/anti-affinity group
          defined in the VNFD that is associated to the affected virtualised resource indicated by "rootCauseFaultyResource" 
          in the following format: "affinityOrAntiAffinityGroupId=$group", wherein "$group" shall be equal to the 
          "affinityOrAntiAffinityGroupId" value in the corresponding "VduProfile" (for a VNFC/COMPUTE affected resource) 
          or "VirtualLinkProfile" for a VL/NETWORK affected resource) in the VNFD, which is mapped by the VNFM to the 
          virtualised resource group identifier in the virtualised resource change notification received by the VNFM from 
          the VIM.

      NOTE 1: For an alarm about upcoming impact due to NFVI operation and maintenance (i.e. the attribute "faultType" 
              has the value "NFVI_OAM_VIRTUALISED_RESOURCE_STATE_CHANGE"), the attribute "rootCauseFaultyResource" 
              indicates a resource to be impacted. Further information on the upcoming impact (e.g. group of impacted 
              resources, time of impact) is provided in the attribute "faultDetails".
      NOTE 2: When alarms are due to upcoming NFVI operation and maintenance (i.e. the attribute "faultType" has the
              value "NFVI_OAM_VIRTUALISED_RESOURCE_STATE_CHANGE"), the attribute "faultDetails" shall include information 
              about the anticipated time of the maintenance. See provisions under the present table.
    type: object
    required:
      - id
      - managedObjectId
      - alarmRaisedTime
      - ackState
      - perceivedSeverity
      - eventTime
      - eventType
      - probableCause
      - isRootCause
      - _links
    properties:
      id:
        description: >
          Identifier of this Alarm information element.
        $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/Identifier"
      managedObjectId:
        description: >
          Identifier of the affected VNF instance.
        $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/Identifier"
      vnfcInstanceIds:
        description: >
          Identifiers of the affected VNFC instances. Each identifier references the 
          "id" attribute in a "VnfcInfo" structure. Shall be present if the alarm affects 
          at least one VNFC instance.
        type: array
        items:
          $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/IdentifierInVnf"
      rootCauseFaultyResource:
        description: >
          The virtualised resources that are causing the VNF fault. Shall be present if the alarm affects 
          virtualised resources. See note 1.
        $ref: "../../../definitions/SOL002SOL003VNFFaultManagement_def.yaml#/definitions/FaultyResourceInfo"
      alarmRaisedTime:
        description: >
          Time stamp indicating when the alarm is raised by the managed
          object.
        $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/DateTime"
      alarmChangedTime:
        description: >
          Time stamp indicating when the alarm was last changed. It shall be
          present if the alarm has been updated.
        $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/DateTime"
      alarmClearedTime:
        description: >
          Time stamp indicating when the alarm was cleared. It shall be
          present if the alarm has been cleared.
        $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/DateTime"
      alarmAcknowledgedTime:
        description: >
          Time stamp indicating when the alarm was
          acknowledged. It shall be present if the alarm has
          been acknowledged.
        $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/DateTime"
      ackState:
        description: >
          Acknowledgement state of the alarm. 
          Permitted values:
          * UNACKNOWLEDGED
          * ACKNOWLEDGED.
        type: string
        enum:
          - UNACKNOWLEDGED
          - ACKNOWLEDGED
      perceivedSeverity:
        description: >
          Perceived severity of the managed object failure.
        $ref: "../../../definitions/SOL002SOL003VNFFaultManagement_def.yaml#/definitions/PerceivedSeverityType"
      eventTime:
        description: >
          Time stamp indicating when the fault was observed. See note 2.
        $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/DateTime"
      eventType:
        description: >
          Type of event.
        $ref: "../../../definitions/SOL002SOL003VNFFaultManagement_def.yaml#/definitions/EventType"
        type: string
      faultType:
        description: >
          Additional information to clarify the type of the fault.
          If the alarm is related to changes in the state of virtualised resources due to NFVI 
          operation and maintenance, this attribute shall be set to "NFVI_OAM_VIRTUALISED_RESOURCE_STATE _CHANGE".
        type: string
      probableCause:
        description: >
          Information about the probable cause of the fault.
          If the attribute "faultType" has the value “NFVI_OAM_VIRTUALISED_RESOURCE_STATE_CHANGE”, the 
          permitted values are: 
            - "NFVI_COMPONENT_MAINTENANCE": Maintenance of NFVI components, e.g. physical maintenance/repair, 
              hypervisor software updates, etc.
            - "NFVI_COMPONENT_EVACUATION": Evacuation of physical hosts.
            - "NFVI_COMPONENT_OPTIMIZATION": Operation and management of NFVI resources, e.g. to support energy
              efficiency or resource usage optimization.
        type: string
      isRootCause:
        description: >
          Attribute indicating if this fault is the root for other correlated
          alarms. If TRUE, then the alarms listed in the attribute
          CorrelatedAlarmId are caused by this fault.
        $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/Boolean"
      correlatedAlarmIds:
        description: >
          List of identifiers of other alarms correlated to this fault.
        type: array
        items:
          $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/Identifier"
      faultDetails:
        description: >
          Provides additional information about the fault. See notes 1 and 2.
        type: array
        items:
          type: string
      _links:
        description: >
          Links for this resource.
        type: object
        required:
          - self
        properties:
          self:
            description: >
              URI of this resource.
            $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/Link"
          objectInstance:
            description: >
              Link to the resource representing the VNF instance to which the
              notified alarm is correlated. Shall be present if the VNF
              instance information is accessible as a resource.
            $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/Link"

  AlarmNotification:
    description: >
      This type represents an alarm notification about VNF faults.
      This notification shall be triggered by the VNFM when:
      * An alarm has been created.
      * An alarm has been updated, e.g. if the severity of the alarm has
        changed.
    type: object
    required:
      - id
      - notificationType
      - subscriptionId
      - timeStamp
      - alarm
      - _links
    properties:
      id:
        description: >
          Identifier of this notification. If a notification is sent multiple
          times due to multiple subscriptions, the "id" attribute of all these
          notifications shall have the same value.
        $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/Identifier"
      notificationType:
        description: >
          Discriminator for the different notification types. Shall be set to
          "AlarmNotification" for this notification type.
        type: string
        enum:
          - AlarmNotification
      subscriptionId:
        description: >
          Identifier of the subscription that this notification relates to.
        $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/Identifier"
      timeStamp:
        description: >
          Date-time of the generation of the notification.
        $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/DateTime"
      alarm:
        description: >
          Information about an alarm including AlarmId, affected VNF
          identifier, and FaultDetails.
        $ref: "#/definitions/Alarm"
      _links:
        description: >
          Links to resources related to this notification.
        type: object
        required:
          - subscription
        properties:
          subscription:
            description: >
              Link to the related subscription.
            $ref: "../../../definitions/SOL002SOL003_def.yaml#/definitions/NotificationLink"

  PerceivedSeverityRequest:
    description: >
      This type represents the escalated value of the perceived severity for an alarm.
    type: object
    required:
      - proposedPerceivedSeverity
    properties:
      proposedPerceivedSeverity:
        description: >
          Indicates the proposed escalated perceived severity for an alarm.
        $ref: "../../../definitions/SOL002SOL003VNFFaultManagement_def.yaml#/definitions/PerceivedSeverityType"