diff options
67 files changed, 741 insertions, 779 deletions
diff --git a/jjb-sandbox/releng/releng-sandbox-jobs.yml b/jjb-sandbox/releng/releng-sandbox-jobs.yml index 97fea8992..f5aab1ac2 100644 --- a/jjb-sandbox/releng/releng-sandbox-jobs.yml +++ b/jjb-sandbox/releng/releng-sandbox-jobs.yml @@ -56,3 +56,4 @@ publishers: - archive-artifacts: artifacts: 'job_output/*' + - email-jenkins-admins-on-failure diff --git a/jjb/apex/apex.yml b/jjb/apex/apex.yml index 02c2ba2ee..26eddb5b2 100644 --- a/jjb/apex/apex.yml +++ b/jjb/apex/apex.yml @@ -114,6 +114,24 @@ <<: *master - 'os-odl-fdio-ha': <<: *master + - 'os-nosdn-bar-ha': + <<: *master + - 'os-nosdn-bar-noha': + <<: *master + - 'os-nosdn-nofeature-ha-ipv6': + <<: *master + - 'os-nosdn-ovs_dpdk-noha': + <<: *master + - 'os-nosdn-ovs_dpdk-ha': + <<: *master + - 'os-nosdn-kvm_ovs_dpdk-noha': + <<: *master + - 'os-nosdn-kvm_ovs_dpdk-ha': + <<: *master + - 'os-odl-sfc-noha': + <<: *master + - 'os-odl-sfc-ha': + <<: *master platform: - 'baremetal' @@ -677,6 +695,10 @@ abort-all-job: true git-revision: false + publishers: + - groovy-postbuild: + script: + !include-raw-escape: ./update-build-result.groovy # Baremetal test job - job-template: @@ -753,13 +775,6 @@ enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|nosdn-kvm|odl_l3-fdio)-ha/" abort-all-job: false git-revision: false - - conditional-step: - condition-kind: current-status - condition-worst: SUCCESS - condtion-best: SUCCESS - on-evaluation-failure: mark-unstable - steps: - - shell: 'echo "Tests Passed"' # Build status is always success due conditional plugin prefetching # build status before multijob phases execute # - conditional-step: @@ -770,11 +785,6 @@ # steps: # - shell: 'echo "Tests Passed"' - publishers: - - groovy-postbuild: - script: - !include-raw-escape: ./update-build-result.groovy - # danube Daily - job-template: @@ -1241,6 +1251,87 @@ abort-all-job: true git-revision: false + - name: 'apex-os-nosdn-bar-ha-baremetal-master' + 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-nosdn-bar-noha-baremetal-master' + 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-nosdn-nofeature-ha-ipv6-baremetal-master' + 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-nosdn-ovs_dpdk-noha-baremetal-master' + 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-nosdn-ovs_dpdk-ha-baremetal-master' + 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-nosdn-kvm_ovs_dpdk-noha-baremetal-master' + 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-nosdn-kvm_ovs_dpdk-ha-baremetal-master' + 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-sfc-noha-baremetal-master' + 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-sfc-ha-baremetal-master' + node-parameters: false + current-parameters: false + predefined-parameters: | + OPNFV_CLEAN=yes + kill-phase-on: NEVER + abort-all-job: true + git-revision: false + # snapshot create diff --git a/jjb/apex/apex.yml.j2 b/jjb/apex/apex.yml.j2 index a3cc9c658..5d7f150cd 100644 --- a/jjb/apex/apex.yml.j2 +++ b/jjb/apex/apex.yml.j2 @@ -611,6 +611,10 @@ abort-all-job: true git-revision: false + publishers: + - groovy-postbuild: + script: + !include-raw-escape: ./update-build-result.groovy # Baremetal test job - job-template: @@ -687,13 +691,6 @@ enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|nosdn-kvm|odl_l3-fdio)-ha/" abort-all-job: false git-revision: false - - conditional-step: - condition-kind: current-status - condition-worst: SUCCESS - condtion-best: SUCCESS - on-evaluation-failure: mark-unstable - steps: - - shell: 'echo "Tests Passed"' # Build status is always success due conditional plugin prefetching # build status before multijob phases execute # - conditional-step: @@ -704,11 +701,6 @@ # steps: # - shell: 'echo "Tests Passed"' - publishers: - - groovy-postbuild: - script: - !include-raw-escape: ./update-build-result.groovy - {% for stream in scenarios %} # {{ stream }} Daily - job-template: diff --git a/jjb/apex/scenarios.yaml.hidden b/jjb/apex/scenarios.yaml.hidden index ee0176d1c..f49fa83c7 100644 --- a/jjb/apex/scenarios.yaml.hidden +++ b/jjb/apex/scenarios.yaml.hidden @@ -9,6 +9,15 @@ master: - 'os-nosdn-fdio-ha' - 'os-odl-fdio-noha' - 'os-odl-fdio-ha' + - 'os-nosdn-bar-ha' + - 'os-nosdn-bar-noha' + - 'os-nosdn-nofeature-ha-ipv6' + - 'os-nosdn-ovs_dpdk-noha' + - 'os-nosdn-ovs_dpdk-ha' + - 'os-nosdn-kvm_ovs_dpdk-noha' + - 'os-nosdn-kvm_ovs_dpdk-ha' + - 'os-odl-sfc-noha' + - 'os-odl-sfc-ha' danube: - 'os-nosdn-nofeature-noha' - 'os-nosdn-nofeature-ha' diff --git a/jjb/apex/update-build-result.groovy b/jjb/apex/update-build-result.groovy index a569e51f8..9edca6b6b 100644 --- a/jjb/apex/update-build-result.groovy +++ b/jjb/apex/update-build-result.groovy @@ -1,4 +1,5 @@ import hudson.model.* -if (manager.build.@result == hudson.model.Result.FAILURE) { +if (manager.logContains('^.*apex-deploy-baremetal.*SUCCESS$') + && manager.build.@result == hudson.model.Result.FAILURE) { manager.build.@result = hudson.model.Result.UNSTABLE } diff --git a/jjb/armband/armband-ci-jobs.yml b/jjb/armband/armband-ci-jobs.yml index e7de31908..a5d75bdca 100644 --- a/jjb/armband/armband-ci-jobs.yml +++ b/jjb/armband/armband-ci-jobs.yml @@ -11,27 +11,27 @@ branch: '{stream}' gs-pathname: '' disabled: false - danube: &danube - stream: danube + euphrates: &euphrates + stream: euphrates branch: 'stable/{stream}' gs-pathname: '/{stream}' - disabled: false + disabled: true #-------------------------------- # POD, INSTALLER, AND BRANCH MAPPING #-------------------------------- # CI POD's #-------------------------------- -# danube +# euphrates #-------------------------------- pod: - armband-baremetal: slave-label: armband-baremetal installer: fuel - <<: *danube + <<: *euphrates - armband-virtual: slave-label: armband-virtual installer: fuel - <<: *danube + <<: *euphrates #-------------------------------- # master #-------------------------------- @@ -46,24 +46,24 @@ #-------------------------------- # NONE-CI POD's #-------------------------------- -# danube +# euphrates #-------------------------------- - arm-pod2: slave-label: arm-pod2 installer: fuel - <<: *danube + <<: *euphrates - arm-pod3: slave-label: arm-pod3 installer: fuel - <<: *danube + <<: *euphrates - arm-pod4: slave-label: arm-pod4 installer: fuel - <<: *danube + <<: *euphrates - arm-virtual1: slave-label: arm-virtual1 installer: fuel - <<: *danube + <<: *euphrates #-------------------------------- # master #-------------------------------- @@ -253,6 +253,7 @@ publishers: - email: recipients: armband@enea.com + - email-jenkins-admins-on-failure ######################## # parameter macros @@ -314,36 +315,36 @@ - timed: '' #---------------------------------------------------------------------- -# Enea Armband CI Baremetal Triggers running against danube branch +# Enea Armband CI Baremetal Triggers running against euphrates branch #---------------------------------------------------------------------- - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-armband-baremetal-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-armband-baremetal-euphrates-trigger' triggers: - - timed: '0 0,16 * * 2,4' + - timed: '' - trigger: - name: 'fuel-os-nosdn-nofeature-ha-armband-baremetal-danube-trigger' + name: 'fuel-os-nosdn-nofeature-ha-armband-baremetal-euphrates-trigger' triggers: - - timed: '0 0 * * 1,5,7' + - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-armband-baremetal-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-ha-armband-baremetal-euphrates-trigger' triggers: - - timed: '0 16 * * 1,5,7' + - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-armband-baremetal-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-ha-armband-baremetal-euphrates-trigger' triggers: - - timed: '0 8 * * 2,4,6' + - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-noha-armband-baremetal-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-noha-armband-baremetal-euphrates-trigger' triggers: - - timed: '0 8 * * 1,3,5,7' + - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-ha-armband-baremetal-danube-trigger' + name: 'fuel-os-odl_l2-sfc-ha-armband-baremetal-euphrates-trigger' triggers: - - timed: '0 0 * * 3,6' + - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-noha-armband-baremetal-danube-trigger' + name: 'fuel-os-odl_l2-sfc-noha-armband-baremetal-euphrates-trigger' triggers: - - timed: '0 16 * * 3,6' + - timed: '' #--------------------------------------------------------------- # Enea Armband CI Virtual Triggers running against master branch #--------------------------------------------------------------- @@ -376,66 +377,66 @@ triggers: - timed: '' #-------------------------------------------------------------------- -# Enea Armband CI Virtual Triggers running against danube branch +# Enea Armband CI Virtual Triggers running against euphrates branch #-------------------------------------------------------------------- - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-armband-virtual-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-armband-virtual-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-nofeature-ha-armband-virtual-danube-trigger' + name: 'fuel-os-nosdn-nofeature-ha-armband-virtual-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-armband-virtual-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-ha-armband-virtual-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-armband-virtual-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-ha-armband-virtual-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-noha-armband-virtual-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-noha-armband-virtual-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-ha-armband-virtual-danube-trigger' + name: 'fuel-os-odl_l2-sfc-ha-armband-virtual-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-noha-armband-virtual-danube-trigger' + name: 'fuel-os-odl_l2-sfc-noha-armband-virtual-euphrates-trigger' triggers: - timed: '' #-------------------------------------------------------------------- -# Enea Armband Non CI Virtual Triggers running against danube branch +# Enea Armband Non CI Virtual Triggers running against euphrates branch #-------------------------------------------------------------------- - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-arm-virtual1-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-arm-virtual1-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-nofeature-ha-arm-virtual1-danube-trigger' + name: 'fuel-os-nosdn-nofeature-ha-arm-virtual1-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-arm-virtual1-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-ha-arm-virtual1-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-arm-virtual1-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-ha-arm-virtual1-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-noha-arm-virtual1-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-noha-arm-virtual1-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-ha-arm-virtual1-danube-trigger' + name: 'fuel-os-odl_l2-sfc-ha-arm-virtual1-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-noha-arm-virtual1-danube-trigger' + name: 'fuel-os-odl_l2-sfc-noha-arm-virtual1-euphrates-trigger' triggers: - timed: '' @@ -503,34 +504,34 @@ triggers: - timed: '' #--------------------------------------------------------------- -# Enea Armband POD 2 Triggers running against danube branch +# Enea Armband POD 2 Triggers running against euphrates branch #--------------------------------------------------------------- - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-arm-pod2-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-arm-pod2-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-nofeature-ha-arm-pod2-danube-trigger' + name: 'fuel-os-nosdn-nofeature-ha-arm-pod2-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-arm-pod2-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-ha-arm-pod2-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-arm-pod2-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-ha-arm-pod2-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-noha-arm-pod2-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-noha-arm-pod2-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-ha-arm-pod2-danube-trigger' + name: 'fuel-os-odl_l2-sfc-ha-arm-pod2-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-noha-arm-pod2-danube-trigger' + name: 'fuel-os-odl_l2-sfc-noha-arm-pod2-euphrates-trigger' triggers: - timed: '' #---------------------------------------------------------- @@ -565,34 +566,34 @@ triggers: - timed: '' #--------------------------------------------------------------- -# Enea Armband POD 3 Triggers running against danube branch +# Enea Armband POD 3 Triggers running against euphrates branch #--------------------------------------------------------------- - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-arm-pod3-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-arm-pod3-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-nofeature-ha-arm-pod3-danube-trigger' + name: 'fuel-os-nosdn-nofeature-ha-arm-pod3-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-arm-pod3-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-ha-arm-pod3-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-arm-pod3-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-ha-arm-pod3-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-noha-arm-pod3-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-noha-arm-pod3-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-ha-arm-pod3-danube-trigger' + name: 'fuel-os-odl_l2-sfc-ha-arm-pod3-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-noha-arm-pod3-danube-trigger' + name: 'fuel-os-odl_l2-sfc-noha-arm-pod3-euphrates-trigger' triggers: - timed: '' #-------------------------------------------------------------------------- @@ -627,33 +628,33 @@ triggers: - timed: '' #-------------------------------------------------------------------------- -# Enea Armband POD 3 Triggers running against danube branch (aarch64 slave) +# Enea Armband POD 3 Triggers running against euphrates branch (aarch64 slave) #-------------------------------------------------------------------------- - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-arm-pod4-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-arm-pod4-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-nofeature-ha-arm-pod4-danube-trigger' + name: 'fuel-os-nosdn-nofeature-ha-arm-pod4-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-arm-pod4-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-ha-arm-pod4-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-arm-pod4-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-ha-arm-pod4-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-noha-arm-pod4-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-noha-arm-pod4-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-ha-arm-pod4-danube-trigger' + name: 'fuel-os-odl_l2-sfc-ha-arm-pod4-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-noha-arm-pod4-danube-trigger' + name: 'fuel-os-odl_l2-sfc-noha-arm-pod4-euphrates-trigger' triggers: - timed: '' diff --git a/jjb/armband/armband-deploy.sh b/jjb/armband/armband-deploy.sh index 358b55ba2..08d323325 100755 --- a/jjb/armband/armband-deploy.sh +++ b/jjb/armband/armband-deploy.sh @@ -91,7 +91,7 @@ fi # construct the command DEPLOY_COMMAND="$WORKSPACE/ci/deploy.sh -b ${LAB_CONFIG_URL} \ -l $LAB_NAME -p $POD_NAME -s $DEPLOY_SCENARIO -i file://${ISO_FILE} \ - -H -B ${DEFAULT_BRIDGE:-pxebr} -S $TMPDIR -L $WORKSPACE/$FUEL_LOG_FILENAME \ + -B ${DEFAULT_BRIDGE:-,,,} -S $TMPDIR -L $WORKSPACE/$FUEL_LOG_FILENAME \ ${DEPLOY_CACHE}" # log info to console diff --git a/jjb/armband/armband-project-jobs.yml b/jjb/armband/armband-project-jobs.yml index f6840a008..0623b5576 100644 --- a/jjb/armband/armband-project-jobs.yml +++ b/jjb/armband/armband-project-jobs.yml @@ -17,10 +17,10 @@ branch: '{stream}' gs-pathname: '' disabled: false - - danube: + - euphrates: branch: 'stable/{stream}' gs-pathname: '/{stream}' - disabled: false + disabled: true - job-template: name: 'armband-{installer}-build-daily-{stream}' @@ -67,6 +67,7 @@ publishers: - email: recipients: armband@enea.com + - email-jenkins-admins-on-failure ######################## # parameter macros diff --git a/jjb/armband/armband-verify-jobs.yml b/jjb/armband/armband-verify-jobs.yml index 567456d9b..c9476b1a2 100644 --- a/jjb/armband/armband-verify-jobs.yml +++ b/jjb/armband/armband-verify-jobs.yml @@ -12,10 +12,10 @@ branch: '{stream}' gs-pathname: '' disabled: false - - danube: + - euphrates: branch: 'stable/{stream}' gs-pathname: '/{stream}' - disabled: false + disabled: true ##################################### # patch verification phases ##################################### diff --git a/jjb/bottlenecks/bottlenecks-ci-jobs.yml b/jjb/bottlenecks/bottlenecks-ci-jobs.yml index 455fa7247..71601cf75 100644 --- a/jjb/bottlenecks/bottlenecks-ci-jobs.yml +++ b/jjb/bottlenecks/bottlenecks-ci-jobs.yml @@ -35,22 +35,22 @@ pod: #compass CI PODs - baremetal: - slave-label: compass-baremetal + slave-label: compass-baremetal-master installer: compass auto-trigger-name: 'daily-trigger-disabled' <<: *master - virtual: - slave-label: compass-virtual + slave-label: compass-virtual-master installer: compass auto-trigger-name: 'daily-trigger-disabled' <<: *master - baremetal: - slave-label: compass-baremetal + slave-label: compass-baremetal-branch installer: compass auto-trigger-name: 'daily-trigger-disabled' <<: *danube - virtual: - slave-label: compass-virtual + slave-label: compass-virtual-branch installer: compass auto-trigger-name: 'daily-trigger-disabled' <<: *danube @@ -129,6 +129,7 @@ publishers: - email: recipients: gabriel.yuyang@huawei.com, liyin11@huawei.com + - email-jenkins-admins-on-failure ######################## # builder macros @@ -150,25 +151,33 @@ #################### - parameter: - name: 'bottlenecks-params-compass-baremetal' + name: 'bottlenecks-params-compass-baremetal-master' parameters: - string: name: BOTTLENECKS_DB_TARGET - default: '104.197.68.199:8086' + default: 'http://testresults.opnfv.org/test/api/v1/results' description: 'Arguments to use in order to choose the backend DB' - parameter: - name: 'bottlenecks-params-compass-virtual' + name: 'bottlenecks-params-compass-virtual-master' parameters: - string: name: BOTTLENECKS_DB_TARGET - default: '' + default: 'http://testresults.opnfv.org/test/api/v1/results' description: 'Arguments to use in order to choose the backend DB' - parameter: - name: 'bottlenecks-params-orange-pod2' + name: 'bottlenecks-params-compass-baremetal-branch' parameters: - string: name: BOTTLENECKS_DB_TARGET - default: '104.197.68.199:8086' + default: 'http://testresults.opnfv.org/test/api/v1/results' + description: 'Arguments to use in order to choose the backend DB' + +- parameter: + name: 'bottlenecks-params-compass-virtual-branch' + parameters: + - string: + name: BOTTLENECKS_DB_TARGET + default: 'http://testresults.opnfv.org/test/api/v1/results' description: 'Arguments to use in order to choose the backend DB' diff --git a/jjb/bottlenecks/bottlenecks-run-suite.sh b/jjb/bottlenecks/bottlenecks-run-suite.sh index b81f4cace..6bab0e4d2 100644 --- a/jjb/bottlenecks/bottlenecks-run-suite.sh +++ b/jjb/bottlenecks/bottlenecks-run-suite.sh @@ -53,18 +53,27 @@ if [[ $SUITE_NAME == *posca* ]]; then docker pull opnfv/bottlenecks:${DOCKER_TAG} >$redirect opts="--privileged=true -id" + envs="-e INSTALLER_TYPE=${INSTALLER_TYPE} -e INSTALLER_IP=${INSTALLER_IP} \ + -e NODE_NAME=${NODE_NAME} -e EXTERNAL_NET=${EXTERNAL_NETWORK} \ + -e BRANCH=${BRANCH} -e GERRIT_REFSPEC_DEBUG=${GERRIT_REFSPEC_DEBUG} \ + -e BOTTLENECKS_DB_TARGET=${BOTTLENECKS_DB_TARGET} -e PACKAGE_URL=${PACKAGE_URL} \ + -e DEPLOY_SCENARIO=${DEPLOY_SCENARIO}" docker_volume="-v /var/run/docker.sock:/var/run/docker.sock -v /tmp:/tmp" - cmd="docker run ${opts} --name bottlenecks-load-master ${docker_volume} opnfv/bottlenecks:${DOCKER_TAG} /bin/bash" + cmd="docker run ${opts} ${envs} --name bottlenecks-load-master ${docker_volume} opnfv/bottlenecks:${DOCKER_TAG} /bin/bash" echo "BOTTLENECKS INFO: running docker run commond: ${cmd}" ${cmd} >$redirect sleep 5 if [[ $SUITE_NAME == posca_stress_traffic ]]; then TEST_CASE=posca_factor_system_bandwidth - docker exec bottlenecks-load-master python ${POSCA_SCRIPT}/../run_testsuite.py testcase $TEST_CASE $REPORT + testcase_cmd="docker exec bottlenecks-load-master python ${POSCA_SCRIPT}/../run_testsuite.py testcase $TEST_CASE $REPORT" + echo "BOTTLENECKS INFO: running test case ${TEST_CASE} with report indicator: ${testcase_cmd}" + ${testcase_cmd} >$redirect elif [[ $SUITE_NAME == posca_stress_ping ]]; then TEST_CASE=posca_factor_ping - docker exec bottlenecks-load-master python ${POSCA_SCRIPT}/../run_testsuite.py testcase $TEST_CASE $REPORT + testcase_cmd="docker exec bottlenecks-load-master python ${POSCA_SCRIPT}/../run_testsuite.py testcase $TEST_CASE $REPORT" + echo "BOTTLENECKS INFO: running test case ${TEST_CASE} with report indicator: ${testcase_cmd}" + ${testcase_cmd} >$redirect fi fi diff --git a/jjb/ci_gate_security/anteater-report-to-gerrit.sh b/jjb/ci_gate_security/anteater-report-to-gerrit.sh index fc3018fb4..00a78ceba 100644 --- a/jjb/ci_gate_security/anteater-report-to-gerrit.sh +++ b/jjb/ci_gate_security/anteater-report-to-gerrit.sh @@ -12,14 +12,14 @@ if [[ -e securityaudit.log ]] ; then if grep ERROR securityaudit.log; then EXITSTATUS=1 fi - - cat securityaudit.log | awk -F"ERROR - " '{print $2}' > shortlog - + + cat securityaudit.log | awk -F"ERROR - " '{print $2}' | sed -e "s/\"/\\\\\"/g;s/\'/\\\\\'/g"> shortlog + ssh -p 29418 gerrit.opnfv.org \ "gerrit review -p $GERRIT_PROJECT \ -m \"$(cat shortlog)\" \ $GERRIT_PATCHSET_REVISION \ --notify NONE" - + exit $EXITSTATUS fi diff --git a/jjb/ci_gate_security/anteater-security-audit.sh b/jjb/ci_gate_security/anteater-security-audit.sh index 9bd3cc34f..35f9354e0 100644 --- a/jjb/ci_gate_security/anteater-security-audit.sh +++ b/jjb/ci_gate_security/anteater-security-audit.sh @@ -1,5 +1,7 @@ #!/bin/bash cd $WORKSPACE +REPORTDIR='.reports' +mkdir -p $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" @@ -7,7 +9,7 @@ echo "--------------------------------------------------------" cat $WORKSPACE/patchset echo "--------------------------------------------------------" -vols="-v $WORKSPACE:/home/opnfv/anteater/$PROJECT" +vols="-v $WORKSPACE:/home/opnfv/anteater/$PROJECT -v $WORKSPACE/$REPORTDIR:/home/opnfv/anteater/$REPORTDIR" envs="-e PROJECT=$PROJECT" echo "Pulling releng-anteater docker image" diff --git a/jjb/ci_gate_security/opnfv-ci-gate-security.yml b/jjb/ci_gate_security/opnfv-ci-gate-security.yml index d991573b0..55d629cb4 100644 --- a/jjb/ci_gate_security/opnfv-ci-gate-security.yml +++ b/jjb/ci_gate_security/opnfv-ci-gate-security.yml @@ -93,6 +93,10 @@ builders: - anteater-security-audit - report-security-audit-result-to-gerrit + publishers: + - archive-artifacts: + artifacts: ".reports/*" + ######################## # builder macros ######################## diff --git a/jjb/compass4nfv/compass-ci-jobs.yml b/jjb/compass4nfv/compass-ci-jobs.yml index c98fd369c..4c12f199e 100644 --- a/jjb/compass4nfv/compass-ci-jobs.yml +++ b/jjb/compass4nfv/compass-ci-jobs.yml @@ -362,7 +362,7 @@ - trigger: name: 'compass-os-odl_l2-nofeature-ha-baremetal-centos-master-trigger' triggers: - - timed: '0 23 * * *' + - timed: '' - trigger: name: 'compass-os-odl_l3-nofeature-ha-baremetal-centos-master-trigger' triggers: @@ -411,7 +411,7 @@ - trigger: name: 'compass-os-odl_l2-nofeature-ha-baremetal-master-trigger' triggers: - - timed: '0 22 * * *' + - timed: '' - trigger: name: 'compass-os-odl_l3-nofeature-ha-baremetal-master-trigger' triggers: @@ -511,7 +511,7 @@ - trigger: name: 'compass-os-odl_l2-nofeature-ha-virtual-master-trigger' triggers: - - timed: '0 20 * * *' + - timed: '' - trigger: name: 'compass-os-odl_l3-nofeature-ha-virtual-master-trigger' triggers: diff --git a/jjb/compass4nfv/compass-verify-jobs.yml b/jjb/compass4nfv/compass-verify-jobs.yml index f016b91c7..ee91e02da 100644 --- a/jjb/compass4nfv/compass-verify-jobs.yml +++ b/jjb/compass4nfv/compass-verify-jobs.yml @@ -158,15 +158,17 @@ projects: - name: 'functest-compass-virtual-suite-{stream}' current-parameters: false - predefined-parameters: + predefined-parameters: | FUNCTEST_SUITE_NAME=healthcheck + DEPLOY_SCENARIO=os-nosdn-nofeature-ha node-parameters: true kill-phase-on: NEVER abort-all-job: true - name: 'functest-compass-virtual-suite-{stream}' current-parameters: false - predefined-parameters: + predefined-parameters: | FUNCTEST_SUITE_NAME=vping_ssh + DEPLOY_SCENARIO=os-nosdn-nofeature-ha node-parameters: true kill-phase-on: NEVER abort-all-job: true diff --git a/jjb/daisy4nfv/daisy-project-jobs.yml b/jjb/daisy4nfv/daisy-project-jobs.yml index bae75dd5a..fd0da7928 100644 --- a/jjb/daisy4nfv/daisy-project-jobs.yml +++ b/jjb/daisy4nfv/daisy-project-jobs.yml @@ -125,6 +125,7 @@ publishers: - '{installer}-recipients' + - email-jenkins-admins-on-failure - job-template: name: '{installer}-{phase}-daily-{stream}' @@ -209,6 +210,7 @@ publishers: - email: recipients: hu.zhijiang@zte.com.cn lu.yao135@zte.com.cn zhou.ya@zte.com.cn yangyang1@zte.com.cn julienjut@gmail.com + - email-jenkins-admins-on-failure - parameter: name: 'daisy-project-parameter' diff --git a/jjb/doctor/doctor.yml b/jjb/doctor/doctor.yml index c6b2cb6d0..afde9efe8 100644 --- a/jjb/doctor/doctor.yml +++ b/jjb/doctor/doctor.yml @@ -114,6 +114,7 @@ - '{auto-trigger-name}': project: '{project}' branch: '{branch}' + files: 'tests/**' builders: - shell: "[ -e tests/run.sh ] && bash -n ./tests/run.sh" @@ -179,6 +180,7 @@ - '{auto-trigger-name}': project: '{project}' branch: '{branch}' + files: 'tests/**' builders: - 'clean-workspace-log' @@ -206,6 +208,7 @@ artifacts: 'tests/*.log' - archive: artifacts: 'functest_results/$FUNCTEST_SUITE_NAME.log' + - email-jenkins-admins-on-failure ##################################### @@ -234,7 +237,7 @@ branch-pattern: '**/{branch}' file-paths: - compare-type: ANT - pattern: 'tests/**' + pattern: '{files}' skip-vote: successful: true failed: true diff --git a/jjb/dovetail/dovetail-ci-jobs.yml b/jjb/dovetail/dovetail-ci-jobs.yml index bcda2b7ca..3f130c9e7 100644 --- a/jjb/dovetail/dovetail-ci-jobs.yml +++ b/jjb/dovetail/dovetail-ci-jobs.yml @@ -25,7 +25,7 @@ branch: 'stable/{stream}' dovetail-branch: master gs-pathname: '/{stream}' - docker-tag: 'cvp.0.3.0' + docker-tag: 'cvp.0.4.0' #----------------------------------- # POD, PLATFORM, AND BRANCH MAPPING @@ -257,6 +257,7 @@ artifacts: 'results/**/*' allow-empty: true fingerprint: true + - email-jenkins-admins-on-failure #-------------------------- # builder macros diff --git a/jjb/dovetail/dovetail-run.sh b/jjb/dovetail/dovetail-run.sh index f75cddefe..a078c8f59 100755 --- a/jjb/dovetail/dovetail-run.sh +++ b/jjb/dovetail/dovetail-run.sh @@ -170,5 +170,8 @@ sudo cp -r ${DOVETAIL_HOME}/results ./ # PRIMARY_GROUP=$(id -gn $CURRENT_USER) # sudo chown -R ${CURRENT_USER}:${PRIMARY_GROUP} ${WORKSPACE}/results +#remove useless workspace from yardstick to save disk space +sudo rm -rf ./results/workspace + echo "Dovetail: done!" diff --git a/jjb/dovetail/dovetail-weekly-jobs.yml b/jjb/dovetail/dovetail-weekly-jobs.yml index 700657d68..11904cbcd 100644 --- a/jjb/dovetail/dovetail-weekly-jobs.yml +++ b/jjb/dovetail/dovetail-weekly-jobs.yml @@ -120,6 +120,7 @@ artifacts: 'results/**/*' allow-empty: true fingerprint: true + - email-jenkins-admins-on-failure ######################## # builder macros diff --git a/jjb/fuel/fuel-daily-jobs.yml b/jjb/fuel/fuel-daily-jobs.yml index 2d37f4ad4..4b2f8e9cc 100644 --- a/jjb/fuel/fuel-daily-jobs.yml +++ b/jjb/fuel/fuel-daily-jobs.yml @@ -15,10 +15,10 @@ branch: '{stream}' disabled: false gs-pathname: '' - danube: &danube - stream: danube + euphrates: &euphrates + stream: euphrates branch: 'stable/{stream}' - disabled: false + disabled: true gs-pathname: '/{stream}' #-------------------------------- # POD, INSTALLER, AND BRANCH MAPPING @@ -34,10 +34,10 @@ <<: *master - baremetal: slave-label: fuel-baremetal - <<: *danube + <<: *euphrates - virtual: slave-label: fuel-virtual - <<: *danube + <<: *euphrates #-------------------------------- # None-CI PODs #-------------------------------- @@ -49,10 +49,10 @@ <<: *master - zte-pod1: slave-label: zte-pod1 - <<: *danube + <<: *euphrates - zte-pod3: slave-label: zte-pod3 - <<: *danube + <<: *euphrates #-------------------------------- # scenarios #-------------------------------- @@ -208,7 +208,7 @@ build-step-failure-threshold: 'never' failure-threshold: 'never' unstable-threshold: 'FAILURE' - # ZTE pod1 weekly(Sunday), os-odl_l2-nofeature-ha, run against master and danube + # ZTE pod1 weekly(Sunday), os-odl_l2-nofeature-ha, run against master and euphrates - conditional-step: condition-kind: and condition-operands: @@ -239,6 +239,7 @@ publishers: - email: recipients: peter.barabas@ericsson.com fzhadaev@mirantis.com + - email-jenkins-admins-on-failure - job-template: name: 'fuel-deploy-{pod}-daily-{stream}' @@ -298,6 +299,7 @@ publishers: - email: recipients: peter.barabas@ericsson.com fzhadaev@mirantis.com + - email-jenkins-admins-on-failure ######################## # parameter macros @@ -418,96 +420,96 @@ triggers: - timed: '' #----------------------------------------------- -# Triggers for job running on fuel-baremetal against danube branch +# Triggers for job running on fuel-baremetal against euphrates branch #----------------------------------------------- # HA Scenarios - trigger: - name: 'fuel-os-nosdn-nofeature-ha-baremetal-daily-danube-trigger' + name: 'fuel-os-nosdn-nofeature-ha-baremetal-daily-euphrates-trigger' triggers: - - timed: '0 20 * * *' + - timed: '' # '0 20 * * *' - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-baremetal-daily-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-baremetal-daily-euphrates-trigger' triggers: - - timed: '0 23 * * *' + - timed: '' # '0 23 * * *' - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-baremetal-daily-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-ha-baremetal-daily-euphrates-trigger' triggers: - - timed: '0 2 * * *' + - timed: '' # '0 2 * * *' - trigger: - name: 'fuel-os-onos-sfc-ha-baremetal-daily-danube-trigger' + name: 'fuel-os-onos-sfc-ha-baremetal-daily-euphrates-trigger' triggers: - timed: '' # '0 5 * * *' - trigger: - name: 'fuel-os-onos-nofeature-ha-baremetal-daily-danube-trigger' + name: 'fuel-os-onos-nofeature-ha-baremetal-daily-euphrates-trigger' triggers: - timed: '' # '0 8 * * *' - trigger: - name: 'fuel-os-odl_l2-sfc-ha-baremetal-daily-danube-trigger' + name: 'fuel-os-odl_l2-sfc-ha-baremetal-daily-euphrates-trigger' triggers: - - timed: '0 11 * * *' + - timed: '' # '0 11 * * *' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-baremetal-daily-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-ha-baremetal-daily-euphrates-trigger' triggers: - - timed: '0 14 * * *' + - timed: '' # '0 14 * * *' - trigger: - name: 'fuel-os-nosdn-kvm-ha-baremetal-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm-ha-baremetal-daily-euphrates-trigger' triggers: - - timed: '0 17 * * *' + - timed: '' # '0 17 * * *' - trigger: - name: 'fuel-os-nosdn-ovs-ha-baremetal-daily-danube-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-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk-ha-baremetal-daily-euphrates-trigger' triggers: - - timed: '0 12 * * *' + - timed: '' # '0 12 * * *' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-ha-baremetal-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-ha-baremetal-daily-euphrates-trigger' triggers: - - timed: '0 8 * * *' + - timed: '' # '0 8 * * *' # NOHA Scenarios - trigger: - name: 'fuel-os-nosdn-nofeature-noha-baremetal-daily-danube-trigger' + name: 'fuel-os-nosdn-nofeature-noha-baremetal-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-noha-baremetal-daily-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-noha-baremetal-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-noha-baremetal-daily-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-noha-baremetal-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-sfc-noha-baremetal-daily-danube-trigger' + name: 'fuel-os-onos-sfc-noha-baremetal-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-nofeature-noha-baremetal-daily-danube-trigger' + name: 'fuel-os-onos-nofeature-noha-baremetal-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-noha-baremetal-daily-danube-trigger' + name: 'fuel-os-odl_l2-sfc-noha-baremetal-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-noha-baremetal-daily-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-noha-baremetal-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm-noha-baremetal-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm-noha-baremetal-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-ovs-noha-baremetal-daily-danube-trigger' + name: 'fuel-os-nosdn-ovs-noha-baremetal-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk-noha-baremetal-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk-noha-baremetal-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-noha-baremetal-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-noha-baremetal-daily-euphrates-trigger' triggers: - timed: '' #----------------------------------------------- @@ -603,97 +605,97 @@ triggers: - timed: '' # '30 20 * * *' #----------------------------------------------- -# Triggers for job running on fuel-virtual against danube branch +# Triggers for job running on fuel-virtual against euphrates branch #----------------------------------------------- - trigger: - name: 'fuel-os-nosdn-nofeature-ha-virtual-daily-danube-trigger' + name: 'fuel-os-nosdn-nofeature-ha-virtual-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-virtual-daily-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-virtual-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-virtual-daily-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-ha-virtual-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-sfc-ha-virtual-daily-danube-trigger' + name: 'fuel-os-onos-sfc-ha-virtual-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-nofeature-ha-virtual-daily-danube-trigger' + name: 'fuel-os-onos-nofeature-ha-virtual-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-virtual-daily-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-ha-virtual-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-ha-virtual-daily-danube-trigger' + name: 'fuel-os-odl_l2-sfc-ha-virtual-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm-ha-virtual-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm-ha-virtual-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-ovs-ha-virtual-daily-danube-trigger' + name: 'fuel-os-nosdn-ovs-ha-virtual-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk-ha-virtual-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk-ha-virtual-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-ha-virtual-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-ha-virtual-daily-euphrates-trigger' triggers: - timed: '' # NOHA Scenarios - trigger: - name: 'fuel-os-nosdn-nofeature-noha-virtual-daily-danube-trigger' + name: 'fuel-os-nosdn-nofeature-noha-virtual-daily-euphrates-trigger' triggers: - - timed: '0 13 * * *' + - timed: '' # '0 13 * * *' - trigger: - name: 'fuel-os-odl_l2-nofeature-noha-virtual-daily-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-noha-virtual-daily-euphrates-trigger' triggers: - - timed: '30 15 * * *' + - timed: '' # '30 15 * * *' - trigger: - name: 'fuel-os-odl_l3-nofeature-noha-virtual-daily-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-noha-virtual-daily-euphrates-trigger' triggers: - - timed: '0 18 * * *' + - timed: '' # '0 18 * * *' - trigger: - name: 'fuel-os-onos-sfc-noha-virtual-daily-danube-trigger' + name: 'fuel-os-onos-sfc-noha-virtual-daily-euphrates-trigger' triggers: - timed: '' # '30 20 * * *' - trigger: - name: 'fuel-os-onos-nofeature-noha-virtual-daily-danube-trigger' + name: 'fuel-os-onos-nofeature-noha-virtual-daily-euphrates-trigger' triggers: - timed: '' # '0 23 * * *' - trigger: - name: 'fuel-os-odl_l2-sfc-noha-virtual-daily-danube-trigger' + name: 'fuel-os-odl_l2-sfc-noha-virtual-daily-euphrates-trigger' triggers: - - timed: '30 1 * * *' + - timed: '' # '30 1 * * *' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-noha-virtual-daily-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-noha-virtual-daily-euphrates-trigger' triggers: - - timed: '0 4 * * *' + - timed: '' # '0 4 * * *' - trigger: - name: 'fuel-os-nosdn-kvm-noha-virtual-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm-noha-virtual-daily-euphrates-trigger' triggers: - - timed: '30 6 * * *' + - timed: '' # '30 6 * * *' - trigger: - name: 'fuel-os-nosdn-ovs-noha-virtual-daily-danube-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-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk-noha-virtual-daily-euphrates-trigger' triggers: - - timed: '0 16 * * *' + - timed: '' # '0 16 * * *' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-noha-virtual-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-noha-virtual-daily-euphrates-trigger' triggers: - - timed: '0 20 * * *' + - timed: '' # '0 20 * * *' #----------------------------------------------- # ZTE POD1 Triggers running against master branch #----------------------------------------------- @@ -879,186 +881,186 @@ triggers: - timed: '' #----------------------------------------------- -# ZTE POD1 Triggers running against danube branch +# ZTE POD1 Triggers running against euphrates branch #----------------------------------------------- - trigger: - name: 'fuel-os-nosdn-nofeature-ha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-nosdn-nofeature-ha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-zte-pod1-daily-euphrates-trigger' triggers: - - timed: '0 2 * * *' + - timed: '' # '0 2 * * *' - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-ha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-sfc-ha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-onos-sfc-ha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-nofeature-ha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-onos-nofeature-ha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-ha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-ha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-odl_l2-sfc-ha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm-ha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm-ha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-ovs-ha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-nosdn-ovs-ha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk-ha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk-ha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-ha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-ha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' # NOHA Scenarios - trigger: - name: 'fuel-os-nosdn-nofeature-noha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-nosdn-nofeature-noha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-noha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-noha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-noha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-noha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-sfc-noha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-onos-sfc-noha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-nofeature-noha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-onos-nofeature-noha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-noha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-odl_l2-sfc-noha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-noha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-noha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm-noha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm-noha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-ovs-noha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-nosdn-ovs-noha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk-noha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk-noha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-noha-zte-pod1-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-noha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' #----------------------------------------------- -# ZTE POD3 Triggers running against danube branch +# ZTE POD3 Triggers running against euphrates branch #----------------------------------------------- - trigger: - name: 'fuel-os-nosdn-nofeature-ha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-nosdn-nofeature-ha-zte-pod3-daily-euphrates-trigger' triggers: - - timed: '0 18 * * *' + - timed: '' # '0 18 * * *' - trigger: - name: 'fuel-os-odl_l2-nofeature-ha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-ha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-ha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-ha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-sfc-ha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-onos-sfc-ha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-nofeature-ha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-onos-nofeature-ha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-ha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-ha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-odl_l2-sfc-ha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm-ha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm-ha-zte-pod3-daily-euphrates-trigger' triggers: - - timed: '0 2 * * *' + - timed: '' # '0 2 * * *' - trigger: - name: 'fuel-os-nosdn-ovs-ha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-nosdn-ovs-ha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk-ha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk-ha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-ha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-ha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' # NOHA Scenarios - trigger: - name: 'fuel-os-nosdn-nofeature-noha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-nosdn-nofeature-noha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-nofeature-noha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-odl_l2-nofeature-noha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l3-nofeature-noha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-odl_l3-nofeature-noha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-sfc-noha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-onos-sfc-noha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-onos-nofeature-noha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-onos-nofeature-noha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-sfc-noha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-odl_l2-sfc-noha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-odl_l2-bgpvpn-noha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-odl_l2-bgpvpn-noha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm-noha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm-noha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-ovs-noha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-nosdn-ovs-noha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk-noha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk-noha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-noha-zte-pod3-daily-danube-trigger' + name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-noha-zte-pod3-daily-euphrates-trigger' triggers: - timed: '' diff --git a/jjb/fuel/fuel-deploy.sh b/jjb/fuel/fuel-deploy.sh index 2fb5c71e4..29b173ae5 100755 --- a/jjb/fuel/fuel-deploy.sh +++ b/jjb/fuel/fuel-deploy.sh @@ -33,7 +33,7 @@ fi # set deployment parameters export TMPDIR=$HOME/tmpdir -BRIDGE=${BRIDGE:-pxebr} +BRIDGE=${BRIDGE:-,,,} LAB_NAME=${NODE_NAME/-*} POD_NAME=${NODE_NAME/*-} @@ -69,7 +69,7 @@ FUEL_LOG_FILENAME="${JOB_NAME}_${BUILD_NUMBER}.log.tar.gz" # construct the command DEPLOY_COMMAND="sudo $WORKSPACE/ci/deploy.sh -b file://$WORKSPACE/securedlab \ -l $LAB_NAME -p $POD_NAME -s $DEPLOY_SCENARIO -i file://$WORKSPACE/opnfv.iso \ - -H -B $BRIDGE -S $TMPDIR -L $WORKSPACE/$FUEL_LOG_FILENAME" + -B $BRIDGE -S $TMPDIR -L $WORKSPACE/$FUEL_LOG_FILENAME" # log info to console echo "Deployment parameters" diff --git a/jjb/fuel/fuel-project-jobs.yml b/jjb/fuel/fuel-project-jobs.yml index 1f0ddd363..6bb7e51d0 100644 --- a/jjb/fuel/fuel-project-jobs.yml +++ b/jjb/fuel/fuel-project-jobs.yml @@ -13,10 +13,10 @@ branch: '{stream}' gs-pathname: '' disabled: false - - danube: + - euphrates: branch: 'stable/{stream}' gs-pathname: '/{stream}' - disabled: false + disabled: true jobs: - 'fuel-build-daily-{stream}' @@ -79,6 +79,7 @@ publishers: - email: recipients: fzhadaev@mirantis.com + - email-jenkins-admins-on-failure - job-template: name: 'fuel-merge-build-{stream}' @@ -211,6 +212,7 @@ publishers: - email: recipients: fzhadaev@mirantis.com + - email-jenkins-admins-on-failure - job-template: name: 'fuel-deploy-generic-daily-{stream}' diff --git a/jjb/fuel/fuel-verify-jobs.yml b/jjb/fuel/fuel-verify-jobs.yml index 549f7dafa..469ca9258 100644 --- a/jjb/fuel/fuel-verify-jobs.yml +++ b/jjb/fuel/fuel-verify-jobs.yml @@ -12,10 +12,10 @@ branch: '{stream}' gs-pathname: '' disabled: false - - danube: + - euphrates: branch: 'stable/{stream}' gs-pathname: '/{stream}' - disabled: false + disabled: true ##################################### # patch verification phases ##################################### diff --git a/jjb/fuel/fuel-weekly-jobs.yml b/jjb/fuel/fuel-weekly-jobs.yml index bd42ed85c..57e36e164 100644 --- a/jjb/fuel/fuel-weekly-jobs.yml +++ b/jjb/fuel/fuel-weekly-jobs.yml @@ -15,10 +15,10 @@ branch: '{stream}' disabled: false gs-pathname: '' - danube: &danube - stream: danube + euphrates: &euphrates + stream: euphrates branch: 'stable/{stream}' - disabled: false + disabled: true gs-pathname: '/{stream}' #-------------------------------- # POD, INSTALLER, AND BRANCH MAPPING @@ -34,10 +34,10 @@ <<: *master - baremetal: slave-label: fuel-baremetal - <<: *danube + <<: *euphrates - virtual: slave-label: fuel-virtual - <<: *danube + <<: *euphrates #-------------------------------- # scenarios #-------------------------------- @@ -119,6 +119,7 @@ publishers: - email: recipients: peter.barabas@ericsson.com fzhadaev@mirantis.com + - email-jenkins-admins-on-failure - job-template: name: 'fuel-deploy-{pod}-weekly-{stream}' @@ -178,6 +179,7 @@ publishers: - email: recipients: peter.barabas@ericsson.com fzhadaev@mirantis.com + - email-jenkins-admins-on-failure ######################## # parameter macros diff --git a/jjb/functest/functest-project-jobs.yml b/jjb/functest/functest-project-jobs.yml index 353423d59..1966e52de 100644 --- a/jjb/functest/functest-project-jobs.yml +++ b/jjb/functest/functest-project-jobs.yml @@ -80,6 +80,7 @@ healthy: 50 unhealthy: 40 failing: 30 + - email-jenkins-admins-on-failure - job-template: name: 'functest-docs-upload-{stream}' diff --git a/jjb/global/installer-params.yml b/jjb/global/installer-params.yml index 98cd2c53e..c4e715d5c 100644 --- a/jjb/global/installer-params.yml +++ b/jjb/global/installer-params.yml @@ -55,8 +55,8 @@ description: 'external network for test' - string: name: BRIDGE - default: 'pxebr' - description: 'pxe bridge for booting of Fuel master' + default: ',,,' + description: 'Bridge(s) to be used by salt master' - parameter: name: 'joid-defaults' diff --git a/jjb/global/releng-macros.yml b/jjb/global/releng-macros.yml index 92199d6e7..89a38029e 100644 --- a/jjb/global/releng-macros.yml +++ b/jjb/global/releng-macros.yml @@ -150,7 +150,7 @@ branch-pattern: '**/{branch}' file-paths: - compare-type: 'ANT' - pattern: 'tests/**' + pattern: '{files}' skip-vote: successful: true failed: true diff --git a/jjb/global/slave-params.yml b/jjb/global/slave-params.yml index 4f1348dba..0e23380a9 100644 --- a/jjb/global/slave-params.yml +++ b/jjb/global/slave-params.yml @@ -679,6 +679,20 @@ default: 'br0' description: 'pxe bridge for booting of Fuel master' - parameter: + name: zte-pod4-defaults + parameters: + - node: + name: SLAVE_NAME + description: 'Slave name on Jenkins' + allowed-slaves: + - zte-pod4 + default-slaves: + - zte-pod4 + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: 'Git URL to use on this Jenkins Slave' +- parameter: name: 'juniper-pod1-defaults' parameters: - node: diff --git a/jjb/joid/joid-daily-jobs.yml b/jjb/joid/joid-daily-jobs.yml index 1ff260ac8..1c7b8cd0d 100644 --- a/jjb/joid/joid-daily-jobs.yml +++ b/jjb/joid/joid-daily-jobs.yml @@ -70,6 +70,8 @@ auto-trigger-name: 'joid-{scenario}-{pod}-{stream}-trigger' - 'k8-ovn-lb-noha': auto-trigger-name: 'joid-{scenario}-{pod}-{stream}-trigger' + - 'os-nosdn-openbaton-ha': + auto-trigger-name: 'joid-{scenario}-{pod}-{stream}-trigger' jobs: - 'joid-{scenario}-{pod}-daily-{stream}' @@ -400,3 +402,21 @@ 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' + triggers: + - timed: '5 25 * * *' +- trigger: + name: 'joid-os-nosdn-openbaton-ha-virtual-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-openbaton-ha-orange-pod1-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'joid-os-nosdn-openbaton-ha-cengn-pod1-master-trigger' + triggers: + - timed: '' diff --git a/jjb/kvmfornfv/kvmfornfv.yml b/jjb/kvmfornfv/kvmfornfv.yml index e5b56bf9b..a39249ad2 100644 --- a/jjb/kvmfornfv/kvmfornfv.yml +++ b/jjb/kvmfornfv/kvmfornfv.yml @@ -26,6 +26,7 @@ testname: - 'cyclictest' - 'packet_forward' + - 'livemigration' ##################################### # patch verification phases ##################################### @@ -236,6 +237,17 @@ git-revision: true kill-phase-on: FAILURE abort-all-job: true + - multijob: + name: livemigration-test + condition: SUCCESSFUL + projects: + - name: 'kvmfornfv-livemigration-daily-test-{stream}' + current-parameters: false + node-parameters: false + git-revision: true + kill-phase-on: FAILURE + abort-all-job: true + - job-template: name: 'kvmfornfv-daily-build-{stream}' @@ -344,6 +356,14 @@ !include-raw: ./kvmfornfv-download-artifact.sh - shell: !include-raw: ./kvmfornfv-test.sh +- builder: + name: 'kvmfornfv-livemigration-daily-test-macro' + builders: + - shell: + !include-raw: ./kvmfornfv-download-artifact.sh + - shell: + !include-raw: ./kvmfornfv-test.sh + ##################################### # parameter macros ##################################### diff --git a/jjb/multisite/fuel-deploy-for-multisite.sh b/jjb/multisite/fuel-deploy-for-multisite.sh index 71c6cc11d..827e5c28d 100755 --- a/jjb/multisite/fuel-deploy-for-multisite.sh +++ b/jjb/multisite/fuel-deploy-for-multisite.sh @@ -46,7 +46,7 @@ curl -L -s -o $WORKSPACE/opnfv.iso http://$OPNFV_ARTIFACT_URL > gsutil.iso.log 2 # set deployment parameters DEPLOY_SCENARIO="os-nosdn-nofeature-noha" export TMPDIR=$HOME/tmpdir -BRIDGE=${BRIDGE:-pxebr} +BRIDGE=${BRIDGE:-,,,} LAB_NAME=${NODE_NAME/-*} POD_NAME=${NODE_NAME/*-} @@ -89,7 +89,7 @@ FUEL_LOG_FILENAME="${JOB_NAME}_${BUILD_NUMBER}.log.tar.gz" # construct the command DEPLOY_COMMAND="sudo $WORKSPACE/fuel/ci/deploy.sh -b file://$WORKSPACE/securedlab \ -l $LAB_NAME -p $POD_NAME -s $DEPLOY_SCENARIO -i file://$WORKSPACE/opnfv.iso \ - -H -B $BRIDGE -S $TMPDIR -L $WORKSPACE/$FUEL_LOG_FILENAME" + -B $BRIDGE -S $TMPDIR -L $WORKSPACE/$FUEL_LOG_FILENAME" # log info to console echo "Deployment parameters" diff --git a/jjb/multisite/multisite-daily-jobs.yml b/jjb/multisite/multisite-daily-jobs.yml index 06cefb646..c5e1866e3 100644 --- a/jjb/multisite/multisite-daily-jobs.yml +++ b/jjb/multisite/multisite-daily-jobs.yml @@ -193,6 +193,7 @@ publishers: - 'multisite-{phase}-publisher' + - email-jenkins-admins-on-failure ######################## # builder macros diff --git a/jjb/ovsnfv/ovsnfv.yml b/jjb/ovsnfv/ovsnfv.yml index 0e8c713fd..62f6de05a 100644 --- a/jjb/ovsnfv/ovsnfv.yml +++ b/jjb/ovsnfv/ovsnfv.yml @@ -141,6 +141,7 @@ publishers: - email: recipients: therbert@redhat.com mark.d.gray@intel.com billy.o.mahony@intel.com + - email-jenkins-admins-on-failure - builder: name: build-rpms diff --git a/jjb/qtip/qtip-integration-jobs.yml b/jjb/qtip/qtip-integration-jobs.yml new file mode 100644 index 000000000..46c101d7a --- /dev/null +++ b/jjb/qtip/qtip-integration-jobs.yml @@ -0,0 +1,48 @@ +###################### +# verify before MERGE +###################### + +- project: + name: qtip-integration-jobs + project: qtip + jobs: + - 'qtip-storage-{stream}' + stream: + - master: + branch: '{stream}' + gs-pathname: '' + disabled: false + +################################ +## job templates +################################# + +- job-template: + name: 'qtip-storage-{stream}' + + disabled: '{obj:disabled}' + + parameters: + - project-parameter: + project: '{project}' + branch: '{branch}' + # Pin the tests on zte-pod4 with apex deployment + - apex-defaults + - zte-pod4-defaults + scm: + - git-scm-gerrit + + triggers: + - experimental: + project: '{project}' + branch: '{branch}' + files: '**' + + builders: + - shell: | + #!/bin/bash + set -o errexit + set -o pipefail + set -o xtrace + + source integration/storperf/storperf.sh diff --git a/jjb/qtip/qtip-validate-jobs.yml b/jjb/qtip/qtip-validate-jobs.yml index 9f1ccecaf..73d7993c9 100644 --- a/jjb/qtip/qtip-validate-jobs.yml +++ b/jjb/qtip/qtip-validate-jobs.yml @@ -66,6 +66,7 @@ - qtip-validate-deploy publishers: - qtip-common-publishers + - email-jenkins-admins-on-failure ################ # MARCOS diff --git a/jjb/qtip/qtip-verify-jobs.yml b/jjb/qtip/qtip-verify-jobs.yml index 4a7dd4567..a273c858f 100644 --- a/jjb/qtip/qtip-verify-jobs.yml +++ b/jjb/qtip/qtip-verify-jobs.yml @@ -64,6 +64,7 @@ - qtip-unit-tests-and-docs-build publishers: - publish-coverage + - email-jenkins-admins-on-failure # upload juypter notebook to artifacts for review - job-template: diff --git a/jjb/qtip/qtip-weekly-jobs.yml b/jjb/qtip/qtip-weekly-jobs.yml index 2170de7b8..018248871 100644 --- a/jjb/qtip/qtip-weekly-jobs.yml +++ b/jjb/qtip/qtip-weekly-jobs.yml @@ -71,6 +71,7 @@ publishers: - email: recipients: wu.zhihui1@zte.com.cn, zhang.yujunz@zte.com.cn + - email-jenkins-admins-on-failure ################ # MARCOS diff --git a/jjb/releng/automate.yml b/jjb/releng/automate.yml index 4f6044bb5..d12ee5d68 100644 --- a/jjb/releng/automate.yml +++ b/jjb/releng/automate.yml @@ -90,6 +90,7 @@ publishers: - publish-coverage + - email-jenkins-admins-on-failure - job-template: name: '{module}-automate-{stream}' @@ -170,6 +171,7 @@ publishers: - 'email-publisher' + - email-jenkins-admins-on-failure - job-template: name: '{module}-automate-{phase}-{stream}' diff --git a/jjb/releng/opnfv-docker-arm.yml b/jjb/releng/opnfv-docker-arm.yml index 7502b17a1..d70640a7c 100644 --- a/jjb/releng/opnfv-docker-arm.yml +++ b/jjb/releng/opnfv-docker-arm.yml @@ -87,3 +87,4 @@ publishers: - email: recipients: '{receivers}' + - email-jenkins-admins-on-failure diff --git a/jjb/releng/opnfv-docker.yml b/jjb/releng/opnfv-docker.yml index fa9c441e8..7e605b9cb 100644 --- a/jjb/releng/opnfv-docker.yml +++ b/jjb/releng/opnfv-docker.yml @@ -171,6 +171,7 @@ publishers: - email: recipients: '{receivers}' + - email-jenkins-admins-on-failure - job-template: name: '{project}-docker-build-push-monitor-{stream}' diff --git a/jjb/releng/releng-ci-jobs.yml b/jjb/releng/releng-ci-jobs.yml index ecc87303f..dc9bfd5dc 100644 --- a/jjb/releng/releng-ci-jobs.yml +++ b/jjb/releng/releng-ci-jobs.yml @@ -52,6 +52,7 @@ publishers: - archive-artifacts: artifacts: 'job_output/*' + - email-jenkins-admins-on-failure - job-template: name: 'releng-merge-jjb' diff --git a/jjb/storperf/storperf.yml b/jjb/storperf/storperf.yml index 13186a1ad..f675cbb2a 100644 --- a/jjb/storperf/storperf.yml +++ b/jjb/storperf/storperf.yml @@ -81,6 +81,7 @@ healthy: 50 unhealthy: 40 failing: 30 + - email-jenkins-admins-on-failure - job-template: name: 'storperf-merge-{stream}' @@ -135,6 +136,7 @@ healthy: 50 unhealthy: 40 failing: 30 + - email-jenkins-admins-on-failure - job-template: name: 'storperf-daily-{stream}' diff --git a/jjb/xci/bifrost-cleanup-job.yml b/jjb/xci/bifrost-cleanup-job.yml index d5a444d09..998464a5e 100644 --- a/jjb/xci/bifrost-cleanup-job.yml +++ b/jjb/xci/bifrost-cleanup-job.yml @@ -83,6 +83,7 @@ publishers: - email: recipients: fatih.degirmenci@ericsson.com yroblamo@redhat.com mchandras@suse.de jack.morgan@intel.com zhang.jun3g@zte.com.cn + - email-jenkins-admins-on-failure #-------------------------------- # trigger macros #-------------------------------- diff --git a/jjb/xci/bifrost-verify-jobs.yml b/jjb/xci/bifrost-verify-jobs.yml index 319f8eb28..fbe7ecf41 100644 --- a/jjb/xci/bifrost-verify-jobs.yml +++ b/jjb/xci/bifrost-verify-jobs.yml @@ -169,6 +169,7 @@ publishers: - email: recipients: fatih.degirmenci@ericsson.com yroblamo@redhat.com mchandras@suse.de jack.morgan@intel.com julienjut@gmail.com + - email-jenkins-admins-on-failure #-------------------------------- # trigger macros #-------------------------------- diff --git a/jjb/xci/xci-daily-jobs.yml b/jjb/xci/xci-daily-jobs.yml index 64e13d3eb..b582772c2 100644 --- a/jjb/xci/xci-daily-jobs.yml +++ b/jjb/xci/xci-daily-jobs.yml @@ -148,6 +148,7 @@ publishers: - email: recipients: fatih.degirmenci@ericsson.com yroblamo@redhat.com mchandras@suse.de jack.morgan@intel.com julienjut@gmail.com + - email-jenkins-admins-on-failure - job-template: name: 'xci-{phase}-{pod}-{distro}-daily-{stream}' diff --git a/jjb/yardstick/yardstick-daily-jobs.yml b/jjb/yardstick/yardstick-daily-jobs.yml index 4dcface59..007384b7a 100644 --- a/jjb/yardstick/yardstick-daily-jobs.yml +++ b/jjb/yardstick/yardstick-daily-jobs.yml @@ -287,6 +287,7 @@ publishers: - email: recipients: jean.gaoliang@huawei.com limingjiang@huawei.com ross.b.brattain@intel.com + - email-jenkins-admins-on-failure ######################## # builder macros diff --git a/utils/push-test-logs.sh b/utils/push-test-logs.sh index 5021b7832..eb57deb7b 100644 --- a/utils/push-test-logs.sh +++ b/utils/push-test-logs.sh @@ -30,7 +30,8 @@ node_list=(\ 'arm-pod1' 'arm-pod3' \ 'huawei-pod1' 'huawei-pod2' 'huawei-pod3' 'huawei-pod4' 'huawei-pod5' \ 'huawei-pod6' 'huawei-pod7' 'huawei-pod12' \ -'huawei-virtual1' 'huawei-virtual2' 'huawei-virtual3' 'huawei-virtual4'\ +'huawei-virtual1' 'huawei-virtual2' 'huawei-virtual3' 'huawei-virtual4' \ +'zte-pod2' \ 'zte-virtual1') diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/app.js b/utils/test/testapi/3rd_party/static/testapi-ui/app.js index bb31ab081..5f5b86159 100644 --- a/utils/test/testapi/3rd_party/static/testapi-ui/app.js +++ b/utils/test/testapi/3rd_party/static/testapi-ui/app.js @@ -26,6 +26,22 @@ .module('testapiApp') .config(configureRoutes); + angular + .module('testapiApp') + .directive('dynamicModel', ['$compile', '$parse', function ($compile, $parse) { + return { + restrict: 'A', + terminal: true, + priority: 100000, + link: function (scope, elem) { + var name = $parse(elem.attr('dynamic-model'))(scope); + elem.removeAttr('dynamic-model'); + elem.attr('ng-model', name); + $compile(elem)(scope); + } + }; + }]); + configureRoutes.$inject = ['$stateProvider', '$urlRouterProvider']; /** @@ -43,10 +59,10 @@ url: '/about', templateUrl: 'testapi-ui/components/about/about.html' }). - state('guidelines', { - url: '/guidelines', - templateUrl: 'testapi-ui/components/guidelines/guidelines.html', - controller: 'GuidelinesController as ctrl' + state('pods', { + url: '/pods', + templateUrl: 'testapi-ui/components/pods/pods.html', + controller: 'PodsController as ctrl' }). state('communityResults', { url: '/community_results', diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/components/guidelines/guidelines.html b/utils/test/testapi/3rd_party/static/testapi-ui/components/guidelines/guidelines.html deleted file mode 100644 index 1dd39ff17..000000000 --- a/utils/test/testapi/3rd_party/static/testapi-ui/components/guidelines/guidelines.html +++ /dev/null @@ -1,80 +0,0 @@ -<h3>OpenStack Powered™ Guidelines</h3> - -<!-- Guideline Filters --> -<div class="row"> - <div class="col-md-3"> - <strong>Version:</strong> - <!-- Slicing the version file name here gets rid of the '.json' file extension --> - <select ng-model="ctrl.version" - ng-change="ctrl.update()" - class="form-control" - ng-options="versionFile.slice(0,-5) for versionFile in ctrl.versionList"> - </select> - </div> - <div class="col-md-4"> - <strong>Target Program:</strong> - <span class="program-about"><a target="_blank" href="http://www.openstack.org/brand/interop/">About</a></span> - <select ng-model="ctrl.target" class="form-control" ng-change="ctrl.updateTargetCapabilities()"> - <option value="platform">OpenStack Powered Platform</option> - <option value="compute">OpenStack Powered Compute</option> - <option value="object">OpenStack Powered Object Storage</option> - </select> - </div> -</div> - -<br /> -<div ng-if="ctrl.guidelines"> - <strong>Guideline Status:</strong> - {{ctrl.guidelines.status | capitalize}} -</div> - -<div ng-show="ctrl.guidelines"> - <strong>Corresponding OpenStack Releases:</strong> - <ul class="list-inline"> - <li ng-repeat="release in ctrl.guidelines.releases"> - {{release | capitalize}} - </li> - </ul> -</div> - -<strong>Capability Status:</strong> -<div class="checkbox"> - <label> - <input type="checkbox" ng-model="ctrl.status.required"> - <span class="required">Required</span> - </label> - <label> - <input type="checkbox" ng-model="ctrl.status.advisory"> - <span class="advisory">Advisory</span> - </label> - <label> - <input type="checkbox" ng-model="ctrl.status.deprecated"> - <span class="deprecated">Deprecated</span> - </label> - <label> - <input type="checkbox" ng-model="ctrl.status.removed"> - <span class="removed">Removed</span> - </label> - <a class="test-list-dl pull-right" - title="Get a test list for capabilities matching selected statuses." - ng-click="ctrl.openTestListModal()"> - - Test List <span class="glyphicon glyphicon-file"></span> - </a> -</div> -<!-- End Capability Filters --> - -<p><small>Tests marked with <span class="glyphicon glyphicon-flag text-warning"></span> are tests flagged by Interop Working Group.</small></p> - -<!-- Loading animation divs --> -<div cg-busy="{promise:ctrl.versionsRequest,message:'Loading versions'}"></div> -<div cg-busy="{promise:ctrl.capsRequest,message:'Loading capabilities'}"></div> - -<!-- Get the version-specific template --> -<div ng-include src="ctrl.detailsTemplate"></div> - -<div ng-show="ctrl.showError" class="alert alert-danger" role="alert"> - <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> - <span class="sr-only">Error:</span> - {{ctrl.error}} -</div> diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/components/guidelines/guidelinesController.js b/utils/test/testapi/3rd_party/static/testapi-ui/components/guidelines/guidelinesController.js deleted file mode 100644 index a6f4258a2..000000000 --- a/utils/test/testapi/3rd_party/static/testapi-ui/components/guidelines/guidelinesController.js +++ /dev/null @@ -1,322 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -(function () { - 'use strict'; - - angular - .module('testapiApp') - .controller('GuidelinesController', GuidelinesController); - - GuidelinesController.$inject = ['$http', '$uibModal', 'testapiApiUrl']; - - /** - * TestAPI Guidelines Controller - * This controller is for the '/guidelines' page where a user can browse - * through tests belonging to Interop WG defined capabilities. - */ - function GuidelinesController($http, $uibModal, testapiApiUrl) { - var ctrl = this; - - ctrl.getVersionList = getVersionList; - ctrl.update = update; - ctrl.updateTargetCapabilities = updateTargetCapabilities; - ctrl.filterStatus = filterStatus; - ctrl.getObjectLength = getObjectLength; - ctrl.openTestListModal = openTestListModal; - - /** The target OpenStack marketing program to show capabilities for. */ - ctrl.target = 'platform'; - - /** The various possible capability statuses. */ - ctrl.status = { - required: true, - advisory: false, - deprecated: false, - removed: false - }; - - /** - * The template to load for displaying capability details. - */ - ctrl.detailsTemplate = 'components/guidelines/partials/' + - 'guidelineDetails.html'; - - /** - * Retrieve an array of available guideline files from the TestAPI - * API server, sort this array reverse-alphabetically, and store it in - * a scoped variable. The scope's selected version is initialized to - * the latest (i.e. first) version here as well. After a successful API - * call, the function to update the capabilities is called. - * Sample API return array: ["2015.03.json", "2015.04.json"] - */ - function getVersionList() { - var content_url = testapiApiUrl + '/guidelines'; - ctrl.versionsRequest = - $http.get(content_url).success(function (data) { - ctrl.versionList = data.sort().reverse(); - // Default to the first approved guideline which is expected - // to be at index 1. - ctrl.version = ctrl.versionList[1]; - ctrl.update(); - }).error(function (error) { - ctrl.showError = true; - ctrl.error = 'Error retrieving version list: ' + - angular.toJson(error); - }); - } - - /** - * This will contact the TestAPI API server to retrieve the JSON - * content of the guideline file corresponding to the selected - * version. - */ - function update() { - var content_url = testapiApiUrl + '/guidelines/' + ctrl.version; - ctrl.capsRequest = - $http.get(content_url).success(function (data) { - ctrl.guidelines = data; - ctrl.updateTargetCapabilities(); - }).error(function (error) { - ctrl.showError = true; - ctrl.guidelines = null; - ctrl.error = 'Error retrieving guideline content: ' + - angular.toJson(error); - }); - } - - /** - * This will update the scope's 'targetCapabilities' object with - * capabilities belonging to the selected OpenStack marketing program - * (programs typically correspond to 'components' in the Interop WG - * schema). Each capability will have its status mapped to it. - */ - function updateTargetCapabilities() { - ctrl.targetCapabilities = {}; - var components = ctrl.guidelines.components; - var targetCaps = ctrl.targetCapabilities; - - // The 'platform' target is comprised of multiple components, so - // we need to get the capabilities belonging to each of its - // components. - if (ctrl.target === 'platform') { - var platform_components = ctrl.guidelines.platform.required; - - // This will contain status priority values, where lower - // values mean higher priorities. - var statusMap = { - required: 1, - advisory: 2, - deprecated: 3, - removed: 4 - }; - - // For each component required for the platform program. - angular.forEach(platform_components, function (component) { - // Get each capability list belonging to each status. - angular.forEach(components[component], - function (caps, status) { - // For each capability. - angular.forEach(caps, function(cap) { - // If the capability has already been added. - if (cap in targetCaps) { - // If the status priority value is less - // than the saved priority value, update - // the value. - if (statusMap[status] < - statusMap[targetCaps[cap]]) { - targetCaps[cap] = status; - } - } - else { - targetCaps[cap] = status; - } - }); - }); - }); - } - else { - angular.forEach(components[ctrl.target], - function (caps, status) { - angular.forEach(caps, function(cap) { - targetCaps[cap] = status; - }); - }); - } - } - - /** - * This filter will check if a capability's status corresponds - * to a status that is checked/selected in the UI. This filter - * is meant to be used with the ng-repeat directive. - * @param {Object} capability - * @returns {Boolean} True if capability's status is selected - */ - function filterStatus(capability) { - var caps = ctrl.targetCapabilities; - return (ctrl.status.required && - caps[capability.id] === 'required') || - (ctrl.status.advisory && - caps[capability.id] === 'advisory') || - (ctrl.status.deprecated && - caps[capability.id] === 'deprecated') || - (ctrl.status.removed && - caps[capability.id] === 'removed'); - } - - /** - * This function will get the length of an Object/dict based on - * the number of keys it has. - * @param {Object} object - * @returns {Number} length of object - */ - function getObjectLength(object) { - return Object.keys(object).length; - } - - /** - * This will open the modal that will show a list of all tests - * belonging to capabilities with the selected status(es). - */ - function openTestListModal() { - $uibModal.open({ - templateUrl: '/components/guidelines/partials' + - '/testListModal.html', - backdrop: true, - windowClass: 'modal', - animation: true, - controller: 'TestListModalController as modal', - size: 'lg', - resolve: { - version: function () { - return ctrl.version.slice(0, -5); - }, - target: function () { - return ctrl.target; - }, - status: function () { - return ctrl.status; - } - } - }); - } - - ctrl.getVersionList(); - } - - angular - .module('testapiApp') - .controller('TestListModalController', TestListModalController); - - TestListModalController.$inject = [ - '$uibModalInstance', '$http', 'version', - 'target', 'status', 'testapiApiUrl' - ]; - - /** - * Test List Modal Controller - * This controller is for the modal that appears if a user wants to see the - * test list corresponding to Interop WG capabilities with the selected - * statuses. - */ - function TestListModalController($uibModalInstance, $http, version, - target, status, testapiApiUrl) { - - var ctrl = this; - - ctrl.version = version; - ctrl.target = target; - ctrl.status = status; - ctrl.close = close; - ctrl.updateTestListString = updateTestListString; - - ctrl.aliases = true; - ctrl.flagged = false; - - // Check if the API URL is absolute or relative. - if (testapiApiUrl.indexOf('http') > -1) { - ctrl.url = testapiApiUrl; - } - else { - ctrl.url = location.protocol + '//' + location.host + - testapiApiUrl; - } - - /** - * This function will close/dismiss the modal. - */ - function close() { - $uibModalInstance.dismiss('exit'); - } - - /** - * This function will return a list of statuses based on which ones - * are selected. - */ - function getStatusList() { - var statusList = []; - angular.forEach(ctrl.status, function(value, key) { - if (value) { - statusList.push(key); - } - }); - return statusList; - } - - /** - * This will get the list of tests from the API and update the - * controller's test list string variable. - */ - function updateTestListString() { - var statuses = getStatusList(); - if (!statuses.length) { - ctrl.error = 'No tests matching selected criteria.'; - return; - } - ctrl.testListUrl = [ - ctrl.url, '/guidelines/', ctrl.version, '/tests?', - 'target=', ctrl.target, '&', - 'type=', statuses.join(','), '&', - 'alias=', ctrl.aliases.toString(), '&', - 'flag=', ctrl.flagged.toString() - ].join(''); - ctrl.testListRequest = - $http.get(ctrl.testListUrl). - then(function successCallback(response) { - ctrl.error = null; - ctrl.testListString = response.data; - if (!ctrl.testListString) { - ctrl.testListCount = 0; - } - else { - ctrl.testListCount = - ctrl.testListString.split('\n').length; - } - }, function errorCallback(response) { - ctrl.testListString = null; - ctrl.testListCount = null; - if (angular.isObject(response.data) && - response.data.message) { - ctrl.error = 'Error retrieving test list: ' + - response.data.message; - } - else { - ctrl.error = 'Unknown error retrieving test list.'; - } - }); - } - - updateTestListString(); - } -})(); diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html b/utils/test/testapi/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html deleted file mode 100644 index f020c9a09..000000000 --- a/utils/test/testapi/3rd_party/static/testapi-ui/components/guidelines/partials/guidelineDetails.html +++ /dev/null @@ -1,50 +0,0 @@ -<!-- -HTML for guidelines page for all OpenStack Powered (TM) guideline schemas -This expects the JSON data of the guidelines file to be stored in scope -variable 'guidelines'. ---> - -<ol ng-show="ctrl.guidelines" class="capabilities"> - <li class="capability-list-item" ng-repeat="capability in ctrl.guidelines.capabilities | arrayConverter | filter:ctrl.filterStatus | orderBy:'id'"> - <span class="capability-name">{{capability.id}}</span><br /> - <em>{{capability.description}}</em><br /> - Status: <span class="{{ctrl.targetCapabilities[capability.id]}}">{{ctrl.targetCapabilities[capability.id]}}</span><br /> - <span ng-if="capability.project">Project: {{capability.project | capitalize}}<br /></span> - <a ng-click="showAchievements = !showAchievements">Achievements ({{capability.achievements.length}})</a><br /> - <ol uib-collapse="!showAchievements" class="list-inline"> - <li ng-repeat="achievement in capability.achievements"> - {{achievement}} - </li> - </ol> - - <a ng-click="showTests = !showTests">Tests ({{ctrl.getObjectLength(capability.tests)}})</a> - <ul uib-collapse="!showTests"> - <li ng-if="ctrl.guidelines.schema === '1.2'" ng-repeat="test in capability.tests"> - <span ng-class="{'glyphicon glyphicon-flag text-warning': capability.flagged.indexOf(test) > -1}"></span> - {{test}} - </li> - <li ng-if="ctrl.guidelines.schema > '1.2'" ng-repeat="(testName, testDetails) in capability.tests"> - <span ng-class="{'glyphicon glyphicon-flag text-warning': testDetails.flagged}" title="{{testDetails.flagged.reason}}"></span> - {{testName}} - <div class="test-detail" ng-if="testDetails.aliases"> - <strong>Aliases:</strong> - <ul><li ng-repeat="alias in testDetails.aliases">{{alias}}</li></ul> - </div> - </li> - </ul> - </li> -</ol> - -<div ng-show="ctrl.guidelines" class="criteria"> - <hr> - <h4><a ng-click="showCriteria = !showCriteria">Criteria</a></h4> - <div uib-collapse="showCriteria"> - <ul> - <li ng-repeat="(key, criterion) in ctrl.guidelines.criteria"> - <span class="criterion-name">{{criterion.name}}</span><br /> - <em>{{criterion.Description}}</em><br /> - Weight: {{criterion.weight}} - </li> - </ul> - </div> -</div> diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html b/utils/test/testapi/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html deleted file mode 100644 index 5b1d698d5..000000000 --- a/utils/test/testapi/3rd_party/static/testapi-ui/components/guidelines/partials/testListModal.html +++ /dev/null @@ -1,46 +0,0 @@ -<div class="modal-content"> - <div class="modal-header"> - <button type="button" class="close" aria-hidden="true" ng-click="modal.close()">×</button> - <h4>Test List ({{modal.testListCount}})</h4> - <p>Use this test list with <a title="testapi-client" target="_blank"href="https://github.com/openstack/testapi-client">testapi-client</a> - to run only tests in the {{modal.version}} OpenStack Powered™ guideline from capabilities with the following statuses: - </p> - <ul class="list-inline"> - <li class="required" ng-if="modal.status.required"> Required</li> - <li class="advisory" ng-if="modal.status.advisory"> Advisory</li> - <li class="deprecated" ng-if="modal.status.deprecated"> Deprecated</li> - <li class="removed" ng-if="modal.status.removed"> Removed</li> - </ul> - <div class="checkbox checkbox-test-list"> - <label><input type="checkbox" ng-model="modal.aliases" ng-change="modal.updateTestListString()">Aliases</label> - <span class="glyphicon glyphicon-info-sign info-hover" aria-hidden="true" - title="Include test aliases as tests may have been renamed over time. It does not hurt to include these."></span> - - <label><input type="checkbox" ng-model="modal.flagged" ng-change="modal.updateTestListString()">Flagged</label> - <span class="glyphicon glyphicon-info-sign info-hover" aria-hidden="true" - title="Include flagged tests."> - </span> - </div> - <p ng-hide="modal.error"> Alternatively, get the test list directly from the API on your CLI:</p> - <code ng-hide="modal.error">wget "{{modal.testListUrl}}" -O {{modal.version}}-test-list.txt</code> - </div> - <div class="modal-body tests-modal-content"> - <div cg-busy="{promise:modal.testListRequest,message:'Loading'}"></div> - <div ng-show="modal.error" class="alert alert-danger" role="alert"> - <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> - <span class="sr-only">Error:</span> - {{modal.error}} - </div> - <div class="form-group"> - <textarea class="form-control" rows="16" id="tests" wrap="off">{{modal.testListString}}</textarea> - </div> - </div> - <div class="modal-footer"> - <a target="_blank" href="{{modal.testListUrl}}" download="{{modal.version + '-test-list.txt'}}"> - <button class="btn btn-primary" ng-if="modal.testListCount > 0" type="button"> - Download - </button> - </a> - <button class="btn btn-primary" type="button" ng-click="modal.close()">Close</button> - </div> -</div> diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/components/pods/pods.html b/utils/test/testapi/3rd_party/static/testapi-ui/components/pods/pods.html new file mode 100644 index 000000000..cdfcfaf36 --- /dev/null +++ b/utils/test/testapi/3rd_party/static/testapi-ui/components/pods/pods.html @@ -0,0 +1,71 @@ +<h3>{{ctrl.pageHeader}}</h3> +<p>{{ctrl.pageParagraph}}</p> +<div class="row" style="margin-bottom:24px;"></div> + +<div class="pod-create"> + <h4>Create</h4> + <div class="row"> + <div ng-repeat="require in ctrl.createRequirements"> + <div class="create-pod" style="margin-left:24px;"> + <p class="input-group"> + <label for="cpid">{{require.label|capitalize}}: </label> + <a ng-if="require.type == 'select'"> + <select dynamic-model="'ctrl.' + require.label" ng-options="option for option in require.selects"></select> + </a> + <a ng-if="require.type == 'text'"> + <input type="text" dynamic-model="'ctrl.' + require.label"/> + </a> + <a ng-if="require.type == 'textarea'"> + <textarea rows="2" cols="50" dynamic-model="'ctrl.' + require.label"> + </textarea> + </a> + </p> + </div> + </div> + + <div class="col-md-3" style="margin-top:12px; margin-left:8px;"> + <button type="submit" class="btn btn-primary" ng-click="ctrl.create()">Create</button> + </div> + </div> +</div> + +<div class="pods-filters" style="margin-top:36px;"> + <h4>Filters</h4> + <div class="row"> + <div class="col-md-3" style="margin-top:12px; margin-left:8px;"> + <button type="submit" class="btn btn-primary" ng-click="ctrl.update()">Filter</button> + <button type="submit" class="btn btn-primary btn-danger" ng-click="ctrl.clearFilters()">Clear</button> + </div> + </div> +</div> + +<div cg-busy="{promise:ctrl.authRequest,message:'Loading'}"></div> +<div cg-busy="{promise:ctrl.podsRequest,message:'Loading'}"></div> + +<div ng-show="ctrl.data" class="pods-table" style="margin-top:24px; margin-left:8px;"> + <table ng-data="ctrl.data.pods" ng-show="ctrl.data" class="table table-striped table-hover"> + <tbody> + <tr ng-repeat-start="(index, pod) in ctrl.data.pods"> + <td> + <a href="#" ng-click="showPod = !showPod">{{pod.name}}</a> + <div class="show-pod" ng-class="{ 'hidden': ! showPod }" style="margin-left:24px;"> + <p> + role: {{pod.role}}<br> + mode: {{pod.mode}}<br> + create_date: {{pod.creation_date}}<br> + details: {{pod.details}} + </p> + </div> + </td> + </tr> + <tr ng-repeat-end=> + </tr> + </tbody> + </table> +</div> + +<div ng-show="ctrl.showError" class="alert alert-danger" role="alert"> + <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> + <span class="sr-only">Error:</span> + {{ctrl.error}} +</div> diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/components/pods/podsController.js b/utils/test/testapi/3rd_party/static/testapi-ui/components/pods/podsController.js new file mode 100644 index 000000000..53e8b1eff --- /dev/null +++ b/utils/test/testapi/3rd_party/static/testapi-ui/components/pods/podsController.js @@ -0,0 +1,119 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function () { + 'use strict'; + + angular + .module('testapiApp') + .controller('PodsController', PodsController); + + PodsController.$inject = [ + '$scope', '$http', '$filter', '$state', 'testapiApiUrl','raiseAlert' + ]; + + /** + * TestAPI Pods Controller + * This controller is for the '/pods' page where a user can browse + * through pods declared in TestAPI. + */ + function PodsController($scope, $http, $filter, $state, testapiApiUrl, + raiseAlert) { + var ctrl = this; + + ctrl.url = testapiApiUrl + '/pods'; + + ctrl.create = create; + ctrl.update = update; + ctrl.open = open; + ctrl.clearFilters = clearFilters; + + ctrl.roles = ['community-ci', 'production-ci']; + ctrl.modes = ['metal', 'virtual']; + ctrl.createRequirements = [ + {label: 'name', type: 'text', required: true}, + {label: 'mode', type: 'select', selects: ctrl.modes}, + {label: 'role', type: 'select', selects: ctrl.roles}, + {label: 'details', type: 'textarea', required: false} + ]; + + ctrl.name = ''; + ctrl.role = 'community-ci'; + ctrl.mode = 'metal'; + ctrl.details = ''; + + ctrl.pageHeader = 'Pods'; + ctrl.pageParagraph = 'This page is used to create or query pods.'; + + /** + * This is called when the date filter calendar is opened. It + * does some event handling, and sets a scope variable so the UI + * knows which calendar was opened. + * @param {Object} $event - The Event object + * @param {String} openVar - Tells which calendar was opened + */ + function open($event, openVar) { + $event.preventDefault(); + $event.stopPropagation(); + ctrl[openVar] = true; + } + + /** + * This function will clear all filters and update the results + * listing. + */ + function clearFilters() { + ctrl.update(); + } + + /** + * This will contact the TestAPI to create a new pod. + */ + function create() { + ctrl.showError = false; + var pods_url = ctrl.url; + var body = { + name: ctrl.name, + mode: ctrl.mode, + role: ctrl.role, + details: ctrl.details + }; + + ctrl.podsRequest = + $http.post(pods_url, body).error(function (error) { + ctrl.showError = true; + ctrl.error = + 'Error creating the new pod from server: ' + + angular.toJson(error); + }); + } + + /** + * This will contact the TestAPI to get a listing of declared pods. + */ + function update() { + ctrl.showError = false; + ctrl.podsRequest = + $http.get(ctrl.url).success(function (data) { + ctrl.data = data; + }).error(function (error) { + ctrl.data = null; + ctrl.showError = true; + ctrl.error = + 'Error retrieving pods from server: ' + + angular.toJson(error); + }); + } + } +})(); diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/index.html b/utils/test/testapi/3rd_party/static/testapi-ui/index.html index 46ccc61b8..2d7399f93 100644 --- a/utils/test/testapi/3rd_party/static/testapi-ui/index.html +++ b/utils/test/testapi/3rd_party/static/testapi-ui/index.html @@ -40,7 +40,7 @@ <script src="testapi-ui/shared/header/headerController.js"></script> <script src="testapi-ui/shared/alerts/alertModalFactory.js"></script> <script src="testapi-ui/shared/alerts/confirmModalFactory.js"></script> - <script src="testapi-ui/components/guidelines/guidelinesController.js"></script> + <script src="testapi-ui/components/pods/podsController.js"></script> <script src="testapi-ui/components/results/resultsController.js"></script> <script src="testapi-ui/components/results-report/resultsReportController.js"></script> <script src="testapi-ui/components/profile/profileController.js"></script> diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/shared/header/header.html b/utils/test/testapi/3rd_party/static/testapi-ui/shared/header/header.html index 85c33b68d..f5b2414c4 100644 --- a/utils/test/testapi/3rd_party/static/testapi-ui/shared/header/header.html +++ b/utils/test/testapi/3rd_party/static/testapi-ui/shared/header/header.html @@ -17,7 +17,7 @@ TestAPI <ul class="nav navbar-nav"> <li ng-class="{ active: header.isActive('/')}"><a ui-sref="home">Home</a></li> <li ng-class="{ active: header.isActive('/about')}"><a ui-sref="about">About</a></li> - <li ng-class="{ active: header.isActive('/guidelines')}"><a ui-sref="guidelines">OPNFV Powered™ Guidelines</a></li> + <li ng-class="{ active: header.isActive('/pods')}"><a ui-sref="pods">Pods</a></li> <li ng-class="{ active: header.isActive('/community_results')}"><a ui-sref="communityResults">Community Results</a></li> <!-- <li ng-class="{ active: header.isCatalogActive('public')}" class="dropdown" uib-dropdown> diff --git a/utils/test/testapi/docker/prepare-env.sh b/utils/test/testapi/docker/prepare-env.sh index 4f1be7d6a..b14bc2448 100755 --- a/utils/test/testapi/docker/prepare-env.sh +++ b/utils/test/testapi/docker/prepare-env.sh @@ -8,7 +8,6 @@ fi if [ "$base_url" != "" ]; then sudo crudini --set --existing $FILE api url $base_url/api/v1 - sudo crudini --set --existing $FILE swagger base_url $base_url sudo crudini --set --existing $FILE ui url $base_url sudo echo "{\"testapiApiUrl\": \"$base_url/api/v1\"}" > \ /usr/local/lib/python2.7/dist-packages/opnfv_testapi/static/testapi-ui/config.json diff --git a/utils/test/testapi/etc/config.ini b/utils/test/testapi/etc/config.ini index 435188df7..1ec899fcb 100644 --- a/utils/test/testapi/etc/config.ini +++ b/utils/test/testapi/etc/config.ini @@ -18,9 +18,6 @@ results_per_page = 20 debug = True authenticate = False -[swagger] -base_url = http://localhost:8000 - [ui] url = http://localhost:8000 diff --git a/utils/test/testapi/opnfv_testapi/cmd/server.py b/utils/test/testapi/opnfv_testapi/cmd/server.py index a5ac5eb6b..50ac049a0 100644 --- a/utils/test/testapi/opnfv_testapi/cmd/server.py +++ b/utils/test/testapi/opnfv_testapi/cmd/server.py @@ -37,7 +37,7 @@ from opnfv_testapi.tornado_swagger import swagger def make_app(): - swagger.docs(base_url=CONF.swagger_base_url, + swagger.docs(base_url=CONF.ui_url, static_path=CONF.static_path) return swagger.Application( url_mappings.mappings, diff --git a/utils/test/testapi/opnfv_testapi/tests/unit/common/noparam.ini b/utils/test/testapi/opnfv_testapi/tests/unit/common/noparam.ini index fda2a09e9..be7f2b9f8 100644 --- a/utils/test/testapi/opnfv_testapi/tests/unit/common/noparam.ini +++ b/utils/test/testapi/opnfv_testapi/tests/unit/common/noparam.ini @@ -12,5 +12,5 @@ port = 8000 debug = True authenticate = False -[swagger] -base_url = http://localhost:8000 +[ui] +url = http://localhost:8000 diff --git a/utils/test/testapi/opnfv_testapi/tests/unit/common/normal.ini b/utils/test/testapi/opnfv_testapi/tests/unit/common/normal.ini index 77cc6c6ee..c81c6c56a 100644 --- a/utils/test/testapi/opnfv_testapi/tests/unit/common/normal.ini +++ b/utils/test/testapi/opnfv_testapi/tests/unit/common/normal.ini @@ -13,5 +13,5 @@ port = 8000 debug = True authenticate = False -[swagger] -base_url = http://localhost:8000 +[ui] +url = http://localhost:8000 diff --git a/utils/test/testapi/opnfv_testapi/tests/unit/common/nosection.ini b/utils/test/testapi/opnfv_testapi/tests/unit/common/nosection.ini index 9988fc0a4..a9ed49c5c 100644 --- a/utils/test/testapi/opnfv_testapi/tests/unit/common/nosection.ini +++ b/utils/test/testapi/opnfv_testapi/tests/unit/common/nosection.ini @@ -7,5 +7,5 @@ port = 8000 debug = True authenticate = False -[swagger] -base_url = http://localhost:8000 +[ui] +url = http://localhost:8000 diff --git a/utils/test/testapi/opnfv_testapi/tests/unit/common/notboolean.ini b/utils/test/testapi/opnfv_testapi/tests/unit/common/notboolean.ini index b3f327670..3a11f9dd3 100644 --- a/utils/test/testapi/opnfv_testapi/tests/unit/common/notboolean.ini +++ b/utils/test/testapi/opnfv_testapi/tests/unit/common/notboolean.ini @@ -13,5 +13,5 @@ port = 8000 debug = True authenticate = notboolean -[swagger] -base_url = http://localhost:8000 +[ui] +url = http://localhost:8000 diff --git a/utils/test/testapi/opnfv_testapi/tests/unit/common/notint.ini b/utils/test/testapi/opnfv_testapi/tests/unit/common/notint.ini index d1b752a34..8180719b8 100644 --- a/utils/test/testapi/opnfv_testapi/tests/unit/common/notint.ini +++ b/utils/test/testapi/opnfv_testapi/tests/unit/common/notint.ini @@ -13,5 +13,5 @@ port = notint debug = True authenticate = False -[swagger] -base_url = http://localhost:8000 +[ui] +url = http://localhost:8000 diff --git a/utils/test/testapi/opnfv_testapi/tests/unit/common/test_config.py b/utils/test/testapi/opnfv_testapi/tests/unit/common/test_config.py index cc8743ca8..8cfc513be 100644 --- a/utils/test/testapi/opnfv_testapi/tests/unit/common/test_config.py +++ b/utils/test/testapi/opnfv_testapi/tests/unit/common/test_config.py @@ -12,4 +12,4 @@ def test_config_normal(mocker, config_normal): assert CONF.api_port == 8000 assert CONF.api_debug is True assert CONF.api_authenticate is False - assert CONF.swagger_base_url == 'http://localhost:8000' + assert CONF.ui_url == 'http://localhost:8000' |