# ============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============================================

inputs:

  labels:
    default: {}

node_types:

  cloudify.nodes.Kubernetes:
    derived_from: cloudify.nodes.Root
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: scripts/create.py

  cloudify.nodes.Kubernetes.Master:
    derived_from: cloudify.nodes.Root
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: scripts/create.py
        configure:
          implementation: scripts/kubernetes_master/configure.py
        start:
          implementation: scripts/kubernetes_master/start.py

  cloudify.nodes.Kubernetes.Node:
    derived_from: cloudify.nodes.Root
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          implementation: scripts/create.py
        configure:
          implementation: scripts/kubernetes_node/configure.py
        start:
          implementation: fabric.fabric_plugin.tasks.run_task
          inputs:
            tasks_file:
              default: scripts/tasks.py
            task_name:
              default: label_node
            task_properties:
              default:
                hostname: { get_attribute: [ SELF, hostname ] }
                labels: { get_input: labels }
            fabric_env:
              default:
                host_string: { get_attribute: [ kubernetes_master_host, ip ] }
                user: { get_input: agent_user }
                key: { get_secret: agent_key_private }
        stop:
          implementation: fabric.fabric_plugin.tasks.run_task
          inputs:
            tasks_file:
              default: scripts/tasks.py
            task_name:
              default: stop_node
            task_properties:
              default:
                hostname: { get_attribute: [ SELF, hostname ] }
            fabric_env:
              default:
                host_string: { get_attribute: [ kubernetes_master_host, ip ] }
                user: { get_input: agent_user }
                key: { get_secret: agent_key_private }
        delete:
          implementation: fabric.fabric_plugin.tasks.run_task
          inputs:
            tasks_file:
              default: scripts/tasks.py
            task_name:
              default: delete_node
            task_properties:
              default:
                hostname: { get_attribute: [ SELF, hostname ] }
            fabric_env:
              default:
                host_string: { get_attribute: [ kubernetes_master_host, ip ] }
                user: { get_input: agent_user }
                key: { get_secret: agent_key_private }

node_templates:

  kubernetes_master:
    type: cloudify.nodes.Kubernetes.Master
    relationships:
      - type: cloudify.relationships.contained_in
        target: kubernetes_master_host

  kubernetes_node:
    type: cloudify.nodes.Kubernetes.Node
    relationships:
      - type: cloudify.relationships.contained_in
        target: kubernetes_node_host
      - type: cloudify.relationships.depends_on
        target: kubernetes_master

outputs:

  kubernetes_cluster_bootstrap_token:
    value: { get_attribute: [ kubernetes_master, bootstrap_token ] }

  kubernetes_cluster_master_ip:
    value: { get_attribute: [ kubernetes_master, master_ip ] }

  kubernetes-admin_client_certificate_data:
    value: { get_attribute: [ kubernetes_master, kubernetes-admin_client_certificate_data ] }

  kubernetes-admin_client_key_data:
    value: { get_attribute: [ kubernetes_master, kubernetes-admin_client_key_data ] }

  kubernetes_certificate_authority_data:
    value: { get_attribute: [ kubernetes_master, kubernetes_certificate_authority_data ] }

policy_types:
  scale_policy_type:
    source: policies/scale.clj
    properties:
      policy_operates_on_group:
        default: true
      service_selector:
        description: regular expression that selects the metric to be measured
        default: ".*"
      moving_window_size:
        description: the moving window for individual sources in secs
        default: 10
      scale_threshold:
        description: the value to trigger scaling over aggregrated moving values
      scale_limit:
        description: scaling limit
        default: 10
      scale_direction:
        description: scale up ('<') or scale down ('>')
        default: '<'
      cooldown_time:
        description: the time to wait before evaluating again after a scale
        default: 60

groups: {}

#  scale_up_group:
#    members: [kubernetes_node_host]
#    policies:
#      auto_scale_up:
#        type: scale_policy_type
#        properties:
#          policy_operates_on_group: true
#          scale_limit: 6
#          scale_direction: '<'
#          scale_threshold: 30
#          service_selector: .*kubernetes_node_host.*cpu.total.user
#          cooldown_time: 60
#        triggers:
#          execute_scale_workflow:
#            type: cloudify.policies.triggers.execute_workflow
#            parameters:
#              workflow: scale
#              workflow_parameters:
#                delta: 1
#                scalable_entity_name: kubernetes_node_host

#  scale_down_group:
#    members: [kubernetes_node_host]
#    policies:
#      auto_scale_down:
#        type: scale_policy_type
#        properties:
#          policy_operates_on_group: true
#          scale_limit: 6
#          scale_direction: '<'
#          scale_threshold: 30
#          service_selector: .*kubernetes_node_host.*cpu.total.user
#          cooldown_time: 60
#        triggers:
#          execute_scale_workflow:
#            type: cloudify.policies.triggers.execute_workflow
#            parameters:
#              workflow: scale
#              workflow_parameters:
#                delta: 1
#                scalable_entity_name: kubernetes_node_host

#  heal_group:
#    members: [kubernetes_node_host]
#    policies:
#      simple_autoheal_policy:
#        type: cloudify.policies.types.host_failure
#        properties:
#          service:
#            - .*kubernetes_node_host.*.cpu.total.system
#            - .*kubernetes_node_host.*.process.hyperkube.cpu.percent
#          interval_between_workflows: 60
#        triggers:
#          auto_heal_trigger:
#            type: cloudify.policies.triggers.execute_workflow
#            parameters:
#              workflow: heal
#              workflow_parameters:
#                node_instance_id: { 'get_property': [ SELF, node_id ] }
#                diagnose_value: { 'get_property': [ SELF, diagnose ] }
