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

###########################################################
# This Blueprint installs ONAP SO on Openstack
###########################################################
 
tosca_definitions_version: cloudify_dsl_1_3
 
description: >
  This blueprint creates a ONAP service orchestrator
 
imports:
  - http://www.getcloudify.org/spec/cloudify/4.1/types.yaml
  - http://cloudify.co/spec/openstack-plugin/2.2.0/plugin.yaml
  - http://cloudify.co/spec/fabric-plugin/1.5/plugin.yaml
  - http://www.getcloudify.org/spec/diamond-plugin/1.3.3/plugin.yaml
 
inputs:
  nexus_repo:
    type: string
    default: https://nexus.onap.org/content/sites/raw
    
  docker_repo:
    type: string
    default: nexus3.onap.org:10001

  nexus_username:
    type: string
    default: docker

  nexus_password:
    type: string
    default: docker
  
  artifacts_version:  
    type: string
    default: 1.1.0-SNAPSHOT 

  dns_ip:
    type: string

  cloud_env:
    type: string
    default: openstack

  docker_version:
    type: string
    default: v1.1.1

  gerrit_branch:
    type: string
    default: master
   
  external_dns:
    type: string

  dmaap_topic:
    type: string
    default: AUTO

  so_repo:
    type: string
    default: http://gerrit.onap.org/r/so/docker-config.git  
    
  vm_instancename:
    type: string
    
  image:
    description: |
      A Ubuntu 16.04 image, along with the usual
    type:  string
    default: Ubuntu 16.04 LTS Generic
 
  flavor:
    description: >
      A machine type with more than 2 CPUs, 4096 GB RAM, and 8 GB of disk space.
      You might want to use 4 CPUs, 8192 MB RAM for the master.
    type:  string
    default: m1.xlarge
 
  ssh_user:
    description: |
      User for connecting to agent VM
    type:  string
    default: ubuntu
 
  security_group:
    description: openstack security_group
    type:  string
 
  keypair_name:
    description: | 
      OpenStack keypair name 
    type: string 

  key_filename:
    type:  string
 
  external_network:
    type:  string

  app_subnet:
    type:  string
    
 
  openstack_username:
    type: string
    description: username to authenticate to OpenStack
 
  openstack_password:
    type: string
    description: OpenStack tenant password for openstack_username user
 
  openstack_tenant_name:
    type: string
    description: OpenStack tenant for VM deploy
 
  openstack_auth_url:
    type: string
    description: Authentication URL for OpenStack
 
  openstack_region:
    type: string
    description: OpenStack region
  
dsl_definitions:
  openstack_credentials:  &openstack_credentials
    username:  { get_input: openstack_username }
    password:  { get_input: openstack_password }
    tenant_name:  { get_input: openstack_tenant_name }
    auth_url:  { get_input: openstack_auth_url }
    region:  { get_input: openstack_region }
 
node_templates:

  key_pair:
    type: cloudify.openstack.nodes.KeyPair
    properties:
      private_key_path: { get_input: key_filename }
      use_external_resource: true
      resource_id: { get_input:  keypair_name }
      openstack_config:  *openstack_credentials

  private_net:
    type: cloudify.openstack.nodes.Network
    properties:
      use_external_resource:  true
      resource_id: { get_input:  app_subnet }
      openstack_config: *openstack_credentials
      
  external_network:
    type: cloudify.openstack.nodes.Network
    properties:
      openstack_config: *openstack_credentials
      use_external_resource: true
      resource_id: { get_input: external_network}     

  app_security_group:
    type: cloudify.openstack.nodes.SecurityGroup
    properties:
      openstack_config: *openstack_credentials
      use_external_resource:  true
      resource_id: { get_input: security_group }

  VM_001_fixed_ip:
    type: cloudify.openstack.nodes.Port
    properties:
      openstack_config: *openstack_credentials
    relationships:
      - type: cloudify.relationships.contained_in
        target: private_net
      - type: cloudify.openstack.port_connected_to_security_group
        target: app_security_group

  VM_001_floating_ip:
    type: cloudify.openstack.nodes.FloatingIP
    properties:
      openstack_config: *openstack_credentials
    interfaces:
      cloudify.interfaces.lifecycle:
        create:
          inputs:
            args:
              floating_network_name: { get_input:  external_network }
 
  VM_001:
    type: cloudify.openstack.nodes.Server
    properties:
      openstack_config: *openstack_credentials
      install_agent:  false
      image: { get_input: image }
      flavor: { get_input: flavor }
      resource_id: { get_input: vm_instancename }
      management_network_name:  { get_input: app_subnet }
      ip:  { get_attribute: [VM_001_floating_ip, floating_ip_address]  }
    relationships:
      - type: cloudify.openstack.server_connected_to_floating_ip
        target: VM_001_floating_ip
      - type: cloudify.openstack.server_connected_to_keypair
        target: key_pair
      - type: cloudify.openstack.server_connected_to_port
        target:  VM_001_fixed_ip

 
  app_001:
    type: cloudify.nodes.SoftwareComponent
    properties:
    interfaces:
      cloudify.interfaces.lifecycle:
         start:
          implementation: fabric.fabric_plugin.tasks.run_script
          inputs:
            script_path: scripts/so.sh
            use_sudo: true
            process:
              args: 
                [{ get_attribute: [VM_001_floating_ip, floating_ip_address]},
                 { get_attribute: [VM_001_fixed_ip, fixed_ip_address]},
                 { get_input: nexus_repo },
                 { get_input: docker_repo},
                 { get_input: nexus_username },
                 { get_input: nexus_password },
                 { get_input: artifacts_version },
                 { get_input: dns_ip},
                 { get_input: gerrit_branch },
                 openstack,
                 { get_input: external_dns},
                 { get_input: dmaap_topic},
                 { get_input: openstack_username},
                 { get_input: openstack_tenant_name},
                 { get_input: openstack_password},
                 { get_input: openstack_region},
                 { get_input: openstack_auth_url},
                 { get_input: so_repo},
                 { get_input: docker_version }]
            fabric_env:
              host_string: { get_attribute: [VM_001_floating_ip, floating_ip_address]}
              user: { get_input: ssh_user }
              key_filename: { get_input: key_filename }
    relationships:
      - type: cloudify.relationships.contained_in
        target: VM_001
      - type: cloudify.relationships.depends_on
        target: VM_001_floating_ip

outputs:
  ONAP_Service_Orchestrator:
    description: informations about Service Orchestrator
    value:
      ip: { get_attribute: [VM_001_floating_ip, floating_ip_address] }



 

 


