diff options
Diffstat (limited to 'jjb/fuel')
-rwxr-xr-x | jjb/fuel/fuel-build.sh | 8 | ||||
-rw-r--r-- | jjb/fuel/fuel-ci-jobs.yml | 208 | ||||
-rwxr-xr-x | jjb/fuel/fuel-deploy.sh | 8 | ||||
-rwxr-xr-x | jjb/fuel/fuel-download-artifact.sh | 34 | ||||
-rwxr-xr-x | jjb/fuel/fuel-lab-reconfig.sh | 8 | ||||
-rw-r--r-- | jjb/fuel/fuel-project-jobs.yml | 50 | ||||
-rwxr-xr-x | jjb/fuel/fuel-upload-artifact.sh | 51 | ||||
-rwxr-xr-x | jjb/fuel/fuel-workspace-cleanup.sh | 8 |
8 files changed, 302 insertions, 73 deletions
diff --git a/jjb/fuel/fuel-build.sh b/jjb/fuel/fuel-build.sh index d51637afd..42e373cbc 100755 --- a/jjb/fuel/fuel-build.sh +++ b/jjb/fuel/fuel-build.sh @@ -1,4 +1,12 @@ #!/bin/bash +# SPDX-license-identifier: Apache-2.0 +############################################################################## +# Copyright (c) 2016 Ericsson AB and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## set -o errexit set -o nounset set -o pipefail diff --git a/jjb/fuel/fuel-ci-jobs.yml b/jjb/fuel/fuel-ci-jobs.yml index d293554c2..ef5bd41b8 100644 --- a/jjb/fuel/fuel-ci-jobs.yml +++ b/jjb/fuel/fuel-ci-jobs.yml @@ -28,11 +28,15 @@ <<: *brahmaputra - ericsson-pod1: <<: *brahmaputra + - ericsson-pod2: + <<: *brahmaputra - virtual: <<: *brahmaputra #-------------------------------- # master #-------------------------------- + - opnfv-jump-2: + <<: *master - ericsson-pod1: <<: *master - ericsson-pod2: @@ -44,22 +48,22 @@ #-------------------------------- scenario: # HA scenarios - - 'os-onos-nofeature-ha': - auto-trigger-name: 'fuel-{scenario}-{pod}-trigger' - 'os-odl_l2-nofeature-ha': - auto-trigger-name: 'fuel-{scenario}-{pod}-trigger' + auto-trigger-name: 'fuel-{scenario}-{pod}-{stream}-trigger' - 'os-odl_l3-nofeature-ha': - auto-trigger-name: 'fuel-{scenario}-{pod}-trigger' - - 'os-odl_l2-bgpvpn-ha': - auto-trigger-name: 'fuel-{scenario}-{pod}-trigger' - - 'os-nosdn-nofeature-ha': - auto-trigger-name: 'brahmaputra-trigger-daily-disabled' + auto-trigger-name: 'fuel-{scenario}-{pod}-{stream}-trigger' + - 'os-onos-nofeature-ha': + auto-trigger-name: 'fuel-{scenario}-{pod}-{stream}-trigger' - 'os-nosdn-kvm-ha': + auto-trigger-name: 'fuel-{scenario}-{pod}-{stream}-trigger' + - 'os-nosdn-ovs-ha': + auto-trigger-name: 'fuel-{scenario}-{pod}-{stream}-trigger' + - 'os-nosdn-nofeature-ha': + auto-trigger-name: 'fuel-{scenario}-{pod}-{stream}-trigger' + - 'os-odl_l2-bgpvpn-ha': auto-trigger-name: 'brahmaputra-trigger-daily-disabled' - 'os-nosdn-kvm_ovs-ha': auto-trigger-name: 'brahmaputra-trigger-daily-disabled' - - 'os-nosdn-ovs-ha': - auto-trigger-name: 'brahmaputra-trigger-daily-disabled' - 'os-nosdn-vlan-ha': auto-trigger-name: 'brahmaputra-trigger-daily-disabled' # NOHA scenarios @@ -101,6 +105,7 @@ use-build-blocker: true blocking-jobs: - 'fuel-os-.*?-{pod}-daily-{stream}' + block-level: 'NODE' wrappers: - build-name: @@ -130,7 +135,7 @@ same-node: true block: true - trigger-builds: - - project: 'functest-fuel-{pod}-daily-{stream}' + - project: 'yardstick-fuel-{pod}-daily-{stream}' current-parameters: false predefined-parameters: DEPLOY_SCENARIO={scenario} @@ -141,7 +146,7 @@ failure-threshold: 'never' unstable-threshold: 'FAILURE' - trigger-builds: - - project: 'yardstick-fuel-{pod}-daily-{stream}' + - project: 'functest-fuel-{pod}-daily-{stream}' current-parameters: false predefined-parameters: DEPLOY_SCENARIO={scenario} @@ -166,6 +171,8 @@ use-build-blocker: true blocking-jobs: - 'fuel-deploy-{pod}-daily-{stream}' + - 'fuel-deploy-generic-daily-.*' + block-level: 'NODE' parameters: - project-parameter: @@ -220,74 +227,207 @@ ######################## # trigger macros ######################## -# os-onos3-nofeature-ha trigger +# os-nosdn-nofeature-ha trigger +- trigger: + name: 'fuel-os-nosdn-nofeature-ha-opnfv-jump-2-master-trigger' + triggers: + - timed: '0 14 * * *' +- trigger: + name: 'fuel-os-nosdn-nofeature-ha-ericsson-pod1-master-trigger' + triggers: + - timed: '' - trigger: - name: 'fuel-os-onos-nofeature-ha-opnfv-jump-2-trigger' + name: 'fuel-os-nosdn-nofeature-ha-ericsson-pod2-master-trigger' triggers: - - timed: '0 20 * * *' + - timed: '' - trigger: - name: 'fuel-os-onos-nofeature-ha-ericsson-pod1-trigger' + name: 'fuel-os-nosdn-nofeature-ha-virtual-master-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-nofeature-ha-ericsson-pod2-trigger' + name: 'fuel-os-nosdn-nofeature-ha-opnfv-jump-2-brahmaputra-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-nofeature-ha-virtual-trigger' + name: 'fuel-os-nosdn-nofeature-ha-ericsson-pod1-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-nosdn-nofeature-ha-ericsson-pod2-brahmaputra-trigger' + triggers: + - timed: '0 14 * * *' +- trigger: + name: 'fuel-os-nosdn-nofeature-ha-virtual-brahmaputra-trigger' + triggers: + - timed: '' + +# os-nosdn-kvm-ha trigger +- trigger: + name: 'fuel-os-nosdn-kvm-ha-opnfv-jump-2-master-trigger' + triggers: + - timed: '0 18 * * *' +- trigger: + name: 'fuel-os-nosdn-kvm-ha-ericsson-pod1-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-nosdn-kvm-ha-ericsson-pod2-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-nosdn-kvm-ha-virtual-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-nosdn-kvm-ha-opnfv-jump-2-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-nosdn-kvm-ha-ericsson-pod1-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-nosdn-kvm-ha-ericsson-pod2-brahmaputra-trigger' + triggers: + - timed: '0 18 * * *' +- trigger: + name: 'fuel-os-nosdn-kvm-ha-virtual-brahmaputra-trigger' triggers: - timed: '' # os-odl_l2-nofeature-ha trigger - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-opnfv-jump-2-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-opnfv-jump-2-master-trigger' triggers: - - timed: '0 0 * * *' + - timed: '0 2 * * *' +- trigger: + name: 'fuel-os-odl_l2-nofeature-ha-ericsson-pod1-master-trigger' + triggers: + - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-ericsson-pod1-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-ericsson-pod2-master-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-ericsson-pod2-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-virtual-master-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-virtual-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-opnfv-jump-2-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-odl_l2-nofeature-ha-ericsson-pod1-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-odl_l2-nofeature-ha-ericsson-pod2-brahmaputra-trigger' + triggers: + - timed: '0 2 * * *' +- trigger: + name: 'fuel-os-odl_l2-nofeature-ha-virtual-brahmaputra-trigger' triggers: - timed: '' # os-odl_l3-nofeature-ha trigger - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-opnfv-jump-2-trigger' + name: 'fuel-os-odl_l3-nofeature-ha-opnfv-jump-2-master-trigger' + triggers: + - timed: '0 6 * * *' +- trigger: + name: 'fuel-os-odl_l3-nofeature-ha-ericsson-pod1-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-odl_l3-nofeature-ha-ericsson-pod2-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-odl_l3-nofeature-ha-virtual-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-odl_l3-nofeature-ha-opnfv-jump-2-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-odl_l3-nofeature-ha-ericsson-pod1-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-odl_l3-nofeature-ha-ericsson-pod2-brahmaputra-trigger' + triggers: + - timed: '0 6 * * *' +- trigger: + name: 'fuel-os-odl_l3-nofeature-ha-virtual-brahmaputra-trigger' triggers: - - timed: '0 4 * * *' + - timed: '' + +# os-onos-nofeature-ha trigger +- trigger: + name: 'fuel-os-onos-nofeature-ha-opnfv-jump-2-master-trigger' + triggers: + - timed: '0 10 * * *' +- trigger: + name: 'fuel-os-onos-nofeature-ha-ericsson-pod1-master-trigger' + triggers: + - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-ericsson-pod1-trigger' + name: 'fuel-os-onos-nofeature-ha-ericsson-pod2-master-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-ericsson-pod2-trigger' + name: 'fuel-os-onos-nofeature-ha-virtual-master-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-virtual-trigger' + name: 'fuel-os-onos-nofeature-ha-opnfv-jump-2-brahmaputra-trigger' triggers: - timed: '' +- trigger: + name: 'fuel-os-onos-nofeature-ha-ericsson-pod1-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-onos-nofeature-ha-ericsson-pod2-brahmaputra-trigger' + triggers: + - timed: '0 10 * * *' +- trigger: + name: 'fuel-os-onos-nofeature-ha-virtual-brahmaputra-trigger' + triggers: + - timed: '' + -# os-odl_l2-bgpvpn-ha trigger +# os-nosdn-ovs-ha trigger - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-opnfv-jump-2-trigger' + name: 'fuel-os-nosdn-ovs-ha-opnfv-jump-2-master-trigger' triggers: - - timed: '0 8 * * *' + - timed: '0 22 * * *' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-ericsson-pod1-trigger' + name: 'fuel-os-nosdn-ovs-ha-ericsson-pod1-master-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-ericsson-pod2-trigger' + name: 'fuel-os-nosdn-ovs-ha-ericsson-pod2-master-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-virtual-trigger' + name: 'fuel-os-nosdn-ovs-ha-virtual-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-nosdn-ovs-ha-opnfv-jump-2-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-nosdn-ovs-ha-ericsson-pod1-brahmaputra-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-nosdn-ovs-ha-ericsson-pod2-brahmaputra-trigger' + triggers: + - timed: '0 22 * * *' +- trigger: + name: 'fuel-os-nosdn-ovs-ha-virtual-brahmaputra-trigger' triggers: - timed: '' diff --git a/jjb/fuel/fuel-deploy.sh b/jjb/fuel/fuel-deploy.sh index f3d2aca45..62f2340a8 100755 --- a/jjb/fuel/fuel-deploy.sh +++ b/jjb/fuel/fuel-deploy.sh @@ -1,4 +1,12 @@ #!/bin/bash +# SPDX-license-identifier: Apache-2.0 +############################################################################## +# Copyright (c) 2016 Ericsson AB and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## set -o errexit set -o nounset set -o pipefail diff --git a/jjb/fuel/fuel-download-artifact.sh b/jjb/fuel/fuel-download-artifact.sh index a1a1de47e..d78ddc5ba 100755 --- a/jjb/fuel/fuel-download-artifact.sh +++ b/jjb/fuel/fuel-download-artifact.sh @@ -1,6 +1,13 @@ #!/bin/bash +# SPDX-license-identifier: Apache-2.0 +############################################################################## +# Copyright (c) 2016 Ericsson AB and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## set -o errexit -set -o nounset set -o pipefail if [[ "$JOB_NAME" =~ "merge" ]]; then @@ -23,15 +30,22 @@ source latest.properties OPNFV_ARTIFACT=${OPNFV_ARTIFACT_URL/*\/} echo "Using $OPNFV_ARTIFACT for deployment" -# check if we already have the ISO to avoid redownload -# disabled for the timebeing - needs adjustments -#ISO_STORE=$HOME/opnfv/iso_store/fuel -#if [[ -f "$ISO_STORE/$OPNFV_ARTIFACT" ]]; then -# echo "ISO already exists. Skipping the download" -# ln -s $ISO_STORE/$OPNFV_ARTIFACT $WORKSPACE/opnfv.iso -# ls -al $WORKSPACE/opnfv.iso -# exit 0 -#fi +# using ISOs for verify & merge jobs from local storage will be enabled later +if [[ ! "$JOB_NAME" =~ (verify|merge) ]]; then + # check if we already have the ISO to avoid redownload + ISOSTORE="/iso_mount/opnfv_ci/${GIT_BRANCH##*/}" + if [[ -f "$ISOSTORE/$OPNFV_ARTIFACT" ]]; then + echo "ISO exists locally. Skipping the download and using the file from ISO store" + ln -s $ISOSTORE/$OPNFV_ARTIFACT $WORKSPACE/opnfv.iso + echo "--------------------------------------------------------" + echo + ls -al $WORKSPACE/opnfv.iso + echo + echo "--------------------------------------------------------" + echo "Done!" + exit 0 + fi +fi # log info to console echo "Downloading the $INSTALLER_TYPE artifact using URL http://$OPNFV_ARTIFACT_URL" diff --git a/jjb/fuel/fuel-lab-reconfig.sh b/jjb/fuel/fuel-lab-reconfig.sh index 55bb5dd9d..59f660066 100755 --- a/jjb/fuel/fuel-lab-reconfig.sh +++ b/jjb/fuel/fuel-lab-reconfig.sh @@ -1,4 +1,12 @@ #!/bin/bash +# SPDX-license-identifier: Apache-2.0 +############################################################################## +# Copyright (c) 2016 Ericsson AB and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## set -o errexit set -o nounset set -o pipefail diff --git a/jjb/fuel/fuel-project-jobs.yml b/jjb/fuel/fuel-project-jobs.yml index 2e30fb1e6..e42aa9012 100644 --- a/jjb/fuel/fuel-project-jobs.yml +++ b/jjb/fuel/fuel-project-jobs.yml @@ -12,9 +12,11 @@ - master: branch: '{stream}' gs-pathname: '' + disabled: false - brahmaputra: branch: 'stable/{stream}' gs-pathname: '/{stream}' + disabled: false jobs: - 'fuel-build-daily-{stream}' @@ -40,7 +42,7 @@ parameters: - project-parameter: project: '{project}' - - 'ericsson-ca-build-1-defaults' + - 'ericsson-build-defaults' - '{installer}-defaults' - fuel-project-parameter: gs-pathname: '{gs-pathname}' @@ -75,19 +77,16 @@ - job-template: name: 'fuel-verify-build-{stream}' - concurrent: true + disabled: '{obj:disabled}' - properties: - - throttle: - enabled: true - max-total: 3 + concurrent: true parameters: - project-parameter: project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'ericsson-ca-build-1-defaults' + - 'ericsson-build-defaults' - '{installer}-defaults' - fuel-project-parameter: gs-pathname: '{gs-pathname}' @@ -144,22 +143,20 @@ - job-template: name: 'fuel-merge-build-{stream}' - concurrent: true + disabled: '{obj:disabled}' - properties: - - throttle: - enabled: true - max-total: 2 + concurrent: true parameters: - project-parameter: project: '{project}' - gerrit-parameter: branch: '{branch}' - - 'ericsson-ca-build-1-defaults' + - 'ericsson-build-defaults' - '{installer}-defaults' - fuel-project-parameter: gs-pathname: '{gs-pathname}' + scm: - gerrit-trigger-scm: credentials-id: '{ssh-credentials}' @@ -207,9 +204,9 @@ - job-template: name: 'fuel-merge-deploy-virtual-{stream}' - concurrent: true + disabled: true - disabled: false + concurrent: true properties: - throttle: @@ -282,28 +279,41 @@ - job-template: name: 'fuel-deploy-generic-daily-{stream}' - concurrent: false + concurrent: true - disabled: true + disabled: false properties: - throttle: enabled: true - max-total: 1 max-per-node: 1 - build-blocker: use-build-blocker: true blocking-jobs: - - 'fuel-os-.*?-ericsson-pod2-daily-{stream}' + - 'fuel-os-.*?-daily-.*' + - 'fuel-deploy-generic-daily-.*' + block-level: 'NODE' parameters: - project-parameter: project: '{project}' - - 'ericsson-pod2-defaults' - '{installer}-defaults' - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: 'Git URL to use on this Jenkins Slave' + - string: name: DEPLOY_SCENARIO default: 'os-odl_l2-nofeature-ha' + - node: + name: SLAVE_NAME + description: 'Slave name on Jenkins' + allowed-slaves: + - ericsson-pod2 + - opnfv-jump-2 + - ericsson-pod1 + default-slaves: + - ericsson-pod2 - fuel-project-parameter: gs-pathname: '{gs-pathname}' diff --git a/jjb/fuel/fuel-upload-artifact.sh b/jjb/fuel/fuel-upload-artifact.sh index 8b69f5a78..47cf8985c 100755 --- a/jjb/fuel/fuel-upload-artifact.sh +++ b/jjb/fuel/fuel-upload-artifact.sh @@ -1,6 +1,12 @@ #!/bin/bash -set -o errexit -set -o nounset +# SPDX-license-identifier: Apache-2.0 +############################################################################## +# Copyright (c) 2016 Ericsson AB and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## set -o pipefail # check if we built something @@ -10,14 +16,30 @@ if [ -f $WORKSPACE/.noupload ]; then exit 0 fi -# log info to console -echo -echo "Uploading the $INSTALLER_TYPE artifact. This could take some time..." -echo - # source the opnfv.properties to get ARTIFACT_VERSION source $WORKSPACE/opnfv.properties +# storing ISOs for verify & merge jobs will be done once we get the disk array +if [[ ! "$JOB_NAME" =~ (verify|merge) ]]; then + # store ISO locally on NFS first + ISOSTORE="/iso_mount/opnfv_ci/${GIT_BRANCH##*/}" + if [[ -d "$ISOSTORE" ]]; then + # remove all but most recent 5 ISOs first to keep iso_mount clean & tidy + cd $ISOSTORE + ls -tp | grep -v '/' | tail -n +6 | xargs -d '\n' /bin/rm -f -- + + # store ISO + echo "Storing $INSTALLER_TYPE artifact on NFS..." + /bin/cp -f $BUILD_DIRECTORY/opnfv-$OPNFV_ARTIFACT_VERSION.iso \ + $ISOSTORE/opnfv-$OPNFV_ARTIFACT_VERSION.iso + fi +fi + +# log info to console +echo "Uploading $INSTALLER_TYPE artifact. This could take some time..." +echo + +cd $WORKSPACE # upload artifact and additional files to google storage gsutil cp $BUILD_DIRECTORY/opnfv-$OPNFV_ARTIFACT_VERSION.iso \ gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso > gsutil.iso.log 2>&1 @@ -33,11 +55,22 @@ fi gsutil -m setmeta \ -h "Content-Type:text/html" \ -h "Cache-Control:private, max-age=0, no-transform" \ - gs://$GS_URL/*.properties > /dev/null 2>&1 + gs://$GS_URL/latest.properties \ + gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.properties > /dev/null 2>&1 gsutil -m setmeta \ -h "Cache-Control:private, max-age=0, no-transform" \ - gs://$GS_URL/*.iso > /dev/null 2>&1 + gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso > /dev/null 2>&1 + +# disabled errexit due to gsutil setmeta complaints +# BadRequestException: 400 Invalid argument +# check if we uploaded the file successfully to see if things are fine +gsutil ls gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso > /dev/null 2>&1 +if [[ $? -ne 0 ]]; then + echo "Problem while uploading artifact!" + echo "Check log $WORKSPACE/gsutil.iso.log on the machine where this build is done." + exit 1 +fi echo "Done!" echo diff --git a/jjb/fuel/fuel-workspace-cleanup.sh b/jjb/fuel/fuel-workspace-cleanup.sh index 4e1a3a727..d8948c7a0 100755 --- a/jjb/fuel/fuel-workspace-cleanup.sh +++ b/jjb/fuel/fuel-workspace-cleanup.sh @@ -1,4 +1,12 @@ #!/bin/bash +# SPDX-license-identifier: Apache-2.0 +############################################################################## +# Copyright (c) 2016 Ericsson AB and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## set -o errexit set -o nounset set -o pipefail |