diff options
59 files changed, 1067 insertions, 457 deletions
diff --git a/UPSTREAM b/UPSTREAM new file mode 100644 index 000000000..65e44f504 --- /dev/null +++ b/UPSTREAM @@ -0,0 +1,448 @@ +# Upstream contributions, bitergia will crawl this and extract the relevant information +# system is one of Gerrit, Bugzilla, Launchpad (insert more) +# +# All the contributions listed in this file are merged commits. Contributions under +# review, in progress and abandoned are not included. +# The latest contribution included in this file is 453130 and it is dated 2017-05-23. +# Contributions from Yolanda Robla Mota have not been included yet. +# The gerrit query used to list contributions is +# status:merged AND (owner: "Markos Chandras" OR owner: "Fatih Degirmenci") +--- +- + url: https://review.openstack.org/#/c/453130/ + system: Gerrit +- + url: https://review.openstack.org/#/c/466422/ + system: Gerrit +- + url: https://review.openstack.org/#/c/466421/ + system: Gerrit +- + url: https://review.openstack.org/#/c/466249/ + system: Gerrit +- + url: https://review.openstack.org/#/c/465927/ + system: Gerrit +- + url: https://review.openstack.org/#/c/465686/ + system: Gerrit +- + url: https://review.openstack.org/#/c/465685/ + system: Gerrit +- + url: https://review.openstack.org/#/c/464759/ + system: Gerrit +- + url: https://review.openstack.org/#/c/464180/ + system: Gerrit +- + url: https://review.openstack.org/#/c/464629/ + system: Gerrit +- + url: https://review.openstack.org/#/c/463359/ + system: Gerrit +- + url: https://review.openstack.org/#/c/463313/ + system: Gerrit +- + url: https://review.openstack.org/#/c/463301/ + system: Gerrit +- + url: https://review.openstack.org/#/c/463300/ + system: Gerrit +- + url: https://review.openstack.org/#/c/462488/ + system: Gerrit +- + url: https://review.openstack.org/#/c/450970/ + system: Gerrit +- + url: https://review.openstack.org/#/c/463299/ + system: Gerrit +- + url: https://review.openstack.org/#/c/462863/ + system: Gerrit +- + url: https://review.openstack.org/#/c/461754/ + system: Gerrit +- + url: https://review.openstack.org/#/c/462859/ + system: Gerrit +- + url: https://review.openstack.org/#/c/462443/ + system: Gerrit +- + url: https://review.openstack.org/#/c/461755/ + system: Gerrit +- + url: https://review.openstack.org/#/c/461018/ + system: Gerrit +- + url: https://review.openstack.org/#/c/461017/ + system: Gerrit +- + url: https://review.openstack.org/#/c/461050/ + system: Gerrit +- + url: https://review.openstack.org/#/c/458616/ + system: Gerrit +- + url: https://review.openstack.org/#/c/460617/ + system: Gerrit +- + url: https://review.openstack.org/#/c/458797/ + system: Gerrit +- + url: https://review.openstack.org/#/c/453128/ + system: Gerrit +- + url: https://review.openstack.org/#/c/459984/ + system: Gerrit +- + url: https://review.openstack.org/#/c/460071/ + system: Gerrit +- + url: https://review.openstack.org/#/c/459779/ + system: Gerrit +- + url: https://review.openstack.org/#/c/459775/ + system: Gerrit +- + url: https://review.openstack.org/#/c/459332/ + system: Gerrit +- + url: https://review.openstack.org/#/c/459331/ + system: Gerrit +- + url: https://review.openstack.org/#/c/459330/ + system: Gerrit +- + url: https://review.openstack.org/#/c/459715/ + system: Gerrit +- + url: https://review.openstack.org/#/c/459702/ + system: Gerrit +- + url: https://review.openstack.org/#/c/459684/ + system: Gerrit +- + url: https://review.openstack.org/#/c/459599/ + system: Gerrit +- + url: https://review.openstack.org/#/c/459461/ + system: Gerrit +- + url: https://review.openstack.org/#/c/458801/ + system: Gerrit +- + url: https://review.openstack.org/#/c/457709/ + system: Gerrit +- + url: https://review.openstack.org/#/c/458246/ + system: Gerrit +- + url: https://review.openstack.org/#/c/458420/ + system: Gerrit +- + url: https://review.openstack.org/#/c/458419/ + system: Gerrit +- + url: https://review.openstack.org/#/c/450634/ + system: Gerrit +- + url: https://review.openstack.org/#/c/457695/ + system: Gerrit +- + url: https://review.openstack.org/#/c/455290/ + system: Gerrit +- + url: https://review.openstack.org/#/c/455461/ + system: Gerrit +- + url: https://review.openstack.org/#/c/448800/ + system: Gerrit +- + url: https://review.openstack.org/#/c/453609/ + system: Gerrit +- + url: https://review.openstack.org/#/c/453798/ + system: Gerrit +- + url: https://review.openstack.org/#/c/453577/ + system: Gerrit +- + url: https://review.openstack.org/#/c/453574/ + system: Gerrit +- + url: https://review.openstack.org/#/c/449183/ + system: Gerrit +- + url: https://review.openstack.org/#/c/452079/ + system: Gerrit +- + url: https://review.openstack.org/#/c/452160/ + system: Gerrit +- + url: https://review.openstack.org/#/c/450384/ + system: Gerrit +- + url: https://review.openstack.org/#/c/450210/ + system: Gerrit +- + url: https://review.openstack.org/#/c/451848/ + system: Gerrit +- + url: https://review.openstack.org/#/c/451426/ + system: Gerrit +- + url: https://review.openstack.org/#/c/450239/ + system: Gerrit +- + url: https://review.openstack.org/#/c/450095/ + system: Gerrit +- + url: https://review.openstack.org/#/c/448625/ + system: Gerrit +- + url: https://review.openstack.org/#/c/447444/ + system: Gerrit +- + url: https://review.openstack.org/#/c/447435/ + system: Gerrit +- + url: https://review.openstack.org/#/c/441041/ + system: Gerrit +- + url: https://review.openstack.org/#/c/444197/ + system: Gerrit +- + url: https://review.openstack.org/#/c/439938/ + system: Gerrit +- + url: https://review.openstack.org/#/c/444033/ + system: Gerrit +- + url: https://review.openstack.org/#/c/442224/ + system: Gerrit +- + url: https://review.openstack.org/#/c/428345/ + system: Gerrit +- + url: https://review.openstack.org/#/c/440614/ + system: Gerrit +- + url: https://review.openstack.org/#/c/439946/ + system: Gerrit +- + url: https://review.openstack.org/#/c/441042/ + system: Gerrit +- + url: https://review.openstack.org/#/c/439940/ + system: Gerrit +- + url: https://review.openstack.org/#/c/433517/ + system: Gerrit +- + url: https://review.openstack.org/#/c/435433/ + system: Gerrit +- + url: https://review.openstack.org/#/c/437010/ + system: Gerrit +- + url: https://review.openstack.org/#/c/436948/ + system: Gerrit +- + url: https://review.openstack.org/#/c/436000/ + system: Gerrit +- + url: https://review.openstack.org/#/c/436066/ + system: Gerrit +- + url: https://review.openstack.org/#/c/436085/ + system: Gerrit +- + url: https://review.openstack.org/#/c/435994/ + system: Gerrit +- + url: https://review.openstack.org/#/c/434328/ + system: Gerrit +- + url: https://review.openstack.org/#/c/433532/ + system: Gerrit +- + url: https://review.openstack.org/#/c/427682/ + system: Gerrit +- + url: https://review.openstack.org/#/c/428704/ + system: Gerrit +- + url: https://review.openstack.org/#/c/430864/ + system: Gerrit +- + url: https://review.openstack.org/#/c/428716/ + system: Gerrit +- + url: https://review.openstack.org/#/c/427744/ + system: Gerrit +- + url: https://review.openstack.org/#/c/426844/ + system: Gerrit +- + url: https://review.openstack.org/#/c/424853/ + system: Gerrit +- + url: https://review.openstack.org/#/c/410639/ + system: Gerrit +- + url: https://review.openstack.org/#/c/407970/ + system: Gerrit +- + url: https://review.openstack.org/#/c/387441/ + system: Gerrit +- + url: https://review.openstack.org/#/c/398317/ + system: Gerrit +- + url: https://review.openstack.org/#/c/401991/ + system: Gerrit +- + url: https://review.openstack.org/#/c/400150/ + system: Gerrit +- + url: https://review.openstack.org/#/c/404315/ + system: Gerrit +- + url: https://review.openstack.org/#/c/389171/ + system: Gerrit +- + url: https://review.openstack.org/#/c/401164/ + system: Gerrit +- + url: https://review.openstack.org/#/c/400712/ + system: Gerrit +- + url: https://review.openstack.org/#/c/392002/ + system: Gerrit +- + url: https://review.openstack.org/#/c/388242/ + system: Gerrit +- + url: https://review.openstack.org/#/c/392003/ + system: Gerrit +- + url: https://review.openstack.org/#/c/392986/ + system: Gerrit +- + url: https://review.openstack.org/#/c/392004/ + system: Gerrit +- + url: https://review.openstack.org/#/c/389079/ + system: Gerrit +- + url: https://review.openstack.org/#/c/388158/ + system: Gerrit +- + url: https://review.openstack.org/#/c/388840/ + system: Gerrit +- + url: https://review.openstack.org/#/c/388780/ + system: Gerrit +- + url: https://review.openstack.org/#/c/388847/ + system: Gerrit +- + url: https://review.openstack.org/#/c/388748/ + system: Gerrit +- + url: https://review.openstack.org/#/c/381576/ + system: Gerrit +- + url: https://review.openstack.org/#/c/381575/ + system: Gerrit +- + url: https://review.openstack.org/#/c/378532/ + system: Gerrit +- + url: https://review.openstack.org/#/c/386002/ + system: Gerrit +- + url: https://review.openstack.org/#/c/381574/ + system: Gerrit +- + url: https://review.openstack.org/#/c/381541/ + system: Gerrit +- + url: https://review.openstack.org/#/c/376303/ + system: Gerrit +- + url: https://review.openstack.org/#/c/379835/ + system: Gerrit +- + url: https://review.openstack.org/#/c/376534/ + system: Gerrit +- + url: https://review.openstack.org/#/c/375350/ + system: Gerrit +- + url: https://review.openstack.org/#/c/371602/ + system: Gerrit +- + url: https://review.openstack.org/#/c/370258/ + system: Gerrit +- + url: https://review.openstack.org/#/c/370584/ + system: Gerrit +- + url: https://review.openstack.org/#/c/363458/ + system: Gerrit +- + url: https://review.openstack.org/#/c/366835/ + system: Gerrit +- + url: https://review.openstack.org/#/c/363896/ + system: Gerrit +- + url: https://review.openstack.org/#/c/353165/ + system: Gerrit +- + url: https://review.openstack.org/#/c/361652/ + system: Gerrit +- + url: https://review.openstack.org/#/c/358477/ + system: Gerrit +- + url: https://review.openstack.org/#/c/359922/ + system: Gerrit +- + url: https://review.openstack.org/#/c/357268/ + system: Gerrit +- + url: https://review.openstack.org/#/c/357718/ + system: Gerrit +- + url: https://review.openstack.org/#/c/356964/ + system: Gerrit +- + url: https://review.openstack.org/#/c/355485/ + system: Gerrit +- + url: https://review.openstack.org/#/c/355431/ + system: Gerrit +- + url: https://review.openstack.org/#/c/355668/ + system: Gerrit +- + url: https://review.openstack.org/#/c/202056/ + system: Gerrit +- + url: https://review.openstack.org/#/c/202180/ + system: Gerrit +- + url: https://review.openstack.org/#/c/192397/ + system: Gerrit +- + url: https://review.openstack.org/#/c/192720/ + system: Gerrit +- + url: https://review.openstack.org/#/c/163149/ + system: Gerrit diff --git a/jjb/apex/apex-deploy.sh b/jjb/apex/apex-deploy.sh index 74f67ce5f..3a2ca606b 100755 --- a/jjb/apex/apex-deploy.sh +++ b/jjb/apex/apex-deploy.sh @@ -3,7 +3,7 @@ set -o errexit set -o nounset set -o pipefail -APEX_PKGS="common undercloud" # removed onos for danube +APEX_PKGS="common undercloud onos" IPV6_FLAG=False # log info to console diff --git a/jjb/apex/apex-download-artifact.sh b/jjb/apex/apex-download-artifact.sh index 206c627ec..52c3c67ec 100755 --- a/jjb/apex/apex-download-artifact.sh +++ b/jjb/apex/apex-download-artifact.sh @@ -3,7 +3,7 @@ set -o errexit set -o nounset set -o pipefail -APEX_PKGS="common undercloud" # removed onos for danube +APEX_PKGS="common undercloud onos" # log info to console echo "Downloading the Apex artifact. This could take some time..." diff --git a/jjb/apex/apex-upload-artifact.sh b/jjb/apex/apex-upload-artifact.sh index 25870bb35..f53451d41 100755 --- a/jjb/apex/apex-upload-artifact.sh +++ b/jjb/apex/apex-upload-artifact.sh @@ -126,13 +126,13 @@ elif [ "$ARTIFACT_TYPE" == 'rpm' ]; then RPM_INSTALL_PATH=$BUILD_DIRECTORY/noarch RPM_LIST=$RPM_INSTALL_PATH/$(basename $OPNFV_RPM_URL) VERSION_EXTENSION=$(echo $(basename $OPNFV_RPM_URL) | sed 's/opnfv-apex-//') - for pkg in common undercloud; do # removed onos for danube + for pkg in common undercloud onos; do RPM_LIST+=" ${RPM_INSTALL_PATH}/opnfv-apex-${pkg}-${VERSION_EXTENSION}" done SRPM_INSTALL_PATH=$BUILD_DIRECTORY SRPM_LIST=$SRPM_INSTALL_PATH/$(basename $OPNFV_SRPM_URL) VERSION_EXTENSION=$(echo $(basename $OPNFV_SRPM_URL) | sed 's/opnfv-apex-//') - for pkg in common undercloud; do # removed onos for danube + for pkg in common undercloud onos; do SRPM_LIST+=" ${SRPM_INSTALL_PATH}/opnfv-apex-${pkg}-${VERSION_EXTENSION}" done diff --git a/jjb/apex/apex.yml b/jjb/apex/apex.yml index 50502d77a..a395cf2e5 100644 --- a/jjb/apex/apex.yml +++ b/jjb/apex/apex.yml @@ -204,23 +204,23 @@ kill-phase-on: FAILURE abort-all-job: true git-revision: true -# - multijob: -# name: functest-smoke -# condition: SUCCESSFUL -# projects: -# - name: 'functest-apex-virtual-suite-{stream}' -# current-parameters: false -# predefined-parameters: | -# DEPLOY_SCENARIO={verify-scenario} -# FUNCTEST_SUITE_NAME=healthcheck -# GERRIT_BRANCH=$GERRIT_BRANCH -# GERRIT_REFSPEC=$GERRIT_REFSPEC -# GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER -# GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE -# node-parameters: true -# kill-phase-on: FAILURE -# abort-all-job: true -# git-revision: false + - multijob: + name: functest-smoke + condition: SUCCESSFUL + projects: + - name: 'functest-apex-virtual-suite-{stream}' + current-parameters: false + predefined-parameters: | + DEPLOY_SCENARIO={verify-scenario} + FUNCTEST_SUITE_NAME=healthcheck + GERRIT_BRANCH=$GERRIT_BRANCH + GERRIT_REFSPEC=$GERRIT_REFSPEC + GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER + GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE + node-parameters: true + kill-phase-on: NEVER + abort-all-job: true + git-revision: false # Verify Scenario Gate - job-template: @@ -294,27 +294,28 @@ GERRIT_REFSPEC=$GERRIT_REFSPEC GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE + GERRIT_EVENT_COMMENT_TEXT=$GERRIT_EVENT_COMMENT_TEXT node-parameters: true kill-phase-on: FAILURE abort-all-job: true git-revision: true -# - multijob: -# name: functest-smoke -# condition: SUCCESSFUL -# projects: -# - name: 'functest-apex-virtual-suite-{stream}' -# current-parameters: false -# predefined-parameters: | -# DEPLOY_SCENARIO={verify-scenario} -# FUNCTEST_SUITE_NAME=healthcheck -# GERRIT_BRANCH=$GERRIT_BRANCH -# GERRIT_REFSPEC=$GERRIT_REFSPEC -# GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER -# GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE -# node-parameters: true -# kill-phase-on: FAILURE -# abort-all-job: true -# git-revision: false + - multijob: + name: functest-smoke + condition: SUCCESSFUL + projects: + - name: 'functest-apex-virtual-suite-{stream}' + current-parameters: false + predefined-parameters: | + DEPLOY_SCENARIO={verify-scenario} + FUNCTEST_SUITE_NAME=healthcheck + GERRIT_BRANCH=$GERRIT_BRANCH + GERRIT_REFSPEC=$GERRIT_REFSPEC + GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER + GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE + node-parameters: true + kill-phase-on: NEVER + abort-all-job: true + git-revision: false - job-template: name: 'apex-runner-cperf-{stream}' diff --git a/jjb/apex/apex.yml.j2 b/jjb/apex/apex.yml.j2 index 84a899f57..752cf281d 100644 --- a/jjb/apex/apex.yml.j2 +++ b/jjb/apex/apex.yml.j2 @@ -204,23 +204,23 @@ kill-phase-on: FAILURE abort-all-job: true git-revision: true -# - multijob: -# name: functest-smoke -# condition: SUCCESSFUL -# projects: -# - name: 'functest-apex-virtual-suite-{stream}' -# current-parameters: false -# predefined-parameters: | -# DEPLOY_SCENARIO={verify-scenario} -# FUNCTEST_SUITE_NAME=healthcheck -# GERRIT_BRANCH=$GERRIT_BRANCH -# GERRIT_REFSPEC=$GERRIT_REFSPEC -# GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER -# GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE -# node-parameters: true -# kill-phase-on: FAILURE -# abort-all-job: true -# git-revision: false + - multijob: + name: functest-smoke + condition: SUCCESSFUL + projects: + - name: 'functest-apex-virtual-suite-{stream}' + current-parameters: false + predefined-parameters: | + DEPLOY_SCENARIO={verify-scenario} + FUNCTEST_SUITE_NAME=healthcheck + GERRIT_BRANCH=$GERRIT_BRANCH + GERRIT_REFSPEC=$GERRIT_REFSPEC + GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER + GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE + node-parameters: true + kill-phase-on: NEVER + abort-all-job: true + git-revision: false # Verify Scenario Gate - job-template: @@ -294,27 +294,28 @@ GERRIT_REFSPEC=$GERRIT_REFSPEC GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE + GERRIT_EVENT_COMMENT_TEXT=$GERRIT_EVENT_COMMENT_TEXT node-parameters: true kill-phase-on: FAILURE abort-all-job: true git-revision: true -# - multijob: -# name: functest-smoke -# condition: SUCCESSFUL -# projects: -# - name: 'functest-apex-virtual-suite-{stream}' -# current-parameters: false -# predefined-parameters: | -# DEPLOY_SCENARIO={verify-scenario} -# FUNCTEST_SUITE_NAME=healthcheck -# GERRIT_BRANCH=$GERRIT_BRANCH -# GERRIT_REFSPEC=$GERRIT_REFSPEC -# GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER -# GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE -# node-parameters: true -# kill-phase-on: FAILURE -# abort-all-job: true -# git-revision: false + - multijob: + name: functest-smoke + condition: SUCCESSFUL + projects: + - name: 'functest-apex-virtual-suite-{stream}' + current-parameters: false + predefined-parameters: | + DEPLOY_SCENARIO={verify-scenario} + FUNCTEST_SUITE_NAME=healthcheck + GERRIT_BRANCH=$GERRIT_BRANCH + GERRIT_REFSPEC=$GERRIT_REFSPEC + GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER + GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE + node-parameters: true + kill-phase-on: NEVER + abort-all-job: true + git-revision: false - job-template: name: 'apex-runner-cperf-{stream}' diff --git a/jjb/armband/armband-ci-jobs.yml b/jjb/armband/armband-ci-jobs.yml index 1531ff144..55d8ff975 100644 --- a/jjb/armband/armband-ci-jobs.yml +++ b/jjb/armband/armband-ci-jobs.yml @@ -283,31 +283,31 @@ - trigger: name: 'fuel-os-odl_l2-nofeature-ha-armband-baremetal-master-trigger' triggers: - - timed: '0 0 * * 1' + - timed: '' - trigger: name: 'fuel-os-nosdn-nofeature-ha-armband-baremetal-master-trigger' triggers: - - timed: '0 0 * * 2' + - timed: '' - trigger: name: 'fuel-os-odl_l3-nofeature-ha-armband-baremetal-master-trigger' triggers: - - timed: '0 0 * * 3' + - timed: '' - trigger: name: 'fuel-os-odl_l2-bgpvpn-ha-armband-baremetal-master-trigger' triggers: - - timed: '0 0 * * 4' + - timed: '' - trigger: name: 'fuel-os-odl_l2-nofeature-noha-armband-baremetal-master-trigger' triggers: - - timed: '0 0 * * 5' + - timed: '' - trigger: name: 'fuel-os-odl_l2-sfc-ha-armband-baremetal-master-trigger' triggers: - - timed: '0 0,20 * * 6' + - timed: '' - trigger: name: 'fuel-os-odl_l2-sfc-noha-armband-baremetal-master-trigger' triggers: - - timed: '0 0,20 * * 7' + - timed: '' #---------------------------------------------------------------------- # Enea Armband CI Baremetal Triggers running against danube branch @@ -315,31 +315,31 @@ - trigger: name: 'fuel-os-odl_l2-nofeature-ha-armband-baremetal-danube-trigger' triggers: - - timed: '0 4 * * 1,2,3,4,5' + - timed: '0 0,16 * * 2,4' - trigger: name: 'fuel-os-nosdn-nofeature-ha-armband-baremetal-danube-trigger' triggers: - - timed: '0 8 * * 1,2,3,4,5' + - timed: '0 0 * * 1,5,7' - trigger: name: 'fuel-os-odl_l2-bgpvpn-ha-armband-baremetal-danube-trigger' triggers: - - timed: '0 12 * * 1,2,3,4,5' + - timed: '0 16 * * 1,5,7' - trigger: name: 'fuel-os-odl_l3-nofeature-ha-armband-baremetal-danube-trigger' triggers: - - timed: '0 16 * * 1,2,3,4,5' + - timed: '0 8 * * 2,4,6' - trigger: name: 'fuel-os-odl_l2-nofeature-noha-armband-baremetal-danube-trigger' triggers: - - timed: '0 20 * * 1,2,3,4,5' + - timed: '0 8 * * 1,3,5,7' - trigger: name: 'fuel-os-odl_l2-sfc-ha-armband-baremetal-danube-trigger' triggers: - - timed: '0 4,8 * * 6,7' + - timed: '0 0 * * 3,6' - trigger: name: 'fuel-os-odl_l2-sfc-noha-armband-baremetal-danube-trigger' triggers: - - timed: '0 12,16 * * 6,7' + - timed: '0 16 * * 3,6' #--------------------------------------------------------------- # Enea Armband CI Virtual Triggers running against master branch #--------------------------------------------------------------- diff --git a/jjb/ci_gate_security/anteater-clone-all-repos.sh b/jjb/ci_gate_security/anteater-clone-all-repos.sh new file mode 100755 index 000000000..8a9e73d85 --- /dev/null +++ b/jjb/ci_gate_security/anteater-clone-all-repos.sh @@ -0,0 +1,33 @@ +#!/bin/bash +# SPDX-license-identifier: Apache-2.0 +set -o errexit +set -o pipefail +set -o nounset +export PATH=$PATH:/usr/local/bin/ + + +#WORKSPACE="$(pwd)" + +cd $WORKSPACE +if [ ! -d "$WORKSPACE/allrepos" ]; then + mkdir $WORKSPACE/allrepos +fi + +cd $WORKSPACE/allrepos + +declare -a PROJECT_LIST +EXCLUDE_PROJECTS="All-Projects|All-Users|securedlab" + +PROJECT_LIST=($(ssh gerrit.opnfv.org -p 29418 gerrit ls-projects | egrep -v $EXCLUDE_PROJECTS)) +echo "PROJECT_LIST=(${PROJECT_LIST[*]})" > $WORKSPACE/opnfv-projects.sh + +for PROJECT in ${PROJECT_LIST[@]}; do + echo "> Cloning $PROJECT" + if [ ! -d "$PROJECT" ]; then + git clone "https://gerrit.opnfv.org/gerrit/$PROJECT.git" + else + pushd "$PROJECT" > /dev/null + git pull -f + popd > /dev/null + fi +done diff --git a/jjb/ci_gate_security/anteater-report-to-gerrit.sh b/jjb/ci_gate_security/anteater-report-to-gerrit.sh new file mode 100644 index 000000000..fc3018fb4 --- /dev/null +++ b/jjb/ci_gate_security/anteater-report-to-gerrit.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# SPDX-license-identifier: Apache-2.0 +set -o pipefail +export PATH=$PATH:/usr/local/bin/ +EXITSTATUS=0 + +# This Log should always exist +if [[ -e securityaudit.log ]] ; then + echo -e "\nposting security audit report to gerrit...\n" + + #check if log has errors + if grep ERROR securityaudit.log; then + EXITSTATUS=1 + fi + + cat securityaudit.log | awk -F"ERROR - " '{print $2}' > 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-weekly.sh b/jjb/ci_gate_security/anteater-security-audit-weekly.sh new file mode 100644 index 000000000..436a173bc --- /dev/null +++ b/jjb/ci_gate_security/anteater-security-audit-weekly.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# SPDX-license-identifier: Apache-2.0 + +echo "--------------------------------------------------------" +vols="-v $WORKSPACE/allrepos/:/home/opnfv/anteater/allrepos/" +echo "Pulling releng-anteater docker image" +echo "--------------------------------------------------------" +docker pull opnfv/releng-anteater +echo "--------------------------------------------------------" +cmd="docker run -id $vols opnfv/releng-anteater /bin/bash" +echo "Running docker command $cmd" +container_id=$($cmd) +echo "Container ID is $container_id" +source $WORKSPACE/opnfv-projects.sh +for project in "${PROJECT_LIST[@]}" + +do + cmd="anteater --project testproj --path /home/opnfv/anteater/allrepos/$project" + echo "Executing command inside container" + echo "$cmd" + echo "--------------------------------------------------------" + docker exec $container_id $cmd > $WORKSPACE/"$project".securityaudit.log 2>&1 +done + +exit_code=$? +echo "--------------------------------------------------------" +echo "Stopping docker container with ID $container_id" +docker stop $container_id + + +#gsutil cp $WORKSPACE/securityaudit.log \ +# gs://$GS_URL/$PROJECT-securityaudit-weekly.log 2>&1 +# +#gsutil -m setmeta \ +# -h "Content-Type:text/html" \ +# -h "Cache-Control:private, max-age=0, no-transform" \ +# gs://$GS_URL/$PROJECT-securityaudit-weekly.log > /dev/null 2>&1 diff --git a/jjb/ci_gate_security/anteater-security-audit.sh b/jjb/ci_gate_security/anteater-security-audit.sh new file mode 100644 index 000000000..d5c0e407c --- /dev/null +++ b/jjb/ci_gate_security/anteater-security-audit.sh @@ -0,0 +1,32 @@ +#!/bin/bash +cd $WORKSPACE +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" +echo "--------------------------------------------------------" +cat $WORKSPACE/patchset +echo "--------------------------------------------------------" + +vols="-v $WORKSPACE:/home/opnfv/anteater/$PROJECT" +envs="-e PROJECT=$PROJECT" + +echo "Pulling releng-anteater docker image" +echo "--------------------------------------------------------" +docker pull opnfv/releng-anteater +echo "--------------------------------------------------------" + +cmd="sudo docker run --privileged=true -id $envs $vols opnfv/releng-anteater /bin/bash" +echo "Running docker command $cmd" +container_id=$($cmd) +echo "Container ID is $container_id" +cmd="anteater --project $PROJECT --patchset /home/opnfv/anteater/$PROJECT/patchset" +echo "Executing command inside container" +echo "$cmd" +echo "--------------------------------------------------------" +docker exec $container_id $cmd > $WORKSPACE/securityaudit.log 2>&1 +exit_code=$? +echo "--------------------------------------------------------" +echo "Stopping docker container with ID $container_id" +docker stop $container_id +cat securityaudit.log +exit 0 diff --git a/jjb/ci_gate_security/opnfv-ci-gate-security.yml b/jjb/ci_gate_security/opnfv-ci-gate-security.yml index 732df8925..719035214 100644 --- a/jjb/ci_gate_security/opnfv-ci-gate-security.yml +++ b/jjb/ci_gate_security/opnfv-ci-gate-security.yml @@ -1,5 +1,6 @@ +# SPDX-license-identifier: Apache-2.0 ######################## -# Job configuration for opnfv-lint +# Job configuration for opnfv-anteater (security audit) ######################## - project: @@ -9,6 +10,7 @@ jobs: - 'opnfv-security-audit-verify-{stream}' + - 'opnfv-security-audit-weekly-{stream}' stream: - master: @@ -20,14 +22,42 @@ # job templates ######################## - job-template: + name: 'opnfv-security-audit-weekly-{stream}' + + disabled: '{obj:disabled}' + + parameters: + - label: + name: SLAVE_LABEL + default: 'ericsson-build3' + description: 'Slave label on Jenkins' + - project-parameter: + project: releng + branch: '{branch}' + + triggers: + - timed: '@weekly' + + builders: + - anteater-security-audit-weekly + +- job-template: name: 'opnfv-security-audit-verify-{stream}' disabled: '{obj:disabled}' parameters: + - label: + name: SLAVE_LABEL + default: 'ericsson-build3' + description: 'Slave label on Jenkins' - project-parameter: project: $GERRIT_PROJECT branch: '{branch}' + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: "Used for overriding the GIT URL coming from Global Jenkins configuration in case if the stuff is done on none-LF HW." scm: - git-scm-gerrit @@ -47,59 +77,41 @@ comment-contains-value: 'reverify' projects: - project-compare-type: 'REG_EXP' - project-pattern: 'sandbox' + project-pattern: 'sandbox|releng' branches: - branch-compare-type: 'ANT' branch-pattern: '**/{branch}' file-paths: - compare-type: ANT - pattern: '**/*.py' - skip-vote: - successful: true - failed: true - unstable: true - notbuilt: true + pattern: '**' + skip-vote: + successful: true + failed: true + unstable: true + notbuilt: true builders: - - security-audit-python-code + - anteater-security-audit - report-security-audit-result-to-gerrit ######################## # builder macros ######################## - builder: - name: security-audit-python-code + name: anteater-security-audit builders: - - shell: | - #!/bin/bash - set -o errexit - set -o pipefail - set -o xtrace - export PATH=$PATH:/usr/local/bin/ - - # this is where the security/license audit script will be executed - echo "Hello World!" + - shell: + !include-raw: ./anteater-security-audit.sh + - builder: name: report-security-audit-result-to-gerrit builders: - - shell: | - #!/bin/bash - set -o errexit - set -o pipefail - set -o xtrace - export PATH=$PATH:/usr/local/bin/ - - # If no violations were found, no lint log will exist. - if [[ -e securityaudit.log ]] ; then - echo -e "\nposting security audit report to gerrit...\n" - - cat securityaudit.log - echo - - ssh -p 29418 gerrit.opnfv.org \ - "gerrit review -p $GERRIT_PROJECT \ - -m \"$(cat securityaudit.log)\" \ - $GERRIT_PATCHSET_REVISION \ - --notify NONE" - - exit 1 - fi + - shell: + !include-raw: ./anteater-report-to-gerrit.sh + +- builder: + name: anteater-security-audit-weekly + builders: + - shell: + !include-raw: + - ./anteater-clone-all-repos.sh + - ./anteater-security-audit-weekly.sh diff --git a/jjb/compass4nfv/compass-build.sh b/jjb/compass4nfv/compass-build.sh index ea98c05a9..673a9f106 100644 --- a/jjb/compass4nfv/compass-build.sh +++ b/jjb/compass4nfv/compass-build.sh @@ -25,7 +25,7 @@ fi cd $WORKSPACE/ -if [[ "$BRANCH" == 'danube' ]]; then +if [[ "$BRANCH" == 'stable/danube' ]]; then ./build.sh --iso-dir $BUILD_DIRECTORY/ --iso-name compass.iso -c $CACHE_DIRECTORY OPNFV_ARTIFACT_SHA512SUM=$(sha512sum $BUILD_DIRECTORY/compass.iso | cut -d' ' -f1) OPNFV_ARTIFACT_URL=$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso diff --git a/jjb/compass4nfv/compass-ci-jobs.yml b/jjb/compass4nfv/compass-ci-jobs.yml index 7d67c37fd..f4f49b666 100644 --- a/jjb/compass4nfv/compass-ci-jobs.yml +++ b/jjb/compass4nfv/compass-ci-jobs.yml @@ -109,6 +109,7 @@ wrappers: - build-name: name: '$BUILD_NUMBER - Scenario: $DEPLOY_SCENARIO' + - fix-workspace-permissions parameters: - project-parameter: @@ -204,8 +205,9 @@ - build-name: name: '$BUILD_NUMBER - Scenario: $DEPLOY_SCENARIO' - timeout: - timeout: 120 + timeout: 240 abort: true + - fix-workspace-permissions parameters: - project-parameter: @@ -220,11 +222,6 @@ scm: - git-scm - wrappers: - - build-name: - name: '$BUILD_NUMBER - Scenario: $DEPLOY_SCENARIO' - - builders: - description-setter: description: "POD: $NODE_NAME" diff --git a/jjb/compass4nfv/compass-deploy.sh b/jjb/compass4nfv/compass-deploy.sh index 111ac665c..2668ccdf8 100644 --- a/jjb/compass4nfv/compass-deploy.sh +++ b/jjb/compass4nfv/compass-deploy.sh @@ -23,7 +23,7 @@ fi echo 1 > /proc/sys/vm/drop_caches export CONFDIR=$WORKSPACE/deploy/conf -if [[ "$BRANCH" = 'danube' ]]; then +if [[ "$BRANCH" = 'stable/danube' ]]; then export ISO_URL=file://$BUILD_DIRECTORY/compass.iso else export ISO_URL=file://$BUILD_DIRECTORY/compass.tar.gz diff --git a/jjb/compass4nfv/compass-dovetail-jobs.yml b/jjb/compass4nfv/compass-dovetail-jobs.yml index c321655d7..67d1e4eee 100644 --- a/jjb/compass4nfv/compass-dovetail-jobs.yml +++ b/jjb/compass4nfv/compass-dovetail-jobs.yml @@ -55,6 +55,7 @@ wrappers: - build-name: name: '$BUILD_NUMBER - Scenario: $DEPLOY_SCENARIO' + - fix-workspace-permissions triggers: - '{auto-trigger-name}' @@ -135,8 +136,9 @@ - build-name: name: '$BUILD_NUMBER - Scenario: $DEPLOY_SCENARIO' - timeout: - timeout: 120 + timeout: 240 abort: true + - fix-workspace-permissions parameters: - project-parameter: @@ -151,11 +153,6 @@ scm: - git-scm - wrappers: - - build-name: - name: '$BUILD_NUMBER - Scenario: $DEPLOY_SCENARIO' - - builders: - description-setter: description: "POD: $NODE_NAME" diff --git a/jjb/compass4nfv/compass-download-artifact.sh b/jjb/compass4nfv/compass-download-artifact.sh index c09a70c8b..f8915643f 100644 --- a/jjb/compass4nfv/compass-download-artifact.sh +++ b/jjb/compass4nfv/compass-download-artifact.sh @@ -18,7 +18,7 @@ curl -s -o $BUILD_DIRECTORY/latest.properties http://$GS_URL/latest.properties # source the file so we get OPNFV vars source $BUILD_DIRECTORY/latest.properties -if [[ "$BRANCH" == 'danube' ]]; then +if [[ "$BRANCH" == 'stable/danube' ]]; then # download the file curl -s -o $BUILD_DIRECTORY/compass.iso http://$OPNFV_ARTIFACT_URL > gsutil.iso.log 2>&1 # list the file diff --git a/jjb/compass4nfv/compass-upload-artifact.sh b/jjb/compass4nfv/compass-upload-artifact.sh index c6e179d4e..87a9334b2 100644 --- a/jjb/compass4nfv/compass-upload-artifact.sh +++ b/jjb/compass4nfv/compass-upload-artifact.sh @@ -7,7 +7,7 @@ echo "Uploading the $INSTALLER_TYPE artifact. This could take some time..." echo "--------------------------------------------------------" echo -if [[ "$BRANCH" == 'danube' ]]; then +if [[ "$BRANCH" == 'stable/danube' ]]; then FILETYPE='iso' else FILETYPE='tar.gz' diff --git a/jjb/compass4nfv/compass-verify-jobs.yml b/jjb/compass4nfv/compass-verify-jobs.yml index 60ea3f679..e43f976b5 100644 --- a/jjb/compass4nfv/compass-verify-jobs.yml +++ b/jjb/compass4nfv/compass-verify-jobs.yml @@ -71,14 +71,15 @@ - 'compass-os-.*?-virtual-daily-.*?' block-level: 'NODE' - scm: - - git-scm-gerrit - wrappers: - ssh-agent-wrapper - timeout: - timeout: 120 + timeout: 240 fail: true + - fix-workspace-permissions + + scm: + - git-scm-gerrit triggers: - gerrit: @@ -193,14 +194,15 @@ - 'compass-os-.*?-virtual-daily-.*?' block-level: 'NODE' - scm: - - git-scm-gerrit - wrappers: - ssh-agent-wrapper - timeout: - timeout: 120 + timeout: 240 fail: true + - fix-workspace-permissions + + scm: + - git-scm-gerrit triggers: - gerrit: @@ -292,14 +294,15 @@ - 'functest-compass-virtual.*' block-level: 'NODE' - scm: - - git-scm-gerrit - wrappers: - ssh-agent-wrapper - timeout: - timeout: 120 + timeout: 240 fail: true + - fix-workspace-permissions + + scm: + - git-scm-gerrit builders: - description-setter: diff --git a/jjb/doctor/doctor.yml b/jjb/doctor/doctor.yml index 807d436da..eb230b59d 100644 --- a/jjb/doctor/doctor.yml +++ b/jjb/doctor/doctor.yml @@ -38,8 +38,15 @@ profiler: 'poc' auto-trigger-name: 'experimental' + pod: + - arm-pod2: + slave-label: '{pod}' + - arm-pod3: + slave-label: '{pod}' + jobs: - 'doctor-verify-{stream}' + - 'doctor-{task}-{installer}-{inspector}-{pod}-{stream}' - 'doctor-{task}-{installer}-{inspector}-{stream}' - job-template: @@ -83,6 +90,32 @@ - shell: "[ -e tests/run.sh ] && bash -n ./tests/run.sh" - job-template: + name: 'doctor-{task}-{installer}-{inspector}-{pod}-{stream}' + + node: '{slave-label}' + + disabled: '{obj:disabled}' + + parameters: + - project-parameter: + project: '{project}' + branch: '{branch}' + - 'opnfv-build-ubuntu-defaults' + + scm: + - git-scm-gerrit + + + triggers: + - '{auto-trigger-name}': + project: '{project}' + branch: '{branch}' + + builders: + - shell: "[ -e tests/run.sh ] && bash -n ./tests/run.sh" + + +- job-template: name: 'doctor-{task}-{installer}-{inspector}-{stream}' node: '{slave-label}' diff --git a/jjb/fuel/fuel-daily-jobs.yml b/jjb/fuel/fuel-daily-jobs.yml index dd0590c72..68677089d 100644 --- a/jjb/fuel/fuel-daily-jobs.yml +++ b/jjb/fuel/fuel-daily-jobs.yml @@ -293,6 +293,10 @@ name: GS_URL default: artifacts.opnfv.org/$PROJECT{gs-pathname} description: "URL to Google Storage." + - string: + name: SSH_KEY + default: "/tmp/mcp.rsa" + description: "Path to private SSH key to access environment nodes. For MCP deployments only." ######################## # trigger macros ######################## diff --git a/jjb/fuel/fuel-deploy.sh b/jjb/fuel/fuel-deploy.sh index 4d48ee587..2fb5c71e4 100755 --- a/jjb/fuel/fuel-deploy.sh +++ b/jjb/fuel/fuel-deploy.sh @@ -12,11 +12,13 @@ set -o pipefail export TERM="vt220" -# source the file so we get OPNFV vars -source latest.properties +if [[ "$BRANCH" != 'master' ]]; then + # source the file so we get OPNFV vars + source latest.properties -# echo the info about artifact that is used during the deployment -echo "Using ${OPNFV_ARTIFACT_URL/*\/} for deployment" + # echo the info about artifact that is used during the deployment + echo "Using ${OPNFV_ARTIFACT_URL/*\/} for deployment" +fi if [[ "$JOB_NAME" =~ "merge" ]]; then # set simplest scenario for virtual deploys to run for merges @@ -75,7 +77,7 @@ echo "--------------------------------------------------------" echo "Scenario: $DEPLOY_SCENARIO" echo "Lab: $LAB_NAME" echo "POD: $POD_NAME" -echo "ISO: ${OPNFV_ARTIFACT_URL/*\/}" +[[ "$BRANCH" != 'master' ]] && echo "ISO: ${OPNFV_ARTIFACT_URL/*\/}" echo echo "Starting the deployment using $INSTALLER_TYPE. This could take some time..." echo "--------------------------------------------------------" diff --git a/jjb/fuel/fuel-download-artifact.sh b/jjb/fuel/fuel-download-artifact.sh index 8cc552e8d..c3b8253de 100755 --- a/jjb/fuel/fuel-download-artifact.sh +++ b/jjb/fuel/fuel-download-artifact.sh @@ -10,6 +10,9 @@ set -o errexit set -o pipefail +# disable Fuel ISO download for master branch +[[ "$BRANCH" == 'master' ]] && exit 0 + # use proxy url to replace the nomral URL, for googleusercontent.com will be blocked randomly [[ "$NODE_NAME" =~ (zte) ]] && GS_URL=${GS_BASE_PROXY%%/*}/$GS_URL diff --git a/jjb/global/installer-params.yml b/jjb/global/installer-params.yml index 40fc42c76..ee154af03 100644 --- a/jjb/global/installer-params.yml +++ b/jjb/global/installer-params.yml @@ -38,6 +38,14 @@ default: '10.20.0.2' description: 'IP of the installer' - string: + name: SALT_MASTER_IP + default: '192.168.10.100' + description: 'IP of the salt master (for mcp deployments)' + - string: + name: SSH_KEY + default: '/tmp/mcp.rsa' + description: 'Path to private SSH key to access environment nodes' + - string: name: INSTALLER_TYPE default: fuel description: 'Installer used for deploying OPNFV on this POD' diff --git a/jjb/global/releng-macros.yml b/jjb/global/releng-macros.yml index ced335cb9..e4dfa8d80 100644 --- a/jjb/global/releng-macros.yml +++ b/jjb/global/releng-macros.yml @@ -170,7 +170,7 @@ - pre-scm-buildstep: - shell: | #!/bin/bash - sudo chown -R $USER $WORKSPACE || exit 1 + sudo chown -R $USER:$USER $WORKSPACE || exit 1 - builder: name: build-html-and-pdf-docs-output @@ -259,8 +259,11 @@ find "$local_path" | grep -e 'index.html$' -e 'pdf$' | \ sed -e "s|^$local_path| http://$gs_path|" >> gerrit_comment.txt +# To take advantage of this macro, have your build write +# out the file 'gerrit_comment.txt' with information to post +# back to gerrit and include this macro in the list of builders. - builder: - name: report-docs-build-result-to-gerrit + name: report-build-result-to-gerrit builders: - shell: | #!/bin/bash @@ -407,14 +410,14 @@ builders: - build-html-and-pdf-docs-output - upload-under-review-docs-to-opnfv-artifacts - - report-docs-build-result-to-gerrit + - report-build-result-to-gerrit - builder: name: upload-merged-docs builders: - build-html-and-pdf-docs-output - upload-generated-docs-to-opnfv-artifacts - - report-docs-build-result-to-gerrit + - report-build-result-to-gerrit - remove-old-docs-from-opnfv-artifacts - builder: diff --git a/jjb/netready/netready.yml b/jjb/netready/netready.yml index 9a4d8858c..2702c45b3 100644 --- a/jjb/netready/netready.yml +++ b/jjb/netready/netready.yml @@ -58,7 +58,7 @@ - job-template: name: 'netready-build-gluon-packages-daily-{stream}' - disabled: false + disabled: true concurrent: true diff --git a/jjb/releng/opnfv-docker.sh b/jjb/releng/opnfv-docker.sh index 2aa52adc5..ebd0c9f3d 100644 --- a/jjb/releng/opnfv-docker.sh +++ b/jjb/releng/opnfv-docker.sh @@ -73,6 +73,8 @@ fi # Get tag version echo "Current branch: $BRANCH" +BUILD_BRANCH=$BRANCH + if [[ "$BRANCH" == "master" ]]; then DOCKER_TAG="latest" elif [[ -n "${RELEASE_VERSION-}" ]]; then @@ -82,19 +84,17 @@ else DOCKER_TAG="stable" fi +if [[ -n "${COMMIT_ID-}" && -n "${RELEASE_VERSION-}" ]]; then + DOCKER_TAG=$RELEASE_VERSION + BUILD_BRANCH=$COMMIT_ID +fi + # Start the build echo "Building docker image: $DOCKER_REPO_NAME:$DOCKER_TAG" echo "--------------------------------------------------------" echo -if [[ $DOCKER_REPO_NAME == *"dovetail"* ]]; then - if [[ -n "${RELEASE_VERSION-}" ]]; then - DOCKER_TAG=${RELEASE_VERSION} - fi - cmd="docker build --no-cache -t $DOCKER_REPO_NAME:$DOCKER_TAG -f $DOCKERFILE ." -else - cmd="docker build --no-cache -t $DOCKER_REPO_NAME:$DOCKER_TAG --build-arg BRANCH=$BRANCH - -f $DOCKERFILE ." -fi +cmd="docker build --no-cache -t $DOCKER_REPO_NAME:$DOCKER_TAG --build-arg BRANCH=$BUILD_BRANCH + -f $DOCKERFILE ." echo ${cmd} ${cmd} diff --git a/jjb/releng/opnfv-docker.yml b/jjb/releng/opnfv-docker.yml index 5fe0eb913..095ba4129 100644 --- a/jjb/releng/opnfv-docker.yml +++ b/jjb/releng/opnfv-docker.yml @@ -106,6 +106,10 @@ default: "opnfv/{project}" description: "Dockerhub repo to be pushed to." - string: + name: COMMIT_ID + default: "" + description: "commit id to make a snapshot docker image" + - string: name: RELEASE_VERSION default: "" description: "Release version, e.g. 1.0, 2.0, 3.0" diff --git a/jjb/storperf/storperf.yml b/jjb/storperf/storperf.yml index cd40050b2..be53b27b4 100644 --- a/jjb/storperf/storperf.yml +++ b/jjb/storperf/storperf.yml @@ -158,12 +158,50 @@ name: DOCKER_TAG default: '{docker-tag}' description: 'Tag to pull docker image' + - choice: + name: DISK_TYPE + choices: + - 'SSD' + - 'HDD' + default: 'HDD' + description: 'The type of hard disk that Cinder uses' + - string: + name: AGENT_COUNT + description: 'The number of slave agents to start. Defaults to the cinder node count' + - string: + name: VOLUME_SIZE + default: '4' + description: 'Size of Cinder volume (in GB)' + - string: + name: WORKLOADS + default: 'wr,rr,rw' + description: 'Workloads to run' + - string: + name: BLOCK_SIZES + default: '2048,16384' + description: 'Block sizes for VM I/O operations' + - string: + name: QUEUE_DEPTHS + default: '1,4' + description: 'Number of simultaneous I/O operations to keep active' + - string: + name: STEADY_STATE_SAMPLES + default: '10' + description: 'Number of samples to use (1 per minute) to measure steady state' + - string: + name: DEADLINE + description: 'Maximum run time in minutes if steady state cannot be found. Defaults to 3 times steady state samples' + - choice: + name: TEST_CASE + choices: + - 'snia_steady_state' + description: 'The test case to run' scm: - git-scm triggers: - - timed: 'H H * * *' + - timed: '0 18 * * *' builders: - shell: | diff --git a/jjb/xci/bifrost-verify-jobs.yml b/jjb/xci/bifrost-verify-jobs.yml index c6da9f413..319f8eb28 100644 --- a/jjb/xci/bifrost-verify-jobs.yml +++ b/jjb/xci/bifrost-verify-jobs.yml @@ -20,9 +20,9 @@ # distros #-------------------------------- distro: - - 'trusty': + - 'xenial': disabled: false - dib-os-release: 'trusty' + dib-os-release: 'xenial' dib-os-element: 'ubuntu-minimal' dib-os-packages: 'vlan,vim,less,bridge-utils,language-pack-en,iputils-ping,rsyslog,curl' extra-dib-elements: 'openssh-server' diff --git a/jjb/xci/bifrost-verify.sh b/jjb/xci/bifrost-verify.sh index 2e6f2272c..b522b8969 100755 --- a/jjb/xci/bifrost-verify.sh +++ b/jjb/xci/bifrost-verify.sh @@ -89,7 +89,7 @@ function cleanup_and_upload() { } # check distro to see if we support it -if [[ ! "$DISTRO" =~ (trusty|centos7|suse) ]]; then +if [[ ! "$DISTRO" =~ (xenial|centos7|suse) ]]; then echo "Distro $DISTRO is not supported!" exit 1 fi diff --git a/jjb/yardstick/yardstick-ci-jobs.yml b/jjb/yardstick/yardstick-daily-jobs.yml index 5ff36f842..ff1d47eb4 100644 --- a/jjb/yardstick/yardstick-ci-jobs.yml +++ b/jjb/yardstick/yardstick-daily-jobs.yml @@ -282,7 +282,7 @@ publishers: - email: - recipients: jean.gaoliang@huawei.com limingjiang@huawei.com + recipients: jean.gaoliang@huawei.com limingjiang@huawei.com ross.b.brattain@intel.com ######################## # builder macros diff --git a/modules/requirements.txt b/modules/requirements.txt index bae55dcd2..2793dd4cf 100644 --- a/modules/requirements.txt +++ b/modules/requirements.txt @@ -1,3 +1,3 @@ -paramiko==2.1.2 -mock==1.3.0 -requests==2.9.1 +paramiko>=2.0 # LGPLv2.1+ +mock>=2.0 # BSD +requests!=2.12.2,>=2.10.0 # Apache-2.0 diff --git a/modules/setup.py b/modules/setup.py index 8ac5ceac3..0dd635fbe 100644 --- a/modules/setup.py +++ b/modules/setup.py @@ -17,9 +17,9 @@ setup( package_data={ }, url="https://www.opnfv.org", - install_requires=["paramiko>=2.0.1", - "mock==1.3.0", - "nose==1.3.7", - "coverage==4.1", - "requests==2.9.1"] + install_requires=["paramiko>=2.0", + "mock>=2.0", + "requests!=2.12.2,>=2.10.0"], + test_requires=["nose", + "coverage>=4.0"] ) diff --git a/modules/test-requirements.txt b/modules/test-requirements.txt index 99d7f1313..c264540c0 100644 --- a/modules/test-requirements.txt +++ b/modules/test-requirements.txt @@ -1,6 +1,2 @@ -# The order of packages is significant, because pip processes them in the order -# of appearance. Changing the order has an impact on the overall integration -# process, which may cause wedges in the gate later. - -nose -coverage +nose # LGPL +coverage>=4.0 # Apache-2.0 diff --git a/prototypes/xci/README.rst b/prototypes/xci/README.rst index 0d9366533..b65abde9b 100644 --- a/prototypes/xci/README.rst +++ b/prototypes/xci/README.rst @@ -185,6 +185,23 @@ continuously chasing the HEAD of corresponding branches. Once a working version is identified, the versions of the upstream components are then bumped in releng repo. +================== +XCI developer tips +================== + +It is possible to run XCI in development mode, in order to test the +latest changes. When deploying on this mode, the script will use the working +directories for releng/bifrost/OSA, instead of cloning the whole repositories +on each run. +To enable it, you need to export the different DEV_PATH vars: + +- export OPNFV_RELENG_DEV_PATH=/opt/releng/ +- export OPENSTACK_BIFROST_DEV_PATH=/opt/bifrost +- export OPENSTACK_OSA_DEV_PATH=/opt/openstack-ansible + +This will cause the deployment to pick the development copies stored at the +specified directories, and use them instead of cloning those on every run. + =========================================== Limitations, Known Issues, and Improvements =========================================== diff --git a/prototypes/xci/config/pinned-versions b/prototypes/xci/config/pinned-versions index e3b49c7d4..c42693671 100755 --- a/prototypes/xci/config/pinned-versions +++ b/prototypes/xci/config/pinned-versions @@ -22,6 +22,6 @@ # use releng from master until the development work with the sandbox is complete export OPNFV_RELENG_VERSION="master" # HEAD of "master" as of 04.04.2017 -export OPENSTACK_BIFROST_VERSION=${OPENSTACK_BIFROST_VERSION:-"6109f824e5510e794dbf1968c3859e8b6356d280"} +export OPENSTACK_BIFROST_VERSION=${OPENSTACK_BIFROST_VERSION:-"7c9bb5e07c6bc3b42c9a9e8457e5eef511075b38"} # HEAD of "master" as of 04.04.2017 export OPENSTACK_OSA_VERSION=${OPENSTACK_OSA_VERSION:-"d9e1330c7ff9d72a604b6b4f3af765f66a01b30e"} diff --git a/prototypes/xci/config/user-vars b/prototypes/xci/config/user-vars index 5ed539627..fd11a5845 100755 --- a/prototypes/xci/config/user-vars +++ b/prototypes/xci/config/user-vars @@ -56,3 +56,6 @@ export LOG_PATH=${LOG_PATH:-${XCI_DEVEL_ROOT}/opnfv/logs} export RUN_TEMPEST=${RUN_TEMPEST:-false} # Set this to to true to force XCI to re-create the target OS images export CLEAN_DIB_IMAGES=${CLEAN_DIB_IMAGES:-false} +# Set this to a full path pointing to extra config files (containing +# group_vars/all) +export XCI_EXTRA_VARS_PATH=${XCI_EXTRA_VARS_PATH:-""} diff --git a/prototypes/xci/file/ansible-role-requirements.yml b/prototypes/xci/file/ansible-role-requirements.yml index 842bcc44c..5a96e2a82 100644 --- a/prototypes/xci/file/ansible-role-requirements.yml +++ b/prototypes/xci/file/ansible-role-requirements.yml @@ -9,6 +9,10 @@ ############################################################################## # these versions are extracted based on the osa commit d9e1330c7ff9d72a604b6b4f3af765f66a01b30e on 04.04.2017 # https://review.openstack.org/gitweb?p=openstack/openstack-ansible.git;a=commit;h=d9e1330c7ff9d72a604b6b4f3af765f66a01b30e +- name: ansible-hardening + scm: git + src: https://git.openstack.org/openstack/ansible-hardening + version: 051fe3195f59d1ee8db06fca5d2cce7a25e58861 - name: apt_package_pinning scm: git src: https://git.openstack.org/openstack/openstack-ansible-apt_package_pinning diff --git a/prototypes/xci/playbooks/provision-vm-nodes.yml b/prototypes/xci/playbooks/provision-vm-nodes.yml index 8be36c7a9..92b5c5535 100644 --- a/prototypes/xci/playbooks/provision-vm-nodes.yml +++ b/prototypes/xci/playbooks/provision-vm-nodes.yml @@ -42,6 +42,15 @@ delete: yes when: - OPNFV_RELENG_DEV_PATH != "" + - name: Copy extra vars to releng and bifrost + synchronize: + src: "{{ XCI_EXTRA_VARS_PATH }}" + dest: "{{ item }}" + with_items: + - "{{ OPNFV_RELENG_PATH }}/prototypes/xci/playbooks" + - "{{ OPENSTACK_BIFROST_PATH }}/playbooks/inventory" + when: + - XCI_EXTRA_VARS_PATH != "" - hosts: localhost connection: local diff --git a/prototypes/xci/var/opnfv.yml b/prototypes/xci/var/opnfv.yml index 85f532ad2..aeafaceb1 100644 --- a/prototypes/xci/var/opnfv.yml +++ b/prototypes/xci/var/opnfv.yml @@ -27,3 +27,4 @@ XCI_LOOP: "{{ lookup('env','XCI_LOOP') }}" LOG_PATH: "{{ lookup('env','LOG_PATH') }}" OPNFV_HOST_IP: "{{ lookup('env','OPNFV_HOST_IP') }}" OPNFV_SSH_HOST_KEYS_PATH: "{{ lookup('env', 'OPNFV_SSH_HOST_KEYS_PATH') }}" +XCI_EXTRA_VARS_PATH: "{{ lookup('env', 'XCI_EXTRA_VARS_PATH') }}" diff --git a/utils/fetch_os_creds.sh b/utils/fetch_os_creds.sh index 458bbda3b..993c0b948 100755 --- a/utils/fetch_os_creds.sh +++ b/utils/fetch_os_creds.sh @@ -12,8 +12,9 @@ set -o nounset set -o pipefail usage() { - echo "usage: $0 [-v] -d <destination> -i <installer_type> -a <installer_ip>" >&2 + echo "usage: $0 [-v] -d <destination> -i <installer_type> -a <installer_ip> [-s <ssh_key>]" >&2 echo "[-v] Virtualized deployment" >&2 + echo "[-s <ssh_key>] Path to ssh key. For MCP deployments only" >&2 } info () { @@ -53,11 +54,12 @@ swap_to_public() { : ${DEPLOY_TYPE:=''} #Get options -while getopts ":d:i:a:h:v" optchar; do +while getopts ":d:i:a:h:s:v" optchar; do case "${optchar}" in d) dest_path=${OPTARG} ;; i) installer_type=${OPTARG} ;; a) installer_ip=${OPTARG} ;; + s) ssh_key=${OPTARG} ;; v) DEPLOY_TYPE="virt" ;; *) echo "Non-option argument: '-${OPTARG}'" >&2 usage @@ -70,6 +72,9 @@ done dest_path=${dest_path:-$HOME/opnfv-openrc.sh} installer_type=${installer_type:-$INSTALLER_TYPE} installer_ip=${installer_ip:-$INSTALLER_IP} +if [ "${installer_type}" == "fuel" ] && [ "${BRANCH}" == "master" ]; then + installer_ip=${SALT_MASTER_IP} +fi if [ -z $dest_path ] || [ -z $installer_type ] || [ -z $installer_ip ]; then usage @@ -89,40 +94,45 @@ ssh_options="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" # Start fetching the files if [ "$installer_type" == "fuel" ]; then - #ip_fuel="10.20.0.2" verify_connectivity $installer_ip + if [ "${BRANCH}" == "master" ]; then + ssh_key=${ssh_key:-$SSH_KEY} + if [ -z $ssh_key ] || [ ! -f $ssh_key ]; then + error "Please provide path to existing ssh key for mcp deployment." + exit 2 + fi + ssh_options+=" -i ${ssh_key}" - env=$(sshpass -p r00tme ssh 2>/dev/null $ssh_options root@${installer_ip} \ - 'fuel env'|grep operational|head -1|awk '{print $1}') &> /dev/null - if [ -z $env ]; then - error "No operational environment detected in Fuel" - fi - env_id="${FUEL_ENV:-$env}" - - # Check if controller is alive (online='True') - controller_ip=$(sshpass -p r00tme ssh 2>/dev/null $ssh_options root@${installer_ip} \ - "fuel node --env ${env_id} | grep controller | grep 'True\| 1' | awk -F\| '{print \$5}' | head -1" | \ - sed 's/ //g') &> /dev/null + # retrieving controller vip + controller_ip=$(ssh 2>/dev/null ${ssh_options} ubuntu@${installer_ip} \ + "sudo salt --out txt 'ctl01*' pillar.get _param:openstack_control_address | awk '{print \$2}'" | \ + sed 's/ //g') &> /dev/null - if [ -z $controller_ip ]; then - error "The controller $controller_ip is not up. Please check that the POD is correctly deployed." - fi + info "Fetching rc file from controller $controller_ip..." + ssh ${ssh_options} ubuntu@${controller_ip} "sudo cat /root/keystonercv3" > $dest_path + else + #ip_fuel="10.20.0.2" + env=$(sshpass -p r00tme ssh 2>/dev/null ${ssh_options} root@${installer_ip} \ + 'fuel env'|grep operational|head -1|awk '{print $1}') &> /dev/null + if [ -z $env ]; then + error "No operational environment detected in Fuel" + fi + env_id="${FUEL_ENV:-$env}" - info "Fetching rc file from controller $controller_ip..." - sshpass -p r00tme ssh 2>/dev/null $ssh_options root@${installer_ip} \ - "scp $ssh_options ${controller_ip}:/root/openrc ." &> /dev/null - sshpass -p r00tme scp 2>/dev/null $ssh_options root@${installer_ip}:~/openrc $dest_path &> /dev/null + # Check if controller is alive (online='True') + controller_ip=$(sshpass -p r00tme ssh 2>/dev/null ${ssh_options} root@${installer_ip} \ + "fuel node --env ${env_id} | grep controller | grep 'True\| 1' | awk -F\| '{print \$5}' | head -1" | \ + sed 's/ //g') &> /dev/null - #This file contains the mgmt keystone API, we need the public one for our rc file - admin_ip=$(cat $dest_path | grep "OS_AUTH_URL" | sed 's/^.*\=//' | sed "s/^\([\"']\)\(.*\)\1\$/\2/g" | sed s'/\/$//') - public_ip=$(sshpass -p r00tme ssh $ssh_options root@${installer_ip} \ - "ssh ${controller_ip} 'source openrc; openstack endpoint list'" \ - | grep keystone | grep public | sed 's/ /\n/g' | grep ^http | head -1) &> /dev/null - #| grep http | head -1 | cut -d '|' -f 4 | sed 's/v1\/.*/v1\//' | sed 's/ //g') &> /dev/null - #NOTE: this is super ugly sed 's/v1\/.*/v1\//'OS_AUTH_URL - # but sometimes the output of endpoint-list is like this: http://172.30.9.70:8004/v1/%(tenant_id)s - # Fuel virtual need a fix + if [ -z $controller_ip ]; then + error "The controller $controller_ip is not up. Please check that the POD is correctly deployed." + fi + info "Fetching rc file from controller $controller_ip..." + sshpass -p r00tme ssh 2>/dev/null ${ssh_options} root@${installer_ip} \ + "scp ${ssh_options} ${controller_ip}:/root/openrc ." &> /dev/null + sshpass -p r00tme scp 2>/dev/null ${ssh_options} root@${installer_ip}:~/openrc $dest_path &> /dev/null + fi #convert to v3 URL auth_url=$(cat $dest_path|grep AUTH_URL) if [[ -z `echo $auth_url |grep v3` ]]; then diff --git a/utils/test/reporting/api/api/handlers/testcases.py b/utils/test/reporting/api/api/handlers/testcases.py index 110ac4c26..2b9118623 100644 --- a/utils/test/reporting/api/api/handlers/testcases.py +++ b/utils/test/reporting/api/api/handlers/testcases.py @@ -20,7 +20,7 @@ class TestCases(BaseHandler): url = '{}/projects/{}/cases'.format(conf.base_url, project) cases = requests.get(url).json().get('testcases', []) - data = [t['name'] for t in cases] + data = [{t['name']: t['catalog_description']} for t in cases] self.write(json_encode(data)) diff --git a/utils/test/reporting/functest/reporting-tempest.py b/utils/test/reporting/functest/reporting-tempest.py index 6e6585a32..0304298b4 100755 --- a/utils/test/reporting/functest/reporting-tempest.py +++ b/utils/test/reporting/functest/reporting-tempest.py @@ -1,4 +1,15 @@ +#!/usr/bin/env python + +# Copyright (c) 2017 Orange and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +# SPDX-license-identifier: Apache-2.0 + from urllib2 import Request, urlopen, URLError +from datetime import datetime import json import jinja2 import os @@ -97,7 +108,13 @@ for version in rp_utils.get_config('general.versions'): crit_rate = True # Expect that the suite duration is inferior to 30m - if result['details']['duration'] < criteria_duration: + stop_date = datetime.strptime(result['stop_date'], + '%Y-%m-%d %H:%M:%S') + start_date = datetime.strptime(result['start_date'], + '%Y-%m-%d %H:%M:%S') + + delta = stop_date - start_date + if (delta.total_seconds() < criteria_duration): crit_time = True result['criteria'] = {'tests': crit_tests, diff --git a/utils/test/reporting/pages/app/images/overview.png b/utils/test/reporting/pages/app/images/overview.png Binary files differindex 14dbbff42..f1688cf37 100644 --- a/utils/test/reporting/pages/app/images/overview.png +++ b/utils/test/reporting/pages/app/images/overview.png diff --git a/utils/test/reporting/pages/app/scripts/controllers/testvisual.controller.js b/utils/test/reporting/pages/app/scripts/controllers/testvisual.controller.js index 7082aede0..def8e7293 100644 --- a/utils/test/reporting/pages/app/scripts/controllers/testvisual.controller.js +++ b/utils/test/reporting/pages/app/scripts/controllers/testvisual.controller.js @@ -10,16 +10,16 @@ angular.module('opnfvApp') .controller('testVisualController', ['$scope', '$state', '$stateParams', 'TableFactory', 'ngDialog', '$http', '$loading', function($scope, $state, $stateParams, TableFactory, ngDialog, $http, $loading) { - $scope.dovet = "59,222,156,317"; - $scope.functest = "203,163,334,365"; - $scope.yardstick = "398,161,513,384"; - $scope.vsperf = "567,163,673,350"; - $scope.stor = "686,165,789,341"; - $scope.qtip = "802,164,905,341"; - $scope.bootleneck = "917,161,1022,338"; - $scope.noPopArea1 = "30,11,1243,146"; - $scope.noPopArea2 = "1041,157,1250,561"; - $scope.noPopArea3 = "15,392,1027,561"; + $scope.dovet = "50,168,177,443"; + $scope.functest = "194,173,356,442"; + $scope.yardstick = "377,183,521,412"; + $scope.vsperf = "542,185,640,414"; + $scope.stor = "658,187,750,410"; + $scope.qtip = "769,190,852,416"; + $scope.bootleneck = "870,192,983,419"; + $scope.noPopArea1 = "26,8,1190,180"; + $scope.noPopArea2 = "1018,193,1190,590"; + $scope.noPopArea3 = "37,455,1003,584"; init(); $scope.showSelectValue = 0; @@ -51,20 +51,41 @@ angular.module('opnfvApp') $http.get(url, config).then(function(response) { if (response.status == 200) { $scope.tableData = response.data; + + $scope.tableData = constructObjectArray($scope.tableData); + console.log($scope.tableData); $loading.finish('Key'); + } }) } + //construct key value for tableData + function constructObjectArray(array) { + var templateArray = []; + for (var i = 0; i < array.length; i++) { + var key = Object.keys(array[i])[0]; + var value = array[i][key]; + var temp = { + 'key': key, + 'value': value + }; + templateArray.push(temp); + + } + + return templateArray; + } + function getDetail(casename) { TableFactory.getProjectTestCaseDetail().get({ 'project': $scope.modalName, 'testcase': casename }).$promise.then(function(response) { if (response != null) { - $scope.project_name_modal = response.project_name; + $scope.name_modal = response.name; $scope.description_modal = response.description; openTestDetail(); } @@ -108,4 +129,4 @@ angular.module('opnfvApp') } - ]);
\ No newline at end of file + ]); diff --git a/utils/test/reporting/pages/app/styles/custome.css b/utils/test/reporting/pages/app/styles/custome.css index 7ab869b56..8e567ca6e 100644 --- a/utils/test/reporting/pages/app/styles/custome.css +++ b/utils/test/reporting/pages/app/styles/custome.css @@ -71,6 +71,7 @@ html { border-radius: 5px 5px 5px 5px; background-color: #f3f3f4; opacity: 0.9; + width: 200px; } .ngdialog.ngdialog.ngdialog-theme-default .ngdialog-content { diff --git a/utils/test/reporting/pages/app/views/commons/testCaseVisual.html b/utils/test/reporting/pages/app/views/commons/testCaseVisual.html index 9d146ba93..74eb56eba 100644 --- a/utils/test/reporting/pages/app/views/commons/testCaseVisual.html +++ b/utils/test/reporting/pages/app/views/commons/testCaseVisual.html @@ -4,7 +4,7 @@ <div class="row"> - <div class="row border-bottom white-bg dashboard-header" style="border-radius: 5px 5px 5px 5px "> + <div class="row border-bottom white-bg dashboard-header" style="border-radius: 5px 5px 5px 5px;width:90%;margin-left:30px; "> <h3>OPNFV Test ecosystem <small> *mouse over display test case list</small> @@ -70,7 +70,7 @@ </div> - <div id="popup" class="popup" style="width: 20%;height: 35%" dw-loading="Key"> + <div id="popup" class="popup" style="width: 40%;height: 35%" dw-loading="Key"> <div ng-show="tableData.length==0"> <center> @@ -90,7 +90,8 @@ <tbody> <tr dir-paginate="data in tableData | itemsPerPage: 8 track by $index "> - <td><a ng-click="getDetail(data)"> {{data}}</a></td> + <td ng-if="data.value!=null"><a ng-click="getDetail(data.key)"> {{data.value}}</a></td> + <td ng-if="data.value==null"><a ng-click="getDetail(data.key)"> null</a></td> <tr> </tbody> diff --git a/utils/test/reporting/pages/app/views/modal/testcasedetail.html b/utils/test/reporting/pages/app/views/modal/testcasedetail.html index 8918b3f74..db6f71295 100644 --- a/utils/test/reporting/pages/app/views/modal/testcasedetail.html +++ b/utils/test/reporting/pages/app/views/modal/testcasedetail.html @@ -2,6 +2,6 @@ <div class="hr-line-dashed"></div> -<strong> name</strong>: {{project_name_modal}}<br> +<strong> name</strong>: {{name_modal}}<br> -<strong>description</strong>: {{description_modal}}<br>
\ No newline at end of file +<strong>description</strong>: {{description_modal}}<br> 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 4a2f23af9..8c701c36c 100644 --- a/utils/test/testapi/3rd_party/static/testapi-ui/app.js +++ b/utils/test/testapi/3rd_party/static/testapi-ui/app.js @@ -37,30 +37,30 @@ $stateProvider. state('home', { url: '/', - templateUrl: '/testapi-ui/components/home/home.html' + templateUrl: 'testapi-ui/components/home/home.html' }). state('about', { url: '/about', - templateUrl: '/testapi-ui/components/about/about.html' + templateUrl: 'testapi-ui/components/about/about.html' }). state('guidelines', { url: '/guidelines', - templateUrl: '/testapi-ui/components/guidelines/guidelines.html', + templateUrl: 'testapi-ui/components/guidelines/guidelines.html', controller: 'GuidelinesController as ctrl' }). state('communityResults', { url: '/community_results', - templateUrl: '/testapi-ui/components/results/results.html', + templateUrl: 'testapi-ui/components/results/results.html', controller: 'ResultsController as ctrl' }). state('userResults', { - url: '/user_results', + url: 'user_results', templateUrl: '/testapi-ui/components/results/results.html', controller: 'ResultsController as ctrl' }). state('resultsDetail', { url: '/results/:testID', - templateUrl: '/testapi-ui/components/results-report' + + templateUrl: 'testapi-ui/components/results-report' + '/resultsReport.html', controller: 'ResultsReportController as ctrl' }). @@ -71,12 +71,12 @@ }). state('authFailure', { url: '/auth_failure', - templateUrl: '/testapi-ui/components/home/home.html', + templateUrl: 'testapi-ui/components/home/home.html', controller: 'AuthFailureController as ctrl' }). state('logout', { url: '/logout', - templateUrl: '/testapi-ui/components/logout/logout.html', + templateUrl: 'testapi-ui/components/logout/logout.html', controller: 'LogoutController as ctrl' }). state('userVendors', { diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/assets/img/OpenStack_Project_Refstack_mascot_90x90.png b/utils/test/testapi/3rd_party/static/testapi-ui/assets/img/OpenStack_Project_Refstack_mascot_90x90.png Binary files differdeleted file mode 100755 index 4695090dc..000000000 --- a/utils/test/testapi/3rd_party/static/testapi-ui/assets/img/OpenStack_Project_Refstack_mascot_90x90.png +++ /dev/null diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/assets/img/openstack-logo.png b/utils/test/testapi/3rd_party/static/testapi-ui/assets/img/openstack-logo.png Binary files differdeleted file mode 100644 index 826bf2e5d..000000000 --- a/utils/test/testapi/3rd_party/static/testapi-ui/assets/img/openstack-logo.png +++ /dev/null diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/assets/img/refstack-logo.png b/utils/test/testapi/3rd_party/static/testapi-ui/assets/img/refstack-logo.png Binary files differdeleted file mode 100755 index fc45f3ee0..000000000 --- a/utils/test/testapi/3rd_party/static/testapi-ui/assets/img/refstack-logo.png +++ /dev/null diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/assets/img/testapi-logo.png b/utils/test/testapi/3rd_party/static/testapi-ui/assets/img/testapi-logo.png Binary files differnew file mode 100644 index 000000000..ff78eb1ee --- /dev/null +++ b/utils/test/testapi/3rd_party/static/testapi-ui/assets/img/testapi-logo.png diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/components/results/results.html b/utils/test/testapi/3rd_party/static/testapi-ui/components/results/results.html index 2a43cd1e2..3056e1dbe 100644 --- a/utils/test/testapi/3rd_party/static/testapi-ui/components/results/results.html +++ b/utils/test/testapi/3rd_party/static/testapi-ui/components/results/results.html @@ -43,184 +43,36 @@ <div cg-busy="{promise:ctrl.resultsRequest,message:'Loading'}"></div> <div ng-show="ctrl.data" class="results-table"> - <table ng-show="ctrl.data" class="table table-striped table-hover"> + <table ng-data="ctrl.data.result" ng-show="ctrl.data" class="table table-striped table-hover"> <thead> <tr> - <th ng-if="ctrl.isUserResults"></th> - <th>Upload Date</th> - <th>Test Run ID</th> - <th ng-if="ctrl.isUserResults">Vendor</th> - <th ng-if="ctrl.isUserResults">Product (version)</th> - <th ng-if="ctrl.isUserResults">Target Program</th> - <th ng-if="ctrl.isUserResults">Guideline</th> - <th ng-if="ctrl.isUserResults">Verified</th> - <th ng-if="ctrl.isUserResults">Shared</th> + <th>ID</th> + <th>Pod</th> + <th>Project</th> + <th>Test Case</th> + <th>Installer</th> + <th>Version</th> + <th>Scenario</th> + <th>Criteria</th> + <th>Start Date</th> + <th>Stop Date</th> </tr> </thead> <tbody> <tr ng-repeat-start="(index, result) in ctrl.data.results"> - <td ng-if="ctrl.isUserResults"> - <a ng-if="!result.expanded" - class="glyphicon glyphicon-plus" - ng-click="result.expanded = true"> - </a> - <a ng-if="result.expanded" - class="glyphicon glyphicon-minus" - ng-click="result.expanded = false"> - </a> - </td> - <td>{{result.created_at}}</td> - <td><a ui-sref="resultsDetail({testID: result.id})"> - {{result.id.slice(0, 8)}}...{{result.id.slice(-8)}} - </a> - </td> - <td ng-if="ctrl.isUserResults"> - {{ctrl.vendors[result.product_version.product_info.organization_id].name || '-'}} - </td> - <td ng-if="ctrl.isUserResults">{{result.product_version.product_info.name || '-'}} - <span ng-if="result.product_version.version"> - ({{result.product_version.version}}) - </span> - </td> - <td ng-if="ctrl.isUserResults">{{ctrl.targetMappings[result.meta.target] || '-'}}</td> - <td ng-if="ctrl.isUserResults">{{result.meta.guideline.slice(0, -5) || '-'}}</td> - <td ng-if="ctrl.isUserResults"> - <span ng-if="result.verification_status" class="glyphicon glyphicon-ok"></span> - <span ng-if="!result.verification_status">-</span> - - </td> - <td ng-if="ctrl.isUserResults"> - <span ng-show="result.meta.shared" class="glyphicon glyphicon-share"></span> - </td> + <td>{{ result._id }}</td> + <td>{{ result.pod_name }}</td> + <td>{{ result.project_name }}</td> + <td>{{ result.case_name }}</td> + <td>{{ result.installer }}</td> + <td>{{ result.version }}</td> + <td>{{ result.scenario }}</td> + <td>{{ result.criteria }}</td> + <td>{{ result.start_date }}</td> + <td>{{ result.stop_date }}</td> </tr> - <tr ng-if="result.expanded" ng-repeat-end> - <td></td> - <td colspan="3"> - <strong>Publicly Shared:</strong> - <span ng-if="result.meta.shared == 'true' && !result.sharedEdit">Yes</span> - <span ng-if="!result.meta.shared && !result.sharedEdit"> - <em>No</em> - </span> - <select ng-if="result.sharedEdit" - ng-model="result.meta.shared" - class="form-inline"> - <option value="true">Yes</option> - <option value="">No</option> - </select> - <a ng-if="!result.sharedEdit" - ng-click="result.sharedEdit = true" - title="Edit" - class="glyphicon glyphicon-pencil"></a> - <a ng-if="result.sharedEdit" - ng-click="ctrl.associateMeta(index,'shared',result.meta.shared)" - title="Save" - class="glyphicon glyphicon-floppy-disk"></a> - <br /> - - <strong>Associated Guideline:</strong> - <span ng-if="!result.meta.guideline && !result.guidelineEdit"> - <em>None</em> - </span> - <span ng-if="result.meta.guideline && !result.guidelineEdit"> - {{result.meta.guideline.slice(0, -5)}} - </span> - <select ng-if="result.guidelineEdit" - ng-model="result.meta.guideline" - ng-options="o as o.slice(0, -5) for o in ctrl.versionList" - class="form-inline"> - <option value="">None</option> - </select> - <a ng-if="!result.guidelineEdit" - ng-click="ctrl.getVersionList();result.guidelineEdit = true" - title="Edit" - class="glyphicon glyphicon-pencil"></a> - <a ng-if="result.guidelineEdit" - ng-click="ctrl.associateMeta(index, 'guideline', result.meta.guideline)" - title="Save" - class="glyphicon glyphicon-floppy-disk"> - </a> - <br /> - - <strong>Associated Target Program:</strong> - <span ng-if="!result.meta.target && !result.targetEdit"> - <em>None</em> - </span> - <span ng-if="result.meta.target && !result.targetEdit"> - {{ctrl.targetMappings[result.meta.target]}}</span> - <select ng-if="result.targetEdit" - ng-model="result.meta.target" - class="form-inline"> - <option value="">None</option> - <option value="platform">OpenStack Powered Platform</option> - <option value="compute">OpenStack Powered Compute</option> - <option value="object">OpenStack Powered Object Storage</option> - </select> - <a ng-if="!result.targetEdit" - ng-click="result.targetEdit = true;" - title="Edit" - class="glyphicon glyphicon-pencil"> - </a> - <a ng-if="result.targetEdit" - ng-click="ctrl.associateMeta(index, 'target', result.meta.target)" - title="Save" - class="glyphicon glyphicon-floppy-disk"> - </a> - <br /> - - <strong>Associated Product:</strong> - <span ng-if="!result.product_version && !result.productEdit"> - <em>None</em> - </span> - <span ng-if="result.product_version && !result.productEdit"> - <span ng-if="ctrl.products[result.product_version.product_info.id].product_type == 0"> - <a ui-sref="distro({id: result.product_version.product_info.id})"> - {{ctrl.products[result.product_version.product_info.id].name}} - <small ng-if="result.product_version.version"> - ({{result.product_version.version}}) - </small> - </a> - </span> - <span ng-if="ctrl.products[result.product_version.product_info.id].product_type != 0"> - <a ui-sref="cloud({id: result.product_version.product_info.id})"> - {{ctrl.products[result.product_version.product_info.id].name}} - <small ng-if="result.product_version.version"> - ({{result.product_version.version}}) - </small> - </a> - </span> - </span> - - <select ng-if="result.productEdit" - ng-options="product as product.name for product in ctrl.products | arrayConverter | orderBy: 'name' track by product.id" - ng-model="result.selectedProduct" - ng-change="ctrl.getProductVersions(result)"> - <option value="">-- No Product --</option> - </select> - - <span ng-if="result.productVersions.length && result.productEdit"> - <span class="glyphicon glyphicon-arrow-right" style="padding-right:3px;color:#303030;"></span> - Version: - <select ng-options="version as version.version for version in result.productVersions | orderBy: 'version' track by version.id" - ng-model="result.selectedVersion"> - </select> - - </span> - <a ng-if="!result.productEdit" - ng-click="ctrl.prepVersionEdit(result)" - title="Edit" - class="glyphicon glyphicon-pencil"> - </a> - <a ng-if="result.productEdit" - ng-click="ctrl.associateProductVersion(result)" - confirm="Once you associate this test to this product, ownership - will be transferred to the product's vendor admins. - Continue?" - title="Save" - class="glyphicon glyphicon-floppy-disk"> - </a> - <br /> - </td> + <tr ng-repeat-end=> </tr> </tbody> </table> diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/components/results/resultsController.js b/utils/test/testapi/3rd_party/static/testapi-ui/components/results/resultsController.js index 2b0338c87..93a549a7f 100644 --- a/utils/test/testapi/3rd_party/static/testapi-ui/components/results/resultsController.js +++ b/utils/test/testapi/3rd_party/static/testapi-ui/components/results/resultsController.js @@ -38,7 +38,6 @@ ctrl.associateMeta = associateMeta; ctrl.getVersionList = getVersionList; ctrl.getUserProducts = getUserProducts; - ctrl.getVendors = getVendors; ctrl.associateProductVersion = associateProductVersion; ctrl.getProductVersions = getProductVersions; ctrl.prepVersionEdit = prepVersionEdit; @@ -100,8 +99,6 @@ ctrl.update(); } - ctrl.getVendors(); - /** * This will contact the TestAPI API to get a listing of test run * results. @@ -114,11 +111,11 @@ var start = $filter('date')(ctrl.startDate, 'yyyy-MM-dd'); if (start) { content_url = - content_url + '&start_date=' + start + ' 00:00:00'; + content_url + '&from=' + start + ' 00:00:00'; } var end = $filter('date')(ctrl.endDate, 'yyyy-MM-dd'); if (end) { - content_url = content_url + '&end_date=' + end + ' 23:59:59'; + content_url = content_url + '&to=' + end + ' 23:59:59'; } if (ctrl.isUserResults) { content_url = content_url + '&signed'; @@ -126,9 +123,8 @@ ctrl.resultsRequest = $http.get(content_url).success(function (data) { ctrl.data = data; - ctrl.totalItems = ctrl.data.pagination.total_pages * - ctrl.itemsPerPage; - ctrl.currentPage = ctrl.data.pagination.current_page; + ctrl.totalItems = 20 // ctrl.data.pagination.total_pages * ctrl.itemsPerPage; + ctrl.currentPage = 1 // ctrl.data.pagination.current_page; }).error(function (error) { ctrl.data = null; ctrl.totalItems = 0; @@ -248,27 +244,6 @@ } /** - * This will contact the TestAPI API to get a listing of - * vendors. - */ - function getVendors() { - var contentUrl = testapiApiUrl + '/vendors'; - ctrl.vendorsRequest = - $http.get(contentUrl).success(function (data) { - ctrl.vendors = {}; - data.vendors.forEach(function(vendor) { - ctrl.vendors[vendor.id] = vendor; - }); - }).error(function (error) { - ctrl.vendors = null; - ctrl.showError = true; - ctrl.error = - 'Error retrieving vendor listing from server: ' + - angular.toJson(error); - }); - } - - /** * Send a PUT request to the API server to associate a product with * a test result. */ diff --git a/utils/test/testapi/3rd_party/static/testapi-ui/config.json b/utils/test/testapi/3rd_party/static/testapi-ui/config.json index 5d48c7b12..9fdd85fbb 100644 --- a/utils/test/testapi/3rd_party/static/testapi-ui/config.json +++ b/utils/test/testapi/3rd_party/static/testapi-ui/config.json @@ -1 +1 @@ -{"testapiApiUrl": "http://localhost:8000/api/v1"} +{"testapiApiUrl": "http://testresults.opnfv.org/test/api/v1"} diff --git a/utils/test/testapi/etc/config.ini b/utils/test/testapi/etc/config.ini index 692e48897..ce13990f3 100644 --- a/utils/test/testapi/etc/config.ini +++ b/utils/test/testapi/etc/config.ini @@ -8,7 +8,7 @@ dbname = test_results_collection [api] # Listening port -url = http://localhost:8000/api/v1 +url = http://testresults.opnfv.org/test/api/v1 port = 8000 # With debug_on set to true, error traces will be shown in HTTP responses debug = True @@ -18,7 +18,7 @@ authenticate = False base_url = http://localhost:8000 [ui] -url = http://localhost:8000 +url = http://testresults.opnfv.org/test [osid] @@ -41,7 +41,7 @@ openid_ns = http://specs.openid.net/auth/2.0 # Return endpoint in Refstack's API. Value indicating the endpoint # where the user should be returned to after signing in. Openstack Id # Idp only supports HTTPS address types. (string value) -openid_return_to = /api/v1/auth/signin_return +openid_return_to = v1/auth/signin_return # Claimed identifier. This value must be set to # "http://specs.openid.net/auth/2.0/identifier_select". or to user diff --git a/utils/test/testapi/opnfv_testapi/resources/result_handlers.py b/utils/test/testapi/opnfv_testapi/resources/result_handlers.py index 214706f5f..824a89e58 100644 --- a/utils/test/testapi/opnfv_testapi/resources/result_handlers.py +++ b/utils/test/testapi/opnfv_testapi/resources/result_handlers.py @@ -35,6 +35,8 @@ class GenericResultHandler(handlers.GenericApiHandler): def set_query(self): query = dict() + date_range = dict() + for k in self.request.query_arguments.keys(): v = self.get_query_argument(k) if k == 'project' or k == 'pod' or k == 'case': @@ -47,8 +49,14 @@ class GenericResultHandler(handlers.GenericApiHandler): query['start_date'] = obj elif k == 'trust_indicator': query[k + '.current'] = float(v) - elif k != 'last': + elif k == 'from': + date_range.update({'$gte': str(v)}) + elif k == 'to': + date_range.update({'$lt': str(v)}) + elif k != 'last' and k != 'page': query[k] = v + if date_range: + query['start_date'] = date_range return query @@ -64,9 +72,11 @@ class ResultsCLHandler(GenericResultHandler): - case : case name - pod : pod name - version : platform version (Arno-R1, ...) - - installer (fuel, ...) + - installer : fuel/apex/compass/joid/daisy - build_tag : Jenkins build tag name - - period : x (x last days) + - period : x last days, incompatible with from/to + - from : starting time in 2016-01-01 or 2016-01-01 00:01:23 + - to : ending time in 2016-01-01 or 2016-01-01 00:01:23 - scenario : the test scenario (previously version) - criteria : the global criteria status passed or failed - trust_indicator : evaluate the stability of the test case @@ -113,6 +123,14 @@ class ResultsCLHandler(GenericResultHandler): @type period: L{string} @in period: query @required period: False + @param from: i.e. 2016-01-01 or 2016-01-01 00:01:23 + @type from: L{string} + @in from: query + @required from: False + @param to: i.e. 2016-01-01 or 2016-01-01 00:01:23 + @type to: L{string} + @in to: query + @required to: False @param last: last records stored until now @type last: L{string} @in last: query @@ -126,6 +144,10 @@ class ResultsCLHandler(GenericResultHandler): if last is not None: last = self.get_int('last', last) + page = self.get_query_argument('page', 0) + if page: + last = 20 + self._list(query=self.set_query(), sort=[('start_date', -1)], last=last) |