# ============LICENSE_START=======================================================
# Copyright (C) 2022 Nordix Foundation.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================
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

  org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest:
    version: 1.0.0
    derived_from: tosca.datatypes.Root
    properties:
      restRequestId:
        type: onap.datatypes.ToscaConceptIdentifier
        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: []
        description: THe expected HTTP status code for the REST request
  org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.ConfigurationEntity:
    version: 1.0.0
    derived_from: tosca.datatypes.Root
    properties:
      configurationEntityId:
        type: onap.datatypes.ToscaConceptIdentifier
        required: true
        description: The name and version of a Configuration Entity to be handled
          by the HTTP Automation Composition Element
      restSequence:
        type: list
        entry_schema:
          type: org.onap.datatypes.policy.clamp.acm.httpAutomationCompositionElement.RestRequest
          type_version: 1.0.0
        description: A sequence of REST commands to send to the REST endpoint

node_types:
  org.onap.policy.clamp.acm.Participant:
    version: 1.0.1
    derived_from: tosca.nodetypes.Root
    properties:
      provider:
        type: string
        required: false
  org.onap.policy.clamp.acm.AutomationCompositionElement:
    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 automation composition element
      participant_id:
        type: onap.datatypes.ToscaConceptIdentifier
        required: 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 Automation Composition Element
      startPhase:
        type: integer
        required: false
        constraints:
          - greater_or_equal: 0
        metadata:
          common: true
        description: A value indicating the start phase in which this automation composition element will be started, the
          first start phase is zero. Automation Composition Elements are started in their start_phase order and stopped
          in reverse start phase order. Automation Composition 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.acm.AutomationComposition:
    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 automation composition element
      elements:
        type: list
        required: true
        metadata:
          common: true
        entry_schema:
          type: onap.datatypes.ToscaConceptIdentifier
        description: Specifies a list of automation composition element definitions that make up this automation composition definition
  org.onap.policy.clamp.acm.HttpAutomationCompositionElement:
    version: 1.0.1
    derived_from: org.onap.policy.clamp.acm.AutomationCompositionElement
    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.acm.httpAutomationCompositionElement.ConfigurationEntity
          type_version: 1.0.0
        description: The connfiguration entities the Automation Composition Element is managing and their associated REST requests

topology_template:
  node_templates:
    org.onap.policy.clamp.acm.HttpParticipant:
      version: 2.3.4
      type: org.onap.policy.clamp.acm.Participant
      type_version: 1.0.1
      description: Participant for Http requests
      properties:
        provider: ONAP
    onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement:
      # Http config for AC Element Starter.
      version: 1.2.3
      type: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
      type_version: 1.0.1
      description: Automation composition element for the http requests of AC Element Starter microservice
      properties:
        provider: ONAP
        participant_id:
          name: HttpParticipant0
          version: 1.0.0
        participantType:
          name: org.onap.policy.clamp.acm.HttpParticipant
          version: 2.3.4
        uninitializedToPassiveTimeout: 180
        startPhase: 0
        baseUrl: http://acelement-starter:8084
        httpHeaders:
          Content-Type: application/json
          Authorization: 'Basic cnVudGltZVVzZXI6emIhWHp0RzM0'
        configurationEntities:
          - configurationEntityId:
              name: onap.policy.clamp.ac.starter
              version: 1.0.0
            restSequence:
              - restRequestId:
                  name: request1
                  version: 1.0.1
                httpMethod: POST
                path: /activate
                body: '{ "receiverId": { "name": "onap.policy.clamp.ac.bridge", "version": "1.0.0" }, "timerMs": 4000, "elementType": "STARTER", "topicParameterGroup": { "server": "message-router", "listenerTopic": "POLICY_UPDATE_MSG", "publisherTopic": "POLICY_UPDATE_MSG", "fetchTimeout": 15000, "topicCommInfrastructure": "dmaap" } }'
                expectedResponse: 201
    onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement:
      # Http config for AC Element Bridge.
      version: 1.2.3
      type: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
      type_version: 1.0.1
      description: Automation composition element for the http requests of AC Element Bridge microservice
      properties:
        provider: ONAP
        participant_id:
          name: HttpParticipant0
          version: 1.0.0
        participantType:
          name: org.onap.policy.clamp.acm.HttpParticipant
          version: 2.3.4
        uninitializedToPassiveTimeout: 180
        startPhase: 0
        baseUrl: http://acelement-bridge:8084
        httpHeaders:
          Content-Type: application/json
          Authorization: 'Basic cnVudGltZVVzZXI6emIhWHp0RzM0'
        configurationEntities:
          - configurationEntityId:
              name: onap.policy.clamp.ac.bridge
              version: 1.0.0
            restSequence:
              - restRequestId:
                  name: request2
                  version: 1.0.1
                httpMethod: POST
                path: /activate
                body: '{ "receiverId": { "name": "onap.policy.clamp.ac.sink", "version": "1.0.0" }, "timerMs": 4000, "elementType": "BRIDGE", "topicParameterGroup": { "server": "message-router", "listenerTopic": "POLICY_UPDATE_MSG", "publisherTopic": "POLICY_UPDATE_MSG", "fetchTimeout": 15000, "topicCommInfrastructure": "dmaap" } }'
                expectedResponse: 201
    onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement:
      # Http config for AC Element Sink.
      version: 1.2.3
      type: org.onap.policy.clamp.acm.HttpAutomationCompositionElement
      type_version: 1.0.1
      description: Automation composition element for the http requests of AC Element Sink microservice
      properties:
        provider: ONAP
        participant_id:
          name: HttpParticipant0
          version: 1.0.0
        participantType:
          name: org.onap.policy.clamp.acm.HttpParticipant
          version: 2.3.4
        uninitializedToPassiveTimeout: 180
        startPhase: 0
        baseUrl: http://acelement-sink:8084
        httpHeaders:
          Content-Type: application/json
          Authorization: 'Basic cnVudGltZVVzZXI6emIhWHp0RzM0'
        configurationEntities:
          - configurationEntityId:
              name: onap.policy.clamp.ac.sink
              version: 1.0.0
            restSequence:
              - restRequestId:
                  name: request3
                  version: 1.0.1
                httpMethod: POST
                path: /activate
                body: '{ "receiverId": { "name": "onap.policy.clamp.ac.sink", "version": "1.0.0" }, "timerMs": 4000, "elementType": "SINK", "topicParameterGroup": { "server": "message-router", "listenerTopic": "POLICY_UPDATE_MSG", "publisherTopic": "POLICY_UPDATE_MSG", "fetchTimeout": 15000, "topicCommInfrastructure": "dmaap" } }'
                expectedResponse: 201

    onap.policy.clamp.ac.element.AutomationCompositionDefinition:
      version: 1.2.3
      type: org.onap.policy.clamp.acm.AutomationComposition
      type_version: 1.0.1
      description: Automation composition for Demp
      properties:
        provider: ONAP
        elements:
          - name: onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement
            version: 1.2.3
          - name: onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement
            version: 1.2.3
          - name: onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement
            version: 1.2.3