definitions:
  schemas:
    CreatePolicyRequest:
      description: >
        This type represents request parameters for creating a policy. It shall comply with the provisions defined
        in table 5.6.2.2-1.
      type: object
      properties:
        designer:
          description: >
            Human readable name of the designer of the policy.
          type: string
        name:
          description: >
            Human readable name of the policy.
          type: string
        pfId:
          description: >
            Identifier of the Policy Function (PF) which enforces the policy. Shall be present when the
            PF is not the API producer and shall be absent otherwise.
            Shall be absent when the API producer is NFVO-N.
            More information concerning the PF can be found in ETSI GR NFV-IFA 023 [i.2].
            For example, the PF can be a VNFM or VIM when the API producer is an NFVO.
          $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Identifier"
        associations:
          description: >
            Initial value of the “associations” attribute in the “Policy” data structure which represents the policy.
            Shall be absent when the association feature is not applicable for the PF.
            The associations refer to identifiers of entities that the PF manages. E.g., if the PF is a VNFM,
            the policy can associate to VNF instances; if the PF is NFVO, the policy can associate to an NS instances.
            How the PF determines the scope of applicability of the policy when this attribute is absent is
            outside the scope of the present document.
          type: array
          items:
            $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Identifier"
      required:
        - designer
        - name

    Policy:
      description: >-
        This type represents an individual policy. It shall comply with the provisions defined in table 5.6.2.3-1.
      type: object
      properties:
        id:
          description: >
            Identifier of the policy.
          $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Identifier"
        designer:
          description: >
            Human readable name of the designer of the policy.
          type: string
        name:
          description: >
            Human readable name of the policy.
          type: string
        pfId:
          description: >
            Identifier of the Policy Function (PF) which enforces the policy. Shall be present when the PF is not
            the API producer and shall be absent otherwise.
            Shall be absent when the API producer is NFVO-N.
            More information concerning the PF can be found in ETSI GR NFV-IFA 023 [i.2].
            For example, the PF can be a VNFM or VIM when the API producer is an NFVO.
          $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Identifier"
        versions:
          description: >
            Versions of the policy. Shall be present if at least one version of the policy has been transferred.
          type: array
          items:
            $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Version"
        selectedVersion:
          description: >
            Selected version of the policy. Shall be present if one or more versions of the policy have been transferred.
          $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Version"
        activationStatus:
          description: >
            Status of the policy on whether it is activated or deactivated.
          $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/ActivationStatus"
        transferStatus:
          description: >
            Status of the policy on whether the content of the policy has been transferred.
          $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/TransferStatus"
        associations:
          description: >
            Identifiers of the entities that the PF manages and to which the policy associates to.
            Shall be absent when the association feature is not applicable for the PF.
            The associations refer to identifiers of entities that the PF manages.
            E.g., if the PF is a VNFM, the policy can associate to VNF instances; if the PF is NFVO, the policy can
            associate to an NS instances.
            How the PF determines the scope of applicability of the policy when this attribute is absent is
            outside the scope of the present document.
          type: array
          items:
            $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Identifier"
        _links:
          description: >
            Links for this resource
          type: object
          properties:
            self:
              description: >
                URI of this resource
              $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Link"
            selected:
              description: >
                URI of the selected version of this policy, if exists.
              $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Link"
            versions:
              description: >
                URIs of all the transferred versions of this policy, if exists.
              type: array
              items:
                $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Link"
          required:
            - self
      required:
        - id
        - designer
        - name
        - activationStatus
        - transferStatus
        - _links

    PolicySubscriptionRequest:
      description: >
        This type represents a subscription request related to notifications about policy changes
        and policy conflicts. It shall comply with the provisions defined in table 5.6.2.5-1.
      type: object
      properties:
        filter:
          description: >
            Filter settings for this subscription, to define the subset of all notifications this subscription relates to.
            A particular notification is sent to the subscriber if the filter matches, or if there is no filter.
          $ref: "#/definitions/schemas/PolicyNotificationsFilter"
        callbackUri:
          description: >
            The URI of the endpoint to send the notification to.
          $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Uri"
        authentication:
          description: >
            Authentication parameters to configure the use of Authorization when sending notifications
            corresponding to this subscription, as defined in clause 8.3.4 of ETSI GS NFV-SOL 013.
            This attribute shall only be present if the subscriber requires authorization of notifications.
          $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/SubscriptionAuthentication"
      required:
        - callbackUri

    PolicySubscription:
      description: >
        This type represents a subscription related to notifications about policy changes and policy conflicts.
        It shall comply with the provisions defined in table 5.6.2.6-1.
      type: object
      properties:
        id:
          description: >
            Identifier of this subscription resource.
          $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Identifier"
        filter:
          description: >
            Filter settings for this subscription, to define the subset of all notifications this subscription
            relates to. A particular notification is sent to the subscriber if the filter matches, or if there
            is no filter.
          $ref: "#/definitions/schemas/PolicyNotificationsFilter"
        callbackUri:
          description: >
            The URI of the endpoint to send the notification to.
          $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Uri"
        _links:
          description: >
            Links for this resource.
          type: object
          properties:
            self:
              description: >
                URI of this resource.
              $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Link"
          required:
            - self
      required:
        - id
        - callbackUri
        - _links

    PolicyNotificationsFilter:
      description: >
        This type represents a subscription filter related to notifications about policy changes and policy conflicts.
        It shall comply with the provisions defined in table 5.6.3.2-1.
        At a particular nesting level in the filter structure, the following applies: All attributes shall match in
        order for the filter to match (logical "and" between different filter attributes). If an attribute is an array,
        the attribute shall match if at least one of the values in the array matches (logical "or" between the values
        of one filter attribute).
      type: object
      properties:
        notificationTypes:
          description: >
            Match particular notification types.
            Permitted values:
            -	PolicyChangeNotification
            -	PolicyConflictNotification
            The permitted values of the "notificationTypes" attribute are spelled exactly as the names of the notification
            types to facilitate automated code generation systems.
          type: array
          items:
            type: string
            enum:
              - PolicyChangeNotification
              - PolicyConflictNotification
        policyIds:
          description: >
            Match particular policy identifiers.
            For "PolicyConflictNotification", the notification is sent if any of the policies specified in the subscription
            is impacted by the conflict, as defined in clause 5.6.2.8.
          type: array
          items:
            $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/Identifier"
        changeTypes:
          description: >
            Match particular policy management operation types that cause the change of the policy.
          type: array
          items:
            $ref: "../../definitions/SOL012_def.yaml#/definitions/schemas/PolicyOperationType"