summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLusheng Ji <lji@research.att.com>2017-09-08 19:12:45 +0000
committerLusheng Ji <lji@research.att.com>2017-09-08 19:12:58 +0000
commit4365861c6409ecc882c4de18d50f804ba1c7943a (patch)
tree02200ed21c8c3f3f6110762107083300598eac49
parentef7bb6c8701028a9c8a0deb33523741644e2a93f (diff)
Add centos consul blueprints
Issue-Id: DCAEGEN2-101 Change-Id: I7a27f4c231614a3531cf69855590078d81ef667e Signed-off-by: Lusheng Ji <lji@research.att.com>
-rw-r--r--blueprints/centos_vm.yaml240
-rw-r--r--blueprints/consul_cluster.yaml380
-rwxr-xr-xmvn-phase-script.sh243
3 files changed, 781 insertions, 82 deletions
diff --git a/blueprints/centos_vm.yaml b/blueprints/centos_vm.yaml
new file mode 100644
index 0000000..5dc29dd
--- /dev/null
+++ b/blueprints/centos_vm.yaml
@@ -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
index 0000000..0fb205e
--- /dev/null
+++ b/blueprints/consul_cluster.yaml
@@ -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] }
diff --git a/mvn-phase-script.sh b/mvn-phase-script.sh
index d0f1ebe..102e8a6 100755
--- a/mvn-phase-script.sh
+++ b/mvn-phase-script.sh
@@ -21,22 +21,14 @@
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"