#
# ============LICENSE_START=======================================================
#  Copyright (C) 2020 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: cloudify_dsl_1_3

imports:
  - https://www.getcloudify.org/spec/cloudify/4.5.5/types.yaml
 # - plugin:k8splugin?version=>=3.4.3,<4.0.0
  - plugin:k8splugin?version=3.8.0
  - plugin:pgaas?version=1.3.0
  - plugin:clamppolicyplugin?version=1.1.0
inputs:
  tag_version:
    type: string
    description: Docker image to be used
    default: 'nexus3.onap.org:10001/onap/org.onap.dcaegen2.services.pmsh:1.1.2'
  replicas:
    type: integer
    description: Number of instances
    default: 1
  operational_policy_name:
    type: string
    default: 'pmsh-operational-policy'
  control_loop_name:
    type: string
    default: 'pmsh-control-loop'
  pmsh_publish_topic_name:
    type: string
    default: 'unauthenticated.DCAE_CL_OUTPUT'
  policy_feedback_topic_name:
    type: string
    default: 'unauthenticated.PMSH_CL_INPUT'
  aai_notification_topic_name:
    type: string
    default: 'AAI-EVENT'
  publisher_client_role:
    type: string
    description: Client role to request secure access to topic
    default: 'org.onap.dcae.pmPublisher'
  subscriber_client_role:
    type: string
    description: Client role to request secure access to topic
    default: 'org.onap.dcae.pmSubscriber'
  dcae_location:
    type: string
    description: DCAE location for the subscriber, used to set up routing
    default: 'san-francisco'
  cpu_limit:
    type: string
    default: '1000m'
  cpu_request:
    type: string
    default: '1000m'
  memory_limit:
    type: string
    default: '1024Mi'
  memory_request:
    type: string
    default: '1024Mi'
  pgaas_cluster_name:
    type: string
    default: 'dcae-pg-primary.onap'
  enable_tls:
    type: boolean
    default: true
  protocol:
    type: string
    description: PMSH protocol. If enable_tls is false, set to http
    default: 'https'
  policy_model_id:
    type: 'string'
    default: 'onap.policies.monitoring.dcae-pm-subscription-handler'
  policy_id:
    type: 'string'
    default: 'onap.policies.monitoring.dcae-pm-subscription-handler'
node_templates:
  pgaasvm:
    type: dcae.nodes.pgaas.database
    properties:
      writerfqdn: { get_input: pgaas_cluster_name }
      name: 'pmsh'
  pmsh:
    type: dcae.nodes.ContainerizedServiceComponentUsingDmaap
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          inputs:
            ports:
              - '8443:0'
            envs:
              PMSH_PG_URL:
                { get_attribute: [ pgaasvm, admin, host ] }
              PMSH_PG_PASSWORD:
                { get_attribute: [ pgaasvm, admin, password ] }
              PMSH_PG_USERNAME:
                { get_attribute: [ pgaasvm, admin, user ] }
              PMSH_DB_NAME:
                { get_attribute: [ pgaasvm, admin, database ] }

    relationships:
      - target: pmsh-policy
        type: cloudify.relationships.depends_on

    properties:
      service_component_type: 'dcae-pmsh'
      service_component_name_override: 'dcae-pmsh'
      application_config:
        enable_tls: { get_input: enable_tls }
        aaf_identity: 'dcae@dcae.onap.org'
        aaf_password: 'demo123456!'
        operational_policy_name: { get_input: operational_policy_name }
        control_loop_name: { get_input: control_loop_name }
        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'
        streams_publishes:
          policy_pm_publisher:
            type: message_router
            dmaap_info:
              #topic_url: {concat: ["https://message-router:3905/events/", { get_input: pmsh_publish_topic_name }]}
              topic_url: { concat: [ "http://message-router:3904/events/", { get_input: pmsh_publish_topic_name } ] }
        streams_subscribes:
          policy_pm_subscriber:
            type: message_router
            dmaap_info:
              #topic_url: {concat: ["https://message-router:3905/events/", { get_input: policy_feedback_topic_name }]}
              topic_url: {concat: ["http://message-router:3904/events/", { get_input: policy_feedback_topic_name }]}
          aai_subscriber:
            type: message_router
            dmaap_info:
              #topic_url: {concat: ["https://message-router:3905/events/", { get_input: aai_notification_topic_name }]}
              topic_url: {concat: ["http://message-router:3904/events/", { get_input: aai_notification_topic_name }]}
      resource_config:
        limits:
          cpu: { get_input: cpu_limit }
          memory: { get_input: memory_limit }
        requests:
          cpu: { get_input: cpu_request }
          memory: { get_input: memory_request }
      docker_config:
        healthcheck:
          endpoint: /healthcheck
          interval: 15s
          timeout: 1s
          type: { get_input: protocol }
      image: { get_input: tag_version }
      replicas: { get_input: replicas }
      log_info:
        log_directory: '/var/log/ONAP/dcaegen2/services/pmsh'
      tls_info:
        cert_directory: '/opt/app/pmsh/etc/certs'
        use_tls: { get_input: enable_tls }
  pmsh-policy:
    type: clamp.nodes.policy
    properties:
      policy_model_id:
        get_input: policy_model_id
      policy_id:
        get_input: policy_id
