Add centos consul blueprints 15/11215/1
authorLusheng Ji <lji@research.att.com>
Fri, 8 Sep 2017 19:12:45 +0000 (19:12 +0000)
committerLusheng Ji <lji@research.att.com>
Fri, 8 Sep 2017 19:12:58 +0000 (19:12 +0000)
Issue-Id: DCAEGEN2-101
Change-Id: I7a27f4c231614a3531cf69855590078d81ef667e
Signed-off-by: Lusheng Ji <lji@research.att.com>
blueprints/centos_vm.yaml [new file with mode: 0644]
blueprints/consul_cluster.yaml [new file with mode: 0644]
mvn-phase-script.sh

diff --git a/blueprints/centos_vm.yaml b/blueprints/centos_vm.yaml
new file mode 100644 (file)
index 0000000..5dc29dd
--- /dev/null
@@ -0,0 +1,240 @@
+#
+# ============LICENSE_START==========================================
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+# 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============================================
+#
+# ECOMP and OpenECOMP are trademarks
+# and service marks of AT&T Intellectual Property.
+#
+
+tosca_definitions_version: cloudify_dsl_1_3
+
+imports:
+  - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml
+  - http://www.getcloudify.org/spec/openstack-plugin/1.4/plugin.yaml
+  - http://www.getcloudify.org/spec/fabric-plugin/1.4.1/plugin.yaml
+  - types/dns_types.yaml
+  - types/sshkey_types.yaml
+
+inputs:
+  centos7image_id:
+    type: string
+  ubuntu1604image_id:
+    type: string
+  flavor_id:
+    type: string
+  security_group:
+    type: string
+  public_net:
+    type: string
+  private_net:
+    type: string
+  openstack: {}
+  keypair:
+    type: string
+  location_prefix:
+    type: string
+  location_domain:
+    type: string
+  key_filename:
+    type: string
+  codesource_url:
+    type: string
+  codesource_version:
+    type: string
+  cname:
+    type: string
+    default: dcae-orcl
+  datacenter:
+    type: string
+  vm_init_clmg_00:
+    type: string
+    default: |-
+      #!/bin/sh
+      set -x
+      DATACENTER=
+  vm_init_clmg_01:
+    type: string
+    default: |
+      CONSULVER=0.8.3
+      CONSULNAME=consul_${CONSULVER}_linux_amd64
+      MYIP=`curl -Ss http://169.254.169.254/2009-04-04/meta-data/local-ipv4`
+      MYNAME=`hostname`
+      echo >>/etc/hosts
+      echo $MYIP $MYNAME >>/etc/hosts
+      mkdir -p /opt/consul/config /opt/consul/data /opt/consul/bin
+      yum install -y unzip
+      # Download Consul
+      curl -Ss   https://releases.hashicorp.com/consul/${CONSULVER}/${CONSULNAME}.zip > ${CONSULNAME}.zip
+      unzip -d /opt/consul/bin  ${CONSULNAME}.zip
+      rm ${CONSULNAME}.zip
+      chmod +x  /opt/consul/bin/consul
+      cat <<EOF > /opt/consul/config/consul.json
+      {
+        "bind_addr" : "0.0.0.0",
+        "client_addr" : "0.0.0.0",
+        "data_dir" : "/opt/consul/data",
+        "datacenter": "$DATACENTER",
+        "rejoin_after_leave": true,
+        "http_api_response_headers": {
+           "Access-Control-Allow-Origin" : "*"
+        },
+        "server": false,
+        "ui": false,
+        "enable_syslog": true,
+        "log_level": "info"
+      }
+      EOF
+      cat <<EOF > /lib/systemd/system/consul.service
+      [Unit]
+      Description=Consul
+      Requires=network-online.target
+      After=network.target
+      [Service]
+      Type=simple
+      ExecStart=/opt/consul/bin/consul agent -config-dir=/opt/consul/config
+      ExecReload=/bin/kill -HUP \$MAINPID
+      [Install]
+      WantedBy=multi-user.target
+      EOF
+      systemctl enable consul
+      systemctl start consul
+      yum install -y python-psycopg2
+
+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 }
+      openstack_config: &open_conf
+        get_input: openstack
+  private_net:
+    type: cloudify.openstack.nodes.Network
+    properties:
+      use_external_resource: True
+      resource_id: { get_input: private_net }
+      openstack_config: *open_conf
+  security_group:
+    type: cloudify.openstack.nodes.SecurityGroup
+    properties:
+      use_external_resource: True
+      resource_id: { get_input: security_group }
+      openstack_config: *open_conf
+  fixedip_vm00:
+    type: cloudify.openstack.nodes.Port
+    properties:
+      port:
+        extra_dhcp_opts:
+          - opt_name: 'domain-name'
+            opt_value: { get_input: location_domain }
+      openstack_config: *open_conf
+    relationships:
+      - type: cloudify.relationships.contained_in
+        target: private_net
+  floatingip_vm00:
+    type: cloudify.openstack.nodes.FloatingIP
+    properties:
+      openstack_config: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              floating_network_name: { get_input: public_net }
+  dns_vm00:
+    type: ccsdk.nodes.dns.arecord
+    properties:
+      fqdn: { concat: [ { get_input: location_prefix }, 'orcl00.', { get_input: location_domain } ] }
+      openstack: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              ip_addresses:
+                - { get_attribute: [ floatingip_vm00, floating_ip_address ] }
+    relationships:
+      - type: cloudify.relationships.depends_on
+        target: floatingip_vm00
+  dns_cm:
+    type: ccsdk.nodes.dns.arecord
+    properties:
+      fqdn: { concat: [ 'cloudify-manager-', { get_input: datacenter}, '.', { get_input: location_domain } ] }
+      openstack: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              ip_addresses:
+                - { get_attribute: [ floatingip_vm00, floating_ip_address ] }
+    relationships:
+      - type: cloudify.relationships.depends_on
+        target: floatingip_vm00
+  dns_cname:
+    type: ccsdk.nodes.dns.cnamerecord
+    properties:
+      fqdn: { concat: [ { get_input: cname }, '.', { get_input: location_domain } ] }
+      openstack: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              cname: { get_property: [ dns_vm00, fqdn ] }
+    relationships:
+      - type: cloudify.relationships.depends_on
+        target: dns_vm00
+  host_vm00:
+    type: cloudify.openstack.nodes.Server
+    properties:
+      install_agent: false
+      image: { get_input: centos7image_id }
+      flavor: { get_input: flavor_id }
+      management_network_name: { get_input: private_net }
+      openstack_config: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              name: { concat: [ { get_input: location_prefix }, 'orcl00' ] }
+              userdata:
+                concat:
+                  - { get_input: vm_init_clmg_00 }
+                  - { get_input: datacenter }
+                  - |+
+
+                  - { get_input: vm_init_clmg_01 }
+    relationships:
+      - type: cloudify.openstack.server_connected_to_port
+        target: fixedip_vm00
+      - type: cloudify.openstack.server_connected_to_security_group
+        target: security_group
+      - type: cloudify.openstack.server_connected_to_floating_ip
+        target: floatingip_vm00
+      - type: cloudify.openstack.server_connected_to_keypair
+        target: key_pair
+      - type: cloudify.relationships.depends_on
+        target: dns_vm00
+      - type: cloudify.relationships.depends_on
+        target: dns_cm
+
+outputs:
+  public_ip:
+    value: { get_attribute: [floatingip_vm00, floating_ip_address] }
diff --git a/blueprints/consul_cluster.yaml b/blueprints/consul_cluster.yaml
new file mode 100644 (file)
index 0000000..0fb205e
--- /dev/null
@@ -0,0 +1,380 @@
+#
+# ============LICENSE_START==========================================
+# ===================================================================
+# Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+# ===================================================================
+# 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============================================
+#
+# ECOMP and OpenECOMP are trademarks
+# and service marks of AT&T Intellectual Property.
+#
+
+tosca_definitions_version: cloudify_dsl_1_3
+
+imports:
+  - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml
+  - http://www.getcloudify.org/spec/openstack-plugin/1.4/plugin.yaml
+  - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_plugins_releases }}/type_files/dnsdesig/dns_types.yaml"
+  - "{{ ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_plugins_releases }}/type_files/sshkeyshare/sshkey_types.yaml"
+
+inputs:
+  centos7image_id:
+    type: string
+  ubuntu1604image_id:
+    type: string
+  flavor_id:
+    type: string
+  security_group:
+    type: string
+  public_net:
+    type: string
+  private_net:
+    type: string
+  openstack: {}
+  keypair:
+    type: string
+  location_prefix:
+    type: string
+  location_domain:
+    type: string
+  key_filename:
+    type: string
+  codesource_url:
+    type: string
+  codesource_version:
+    type: string
+  datacenter:
+    type: string
+  vm_init_cnsl_00:
+    type: string
+    default: |-
+      #!/bin/sh
+      set -x
+      DATACENTER=
+  vm_init_cnsl_01:
+    type: string
+    default: |
+      CONSULVER=0.8.3
+      CONSULNAME=consul_${CONSULVER}_linux_amd64
+      MYIP=`wget -qO- http://169.254.169.254/2009-04-04/meta-data/local-ipv4`
+      MYNAME=`hostname`
+      echo >>/etc/hosts
+      echo $MYIP $MYNAME >>/etc/hosts
+      mkdir -p /opt/consul/config /opt/consul/data /opt/consul/bin
+
+      # Download Consul
+      apt-get update
+      apt-get install unzip
+      wget https://releases.hashicorp.com/consul/${CONSULVER}/${CONSULNAME}.zip
+      unzip -d /opt/consul/bin  ${CONSULNAME}.zip
+      rm ${CONSULNAME}.zip
+      chmod +x  /opt/consul/bin/consul
+
+      # NOTE: Not using port 80 for http to avoid port collision of user facing services
+      # particularly for more large scale deployments of Consul.
+      cat <<EOF > /opt/consul/config/consul.json
+      {
+        "bind_addr" : "$MYIP",
+        "client_addr" : "0.0.0.0",
+        "bootstrap_expect" : 3,
+        "data_dir" : "/opt/consul/data",
+        "datacenter": "$DATACENTER",
+        "http_api_response_headers": {
+            "Access-Control-Allow-Origin" : "*"
+        },
+        "server": true,
+        "ui": true,
+        "enable_syslog": true,
+        "log_level": "info",
+        "ports": {
+            "dns": 53
+        }
+      }
+      EOF
+      cat <<EOF > /lib/systemd/system/consul.service
+      [Unit]
+      Description=Consul
+      Requires=network-online.target
+      After=network.target
+      [Service]
+      Type=simple
+      ExecStart=/opt/consul/bin/consul agent -config-dir=/opt/consul/config
+      ExecReload=/bin/kill -HUP \$MAINPID
+      [Install]
+      WantedBy=multi-user.target
+      EOF
+      systemctl enable consul
+      systemctl start consul
+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 }
+      openstack_config: &open_conf
+        get_input: openstack
+  private_net:
+    type: cloudify.openstack.nodes.Network
+    properties:
+      use_external_resource: True
+      resource_id: { get_input: private_net }
+      openstack_config: *open_conf
+  security_group:
+    type: cloudify.openstack.nodes.SecurityGroup
+    properties:
+      use_external_resource: True
+      resource_id: { get_input: security_group }
+      openstack_config: *open_conf
+  fixedip_cnsl00:
+    type: cloudify.openstack.nodes.Port
+    properties:
+      port:
+        extra_dhcp_opts:
+          - opt_name: 'domain-name'
+            opt_value: { get_input: location_domain }
+      openstack_config: *open_conf
+    relationships:
+      - type: cloudify.relationships.contained_in
+        target: private_net
+  floatingip_cnsl00:
+    type: cloudify.openstack.nodes.FloatingIP
+    properties:
+      openstack_config: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              floating_network_name: { get_input: public_net }
+  dns_cnsl00:
+    type: ccsdk.nodes.dns.arecord
+    properties:
+      fqdn: { concat: [ { get_input: location_prefix }, 'cnsl00.', { get_input: location_domain } ] }
+      openstack: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              ip_addresses:
+                - { get_attribute: [ floatingip_cnsl00, floating_ip_address ] }
+    relationships:
+      - type: cloudify.relationships.depends_on
+        target: floatingip_cnsl00
+  host_cnsl00:
+    type: cloudify.openstack.nodes.Server
+    properties:
+      install_agent: false
+      image: { get_input: ubuntu1604image_id }
+      flavor: { get_input: flavor_id }
+      management_network_name: { get_input: private_net }
+      openstack_config: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              name: { concat: [ { get_input: location_prefix }, 'cnsl00' ] }
+              userdata:
+                concat:
+                  - { get_input: vm_init_cnsl_00 }
+                  - { get_input: datacenter }
+                  - |+
+
+                  - { get_input: vm_init_cnsl_01 }
+                  - concat:
+                      - 'until /opt/consul/bin/consul join '
+                      - { get_attribute: [host_cnsl01, ip] }
+                      - ' '
+                      - { get_attribute: [host_cnsl02, ip]}
+                      - '; do sleep 15; done'
+
+    relationships:
+      - type: cloudify.openstack.server_connected_to_port
+        target: fixedip_cnsl00
+      - type: cloudify.openstack.server_connected_to_security_group
+        target: security_group
+      - type: cloudify.openstack.server_connected_to_floating_ip
+        target: floatingip_cnsl00
+      - type: cloudify.openstack.server_connected_to_keypair
+        target: key_pair
+      - type: cloudify.relationships.depends_on
+        target: dns_cnsl00
+      - type: cloudify.relationships.depends_on
+        target: host_cnsl01
+      - type: cloudify.relationships.depends_on
+        target: host_cnsl02
+  fixedip_cnsl01:
+    type: cloudify.openstack.nodes.Port
+    properties:
+      port:
+        extra_dhcp_opts:
+          - opt_name: 'domain-name'
+            opt_value: { get_input: location_domain }
+      openstack_config: *open_conf
+    relationships:
+      - type: cloudify.relationships.contained_in
+        target: private_net
+  floatingip_cnsl01:
+    type: cloudify.openstack.nodes.FloatingIP
+    properties:
+      openstack_config: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              floating_network_name: { get_input: public_net }
+  dns_cnsl01:
+    type: ccsdk.nodes.dns.arecord
+    properties:
+      fqdn: { concat: [ { get_input: location_prefix }, 'cnsl01.', { get_input: location_domain } ] }
+      openstack: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              ip_addresses:
+                - { get_attribute: [ floatingip_cnsl01, floating_ip_address ] }
+    relationships:
+      - type: cloudify.relationships.depends_on
+        target: floatingip_cnsl01
+  host_cnsl01:
+    type: cloudify.openstack.nodes.Server
+    properties:
+      install_agent: false
+      image: { get_input: ubuntu1604image_id }
+      flavor: { get_input: flavor_id }
+      management_network_name: { get_input: private_net }
+      openstack_config: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              name: { concat: [ { get_input: location_prefix }, 'cnsl01' ] }
+              userdata:
+                concat:
+                  - { get_input: vm_init_cnsl_00 }
+                  - { get_input: datacenter }
+                  - |+
+
+                  - { get_input: vm_init_cnsl_01 }
+    relationships:
+      - type: cloudify.openstack.server_connected_to_port
+        target: fixedip_cnsl01
+      - type: cloudify.openstack.server_connected_to_security_group
+        target: security_group
+      - type: cloudify.openstack.server_connected_to_floating_ip
+        target: floatingip_cnsl01
+      - type: cloudify.openstack.server_connected_to_keypair
+        target: key_pair
+      - type: cloudify.relationships.depends_on
+        target: dns_cnsl01
+  fixedip_cnsl02:
+    type: cloudify.openstack.nodes.Port
+    properties:
+      port:
+        extra_dhcp_opts:
+          - opt_name: 'domain-name'
+            opt_value: { get_input: location_domain }
+      openstack_config: *open_conf
+    relationships:
+      - type: cloudify.relationships.contained_in
+        target: private_net
+  floatingip_cnsl02:
+    type: cloudify.openstack.nodes.FloatingIP
+    properties:
+      openstack_config: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              floating_network_name: { get_input: public_net }
+  dns_cnsl02:
+    type: ccsdk.nodes.dns.arecord
+    properties:
+      fqdn: { concat: [ { get_input: location_prefix }, 'cnsl02.', { get_input: location_domain } ] }
+      openstack: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              ip_addresses:
+                - { get_attribute: [ floatingip_cnsl02, floating_ip_address ] }
+    relationships:
+      - type: cloudify.relationships.depends_on
+        target: floatingip_cnsl02
+  dns_cluster:
+    type: ccsdk.nodes.dns.arecord
+    properties:
+      fqdn: { concat: [ 'dcae-cnsl.', { get_input: location_domain } ] }
+      openstack: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              ip_addresses:
+                - { get_attribute: [ floatingip_cnsl00, floating_ip_address ] }
+                - { get_attribute: [ floatingip_cnsl01, floating_ip_address ] }
+                - { get_attribute: [ floatingip_cnsl02, floating_ip_address ] }
+
+    relationships:
+      - type: cloudify.relationships.depends_on
+        target: floatingip_cnsl00
+      - type: cloudify.relationships.depends_on
+        target: floatingip_cnsl01
+      - type: cloudify.relationships.depends_on
+        target: floatingip_cnsl02
+  host_cnsl02:
+    type: cloudify.openstack.nodes.Server
+    properties:
+      install_agent: false
+      image: { get_input: ubuntu1604image_id }
+      flavor: { get_input: flavor_id }
+      management_network_name: { get_input: private_net }
+      openstack_config: *open_conf
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        create:
+          inputs:
+            args:
+              name: { concat: [ { get_input: location_prefix }, 'cnsl02' ] }
+              userdata:
+                concat:
+                  - { get_input: vm_init_cnsl_00 }
+                  - { get_input: datacenter }
+                  - |+
+
+                  - { get_input: vm_init_cnsl_01 }
+    relationships:
+      - type: cloudify.openstack.server_connected_to_port
+        target: fixedip_cnsl02
+      - type: cloudify.openstack.server_connected_to_security_group
+        target: security_group
+      - type: cloudify.openstack.server_connected_to_floating_ip
+        target: floatingip_cnsl02
+      - type: cloudify.openstack.server_connected_to_keypair
+        target: key_pair
+      - type: cloudify.relationships.depends_on
+        target: dns_cnsl02
+
+outputs:
+  public_ip:
+    value: { get_attribute: [floatingip_cnsl00, floating_ip_address] }
index d0f1ebe..102e8a6 100755 (executable)
 
 echo "running script: [$0] for module [$1] at stage [$2]"
 
-MVN_PROJECT_MODULEID="$1" 
+MVN_PROJECT_MODULEID="$1"
 MVN_PHASE="$2"
 
-echo "MVN_PROJECT_MODULEID is            [$MVN_PROJECT_MODULEID]"
-echo "MVN_PHASE is                       [$MVN_PHASE]"
-echo "MVN_PROJECT_GROUPID is             [$MVN_PROJECT_GROUPID]"
-echo "MVN_PROJECT_ARTIFACTID is          [$MVN_PROJECT_ARTIFACTID]"
-echo "MVN_PROJECT_VERSION is             [$MVN_PROJECT_VERSION]"
-echo "MVN_NEXUSPROXY is                  [$MVN_NEXUSPROXY]"
-echo "MVN_RAWREPO_BASEURL_UPLOAD is      [$MVN_RAWREPO_BASEURL_UPLOAD]"
-echo "MVN_RAWREPO_BASEURL_DOWNLOAD is    [$MVN_RAWREPO_BASEURL_DOWNLOAD]"
-MVN_RAWREPO_HOST=$(echo "$MVN_RAWREPO_BASEURL_UPLOAD" | cut -f3 -d'/' |cut -f1 -d':')
-echo "MVN_RAWREPO_HOST is                [$MVN_RAWREPO_HOST]"
-echo "MVN_RAWREPO_SERVERID is            [$MVN_RAWREPO_SERVERID]"
-echo "MVN_DOCKERREGISTRY_DAILY is        [$MVN_DOCKERREGISTRY_DAILY]"
-echo "MVN_DOCKERREGISTRY_RELEASE is      [$MVN_DOCKERREGISTRY_RELEASE]"
+
+FQDN="${MVN_PROJECT_GROUPID}.${MVN_PROJECT_ARTIFACTID}"
+if [ "$MVN_PROJECT_MODULEID" == "__" ]; then
+  MVN_PROJECT_MODULEID=""
+fi
 
 if [[ "$MVN_PROJECT_VERSION" == *SNAPSHOT ]]; then
   echo "=> for SNAPSHOT artifact build"
@@ -48,13 +40,9 @@ fi
 echo "MVN_DEPLOYMENT_TYPE is             [$DEPLOYMENT_TYPE]"
 
 
-echo "=> Prepare environment "
-#env
-
-TIMESTAMP=$(date +%C%y%m%dT%H%M%S) 
-export BUILD_NUMBER="${TIMESTAMP}"
+TIMESTAMP=$(date +%C%y%m%dT%H%M%S)
 
-# expected environment variables 
+# expected environment variables
 if [ -z "${MVN_NEXUSPROXY}" ]; then
     echo "MVN_NEXUSPROXY environment variable not set.  Cannot proceed"
     exit
@@ -67,40 +55,32 @@ if [ -z "$WORKSPACE" ]; then
     WORKSPACE=$(pwd)
 fi
 
-# mvn phase in life cycle 
+# mvn phase in life cycle
 MVN_PHASE="$2"
 
-case $MVN_PHASE in
-clean)
-  echo "==> clean phase script"
-  rm -rf ./venv-tox
-  ;;
-generate-sources)
-  echo "==> generate-sources phase script"
-  ;;
-compile)
-  echo "==> compile phase script"
-  ;;
-test)
-  echo "==> test phase script"
-  ;;
-package)
-  echo "==> package phase script"
-  ;;
-install)
-  echo "==> install phase script"
-  ;;
-deploy)
-  echo "==> deploy phase script"
-  
+
+echo "MVN_PROJECT_MODULEID is            [$MVN_PROJECT_MODULEID]"
+echo "MVN_PHASE is                       [$MVN_PHASE]"
+echo "MVN_PROJECT_GROUPID is             [$MVN_PROJECT_GROUPID]"
+echo "MVN_PROJECT_ARTIFACTID is          [$MVN_PROJECT_ARTIFACTID]"
+echo "MVN_PROJECT_VERSION is             [$MVN_PROJECT_VERSION]"
+echo "MVN_NEXUSPROXY is                  [$MVN_NEXUSPROXY]"
+echo "MVN_RAWREPO_BASEURL_UPLOAD is      [$MVN_RAWREPO_BASEURL_UPLOAD]"
+echo "MVN_RAWREPO_BASEURL_DOWNLOAD is    [$MVN_RAWREPO_BASEURL_DOWNLOAD]"
+MVN_RAWREPO_HOST=$(echo "$MVN_RAWREPO_BASEURL_UPLOAD" | cut -f3 -d'/' |cut -f1 -d':')
+echo "MVN_RAWREPO_HOST is                [$MVN_RAWREPO_HOST]"
+echo "MVN_RAWREPO_SERVERID is            [$MVN_RAWREPO_SERVERID]"
+echo "MVN_DOCKERREGISTRY_DAILY is        [$MVN_DOCKERREGISTRY_DAILY]"
+echo "MVN_DOCKERREGISTRY_RELEASE is      [$MVN_DOCKERREGISTRY_RELEASE]"
+
+expand_templates() 
+{
   # set up env variables, get ready for template resolution
   export ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_plugins_releases="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.ccsdk.plugins/releases"
   export ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_plugins_snapshots="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.ccsdk.plugins/snapshots"
   export ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_blueprints_releases="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.ccsdk.blueprints/releases"
-  export ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_blueprints_snapshots="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.ccsdk.blueprints/snapshots"
-  export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_releases="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2/releases"
-  export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_snapshots="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2/snapshots"
-  export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2.platform.plugins/releases"
+  export ONAPTEMPLATE_RAWREPOURL_org_onap_ccsdk_platform_blueprints_snapshots="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.ccsdk.blueprints/snapshots"  export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_releases="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2/releases"
+  export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_snapshots="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2/snapshots"  export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_releases="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2.platform.plugins/releases"
   export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_plugins_snapshots="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2.platform.plugins/snapshots"
   export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_blueprints_releases="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2.platform.blueprints/releases"
   export ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2_platform_blueprints_snapshots="$MVN_RAWREPO_BASEURL_DOWNLOAD/org.onap.dcaegen2.platform.blueprints/snapshots"
@@ -114,24 +94,24 @@ deploy)
   TEMPLATES=$(env |grep ONAPTEMPLATE)
   echo "====> Resolving the following temaplate from environment variables "
   echo "[$TEMPLATES]"
-  SELFFILE=$(echo $0 | rev | cut -f1 -d '/' | rev)
+  SELFFILE=$(echo "$0" | rev | cut -f1 -d '/' | rev)
   for TEMPLATE in $TEMPLATES; do
-    KEY=$(echo $TEMPLATE | cut -f1 -d'=')
-    VALUE=$(echo $TEMPLATE | cut -f2 -d'=')
-    VALUE2=$(echo $TEMPLATE | cut -f2 -d'=' |sed 's/\//\\\//g')
+    KEY=$(echo "$TEMPLATE" | cut -f1 -d'=')
+    VALUE=$(echo "$TEMPLATE" | cut -f2 -d'=')
+    VALUE2=$(echo "$TEMPLATE" | cut -f2 -d'=' |sed 's/\//\\\//g')
     FILES=$(grep -rl "$KEY")
 
-    # assuming FILES is not longer than 2M bytes, the limit for variable value max size on this VM 
+    # assuming FILES is not longer than 2M bytes, the limit for variable value max size on this VM
     for F in $FILES; do
        if [[ $F == *"$SELFFILE" ]]; then
           continue
        fi
        echo "======> Resolving template $KEY to value $VALUE for file $F"
-       sed -i "s/{{[[:space:]]*$KEY[[:space:]]*}}/$VALUE2/g" $F
-   
-       cat $F
-    done 
-    
+       sed -i "s/{{[[:space:]]*$KEY[[:space:]]*}}/$VALUE2/g" "$F"
+
+       #cat "$F"
+    done
+
     #if [ ! -z "$FILES" ]; then
     #   echo "====> Resolving template $VALUE to value $VALUE"
     #   #CMD="grep -rl \"$VALUE\" | tr '\n' '\0' | xargs -0 sed -i \"s/{{[[:space:]]*$VALUE[[:space:]]*}}/$VALUE/g\""
@@ -141,13 +121,57 @@ deploy)
     #fi
   done
   echo "====> Done template reolving"
+}
+
+
+run_tox_test() 
+{ 
+  set -x
+  CURDIR=$(pwd)
+  TOXINIS=$(find . -name "tox.ini")
+  for TOXINI in "${TOXINIS[@]}"; do
+    DIR=$(echo "$TOXINI" | rev | cut -f2- -d'/' | rev)
+    cd "${CURDIR}/${DIR}"
+    rm -rf ./venv-tox ./.tox
+    virtualenv ./venv-tox
+    source ./venv-tox/bin/activate
+    pip install --upgrade pip
+    pip install --upgrade tox argparse
+    pip freeze
+    tox
+    deactivate
+    rm -rf ./venv-tox ./.tox
+  done
+}
+
+build_wagons() 
+{
+  rm -rf ./*.wgn venv-pkg
+
+  SETUPFILES=$(find . -name "setup.py")
+  for SETUPFILE in $SETUPFILES; do
+    PLUGIN_DIR=$(echo "$SETUPFILE" |rev | cut -f 2- -d '/' |rev)
+    PLUGIN_NAME=$(grep 'name' "$SETUPFILE" | cut -f2 -d'=' | sed 's/[^0-9a-zA-Z\.]*//g')
+    PLUGIN_VERSION=$(grep 'version' "$SETUPFILE" | cut -f2 -d'=' | sed 's/[^0-9\.]*//g')
+
+    echo "In $PLUGIN_DIR, $PLUGIN_NAME, $PLUGIN_VERSION"
+
+    virtualenv ./venv-pkg
+    source ./venv-pkg/bin/activate
+    pip install --upgrade pip
+    pip install wagon
+    wagon create --format tar.gz "$PLUGIN_DIR"
+    deactivate
+    rm -rf venv-pkg
+
+    PKG_FILE_NAMES=( "${PLUGIN_NAME}-${PLUGIN_VERSION}"*.wgn )
+    echo Built package: "${PKG_FILE_NAMES[@]}"
+  done
+}
 
 
-  FQDN="${MVN_PROJECT_GROUPID}.${MVN_PROJECT_ARTIFACTID}"
-  if [ "$MVN_PROJECT_MODULEID" == "__" ]; then
-    MVN_PROJECT_MODULEID=""
-  fi
-
+upload_raw_file() 
+{
   # Extract the username and password to the nexus repo from the settings file
   USER=$(xpath -q -e "//servers/server[id='$MVN_RAWREPO_SERVERID']/username/text()" "$SETTINGS_FILE")
   PASS=$(xpath -q -e "//servers/server[id='$MVN_RAWREPO_SERVERID']/password/text()" "$SETTINGS_FILE")
@@ -155,9 +179,19 @@ deploy)
   echo "machine $MVN_RAWREPO_HOST login $USER password $PASS" > "$NETRC"
 
   REPO="$MVN_RAWREPO_BASEURL_UPLOAD"
-  FQDN="${MVN_PROJECT_GROUPID}.${MVN_PROJECT_ARTIFACTID}"
 
-  OUTPUT_FILES="*.yaml"
+  OUTPUT_FILE=$1
+  EXT=$(echo "$OUTPUT_FILE" | rev |cut -f1 -d '.' |rev)
+  if [ "$EXT" == 'yaml' ]; then
+    OUTPUT_FILE_TYPE='text/x-yaml'
+  elif [ "$EXT" == 'gz' ]; then
+    OUTPUT_FILE_TYPE='application/gzip'
+  elif [ "$EXT" == 'wgn' ]; then
+    OUTPUT_FILE_TYPE='application/gzip'
+  else
+    OUTPUT_FILE_TYPE='application/octet-stream'
+  fi
+
 
   if [ "$MVN_DEPLOYMENT_TYPE" == 'SNAPSHOT' ]; then
     SEND_TO="${REPO}/${FQDN}/snapshots"
@@ -169,41 +203,56 @@ deploy)
   fi
 
   echo "Sending ${OUTPUT_FILE} to Nexus: ${SEND_TO}"
-  for OUTPUT_FILE in $OUTPUT_FILES; do
-    echo curl -vkn --netrc-file "${NETRC}" --upload-file "${OUTPUT_FILE}" "${SEND_TO}/${OUTPUT_FILE}"
-    curl -vkn --netrc-file "${NETRC}" --upload-file "${OUTPUT_FILE}" "${SEND_TO}/${OUTPUT_FILE}-${MVN_PROJECT_VERSION}-${TIMESTAMP}"
-    curl -vkn --netrc-file "${NETRC}" --upload-file "${OUTPUT_FILE}" "${SEND_TO}/${OUTPUT_FILE}"
+  curl -vkn --netrc-file "${NETRC}" --upload-file "${OUTPUT_FILE}" -X PUT -H "Content-Type: $OUTPUT_FILE_TYPE" "${SEND_TO}/${OUTPUT_FILE}-${MVN_PROJECT_VERSION}-${TIMESTAMP}"
+  curl -vkn --netrc-file "${NETRC}" --upload-file "${OUTPUT_FILE}" -X PUT -H "Content-Type: $OUTPUT_FILE_TYPE" "${SEND_TO}/${OUTPUT_FILE}-${MVN_PROJECT_VERSION}"
+  curl -vkn --netrc-file "${NETRC}" --upload-file "${OUTPUT_FILE}" -X PUT -H "Content-Type: $OUTPUT_FILE_TYPE" "${SEND_TO}/${OUTPUT_FILE}"
+}
+
+
+
+upload_wagons_and_type_yamls()
+{
+  WAGONS=$(ls -1 ./*.wgn)
+  for WAGON in "${WAGONS[@]}" ; do
+    WAGON_NAME=$(echo "$WAGON" | cut -f1 -d '-')
+    WAGON_VERSION=$(echo "$WAGON" | cut -f2 -d '-')
+    WAGON_TYPEFILE=$(grep -rl "$WAGON_NAME" | grep yaml | head -1)
+   
+    upload_raw_file "$WAGON"
+    upload_raw_file "$WAGON_TYPEFILE"
   done
-  # ========================== end of example deploying raw artifact ========================
+}
+
+
 
-if  false; then
-  # ================== example building and deploying docker image ==========================
+build_and_push_docker()
+{
   IMAGENAME="onap/${FQDN}.${MVN_PROJECT_MODULEID}"
   IMAGENAME=$(echo "$IMAGENAME" | sed -e 's/_*$//g' -e 's/\.*$//g')
 
   # use the major and minor version of the MVN artifact version as docker image version
   VERSION="${MVN_PROJECT_VERSION//[^0-9.]/}"
   VERSION2=$(echo "$VERSION" | cut -f1-2 -d'.')
-   
+
   LFQI="${IMAGENAME}:${VERSION}-${TIMESTAMP}"
   BUILD_PATH="${WORKSPACE}"
   # build a docker image
   docker build --rm -f "${WORKSPACE}"/Dockerfile -t "${LFQI}" "${BUILD_PATH}"
 
-  REPO="" 
+  REPO=""
   if [ $MVN_DEPLOYMENT_TYPE == "SNAPSHOT" ]; then
      REPO=$MVN_DOCKERREGISTRY_DAILY
   elif [ $MVN_DEPLOYMENT_TYPE == "STAGING" ]; then
      # there seems to be no staging docker registry?  set to use SNAPSHOT also
      #REPO=$MVN_DOCKERREGISTRY_RELEASE
      REPO=$MVN_DOCKERREGISTRY_DAILY
-  else 
+  else
      echo "Fail to determine DEPLOYMENT_TYPE"
      REPO=$MVN_DOCKERREGISTRY_DAILY
   fi
   echo "DEPLOYMENT_TYPE is: $MVN_DEPLOYMENT_TYPE, repo is $REPO"
 
-  if [ ! -z "$REPO" ]; then 
+  if [ ! -z "$REPO" ]; then
     USER=$(xpath -e "//servers/server[id='$REPO']/username/text()" "$SETTINGS_FILE")
     PASS=$(xpath -e "//servers/server[id='$REPO']/password/text()" "$SETTINGS_FILE")
     if [ -z "$USER" ]; then
@@ -216,14 +265,13 @@ if  false; then
     echo docker login "$REPO" -u "$USER" -p "$PASS_PROVIDED"
     docker login "$REPO" -u "$USER" -p "$PASS"
 
-    
     if [ $MVN_DEPLOYMENT_TYPE == "SNAPSHOT" ]; then
       REPO="$REPO/snapshots"
     elif [ $MVN_DEPLOYMENT_TYPE == "STAGING" ]; then
       # there seems to be no staging docker registry?  set to use SNAPSHOT also
       #REPO=$MVN_DOCKERREGISTRY_RELEASE
       REPO="$REPO"
-    else 
+    else
       echo "Fail to determine DEPLOYMENT_TYPE"
       REPO="$REPO/unknown"
     fi
@@ -232,15 +280,46 @@ if  false; then
     PUSHTAGS="${REPO}/${IMAGENAME}:${VERSION2}-${TIMESTAMP} ${REPO}/${IMAGENAME}:${VERSION2} ${REPO}/${IMAGENAME}:${VERSION2}-latest"
     for NEWTAG in ${PUSHTAGS}
     do
-      echo "tagging ${OLDTAG} to ${NEWTAG}" 
+      echo "tagging ${OLDTAG} to ${NEWTAG}"
       docker tag "${OLDTAG}" "${NEWTAG}"
-      echo "pushing ${NEWTAG}" 
+      echo "pushing ${NEWTAG}"
       docker push "${NEWTAG}"
       OLDTAG="${NEWTAG}"
     done
   fi
-fi 
-  # ============= end of example building and deploying docker image ========================
+
+}
+
+
+
+
+
+case $MVN_PHASE in
+clean)
+  echo "==> clean phase script"
+  rm -rf ./venv-* ./*.wgn
+  ;;
+generate-sources)
+  echo "==> generate-sources phase script"
+  expand_templates
+  ;;
+compile)
+  echo "==> compile phase script"
+  ;;
+test)
+  echo "==> test phase script"
+  run_tox_test
+  ;;
+package)
+  echo "==> package phase script"
+  build_wagons
+  ;;
+install)
+  echo "==> install phase script"
+  ;;
+deploy)
+  echo "==> deploy phase script"
+  upload_wagons_and_type_yamls
   ;;
 *)
   echo "==> unprocessed phase"