# ============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 appc on Openstack
###########################################################
 
tosca_definitions_version: cloudify_dsl_1_3
 
description: >
  This blueprint creates a ONAP APP-C
 
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.2.0

  gerrit_branch:
    type: string
    default: master
   
  external_dns:
    type: string
    
  dmaap_topic:
    type: string
    default: AUTO   
    
  appc_repo:
    type: string
    default: http://gerrit.onap.org/r/appc/deployment.git  
    
  vm_instancename:
    type: string
    
  image:
    description: |
      A Ubuntu 14.04 image, along with the usual
    type:  string
    default: Ubuntu 14.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
   
  dgbuilder_docker:
    type: string
    default: v0.1.0
  
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/appc.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: appc_repo},
                 { get_input: docker_version },
                 { get_input: dgbuilder_docker}]
            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_Appc:
    description: informations about app-c
    value:
      ip: { get_attribute: [VM_001_floating_ip, floating_ip_address] }



 

 


