tosca_definitions_version: tosca_simple_yaml_1_3
data_types:
  onap.datatypes.ToscaConceptIdentifier:
    derived_from: tosca.datatypes.Root
    properties:
      name:
        type: string
        required: true
      version:
        type: string
        required: true
  onap.datatype.controlloop.Target:
    derived_from: tosca.datatypes.Root
    description: Definition for a entity in A&AI to perform a control loop operation on
    properties:
      targetType:
        type: string
        description: Category for the target type
        required: true
        constraints:
          - valid_values:
              - VNF
              - VM
              - VFMODULE
              - PNF
      entityIds:
        type: map
        description: |
          Map of values that identify the resource. If none are provided, it is assumed that the
          entity that generated the ONSET event will be the target.
        required: false
        metadata:
          clamp_possible_values: ClampExecution:CSAR_RESOURCES
        entry_schema:
          type: string
  onap.datatype.controlloop.Actor:
    derived_from: tosca.datatypes.Root
    description: An actor/operation/target definition
    properties:
      actor:
        type: string
        description: The actor performing the operation.
        required: true
        metadata:
          clamp_possible_values: Dictionary:DefaultActors,ClampExecution:CDS/actor
      operation:
        type: string
        description: The operation the actor is performing.
        metadata:
          clamp_possible_values: Dictionary:DefaultOperations,ClampExecution:CDS/operation
        required: true
      target:
        type: onap.datatype.controlloop.Target
        description: The resource the operation should be performed on.
        required: true
      payload:
        type: map
        description: Name/value pairs of payload information passed by Policy to the actor
        required: false
        metadata:
          clamp_possible_values: ClampExecution:CDS/payload
        entry_schema:
          type: string
  onap.datatype.controlloop.Operation:
    derived_from: tosca.datatypes.Root
    description: An operation supported by an actor
    properties:
      id:
        type: string
        description: Unique identifier for the operation
        required: true
      description:
        type: string
        description: A user-friendly description of the intent for the operation
        required: false
      operation:
        type: onap.datatype.controlloop.Actor
        description: The definition of the operation to be performed.
        required: true
      timeout:
        type: integer
        description: The amount of time for the actor to perform the operation.
        required: true
      retries:
        type: integer
        description: The number of retries the actor should attempt to perform the operation.
        required: true
        default: 0
      success:
        type: string
        description: Points to the operation to invoke on success. A value of "final_success" indicates and end to the operation.
        required: false
        default: final_success
      failure:
        type: string
        description: Points to the operation to invoke on Actor operation failure.
        required: false
        default: final_failure
      failure_timeout:
        type: string
        description: Points to the operation to invoke when the time out for the operation occurs.
        required: false
        default: final_failure_timeout
      failure_retries:
        type: string
        description: Points to the operation to invoke when the current operation has exceeded its max retries.
        required: false
        default: final_failure_retries
      failure_exception:
        type: string
        description: Points to the operation to invoke when the current operation causes an exception.
        required: false
        default: final_failure_exception
      failure_guard:
        type: string
        description: Points to the operation to invoke when the current operation is blocked due to guard policy enforcement.
        required: false
        default: final_failure_guard
  org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.RestRequest:
    version: 1.0.0
    derived_from: tosca.datatypes.Root
    properties:
      restRequestId:
        type:  onap.datatypes.ToscaConceptIdentifier
        typeVersion: 1.0.0
        required: true
        description: The name and version of a REST request to be sent to a REST endpoint
      httpMethod:
        type: string
        required: true
        constraints:
          - valid_values: [POST, PUT, GET, DELETE]
        description: The REST method to use
      path:
        type: string
        required: true
        description: The path of the REST request relative to the base URL
      body:
        type: string
        required: false
        description: The body of the REST request for PUT and POST requests
      expectedResponse:
        type: integer
        required: true
        constraints: 
          - in_range: [100, 599]
        description: THe expected HTTP status code for the REST request
    org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.ConfigurationEntity:
      version: 1.0.0
      derived_from: tosca.datatypes.Root
      properties:
        configurationEntityId:
          type:  onap.datatypes.ToscaConceptIdentifier
          typeVersion: 1.0.0
          required: true
          description: The name and version of a Configuration Entity to be handled by the HTTP Control Loop Element
        restSequence:
          type: list
          entry_schema:
            type: org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.RestRequest
            typeVersion: 1.0.0
          description: A sequence of REST commands to send to the REST endpoint
node_types:
  org.onap.policy.clamp.controlloop.Participant:
    version: 1.0.1
    derived_from: tosca.nodetypes.Root
    properties:
      provider:
        type: string
        requred: false
  org.onap.policy.clamp.controlloop.ControlLoopElement:
    version: 1.0.1
    derived_from: tosca.nodetypes.Root
    properties:
      provider:
        type: string
        required: false
        metadata:
          common: true
        description: Specifies the organization that provides the control loop element
      participant_id:
        type: onap.datatypes.ToscaConceptIdentifier
        requred: true
        metadata:
          common: true
      participantType:
        type: onap.datatypes.ToscaConceptIdentifier
        required: true
        metadata:
          common: true
        description: The identity of the participant type that hosts this type of Control Loop Element
      startPhase:
        type: integer
        required: false
        constraints:
          - greater_or_equal: 0
        metadata:
          common: true
        description: A value indicating the start phase in which this control loop element will be started, the
          first start phase is zero. Control Loop Elements are started in their start_phase order and stopped
          in reverse start phase order. Control Loop Elements with the same start phase are started and
          stopped simultaneously
      uninitializedToPassiveTimeout:
        type: integer
        required: false
        constraints:
          - greater_or_equal: 0
        default: 60
        metadata:
          common: true
        description: The maximum time in seconds to wait for a state chage from uninitialized to passive
      passiveToRunningTimeout:
        type: integer
        required: false
        constraints:
          - greater_or_equal: 0
        default: 60
        metadata:
          common: true
        description: The maximum time in seconds to wait for a state chage from passive to running
      runningToPassiveTimeout:
        type: integer
        required: false
        constraints:
          - greater_or_equal: 0
        default: 60
        metadata:
          common: true
        description: The maximum time in seconds to wait for a state chage from running to passive
      passiveToUninitializedTimeout:
        type: integer
        required: false
        constraints:
          - greater_or_equal: 0
        default: 60
        metadata:
          common: true
        description: The maximum time in seconds to wait for a state chage from passive to uninitialized
  org.onap.policy.clamp.controlloop.ControlLoop:
    version: 1.0.1
    derived_from: tosca.nodetypes.Root
    properties:
      provider:
        type: string
        required: false
        metadata:
          common: true
        description: Specifies the organization that provides the control loop element
      elements:
        type: list
        required: true
        metadata:
          common: true
        entry_schema:
          type: onap.datatypes.ToscaConceptIdentifier
        description: Specifies a list of control loop element definitions that make up this control loop definition
  org.onap.policy.clamp.controlloop.HttpControlLoopElement:
    version: 1.0.1
    derived_from: org.onap.policy.clamp.controlloop.ControlLoopElement
    properties:
      baseUrl:
        type: string
        required: true
        description: The base URL to be prepended to each path, identifies the host for the REST endpoints.
      httpHeaders:
        type: map
        required: false
        entry_schema:
          type: string
        description: HTTP headers to send on REST requests
      configurationEntities:
        type: map
        required: true
        entry_schema:
          type: org.onap.datatypes.policy.clamp.controlloop.httpControlLoopElement.ConfigurationEntity
          typeVersion: 1.0.0
        description: The connfiguration entities the Control Loop Element is managing and their associated REST requests

topology_template:
  node_templates:
    org.onap.controlloop.HttpControlLoopParticipant:
      version: 2.3.4
      type: org.onap.policy.clamp.controlloop.Participant
      type_version: 1.0.1
      description: Participant for Http requests
      properties:
        provider: ONAP
    org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement:
      # Consul http config for PMSH.
      version: 1.2.3
      type: org.onap.policy.clamp.controlloop.HttpControlLoopElement
      type_version: 1.0.1
      description: Control loop element for the http requests of PMSH microservice
      properties:
        provider: ONAP
        participant_id:
          name: HttpParticipant0
          version: 1.0.0
        participantType:
          name: org.onap.k8s.controlloop.HttpControlLoopParticipant
          version: 2.3.4
        uninitializedToPassiveTimeout: 180
        baseUrl: http://consul-server-ui:8500
        httpHeaders:
          Content-Type: application/json
        configurationEntities:
          - configurationEntityId:
              name: entity1
              version: 1.0.1
            restSequence:
              - restRequestId:
                  name: request1
                  version: 1.0.1
                httpMethod: PUT
                path: v1/kv/dcae-pmsh2
                body: '{
      "control_loop_name":"pmsh-control-loop",
      "operational_policy_name":"pmsh-operational-policy",
      "aaf_password":"demo123456!",
      "aaf_identity":"dcae@dcae.onap.org",
      "cert_path":"/opt/app/pmsh/etc/certs/cert.pem",
      "key_path":"/opt/app/pmsh/etc/certs/key.pem",
      "ca_cert_path":"/opt/app/pmsh/etc/certs/cacert.pem",
      "enable_tls":"true",
      "pmsh_policy":{
         "subscription":{
            "subscriptionName":"ExtraPM-All-gNB-R2B",
            "administrativeState":"UNLOCKED",
            "fileBasedGP":15,
            "fileLocation":"\/pm\/pm.xml",
            "nfFilter":{
               "nfNames":[
                  "^pnf.*",
                  "^vnf.*"
               ],
               "modelInvariantIDs":[
               ],
               "modelVersionIDs":[
               ],
               "modelNames":[
               ]
            },
            "measurementGroups":[
               {
                  "measurementGroup":{
                     "measurementTypes":[
                        {
                           "measurementType":"countera"
                        },
                        {
                           "measurementType":"counterb"
                        }
                     ],
                     "managedObjectDNsBasic":[
                        {
                           "DN":"dna"
                        },
                        {
                           "DN":"dnb"
                        }
                     ]
                  }
               },
               {
                  "measurementGroup":{
                     "measurementTypes":[
                        {
                           "measurementType":"counterc"
                        },
                        {
                           "measurementType":"counterd"
                        }
                     ],
                     "managedObjectDNsBasic":[
                        {
                           "DN":"dnc"
                        },
                        {
                           "DN":"dnd"
                        }
                     ]
                  }
               }
            ]
         }
      },
      "streams_subscribes":{
         "aai_subscriber":{
            "type":"message_router",
            "dmaap_info":{
               "topic_url":"https://10.152.183.151:3905/events/AAI_EVENT",
               "client_role":"org.onap.dcae.aaiSub",
               "location":"san-francisco",
               "client_id":"1575976809466"
            }
         },
         "policy_pm_subscriber":{
            "type":"message_router",
            "dmaap_info":{
               "topic_url":"https://10.152.183.151:3905/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS",
               "client_role":"org.onap.dcae.pmSubscriber",
               "location":"san-francisco",
               "client_id":"1575876809456"
            }
         }
      },
      "streams_publishes":{
         "policy_pm_publisher":{
            "type":"message_router",
            "dmaap_info":{
               "topic_url":"https://10.152.183.151:3905/events/org.onap.dmaap.mr.PM_SUBSCRIPTIONS",
               "client_role":"org.onap.dcae.pmPublisher",
               "location":"san-francisco",
               "client_id":"1475976809466"
            }
         },
         "other_publisher":{
            "type":"message_router",
            "dmaap_info":{
               "topic_url":"https://10.152.183.151:3905/events/org.onap.dmaap.mr.SOME_OTHER_TOPIC",
               "client_role":"org.onap.dcae.pmControlPub",
               "location":"san-francisco",
               "client_id":"1875976809466"
            }
         }
      }
   }'
                expectedResponse: 200
    org.onap.domain.sample.GenericK8s_ControlLoopDefinition:
      version: 1.2.3
      type: org.onap.policy.clamp.controlloop.ControlLoop
      type_version: 1.0.0
      description: Control loop for Hello World
      properties:
        provider: ONAP
        elements:
          - name: org.onap.domain.database.Http_PMSHMicroserviceControlLoopElement
            version: 1.2.3