# ============LICENSE_START==========================================
# ===================================================================
# Copyright (c) 2017 AT&T
#
# 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.
#============LICENSE_END============================================

tosca_definitions_version: cloudify_dsl_1_3

imports:
  - http://www.getcloudify.org/spec/cloudify/3.4.2/types.yaml
  - http://www.getcloudify.org/spec/fabric-plugin/1.5/plugin.yaml

inputs:
  # For agent, toggle to true.
  install_method:
    default: none # For fabric use false.
  ip:
  user:
    default: centos
  namespace:
    default: onap

node_types:
  cloudify.nodes.Helm:
    derived_from: cloudify.nodes.SoftwareComponent
    properties:
      cwd:
        default: /home/centos/oom/kubernetes
      args:
        default:
        - onap
        - mso
    interfaces:
      cloudify.interfaces.lifecycle:
        # This is for fabric: # Run Anywhere.
        start:
          implementation: fabric.fabric_plugin.tasks.run_script
          inputs:
            script_path:
              default: helminstall.sh # Relative to the blueprint file.
            process:
              default: &process_vars
                cwd: { get_property: [ SELF, cwd ] }
                args: { get_property: [ SELF, args ] }
            fabric_env:
              default: &fabric_env
                user: { get_property: [ k8s_master, agent_config, user ] }
                host_string: { get_property: [ k8s_master, ip ] }
                key: { get_property: [ k8s_master, agent_config, key ] }
        stop:
          implementation: fabric.fabric_plugin.tasks.run_script
          inputs:
            script_path:
              default: helmdelete.sh
            process:
              default: *process_vars
            fabric_env:
              default: *fabric_env

node_templates:

  k8s_master:
     type: cloudify.nodes.Compute
     properties:
       ip: { get_input: ip }
       agent_config:
         install_method: { get_input: install_method } # False for Fabric.
         key: { get_secret: agent_key_private }
         user: { get_input: user }

  k8s_env:
    type: cloudify.nodes.SoftwareComponent
    properties:
    interfaces:
      cloudify.interfaces.lifecycle:
         start:
          implementation: fabric.fabric_plugin.tasks.run_script
          inputs:
            script_path: k8s_setup_env.sh
            process:
              args:  [{ get_input: namespace }]
            fabric_env:
              host_string: { get_input: ip }
              user: { get_input: user }
              key: { get_secret: agent_key_private }
         stop:
          implementation: fabric.fabric_plugin.tasks.run_script
          inputs:
            script_path: k8s_delete_env.sh
            process:
              args:  [{ get_input: namespace }]
            fabric_env:
              host_string: { get_input: ip }
              user: { get_input: user }
              key: { get_secret: agent_key_private }
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_master

  consul:
     type: cloudify.nodes.Helm
     properties:
       args:
       - { get_input: namespace }
       - consul
     relationships:
       - type: cloudify.relationships.connected_to
         target: k8s_env

  msb:
     type: cloudify.nodes.Helm
     properties:
       args:
       - { get_input: namespace }
       - msb
     relationships:
       - type: cloudify.relationships.connected_to
         target: k8s_env

  so:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - so
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  appc:
     type: cloudify.nodes.Helm
     properties:
       args:
       - { get_input: namespace }
       - appc
     relationships:
       - type: cloudify.relationships.connected_to
         target: k8s_env

  dmaap:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - dmaap
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  oof:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - oof
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  sdnc:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - sdnc
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  vid:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - vid
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  robot:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - robot
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  policy:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - policy
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  portal:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - portal
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  aai:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - aai
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  sdc:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - sdc
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  log:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - log
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  cli:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - cli
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  multicloud:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - multicloud
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  clamp:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - clamp
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  vnfsdk:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - vnfsdk
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  uui:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - uui
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  aaf:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - aaf
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  vfc:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - vfc
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  dcaegen2:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - dcaegen2
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  esr:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - esr
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  sniro-emulator:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - sniro-emulator
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env

  nbi:
    type: cloudify.nodes.Helm
    properties:
      args:
      - { get_input: namespace }
      - nbi
    relationships:
      - type: cloudify.relationships.connected_to
        target: k8s_env