Deploy SO on VMs by TOSCA

Change-Id: Ic0b775089f218f869d1abe2f374919f3286aec1d
IssueID: OOM-450
Signed-off-by: Guan, Hong (hg4105) <hg4105@att.com>
diff --git a/TOSCA/VM/so/scripts/so.sh b/TOSCA/VM/so/scripts/so.sh
new file mode 100644
index 0000000..e570a9d
--- /dev/null
+++ b/TOSCA/VM/so/scripts/so.sh
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+#
+PUBIP="$1"
+PVTIP="$2"
+NEXUS_REPO="$3"
+DOCKER_REPO="$4"
+NEXUS_USERNAME="$5"
+NEXUS_PASSWORD="$6"
+ARTIFACTS_VERSION="$7"
+DNS_IP="$8"
+GERRIT_BRANCH="$9"
+CLOUD_ENV="$10"
+EXETERNAL_DNS="$11"
+DMAAP_TOPIC="$12"
+OPENSTACK_USERNAME="$13"
+TENANT_ID="$14"
+OPENSTACK_API_KEY="$15"
+OPENSTACK_REGION="$16"
+KEYSTONE="$17"
+SO_REPO="$18"
+DOCKER_VERSION="$19"
+
+export HOSTNAME=`hostname`
+echo 127.0.1.1 $HOSTNAME >>/etc/hosts
+echo $PVTIP $HOSTNAME >>/etc/hosts
+echo $PUBIP $HOSTNAME >>/etc/hosts
+
+
+mkdir /opt/config
+chmod 777 /opt/config
+echo $PUBIP                                     > /opt/config/public_ip.txt
+echo $NEXUS_REPO                                > /opt/config/nexus_repo.txt
+echo $DOCKER_REPO                               > /opt/config/nexus_docker_repo.txt
+echo $NEXUS_USERNAME                            > /opt/config/nexus_username.txt
+echo $NEXUS_PASSWORD                            > /opt/config/nexus_password.txt
+echo $ARTIFACTS_VERSION                         > /opt/config/artifacts_version.txt
+echo $DNS_IP                                    > /opt/config/dns_ip_addr.txt
+echo $DOCKER_VERSION                            > /opt/config/docker_version.txt
+echo $GERRIT_BRANCH                             > /opt/config/gerrit_branch.txt
+echo $CLOUD_ENV                                 > /opt/config/cloud_env.txt
+echo $EXETERNAL_DNS                             > /opt/config/external_dns.txt
+echo $DMAAP_TOPIC                               > /opt/config/dmaap_topic.txt
+echo $OPENSTACK_USERNAME                        > /opt/config/openstack_username.txt
+echo $TENANT_ID                                 > /opt/config/tenant_id.txt
+echo $OPENSTACK_API_KEY                         > /opt/config/openstack_api_key.txt
+echo $OPENSTACK_REGION                          > /opt/config/openstack_region.txt
+echo $KEYSTONE                                  > /opt/config/keystone.txt
+echo $SO_REPO                                   > /opt/config/remote_repo.txt
+
+if [ ! -f /opt/rebooted ]; then
+	touch /opt/so_install.sh
+	chmod 777 /opt/so_install.sh
+	curl -k $NEXUS_REPO/org.onap.demo/boot/$ARTIFACTS_VERSION/so_install.sh -o /opt/so_install.sh
+	cd /opt
+	chmod +x so_install.sh
+ 
+	echo "	if [ ! -f /opt/rebooted ]; then" >/opt/install_tmp
+	echo "		touch /opt/rebooted">>/opt/install_tmp
+	echo "		reboot" >>/opt/install_tmp
+	echo "	fi">>/opt/install_tmp
+	sed -i -e "/\treboot/r install_tmp" -e "//d" so_install.sh
+fi
+/opt/so_install.sh > so_install.log 2>&1
\ No newline at end of file
diff --git a/TOSCA/VM/so/so.yaml b/TOSCA/VM/so/so.yaml
new file mode 100644
index 0000000..4381a6e
--- /dev/null
+++ b/TOSCA/VM/so/so.yaml
@@ -0,0 +1,256 @@
+###########################################################
+# 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] }
+
+
+
+ 
+
+ 
+
+