- name: 'functest-netvirt-virtual-suite-master'
predefined-parameters: |
DEPLOY_SCENARIO=os-odl_l3-nofeature-ha
+ FUNCTEST_MODE=testcase
FUNCTEST_SUITE_NAME=odl_netvirt
RC_FILE_PATH=$HOME/cloner-info/overcloudrc
node-parameters: true
echo "-------------------------"
ls -al $CACHE_DIRECTORY
+if [[ "$BUILD_ARGS" =~ '--iso' ]]; then
+ mkdir -p /tmp/apex-iso/
+ rm -f /tmp/apex-iso/*.iso
+ cp -f $BUILD_DIRECTORY/../.build/release/OPNFV-CentOS-7-x86_64-$OPNFV_ARTIFACT_VERSION.iso /tmp/apex-iso/
+fi
+
if ! echo $ARTIFACT_VERSION | grep "dev" 1> /dev/null; then
echo "Writing opnfv.properties file"
# save information regarding artifact into file
VERSION_EXTENSION=$(echo $(basename $RPM_LIST) | grep -Eo '[0-9]+\.[0-9]+-([0-9]{8}|[a-z]+-[0-9]\.[0-9]+)')
# build RPM List which already includes base Apex RPM
RPM_LIST+=" opnfv-apex-undercloud-${VERSION_EXTENSION}.noarch.rpm"
- RPM_LIST+=" python34-opnfv-apex-${VERSION_EXTENSION}.noarch.rpm"
+
+ # add back legacy support for danube
+ if [ "$BRANCH" == 'stable/danube' ]; then
+ RPM_LIST+=" opnfv-apex-common-${VERSION_EXTENSION}.noarch.rpm"
+ else
+ RPM_LIST+=" python34-opnfv-apex-${VERSION_EXTENSION}.noarch.rpm"
+ fi
# remove old / install new RPMs
if rpm -q opnfv-apex > /dev/null; then
echo "--------------------------------------------------------"
echo
-source $BUILD_DIRECTORY/../opnfv.properties
+# Must be RPMs/ISO
+echo "Downloading latest properties file"
+
+# get the properties file in order to get info regarding artifacts
+curl --fail -s -o opnfv.properties http://$GS_URL/latest.properties
+
+# source the file so we get OPNFV vars
+source opnfv.properties
if ! rpm -q virt-install > /dev/null; then
sudo yum -y install virt-install
sudo virt-install -n apex-iso-verify -r 4096 --vcpus 4 --os-variant=rhel7 \
--accelerate -v --noautoconsole \
--disk path=/var/lib/libvirt/images/apex-iso-verify.qcow2,size=30,format=qcow2 \
- -l $BUILD_DIRECTORY/release/OPNFV-CentOS-7-x86_64-$OPNFV_ARTIFACT_VERSION.iso \
+ -l /tmp/apex-iso/OPNFV-CentOS-7-x86_64-$OPNFV_ARTIFACT_VERSION.iso \
--extra-args 'console=ttyS0 console=ttyS0,115200n8 serial inst.ks=file:/iso-verify.ks inst.stage2=hd:LABEL=OPNFV\x20CentOS\x207\x20x86_64:/' \
- --initrd-inject $BUILD_DIRECTORY/../ci/iso-verify.ks \
+ --initrd-inject ci/iso-verify.ks \
--serial file,path=/var/log/libvirt/qemu/apex-iso-verify-console.log
echo "Waiting for install to finish..."
gs-pathname: ''
concurrent-builds: 3
disabled: false
-
+ - euphrates: &euphrates
+ branch: 'stable/euphrates'
+ gs-pathname: '/euphrates'
+ concurrent-builds: 3
+ disabled: true
- danube: &danube
branch: 'stable/danube'
gs-pathname: '/danube'
# Required Variables:
# stream: branch with - in place of / (eg. stable)
# branch: branch (eg. stable)
- node: 'apex-build-{stream}'
+ node: 'apex-build-master'
disabled: false
# Required Variables:
# stream: branch with - in place of / (eg. stable)
# branch: branch (eg. stable)
- node: 'apex-virtual-{stream}'
+ node: 'apex-virtual-master'
disabled: false
- 'apex-verify-gate-{stream}'
- 'apex-verify-unit-tests-{stream}'
- 'apex-runner-cperf-{stream}'
+ - 'apex-virtual-{stream}'
- 'apex-deploy-{platform}-{stream}'
- 'apex-daily-{stream}'
- 'apex-csit-promote-daily-{stream}'
baremetal-slave: 'apex-baremetal-master'
verify-scenario: 'os-odl-nofeature-ha'
scenario_stream: 'master'
+ disable_daily: true
- euphrates: &euphrates
branch: 'stable/euphrates'
- gs-pathname: ''
+ gs-pathname: '/euphrates'
build-slave: 'apex-build-master'
virtual-slave: 'apex-virtual-master'
baremetal-slave: 'apex-baremetal-master'
verify-scenario: 'os-odl-nofeature-ha'
scenario_stream: 'euphrates'
+ disable_daily: false
- danube: &danube
branch: 'stable/danube'
gs-pathname: '/danube'
verify-scenario: 'os-odl_l3-nofeature-ha'
scenario_stream: 'danube'
disabled: true
+ disable_daily: true
scenario:
- 'os-nosdn-nofeature-noha':
<<: *master
- 'os-odl-sfc-ha':
<<: *master
- - 'os-odl-fdio-dvr-noha':
+ - 'os-odl-fdio_dvr-noha':
<<: *master
- - 'os-odl-fdio-dvr-ha':
+ - 'os-odl-fdio_dvr-ha':
<<: *master
- 'os-nosdn-nofeature-noha':
<<: *euphrates
<<: *euphrates
- 'os-odl-sfc-ha':
<<: *euphrates
- - 'os-odl-fdio-dvr-noha':
+ - 'os-odl-fdio_dvr-noha':
+ <<: *euphrates
+ - 'os-odl-fdio_dvr-ha':
<<: *euphrates
- - 'os-odl-fdio-dvr-ha':
+ - 'os-nosdn-calipso-noha':
<<: *euphrates
platform:
properties:
- logrotate-default
- - build-blocker:
- use-build-blocker: true
- block-level: 'NODE'
- blocking-jobs:
- - 'apex-verify.*'
- throttle:
- max-per-node: 1
+ max-per-node: 3
max-total: 10
option: 'project'
name: deploy-virtual
condition: SUCCESSFUL
projects:
- - name: 'apex-deploy-virtual-{stream}'
+ - name: 'apex-virtual-{stream}'
current-parameters: false
predefined-parameters: |
ARTIFACT_VERSION=$ARTIFACT_VERSION
kill-phase-on: FAILURE
abort-all-job: true
git-revision: true
- - multijob:
- name: functest-smoke
- condition: SUCCESSFUL
- projects:
- - name: 'functest-apex-virtual-suite-{stream}'
- current-parameters: false
- predefined-parameters: |
- DEPLOY_SCENARIO={verify-scenario}
- FUNCTEST_SUITE_NAME=healthcheck
- GERRIT_BRANCH=$GERRIT_BRANCH
- GERRIT_REFSPEC=$GERRIT_REFSPEC
- GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
- GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
- node-parameters: true
- kill-phase-on: NEVER
- abort-all-job: true
- git-revision: false
# Verify Scenario Gate
- job-template:
block-level: 'NODE'
blocking-jobs:
- 'apex-verify.*'
+ - 'apex-virtual.*'
- throttle:
max-per-node: 1
max-total: 10
current-parameters: false
predefined-parameters: |
DEPLOY_SCENARIO=$DEPLOY_SCENARIO
- FUNCTEST_SUITE_NAME=healthcheck
+ FUNCTEST_MODE=tier
+ FUNCTEST_TIER=healthcheck
GERRIT_BRANCH=$GERRIT_BRANCH
GERRIT_REFSPEC=$GERRIT_REFSPEC
GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
- 'clean-workspace'
+# Virtual Deploy and Test
+- job-template:
+ name: 'apex-virtual-{stream}'
+
+ project-type: 'multijob'
+
+ disabled: false
+
+ scm:
+ - git-scm-gerrit
+
+ parameters:
+ - '{project}-defaults'
+ - '{project}-virtual-{stream}-defaults'
+ - project-parameter:
+ project: '{project}'
+ branch: '{branch}'
+ - apex-parameter:
+ gs-pathname: '{gs-pathname}'
+ - string:
+ name: DEPLOY_SCENARIO
+ default: '{verify-scenario}'
+ description: "Scenario to deploy with."
+ - string:
+ name: ARTIFACT_VERSION
+ default: dev
+ description: "Used for overriding the ARTIFACT_VERSION"
+ properties:
+ - logrotate-default
+ - build-blocker:
+ use-build-blocker: true
+ block-level: 'NODE'
+ blocking-jobs:
+ - 'apex-runner.*'
+ - 'apex-.*-promote.*'
+ - 'apex-run.*'
+ - 'apex-virtual-.*'
+ - 'apex-verify-gate-.*'
+ - throttle:
+ max-per-node: 1
+ max-total: 10
+ option: 'project'
+ builders:
+ - description-setter:
+ description: "Deployed on $NODE_NAME - Scenario: $DEPLOY_SCENARIO"
+ - multijob:
+ name: deploy-virtual
+ condition: SUCCESSFUL
+ projects:
+ - name: 'apex-deploy-virtual-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ ARTIFACT_VERSION=$ARTIFACT_VERSION
+ DEPLOY_SCENARIO=$DEPLOY_SCENARIO
+ OPNFV_CLEAN=yes
+ GERRIT_BRANCH=$GERRIT_BRANCH
+ GERRIT_REFSPEC=$GERRIT_REFSPEC
+ GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
+ GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ node-parameters: true
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ git-revision: true
+ - multijob:
+ name: functest-smoke
+ condition: SUCCESSFUL
+ projects:
+ - name: 'functest-apex-virtual-suite-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ DEPLOY_SCENARIO=$DEPLOY_SCENARIO
+ FUNCTEST_SUITE_NAME=healthcheck
+ GERRIT_BRANCH=$GERRIT_BRANCH
+ GERRIT_REFSPEC=$GERRIT_REFSPEC
+ GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
+ GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ node-parameters: true
+ kill-phase-on: NEVER
+ abort-all-job: true
+ git-revision: false
+
# Baremetal Deploy and Test
- job-template:
name: 'apex-{scenario}-baremetal-{scenario_stream}'
node: '{baremetal-slave}'
- disabled: false
+ disabled: '{obj:disable_daily}'
scm:
- git-scm
properties:
- logrotate-default
+ - build-blocker:
+ use-build-blocker: true
+ block-level: 'NODE'
+ blocking-jobs:
+ - 'apex-daily.*'
triggers:
- 'apex-{stream}'
- 'apex-run.*'
triggers:
- - timed: '0 12 * * *'
+ - timed: '0 1 * * *'
builders:
- description-setter:
abort-all-job: true
git-revision: false
- - name: 'apex-os-odl-fdio-dvr-noha-baremetal-master'
+ - name: 'apex-os-odl-fdio_dvr-noha-baremetal-master'
node-parameters: false
current-parameters: false
predefined-parameters: |
abort-all-job: true
git-revision: false
- - name: 'apex-os-odl-fdio-dvr-ha-baremetal-master'
+ - name: 'apex-os-odl-fdio_dvr-ha-baremetal-master'
node-parameters: false
current-parameters: false
predefined-parameters: |
abort-all-job: true
git-revision: false
- - name: 'apex-os-odl-fdio-dvr-noha-baremetal-euphrates'
+ - name: 'apex-os-odl-fdio_dvr-noha-baremetal-euphrates'
+ node-parameters: false
+ current-parameters: false
+ predefined-parameters: |
+ OPNFV_CLEAN=yes
+ kill-phase-on: NEVER
+ abort-all-job: true
+ git-revision: false
+
+ - name: 'apex-os-odl-fdio_dvr-ha-baremetal-euphrates'
node-parameters: false
current-parameters: false
predefined-parameters: |
abort-all-job: true
git-revision: false
- - name: 'apex-os-odl-fdio-dvr-ha-baremetal-euphrates'
+ - name: 'apex-os-nosdn-calipso-noha-baremetal-euphrates'
node-parameters: false
current-parameters: false
predefined-parameters: |
- 'apex-verify-gate-{stream}'
- 'apex-verify-unit-tests-{stream}'
- 'apex-runner-cperf-{stream}'
+ - 'apex-virtual-{stream}'
- 'apex-deploy-{platform}-{stream}'
- 'apex-daily-{stream}'
- 'apex-csit-promote-daily-{stream}'
baremetal-slave: 'apex-baremetal-master'
verify-scenario: 'os-odl-nofeature-ha'
scenario_stream: 'master'
+ disable_daily: true
- euphrates: &euphrates
branch: 'stable/euphrates'
- gs-pathname: ''
+ gs-pathname: '/euphrates'
build-slave: 'apex-build-master'
virtual-slave: 'apex-virtual-master'
baremetal-slave: 'apex-baremetal-master'
verify-scenario: 'os-odl-nofeature-ha'
scenario_stream: 'euphrates'
+ disable_daily: false
- danube: &danube
branch: 'stable/danube'
gs-pathname: '/danube'
verify-scenario: 'os-odl_l3-nofeature-ha'
scenario_stream: 'danube'
disabled: true
+ disable_daily: true
scenario:
{%- for stream in scenarios %}
properties:
- logrotate-default
- - build-blocker:
- use-build-blocker: true
- block-level: 'NODE'
- blocking-jobs:
- - 'apex-verify.*'
- throttle:
- max-per-node: 1
+ max-per-node: 3
max-total: 10
option: 'project'
name: deploy-virtual
condition: SUCCESSFUL
projects:
- - name: 'apex-deploy-virtual-{stream}'
+ - name: 'apex-virtual-{stream}'
current-parameters: false
predefined-parameters: |
ARTIFACT_VERSION=$ARTIFACT_VERSION
kill-phase-on: FAILURE
abort-all-job: true
git-revision: true
- - multijob:
- name: functest-smoke
- condition: SUCCESSFUL
- projects:
- - name: 'functest-apex-virtual-suite-{stream}'
- current-parameters: false
- predefined-parameters: |
- DEPLOY_SCENARIO={verify-scenario}
- FUNCTEST_SUITE_NAME=healthcheck
- GERRIT_BRANCH=$GERRIT_BRANCH
- GERRIT_REFSPEC=$GERRIT_REFSPEC
- GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
- GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
- node-parameters: true
- kill-phase-on: NEVER
- abort-all-job: true
- git-revision: false
# Verify Scenario Gate
- job-template:
block-level: 'NODE'
blocking-jobs:
- 'apex-verify.*'
+ - 'apex-virtual.*'
- throttle:
max-per-node: 1
max-total: 10
current-parameters: false
predefined-parameters: |
DEPLOY_SCENARIO=$DEPLOY_SCENARIO
- FUNCTEST_SUITE_NAME=healthcheck
+ FUNCTEST_MODE=tier
+ FUNCTEST_TIER=healthcheck
GERRIT_BRANCH=$GERRIT_BRANCH
GERRIT_REFSPEC=$GERRIT_REFSPEC
GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
- 'clean-workspace'
+# Virtual Deploy and Test
+- job-template:
+ name: 'apex-virtual-{stream}'
+
+ project-type: 'multijob'
+
+ disabled: false
+
+ scm:
+ - git-scm-gerrit
+
+ parameters:
+ - '{project}-defaults'
+ - '{project}-virtual-{stream}-defaults'
+ - project-parameter:
+ project: '{project}'
+ branch: '{branch}'
+ - apex-parameter:
+ gs-pathname: '{gs-pathname}'
+ - string:
+ name: DEPLOY_SCENARIO
+ default: '{verify-scenario}'
+ description: "Scenario to deploy with."
+ - string:
+ name: ARTIFACT_VERSION
+ default: dev
+ description: "Used for overriding the ARTIFACT_VERSION"
+ properties:
+ - logrotate-default
+ - build-blocker:
+ use-build-blocker: true
+ block-level: 'NODE'
+ blocking-jobs:
+ - 'apex-runner.*'
+ - 'apex-.*-promote.*'
+ - 'apex-run.*'
+ - 'apex-virtual-.*'
+ - 'apex-verify-gate-.*'
+ - throttle:
+ max-per-node: 1
+ max-total: 10
+ option: 'project'
+ builders:
+ - description-setter:
+ description: "Deployed on $NODE_NAME - Scenario: $DEPLOY_SCENARIO"
+ - multijob:
+ name: deploy-virtual
+ condition: SUCCESSFUL
+ projects:
+ - name: 'apex-deploy-virtual-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ ARTIFACT_VERSION=$ARTIFACT_VERSION
+ DEPLOY_SCENARIO=$DEPLOY_SCENARIO
+ OPNFV_CLEAN=yes
+ GERRIT_BRANCH=$GERRIT_BRANCH
+ GERRIT_REFSPEC=$GERRIT_REFSPEC
+ GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
+ GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ node-parameters: true
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ git-revision: true
+ - multijob:
+ name: functest-smoke
+ condition: SUCCESSFUL
+ projects:
+ - name: 'functest-apex-virtual-suite-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ DEPLOY_SCENARIO=$DEPLOY_SCENARIO
+ FUNCTEST_SUITE_NAME=healthcheck
+ GERRIT_BRANCH=$GERRIT_BRANCH
+ GERRIT_REFSPEC=$GERRIT_REFSPEC
+ GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
+ GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ node-parameters: true
+ kill-phase-on: NEVER
+ abort-all-job: true
+ git-revision: false
+
# Baremetal Deploy and Test
- job-template:
name: 'apex-{scenario}-baremetal-{scenario_stream}'
node: '{baremetal-slave}'
- disabled: false
+ disabled: '{obj:disable_daily}'
scm:
- git-scm
properties:
- logrotate-default
+ - build-blocker:
+ use-build-blocker: true
+ block-level: 'NODE'
+ blocking-jobs:
+ - 'apex-daily.*'
triggers:
- 'apex-{stream}'
- 'apex-run.*'
triggers:
- - timed: '0 12 * * *'
+ - timed: '0 1 * * *'
builders:
- description-setter:
- 'os-nosdn-kvm_ovs_dpdk-ha'
- 'os-odl-sfc-noha'
- 'os-odl-sfc-ha'
- - 'os-odl-fdio-dvr-noha'
- - 'os-odl-fdio-dvr-ha'
+ - 'os-odl-fdio_dvr-noha'
+ - 'os-odl-fdio_dvr-ha'
euphrates:
- 'os-nosdn-nofeature-noha'
- 'os-nosdn-nofeature-ha'
- 'os-nosdn-kvm_ovs_dpdk-ha'
- 'os-odl-sfc-noha'
- 'os-odl-sfc-ha'
- - 'os-odl-fdio-dvr-noha'
- - 'os-odl-fdio-dvr-ha'
+ - 'os-odl-fdio_dvr-noha'
+ - 'os-odl-fdio_dvr-ha'
+ - 'os-nosdn-calipso-noha'
danube:
- 'os-nosdn-nofeature-noha'
- 'os-nosdn-nofeature-ha'
+---
# jenkins job templates for Armband
- project:
name: 'armband-ci'
project: 'armband'
-#--------------------------------
-# BRANCH ANCHORS
-#--------------------------------
+ # -------------------------------
+ # BRANCH ANCHORS
+ # -------------------------------
master: &master
- stream: master
- branch: '{stream}'
- gs-pathname: ''
- disabled: false
+ stream: master
+ branch: '{stream}'
+ gs-pathname: ''
+ disabled: false
euphrates: &euphrates
- stream: euphrates
- branch: 'stable/{stream}'
- gs-pathname: '/{stream}'
- disabled: true
-#--------------------------------
-# POD, INSTALLER, AND BRANCH MAPPING
-#--------------------------------
-# CI POD's
-#--------------------------------
-# euphrates
-#--------------------------------
+ stream: euphrates
+ branch: 'stable/{stream}'
+ gs-pathname: '/{stream}'
+ disabled: false
+ # -------------------------------
+ # POD, INSTALLER, AND BRANCH MAPPING
+ # -------------------------------
+ # CI POD's
+ # -------------------------------
+ # euphrates
+ # -------------------------------
pod:
- - armband-baremetal:
- slave-label: armband-baremetal
- installer: fuel
- <<: *euphrates
- - armband-virtual:
- slave-label: armband-virtual
- installer: fuel
- <<: *euphrates
-#--------------------------------
-# master
-#--------------------------------
- - armband-baremetal:
- slave-label: armband-baremetal
- installer: fuel
- <<: *master
- - armband-virtual:
- slave-label: armband-virtual
- installer: fuel
- <<: *master
-#--------------------------------
-# scenarios
-#--------------------------------
+ - armband-baremetal:
+ slave-label: armband-baremetal
+ installer: fuel
+ <<: *euphrates
+ - armband-virtual:
+ slave-label: armband-virtual
+ installer: fuel
+ <<: *euphrates
+ # -------------------------------
+ # master
+ # -------------------------------
+ - armband-baremetal:
+ slave-label: armband-baremetal
+ installer: fuel
+ <<: *master
+ - armband-virtual:
+ slave-label: armband-virtual
+ installer: fuel
+ <<: *master
+ # -------------------------------
+ # scenarios
+ # -------------------------------
scenario:
- # HA scenarios
- - 'os-nosdn-nofeature-ha':
- auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger'
- - 'os-odl-nofeature-ha':
- auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger'
+ # HA scenarios
+ - 'os-nosdn-nofeature-ha':
+ auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger'
+ - 'os-odl-nofeature-ha':
+ auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger'
- # NOHA scenarios
- - 'os-nosdn-nofeature-noha':
- auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger'
+ # NOHA scenarios
+ - 'os-nosdn-nofeature-noha':
+ auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger'
jobs:
- - '{installer}-{scenario}-{pod}-daily-{stream}'
- - '{installer}-deploy-{pod}-daily-{stream}'
+ - '{installer}-{scenario}-{pod}-daily-{stream}'
+ - '{installer}-deploy-{pod}-daily-{stream}'
########################
# job templates
concurrent: false
properties:
- - logrotate-default
- - throttle:
- enabled: true
- max-total: 4
- max-per-node: 1
- option: 'project'
- - build-blocker:
- use-build-blocker: true
- blocking-jobs:
- - '{installer}-os-.*?-{pod}-daily-.*'
- - 'armband-verify-.*'
- block-level: 'NODE'
+ - logrotate-default
+ - throttle:
+ enabled: true
+ max-total: 4
+ max-per-node: 1
+ option: 'project'
+ - build-blocker:
+ use-build-blocker: true
+ blocking-jobs:
+ - '{installer}-os-.*?-{pod}-daily-.*'
+ - 'armband-verify-.*'
+ block-level: 'NODE'
wrappers:
- - build-name:
- name: '$BUILD_NUMBER - Scenario: $DEPLOY_SCENARIO'
+ - build-name:
+ name: '$BUILD_NUMBER - Scenario: $DEPLOY_SCENARIO'
triggers:
- - '{auto-trigger-name}'
+ - '{auto-trigger-name}'
parameters:
- - project-parameter:
- project: '{project}'
- branch: '{branch}'
- - '{installer}-defaults':
- gs-pathname: '{gs-pathname}'
- - '{slave-label}-defaults':
- installer: '{installer}'
- - string:
- name: DEPLOY_SCENARIO
- default: '{scenario}'
+ - project-parameter:
+ project: '{project}'
+ branch: '{branch}'
+ - '{installer}-defaults':
+ gs-pathname: '{gs-pathname}'
+ - '{slave-label}-defaults':
+ installer: '{installer}'
+ - string:
+ name: DEPLOY_SCENARIO
+ default: '{scenario}'
builders:
- - trigger-builds:
- - project: '{installer}-deploy-{pod}-daily-{stream}'
- current-parameters: false
- predefined-parameters:
- DEPLOY_SCENARIO={scenario}
- same-node: true
- block: true
- - trigger-builds:
- - project: 'functest-{installer}-{pod}-arm-daily-{stream}'
- current-parameters: false
- predefined-parameters:
- DEPLOY_SCENARIO={scenario}
- block: true
- same-node: true
- block-thresholds:
- build-step-failure-threshold: 'never'
- failure-threshold: 'never'
- unstable-threshold: 'FAILURE'
- - trigger-builds:
- - project: 'yardstick-{installer}-{pod}-daily-{stream}'
- current-parameters: false
- predefined-parameters:
- DEPLOY_SCENARIO={scenario}
- block: true
- same-node: true
- block-thresholds:
- build-step-failure-threshold: 'never'
- failure-threshold: 'never'
- unstable-threshold: 'FAILURE'
- # 1.dovetail only master, based on D release
- # 2.here the stream means the SUT stream, dovetail stream is defined in its own job
- # 3.only proposed_tests testsuite here(refstack, ha, ipv6, bgpvpn)
- # 4.not used for release criteria or compliance,
- # only to debug the dovetail tool bugs with arm pods
- # 5.only run against scenario os-(nosdn|odl)-(nofeature-bgpvpn)-ha
- - conditional-step:
- condition-kind: regex-match
- regex: os-(nosdn|odl)-(nofeature|bgpvpn)-ha
- label: '{scenario}'
- steps:
- - trigger-builds:
- - project: 'dovetail-{installer}-{pod}-proposed_tests-{stream}'
- current-parameters: false
- predefined-parameters:
- DEPLOY_SCENARIO={scenario}
- block: true
- same-node: true
- block-thresholds:
- build-step-failure-threshold: 'never'
- failure-threshold: 'never'
- unstable-threshold: 'FAILURE'
+ - trigger-builds:
+ - project: '{installer}-deploy-{pod}-daily-{stream}'
+ current-parameters: false
+ predefined-parameters:
+ DEPLOY_SCENARIO={scenario}
+ same-node: true
+ block: true
+ - trigger-builds:
+ - project: 'functest-{installer}-{pod}-arm-daily-{stream}'
+ current-parameters: false
+ predefined-parameters:
+ DEPLOY_SCENARIO={scenario}
+ block: true
+ same-node: true
+ block-thresholds:
+ build-step-failure-threshold: 'never'
+ failure-threshold: 'never'
+ unstable-threshold: 'FAILURE'
+ - trigger-builds:
+ - project: 'yardstick-{installer}-{pod}-daily-{stream}'
+ current-parameters: false
+ predefined-parameters:
+ DEPLOY_SCENARIO={scenario}
+ block: true
+ same-node: true
+ block-thresholds:
+ build-step-failure-threshold: 'never'
+ failure-threshold: 'never'
+ unstable-threshold: 'FAILURE'
+ # 1.dovetail only master, based on D release
+ # 2.here the stream means the SUT stream,
+ # dovetail stream is defined in its own job
+ # 3.only proposed_tests testsuite here(refstack, ha, ipv6, bgpvpn)
+ # 4.not used for release criteria or compliance,
+ # only to debug the dovetail tool bugs with arm pods
+ # 5.only run against scenario os-(nosdn|odl)-(nofeature-bgpvpn)-ha
+ - conditional-step:
+ condition-kind: regex-match
+ regex: os-(nosdn|odl)-(nofeature|bgpvpn)-ha
+ label: '{scenario}'
+ steps:
+ - trigger-builds:
+ - project: 'dovetail-{installer}-{pod}-proposed_tests-master'
+ current-parameters: false
+ predefined-parameters:
+ DEPLOY_SCENARIO={scenario}
+ block: true
+ same-node: true
+ block-thresholds:
+ build-step-failure-threshold: 'never'
+ failure-threshold: 'never'
+ unstable-threshold: 'FAILURE'
- job-template:
name: '{installer}-deploy-{pod}-daily-{stream}'
concurrent: true
properties:
- - logrotate-default
- - throttle:
- enabled: true
- max-total: 4
- max-per-node: 1
- option: 'project'
- - build-blocker:
- use-build-blocker: true
- blocking-jobs:
- - '{installer}-deploy-{pod}-daily-{stream}'
- - '{installer}-deploy-generic-daily-.*'
- block-level: 'NODE'
+ - logrotate-default
+ - throttle:
+ enabled: true
+ max-total: 4
+ max-per-node: 1
+ option: 'project'
+ - build-blocker:
+ use-build-blocker: true
+ blocking-jobs:
+ - '{installer}-deploy-{pod}-daily-{stream}'
+ - '{installer}-deploy-generic-daily-.*'
+ block-level: 'NODE'
parameters:
- - project-parameter:
- project: '{project}'
- branch: '{branch}'
- - '{installer}-defaults':
- gs-pathname: '{gs-pathname}'
- - '{slave-label}-defaults':
- installer: '{installer}'
- - string:
- name: DEPLOY_SCENARIO
- default: 'os-odl-nofeature-ha'
+ - project-parameter:
+ project: '{project}'
+ branch: '{branch}'
+ - '{installer}-defaults':
+ gs-pathname: '{gs-pathname}'
+ - '{slave-label}-defaults':
+ installer: '{installer}'
+ - string:
+ name: DEPLOY_SCENARIO
+ default: 'os-odl-nofeature-ha'
scm:
- - git-scm
+ - git-scm
wrappers:
- - build-name:
- name: '$BUILD_NUMBER - Scenario: $DEPLOY_SCENARIO'
+ - build-name:
+ name: '$BUILD_NUMBER - Scenario: $DEPLOY_SCENARIO'
builders:
- - shell:
- !include-raw-escape: ../fuel/fuel-deploy.sh
+ - shell:
+ !include-raw-escape: ../fuel/fuel-deploy.sh
publishers:
- - email:
- recipients: armband@enea.com
- - email-jenkins-admins-on-failure
+ - email:
+ recipients: armband@enea.com
+ - email-jenkins-admins-on-failure
########################
# trigger macros
########################
# CI PODs
-#-----------------------------------------------------------------
+# ----------------------------------------------------------------
# Enea Armband CI Baremetal Triggers running against master branch
-#-----------------------------------------------------------------
+# ----------------------------------------------------------------
- trigger:
name: 'fuel-os-nosdn-nofeature-ha-armband-baremetal-master-trigger'
triggers:
- - timed: '0 1 * * *'
+ - timed: '0 16 * * 2,4,6'
- trigger:
name: 'fuel-os-nosdn-nofeature-noha-armband-baremetal-master-trigger'
triggers:
- - timed: ''
+ - timed: ''
- trigger:
name: 'fuel-os-odl-nofeature-ha-armband-baremetal-master-trigger'
triggers:
- - timed: '0 16 * * *'
-#----------------------------------------------------------------------
+ - timed: '0 16 * * 1,3,5,7'
+# ---------------------------------------------------------------------
# Enea Armband CI Baremetal Triggers running against euphrates branch
-#----------------------------------------------------------------------
+# ---------------------------------------------------------------------
- trigger:
name: 'fuel-os-nosdn-nofeature-ha-armband-baremetal-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 1 * * 2,4,6'
- trigger:
name: 'fuel-os-nosdn-nofeature-noha-armband-baremetal-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: ''
- trigger:
name: 'fuel-os-odl-nofeature-ha-armband-baremetal-euphrates-trigger'
triggers:
- - timed: ''
-#---------------------------------------------------------------
+ - timed: '0 1 * * 1,3,5,7'
+# --------------------------------------------------------------
# Enea Armband CI Virtual Triggers running against master branch
-#---------------------------------------------------------------
+# --------------------------------------------------------------
- trigger:
name: 'fuel-os-nosdn-nofeature-ha-armband-virtual-master-trigger'
triggers:
- - timed: ''
+ - timed: ''
- trigger:
name: 'fuel-os-nosdn-nofeature-noha-armband-virtual-master-trigger'
triggers:
- - timed: ''
+ - timed: ''
- trigger:
name: 'fuel-os-odl-nofeature-ha-armband-virtual-master-trigger'
triggers:
- - timed: ''
-#--------------------------------------------------------------------
+ - timed: ''
+# -------------------------------------------------------------------
# Enea Armband CI Virtual Triggers running against euphrates branch
-#--------------------------------------------------------------------
+# -------------------------------------------------------------------
- trigger:
name: 'fuel-os-nosdn-nofeature-ha-armband-virtual-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: ''
- trigger:
name: 'fuel-os-nosdn-nofeature-noha-armband-virtual-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: ''
- trigger:
name: 'fuel-os-odl-nofeature-ha-armband-virtual-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: ''
+---
- project:
name: 'armband-verify-jobs'
project: 'armband'
installer: 'fuel'
-#####################################
-# branch definitions
-#####################################
+ #####################################
+ # branch definitions
+ #####################################
stream:
- - master:
- branch: '{stream}'
- gs-pathname: ''
- disabled: false
- - euphrates:
- branch: 'stable/{stream}'
- gs-pathname: '/{stream}'
- disabled: true
-#####################################
-# patch verification phases
-#####################################
+ - master:
+ branch: '{stream}'
+ gs-pathname: ''
+ disabled: false
+ - euphrates:
+ branch: 'stable/{stream}'
+ gs-pathname: '/{stream}'
+ disabled: false
+ #####################################
+ # patch verification phases
+ #####################################
phase:
- - 'basic':
- slave-label: 'armband-virtual'
- - 'deploy-virtual':
- slave-label: 'armband-virtual'
- - 'smoke-test':
- slave-label: 'armband-virtual'
-#####################################
-# jobs
-#####################################
+ - 'basic':
+ slave-label: 'armband-virtual'
+ - 'deploy-virtual':
+ slave-label: 'armband-virtual'
+ - 'smoke-test':
+ slave-label: 'armband-virtual'
+ #####################################
+ # jobs
+ #####################################
jobs:
- - 'armband-verify-{stream}'
- - 'armband-verify-{phase}-{stream}'
+ - 'armband-verify-{stream}'
+ - 'armband-verify-{phase}-{stream}'
#####################################
# job templates
#####################################
concurrent: true
properties:
- - logrotate-default
- - throttle:
- enabled: true
- max-total: 4
- option: 'project'
- - build-blocker:
- use-build-blocker: true
- blocking-jobs:
- - 'fuel-os-.*?-virtual-daily-.*'
- block-level: 'NODE'
+ - logrotate-default
+ - throttle:
+ enabled: true
+ max-total: 4
+ option: 'project'
+ - build-blocker:
+ use-build-blocker: true
+ blocking-jobs:
+ - 'fuel-os-.*?-virtual-daily-.*'
+ block-level: 'NODE'
scm:
- - git-scm-gerrit
+ - git-scm-gerrit
wrappers:
- - ssh-agent-wrapper
- - timeout:
- timeout: 360
- fail: true
+ - ssh-agent-wrapper
+ - timeout:
+ timeout: 360
+ fail: true
triggers:
- - gerrit:
- server-name: 'gerrit.opnfv.org'
- trigger-on:
- - patchset-created-event:
- exclude-drafts: 'false'
- exclude-trivial-rebase: 'false'
- exclude-no-code-change: 'false'
- - draft-published-event
- - comment-added-contains-event:
- comment-contains-value: 'recheck'
- - comment-added-contains-event:
- comment-contains-value: 'reverify'
- projects:
- - project-compare-type: 'ANT'
- project-pattern: '{project}'
- branches:
- - branch-compare-type: 'ANT'
- branch-pattern: '**/{branch}'
- file-paths:
- - compare-type: ANT
- pattern: 'ci/**'
- - compare-type: ANT
- pattern: 'patches/**'
- disable-strict-forbidden-file-verification: 'true'
- forbidden-file-paths:
- - compare-type: ANT
- pattern: 'docs/**'
- readable-message: true
+ - gerrit:
+ server-name: 'gerrit.opnfv.org'
+ trigger-on:
+ - patchset-created-event:
+ exclude-drafts: 'false'
+ exclude-trivial-rebase: 'false'
+ exclude-no-code-change: 'false'
+ - draft-published-event
+ - comment-added-contains-event:
+ comment-contains-value: 'recheck'
+ - comment-added-contains-event:
+ comment-contains-value: 'reverify'
+ projects:
+ - project-compare-type: 'ANT'
+ project-pattern: '{project}'
+ branches:
+ - branch-compare-type: 'ANT'
+ branch-pattern: '**/{branch}'
+ file-paths:
+ - compare-type: ANT
+ pattern: 'ci/**'
+ - compare-type: ANT
+ pattern: 'patches/**'
+ disable-strict-forbidden-file-verification: 'true'
+ forbidden-file-paths:
+ - compare-type: ANT
+ pattern: 'docs/**'
+ readable-message: true
parameters:
- - project-parameter:
- project: '{project}'
- branch: '{branch}'
- - 'armband-virtual-defaults':
- installer: '{installer}'
- - '{installer}-defaults':
- gs-pathname: '{gs-pathname}'
+ - project-parameter:
+ project: '{project}'
+ branch: '{branch}'
+ - 'armband-virtual-defaults':
+ installer: '{installer}'
+ - '{installer}-defaults':
+ gs-pathname: '{gs-pathname}'
builders:
- - description-setter:
- description: "Built on $NODE_NAME"
- - multijob:
- name: basic
- condition: SUCCESSFUL
- projects:
- - name: 'armband-verify-basic-{stream}'
- current-parameters: false
- predefined-parameters: |
- BRANCH=$BRANCH
- GERRIT_REFSPEC=$GERRIT_REFSPEC
- GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
- GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
- node-parameters: false
- kill-phase-on: FAILURE
- abort-all-job: true
- - multijob:
- name: deploy-virtual
- condition: SUCCESSFUL
- projects:
- - name: 'armband-verify-deploy-virtual-{stream}'
- current-parameters: false
- predefined-parameters: |
- BRANCH=$BRANCH
- GERRIT_REFSPEC=$GERRIT_REFSPEC
- GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
- GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
- node-parameters: false
- kill-phase-on: FAILURE
- abort-all-job: true
- - multijob:
- name: smoke-test
- condition: SUCCESSFUL
- projects:
- - name: 'armband-verify-smoke-test-{stream}'
- current-parameters: false
- predefined-parameters: |
- BRANCH=$BRANCH
- GERRIT_REFSPEC=$GERRIT_REFSPEC
- GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
- GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
- node-parameters: false
- kill-phase-on: FAILURE
- abort-all-job: true
+ - description-setter:
+ description: "Built on $NODE_NAME"
+ - multijob:
+ name: basic
+ condition: SUCCESSFUL
+ projects:
+ - name: 'armband-verify-basic-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ BRANCH=$BRANCH
+ GERRIT_REFSPEC=$GERRIT_REFSPEC
+ GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
+ GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ node-parameters: false
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ - multijob:
+ name: deploy-virtual
+ condition: SUCCESSFUL
+ projects:
+ - name: 'armband-verify-deploy-virtual-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ BRANCH=$BRANCH
+ GERRIT_REFSPEC=$GERRIT_REFSPEC
+ GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
+ GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ node-parameters: false
+ kill-phase-on: FAILURE
+ abort-all-job: true
+ - multijob:
+ name: smoke-test
+ condition: SUCCESSFUL
+ projects:
+ - name: 'armband-verify-smoke-test-{stream}'
+ current-parameters: false
+ predefined-parameters: |
+ BRANCH=$BRANCH
+ GERRIT_REFSPEC=$GERRIT_REFSPEC
+ GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
+ GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
+ node-parameters: false
+ kill-phase-on: FAILURE
+ abort-all-job: true
- job-template:
name: 'armband-verify-{phase}-{stream}'
concurrent: true
properties:
- - logrotate-default
- - throttle:
- enabled: true
- max-total: 2
- max-per-node: 1
- option: 'project'
- - build-blocker:
- use-build-blocker: true
- blocking-jobs:
- - 'armband-verify-deploy-.*'
- - 'armband-verify-test-.*'
- block-level: 'NODE'
+ - logrotate-default
+ - throttle:
+ enabled: true
+ max-total: 2
+ max-per-node: 1
+ option: 'project'
+ - build-blocker:
+ use-build-blocker: true
+ blocking-jobs:
+ - 'armband-verify-deploy-.*'
+ - 'armband-verify-test-.*'
+ block-level: 'NODE'
scm:
- - git-scm-gerrit
+ - git-scm-gerrit
wrappers:
- - ssh-agent-wrapper
- - timeout:
- timeout: 360
- fail: true
+ - ssh-agent-wrapper
+ - timeout:
+ timeout: 360
+ fail: true
+
parameters:
- - project-parameter:
- project: '{project}'
- branch: '{branch}'
- - '{slave-label}-defaults'
- - 'armband-virtual-defaults':
- installer: '{installer}'
- - '{installer}-defaults':
- gs-pathname: '{gs-pathname}'
+ - project-parameter:
+ project: '{project}'
+ branch: '{branch}'
+ - '{slave-label}-defaults'
+ - 'armband-virtual-defaults':
+ installer: '{installer}'
+ - '{installer}-defaults':
+ gs-pathname: '{gs-pathname}'
builders:
- - description-setter:
- description: "Built on $NODE_NAME"
- - '{project}-verify-{phase}-macro'
+ - description-setter:
+ description: "Built on $NODE_NAME"
+ - '{project}-verify-{phase}-macro'
#####################################
# builder macros
#####################################
- builder:
name: 'armband-verify-basic-macro'
builders:
- - shell: |
- #!/bin/bash
+ - shell: |
+ #!/bin/bash
- echo "Not activated!"
+ echo "Not activated!"
- builder:
name: 'armband-verify-deploy-virtual-macro'
builders:
- - shell:
- !include-raw: ../fuel/fuel-deploy.sh
+ - shell:
+ !include-raw: ../fuel/fuel-deploy.sh
- builder:
name: 'armband-verify-smoke-test-macro'
builders:
- - shell: |
- #!/bin/bash
+ - shell: |
+ #!/bin/bash
- echo "Not activated!"
+ echo "Not activated!"
- project-parameter:
project: '{project}'
branch: '{branch}'
- - 'opnfv-build-defaults'
+ - 'opnfv-build-centos-defaults'
scm:
EXITSTATUS=1
fi
- awk -F"ERROR - " '{print $2}' securityaudit.log | sed -e "s/\"/\\\\\"/g;s/\'/\\\\/g"> shortlog
+ grep 'ERROR' securityaudit.log | awk -F"ERROR - " '{ print $2 }' | tr -d "\'\"" > shortlog
ssh -p 29418 gerrit.opnfv.org \
"gerrit review -p $GERRIT_PROJECT \
cd $WORKSPACE
REPORTDIR='.reports'
mkdir -p $REPORTDIR
+# Ensure any user can read the reports directory
+chmod 777 $REPORTDIR
echo "Generating patchset file to list changed files"
git diff HEAD^1 --name-only | sed "s#^#/home/opnfv/anteater/$PROJECT/#" > $WORKSPACE/patchset
echo "Changed files are"
parameters:
- label:
name: SLAVE_LABEL
- default: 'ericsson-build3'
+ default: 'opnfv-build'
description: 'Slave label on Jenkins'
- project-parameter:
project: $GERRIT_PROJECT
ppa-pathname: '/{stream}'
disabled: false
openstack-version: ocata
+ euphrates: &euphrates
+ stream: euphrates
+ branch: 'stable/{stream}'
+ disabled: false
+ gs-pathname: '/{stream}'
+ ppa-pathname: '/{stream}'
+ openstack-version: ocata
danube: &danube
stream: danube
branch: 'stable/{stream}'
- baremetal:
slave-label: compass-baremetal-branch
os-version: 'xenial'
- <<: *danube
+ <<: *euphrates
- virtual:
slave-label: compass-virtual-branch
os-version: 'xenial'
- <<: *danube
+ <<: *euphrates
#--------------------------------
# master
#--------------------------------
slave-label: 'intel-pod8'
os-version: 'centos7'
<<: *master
+#--------------------------------
+# danube for dovetail
+#--------------------------------
+ - huawei-pod7:
+ slave-label: 'huawei-pod7'
+ os-version: 'xenial'
+ <<: *danube
scenario:
- 'os-nosdn-nofeature-ha':
- 'os-odl-sfc-ha':
disabled: false
auto-trigger-name: 'compass-{scenario}-{pod}-{stream}-trigger'
- - 'os-nosdn-dpdk-ha':
+ - 'os-nosdn-ovs_dpdk-ha':
disabled: false
auto-trigger-name: 'compass-{scenario}-{pod}-{stream}-trigger'
- 'k8-nosdn-nofeature-ha':
- 'os-odl-sfc-noha':
disabled: false
auto-trigger-name: 'compass-{scenario}-{pod}-{stream}-trigger'
- - 'os-nosdn-dpdk-noha':
+ - 'os-nosdn-ovs_dpdk-noha':
disabled: false
auto-trigger-name: 'compass-{scenario}-{pod}-{stream}-trigger'
build-step-failure-threshold: 'never'
failure-threshold: 'never'
unstable-threshold: 'FAILURE'
+ - conditional-step:
+ condition-kind: and
+ condition-operands:
+ - condition-kind: regex-match
+ regex: os-nosdn-nofeature-ha
+ label: '{scenario}'
+ steps:
+ - trigger-builds:
+ - project: 'bottlenecks-compass-posca_stress_ping-{pod}-daily-{stream}'
+ current-parameters: false
+ predefined-parameters:
+ DEPLOY_SCENARIO={scenario}
+ block: true
+ same-node: true
+ block-thresholds:
+ build-step-failure-threshold: 'never'
+ failure-threshold: 'never'
+ unstable-threshold: 'FAILURE'
- job-template:
name: 'compass-deploy-{pod}-daily-{stream}'
!include-raw-escape: ./compass-deploy.sh
- conditional-step:
condition-kind: regex-match
- regex: danube
+ regex: (danube|euphrates)
label: '{stream}'
steps:
- shell:
- shell:
!include-raw-escape: ./compass-deploy.sh
-
########################
# parameter macros
########################
triggers:
- timed: ''
- trigger:
- name: 'compass-os-nosdn-dpdk-ha-baremetal-centos-master-trigger'
+ name: 'compass-os-nosdn-ovs_dpdk-ha-baremetal-centos-master-trigger'
triggers:
- timed: ''
- trigger:
triggers:
- timed: ''
- trigger:
- name: 'compass-os-nosdn-dpdk-noha-baremetal-centos-master-trigger'
+ name: 'compass-os-nosdn-ovs_dpdk-noha-baremetal-centos-master-trigger'
+ triggers:
+ - timed: ''
+
+#---------------------------
+# ha-huawei-pod7-danube
+#---------------------------
+- trigger:
+ name: 'compass-os-nosdn-nofeature-ha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: '0 19 * * *'
+- trigger:
+ name: 'compass-os-nosdn-openo-ha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
+- trigger:
+ name: 'compass-os-odl_l2-nofeature-ha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: '0 21 * * *'
+- trigger:
+ name: 'compass-os-odl_l3-nofeature-ha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: '0 15 * * *'
+- trigger:
+ name: 'compass-os-onos-nofeature-ha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
+- trigger:
+ name: 'compass-os-ocl-nofeature-ha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
+- trigger:
+ name: 'compass-os-onos-sfc-ha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
+- trigger:
+ name: 'compass-os-odl_l2-moon-ha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
+- trigger:
+ name: 'compass-os-nosdn-kvm-ha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
+- trigger:
+ name: 'compass-os-nosdn-ovs_dpdk-ha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
+- trigger:
+ name: 'compass-os-odl-sfc-ha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
+- trigger:
+ name: 'compass-k8-nosdn-nofeature-ha-huawei-pod7-danube-trigger'
triggers:
- timed: ''
+#-----------------------------
+# noha-huawei-pod7-danube
+#-----------------------------
+- trigger:
+ name: 'compass-os-nosdn-nofeature-noha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
+- trigger:
+ name: 'compass-os-odl_l3-nofeature-noha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
+- trigger:
+ name: 'compass-os-odl_l2-moon-noha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
+- trigger:
+ name: 'compass-os-nosdn-kvm-noha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
+- trigger:
+ name: 'compass-os-odl-sfc-noha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
+- trigger:
+ name: 'compass-os-nosdn-ovs_dpdk-noha-huawei-pod7-danube-trigger'
+ triggers:
+ - timed: ''
#--------------------
# ha-baremetal-master
#--------------------
triggers:
- timed: '0 14 * * *'
- trigger:
- name: 'compass-os-nosdn-dpdk-ha-baremetal-master-trigger'
+ name: 'compass-os-nosdn-ovs_dpdk-ha-baremetal-master-trigger'
triggers:
- timed: '0 16 * * *'
- trigger:
triggers:
- timed: ''
- trigger:
- name: 'compass-os-nosdn-dpdk-noha-baremetal-master-trigger'
+ name: 'compass-os-nosdn-ovs_dpdk-noha-baremetal-master-trigger'
triggers:
- timed: ''
#--------------------
-# ha-baremetal-danube
+# ha-baremetal-euphrates
#--------------------
- trigger:
- name: 'compass-os-nosdn-nofeature-ha-baremetal-danube-trigger'
+ name: 'compass-os-nosdn-nofeature-ha-baremetal-euphrates-trigger'
triggers:
- - timed: '0 9 * * *'
+ - timed: '0 1 * * *'
- trigger:
- name: 'compass-os-nosdn-openo-ha-baremetal-danube-trigger'
+ name: 'compass-os-nosdn-openo-ha-baremetal-euphrates-trigger'
triggers:
- - timed: '0 13 * * *'
+ - timed: ''
- trigger:
- name: 'compass-os-odl_l2-nofeature-ha-baremetal-danube-trigger'
+ name: 'compass-os-odl_l2-nofeature-ha-baremetal-euphrates-trigger'
triggers:
- - timed: '0 17 * * *'
+ - timed: ''
- trigger:
- name: 'compass-os-odl_l3-nofeature-ha-baremetal-danube-trigger'
+ name: 'compass-os-odl_l3-nofeature-ha-baremetal-euphrates-trigger'
triggers:
- timed: '0 21 * * *'
- trigger:
- name: 'compass-os-onos-nofeature-ha-baremetal-danube-trigger'
+ name: 'compass-os-onos-nofeature-ha-baremetal-euphrates-trigger'
triggers:
- - timed: '0 1 * * *'
+ - timed: ''
- trigger:
- name: 'compass-os-ocl-nofeature-ha-baremetal-danube-trigger'
+ name: 'compass-os-ocl-nofeature-ha-baremetal-euphrates-trigger'
triggers:
- timed: ''
- trigger:
- name: 'compass-os-onos-sfc-ha-baremetal-danube-trigger'
+ name: 'compass-os-onos-sfc-ha-baremetal-euphrates-trigger'
triggers:
- - timed: '0 5 * * *'
+ - timed: ''
- trigger:
- name: 'compass-os-odl_l2-moon-ha-baremetal-danube-trigger'
+ name: 'compass-os-odl_l2-moon-ha-baremetal-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 5 * * *'
- trigger:
- name: 'compass-os-nosdn-kvm-ha-baremetal-danube-trigger'
+ name: 'compass-os-nosdn-kvm-ha-baremetal-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 13 * * *'
- trigger:
- name: 'compass-os-nosdn-dpdk-ha-baremetal-danube-trigger'
+ name: 'compass-os-nosdn-ovs_dpdk-ha-baremetal-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 9 * * *'
- trigger:
- name: 'compass-k8-nosdn-nofeature-ha-baremetal-danube-trigger'
+ name: 'compass-k8-nosdn-nofeature-ha-baremetal-euphrates-trigger'
triggers:
- timed: ''
- trigger:
- name: 'compass-os-odl-sfc-ha-baremetal-danube-trigger'
+ name: 'compass-os-odl-sfc-ha-baremetal-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 17 * * *'
#----------------------
-# noha-baremetal-danube
+# noha-baremetal-euphrates
#----------------------
- trigger:
- name: 'compass-os-nosdn-kvm-noha-baremetal-danube-trigger'
+ name: 'compass-os-nosdn-kvm-noha-baremetal-euphrates-trigger'
triggers:
- timed: ''
- trigger:
- name: 'compass-os-nosdn-nofeature-noha-baremetal-danube-trigger'
+ name: 'compass-os-nosdn-nofeature-noha-baremetal-euphrates-trigger'
triggers:
- timed: ''
- trigger:
- name: 'compass-os-odl_l3-nofeature-noha-baremetal-danube-trigger'
+ name: 'compass-os-odl_l3-nofeature-noha-baremetal-euphrates-trigger'
triggers:
- timed: ''
- trigger:
- name: 'compass-os-odl_l2-moon-noha-baremetal-danube-trigger'
+ name: 'compass-os-odl_l2-moon-noha-baremetal-euphrates-trigger'
triggers:
- timed: ''
- trigger:
- name: 'compass-os-odl-sfc-noha-baremetal-danube-trigger'
+ name: 'compass-os-odl-sfc-noha-baremetal-euphrates-trigger'
triggers:
- timed: ''
- trigger:
- name: 'compass-os-nosdn-dpdk-noha-baremetal-danube-trigger'
+ name: 'compass-os-nosdn-ovs_dpdk-noha-baremetal-euphrates-trigger'
triggers:
- timed: ''
- trigger:
name: 'compass-os-odl_l2-moon-ha-virtual-master-trigger'
triggers:
- - timed: '0 12 * * *'
+ - timed: '30 12 * * *'
- trigger:
name: 'compass-os-nosdn-kvm-ha-virtual-master-trigger'
triggers:
- timed: '0 13 * * *'
- trigger:
- name: 'compass-os-nosdn-dpdk-ha-virtual-master-trigger'
+ name: 'compass-os-nosdn-ovs_dpdk-ha-virtual-master-trigger'
triggers:
- timed: '0 17 * * *'
- trigger:
- trigger:
name: 'compass-os-nosdn-kvm-noha-virtual-master-trigger'
triggers:
- - timed: '0 13 * * *'
+ - timed: '30 13 * * *'
- trigger:
name: 'compass-os-nosdn-nofeature-noha-virtual-master-trigger'
triggers:
triggers:
- timed: '0 20 * * *'
- trigger:
- name: 'compass-os-nosdn-dpdk-noha-virtual-master-trigger'
+ name: 'compass-os-nosdn-ovs_dpdk-noha-virtual-master-trigger'
triggers:
- timed: '0 11 * * *'
#------------------
-# ha-virtual-danube
+# ha-virtual-euphrates
#------------------
- trigger:
- name: 'compass-os-nosdn-nofeature-ha-virtual-danube-trigger'
+ name: 'compass-os-nosdn-nofeature-ha-virtual-euphrates-trigger'
triggers:
- - timed: '0 21 * * *'
+ - timed: '0 23 * * *'
- trigger:
- name: 'compass-os-nosdn-openo-ha-virtual-danube-trigger'
+ name: 'compass-os-nosdn-openo-ha-virtual-euphrates-trigger'
triggers:
- - timed: '0 22 * * *'
+ - timed: ''
- trigger:
- name: 'compass-os-odl_l2-nofeature-ha-virtual-danube-trigger'
+ name: 'compass-os-odl_l2-nofeature-ha-virtual-euphrates-trigger'
triggers:
- - timed: '0 20 * * *'
+ - timed: ''
- trigger:
- name: 'compass-os-odl_l3-nofeature-ha-virtual-danube-trigger'
+ name: 'compass-os-odl_l3-nofeature-ha-virtual-euphrates-trigger'
triggers:
- - timed: '0 19 * * *'
+ - timed: '0 22 * * *'
- trigger:
- name: 'compass-os-onos-nofeature-ha-virtual-danube-trigger'
+ name: 'compass-os-onos-nofeature-ha-virtual-euphrates-trigger'
triggers:
- - timed: '0 18 * * *'
+ - timed: ''
- trigger:
- name: 'compass-os-ocl-nofeature-ha-virtual-danube-trigger'
+ name: 'compass-os-ocl-nofeature-ha-virtual-euphrates-trigger'
triggers:
- timed: ''
- trigger:
- name: 'compass-os-onos-sfc-ha-virtual-danube-trigger'
+ name: 'compass-os-onos-sfc-ha-virtual-euphrates-trigger'
triggers:
- - timed: '0 15 * * *'
+ - timed: ''
- trigger:
- name: 'compass-os-odl_l2-moon-ha-virtual-danube-trigger'
+ name: 'compass-os-odl_l2-moon-ha-virtual-euphrates-trigger'
triggers:
- - timed: '0 14 * * *'
+ - timed: '0 20 * * *'
- trigger:
- name: 'compass-os-nosdn-kvm-ha-virtual-danube-trigger'
+ name: 'compass-os-nosdn-kvm-ha-virtual-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 16 * * *'
- trigger:
- name: 'compass-os-nosdn-dpdk-ha-virtual-danube-trigger'
+ name: 'compass-os-nosdn-ovs_dpdk-ha-virtual-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 14 * * *'
- trigger:
- name: 'compass-os-odl-sfc-ha-virtual-danube-trigger'
+ name: 'compass-os-odl-sfc-ha-virtual-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 18 * * *'
- trigger:
- name: 'compass-k8-nosdn-nofeature-ha-virtual-danube-trigger'
+ name: 'compass-k8-nosdn-nofeature-ha-virtual-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 13 * * *'
#--------------------
-# noha-virtual-danube
+# noha-virtual-euphrates
#--------------------
- trigger:
- name: 'compass-os-nosdn-kvm-noha-virtual-danube-trigger'
+ name: 'compass-os-nosdn-kvm-noha-virtual-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 15 * * *'
- trigger:
- name: 'compass-os-nosdn-nofeature-noha-virtual-danube-trigger'
+ name: 'compass-os-nosdn-nofeature-noha-virtual-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 17 * * *'
- trigger:
- name: 'compass-os-odl_l3-nofeature-noha-virtual-danube-trigger'
+ name: 'compass-os-odl_l3-nofeature-noha-virtual-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 23 * * *'
- trigger:
- name: 'compass-os-odl_l2-moon-noha-virtual-danube-trigger'
+ name: 'compass-os-odl_l2-moon-noha-virtual-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 21 * * *'
- trigger:
- name: 'compass-os-odl-sfc-noha-virtual-danube-trigger'
+ name: 'compass-os-odl-sfc-noha-virtual-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 19 * * *'
- trigger:
- name: 'compass-os-nosdn-dpdk-noha-virtual-danube-trigger'
+ name: 'compass-os-nosdn-ovs_dpdk-noha-virtual-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '0 12 * * *'
export NETWORK_CONF_FILE=network_onos.yml
elif [[ "${DEPLOY_SCENARIO}" =~ "-openo" ]]; then
export NETWORK_CONF_FILE=network_openo.yml
-elif [[ "${DEPLOY_SCENARIO}" =~ "-dpdk" ]]; then
+elif [[ "${DEPLOY_SCENARIO}" =~ "-ovs_dpdk" ]]; then
export NETWORK_CONF_FILE=network_dpdk.yml
else
export NETWORK_CONF_FILE=network.yml
gs-pathname: '/{stream}'
ppa-pathname: '/{stream}'
disabled: false
+ - euphrates:
+ branch: 'stable/{stream}'
+ gs-pathname: '/{stream}'
+ ppa-pathname: '/{stream}'
+ disabled: false
jobs:
- '{installer}-build-daily-{stream}'
- name: 'functest-compass-virtual-suite-{stream}'
current-parameters: false
predefined-parameters: |
- FUNCTEST_SUITE_NAME=healthcheck
+ FUNCTEST_MODE=tier
+ FUNCTEST_TIER=healthcheck
DEPLOY_SCENARIO=os-nosdn-nofeature-ha
node-parameters: true
kill-phase-on: NEVER
- name: 'functest-compass-virtual-suite-{stream}'
current-parameters: false
predefined-parameters: |
+ FUNCTEST_MODE=testcase
FUNCTEST_SUITE_NAME=vping_ssh
DEPLOY_SCENARIO=os-nosdn-nofeature-ha
node-parameters: true
# CI PODs
#--------------------------------
pod:
+# - baremetal:
+# slave-label: daisy-baremetal
+# <<: *master
+ - virtual:
+ slave-label: daisy-virtual
+ <<: *master
- baremetal:
slave-label: daisy-baremetal
- <<: *master
+ <<: *euphrates
- virtual:
slave-label: daisy-virtual
- <<: *master
+ <<: *euphrates
#--------------------------------
# None-CI PODs
#--------------------------------
+ - baremetal:
+ slave-label: zte-pod3
+ <<: *master
#--------------------------------
# scenarios
name: 'daisy-os-nosdn-nofeature-ha-baremetal-daily-euphrates-trigger'
triggers:
- timed: '0 0 * * *'
+# Basic NOHA Scenarios
+- trigger:
+ name: 'daisy-os-nosdn-nofeature-noha-baremetal-daily-euphrates-trigger'
+ triggers:
+ - timed: ''
# ODL Scenarios
- trigger:
name: 'daisy-os-odl-nofeature-ha-baremetal-daily-euphrates-trigger'
name: 'daisy-os-nosdn-nofeature-ha-virtual-daily-euphrates-trigger'
triggers:
- timed: '0 0 * * *'
+# Basic NOHA Scenarios
+- trigger:
+ name: 'daisy-os-nosdn-nofeature-noha-virtual-daily-euphrates-trigger'
+ triggers:
+ - timed: ''
# ODL Scenarios
- trigger:
name: 'daisy-os-odl-nofeature-ha-virtual-daily-euphrates-trigger'
- euphrates:
branch: 'stable/{stream}'
gs-pathname: '/{stream}'
- disabled: true
+ disabled: false
#####################################
# patch merge phases
#####################################
+---
- project:
name: doctor
project: '{name}'
stream:
- - master:
- branch: '{stream}'
- gs-pathname: ''
- docker-tag: 'latest'
- disabled: false
- - danube:
- branch: 'stable/{stream}'
- gs-pathname: '/{stream}'
- docker-tag: 'stable'
- disabled: false
+ - master:
+ branch: '{stream}'
+ gs-pathname: ''
+ docker-tag: 'latest'
+ disabled: false
+ - euphrates:
+ branch: 'stable/{stream}'
+ gs-pathname: '/{stream}'
+ docker-tag: 'stable'
+ disabled: false
installer:
- - apex:
- slave-label: 'doctor-apex-verify'
- - fuel:
- slave-label: 'doctor-fuel-verify'
- #- joid:
- # slave-label: 'ool-virtual3'
- # pod: 'ool-virtual3'
+ - apex:
+ slave-label: 'doctor-apex-verify'
+ - fuel:
+ slave-label: 'doctor-fuel-verify'
+ # - joid:
+ # slave-label: 'ool-virtual3'
+ # pod: 'ool-virtual3'
inspector:
- - 'sample'
- - 'congress'
+ - 'sample'
+ - 'congress'
task:
- - verify:
- auto-trigger-name: 'doctor-verify'
- is-python: false
- - python-verify:
- auto-trigger-name: 'doctor-verify'
- is-python: true
+ - verify:
+ auto-trigger-name: 'doctor-verify'
+ is-python: false
+ - python-verify:
+ auto-trigger-name: 'doctor-verify'
+ is-python: true
pod:
- - armband-baremetal:
- slave-label: '{pod}'
- - armband-virtual:
- slave-label: '{pod}'
+ - armband-baremetal:
+ slave-label: '{pod}'
+ - armband-virtual:
+ slave-label: '{pod}'
jobs:
- - 'doctor-verify-{stream}'
- - 'doctor-{task}-{installer}-{inspector}-{pod}-{stream}'
- - 'doctor-{task}-{installer}-{inspector}-{stream}'
+ - 'doctor-verify-{stream}'
+ - 'doctor-{task}-{installer}-{inspector}-{pod}-{stream}'
+ - 'doctor-{task}-{installer}-{inspector}-{stream}'
- job-template:
name: 'doctor-verify-{stream}'
disabled: '{obj:disabled}'
parameters:
- - project-parameter:
- project: '{project}'
- branch: '{branch}'
- - 'opnfv-build-ubuntu-defaults'
+ - project-parameter:
+ project: '{project}'
+ branch: '{branch}'
+ - 'opnfv-build-ubuntu-defaults'
scm:
- - git-scm-gerrit
+ - git-scm-gerrit
triggers:
- - gerrit:
- server-name: 'gerrit.opnfv.org'
- trigger-on:
- - patchset-created-event:
- exclude-drafts: 'false'
- exclude-trivial-rebase: 'false'
- exclude-no-code-change: 'false'
- - draft-published-event
- - comment-added-contains-event:
- comment-contains-value: 'recheck'
- - comment-added-contains-event:
- comment-contains-value: 'reverify'
- projects:
- - project-compare-type: 'ANT'
- project-pattern: '{project}'
- branches:
- - branch-compare-type: 'ANT'
- branch-pattern: '**/{branch}'
- file-paths:
- - compare-type: ANT
- pattern: 'doctor_tests/**'
+ - gerrit:
+ server-name: 'gerrit.opnfv.org'
+ trigger-on:
+ - patchset-created-event:
+ exclude-drafts: 'false'
+ exclude-trivial-rebase: 'false'
+ exclude-no-code-change: 'false'
+ - draft-published-event
+ - comment-added-contains-event:
+ comment-contains-value: 'recheck'
+ - comment-added-contains-event:
+ comment-contains-value: 'reverify'
+ projects:
+ - project-compare-type: 'ANT'
+ project-pattern: '{project}'
+ branches:
+ - branch-compare-type: 'ANT'
+ branch-pattern: '**/{branch}'
+ file-paths:
+ - compare-type: ANT
+ pattern: 'doctor_tests/**'
builders:
- - shell: "[ -e tests/run.sh ] && bash -n ./tests/run.sh"
+ - shell: "[ -e tests/run.sh ] && bash -n ./tests/run.sh"
- job-template:
name: 'doctor-{task}-{installer}-{inspector}-{pod}-{stream}'
disabled: '{obj:disabled}'
parameters:
- - project-parameter:
- project: '{project}'
- branch: '{branch}'
- - 'opnfv-build-ubuntu-defaults'
+ - project-parameter:
+ project: '{project}'
+ branch: '{branch}'
+ - 'opnfv-build-ubuntu-defaults'
scm:
- - git-scm-gerrit
+ - git-scm-gerrit
triggers:
- - '{auto-trigger-name}':
- project: '{project}'
- branch: '{branch}'
- files: 'doctor_tests/**'
+ - '{auto-trigger-name}':
+ project: '{project}'
+ branch: '{branch}'
+ files: 'doctor_tests/**'
builders:
- - shell: "[ -e tests/run.sh ] && bash -n ./tests/run.sh"
+ - shell: "[ -e tests/run.sh ] && bash -n ./tests/run.sh"
- job-template:
node: '{slave-label}'
parameters:
- - project-parameter:
- project: '{project}'
- branch: '{branch}'
- - string:
- name: OS_CREDS
- default: /home/jenkins/openstack.creds
- description: 'OpenStack credentials'
- - '{slave-label}-defaults'
- - '{installer}-defaults'
- - string:
- name: DOCKER_TAG
- default: '{docker-tag}'
- description: 'Tag to pull docker image'
- - string:
- name: CLEAN_DOCKER_IMAGES
- default: 'false'
- description: 'Remove downloaded docker images (opnfv/functest:*)'
- - string:
- name: DEPLOY_SCENARIO
- default: 'os-nosdn-nofeature-ha'
- description: 'Scenario to deploy and test'
- # functest-suite-parameter
- - string:
- name: FUNCTEST_SUITE_NAME
- default: 'doctor-notification'
- - string:
- name: TESTCASE_OPTIONS
- default: '-e INSPECTOR_TYPE={inspector} -e PYTHON_ENABLE={is-python} -v $WORKSPACE:/home/opnfv/repos/doctor'
- description: 'Addtional parameters specific to test case(s)'
- # functest-parameter
- - string:
- name: GS_PATHNAME
- default: '{gs-pathname}'
- description: "Version directory where the opnfv documents will be stored in gs repository"
- - string:
- name: FUNCTEST_REPO_DIR
- default: "/home/opnfv/repos/functest"
- description: "Directory where the Functest repository is cloned"
- - string:
- name: PUSH_RESULTS_TO_DB
- default: "true"
- description: "Push the results of all the tests to the resultDB"
- - string:
- name: CI_DEBUG
- default: 'true'
- description: "Show debug output information"
+ - project-parameter:
+ project: '{project}'
+ branch: '{branch}'
+ - string:
+ name: OS_CREDS
+ default: /home/jenkins/openstack.creds
+ description: 'OpenStack credentials'
+ - '{slave-label}-defaults'
+ - '{installer}-defaults'
+ - string:
+ name: DOCKER_TAG
+ default: '{docker-tag}'
+ description: 'Tag to pull docker image'
+ - string:
+ name: CLEAN_DOCKER_IMAGES
+ default: 'false'
+ description: 'Remove downloaded docker images (opnfv/functest:*)'
+ - string:
+ name: DEPLOY_SCENARIO
+ default: 'os-nosdn-nofeature-ha'
+ description: 'Scenario to deploy and test'
+ # functest-suite-parameter
+ - string:
+ name: FUNCTEST_MODE
+ default: 'testcase'
+ - string:
+ name: FUNCTEST_SUITE_NAME
+ default: 'doctor-notification'
+ - string:
+ name: TESTCASE_OPTIONS
+ default: '-e INSPECTOR_TYPE={inspector} -e PYTHON_ENABLE={is-python} -v $WORKSPACE:/home/opnfv/repos/doctor'
+ description: 'Addtional parameters specific to test case(s)'
+ # functest-parameter
+ - string:
+ name: GS_PATHNAME
+ default: '{gs-pathname}'
+ description: "Version directory where the opnfv documents will be stored in gs repository"
+ - string:
+ name: FUNCTEST_REPO_DIR
+ default: "/home/opnfv/repos/functest"
+ description: "Directory where the Functest repository is cloned"
+ - string:
+ name: PUSH_RESULTS_TO_DB
+ default: "true"
+ description: "Push the results of all the tests to the resultDB"
+ - string:
+ name: CI_DEBUG
+ default: 'true'
+ description: "Show debug output information"
scm:
- - git-scm-gerrit
+ - git-scm-gerrit
triggers:
- - '{auto-trigger-name}':
- project: '{project}'
- branch: '{branch}'
- files: 'doctor_tests/**'
+ - '{auto-trigger-name}':
+ project: '{project}'
+ branch: '{branch}'
+ files: 'doctor_tests/**'
builders:
- - 'clean-workspace-log'
- - shell: |
- # NOTE: Create symbolic link, so that we can archive file outside
- # of $WORKSPACE .
- # NOTE: We are printing all logs under 'tests/' during test run,
- # so this symbolic link should not be in 'tests/'. Otherwise,
- # we'll have the same log twice in jenkins console log.
- ln -sfn $HOME/opnfv/functest/results/{stream} functest_results
- # NOTE: Get functest script in $WORKSPACE. This functest script is
- # needed to perform VM image download in set-functest-env.sh
- # from E release cycle.
- mkdir -p functest/ci
- wget https://git.opnfv.org/functest/plain/functest/ci/download_images.sh -O functest/ci/download_images.sh
- - 'functest-suite-builder'
- - shell: |
- functest_log="$HOME/opnfv/functest/results/{stream}/$FUNCTEST_SUITE_NAME.log"
- # NOTE: checking the test result, as the previous job could return
- # 0 regardless the result of doctor test scenario.
- grep -e 'doctor test successfully' $functest_log || exit 1
+ - 'clean-workspace-log'
+ - shell: |
+ # NOTE: Create symbolic link, so that we can archive file outside
+ # of $WORKSPACE .
+ # NOTE: We are printing all logs under 'tests/' during test run,
+ # so this symbolic link should not be in 'tests/'. Otherwise,
+ # we'll have the same log twice in jenkins console log.
+ ln -sfn $HOME/opnfv/functest/results/{stream} functest_results
+ # NOTE: Get functest script in $WORKSPACE. This functest script is
+ # needed to perform VM image download in set-functest-env.sh
+ # from E release cycle.
+ mkdir -p functest/ci
+ wget https://git.opnfv.org/functest/plain/functest/ci/download_images.sh -O functest/ci/download_images.sh
+ - 'functest-suite-builder'
+ - shell: |
+ functest_log="$HOME/opnfv/functest/results/{stream}/$FUNCTEST_SUITE_NAME.log"
+ # NOTE: checking the test result, as the previous job could return
+ # 0 regardless the result of doctor test scenario.
+ grep -e 'doctor test successfully' $functest_log || exit 1
publishers:
- - archive:
- artifacts: 'doctor_tests/*.log'
- - archive:
- artifacts: 'functest_results/$FUNCTEST_SUITE_NAME.log'
- - email-jenkins-admins-on-failure
+ - archive:
+ artifacts: 'doctor_tests/*.log'
+ - archive:
+ artifacts: 'functest_results/$FUNCTEST_SUITE_NAME.log'
+ - email-jenkins-admins-on-failure
#####################################
- trigger:
name: 'doctor-verify'
triggers:
- - gerrit:
- server-name: 'gerrit.opnfv.org'
- trigger-on:
- - patchset-created-event:
- exclude-drafts: 'false'
- exclude-trivial-rebase: 'false'
- exclude-no-code-change: 'false'
- - draft-published-event
- - comment-added-contains-event:
- comment-contains-value: 'recheck'
- - comment-added-contains-event:
- comment-contains-value: 'reverify'
- projects:
- - project-compare-type: 'ANT'
- project-pattern: '{project}'
- branches:
- - branch-compare-type: 'ANT'
- branch-pattern: '**/{branch}'
- file-paths:
- - compare-type: ANT
- pattern: '{files}'
- skip-vote:
- successful: true
- failed: true
- unstable: true
- notbuilt: true
+ - gerrit:
+ server-name: 'gerrit.opnfv.org'
+ trigger-on:
+ - patchset-created-event:
+ exclude-drafts: 'false'
+ exclude-trivial-rebase: 'false'
+ exclude-no-code-change: 'false'
+ - draft-published-event
+ - comment-added-contains-event:
+ comment-contains-value: 'recheck'
+ - comment-added-contains-event:
+ comment-contains-value: 'reverify'
+ projects:
+ - project-compare-type: 'ANT'
+ project-pattern: '{project}'
+ branches:
+ - branch-compare-type: 'ANT'
+ branch-pattern: '**/{branch}'
+ file-paths:
+ - compare-type: ANT
+ pattern: '{files}'
+ skip-vote:
+ successful: true
+ failed: true
+ unstable: true
+ notbuilt: true
branch: '{stream}'
gs-pathname: ''
disabled: false
- - danube:
+ - euphrates:
branch: 'stable/{stream}'
gs-pathname: '/{stream}'
disabled: false
branch: 'stable/{stream}'
dovetail-branch: master
gs-pathname: '/{stream}'
- docker-tag: 'cvp.0.6.0'
+ docker-tag: 'cvp.0.7.0'
#-----------------------------------
# POD, PLATFORM, AND BRANCH MAPPING
- huawei-pod4:
slave-label: huawei-pod4
SUT: apex
- auto-trigger-name: 'apex-huawei-pod4-{testsuite}-danube-trigger'
+ auto-trigger-name: 'daily-trigger-disabled'
+ <<: *danube
+ - huawei-pod7:
+ slave-label: huawei-pod7
+ SUT: compass
+ auto-trigger-name: 'daily-trigger-disabled'
<<: *danube
#--------------------------------
testsuite:
builders:
- shell:
!include-raw: ./dovetail-cleanup.sh
-
-#--------------------------
-# trigger macros
-#--------------------------
-- trigger:
- name: 'apex-huawei-pod4-proposed_tests-danube-trigger'
- triggers:
- - timed: '0 1 * * *'
-- trigger:
- name: 'apex-huawei-pod4-compliance_set-danube-trigger'
- triggers:
- - timed: ''
echo "Dovetail: Pulling image opnfv/dovetail:${DOCKER_TAG}"
docker pull opnfv/dovetail:$DOCKER_TAG >$redirect
+env4bgpvpn="-e INSTALLER_TYPE=${INSTALLER_TYPE} -e INSTALLER_IP=${INSTALLER_IP}"
+
cmd="docker run ${opts} -e DOVETAIL_HOME=${DOVETAIL_HOME} ${docker_volume} ${dovetail_home_volume} \
- ${sshkey} opnfv/dovetail:${DOCKER_TAG} /bin/bash"
+ ${sshkey} ${env4bgpvpn} opnfv/dovetail:${DOCKER_TAG} /bin/bash"
echo "Dovetail: running docker run command: ${cmd}"
${cmd} >${redirect}
sleep 5
compute:
min_compute_nodes: 2
volume_device_name: ${volume_device}
- min_microversion: 2.2
- max_microversion: latest
-
-compute-feature-enabled:
- live_migration: True
- block_migration_for_live_migration: True
- block_migrate_cinder_iscsi: True
- attach_encrypted_volume: True
EOF
euphrates: &euphrates
stream: euphrates
branch: 'stable/{stream}'
- disabled: true
+ disabled: false
gs-pathname: '/{stream}'
danube: &danube
stream: danube
label: '{scenario}'
steps:
- trigger-builds:
- - project: 'dovetail-fuel-{pod}-proposed_tests-{stream}'
+ - project: 'dovetail-fuel-{pod}-proposed_tests-master'
current-parameters: false
predefined-parameters:
DEPLOY_SCENARIO={scenario}
- trigger:
name: 'fuel-os-nosdn-nofeature-ha-baremetal-daily-euphrates-trigger'
triggers:
- - timed: '' # '0 20 * * *'
+ - timed: '0 20 * * *'
- trigger:
name: 'fuel-os-odl-nofeature-ha-baremetal-daily-euphrates-trigger'
triggers:
- - timed: '' # '0 2 * * *'
+ - timed: '0 2 * * *'
- trigger:
name: 'fuel-os-onos-sfc-ha-baremetal-daily-euphrates-trigger'
triggers:
- trigger:
name: 'fuel-os-nosdn-ovs-ha-baremetal-daily-euphrates-trigger'
triggers:
- - timed: '' # '0 20 * * *'
+ - timed: '0 20 * * *'
- trigger:
name: 'fuel-os-nosdn-kvm_ovs_dpdk-ha-baremetal-daily-euphrates-trigger'
triggers:
- trigger:
name: 'fuel-os-nosdn-nofeature-noha-virtual-daily-euphrates-trigger'
triggers:
- - timed: '' # '0 13 * * *'
+ - timed: '0 13 * * *'
- trigger:
name: 'fuel-os-odl-nofeature-noha-virtual-daily-euphrates-trigger'
triggers:
- - timed: '' # '0 18 * * *'
+ - timed: '0 18 * * *'
- trigger:
name: 'fuel-os-onos-sfc-noha-virtual-daily-euphrates-trigger'
triggers:
- trigger:
name: 'fuel-os-nosdn-ovs-noha-virtual-daily-euphrates-trigger'
triggers:
- - timed: '' # '0 9 * * *'
+ - timed: '0 9 * * *'
- trigger:
name: 'fuel-os-nosdn-kvm_ovs_dpdk-noha-virtual-daily-euphrates-trigger'
triggers:
- trigger:
name: 'fuel-os-nosdn-nofeature-ha-zte-pod1-daily-master-trigger'
triggers:
- - timed: ''
+ - timed: '0 10 * * *'
- trigger:
name: 'fuel-os-odl-nofeature-ha-zte-pod1-daily-master-trigger'
triggers:
- trigger:
name: 'fuel-os-nosdn-nofeature-ha-zte-pod1-daily-danube-trigger'
triggers:
- - timed: '0 2 * * 6'
+ - timed: ''
- trigger:
name: 'fuel-os-odl_l2-bgpvpn-ha-zte-pod1-daily-danube-trigger'
triggers:
- - timed: '0 2 * * 1,3,5'
+ - timed: ''
- trigger:
name: 'fuel-os-odl-nofeature-ha-zte-pod1-daily-danube-trigger'
triggers:
cd "${WORKSPACE}" || exit 1
if [[ "${LAB_CONFIG_URL}" =~ ^(git|ssh):// ]]; then
echo "Cloning securedlab repo ${BRANCH}"
- git clone --quiet --branch "${BRANCH}" "${LAB_CONFIG_URL}" lab-config
- LAB_CONFIG_URL=file://${WORKSPACE}/lab-config
+ LOCAL_CFG="${TMPDIR}/securedlab"
+ rm -rf "${LOCAL_CFG}"
+ git clone --quiet --branch "${BRANCH}" "${LAB_CONFIG_URL}" "${LOCAL_CFG}"
+ LAB_CONFIG_URL="file://${LOCAL_CFG}"
# Source local_env if present, which contains POD-specific config
- local_env="${WORKSPACE}/lab-config/labs/${LAB_NAME}/${POD_NAME}/fuel/config/local_env"
+ local_env="${LOCAL_CFG}/labs/${LAB_NAME}/${POD_NAME}/fuel/config/local_env"
if [ -e "${local_env}" ]; then
echo "-- Sourcing local environment file"
source "${local_env}"
echo "Scenario: ${DEPLOY_SCENARIO}"
echo "Lab: ${LAB_NAME}"
echo "POD: ${POD_NAME}"
-[[ "${BRANCH}" != 'master' ]] && echo "ISO: ${OPNFV_ARTIFACT_URL/*\/}"
+[[ "${BRANCH}" =~ 'danube' ]] && echo "ISO: ${OPNFV_ARTIFACT_URL/*\/}"
echo
echo "Starting the deployment using ${INSTALLER_TYPE}. This could take some time..."
echo "--------------------------------------------------------"
- euphrates:
branch: 'stable/{stream}'
gs-pathname: '/{stream}'
- disabled: true
+ disabled: false
jobs:
- 'fuel-deploy-generic-daily-{stream}'
- euphrates:
branch: 'stable/{stream}'
gs-pathname: '/{stream}'
- disabled: true
+ disabled: false
#####################################
# patch verification phases
#####################################
euphrates: &euphrates
stream: euphrates
branch: 'stable/{stream}'
- disabled: true
+ disabled: false
gs-pathname: '/{stream}'
#--------------------------------
# POD, INSTALLER, AND BRANCH MAPPING
set +u
set +o pipefail
+run_tiers() {
+ tiers=$1
+ cmd_opt="prepare_env start && run_tests -r -t all"
+ [[ $BUILD_TAG =~ "suite" ]] && cmd_opt="prepare_env start && run_tests -t all"
+ ret_val_file="${HOME}/opnfv/functest/results/${BRANCH##*/}/return_value"
+ echo 0 > ${ret_val_file}
+
+ for tier in ${tiers[@]}; do
+ FUNCTEST_IMAGE=opnfv/functest-${tier}:${DOCKER_TAG}
+ echo "Functest: Pulling Functest Docker image ${FUNCTEST_IMAGE} ..."
+ docker pull ${FUNCTEST_IMAGE}>/dev/null
+ cmd="docker run --privileged=true ${envs} ${volumes} ${FUNCTEST_IMAGE} /bin/bash -c '${cmd_opt}'"
+ echo "Running Functest tier '${tier}'. CMD: ${cmd}"
+ eval ${cmd}
+ ret_value=$?
+ if [ ${ret_value} != 0 ]; then
+ echo ${ret_value} > ${ret_val_file}
+ if [ ${tier} == 'healthcheck' ]; then
+ echo "Healthcheck tier failed. Exiting Functest..."
+ break
+ fi
+ fi
+ done
+}
+
+run_test() {
+ test_name=$1
+ cmd_opt="prepare_env start && run_tests -r -t ${test_name}"
+ [[ $BUILD_TAG =~ "suite" ]] && cmd_opt="prepare_env start && run_tests -t ${test_name}"
+ ret_val_file="${HOME}/opnfv/functest/results/${BRANCH##*/}/return_value"
+ echo 0 > ${ret_val_file}
+ # Determine which Functest image should be used for the test case
+ case ${test_name} in
+ connection_check|api_check|snaps_health_check)
+ FUNCTEST_IMAGE=opnfv/functest-healthcheck:${DOCKER_TAG} ;;
+ vping_ssh|vping_userdata|tempest_smoke_serial|rally_sanity|refstack_defcore|odl|odl_netvirt|fds|snaps_smoke)
+ FUNCTEST_IMAGE=opnfv/functest-smoke:${DOCKER_TAG} ;;
+ tempest_full_parallel|tempest_custom|rally_full)
+ FUNCTEST_IMAGE=opnfv/functest-components:${DOCKER_TAG} ;;
+ cloudify_ims|orchestra_openims|orchestra_clearwaterims|vyos_vrouter)
+ FUNCTEST_IMAGE=opnfv/functest-vnf:${DOCKER_TAG} ;;
+ promise|doctor-notification|bgpvpn|functest-odl-sfc|domino-multinode|barometercollectd)
+ FUNCTEST_IMAGE=opnfv/functest-features:${DOCKER_TAG} ;;
+ parser-basics)
+ FUNCTEST_IMAGE=opnfv/functest-parser:${DOCKER_TAG} ;;
+ *)
+ echo "Unkown test case $test_name"
+ exit 1
+ ;;
+ esac
+ echo "Functest: Pulling Functest Docker image ${FUNCTEST_IMAGE} ..."
+ docker pull ${FUNCTEST_IMAGE}>/dev/null
+ cmd="docker run --privileged=true ${envs} ${volumes} ${FUNCTEST_IMAGE} /bin/bash -c '${cmd_opt}'"
+ echo "Running Functest test case '${test_name}'. CMD: ${cmd}"
+ eval ${cmd}
+ ret_value=$?
+ if [ ${ret_value} != 0 ]; then
+ echo ${ret_value} > ${ret_val_file}
+ fi
+}
+
+
[[ $CI_DEBUG == true ]] && redirect="/dev/stdout" || redirect="/dev/null"
FUNCTEST_DIR=/home/opnfv/functest
DEPLOY_TYPE=baremetal
[[ $BUILD_TAG =~ "virtual" ]] && DEPLOY_TYPE=virt
HOST_ARCH=$(uname -m)
+DOCKER_TAG=${DOCKER_TAG:-latest}
# Prepare OpenStack credentials volume
rc_file=${HOME}/opnfv-openrc.sh
if [[ ${INSTALLER_TYPE} == 'joid' ]]; then
rc_file=$LAB_CONFIG/admin-openrc
-elif [[ ${INSTALLER_TYPE} == 'compass' && ${BRANCH} == 'master' ]]; then
+elif [[ ${INSTALLER_TYPE} == 'compass' ]]; then
cacert_file_vol="-v ${HOME}/os_cacert:${FUNCTEST_DIR}/conf/os_cacert"
echo "export OS_CACERT=${FUNCTEST_DIR}/conf/os_cacert" >> ${HOME}/opnfv-openrc.sh
elif [[ ${INSTALLER_TYPE} == 'fuel' && ${DEPLOY_TYPE} == 'baremetal' ]]; then
-e NODE_NAME=${NODE_NAME} -e DEPLOY_SCENARIO=${DEPLOY_SCENARIO} \
-e BUILD_TAG=${BUILD_TAG} -e DEPLOY_TYPE=${DEPLOY_TYPE}"
-if [[ ${INSTALLER_TYPE} == 'compass' && ${DEPLOY_SCENARIO} == *'os-nosdn-openo-ha'* ]]; then
- ssh_options="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
- openo_msb_port=${openo_msb_port:-80}
- openo_msb_endpoint="$(sshpass -p'root' ssh 2>/dev/null $ssh_options root@${installer_ip} \
- 'mysql -ucompass -pcompass -Dcompass -e "select package_config from cluster;" \
- | sed s/,/\\n/g | grep openo_ip | cut -d \" -f 4'):$openo_msb_port"
+ssh_options="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
- envs=${env}" -e OPENO_MSB_ENDPOINT=${openo_msb_endpoint}"
+
+if [ "${INSTALLER_TYPE}" == 'fuel' ]; then
+ COMPUTE_ARCH=$(ssh -l ubuntu ${INSTALLER_IP} -i ${SSH_KEY} ${ssh_options} \
+ "sudo salt 'cmp*' grains.get cpuarch --out yaml | awk '{print \$2; exit}'")
+ envs="${envs} -e POD_ARCH=${COMPUTE_ARCH}"
fi
volumes="${images_vol} ${results_vol} ${sshkey_vol} ${rc_file_vol} ${cacert_file_vol}"
set +e
-if [ ${FUNCTEST_SUITE_NAME} == 'healthcheck' ]; then
- tiers=(healthcheck)
-else
- if [ ${DEPLOY_TYPE} == 'baremetal' ]; then
- tiers=(healthcheck smoke features vnf)
+
+if [[ ${DEPLOY_SCENARIO} =~ ^os-.* ]]; then
+ if [ ${FUNCTEST_MODE} == 'testcase' ]; then
+ echo "FUNCTEST_MODE=testcase, FUNCTEST_SUITE_NAME=${FUNCTEST_SUITE_NAME}"
+ run_test ${FUNCTEST_SUITE_NAME}
+ elif [ ${FUNCTEST_MODE} == 'tier' ]; then
+ echo "FUNCTEST_MODE=tier, FUNCTEST_TIER=${FUNCTEST_TIER}"
+ tiers=(${FUNCTEST_TIER})
+ run_tiers ${tiers}
else
- tiers=(healthcheck smoke features)
+ if [ ${DEPLOY_TYPE} == 'baremetal' ]; then
+ tiers=(healthcheck smoke features vnf parser)
+ else
+ tiers=(healthcheck smoke features)
+ fi
+ run_tiers ${tiers}
fi
+else
+ echo "k8 deployment has not been supported by functest yet"
fi
-
-cmd_opt='prepare_env start && run_tests -r -t all'
-
-for tier in ${tiers[@]}; do
- FUNCTEST_IMAGE=opnfv/functest-${tier}
- echo "Functest: Pulling Functest Docker image ${FUNCTEST_IMAGE} ..."
- docker pull ${FUNCTEST_IMAGE}>/dev/null
- cmd="docker run --privileged=true ${envs} ${volumes} ${FUNCTEST_IMAGE} /bin/bash -c '${cmd_opt}'"
- echo "Running Functest tier '${tier}'. CMD: ${cmd}"
- eval ${cmd}
-done
branch: '{stream}'
gs-pathname: ''
docker-tag: 'latest'
- danube: &danube
- stream: danube
+ euphrates: &euphrates
+ stream: euphrates
branch: 'stable/{stream}'
gs-pathname: '/{stream}'
docker-tag: 'stable'
- baremetal:
slave-label: fuel-baremetal
installer: fuel
- <<: *danube
+ <<: *euphrates
- virtual:
slave-label: fuel-virtual
installer: fuel
- <<: *danube
+ <<: *euphrates
# joid CI PODs
- baremetal:
slave-label: joid-baremetal
- baremetal:
slave-label: joid-baremetal
installer: joid
- <<: *danube
+ <<: *euphrates
- virtual:
slave-label: joid-virtual
installer: joid
- <<: *danube
+ <<: *euphrates
# compass CI PODs
- baremetal:
slave-label: compass-baremetal
- baremetal:
slave-label: compass-baremetal
installer: compass
- <<: *danube
+ <<: *euphrates
- virtual:
slave-label: compass-virtual
installer: compass
- <<: *danube
+ <<: *euphrates
# apex CI PODs
- virtual:
slave-label: apex-virtual-master
installer: apex
<<: *master
- virtual:
- slave-label: apex-virtual-danube
+ slave-label: apex-virtual-euphrates
installer: apex
- <<: *danube
+ <<: *euphrates
- baremetal:
- slave-label: apex-baremetal-danube
+ slave-label: apex-baremetal-euphrates
installer: apex
- <<: *danube
+ <<: *euphrates
# armband CI PODs
- armband-baremetal:
slave-label: armband-baremetal
- armband-baremetal:
slave-label: armband-baremetal
installer: fuel
- <<: *danube
+ <<: *euphrates
- armband-virtual:
slave-label: armband-virtual
installer: fuel
- <<: *danube
+ <<: *euphrates
# daisy CI PODs
- baremetal:
slave-label: daisy-baremetal
slave-label: daisy-virtual
installer: daisy
<<: *master
+ - baremetal:
+ slave-label: daisy-baremetal
+ installer: daisy
+ <<: *euphrates
+ - virtual:
+ slave-label: daisy-virtual
+ installer: daisy
+ <<: *euphrates
# netvirt 3rd party ci
- virtual:
slave-label: odl-netvirt-virtual
- zte-pod1:
slave-label: '{pod}'
installer: fuel
- <<: *danube
+ <<: *euphrates
- zte-pod2:
slave-label: '{pod}'
- installer: fuel
+ installer: daisy
<<: *master
+ - zte-pod2:
+ slave-label: '{pod}'
+ installer: daisy
+ <<: *euphrates
- zte-pod3:
slave-label: '{pod}'
- installer: fuel
+ installer: daisy
<<: *master
- zte-pod3:
slave-label: '{pod}'
- installer: fuel
- <<: *danube
+ installer: daisy
+ <<: *euphrates
# PODs for verify jobs triggered by each patch upload
# - ool-virtual1:
# slave-label: '{pod}'
wrappers:
- build-name:
- name: '$BUILD_NUMBER Suite: $FUNCTEST_SUITE_NAME Scenario: $DEPLOY_SCENARIO'
+ name: '$BUILD_NUMBER Suite: $FUNCTEST_MODE Scenario: $DEPLOY_SCENARIO'
- timeout:
timeout: '{job-timeout}'
abort: true
name: functest-daily-parameter
parameters:
- string:
- name: FUNCTEST_SUITE_NAME
+ name: FUNCTEST_MODE
default: 'daily'
description: "Daily suite name to run"
- parameter:
name: functest-arm-daily-parameter
parameters:
- string:
- name: FUNCTEST_SUITE_NAME
+ name: FUNCTEST_MODE
default: 'arm-daily'
description: "Daily suite name (Aarch64) to run"
- parameter:
name: functest-suite-parameter
parameters:
+ - choice:
+ name: FUNCTEST_MODE
+ choices:
+ - 'tier'
+ - 'testcase'
+ default: 'tier'
+ description: "Test case or Tier to be run"
- choice:
name: FUNCTEST_SUITE_NAME
choices:
- 'rally_sanity'
- 'odl'
- 'odl_netvirt'
- - 'onos'
- 'snaps_smoke'
- 'refstack_defcore'
- 'promise'
- 'cloudify_vrouter'
- 'orchestra_openims'
- 'orchestra_clearwaterims'
+ default: 'connection_check'
+ - choice:
+ name: FUNCTEST_TIER
+ choices:
+ - 'healthcheck'
+ - 'smoke'
+ - 'features'
+ - 'components'
+ - 'vnf'
+ default: 'healthcheck'
- string:
name: TESTCASE_OPTIONS
default: ''
- 'functest-cleanup'
- 'functest-daily'
- 'functest-store-results'
+ - 'functest-exit'
- builder:
name: functest-arm-daily-builder
name: functest-suite-builder
builders:
- 'functest-cleanup'
- - 'set-functest-env'
+ - 'set-functest-env-alpine'
- 'functest-suite'
- 'functest-store-results'
- 'functest-exit'
- 'set-functest-env-alpine'
- 'functest-daily'
- 'functest-store-results'
+ - 'functest-exit'
- builder:
name: functest-daily
name: functest-suite
builders:
- shell:
- !include-raw: ./functest-suite.sh
+ !include-raw:
+ - ./functest-alpine.sh
- builder:
name: set-functest-env
set +e
[[ "$PUSH_RESULTS_TO_DB" == "true" ]] && flags+="-r"
-if [ "$BRANCH" == 'master' ]; then
- cmd="run_tests -t all ${flags}"
-else
- cmd="python ${FUNCTEST_REPO_DIR}/functest/ci/run_tests.py -t all ${flags}"
-fi
+cmd="run_tests -t all ${flags}"
container_id=$(docker ps -a | grep opnfv/functest | awk '{print $1}' | head -1)
docker exec $container_id $cmd
branch: '{stream}'
gs-pathname: ''
disabled: false
- - danube:
+ - euphrates:
branch: 'stable/{stream}'
gs-pathname: '/{stream}'
- disabled: true
+ disabled: false
phase:
- 'unit-tests-and-docs':
tests=($(echo $FUNCTEST_SUITE_NAME | tr "," "\n"))
for test in ${tests[@]}; do
- if [ "$BRANCH" == 'master' ]; then
- cmd="run_tests -t $test"
- else
- cmd="python /home/opnfv/repos/functest/functest/ci/run_tests.py -t $test"
- fi
+ cmd="run_tests -t $test"
docker exec $container_id $cmd
let global_ret_val+=$?
done
gs-pathname: ''
docker-tag: 'latest'
disabled: false
- danube: &danube
- stream: danube
+ euphrates: &euphrates
+ stream: euphrates
branch: 'stable/{stream}'
gs-pathname: '/{stream}'
docker-tag: 'stable'
- disabled: true
+ disabled: false
#--------------------------------
# POD, INSTALLER, AND BRANCH MAPPING
#--------------------------------
- baremetal:
slave-label: fuel-baremetal
installer: fuel
- <<: *danube
+ <<: *euphrates
- virtual:
slave-label: fuel-virtual
installer: fuel
- <<: *danube
+ <<: *euphrates
#--------------------------------
jobs:
- 'functest-{installer}-{pod}-weekly-{stream}'
exit 1
fi
-if [ "$BRANCH" == 'master' ]; then
- cmd="prepare_env start"
-else
- cmd="python ${FUNCTEST_REPO_DIR}/functest/ci/prepare_env.py start"
-fi
-
-
+cmd="prepare_env start"
echo "Executing command inside the docker: ${cmd}"
docker exec ${container_id} ${cmd}
- string:
name: BRIDGE
default: 'br7'
- description: 'pxe bridge for booting of Fuel master'
+ description: 'pxe bridge for booting of Daisy master'
- parameter:
name: 'zte-pod3-defaults'
name: GIT_BASE
default: https://gerrit.opnfv.org/gerrit/$PROJECT
description: 'Git URL to use on this Jenkins Slave'
+ - string:
+ name: INSTALLER_IP
+ default: '10.20.0.2'
+ description: 'IP of the installer'
- string:
name: BRIDGE
default: 'br0'
- description: 'pxe bridge for booting of Fuel master'
+ description: 'pxe bridge for booting of Daisy master'
- parameter:
name: zte-pod4-defaults
branch: '{stream}'
gs-pathname: ''
disabled: false
- - danube:
+ - euphrates:
branch: 'stable/{stream}'
gs-pathname: '/{stream}'
disabled: false
# -------------------------------
# BRANCH ANCHORS
# -------------------------------
- master: &master
- stream: master
- branch: '{stream}'
- disabled: false
- gs-pathname: ''
+ euphrates: &euphrates
+ stream: euphrates
+ branch: 'stable/{stream}'
+ disabled: false
+ gs-pathname: '/{stream}'
# -------------------------------
# POD, INSTALLER, AND BRANCH MAPPING
# -------------------------------
pod:
- baremetal:
slave-label: joid-baremetal
- <<: *master
- - virtual:
- slave-label: joid-virtual
- <<: *master
- # -------------------------------
- # None-CI PODs
- # -------------------------------
- - orange-pod1:
- slave-label: orange-pod1
- <<: *master
- - cengn-pod1:
- slave-label: cengn-pod1
- <<: *master
+ <<: *euphrates
+
# -------------------------------
# scenarios
# -------------------------------
auto-trigger-name: 'joid-{scenario}-{pod}-{stream}-trigger'
- 'os-odl_l2-nofeature-ha':
auto-trigger-name: 'daily-trigger-disabled'
- - 'os-onos-nofeature-ha':
- auto-trigger-name: 'daily-trigger-disabled'
- 'os-odl_l2-nofeature-noha':
auto-trigger-name: 'daily-trigger-disabled'
- - 'os-onos-nofeature-noha':
- auto-trigger-name: 'daily-trigger-disabled'
- - 'os-onos-sfc-ha':
- auto-trigger-name: 'daily-trigger-disabled'
- 'os-ocl-nofeature-ha':
- auto-trigger-name: 'daily-trigger-disabled'
+ auto-trigger-name: 'joid-{scenario}-{pod}-{stream}-trigger'
- 'os-ocl-nofeature-noha':
- auto-trigger-name: 'daily-trigger-disabled'
+ auto-trigger-name: 'joid-{scenario}-{pod}-{stream}-trigger'
- 'k8-nosdn-nofeature-noha':
auto-trigger-name: 'daily-trigger-disabled'
- 'k8-nosdn-lb-noha':
build-step-failure-threshold: 'never'
failure-threshold: 'never'
unstable-threshold: 'FAILURE'
-# 1.dovetail only master by now, not sync with A/B/C branches
+# 1.dovetail only euphrates by now, not sync with A/B/C branches
# 2.here the stream means the SUT stream, dovetail stream is defined in
# its own job
# 3.only debug testsuite here(includes basic testcase,
########################
# trigger macros
########################
-# os-nosdn-nofeature-ha trigger - branch: master
+# os-nosdn-nofeature-ha trigger - branch: euphrates
- trigger:
- name: 'joid-os-nosdn-nofeature-ha-baremetal-master-trigger'
+ name: 'joid-os-nosdn-nofeature-ha-baremetal-euphrates-trigger'
triggers:
- timed: '5 2 * * *'
+# os-odl_l2-nofeature-ha trigger - branch: euphrates
- trigger:
- name: 'joid-os-nosdn-nofeature-ha-virtual-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-nosdn-nofeature-ha-orange-pod1-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-nosdn-nofeature-ha-cengn-pod1-master-trigger'
- triggers:
- - timed: ''
-# os-odl_l2-nofeature-ha trigger - branch: master
-- trigger:
- name: 'joid-os-odl_l2-nofeature-ha-baremetal-master-trigger'
+ name: 'joid-os-odl_l2-nofeature-ha-baremetal-euphrates-trigger'
triggers:
- timed: '5 7 * * *'
+# os-nosdn-lxd-noha trigger - branch: euphrates
- trigger:
- name: 'joid-os-odl_l2-nofeature-ha-virtual-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-odl_l2-nofeature-ha-orange-pod1-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-odl_l2-nofeature-ha-cengn-pod1-master-trigger'
- triggers:
- - timed: ''
-# os-onos-nofeature-ha trigger - branch: master
-- trigger:
- name: 'joid-os-onos-nofeature-ha-baremetal-master-trigger'
- triggers:
- - timed: '5 12 * * *'
-- trigger:
- name: 'joid-os-onos-nofeature-ha-virtual-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-onos-nofeature-ha-orange-pod1-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-onos-nofeature-ha-cengn-pod1-master-trigger'
- triggers:
- - timed: ''
-# os-onos-sfc-ha trigger - branch: master
-- trigger:
- name: 'joid-os-onos-sfc-ha-baremetal-master-trigger'
- triggers:
- - timed: '5 17 * * *'
-- trigger:
- name: 'joid-os-onos-sfc-ha-virtual-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-onos-sfc-ha-orange-pod1-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-onos-sfc-ha-cengn-pod1-master-trigger'
- triggers:
- - timed: ''
-# os-nosdn-lxd-noha trigger - branch: master
-- trigger:
- name: 'joid-os-nosdn-lxd-noha-baremetal-master-trigger'
+ name: 'joid-os-nosdn-lxd-noha-baremetal-euphrates-trigger'
triggers:
- timed: '5 22 * * *'
+# os-nosdn-lxd-ha trigger - branch: euphrates
- trigger:
- name: 'joid-os-nosdn-lxd-noha-virtual-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-nosdn-lxd-noha-orange-pod1-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-nosdn-lxd-noha-cengn-pod1-master-trigger'
- triggers:
- - timed: ''
-# os-nosdn-lxd-ha trigger - branch: master
-- trigger:
- name: 'joid-os-nosdn-lxd-ha-baremetal-master-trigger'
+ name: 'joid-os-nosdn-lxd-ha-baremetal-euphrates-trigger'
triggers:
- timed: '5 10 * * *'
+# os-nosdn-nofeature-noha trigger - branch: euphrates
- trigger:
- name: 'joid-os-nosdn-lxd-ha-virtual-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-nosdn-lxd-ha-orange-pod1-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-nosdn-lxd-ha-cengn-pod1-master-trigger'
- triggers:
- - timed: ''
-# os-nosdn-nofeature-noha trigger - branch: master
-- trigger:
- name: 'joid-os-nosdn-nofeature-noha-baremetal-master-trigger'
+ name: 'joid-os-nosdn-nofeature-noha-baremetal-euphrates-trigger'
triggers:
- timed: '5 4 * * *'
+# k8-nosdn-nofeature-noha trigger - branch: euphrates
- trigger:
- name: 'joid-os-nosdn-nofeature-noha-virtual-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-nosdn-nofeature-noha-orange-pod1-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-nosdn-nofeature-noha-cengn-pod1-master-trigger'
- triggers:
- - timed: ''
-# k8-nosdn-nofeature-noha trigger - branch: master
-- trigger:
- name: 'joid-k8-nosdn-nofeature-noha-baremetal-master-trigger'
+ name: 'joid-k8-nosdn-nofeature-noha-baremetal-euphrates-trigger'
triggers:
- timed: '5 15 * * *'
+# k8-nosdn-lb-noha trigger - branch: euphrates
- trigger:
- name: 'joid-k8-nosdn-nofeature-noha-virtual-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-k8-nosdn-nofeature-noha-orange-pod1-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-k8-nosdn-nofeature-noha-cengn-pod1-master-trigger'
- triggers:
- - timed: ''
-# k8-nosdn-lb-noha trigger - branch: master
-- trigger:
- name: 'joid-k8-nosdn-lb-noha-baremetal-master-trigger'
+ name: 'joid-k8-nosdn-lb-noha-baremetal-euphrates-trigger'
triggers:
- timed: '5 20 * * *'
+# k8-ovn-lb-noha trigger - branch: euphrates
- trigger:
- name: 'joid-k8-nosdn-lb-noha-virtual-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-k8-nosdn-lb-noha-orange-pod1-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-k8-nosdn-lb-noha-cengn-pod1-master-trigger'
- triggers:
- - timed: ''
-# k8-ovn-lb-noha trigger - branch: master
-- trigger:
- name: 'joid-k8-ovn-lb-noha-baremetal-master-trigger'
+ name: 'joid-k8-ovn-lb-noha-baremetal-euphrates-trigger'
triggers:
- timed: '5 17 * * *'
+# os-nosdn-openbaton-ha trigger - branch: euphrates
- trigger:
- name: 'joid-k8-ovn-lb-noha-virtual-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-k8-ovn-lb-noha-orange-pod1-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-k8-ovn-lb-noha-cengn-pod1-master-trigger'
- triggers:
- - timed: ''
-
-# os-nosdn-openbaton-ha trigger - branch: master
-- trigger:
- name: 'joid-os-nosdn-openbaton-ha-baremetal-master-trigger'
+ name: 'joid-os-nosdn-openbaton-ha-baremetal-euphrates-trigger'
triggers:
- timed: '5 25 * * *'
+# os-ocl-nofeature-ha trigger - branch: euphrates
- trigger:
- name: 'joid-os-nosdn-openbaton-ha-virtual-master-trigger'
- triggers:
- - timed: ''
-- trigger:
- name: 'joid-os-nosdn-openbaton-ha-orange-pod1-master-trigger'
+ name: 'joid-os-ocl-nofeature-ha-baremetal-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '5 13 * * *'
+# os-ocl-nofeature-ha trigger - branch: euphrates
- trigger:
- name: 'joid-os-nosdn-openbaton-ha-cengn-pod1-master-trigger'
+ name: 'joid-os-ocl-nofeature-noha-baremetal-euphrates-trigger'
triggers:
- - timed: ''
+ - timed: '5 17 * * *'
- master:
branch: '{stream}'
gs-pathname: ''
- disabled: false
- - danube:
+ - euphrates:
branch: 'stable/{stream}'
gs-pathname: '/{stream}'
- disabled: true
#####################################
# patch verification phases
#####################################
phase:
- 'build':
slave-label: 'opnfv-build-ubuntu'
+ disabled: false
- 'test':
slave-label: 'intel-pod10'
+ disabled: false
#####################################
# patch verification phases
#####################################
- master:
branch: '{stream}'
gs-pathname: ''
+ - euphrates:
+ branch: 'stable/{stream}'
+ gs-pathname: '/{stream}'
- job-template:
name: 'moon-verify-{stream}'
current-parameters: false
predefined-parameters: |
DEPLOY_SCENARIO=os-nosdn-openo-ha
+ FUNCTEST_MODE=testcase
FUNCTEST_SUITE_NAME=opera_vims
node-parameters: true
kill-phase-on: NEVER
current-parameters: false
predefined-parameters: |
DEPLOY_SCENARIO=os-nosdn-openbaton-ha
+ FUNCTEST_MODE=testcase
FUNCTEST_SUITE_NAME=orchestra_ims
node-parameters: true
kill-phase-on: NEVER
current-parameters: false
predefined-parameters: |
DEPLOY_SCENARIO=os-ovn-nofeature-ha
+ FUNCTEST_MODE=testcase
FUNCTEST_SUITE_NAME=ovn4nfv_test_suite
node-parameters: true
kill-phase-on: NEVER
branch: '{stream}'
gs-pathname: ''
disabled: false
+ - euphrates:
+ branch: 'stable/{stream}'
+ gs-pathname: '/{stream}'
+ disabled: false
################################
## job templates
branch: '{stream}'
gs-pathname: ''
docker-tag: latest
+ euphrates: &euphrates
+ stream: euphrates
+ branch: 'stable/{stream}'
+ gs-pathname: '{stream}'
+ docker-tag: 'stable'
# -------------------------------
# JOB VARIABLES
installer: apex
pod: zte-pod4
<<: *master
+ - compute:
+ installer: apex
+ pod: zte-pod4
+ <<: *euphrates
+ - storage:
+ installer: apex
+ pod: zte-pod4
+ <<: *euphrates
# -------------------------------
# JOB LIST
- job-template:
name: 'qtip-{qpi}-{installer}-{stream}'
disabled: false
+
parameters:
- project-parameter:
project: '{project}'
- string:
name: TEST_SUITE
default: '{qpi}'
+ - string:
+ name: TESTAPI_URL
+ default: 'http://testresults.opnfv.org/test/api/v1'
+ - string:
+ name: OPNFV_RELEASE
+ default: '{stream}'
scm:
- git-scm
+ wrappers:
+ - timeout:
+ elastic-percentage: 150
+ elastic-default-timeout: 30
+ abort: true
+ type: elastic
+ - timestamps
+
triggers:
- 'qtip-daily'
project: qtip
jobs:
- 'qtip-verify-{stream}'
- - 'qtip-review-notebook-{stream}'
- - 'qtip-merge-{stream}'
+ - 'qtip-verify-notebook-{stream}'
+ - 'qtip-merged-notebook-{stream}'
stream:
- master:
branch: '{stream}'
gs-pathname: ''
disabled: false
- - danube:
+ - euphrates:
branch: 'stable/{stream}'
gs-pathname: '/{stream}'
disabled: false
# upload juypter notebook to artifacts for review
- job-template:
- name: 'qtip-review-notebook-{stream}'
+ name: 'qtip-verify-notebook-{stream}'
disabled: '{obj:disabled}'
disable-strict-forbidden-file-verification: 'true'
file-paths:
- compare-type: ANT
- pattern: 'examples/**'
+ pattern: '**/*.ipynb'
builders:
- upload-under-review-notebooks-to-opnfv-artifacts
- report-build-result-to-gerrit
- job-template:
- name: 'qtip-merge-{stream}'
+ name: 'qtip-merged-notebook-{stream}'
disabled: '{obj:disabled}'
branch-pattern: '**/{branch}'
file-paths:
- compare-type: ANT
- pattern: examples/**
+ pattern: '**/*ipynb'
builders:
- remove-old-docs-from-opnfv-artifacts
export PATH=$PATH:/usr/local/bin/
[[ $GERRIT_CHANGE_NUMBER =~ .+ ]]
- [[ -d examples ]] || exit 0
echo
echo "###########################"
gs_path="$gs_base/$GERRIT_CHANGE_NUMBER"
local_path="upload/$GERRIT_CHANGE_NUMBER"
- mkdir -p upload
- cp -r examples "$local_path"
+ mkdir -p $local_path
+
+ git diff HEAD~1 --name-only | grep -E ".+\.ipynb$" | xargs -I '{}' cp '{}' $local_path
gsutil -m cp -r "$local_path" "gs://$gs_base/"
echo "Document link(s):" >> gerrit_comment.txt
stream: master
branch: '{stream}'
disabled: false
- danube: &danube
- stream: danube
+ euphrates: &euphrates
+ stream: euphrates
branch: 'stable/{stream}'
disabled: false
functest-arm-receivers: &functest-arm-receivers
receivers: >
cristina.pauna@enea.com
alexandru.avadanii@enea.com
+ delia.popescu@enea.com
dovetail-arm-receivers: &dovetail-arm-receivers
receivers: >
cristina.pauna@enea.com
alexandru.avadanii@enea.com
alexandru.nemes@enea.com
catalina.focsa@enea.com
+ delia.popescu@enea.com
other-receivers: &other-receivers
receivers: ''
project: 'yardstick'
<<: *master
<<: *yardstick-arm-receivers
- # projects with jobs for stable
+ # projects with jobs for stable/euphrates
+ - 'functest':
+ project: 'functest'
+ <<: *euphrates
+ <<: *functest-arm-receivers
+ - 'dovetail':
+ project: 'dovetail'
+ <<: *euphrates
+ <<: *dovetail-arm-receivers
+ - 'storperf-master':
+ project: 'storperf'
+ dockerdir: 'docker/storperf-master'
+ dockerfile: 'Dockerfile'
+ docker_repo_name: 'opnfv/storperf-master'
+ arch_tag: 'aarch64'
+ <<: *euphrates
+ <<: *storperf-arm-receivers
+ - 'storperf-graphite':
+ project: 'storperf'
+ dockerdir: 'docker/storperf-graphite'
+ dockerfile: 'Dockerfile'
+ docker_repo_name: 'opnfv/storperf-graphite'
+ arch_tag: 'aarch64'
+ <<: *euphrates
+ <<: *storperf-arm-receivers
+ - 'storperf-httpfrontend':
+ project: 'storperf'
+ dockerdir: 'docker/storperf-httpfrontend'
+ dockerfile: 'Dockerfile'
+ docker_repo_name: 'opnfv/storperf-httpfrontend'
+ arch_tag: 'aarch64'
+ <<: *euphrates
+ <<: *storperf-arm-receivers
+ - 'storperf-reporting':
+ project: 'storperf'
+ dockerdir: 'docker/storperf-reporting'
+ dockerfile: 'Dockerfile'
+ docker_repo_name: 'opnfv/storperf-reporting'
+ arch_tag: 'aarch64'
+ <<: *euphrates
+ <<: *storperf-arm-receivers
+ - 'storperf-swaggerui':
+ project: 'storperf'
+ dockerdir: 'docker/storperf-swaggerui'
+ dockerfile: 'Dockerfile'
+ docker_repo_name: 'opnfv/storperf-swaggerui'
+ arch_tag: 'aarch64'
+ <<: *euphrates
+ <<: *storperf-arm-receivers
+ - 'yardstick':
+ project: 'yardstick'
+ <<: *euphrates
+ <<: *yardstick-arm-receivers
jobs:
- '{dockerrepo}-docker-build-arm-push-{stream}'
default: "{arch_tag}"
description: "If set, this value will be added to the docker image tag"
+ properties:
+ - throttle:
+ max-per-node: 1
+ option: 'project'
+
scm:
- git-scm
echo
count=30 # docker build jobs might take up to ~30 min
-while [[ -n `ps -ef|grep 'docker build'|grep -v grep` ]]; do
- echo "Build in progress. Waiting..."
+while [[ -n `ps -ef| grep 'docker build' | grep $DOCKER_REPO_NAME | grep -v grep` ]]; do
+ echo "Build or cleanup of $DOCKER_REPO_NAME in progress. Waiting..."
sleep 60
count=$(( $count - 1 ))
if [ $count -eq 0 ]; then
stream: danube
branch: 'stable/{stream}'
disabled: false
+ euphrates: &euphrates
+ stream: euphrates
+ branch: 'stable/{stream}'
+ disabled: false
functest-receivers: &functest-receivers
receivers: >
- jose.lausuch@ericsson.com morgan.richomme@orange.com
+ jalausuch@suse.com morgan.richomme@orange.com
cedric.ollivier@orange.com feng.xiaowei@zte.com.cn
- yaohelan@huawei.com helanyao@gmail.com
- juha.kosonen@nokia.com
+ juha.kosonen@nokia.com wangwulin@huawei.com
storperf-receivers: &storperf-receivers
receivers: >
mark.beierl@emc.com
project: 'yardstick'
<<: *master
<<: *other-receivers
- # projects with jobs for stable
+ # projects with jobs for Danube
+ - 'qtip':
+ project: 'qtip'
+ <<: *euphrates
+ <<: *other-receivers
+ - 'yardstick':
+ project: 'yardstick'
+ <<: *euphrates
+ <<: *other-receivers
+ # projects with jobs for euphrates
- 'bottlenecks':
project: 'bottlenecks'
- <<: *danube
+ <<: *euphrates
<<: *other-receivers
- 'functest':
project: 'functest'
- <<: *danube
+ <<: *euphrates
<<: *functest-receivers
- - 'qtip':
- project: 'qtip'
- <<: *danube
- <<: *other-receivers
- - 'storperf':
+ - 'storperf-master':
project: 'storperf'
- <<: *danube
- <<: *other-receivers
- - 'yardstick':
- project: 'yardstick'
- <<: *danube
+ dockerdir: 'docker/storperf-master'
+ arch_tag: 'x86_64'
+ <<: *euphrates
+ <<: *storperf-receivers
+ - 'storperf-graphite':
+ project: 'storperf'
+ dockerdir: 'docker/storperf-graphite'
+ arch_tag: 'x86_64'
+ <<: *euphrates
+ <<: *storperf-receivers
+ - 'storperf-httpfrontend':
+ project: 'storperf'
+ dockerdir: 'docker/storperf-httpfrontend'
+ arch_tag: 'x86_64'
+ <<: *euphrates
+ <<: *storperf-receivers
+ - 'storperf-reporting':
+ project: 'storperf'
+ dockerdir: 'docker/storperf-reporting'
+ arch_tag: 'x86_64'
+ <<: *euphrates
+ <<: *storperf-receivers
+ - 'storperf-swaggerui':
+ project: 'storperf'
+ dockerdir: 'docker/storperf-swaggerui'
+ arch_tag: 'x86_64'
+ <<: *euphrates
+ <<: *storperf-receivers
+ - 'nfvbench':
+ project: 'nfvbench'
+ <<: *euphrates
<<: *other-receivers
jobs:
default: "{arch_tag}"
description: "If set, this value will be added to the docker image tag as a prefix"
+ properties:
+ - throttle:
+ max-per-node: 1
+ option: 'project'
+
scm:
- git-scm
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
#test for non-ascii characters, these can pass the test and end up breaking things in production
-for x in $(find . -name *\.yml -or -name *\.yaml); do
+for x in $(find . -name *\.yml -or -name *\.yaml -or -name *\.sh); do
if LC_ALL=C grep -q '[^[:print:][:space:]]' "$x"; then
echo "file "$x" contains non-ascii characters"
+++ /dev/null
-#!/bin/bash
-set +x
-set -o errexit
-for lab_configs in $(find labs/ -name 'pod*.yaml'); do
- while IFS= read -r jinja_templates; do
- echo "./utils/generate_config.py -y $lab_configs -j $jinja_templates"
- ./utils/generate_config.py -y $lab_configs -j $jinja_templates
- done < <(find installers/ -name '*.j2')
-done
+---
########################
-# Job configuration to validate jninja2 files
+# Job configuration to validate jinja2 files
########################
- project:
project: 'securedlab'
jobs:
- - 'validate-jinja2-templates-{stream}'
+ - 'validate-jinja2-templates-{stream}'
stream:
- - master:
- branch: '{stream}'
- disabled: false
- - danube:
- branch: 'stable/{stream}'
- disabled: false
+ - master:
+ branch: '{stream}'
+ disabled: false
+ - euphrates:
+ branch: 'stable/{stream}'
+ disabled: false
########################
# job templates
concurrent: true
parameters:
- - project-parameter:
- project: $GERRIT_PROJECT
- branch: '{branch}'
- - node:
- name: SLAVE_NAME
- description: Slave to execute jnija template test
- default-slaves:
- - lf-build1
- allowed-multiselect: true
- ignore-offline-nodes: true
+ - project-parameter:
+ project: $GERRIT_PROJECT
+ branch: '{branch}'
+ - node:
+ name: SLAVE_NAME
+ description: Slave to execute jnija template test
+ default-slaves:
+ - lf-build1
+ allowed-multiselect: true
+ ignore-offline-nodes: true
scm:
- - git-scm-gerrit
+ - git-scm-gerrit
triggers:
- - gerrit:
- server-name: 'gerrit.opnfv.org'
- trigger-on:
- - patchset-created-event:
- exclude-drafts: 'false'
- exclude-trivial-rebase: 'false'
- exclude-no-code-change: 'false'
- - draft-published-event
- - comment-added-contains-event:
- comment-contains-value: 'recheck'
- - comment-added-contains-event:
- comment-contains-value: 'reverify'
- projects:
- - project-compare-type: 'REG_EXP'
- project-pattern: '{project}'
- branches:
- - branch-compare-type: 'ANT'
- branch-pattern: '**/{branch}'
- file-paths:
- - compare-type: ANT
- pattern: 'utils/generate_config.yml'
- - compare-type: ANT
- pattern: '**/*.jinja2'
- - compare-type: ANT
- pattern: '**/*.yaml'
- skip-vote:
- successful: true
- failed: true
- unstable: true
- notbuilt: true
+ - gerrit:
+ server-name: 'gerrit.opnfv.org'
+ trigger-on:
+ - patchset-created-event:
+ exclude-drafts: 'false'
+ exclude-trivial-rebase: 'false'
+ exclude-no-code-change: 'false'
+ - draft-published-event
+ - comment-added-contains-event:
+ comment-contains-value: 'recheck'
+ - comment-added-contains-event:
+ comment-contains-value: 'reverify'
+ projects:
+ - project-compare-type: 'REG_EXP'
+ project-pattern: '{project}'
+ branches:
+ - branch-compare-type: 'ANT'
+ branch-pattern: '**/{branch}'
+ file-paths:
+ - compare-type: ANT
+ pattern: '**/*.yaml'
+ - compare-type: ANT
+ pattern: 'check-jinja2.sh'
+ skip-vote:
+ successful: true
+ failed: true
+ unstable: true
+ notbuilt: true
builders:
- - check-jinja
+ - check-jinja
- builder:
name: check-jinja
builders:
- - shell:
- !include-raw-escape: ./check-jinja2.sh
+ - shell: |
+ $WORKSPACE/check-jinja2.sh
branch: '{stream}'
gs-pathname: ''
disabled: false
- - danube:
+ - euphrates:
branch: 'stable/{stream}'
gs-pathname: '/{stream}'
- disabled: true
+ disabled: false
- job-template:
name: 'sfc-verify-{stream}'
name: sfc-unit-tests
builders:
- shell: |
- cd $WORKSPACE && yamllint $(git ls-tree -r HEAD --name-only | egrep 'yml$|yaml$')
+ cd $WORKSPACE && yamllint $(git ls-tree -r HEAD --name-only | egrep 'yml$|yaml$' | egrep -v 'scenarios')
branch: '{stream}'
gs-pathname: ''
docker-tag: 'latest'
+ euphrates: &euphrates
+ stream: euphrates
+ branch: 'stable/{stream}'
+ gs-pathname: '/{stream}'
+ disabled: false
+ docker-tag: 'stable'
#--------------------------------
# POD, INSTALLER, AND BRANCH MAPPING
#--------------------------------
slave-label: apex-baremetal-master
installer: apex
<<: *master
+ - baremetal:
+ slave-label: apex-baremetal-master
+ installer: apex
+ <<: *euphrates
## armband CI PODs
# - armband-baremetal:
# slave-label: armband-baremetal
gs-pathname: ''
disabled: false
docker-tag: 'latest'
+ - euphrates:
+ branch: 'stable/{stream}'
+ gs-pathname: '/{stream}'
+ disabled: false
+ docker-tag: 'stable'
#--------------------------------
# patch verification phases
#--------------------------------
zoom-coverage-chart: "true"
targets:
- files:
- healthy: 10
- unhealthy: 20
- failing: 30
+ healthy: 60
+ unhealthy: 50
+ failing: 40
- method:
- healthy: 50
- unhealthy: 40
- failing: 30
+ healthy: 60
+ unhealthy: 50
+ failing: 40
- email-jenkins-admins-on-failure
- publisher:
name: 'storperf-verify-build-x86_64-publishers-macro'
gs-pathname: ''
disabled: false
docker-tag: 'latest'
- - danube:
+ - euphrates:
branch: 'stable/{stream}'
gs-pathname: '/{stream}'
disabled: false
gs-pathname: ''
disabled: false
slave-label: 'opnfv-build-ubuntu'
- - danube:
+ - euphrates:
branch: 'stable/{stream}'
gs-pathname: '/{stream}'
disabled: false
predefined-parameters: |
DISTRO={distro}
DEPLOY_SCENARIO=os-nosdn-nofeature-noha
- FUNCTEST_SUITE_NAME=healthcheck
+ FUNCTEST_MODE=tier
+ FUNCTEST_TIER=healthcheck
node-parameters: true
kill-phase-on: NEVER
abort-all-job: false
- string:
name: OPNFV_RELENG_DEV_PATH
default: $WORKSPACE/releng-xci
+ - string:
+ name: FUNCTEST_MODE
+ default: 'tier'
- string:
name: FUNCTEST_SUITE_NAME
default: 'healthcheck'
- string:
name: INSTALLER_TYPE
default: 'osa'
+ - string:
+ name: FUNCTEST_MODE
+ default: 'daily'
- string:
name: FUNCTEST_SUITE_NAME
default: 'daily'
# distros
#--------------------------------
distro:
- - 'xenial':
+ - ubuntu:
disabled: false
- - 'centos7':
- disabled: true
- - 'suse':
- disabled: true
+ successful: false
+ failed: false
+ unstable: false
+ notbuilt: false
+ - centos:
+ disabled: false
+ successful: true
+ failed: true
+ unstable: true
+ notbuilt: true
+ - opensuse:
+ disabled: false
+ successful: false
+ failed: false
+ unstable: false
+ notbuilt: false
#--------------------------------
# type
#--------------------------------
#--------------------------------
jobs:
- 'xci-verify-{distro}-{type}-{stream}'
- - 'xci-verify-{phase}-{type}-{stream}'
+ - 'xci-verify-{distro}-{phase}-{type}-{stream}'
#--------------------------------
# job templates
#--------------------------------
- build-blocker:
use-build-blocker: true
blocking-jobs:
- - 'xci-verify-.*'
- - 'bifrost-verify-.*'
- - 'bifrost-periodic-.*'
- - 'osa-verify-.*'
- - 'osa-periodic-.*'
+ - 'xci-verify-{distro}-.*'
+ - 'bifrost-verify-{distro}-.*'
+ - 'bifrost-periodic-{distro}-.*'
+ - 'osa-verify-{distro}-.*'
+ - 'osa-periodic-{distro}-.*'
block-level: 'NODE'
+ - throttle:
+ max-per-node: 2
+ max-total: 10
+ categories:
+ - xci-verify-virtual
+ option: category
wrappers:
- ssh-agent-wrapper
- compare-type: ANT
pattern: 'docs/**'
readable-message: true
+ skip-vote:
+ successful: '{obj:successful}'
+ failed: '{obj:failed}'
+ unstable: '{obj:unstable}'
+ notbuilt: '{obj:notbuilt}'
parameters:
- project-parameter:
branch: '{branch}'
- label:
name: SLAVE_LABEL
- default: 'xci-virtual-{distro}'
+ default: 'xci-virtual'
- string:
name: CLEAN_DIB_IMAGES
default: 'true'
name: deploy
condition: SUCCESSFUL
projects:
- - name: 'xci-verify-deploy-{type}-{stream}'
+ - name: 'xci-verify-{distro}-deploy-{type}-{stream}'
current-parameters: true
predefined-parameters: |
DISTRO={distro}
DEPLOY_SCENARIO=os-nosdn-nofeature-noha
CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES
+ GERRIT_BRANCH=$GERRIT_BRANCH
+ GERRIT_REFSPEC=$GERRIT_REFSPEC
+ GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
+ GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
node-parameters: true
kill-phase-on: FAILURE
abort-all-job: true
name: healthcheck
condition: SUCCESSFUL
projects:
- - name: 'xci-verify-healthcheck-{type}-{stream}'
+ - name: 'xci-verify-{distro}-healthcheck-{type}-{stream}'
current-parameters: true
predefined-parameters: |
DISTRO={distro}
DEPLOY_SCENARIO=os-nosdn-nofeature-noha
CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES
- FUNCTEST_SUITE_NAME=healthcheck
+ FUNCTEST_MODE=tier
+ FUNCTEST_TIER=healthcheck
+ GERRIT_BRANCH=$GERRIT_BRANCH
+ GERRIT_REFSPEC=$GERRIT_REFSPEC
+ GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
+ GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
node-parameters: true
kill-phase-on: NEVER
abort-all-job: true
- job-template:
- name: 'xci-verify-{phase}-{type}-{stream}'
+ name: 'xci-verify-{distro}-{phase}-{type}-{stream}'
disabled: false
- build-blocker:
use-build-blocker: true
blocking-jobs:
- - 'xci-verify-deploy-.*'
- - 'xci-verify-healthcheck-.*'
- 'bifrost-verify-.*'
- 'bifrost-periodic-.*'
- 'osa-verify-.*'
block-level: 'NODE'
parameters:
+ - string:
+ name: PROJECT
+ default: 'releng-xci'
- string:
name: DISTRO
- default: 'xenial'
+ default: 'ubuntu'
- string:
name: DEPLOY_SCENARIO
default: 'os-nosdn-nofeature-noha'
+ - string:
+ name: FUNCTEST_MODE
+ default: 'tier'
- string:
name: FUNCTEST_SUITE_NAME
default: 'healthcheck'
exit 0
fi
- # for some reason, the PATH is not set correctly
- # setting PATH for ansible stuff
- export PATH=/home/jenkins/.local/bin:$PATH
+ cd $WORKSPACE
- cd $WORKSPACE/xci
+ # The start-new-vm.sh script will copy the entire releng-xci directory
+ # so lets prepare the test script now so it can be copied by the script.
+ # Please do not move it elsewhere or you would have to move it to the VM
+ # yourself.
+ cat > xci_test.sh<<EOF
+ #!/bin/bash
+ export DISTRO=$DISTRO
+ export DEPLOY_SCENARIO=$DEPLOY_SCENARIO
+ export FUNCTEST_MODE=$FUNCTEST_MODE
+ export FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME
+ export XCI_FLAVOR=$XCI_FLAVOR
+ export CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES
+ export OPNFV_RELENG_DEV_PATH=/home/devuser/releng-xci/
+ export INSTALLER_TYPE=$INSTALLER_TYPE
+ export GIT_BASE=$GIT_BASE
+ export JENKINS_HOME=$JENKINS_HOME
+
+ cd xci
./xci-deploy.sh
+ EOF
+ chmod a+x xci_test.sh
+
+ ./xci/scripts/vm/start-new-vm.sh $DISTRO
+ - shell: |
+ #!/bin/bash
+
+ # skip the deployment if the patch doesn't impact the deployment
+ if [[ "$GERRIT_TOPIC" =~ 'skip-verify' ]]; then
+ echo "Skipping the deployment!"
+ exit 0
+ fi
+
+ ssh ${DISTRO}_xci_vm "cd releng-xci && ./xci_test.sh"
- builder:
fi
echo "Hello World!"
+ - shell: |
+ #!/bin/bash
+
+ # skip the deployment if the patch doesn't impact the deployment
+ if [[ "$GERRIT_TOPIC" =~ 'skip-verify' ]]; then
+ echo "Skipping the deployment!"
+ exit 0
+ fi
+
+ sudo virsh destroy ${DISTRO}_xci_vm
+ sudo virsh undefine ${DISTRO}_xci_vm
# this will be enabled once the xci is prepared
#- builder:
# If dev lab, credentials may not be the default ones, just provide a path to put them into docker
# replace the default one by the customized one provided by jenkins config
fi
-elif [[ ${INSTALLER_TYPE} == 'compass' && ${BRANCH} == 'master' ]]; then
+elif [[ ${INSTALLER_TYPE} == 'compass' ]]; then
cacert_file_vol="-v ${HOME}/os_cacert:/etc/yardstick/os_cacert"
echo "export OS_CACERT=/etc/yardstick/os_cacert" >> ${HOME}/opnfv-openrc.sh
rc_file_vol="-v ${HOME}/opnfv-openrc.sh:/etc/yardstick/openstack.creds"
+elif [[ ${INSTALLER_TYPE} == 'fuel' ]]; then
+ cacert_file_vol="-v ${HOME}/os_cacert:/etc/ssl/certs/mcp_os_cacert"
+ sshkey="-v ${SSH_KEY}:/root/.ssh/mcp.rsa"
else
rc_file_vol="-v ${HOME}/opnfv-openrc.sh:/etc/yardstick/openstack.creds"
fi
-e YARDSTICK_BRANCH=${BRANCH} -e BRANCH=${BRANCH} \
-e DEPLOY_SCENARIO=${DEPLOY_SCENARIO}"
+if [[ "${INSTALLER_TYPE}" == 'fuel' ]]; then
+ envs+=" -e SSH_KEY=/root/.ssh/mcp.rsa"
+fi
+
# Pull the image with correct tag
DOCKER_REPO='opnfv/yardstick'
if [ "$(uname -m)" = 'aarch64' ]; then
if not os.path.exists(dirpath):
os.makedirs(dirpath)
- def __ssh_host(self, ssh_conn, host_prefix='10.20.0'):
+ def __ssh_host(self, ssh_conn):
try:
- _, stdout, _ = ssh_conn.exec_command('hostname -I')
- hosts = stdout.readline().strip().split(' ')
- found_host = [h for h in hosts if h.startswith(host_prefix)][0]
+ _, stdout, _ = ssh_conn.exec_command('hostname')
+ found_host = stdout.readline()
return found_host
except Exception as e:
logger.error(e)
def dump_ovs_logs(self, controller_clients, compute_clients,
related_error=None, timestamp=None):
+ """
+ delete controller_clients argument because
+ that was producing an error in XCI installer.
+
+ For more information see:
+ TODO: https://jira.opnfv.org/browse/RELENG-314
+ """
+ del controller_clients
if timestamp is None:
timestamp = time.strftime("%Y%m%d-%H%M%S")
-
- clients = controller_clients + compute_clients
+ # clients = controller_clients + compute_clients
+ clients = compute_clients
for client in clients:
self.ofctl_dump_flows(client, timestamp=timestamp)
self.vsctl_show(client, timestamp=timestamp)
sudo scp $ssh_options root@$installer_ip:/home/stack/overcloudrc.v3 $dest_path
elif [ "$installer_type" == "compass" ]; then
- if [ "${BRANCH}" == "master" ]; then
- sudo docker cp compass-tasks:/opt/openrc $dest_path &> /dev/null
- sudo chown $(whoami):$(whoami) $dest_path
- sudo docker cp compass-tasks:/opt/os_cacert $os_cacert
- else
+ if [ "${BRANCH}" == "stable/danube" ]; then
verify_connectivity $installer_ip
controller_ip=$(sshpass -p'root' ssh 2>/dev/null $ssh_options root@${installer_ip} \
'mysql -ucompass -pcompass -Dcompass -e"select * from cluster;"' \
fi
info "public_ip: $public_ip"
swap_to_public $public_ip
+ else
+ sudo docker cp compass-tasks:/opt/openrc $dest_path &> /dev/null
+ sudo chown $(whoami):$(whoami) $dest_path
+ sudo docker cp compass-tasks:/opt/os_cacert $os_cacert
fi
elif [ "$installer_type" == "joid" ]; then
--- /dev/null
+import argparse
+import os
+
+from jinja2 import Environment
+
+DOCKER_COMPOSE_FILE = './docker-compose.yml'
+DOCKER_COMPOSE_TEMPLATE = """
+version: '2'
+services:
+ mongo:
+ image: mongo:3.2.1
+ container_name: opnfv-mongo
+ testapi:
+ image: opnfv/testapi:latest
+ container_name: opnfv-testapi
+ environment:
+ - mongodb_url=mongodb://mongo:27017/
+ - base_url={{ vars.base_url }}
+ ports:
+ - "{{ vars.testapi_port }}:8000"
+ links:
+ - mongo
+ reporting:
+ image: opnfv/reporting:latest
+ container_name: opnfv-reporting
+ ports:
+ - "{{ vars.reporting_port }}:8000"
+"""
+
+
+def render_docker_compose(testapi_port, reporting_port, testapi_base_url):
+ vars = {
+ "testapi_port": testapi_port,
+ "reporting_port": reporting_port,
+ "base_url": testapi_base_url,
+ }
+ yml = Environment().from_string(DOCKER_COMPOSE_TEMPLATE).render(vars=vars)
+ with open(DOCKER_COMPOSE_FILE, 'w') as f:
+ f.write(yml)
+ f.close()
+
+
+def main(args):
+ render_docker_compose(args.testapi_port,
+ args.reporting_port,
+ args.testapi_base_url)
+ os.system('docker-compose -f {} up -d'.format(DOCKER_COMPOSE_FILE))
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(description='Backup MongoDBs')
+ parser.add_argument('-tp', '--testapi-port',
+ type=int,
+ required=False,
+ default=8082,
+ help='testapi exposed port')
+ parser.add_argument('-tl', '--testapi-base-url',
+ type=str,
+ required=True,
+ help='testapi exposed base-url')
+ parser.add_argument('-rp', '--reporting-port',
+ type=int,
+ required=False,
+ default=8084,
+ help='reporting exposed port')
+
+ main(parser.parse_args())
### Functions related to checking.
function is_deploying() {
- xml=$(curl -m10 "https://build.opnfv.org/ci/job/${1}-automate-master/lastBuild/api/xml?depth=1")
+ xml=$(curl -m10 "https://build.opnfv.org/ci/job/${1}-automate-docker-deploy-master/lastBuild/api/xml?depth=1")
building=$(grep -oPm1 "(?<=<building>)[^<]+" <<< "$xml")
if [[ $building == "false" ]]
then
failed_modules=()
for module in "${modules[@]}"
do
- if is_deploying $module; then
- continue
- fi
if ! check_connectivity $module "${urls[$module]}"; then
- echo -e "$module failed"
- failed_modules+=($module)
+ if ! is_deploying $module; then
+ echo -e "$module failed"
+ failed_modules+=($module)
+ fi
fi
done
if [ ! -z "$failed_modules" ]; then
function start_container_fix() {
echo -e "Starting a container $module"
- sudo docker stop $module
- sudo docker start $module
+ sudo docker restart $module
sleep 5
if ! check_connectivity $module "${urls[$module]}"; then
echo -e "Starting an old container $module_old"
- sudo docker stop $module
- sudo docker start $module"_old"
+ sudo docker restart $module"_old"
sleep 5
fi
}
ENV HOME /home/opnfv
ENV working_dir ${HOME}/releng/utils/test/reporting
-ENV CONFIG_REPORTING_YAML ${working_dir}/reporting.yaml
+ENV CONFIG_REPORTING_YAML ${working_dir}/reporting/reporting.yaml
WORKDIR ${HOME}
# Packaged dependencies
}
location /api/ {
- http_pass http://backends/;
+ proxy_pass http://backends/;
}
location /display/ {
export PYTHONPATH="${PYTHONPATH}:./reporting"
export CONFIG_REPORTING_YAML=./reporting/reporting.yaml
-declare -a versions=(danube master)
+declare -a versions=(euphrates danube master)
declare -a projects=(functest storperf yardstick qtip vsperf bottlenecks)
project=$1
report_project $i $i "status"
sleep 5
done
- report_project "QTIP" "qtip" "status"
-
echo "Functest reporting vIMS..."
report_project "functest" "functest" "vims"
--- /dev/null
+<!DOCTYPE HTML>
+<!--
+ Phantom by HTML5 UP
+ html5up.net | @ajlkn
+ Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
+-->
+<html>
+ <head>
+ <title>Phantom by HTML5 UP</title>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <!--[if lte IE 8]><script src="3rd_party/js/ie/html5shiv.js"></script><![endif]-->
+ <link rel="stylesheet" href="3rd_party/css/main.css" />
+ <!--[if lte IE 9]><link rel="stylesheet" href="3rd_party/css/ie9.css" /><![endif]-->
+ <!--[if lte IE 8]><link rel="stylesheet" href="3rd_party/css/ie8.css" /><![endif]-->
+ </head>
+ <body>
+ <!-- Wrapper -->
+ <div id="wrapper">
+
+ <!-- Header -->
+ <header id="header">
+ <div class="inner">
+
+ <!-- Logo -->
+ <a href="index.html" class="logo">
+ <span class="symbol"><img src="img/logo.svg" alt="" /></span><span class="title">Phantom</span>
+ </a>
+
+ </div>
+ </header>
+
+ <!-- Menu -->
+ <!-- Main -->
+ <div id="main">
+ <div class="inner">
+ <header>
+ <h1>Euphrates reporting</h1>
+ </header>
+ <section class="tiles">
+ <article class="style3">
+ <span class="image">
+ <img src="img/projectIcon_functest_250x250.png" alt="" />
+ </span>
+ <a href="functest-euphrates.html">
+ <h2>Functest</h2>
+ <div class="content">
+ <p>Functional testing</p>
+ </div>
+ </a>
+ </article>
+ <article class="style2">
+ <span class="image">
+ <img src="img/projectIcon_yardstick_250x250.png" alt="" />
+ </span>
+ <a href="euphrates/yardstick/status-apex.html">
+ <h2>Yardstick</h2>
+ <div class="content">
+ <p>Qualification and performance testing</p>
+ </div>
+ </a>
+ </article>
+ <article class="style4">
+ <span class="image">
+ <img src="img/projectIcon_storperf_250x250.png" alt="" />
+ </span>
+ <a href="euphrates/storperf/status-apex.html">
+ <h2>Storperf</h2>
+ <div class="content">
+ <p>Storage testing</p>
+ </div>
+ </a>
+ </article>
+ <article class="style5">
+ <span class="image">
+ <img src="img/projectIcon_vsperf_250x250.png" alt="" />
+ </span>
+ <a href="euphrates/vsperf/status-apex.html">
+ <h2>Vsperf</h2>
+ <div class="content">
+ <p>Virtual switch testing</p>
+ </div>
+ </a>
+ </article>
+ <article class="style1">
+ <span class="image">
+ <img src="img/projectIcon_qtip_250x250.png" alt="" />
+ </span>
+ <a href="euphrates/qtip/status-apex.html">
+ <h2>Qtip</h2>
+ <div class="content">
+ <p>Benchmark as a service</p>
+ </div>
+ </a>
+ </article>
+ <article class="style6">
+ <span class="image">
+ <img src="img/projectIcon_bottlenecks_250x250.png" alt="" />
+ </span>
+ <a href="euphrates/bottlenecks/status-apex.html">
+ <h2>Bottlenecks</h2>
+ <div class="content">
+ <p>Bottleneck finder</p>
+ </div>
+ </a>
+ </article>
+ </section>
+ </div>
+ </div>
+
+ <!-- Footer -->
+ <footer id="footer">
+ <div class="inner">
+ <section>
+ <h2>OPNFV Testing Working group</h2>
+ </section>
+ <section>
+ <h2>Follow</h2>
+ <ul class="icons">
+ <li><a href="https://twitter.com/opnfv" class="icon style2 fa-twitter"><span class="label">Twitter</span></a></li>
+ <li><a href="http://git.opnfv.org" class="icon style2 fa-github"><span class="label">GitHub</span></a></li>
+ <li><a href="mailto:test-wg@list.opnfv.org" class="icon style2 fa-envelope-o"><span class="label">Email</span></a></li>
+ </ul>
+ </section>
+ <ul class="copyright">
+ <li>© Untitled. All rights reserved</li><li>Design: <a href="http://html5up.net">HTML5 UP</a></li>
+ </ul>
+ </div>
+ </footer>
+
+ </div>
+
+ <!-- Scripts -->
+ <script src="3rd_party/js/jquery.min.js"></script>
+ <script src="3rd_party/js/skel.min.js"></script>
+ <script src="3rd_party/js/util.js"></script>
+ <!--[if lte IE 8]><script src="3rd_party/js/ie/respond.min.js"></script><![endif]-->
+ <script src="3rd_party/js/main.js"></script>
+
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE HTML>
+<!--
+ Phantom by HTML5 UP
+ html5up.net | @ajlkn
+ Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
+-->
+<html>
+ <head>
+ <title>Phantom by HTML5 UP</title>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <!--[if lte IE 8]><script src="3rd_party/js/ie/html5shiv.js"></script><![endif]-->
+ <link rel="stylesheet" href="3rd_party/css/main.css" />
+ <!--[if lte IE 9]><link rel="stylesheet" href="3rd_party/css/ie9.css" /><![endif]-->
+ <!--[if lte IE 8]><link rel="stylesheet" href="3rd_party/css/ie8.css" /><![endif]-->
+ </head>
+ <body>
+ <!-- Wrapper -->
+ <div id="wrapper">
+
+ <!-- Header -->
+ <header id="header">
+ <div class="inner">
+
+ <!-- Logo -->
+ <a href="index.html" class="logo">
+ <span class="symbol"><img src="img/logo.svg" alt="" /></span><span class="title">Phantom</span>
+ </a>
+
+ </div>
+ </header>
+
+ <!-- Menu -->
+
+ <!-- Main -->
+ <div id="main">
+ <div class="inner">
+ <header>
+ <h1>Functest reporting</h1>
+ </header>
+ <section class="tiles">
+ <article class="style5">
+ <span class="image">
+ <img src="img/pic05.jpg" alt="" />
+ </span>
+ <a href="euphrates/functest/status-apex.html">
+ <h2>Status</h2>
+ <div class="content">
+ <p>Scenario status</p>
+ </div>
+ </a>
+ </article>
+ <article class="style2">
+ <span class="image">
+ <img src="img/pic02.jpg" alt="" />
+ </span>
+ <a href="euphrates/functest/vims-apex.html">
+ <h2>vIMS</h2>
+ <div class="content">
+ <p>Virtual IMS</p>
+ </div>
+ </a>
+ </article>
+ <article class="style3">
+ <span class="image">
+ <img src="img/pic03.jpg" alt="" />
+ </span>
+ <a href="euphrates/functest/tempest-apex.html">
+ <h2>Tempest</h2>
+ <div class="content">
+ <p>Tempest OpenStack suite</p>
+ </div>
+ </a>
+ </article>
+ </section>
+ </div>
+ </div>
+
+ <!-- Footer -->
+ <footer id="footer">
+ <div class="inner">
+ <section>
+ <h2>OPNFV Testing Working group</h2>
+ </section>
+ <section>
+ <h2>Follow</h2>
+ <ul class="icons">
+ <li><a href="https://twitter.com/opnfv" class="icon style2 fa-twitter"><span class="label">Twitter</span></a></li>
+ <li><a href="http://git.opnfv.org" class="icon style2 fa-github"><span class="label">GitHub</span></a></li>
+ <li><a href="mailto:test-wg@list.opnfv.org" class="icon style2 fa-envelope-o"><span class="label">Email</span></a></li>
+ </ul>
+ </section>
+ <ul class="copyright">
+ <li>© Untitled. All rights reserved</li><li>Design: <a href="http://html5up.net">HTML5 UP</a></li>
+ </ul>
+ </div>
+ </footer>
+
+ </div>
+
+ <!-- Scripts -->
+ <script src="3rd_party/js/jquery.min.js"></script>
+ <script src="3rd_party/js/skel.min.js"></script>
+ <script src="3rd_party/js/util.js"></script>
+ <!--[if lte IE 8]><script src="3rd_party/js/ie/respond.min.js"></script><![endif]-->
+ <script src="3rd_party/js/main.js"></script>
+
+ </body>
+</html>
</div>
</header>
- <!-- Menu -->
- <!--- <nav id="menu">
- <h2>Menu</h2>
- <ul>
- <li><a href="index.html">Home</a></li>
- <li><a href="colorado.html">Colorado</a></li>
- <li><a href="danube.html">Danube</a></li>
- </ul>
- </nav>
- --->
- <!-- Main -->
<div id="main">
<div class="inner">
<header>
<a href="colorado.html">
<h2>Colorado</h2>
<div class="content">
- <p>Colorado 1.0 released on the 22nd of September</p>
+ <p>Colorado 1.0 (22/09/2016)</p>
</div>
</a>
</article>
<a href="danube.html">
<h2>Danube</h2>
<div class="content">
- <p>Danube 1.0 planned on the 22nd of March</p>
+ <p>Danube 1.0 (22/03/2017)</p>
</div>
</a>
</article>
- <article class="style6">
+ <article class="style4">
<span class="image">
<img src="img/euphrates.jpg" alt="" />
</span>
- <a href="master.html">
+ <a href="euphrates.html">
<h2>Euphrates</h2>
+ <div class="content">
+ <p>Euphreates (ETA 10/2017)</p>
+ </div>
+ </a>
+ </article>
+ <article class="style6">
+ <span class="image">
+ <img src="img/misc-npc-letterblock-m-800px.png" alt="" />
+ </span>
+ <a href="master.html">
+ <h2>Master</h2>
<div class="content">
<p>Master</p>
</div>
# For all the installers
for installer in INSTALLERS:
# get scenarios results data
+ if version != 'master':
+ new_version = "stable/{}".format(version)
+ else:
+ new_version = version
scenario_results = rp_utils.getScenarios("bottlenecks",
"posca_factor_ping",
installer,
- version)
+ new_version)
LOGGER.info("scenario_results: %s", scenario_results)
scenario_stats = rp_utils.getScenarioStats(scenario_results)
import jinja2
-import testCase as tc
-import scenarioResult as sr
+import reporting.functest.testCase as tc
+import reporting.functest.scenarioResult as sr
import reporting.utils.reporting_utils as rp_utils
"""
"""
# Logger
-logger = rp_utils.getLogger("Functest-Status")
+LOGGER = rp_utils.getLogger("Functest-Status")
# Initialization
testValid = []
functest_yaml_config = rp_utils.getFunctestConfig()
-logger.info("*******************************************")
-logger.info("* *")
-logger.info("* Generating reporting scenario status *")
-logger.info("* Data retention: %s days *" % period)
-logger.info("* Log level: %s *" % log_level)
-logger.info("* *")
-logger.info("* Virtual PODs exluded: %s *" % exclude_virtual)
-logger.info("* NOHA scenarios excluded: %s *" % exclude_noha)
-logger.info("* *")
-logger.info("*******************************************")
+LOGGER.info("*******************************************")
+LOGGER.info("* *")
+LOGGER.info("* Generating reporting scenario status *")
+LOGGER.info("* Data retention: %s days *", period)
+LOGGER.info("* Log level: %s *", log_level)
+LOGGER.info("* *")
+LOGGER.info("* Virtual PODs exluded: %s *", exclude_virtual)
+LOGGER.info("* NOHA scenarios excluded: %s *", exclude_noha)
+LOGGER.info("* *")
+LOGGER.info("*******************************************")
# Retrieve test cases of Tier 1 (smoke)
config_tiers = functest_yaml_config.get("tiers")
elif tier['order'] == 2:
for case in tier['testcases']:
if case['case_name'] not in blacklist:
- testValid.append(tc.TestCase(case['case_name'],
- case['case_name'],
- case['dependencies']))
+ otherTestCases.append(tc.TestCase(case['case_name'],
+ case['case_name'],
+ case['dependencies']))
elif tier['order'] > 2:
for case in tier['testcases']:
if case['case_name'] not in blacklist:
"functest",
case['dependencies']))
-logger.debug("Functest reporting start")
+LOGGER.debug("Functest reporting start")
# For all the versions
for version in versions:
# initiate scenario file if it does not exist
if not os.path.isfile(scenario_file_name):
with open(scenario_file_name, "a") as my_file:
- logger.debug("Create scenario file: %s" % scenario_file_name)
+ LOGGER.debug("Create scenario file: %s", scenario_file_name)
my_file.write("date,scenario,installer,detail,score\n")
for installer in installers:
version)
# get nb of supported architecture (x86, aarch64)
architectures = rp_utils.getArchitectures(scenario_results)
- logger.info("Supported architectures: {}".format(architectures))
+ LOGGER.info("Supported architectures: %s", architectures)
for architecture in architectures:
- logger.info("architecture: {}".format(architecture))
+ LOGGER.info("Architecture: %s", architecture)
# Consider only the results for the selected architecture
# i.e drop x86 for aarch64 and vice versa
filter_results = rp_utils.filterArchitecture(scenario_results,
# For all the scenarios get results
for s, s_result in filter_results.items():
- logger.info("---------------------------------")
- logger.info("installer %s, version %s, scenario %s:" %
- (installer, version, s))
- logger.debug("Scenario results: %s" % s_result)
+ LOGGER.info("---------------------------------")
+ LOGGER.info("installer %s, version %s, scenario %s:",
+ installer, version, s)
+ LOGGER.debug("Scenario results: %s", s_result)
# Green or Red light for a given scenario
nb_test_runnable_for_this_scenario = 0
s_url = ""
if len(s_result) > 0:
build_tag = s_result[len(s_result)-1]['build_tag']
- logger.debug("Build tag: %s" % build_tag)
+ LOGGER.debug("Build tag: %s", build_tag)
s_url = rp_utils.getJenkinsUrl(build_tag)
if s_url is None:
s_url = "http://testresultS.opnfv.org/reporting"
- logger.info("last jenkins url: %s" % s_url)
+ LOGGER.info("last jenkins url: %s", s_url)
testCases2BeDisplayed = []
# Check if test case is runnable / installer, scenario
# for the test case used for Scenario validation
for test_case in testValid:
test_case.checkRunnable(installer, s,
test_case.getConstraints())
- logger.debug("testcase %s (%s) is %s" %
- (test_case.getDisplayName(),
- test_case.getName(),
- test_case.isRunnable))
+ LOGGER.debug("testcase %s (%s) is %s",
+ test_case.getDisplayName(),
+ test_case.getName(),
+ test_case.isRunnable)
time.sleep(1)
if test_case.isRunnable:
name = test_case.getName()
displayName = test_case.getDisplayName()
project = test_case.getProject()
nb_test_runnable_for_this_scenario += 1
- logger.info(" Searching results for case %s " %
- (displayName))
+ LOGGER.info(" Searching results for case %s ",
+ displayName)
result = rp_utils.getResult(name, installer,
s, version)
# if no result set the value to 0
if result < 0:
result = 0
- logger.info(" >>>> Test score = " + str(result))
+ LOGGER.info(" >>>> Test score = " + str(result))
test_case.setCriteria(result)
test_case.setIsRunnable(True)
testCases2BeDisplayed.append(tc.TestCase(name,
for test_case in otherTestCases:
test_case.checkRunnable(installer, s,
test_case.getConstraints())
- logger.debug("testcase %s (%s) is %s" %
- (test_case.getDisplayName(),
- test_case.getName(),
- test_case.isRunnable))
+ LOGGER.debug("testcase %s (%s) is %s",
+ test_case.getDisplayName(),
+ test_case.getName(),
+ test_case.isRunnable)
time.sleep(1)
if test_case.isRunnable:
name = test_case.getName()
displayName = test_case.getDisplayName()
project = test_case.getProject()
- logger.info(" Searching results for case %s " %
- (displayName))
+ LOGGER.info(" Searching results for case %s ",
+ displayName)
result = rp_utils.getResult(name, installer,
s, version)
# at least 1 result for the test
True,
4))
else:
- logger.debug("No results found")
+ LOGGER.debug("No results found")
items[s] = testCases2BeDisplayed
- except Exception:
- logger.error("Error: installer %s, version %s, scenario %s"
- % (installer, version, s))
- logger.error("No data available: %s" % (sys.exc_info()[0]))
+ except Exception: # pylint: disable=broad-except
+ LOGGER.error("Error installer %s, version %s, scenario %s",
+ installer, version, s)
+ LOGGER.error("No data available: %s", sys.exc_info()[0])
# **********************************************
# Evaluate the results for scenario validation
s_status = "KO"
if scenario_score < scenario_criteria:
- logger.info(">>>> scenario not OK, score = %s/%s" %
- (scenario_score, scenario_criteria))
+ LOGGER.info(">>>> scenario not OK, score = %s/%s",
+ scenario_score, scenario_criteria)
s_status = "KO"
else:
- logger.info(">>>>> scenario OK, save the information")
+ LOGGER.info(">>>>> scenario OK, save the information")
s_status = "OK"
path_validation_file = ("./display/" + version +
"/functest/" +
s_score,
s_score_percent,
s_url)
- logger.info("--------------------------")
+ LOGGER.info("--------------------------")
templateLoader = jinja2.FileSystemLoader(".")
templateEnv = jinja2.Environment(
installer_display + ".html", "wb") as fh:
fh.write(outputText)
- logger.info("Manage export CSV & PDF")
+ LOGGER.info("Manage export CSV & PDF")
rp_utils.export_csv(scenario_file_name, installer_display, version)
- logger.error("CSV generated...")
+ LOGGER.error("CSV generated...")
# Generate outputs for export
# pdf
pdf_doc_name = ("./display/" + version +
"/functest/status-" + installer_display + ".pdf")
rp_utils.export_pdf(pdf_path, pdf_doc_name)
- logger.info("PDF generated...")
+ LOGGER.info("PDF generated...")
+#!/usr/bin/python
+#
+# 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
+#
+"""
+vIMS reporting status
+"""
from urllib2 import Request, urlopen, URLError
import json
import jinja2
-# manage conf
-import utils.reporting_utils as rp_utils
-
-logger = rp_utils.getLogger("vIMS")
-
-
-def sig_test_format(sig_test):
- nbPassed = 0
- nbFailures = 0
- nbSkipped = 0
- for data_test in sig_test:
- if data_test['result'] == "Passed":
- nbPassed += 1
- elif data_test['result'] == "Failed":
- nbFailures += 1
- elif data_test['result'] == "Skipped":
- nbSkipped += 1
- total_sig_test_result = {}
- total_sig_test_result['passed'] = nbPassed
- total_sig_test_result['failures'] = nbFailures
- total_sig_test_result['skipped'] = nbSkipped
- return total_sig_test_result
-
-period = rp_utils.get_config('general.period')
-versions = rp_utils.get_config('general.versions')
-url_base = rp_utils.get_config('testapi.url')
-
-logger.info("****************************************")
-logger.info("* Generating reporting vIMS *")
-logger.info("* Data retention = %s days *" % period)
-logger.info("* *")
-logger.info("****************************************")
-
-installers = rp_utils.get_config('general.installers')
-step_order = ["initialisation", "orchestrator", "vIMS", "sig_test"]
-logger.info("Start processing....")
+import reporting.utils.reporting_utils as rp_utils
+
+LOGGER = rp_utils.getLogger("vIMS")
+
+PERIOD = rp_utils.get_config('general.period')
+VERSIONS = rp_utils.get_config('general.versions')
+URL_BASE = rp_utils.get_config('testapi.url')
+
+LOGGER.info("****************************************")
+LOGGER.info("* Generating reporting vIMS *")
+LOGGER.info("* Data retention = %s days *", PERIOD)
+LOGGER.info("* *")
+LOGGER.info("****************************************")
+
+INSTALLERS = rp_utils.get_config('general.installers')
+STEP_ORDER = ["initialisation", "orchestrator", "vnf", "test_vnf"]
+LOGGER.info("Start vIMS reporting processing....")
# For all the versions
-for version in versions:
- for installer in installers:
- logger.info("Search vIMS results for installer: %s, version: %s"
- % (installer, version))
- request = Request("http://" + url_base + '?case=vims&installer=' +
- installer + '&version=' + version)
-
- try:
- response = urlopen(request)
- k = response.read()
- results = json.loads(k)
- except URLError as e:
- logger.error("Error code: %s" % e)
-
- test_results = results['results']
-
- logger.debug("Results found: %s" % test_results)
-
- scenario_results = {}
- for r in test_results:
- if not r['scenario'] in scenario_results.keys():
- scenario_results[r['scenario']] = []
- scenario_results[r['scenario']].append(r)
-
- for s, s_result in scenario_results.items():
- scenario_results[s] = s_result[0:5]
- logger.debug("Search for success criteria")
- for result in scenario_results[s]:
- result["start_date"] = result["start_date"].split(".")[0]
- sig_test = result['details']['sig_test']['result']
- if not sig_test == "" and isinstance(sig_test, list):
- format_result = sig_test_format(sig_test)
- if format_result['failures'] > format_result['passed']:
- result['details']['sig_test']['duration'] = 0
- result['details']['sig_test']['result'] = format_result
- nb_step_ok = 0
- nb_step = len(result['details'])
-
- for step_name, step_result in result['details'].items():
- if step_result['duration'] != 0:
- nb_step_ok += 1
- m, s = divmod(step_result['duration'], 60)
- m_display = ""
- if int(m) != 0:
- m_display += str(int(m)) + "m "
-
- step_result['duration_display'] = (m_display +
- str(int(s)) + "s")
-
- result['pr_step_ok'] = 0
- if nb_step != 0:
- result['pr_step_ok'] = (float(nb_step_ok) / nb_step) * 100
- try:
- logger.debug("Scenario %s, Installer %s"
- % (s_result[1]['scenario'], installer))
- res = result['details']['orchestrator']['duration']
- logger.debug("Orchestrator deployment: %s s"
- % res)
- logger.debug("vIMS deployment: %s s"
- % result['details']['vIMS']['duration'])
- logger.debug("Signaling testing: %s s"
- % result['details']['sig_test']['duration'])
- logger.debug("Signaling testing results: %s"
- % format_result)
- except Exception:
- logger.error("Data badly formatted")
- logger.debug("----------------------------------------")
+for version in VERSIONS:
+ for installer in INSTALLERS:
+
+ # get nb of supported architecture (x86, aarch64)
+ # get scenarios
+ scenario_results = rp_utils.getScenarios("functest",
+ "cloudify_ims",
+ installer,
+ version)
+
+ architectures = rp_utils.getArchitectures(scenario_results)
+ LOGGER.info("Supported architectures: %s", architectures)
+
+ for architecture in architectures:
+ LOGGER.info("Architecture: %s", architecture)
+ # Consider only the results for the selected architecture
+ # i.e drop x86 for aarch64 and vice versa
+ filter_results = rp_utils.filterArchitecture(scenario_results,
+ architecture)
+ scenario_stats = rp_utils.getScenarioStats(filter_results)
+ items = {}
+ scenario_result_criteria = {}
+
+ # in case of more than 1 architecture supported
+ # precise the architecture
+ installer_display = installer
+ if "fuel" in installer:
+ installer_display = installer + "@" + architecture
+
+ LOGGER.info("Search vIMS results for installer: %s, version: %s",
+ installer, version)
+ request = Request("http://" + URL_BASE + '?case=cloudify_ims&'
+ 'installer=' + installer + '&version=' + version)
+ try:
+ response = urlopen(request)
+ k = response.read()
+ results = json.loads(k)
+ except URLError as err:
+ LOGGER.error("Error code: %s", err)
+
+ test_results = results['results']
+
+ # LOGGER.debug("Results found: %s" % test_results)
+
+ scenario_results = {}
+ for r in test_results:
+ if not r['scenario'] in scenario_results.keys():
+ scenario_results[r['scenario']] = []
+ scenario_results[r['scenario']].append(r)
+
+ # LOGGER.debug("scenario result: %s" % scenario_results)
+
+ for s, s_result in scenario_results.items():
+ scenario_results[s] = s_result[0:5]
+ for result in scenario_results[s]:
+ try:
+ format_result = result['details']['test_vnf']['result']
+
+ # round durations of the different steps
+ result['details']['orchestrator']['duration'] = round(
+ result['details']['orchestrator']['duration'], 1)
+ result['details']['vnf']['duration'] = round(
+ result['details']['vnf']['duration'], 1)
+ result['details']['test_vnf']['duration'] = round(
+ result['details']['test_vnf']['duration'], 1)
+
+ res_orch = \
+ result['details']['orchestrator']['duration']
+ res_vnf = result['details']['vnf']['duration']
+ res_test_vnf = \
+ result['details']['test_vnf']['duration']
+ res_signaling = \
+ result['details']['test_vnf']['result']['failures']
+
+ # Manage test result status
+ if res_signaling != 0:
+ LOGGER.debug("At least 1 signalig test FAIL")
+ result['details']['test_vnf']['status'] = "FAIL"
+ else:
+ LOGGER.debug("All signalig tests PASS")
+ result['details']['test_vnf']['status'] = "PASS"
+
+ LOGGER.debug("Scenario %s, Installer %s",
+ s_result[1]['scenario'], installer)
+ LOGGER.debug("Orchestrator deployment: %ss", res_orch)
+ LOGGER.debug("vIMS deployment: %ss", res_vnf)
+ LOGGER.debug("VNF testing: %ss", res_test_vnf)
+ LOGGER.debug("VNF testing results: %s", format_result)
+ except Exception as err: # pylint: disable=broad-except
+ LOGGER.error("Uncomplete data %s", err)
+ LOGGER.debug("----------------------------------------")
templateLoader = jinja2.FileSystemLoader(".")
templateEnv = jinja2.Environment(loader=templateLoader,
template = templateEnv.get_template(TEMPLATE_FILE)
outputText = template.render(scenario_results=scenario_results,
- step_order=step_order,
- installer=installer)
-
+ step_order=STEP_ORDER,
+ installer=installer_display)
+ LOGGER.debug("Generate html page for %s", installer_display)
with open("./display/" + version + "/functest/vims-" +
- installer + ".html", "wb") as fh:
+ installer_display + ".html", "wb") as fh:
fh.write(outputText)
-logger.info("vIMS report succesfully generated")
+LOGGER.info("vIMS report succesfully generated")
<nav>
<ul class="nav nav-justified">
<li class="active"><a href="../../index.html">Home</a></li>
- <li><a href="vims-fuel.html">Fuel</a></li>
+ <li><a href="vims-apex.html">Apex</a></li>
<li><a href="vims-compass.html">Compass</a></li>
<li><a href="vims-daisy.html">Daisy</a></li>
- <li><a href="vims-joid.html">JOID</a></li>
- <li><a href="vims-apex.html">APEX</a></li>
+ <li><a href="vims-fuel@x86.html">Fuel@x86</a></li>
+ <li><a href="vims-fuel@aarch64.html">Fuel@aarch64</a></li>
+ <li><a href="vims-joid.html">Joid</a></li>
</ul>
</nav>
</div>
<tr>
<th width="20%">Step</th>
<th width="10%">Status</th>
- <th width="10%">Duration</th>
+ <th width="10%">Duration(s)</th>
<th width="60%">Result</th>
</tr>
{% for step_od_name in step_order -%}
{% if step_od_name in result.details.keys() -%}
{% set step_result = result.details[step_od_name] -%}
- {% if step_result.duration != 0 -%}
+ {% if step_result.status == "PASS" -%}
<tr class="tr-ok">
<td>{{step_od_name}}</td>
<td><span class="glyphicon glyphicon-ok"></td>
- <td><b>{{step_result.duration_display}}</b></td>
+ <td><b>{{step_result.duration}}</b></td>
<td>{{step_result.result}}</td>
</tr>
{%- else -%}
'gluon_vping': 'Netready',
'fds': 'FDS',
'cloudify_ims': 'vIMS (Cloudify)',
- 'orchestra_ims': 'OpenIMS (OpenBaton)',
+ 'orchestra_openims': 'OpenIMS (OpenBaton)',
+ 'orchestra_clearwaterims': 'vIMS (OpenBaton)',
'opera_ims': 'vIMS (Open-O)',
- 'vyos_vrouter': 'vyos',
+ 'vyos_vrouter': 'vyos (Cloudify)',
'barometercollectd': 'Barometer',
'odl_netvirt': 'Netvirt',
'security_scan': 'Security'}
def profile_results(results, installer, profile_fd):
result_criterias = {}
for s_p, s_p_result in results.iteritems():
- ten_criteria = len(s_p_result)
- ten_score = sum(s_p_result)
+ avg_last_ten = sum([int(s) for s in s_p_result]) / len(s_p_result)
LASTEST_TESTS = rp_utils.get_config(
'general.nb_iteration_tests_success_criteria')
- four_result = s_p_result[:LASTEST_TESTS]
- four_criteria = len(four_result)
- four_score = sum(four_result)
-
- s_four_score = str(four_score / four_criteria)
- s_ten_score = str(ten_score / ten_criteria)
+ last_four = s_p_result[-LASTEST_TESTS:]
+ avg_last_four = sum([int(s) for s in last_four]) / len(last_four)
info = '{},{},{},{},{}\n'.format(reportingDate,
s_p,
installer,
- s_ten_score,
- s_four_score)
+ '',
+ avg_last_four)
profile_fd.write(info)
result_criterias[s_p] = sr.ScenarioResult('OK',
- s_four_score,
- s_ten_score,
+ avg_last_four,
+ avg_last_ten,
'100')
logger.info("--------------------------")
<ul class="nav nav-justified">
<li class="active"><a href="http://testresults.opnfv.org/reporting/index.html">Home</a></li>
<li><a href="status-apex.html">Apex</a></li>
- <li><a href="status-compass.html">Compass</a></li>
- <li><a href="status-daisy.html">Daisy</a></li>
- <li><a href="status-fuel.html">Fuel</a></li>
- <li><a href="status-joid.html">Joid</a></li>
+ <!--<li><a href="status-compass.html">Compass</a></li>-->
+ <!--<li><a href="status-daisy.html">Daisy</a></li>-->
+ <!--<li><a href="status-fuel.html">Fuel</a></li>-->
+ <!--<li><a href="status-joid.html">Joid</a></li>-->
</ul>
</nav>
</div>
versions:
- master
+ - euphrates
- danube
log:
functest:
blacklist:
- - ovno
- - security_scan
- - healthcheck
- odl_netvirt
- - aaa
- - cloudify_ims
- - orchestra_ims
- juju_epc
- - orchestra
max_scenario_criteria: 50
test_conf: https://git.opnfv.org/cgit/functest/plain/functest/ci/testcases.yaml
log_level: ERROR
qtip:
log_level: ERROR
- period: 1
+ period: 10
bottlenecks:
test_list:
import requests
import yaml
-import utils.reporting_utils as rp_utils
+import reporting.utils.reporting_utils as rp_utils
yardstick_conf = rp_utils.get_config('yardstick.test_conf')
response = requests.get(yardstick_conf)
}
// trend line management
- d3.csv("./scenario_history.csv", function(data) {
+ d3.csv("./scenario_history.txt", function(data) {
// ***************************************
// Create the trend line
{% for scenario in scenario_results.keys() -%}
+++ /dev/null
-import argparse
-import os
-
-from jinja2 import Environment, FileSystemLoader
-
-env = Environment(loader=FileSystemLoader('./'))
-docker_compose_yml = './docker-compose.yml'
-docker_compose_template = './docker-compose.yml.template'
-
-
-def render_docker_compose(port, base_url):
- vars = {
- "expose_port": port,
- "base_url": base_url,
- }
- template = env.get_template(docker_compose_template)
- yml = template.render(vars=vars)
-
- with open(docker_compose_yml, 'w') as f:
- f.write(yml)
- f.close()
-
-
-def main(args):
- render_docker_compose(args.expose_port, args.base_url)
- os.system('docker-compose -f {} up -d'.format(docker_compose_yml))
-
-
-if __name__ == '__main__':
- parser = argparse.ArgumentParser(description='Backup MongoDBs')
- parser.add_argument('-p', '--expose-port',
- type=int,
- required=False,
- default=8000,
- help='testapi exposed port')
- parser.add_argument('-l', '--base-url',
- type=str,
- required=True,
- help='testapi exposed base-url')
- main(parser.parse_args())
+++ /dev/null
-version: '2'
-services:
- mongo:
- image: mongo:3.2.1
- container_name: opnfv-mongo
- testapi:
- image: opnfv/testapi:latest
- container_name: opnfv-testapi
- environment:
- - mongodb_url=mongodb://mongo:27017/
- - base_url={{ vars.base_url }}
- ports:
- - "{{ vars.expose_port }}:8000"
- links:
- - mongo
from datetime import timedelta
import httplib
import json
+import urllib
import unittest
from opnfv_testapi.common import message
@executor.query(httplib.BAD_REQUEST, message.must_int('period'))
def test_queryPeriodNotInt(self):
- return self._set_query('period=a')
+ return self._set_query(period='a')
@executor.query(httplib.OK, '_query_period_one', 1)
def test_queryPeriodSuccess(self):
- return self._set_query('period=5')
+ return self._set_query(period=5)
@executor.query(httplib.BAD_REQUEST, message.must_int('last'))
def test_queryLastNotInt(self):
- return self._set_query('last=a')
+ return self._set_query(last='a')
@executor.query(httplib.OK, '_query_last_one', 1)
def test_queryLast(self):
- return self._set_query('last=1')
+ return self._set_query(last=1)
@executor.query(httplib.OK, '_query_success', 4)
def test_queryPublic(self):
self._create_public_data()
- return self._set_query('')
+ return self._set_query()
@executor.query(httplib.OK, '_query_success', 1)
def test_queryPrivate(self):
self._create_private_data()
- return self._set_query('public=false')
+ return self._set_query(public='false')
@executor.query(httplib.OK, '_query_period_one', 1)
def test_combination(self):
'scenario',
'trust_indicator',
'criteria',
- 'period=5')
+ period=5)
@executor.query(httplib.OK, '_query_success', 0)
def test_notFound(self):
- return self._set_query('pod=notExistPod',
- 'project',
+ return self._set_query('project',
'case',
'version',
'installer',
'scenario',
'trust_indicator',
'criteria',
- 'period=1')
+ pod='notExistPod',
+ period=1)
@executor.query(httplib.OK, '_query_success', 1)
def test_filterErrorStartdate(self):
self._create_error_start_date('None')
self._create_error_start_date('null')
self._create_error_start_date('')
- return self._set_query('period=5')
+ return self._set_query(period=5)
def _query_success(self, body, number):
self.assertEqual(number, len(body.results))
self.create(req)
return req
- def _set_query(self, *args):
+ def _set_query(self, *args, **kwargs):
def get_value(arg):
return self.__getattribute__(arg) \
if arg != 'trust_indicator' else self.trust_indicator.current
- uri = ''
+ query = []
for arg in args:
- if arg:
- if '=' in arg:
- uri += arg + '&'
- else:
- uri += '{}={}&'.format(arg, get_value(arg))
- return uri[0: -1]
+ query.append((arg, get_value(arg)))
+ for k, v in kwargs.iteritems():
+ query.append((k, v))
+ return urllib.urlencode(query)
class TestResultUpdate(TestResultBase):
--- /dev/null
+import argparse
+import os
+
+from jinja2 import Environment
+
+DOCKER_COMPOSE_FILE = './docker-compose.yml'
+DOCKER_COMPOSE_TEMPLATE = """
+version: '2'
+services:
+ mongo:
+ image: mongo:3.2.1
+ container_name: opnfv-mongo
+ testapi:
+ image: opnfv/testapi:latest
+ container_name: opnfv-testapi
+ environment:
+ - mongodb_url=mongodb://mongo:27017/
+ - base_url={{ vars.testapi_base_url }}
+ ports:
+ - "{{ vars.testapi_port }}:8000"
+ links:
+ - mongo
+"""
+
+
+def render_docker_compose(testapi_port, testapi_base_url):
+ vars = {
+ "testapi_port": testapi_port,
+ "testapi_base_url": testapi_base_url,
+ }
+
+ yml = Environment().from_string(DOCKER_COMPOSE_TEMPLATE).render(vars=vars)
+
+ with open(DOCKER_COMPOSE_FILE, 'w') as f:
+ f.write(yml)
+ f.close()
+
+
+def main(args):
+ render_docker_compose(args.testapi_port, args.testapi_base_url)
+ os.system('docker-compose -f {} up -d'.format(DOCKER_COMPOSE_FILE))
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(description='Backup MongoDBs')
+ parser.add_argument('-tp', '--testapi-port',
+ type=int,
+ required=False,
+ default=8000,
+ help='testapi exposed port')
+ parser.add_argument('-tl', '--testapi-base-url',
+ type=str,
+ required=True,
+ help='testapi exposed base-url')
+ main(parser.parse_args())