diff options
67 files changed, 1274 insertions, 1432 deletions
@@ -16,7 +16,6 @@ Fatih Degirmenci (Ericsson, fatih.degirmenci@ericsson.com) Aric Gardner (Linux Foundation, agardner@linuxfoundation.org) Tim Rozet (Red Hat, trozet@redhat.com) Morgan Richomme (Orange, morgan.richomme@orange.com) -Matthew Lijun (Huawei, matthew.lijun@huawei.com) Jose Lausuch (Ericsson, jose.lausuch@ericsson.com) Ryota Mibu (NEC, r-mibu@cq.jp.nec.com) Mei Mei (Huawei, meimei@huawei.com) diff --git a/INFO.yaml b/INFO.yaml new file mode 100644 index 000000000..3bb3cbe97 --- /dev/null +++ b/INFO.yaml @@ -0,0 +1,125 @@ +--- +project: 'Release Engineering (Releng)' +project_creation_date: '2015-06-14' +project_category: 'Integration & Testing' +lifecycle_state: 'Incubation' +project_lead: &opnfv_releng_ptl + name: 'Fatih Degirmenci' + email: 'fatih.degirmenci@ericsson.com' + id: 'fdegir' + company: 'Ericsson' + timezone: 'Europe/Stockholm' +primary_contact: *opnfv_releng_ptl +issue_tracking: + type: 'jira' + url: 'https://jira.opnfv.org/projects/RELENG' + key: 'RELENG' +mailing_list: + type: 'mailman2' + url: 'opnfv-tech-discuss@lists.opnfv.org' + tag: '[releng]' +realtime_discussion: + type: 'irc' + server: 'freenode.net' + channel: '#lf-releng' +meetings: + - type: 'gotomeeting+irc' + agenda: 'https://wiki.opnfv.org/display/INF/Infra+Working+Group' + url: 'https://global.gotomeeting.com/join/819733085' + server: 'freenode.net' + channel: '#opnfv-meeting' + repeats: 'weekly' + time: '16:00 UTC' +repositories: + - 'releng' + - 'releng-anteater' + - 'releng-testresults' + - 'releng-utils' + - 'releng-xci' +committers: + - <<: *opnfv_releng_ptl + - name: 'Aric Gardner' + email: 'agardner@linuxfoundation.org' + company: 'The Linux Foundation' + id: 'agardner' + timezone: 'Canada/Atlantic' + - name: 'Tim Rozet' + email: 'trozet@redhat.com' + company: 'Red Hat' + id: 'trozet' + timezone: 'America/New_York' + - name: 'Morgan Richomme' + email: 'morgan.richomme@orange.com' + company: 'Orange' + id: 'mrichomme' + timezone: 'Europe/Paris' + - name: 'Jose Lausuch' + company: 'SUSE' + email: 'jose.lausuch@ericsson.com' + id: 'jose.lausuch' + timezone: 'Europe/Madrid' + - name: 'Ryota Mibu' + company: 'NEC' + email: 'r-mibu@cq.jp.nec.com' + id: 'r-mibu' + timezone: 'Asia/Tokyo' + - name: 'Mei Mei' + company: 'Huawei' + email: 'meimei@huawei.com' + id: 'm00133142' + timezone: 'Asia/Shanghai' + - name: 'Trevor Bramwell' + company: 'The Linux Foundation' + email: 'tbramwell@linuxfoundation.org' + id: 'bramwelt' + timezone: 'America/Los_Angeles' + - name: 'Serena Feng' + company: 'ZTE' + email: 'feng.xiaowei@zte.com.cn' + id: 'SerenaFeng' + timezone: 'Asia/Shanghai' + - name: 'Yolanda Robla Mota' + company: 'Red Hat' + email: 'yroblamo@redhat.com' + id: 'yrobla' + timezone: 'America/New_York' + - name: 'Markos Chandras' + company: 'SUSE' + email: 'mchandras@suse.de' + id: 'mchandras' + timezone: 'Europe/Berlin' + - name: 'Luke Hinds' + company: 'Red Hat' + email: 'lhinds@redhat.com' + id: 'lukehinds' + timezone: 'Europe/London' +tsc: + approval: 'http://ircbot.wl.linuxfoundation.org/meetings/opnfv-meeting/2015/opnfv-meeting.2015-07-14-14.00.html' + changes: + - type: 'removal' + name: 'Guy Rodrigue Koffi' + link: '' + - type: 'removal' + name: 'Victor Laza' + link: 'http://meetbot.opnfv.org/meetings/opnfv-meeting/2016/opnfv-meeting.2016-02-16-14.59.html' + - type: 'promotion' + name: 'Mei Mei' + link: 'http://lists.opnfv.org/pipermail/opnfv-tsc/2016-March/002228.html' + - type: 'removal' + name: 'Peter Banzi' + link: '' + - type: 'promotion' + name: 'Trevor Bramwell' + link: 'http://lists.opnfv.org/pipermail/opnfv-tech-discuss/2016-July/011659.html' + - type: 'promotion' + name: 'Serena Feng' + link: '' + - type: 'promotion' + name: 'Yolanda Robla Mota' + link: '' + - type: 'promotion' + name: 'Markos' + link: '' + - type: 'promotion' + name: 'Luke Hinds' + link: '' diff --git a/jjb/apex/apex-verify-jobs.yml b/jjb/apex/apex-verify-jobs.yml index c57ac1d60..88c1b1765 100644 --- a/jjb/apex/apex-verify-jobs.yml +++ b/jjb/apex/apex-verify-jobs.yml @@ -157,6 +157,8 @@ - compare-type: ANT pattern: 'build/**' - compare-type: ANT + pattern: 'ci/**' + - compare-type: ANT pattern: 'lib/**' - compare-type: ANT pattern: 'config/**' diff --git a/jjb/apex/apex.yml b/jjb/apex/apex.yml index 43e234ce1..6714d6a66 100644 --- a/jjb/apex/apex.yml +++ b/jjb/apex/apex.yml @@ -35,7 +35,7 @@ baremetal-slave: 'apex-baremetal-master' verify-scenario: 'os-odl-nofeature-ha' scenario_stream: 'euphrates' - disable_daily: false + disable_daily: true - danube: &danube branch: 'stable/danube' gs-pathname: '/danube' @@ -110,6 +110,8 @@ <<: *master - 'os-odl-bgpvpn-ha': <<: *master + - 'os-odl-bgpvpn-noha': + <<: *master - 'os-ovn-nofeature-noha': <<: *master - 'os-nosdn-fdio-noha': @@ -543,7 +545,7 @@ predefined-parameters: DEPLOY_SCENARIO=$DEPLOY_SCENARIO kill-phase-on: NEVER - enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|nosdn-kvm|odl_l3-fdio)-ha/" + enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|odl-bgpvpn)-ha/" abort-all-job: false git-revision: false - multijob: @@ -1335,6 +1337,14 @@ kill-phase-on: NEVER abort-all-job: true git-revision: false + - name: 'apex-os-odl-bgpvpn-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-ovn-nofeature-noha-baremetal-master' node-parameters: false current-parameters: false diff --git a/jjb/apex/apex.yml.j2 b/jjb/apex/apex.yml.j2 index 6cd9de282..27a854dd7 100644 --- a/jjb/apex/apex.yml.j2 +++ b/jjb/apex/apex.yml.j2 @@ -35,7 +35,7 @@ baremetal-slave: 'apex-baremetal-master' verify-scenario: 'os-odl-nofeature-ha' scenario_stream: 'euphrates' - disable_daily: false + disable_daily: true - danube: &danube branch: 'stable/danube' gs-pathname: '/danube' @@ -419,7 +419,7 @@ predefined-parameters: DEPLOY_SCENARIO=$DEPLOY_SCENARIO kill-phase-on: NEVER - enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|nosdn-kvm|odl_l3-fdio)-ha/" + enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|odl-bgpvpn)-ha/" abort-all-job: false git-revision: false - multijob: diff --git a/jjb/apex/scenarios.yaml.hidden b/jjb/apex/scenarios.yaml.hidden index 98b698dd8..789ca7f7e 100644 --- a/jjb/apex/scenarios.yaml.hidden +++ b/jjb/apex/scenarios.yaml.hidden @@ -4,6 +4,7 @@ master: - 'os-odl-nofeature-ha' - 'os-odl-nofeature-noha' - 'os-odl-bgpvpn-ha' + - 'os-odl-bgpvpn-noha' - 'os-ovn-nofeature-noha' - 'os-nosdn-fdio-noha' - 'os-nosdn-fdio-ha' diff --git a/jjb/armband/armband-ci-jobs.yml b/jjb/armband/armband-ci-jobs.yml index 0202ef0e7..b2fa62f87 100644 --- a/jjb/armband/armband-ci-jobs.yml +++ b/jjb/armband/armband-ci-jobs.yml @@ -158,34 +158,21 @@ build-step-failure-threshold: 'never' failure-threshold: 'never' unstable-threshold: 'FAILURE' - # 1.dovetail only master, based on D release - # 2.here the stream means the SUT stream, - # dovetail stream is defined in its own job - # 3.only proposed_tests testsuite here(refstack, ha, ipv6, bgpvpn) - # 4.not used for release criteria or compliance, + # 1.here the stream means the SUT stream, dovetail stream is defined in its own job + # 2.only debug testsuite here(refstack, ha, vping, ipv6, tempest, bgpvpn) + # 3.not used for release criteria or compliance, # only to debug the dovetail tool bugs with arm pods - # 5.only run against scenario os-(nosdn|odl)-(nofeature-bgpvpn)-ha - - conditional-step: - condition-kind: and - condition-operands: - - condition-kind: regex-match - regex: os-(nosdn|odl)-(nofeature|bgpvpn)-ha - label: '{scenario}' - - condition-kind: regex-match - regex: 'danube' - label: '{stream}' - steps: - - trigger-builds: - - project: 'dovetail-{installer}-{pod}-proposed_tests-master' - current-parameters: false - predefined-parameters: - DEPLOY_SCENARIO={scenario} - block: true - same-node: true - block-thresholds: - build-step-failure-threshold: 'never' - failure-threshold: 'never' - unstable-threshold: 'FAILURE' + - trigger-builds: + - project: 'dovetail-{installer}-{pod}-proposed_tests-{stream}' + current-parameters: false + predefined-parameters: + DEPLOY_SCENARIO={scenario} + block: true + same-node: true + block-thresholds: + build-step-failure-threshold: 'never' + failure-threshold: 'never' + unstable-threshold: 'FAILURE' # Armband uses Fuel's log collection project job, no need to duplicate - conditional-step: condition-kind: not diff --git a/jjb/auto/auto.yml b/jjb/auto/auto.yml index fefa37626..c28dc5618 100644 --- a/jjb/auto/auto.yml +++ b/jjb/auto/auto.yml @@ -4,53 +4,5 @@ project: '{name}' - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: false - jobs: - - 'auto-verify-{stream}' - -- job-template: - name: 'auto-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-defaults' - - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**|.gitignore' - - builders: - - shell: | - echo "Nothing to verify!" + - '{project}-verify-basic' diff --git a/jjb/availability/availability.yml b/jjb/availability/availability.yml index a8f629734..2d3473499 100644 --- a/jjb/availability/availability.yml +++ b/jjb/availability/availability.yml @@ -1,64 +1,8 @@ --- -################################################### -# All the jobs except verify have been removed! -# They will only be enabled on request by projects! -################################################### - project: name: availability project: '{name}' jobs: - - 'availability-verify-{stream}' - - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: 'false' - - euphrates: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' - disabled: 'false' - -- job-template: - name: 'availability-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-ubuntu-defaults' - - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**|.gitignore' - - builders: - - shell: | - echo "Nothing to verify!" + - '{project}-verify-basic' diff --git a/jjb/barometer/barometer-build.sh b/jjb/barometer/barometer-build.sh index e40841bc2..5f78aae7a 100644 --- a/jjb/barometer/barometer-build.sh +++ b/jjb/barometer/barometer-build.sh @@ -11,6 +11,7 @@ echo cd ci ./install_dependencies.sh ./build_rpm.sh +cp utility/rpms_list $WORKSPACE cd $WORKSPACE # save information regarding artifact into file diff --git a/jjb/barometer/barometer-upload-artifact.sh b/jjb/barometer/barometer-upload-artifact.sh index 0f639b5d9..f05dc2af8 100644 --- a/jjb/barometer/barometer-upload-artifact.sh +++ b/jjb/barometer/barometer-upload-artifact.sh @@ -2,7 +2,7 @@ set -o nounset set -o pipefail -RPM_LIST=$WORKSPACE/ci/utilities/rpms_list +RPM_LIST=$WORKSPACE/rpms_list RPM_WORKDIR=$WORKSPACE/rpmbuild RPM_DIR=$RPM_WORKDIR/RPMS/x86_64/ cd $WORKSPACE/ diff --git a/jjb/ci_gate_security/opnfv-ci-gate-security.yml b/jjb/ci_gate_security/opnfv-ci-gate-security.yml index 75d1698ad..d54aebea4 100644 --- a/jjb/ci_gate_security/opnfv-ci-gate-security.yml +++ b/jjb/ci_gate_security/opnfv-ci-gate-security.yml @@ -116,12 +116,13 @@ builders: - anteater-security-audit-weekly - - clean-workspace publishers: # defined in jjb/global/releng-macros.yml - 'email-{repo}-ptl': subject: 'OPNFV Security Scan Result: {repo}' + - workspace-cleanup: + fail-build: false - job-template: name: 'opnfv-security-audit-verify-{stream}' @@ -162,7 +163,7 @@ comment-contains-value: 'reverify' projects: - project-compare-type: 'REG_EXP' - project-pattern: 'apex|armband|bamboo|barometer|bottlenecks|calipso|compass4nfv|conductor|cooper|cperf|daisy|doctor|dovetail|dpacc|enfv|escalator|fds|fuel|functest|octopus|pharos|releng|sandbox|yardstick|infra|ipv6|kvmfornfv|lsoapi|models|moon|multisite|netready' + project-pattern: 'apex|armband|bamboo|barometer|bottlenecks|calipso|compass4nfv|conductor|copper|cperf|daisy|doctor|dovetail|dpacc|enfv|escalator|fds|fuel|functest|octopus|pharos|releng|sandbox|yardstick|infra|ipv6|kvmfornfv|lsoapi|models|moon|multisite|netready' branches: - branch-compare-type: 'ANT' branch-pattern: '**/{branch}' diff --git a/jjb/compass4nfv/compass-ci-jobs.yml b/jjb/compass4nfv/compass-ci-jobs.yml index 4adfc2a3f..0790b83ca 100644 --- a/jjb/compass4nfv/compass-ci-jobs.yml +++ b/jjb/compass4nfv/compass-ci-jobs.yml @@ -13,7 +13,7 @@ gs-pathname: '' ppa-pathname: '/{stream}' disabled: false - openstack-version: ocata + openstack-version: pike euphrates: &euphrates stream: euphrates branch: 'stable/{stream}' @@ -54,7 +54,7 @@ # master # ------------------------------- - baremetal-centos: - slave-label: 'intel-pod8' + slave-label: 'intel-pod17' os-version: 'centos7' <<: *master # ------------------------------- @@ -120,6 +120,9 @@ - 'os-nosdn-ovs_dpdk-noha': disabled: false auto-trigger-name: 'compass-{scenario}-{pod}-{stream}-trigger' + - 'os-nosdn-bar-ha': + disabled: false + auto-trigger-name: 'compass-{scenario}-{pod}-{stream}-trigger' jobs: - 'compass-{scenario}-{pod}-daily-{stream}' @@ -207,24 +210,21 @@ unstable-threshold: 'FAILURE' # dovetail only master by now, not sync with A/B/C branches # here the stream means the SUT stream, dovetail stream is defined in its own job - # only run on os-(nosdn|odl_l2|onos|odl_l3)-nofeature-ha scenario - # run against SUT master branch, dovetail docker image with latest tag - # run against SUT danube branch, dovetail docker image with latest tag(Monday and Sunday) - # run against SUT danube branch, dovetail docker image with cvp.X.X.X tag(Tuesday, Thursday, Friday and Saturday) + # only run on os-(nosdn|odl_l2|odl_l3)-nofeature-ha scenario + # run against SUT master/euphrates branch, dovetail docker image with latest tag(Monday, Tuesday) + # run against SUT master/euphrates branch, dovetail docker image with cvp.X.X.X tag(Thursday, Friday) + # run against SUT danube branch, dovetail docker image with cvp.X.X.X tag on huawei-pod7 - conditional-step: condition-kind: and condition-operands: - condition-kind: regex-match - regex: danube - label: '{stream}' - - condition-kind: regex-match - regex: os-(nosdn|odl_l2|odl_l3)-nofeature-ha + regex: os-(nosdn|odl_l3)-nofeature-ha label: '{scenario}' - condition-kind: day-of-week day-selector: select-days days: MON: true - SUN: true + TUES: true use-build-time: true steps: - trigger-builds: @@ -243,19 +243,13 @@ condition-kind: and condition-operands: - condition-kind: regex-match - regex: danube - label: '{stream}' - - condition-kind: regex-match - regex: os-(nosdn|odl_l2|odl_l3)-nofeature-ha + regex: os-(nosdn|odl_l3)-nofeature-ha label: '{scenario}' - condition-kind: day-of-week day-selector: select-days days: - TUES: true - WED: true THURS: true FRI: true - SAT: true use-build-time: true steps: - trigger-builds: @@ -273,27 +267,6 @@ condition-kind: and condition-operands: - condition-kind: regex-match - regex: os-(nosdn|odl_l2|odl_l3)-nofeature-ha - label: '{scenario}' - - condition-kind: regex-match - regex: master - label: '{stream}' - steps: - - trigger-builds: - - project: 'dovetail-compass-{pod}-proposed_tests-{stream}' - current-parameters: false - predefined-parameters: - DEPLOY_SCENARIO={scenario} - block: true - same-node: true - block-thresholds: - build-step-failure-threshold: 'never' - failure-threshold: 'never' - unstable-threshold: 'FAILURE' - - conditional-step: - condition-kind: and - condition-operands: - - condition-kind: regex-match regex: os-nosdn-nofeature-ha label: '{scenario}' steps: @@ -333,7 +306,7 @@ - build-name: name: '$BUILD_NUMBER - Scenario: $DEPLOY_SCENARIO' - timeout: - timeout: 240 + timeout: 360 abort: true - fix-workspace-permissions @@ -453,6 +426,10 @@ name: 'compass-k8-nosdn-nofeature-ha-baremetal-centos-master-trigger' triggers: - timed: '' +- trigger: + name: 'compass-os-nosdn-bar-ha-baremetal-centos-master-trigger' + triggers: + - timed: '' # '0 19 * * *' # ---------------------------- # noha-baremetal-centos-master @@ -533,6 +510,10 @@ name: 'compass-k8-nosdn-nofeature-ha-huawei-pod7-danube-trigger' triggers: - timed: '' +- trigger: + name: 'compass-os-nosdn-bar-ha-huawei-pod7-danube-trigger' + triggers: + - timed: '' # '0 19 * * *' # ---------------------------- # noha-huawei-pod7-danube @@ -568,7 +549,7 @@ - trigger: name: 'compass-os-nosdn-nofeature-ha-baremetal-master-trigger' triggers: - - timed: '0 20 * * *' + - timed: '0 20 2-30/2 * *' - trigger: name: 'compass-os-nosdn-openo-ha-baremetal-master-trigger' triggers: @@ -580,7 +561,7 @@ - trigger: name: 'compass-os-odl_l3-nofeature-ha-baremetal-master-trigger' triggers: - - timed: '0 18 * * *' + - timed: '0 18 1-29/2 * *' - trigger: name: 'compass-os-onos-nofeature-ha-baremetal-master-trigger' triggers: @@ -596,15 +577,15 @@ - trigger: name: 'compass-os-odl_l2-moon-ha-baremetal-master-trigger' triggers: - - timed: '0 12 * * *' + - timed: '0 12 2-30/2 * *' - trigger: name: 'compass-os-nosdn-kvm-ha-baremetal-master-trigger' triggers: - - timed: '0 14 * * *' + - timed: '0 14 1-29/2 * *' - trigger: name: 'compass-os-nosdn-ovs_dpdk-ha-baremetal-master-trigger' triggers: - - timed: '0 16 * * *' + - timed: '0 16 2-30/2 * *' - trigger: name: 'compass-k8-nosdn-nofeature-ha-baremetal-master-trigger' triggers: @@ -612,7 +593,11 @@ - trigger: name: 'compass-os-odl-sfc-ha-baremetal-master-trigger' triggers: - - timed: '0 10 * * *' + - timed: '0 10 1-29/2 * *' +- trigger: + name: 'compass-os-nosdn-bar-ha-baremetal-master-trigger' + triggers: + - timed: '0 2 2-30/2 * *' # --------------------- # noha-baremetal-master @@ -648,7 +633,7 @@ - trigger: name: 'compass-os-nosdn-nofeature-ha-baremetal-euphrates-trigger' triggers: - - timed: '0 1 * * *' + - timed: '0 1 1-29/2 * *' - trigger: name: 'compass-os-nosdn-openo-ha-baremetal-euphrates-trigger' triggers: @@ -660,7 +645,7 @@ - trigger: name: 'compass-os-odl_l3-nofeature-ha-baremetal-euphrates-trigger' triggers: - - timed: '0 21 * * *' + - timed: '0 21 2-30/2 * *' - trigger: name: 'compass-os-onos-nofeature-ha-baremetal-euphrates-trigger' triggers: @@ -676,15 +661,15 @@ - trigger: name: 'compass-os-odl_l2-moon-ha-baremetal-euphrates-trigger' triggers: - - timed: '0 5 * * *' + - timed: '0 5 1-29/2 * *' - trigger: name: 'compass-os-nosdn-kvm-ha-baremetal-euphrates-trigger' triggers: - - timed: '0 13 * * *' + - timed: '0 13 2-30/2 * *' - trigger: name: 'compass-os-nosdn-ovs_dpdk-ha-baremetal-euphrates-trigger' triggers: - - timed: '0 9 * * *' + - timed: '0 9 1-29/2 * *' - trigger: name: 'compass-k8-nosdn-nofeature-ha-baremetal-euphrates-trigger' triggers: @@ -692,7 +677,11 @@ - trigger: name: 'compass-os-odl-sfc-ha-baremetal-euphrates-trigger' triggers: - - timed: '0 17 * * *' + - timed: '0 17 2-30/2 * *' +- trigger: + name: 'compass-os-nosdn-bar-ha-baremetal-euphrates-trigger' + triggers: + - timed: '0 21 1-29/2 * *' # --------------------- # noha-baremetal-euphrates @@ -740,7 +729,7 @@ - trigger: name: 'compass-os-odl_l3-nofeature-ha-virtual-master-trigger' triggers: - - timed: '0 19 * * *' + - timed: '0 19 2-30/2 * *' - trigger: name: 'compass-os-onos-nofeature-ha-virtual-master-trigger' triggers: @@ -756,15 +745,15 @@ - trigger: name: 'compass-os-odl_l2-moon-ha-virtual-master-trigger' triggers: - - timed: '30 12 * * *' + - timed: '30 12 1-29/2 * *' - trigger: name: 'compass-os-nosdn-kvm-ha-virtual-master-trigger' triggers: - - timed: '0 13 * * *' + - timed: '0 13 1-29/2 * *' - trigger: name: 'compass-os-nosdn-ovs_dpdk-ha-virtual-master-trigger' triggers: - - timed: '0 17 * * *' + - timed: '0 17 2-30/2 * *' - trigger: name: 'compass-k8-nosdn-nofeature-ha-virtual-master-trigger' triggers: @@ -772,7 +761,11 @@ - trigger: name: 'compass-os-odl-sfc-ha-virtual-master-trigger' triggers: - - timed: '0 16 * * *' + - timed: '0 16 2-30/2 * *' +- trigger: + name: 'compass-os-nosdn-bar-ha-virtual-master-trigger' + triggers: + - timed: '0 17 1-29/2 * *' # ------------------- # noha-virtual-master @@ -780,27 +773,27 @@ - trigger: name: 'compass-os-nosdn-kvm-noha-virtual-master-trigger' triggers: - - timed: '30 13 * * *' + - timed: '30 13 1-29/2 * *' - trigger: name: 'compass-os-nosdn-nofeature-noha-virtual-master-trigger' triggers: - - timed: '0 14 * * *' + - timed: '0 14 2-30/2 * *' - trigger: name: 'compass-os-odl_l3-nofeature-noha-virtual-master-trigger' triggers: - - timed: '0 15 * * *' + - timed: '0 15 1-29/2 * *' - trigger: name: 'compass-os-odl_l2-moon-noha-virtual-master-trigger' triggers: - - timed: '0 18 * * *' + - timed: '0 18 2-30/2 * *' - trigger: name: 'compass-os-odl-sfc-noha-virtual-master-trigger' triggers: - - timed: '0 20 * * *' + - timed: '0 20 1-29/2 * *' - trigger: name: 'compass-os-nosdn-ovs_dpdk-noha-virtual-master-trigger' triggers: - - timed: '0 11 * * *' + - timed: '0 11 2-30/2 * *' # ----------------- # ha-virtual-euphrates @@ -808,7 +801,7 @@ - trigger: name: 'compass-os-nosdn-nofeature-ha-virtual-euphrates-trigger' triggers: - - timed: '0 23 * * *' + - timed: '0 23 1-29/2 * *' - trigger: name: 'compass-os-nosdn-openo-ha-virtual-euphrates-trigger' triggers: @@ -820,7 +813,7 @@ - trigger: name: 'compass-os-odl_l3-nofeature-ha-virtual-euphrates-trigger' triggers: - - timed: '0 22 * * *' + - timed: '0 22 2-30/2 * *' - trigger: name: 'compass-os-onos-nofeature-ha-virtual-euphrates-trigger' triggers: @@ -836,23 +829,27 @@ - trigger: name: 'compass-os-odl_l2-moon-ha-virtual-euphrates-trigger' triggers: - - timed: '0 20 * * *' + - timed: '0 20 1-29/2 * *' - trigger: name: 'compass-os-nosdn-kvm-ha-virtual-euphrates-trigger' triggers: - - timed: '0 16 * * *' + - timed: '0 16 2-30/2 * *' - trigger: name: 'compass-os-nosdn-ovs_dpdk-ha-virtual-euphrates-trigger' triggers: - - timed: '0 14 * * *' + - timed: '0 14 1-29/2 * *' - trigger: name: 'compass-os-odl-sfc-ha-virtual-euphrates-trigger' triggers: - - timed: '0 18 * * *' + - timed: '0 18 2-30/2 * *' - trigger: name: 'compass-k8-nosdn-nofeature-ha-virtual-euphrates-trigger' triggers: - - timed: '5 1 * * *' + - timed: '5 1 2-30/2 * *' +- trigger: + name: 'compass-os-nosdn-bar-ha-virtual-euphrates-trigger' + triggers: + - timed: '0 19 1-29/2 * *' # ------------------- # noha-virtual-euphrates @@ -860,24 +857,24 @@ - trigger: name: 'compass-os-nosdn-kvm-noha-virtual-euphrates-trigger' triggers: - - timed: '0 15 * * *' + - timed: '0 15 1-29/2 * *' - trigger: name: 'compass-os-nosdn-nofeature-noha-virtual-euphrates-trigger' triggers: - - timed: '0 17 * * *' + - timed: '0 17 2-30/2 * *' - trigger: name: 'compass-os-odl_l3-nofeature-noha-virtual-euphrates-trigger' triggers: - - timed: '0 23 * * *' + - timed: '0 23 1-29/2 * *' - trigger: name: 'compass-os-odl_l2-moon-noha-virtual-euphrates-trigger' triggers: - - timed: '0 21 * * *' + - timed: '0 21 2-30/2 * *' - trigger: name: 'compass-os-odl-sfc-noha-virtual-euphrates-trigger' triggers: - - timed: '0 19 * * *' + - timed: '0 19 1-29/2 * *' - trigger: name: 'compass-os-nosdn-ovs_dpdk-noha-virtual-euphrates-trigger' triggers: - - timed: '0 12 * * *' + - timed: '0 12 2-30/2 * *' diff --git a/jjb/compass4nfv/compass-deploy.sh b/jjb/compass4nfv/compass-deploy.sh index ad069a57c..ac649b992 100644 --- a/jjb/compass4nfv/compass-deploy.sh +++ b/jjb/compass4nfv/compass-deploy.sh @@ -45,10 +45,6 @@ else export NETWORK_CONF_FILE=network.yml fi -if [[ "$NODE_NAME" =~ "intel-pod8" ]]; then - export OS_MGMT_NIC=em4 -fi - if [[ "$NODE_NAME" =~ "-virtual" ]]; then export NETWORK_CONF=$CONFDIR/vm_environment/$NODE_NAME/${NETWORK_CONF_FILE} export DHA_CONF=$CONFDIR/vm_environment/${DEPLOY_SCENARIO}.yml @@ -58,7 +54,11 @@ if [[ "$NODE_NAME" =~ "-virtual" ]]; then export VIRT_NUMBER=2 fi else - export INSTALL_NIC=eth1 + if [[ "$NODE_NAME" =~ "intel-pod17" ]]; then + export INSTALL_NIC=eno2 + else + export INSTALL_NIC=eth1 + fi export NETWORK_CONF=$CONFDIR/hardware_environment/$NODE_NAME/${NETWORK_CONF_FILE} export DHA_CONF=$CONFDIR/hardware_environment/$NODE_NAME/${DEPLOY_SCENARIO}.yml fi diff --git a/jjb/compass4nfv/compass-verify-jobs.yml b/jjb/compass4nfv/compass-verify-jobs.yml index 6927145c8..7024dad58 100644 --- a/jjb/compass4nfv/compass-verify-jobs.yml +++ b/jjb/compass4nfv/compass-verify-jobs.yml @@ -16,13 +16,13 @@ disabled: false openstack-version: 'ocata' branch-type: 'master' - - danube: + - euphrates: branch: 'stable/{stream}' gs-pathname: '/{stream}' ppa-pathname: '/{stream}' disabled: false - openstack-version: 'newton' - branch-type: 'branch' + openstack-version: 'ocata' + branch-type: 'master' distro: - 'xenial': @@ -75,7 +75,7 @@ wrappers: - ssh-agent-wrapper - timeout: - timeout: 240 + timeout: 360 fail: true - fix-workspace-permissions diff --git a/jjb/conductor/conductor.yml b/jjb/conductor/conductor.yml index 3e5e5dedb..8a128da37 100644 --- a/jjb/conductor/conductor.yml +++ b/jjb/conductor/conductor.yml @@ -1,64 +1,8 @@ --- -################################################### -# All the jobs except verify have been removed! -# They will only be enabled on request by projects! -################################################### - project: name: conductor project: '{name}' jobs: - - 'conductor-verify-{stream}' - - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: false - - euphrates: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' - disabled: false - -- job-template: - name: 'conductor-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-ubuntu-defaults' - - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**|.gitignore' - - builders: - - shell: | - echo "Nothing to verify!" + - '{project}-verify-basic' diff --git a/jjb/container4nfv/container4nfv-project.yml b/jjb/container4nfv/container4nfv-project.yml index 58070e1c5..03bbb655e 100644 --- a/jjb/container4nfv/container4nfv-project.yml +++ b/jjb/container4nfv/container4nfv-project.yml @@ -10,7 +10,8 @@ jobs: - 'container4nfv-verify-{stream}' - - 'container4nfv-daily-{stream}' + - 'container4nfv-daily-upload-{stream}' + - 'container4nfv-daily-deploy-{stream}' stream: - master: @@ -71,9 +72,34 @@ cd $WORKSPACE/ci ./build.sh +- job-template: + name: 'container4nfv-daily-upload-{stream}' + + disabled: '{obj:disabled}' + + concurrent: false + + scm: + - git-scm + + wrappers: + - fix-workspace-permissions + + parameters: + - project-parameter: + project: '{project}' + branch: '{branch}' + - 'opnfv-build-ubuntu-defaults' + - 'container4nfv-defaults': + gs-pathname: '{gs-pathname}' + + builders: + - shell: | + cd $WORKSPACE/ci + ./upload.sh - job-template: - name: 'container4nfv-daily-{stream}' + name: 'container4nfv-daily-deploy-{stream}' project-type: freestyle @@ -115,3 +141,14 @@ - shell: | cd $WORKSPACE/ci ./deploy.sh + +################### +# parameter macros +################### +- parameter: + name: 'container4nfv-defaults' + parameters: + - string: + name: GS_URL + default: artifacts.opnfv.org/$PROJECT{gs-pathname} + description: "URL to Google Storage." diff --git a/jjb/copper/copper.yml b/jjb/copper/copper.yml index d9ac0b85a..620aefd9c 100644 --- a/jjb/copper/copper.yml +++ b/jjb/copper/copper.yml @@ -1,69 +1,8 @@ --- -################################################### -# All the jobs except verify have been removed! -# They will only be enabled on request by projects! -################################################### - project: name: copper project: '{name}' jobs: - - 'copper-verify-{stream}' - - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: false - - euphrates: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' - disabled: false - -- job-template: - name: 'copper-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-ubuntu-defaults' - - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**|.gitignore' - - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # shellcheck -f tty tests/*.sh + - '{project}-verify-basic' diff --git a/jjb/daisy4nfv/daisy-daily-jobs.yml b/jjb/daisy4nfv/daisy-daily-jobs.yml index 090d2e1f2..5a0e321f0 100644 --- a/jjb/daisy4nfv/daisy-daily-jobs.yml +++ b/jjb/daisy4nfv/daisy-daily-jobs.yml @@ -50,7 +50,9 @@ - baremetal: slave-label: zte-pod3 <<: *master - + - zte-pod9: + slave-label: zte-pod9 + <<: *master # ------------------------------- # None-CI PODs # ------------------------------- @@ -68,6 +70,9 @@ # ODL_L3 scenarios - 'os-odl-nofeature-ha': auto-trigger-name: 'daisy-{scenario}-{pod}-daily-{stream}-trigger' + # ovs_dpdk scenarios + - 'os-nosdn-ovs_dpdk-noha': + auto-trigger-name: 'daisy-{scenario}-{pod}-daily-{stream}-trigger' jobs: - '{project}-{scenario}-{pod}-daily-{stream}' @@ -126,6 +131,9 @@ current-parameters: false predefined-parameters: DEPLOY_SCENARIO={scenario} + INSTALLER_VERSION={stream} + UPSTREAM_JOB_NAME=$JOB_NAME + UPSTREAM_BUILD_ID=$BUILD_ID same-node: true block: true - trigger-builds: @@ -133,6 +141,9 @@ current-parameters: false predefined-parameters: DEPLOY_SCENARIO={scenario} + INSTALLER_VERSION={stream} + UPSTREAM_JOB_NAME=$JOB_NAME + UPSTREAM_BUILD_ID=$BUILD_ID same-node: true block: true block-thresholds: @@ -154,6 +165,9 @@ current-parameters: false predefined-parameters: DEPLOY_SCENARIO={scenario} + INSTALLER_VERSION={stream} + UPSTREAM_JOB_NAME=$JOB_NAME + UPSTREAM_BUILD_ID=$BUILD_ID block: true same-node: true block-thresholds: @@ -209,10 +223,13 @@ builders: - description-setter: description: "POD: $NODE_NAME" + - 'track-begin-timestamp' - shell: !include-raw-escape: ./daisy4nfv-download-artifact.sh - shell: !include-raw-escape: ./daisy-deploy.sh + publishers: + - 'report-provision-result' ######################## # trigger macros @@ -224,7 +241,7 @@ - trigger: name: 'daisy-os-nosdn-nofeature-ha-baremetal-daily-master-trigger' triggers: - - timed: '0 18 * * *' + - timed: '0 12 * * *' # Basic NOHA Scenarios - trigger: name: 'daisy-os-nosdn-nofeature-noha-baremetal-daily-master-trigger' @@ -234,7 +251,12 @@ - trigger: name: 'daisy-os-odl-nofeature-ha-baremetal-daily-master-trigger' triggers: - - timed: '0 12 * * *' + - timed: '0 18 * * *' +# ovs_dpdk Scenarios +- trigger: + name: 'daisy-os-nosdn-ovs_dpdk-noha-baremetal-daily-master-trigger' + triggers: + - timed: '' # ---------------------------------------------- # Triggers for job running on daisy-virtual against master branch @@ -254,6 +276,11 @@ name: 'daisy-os-odl-nofeature-ha-virtual-daily-master-trigger' triggers: - timed: '0 12 * * *' +# ovs_dpdk Scenarios +- trigger: + name: 'daisy-os-nosdn-ovs_dpdk-noha-virtual-daily-master-trigger' + triggers: + - timed: '' # ---------------------------------------------- # Triggers for job running on daisy-baremetal against euphrates branch @@ -273,6 +300,11 @@ name: 'daisy-os-odl-nofeature-ha-baremetal-daily-euphrates-trigger' triggers: - timed: '0 20 * * *' +# ovs_dpdk Scenarios +- trigger: + name: 'daisy-os-nosdn-ovs_dpdk-noha-baremetal-daily-euphrates-trigger' + triggers: + - timed: '' # ---------------------------------------------- # Triggers for job running on daisy-virtual against euphrates branch @@ -292,3 +324,32 @@ name: 'daisy-os-odl-nofeature-ha-virtual-daily-euphrates-trigger' triggers: - timed: '0 20 * * *' +# ovs_dpdk Scenarios +- trigger: + name: 'daisy-os-nosdn-ovs_dpdk-noha-virtual-daily-euphrates-trigger' + triggers: + - timed: '' + +# ---------------------------------------------- +# ZTE POD9 Triggers running against master branch +# ---------------------------------------------- +# ovs_dpdk Scenarios +- trigger: + name: 'daisy-os-nosdn-ovs_dpdk-noha-zte-pod9-daily-master-trigger' + triggers: + - timed: '0 10 * * *' +# Basic HA Scenarios +- trigger: + name: 'daisy-os-nosdn-nofeature-ha-zte-pod9-daily-master-trigger' + triggers: + - timed: '' +# Basic NOHA Scenarios +- trigger: + name: 'daisy-os-nosdn-nofeature-noha-zte-pod9-daily-master-trigger' + triggers: + - timed: '' +# ODL Scenarios +- trigger: + name: 'daisy-os-odl-nofeature-ha-zte-pod9-daily-master-trigger' + triggers: + - timed: '' diff --git a/jjb/daisy4nfv/daisy-deploy.sh b/jjb/daisy4nfv/daisy-deploy.sh index 803ff5b03..1723fd109 100755 --- a/jjb/daisy4nfv/daisy-deploy.sh +++ b/jjb/daisy4nfv/daisy-deploy.sh @@ -19,14 +19,22 @@ fi # clone the securedlab repo cd $WORKSPACE -SECURELAB_DIR=/var/tmp/opnfv-securedlab -echo "Cloning securedlab repo $BRANCH to $SECURELAB_DIR" -rm -rf $SECURELAB_DIR -git clone ssh://jenkins-zte@gerrit.opnfv.org:29418/securedlab --quiet \ - --branch $BRANCH $SECURELAB_DIR +# There are no PDFs in euphrates branch of pharos repo. +if [[ "$BRANCH" =~ "euphrates" ]]; then + CONFIG_REPO_NAME=securedlab +else + CONFIG_REPO_NAME=pharos +fi + +LABS_DIR=/var/tmp/opnfv-${CONFIG_REPO_NAME} + +echo "Cloning ${CONFIG_REPO_NAME} repo $BRANCH to $LABS_DIR" +rm -rf $LABS_DIR +git clone ssh://jenkins-zte@gerrit.opnfv.org:29418/${CONFIG_REPO_NAME} \ + --quiet --branch $BRANCH $LABS_DIR -DEPLOY_COMMAND="sudo -E ./ci/deploy/deploy.sh -L $SECURELAB_DIR \ +DEPLOY_COMMAND="sudo -E ./ci/deploy/deploy.sh -L $LABS_DIR \ -l $LAB_NAME -p $POD_NAME -B $BRIDGE -s $DEPLOY_SCENARIO" # log info to console diff --git a/jjb/daisy4nfv/daisy4nfv-download-artifact.sh b/jjb/daisy4nfv/daisy4nfv-download-artifact.sh index a64c80e5c..ae5ca3813 100755 --- a/jjb/daisy4nfv/daisy4nfv-download-artifact.sh +++ b/jjb/daisy4nfv/daisy4nfv-download-artifact.sh @@ -68,7 +68,15 @@ else DOWNLOAD_CMD="curl -L -s -o $WORKSPACE/opnfv.bin" fi -$DOWNLOAD_CMD http://$OPNFV_ARTIFACT_URL > gsutil.bin.log 2>&1 +maxretries=3 +cnt=0 +rc=1 +while [ $cnt -lt $maxretries ] && [ $rc -ne 0 ] +do + cnt=$[cnt + 1] + $DOWNLOAD_CMD http://$OPNFV_ARTIFACT_URL > gsutil.bin.log 2>&1 + rc=$? +done # list the file ls -al $WORKSPACE/opnfv.bin diff --git a/jjb/doctor/doctor.yml b/jjb/doctor/doctor.yml index e0de9aa2e..95cb4765a 100644 --- a/jjb/doctor/doctor.yml +++ b/jjb/doctor/doctor.yml @@ -38,10 +38,6 @@ task: - verify: auto-trigger-name: 'doctor-verify' - is-python: false - - python-verify: - auto-trigger-name: 'doctor-verify' - is-python: true exclude: - installer: 'apex' @@ -133,7 +129,6 @@ publishers: - 'doctor-verify-unit-test-publishers-macro' - - job-template: name: 'doctor-{task}-{inspector}-{stream}' @@ -172,7 +167,7 @@ - string: name: TESTCASE_OPTIONS # yamllint disable rule:line-length - default: '-e INSPECTOR_TYPE={inspector} -e PYTHON_ENABLE={is-python} -v $WORKSPACE:/home/opnfv/repos/doctor' + default: '-e INSPECTOR_TYPE={inspector} -v $WORKSPACE:/home/opnfv/repos/doctor' # yamllint enable rule:line-length description: 'Addtional parameters specific to test case(s)' # functest-parameter @@ -283,7 +278,8 @@ - builder: name: 'doctor-verify-unit-test-builders-macro' builders: - - shell: "[ -e tests/run.sh ] && bash -n ./tests/run.sh" + - shell: "tox -e pep8" + - builder: name: 'doctor-verify-installer-inspector-builders-macro' builders: @@ -320,10 +316,14 @@ - archive: artifacts: 'functest_results/$FUNCTEST_SUITE_NAME.log' - email-jenkins-admins-on-failure + - publisher: name: 'doctor-verify-unit-test-publishers-macro' publishers: - email-jenkins-admins-on-failure + - archive: + artifacts: '.tox/' + ##################################### # trigger macros diff --git a/jjb/dovetail/dovetail-project-jobs.yml b/jjb/dovetail/dovetail-project-jobs.yml index c38ec9637..1accffcdb 100644 --- a/jjb/dovetail/dovetail-project-jobs.yml +++ b/jjb/dovetail/dovetail-project-jobs.yml @@ -16,6 +16,10 @@ - master: branch: '{stream}' disabled: false + - danube: + branch: 'stable/{stream}' + gs-pathname: '/{stream}' + disabled: false ################################ # job templates diff --git a/jjb/dovetail/dovetail-run.sh b/jjb/dovetail/dovetail-run.sh index e084e4bd0..e50242bd6 100755 --- a/jjb/dovetail/dovetail-run.sh +++ b/jjb/dovetail/dovetail-run.sh @@ -13,6 +13,9 @@ set -e [[ $CI_DEBUG == true ]] && redirect="/dev/stdout" || redirect="/dev/null" +DEPLOY_TYPE=baremetal +[[ $BUILD_TAG =~ "virtual" ]] && DEPLOY_TYPE=virt + DOVETAIL_HOME=${WORKSPACE}/cvp [ -d ${DOVETAIL_HOME} ] && sudo rm -rf ${DOVETAIL_HOME} @@ -21,6 +24,8 @@ mkdir -p ${DOVETAIL_HOME} DOVETAIL_CONFIG=${DOVETAIL_HOME}/pre_config mkdir -p ${DOVETAIL_CONFIG} +ssh_options="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" + sshkey="" # The path of openrc.sh is defined in fetch_os_creds.sh OPENRC=${DOVETAIL_CONFIG}/env_config.sh @@ -73,13 +78,17 @@ if [[ -f $OPENRC ]]; then exit 1 fi fi - cat $OPENRC else echo "ERROR: cannot find file $OPENRC. Please check if it is existing." sudo ls -al ${DOVETAIL_CONFIG} exit 1 fi +if [[ ! "${SUT_BRANCH}" =~ "danube" && ${INSTALLER_TYPE} == "fuel" ]]; then + sed -i "s#/etc/ssl/certs/mcp_os_cacert#${CACERT}#g" ${OPENRC} +fi +cat $OPENRC + if [[ ! "${SUT_BRANCH}" =~ "danube" && ${INSTALLER_TYPE} == "compass" ]]; then cat << EOF >${DOVETAIL_CONFIG}/pod.yaml nodes: @@ -92,6 +101,19 @@ nodes: EOF fi +if [[ ! "${SUT_BRANCH}" =~ "danube" && ${INSTALLER_TYPE} == 'fuel' && ${DEPLOY_TYPE} == 'baremetal' ]]; then + fuel_ctl_ssh_options="${ssh_options} -i ${SSH_KEY}" + ssh_user="ubuntu" + fuel_ctl_ip=$(ssh 2>/dev/null ${fuel_ctl_ssh_options} "${ssh_user}@${INSTALLER_IP}" \ + "sudo salt --out yaml 'ctl*' pillar.get _param:openstack_control_address | \ + awk '{print \$2; exit}'") &> /dev/null + cat << EOF >${DOVETAIL_CONFIG}/pod.yaml +nodes: +- {ip: ${fuel_ctl_ip}, name: node1, key_filename: /root/.ssh/id_rsa, role: controller, user: ${ssh_user}} + +EOF +fi + if [[ ! -f ${DOVETAIL_CONFIG}/pod.yaml ]]; then set +e @@ -109,6 +131,8 @@ if [[ ! -f ${DOVETAIL_CONFIG}/pod.yaml ]]; then options="-u root -p r00tme" elif [[ ${INSTALLER_TYPE} == apex ]]; then options="-u stack -k /root/.ssh/id_rsa" + elif [[ ${INSTALLER_TYPE} == daisy ]]; then + options="-u root -p r00tme" else echo "Don't support to generate pod.yaml on ${INSTALLER_TYPE} currently." echo "HA test cases may not run properly." @@ -135,11 +159,13 @@ else echo "HA test cases may not run properly." fi -ssh_options="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" - if [ "$INSTALLER_TYPE" == "fuel" ]; then - echo "Fetching id_rsa file from jump_server $INSTALLER_IP..." - sshpass -p r00tme sudo scp $ssh_options root@${INSTALLER_IP}:~/.ssh/id_rsa ${DOVETAIL_CONFIG}/id_rsa + if [[ "${SUT_BRANCH}" =~ "danube" ]]; then + echo "Fetching id_rsa file from jump_server $INSTALLER_IP..." + sshpass -p r00tme sudo scp $ssh_options root@${INSTALLER_IP}:~/.ssh/id_rsa ${DOVETAIL_CONFIG}/id_rsa + else + cp ${SSH_KEY} ${DOVETAIL_CONFIG}/id_rsa + fi fi if [ "$INSTALLER_TYPE" == "apex" ]; then @@ -147,6 +173,12 @@ if [ "$INSTALLER_TYPE" == "apex" ]; then sudo scp $ssh_options stack@${INSTALLER_IP}:~/.ssh/id_rsa ${DOVETAIL_CONFIG}/id_rsa fi +if [ "$INSTALLER_TYPE" == "daisy" ]; then + echo "Fetching id_dsa file from jump_server $INSTALLER_IP..." + sshpass -p r00tme sudo scp $ssh_options root@${INSTALLER_IP}:~/.ssh/id_dsa ${DOVETAIL_CONFIG}/id_rsa +fi + + image_path=${HOME}/opnfv/dovetail/images if [[ ! -d ${image_path} ]]; then mkdir -p ${image_path} @@ -174,20 +206,26 @@ docker_volume="-v /var/run/docker.sock:/var/run/docker.sock" dovetail_home_volume="-v ${DOVETAIL_HOME}:${DOVETAIL_HOME}" # Pull the image with correct tag -echo "Dovetail: Pulling image opnfv/dovetail:${DOCKER_TAG}" -docker pull opnfv/dovetail:$DOCKER_TAG >$redirect +DOCKER_REPO='opnfv/dovetail' +if [ "$(uname -m)" = 'aarch64' ]; then + DOCKER_REPO="${DOCKER_REPO}_$(uname -m)" + DOCKER_TAG="latest" +fi + +echo "Dovetail: Pulling image ${DOCKER_REPO}:${DOCKER_TAG}" +docker pull ${DOCKER_REPO}:$DOCKER_TAG >$redirect env4bgpvpn="-e INSTALLER_TYPE=${INSTALLER_TYPE} -e INSTALLER_IP=${INSTALLER_IP}" cmd="docker run ${opts} -e DOVETAIL_HOME=${DOVETAIL_HOME} ${docker_volume} ${dovetail_home_volume} \ - ${sshkey} ${env4bgpvpn} opnfv/dovetail:${DOCKER_TAG} /bin/bash" + ${sshkey} ${env4bgpvpn} ${DOCKER_REPO}:${DOCKER_TAG} /bin/bash" echo "Dovetail: running docker run command: ${cmd}" ${cmd} >${redirect} sleep 5 -container_id=$(docker ps | grep "opnfv/dovetail:${DOCKER_TAG}" | awk '{print $1}' | head -1) +container_id=$(docker ps | grep "${DOCKER_REPO}:${DOCKER_TAG}" | awk '{print $1}' | head -1) echo "Container ID=${container_id}" if [ -z ${container_id} ]; then - echo "Cannot find opnfv/dovetail container ID ${container_id}. Please check if it is existing." + echo "Cannot find ${DOCKER_REPO} container ID ${container_id}. Please check if it is existing." docker ps -a exit 1 fi @@ -195,11 +233,25 @@ echo "Container Start: docker start ${container_id}" docker start ${container_id} sleep 5 docker ps >${redirect} -if [ $(docker ps | grep "opnfv/dovetail:${DOCKER_TAG}" | wc -l) == 0 ]; then - echo "The container opnfv/dovetail with ID=${container_id} has not been properly started. Exiting..." +if [ $(docker ps | grep "${DOCKER_REPO}:${DOCKER_TAG}" | wc -l) == 0 ]; then + echo "The container ${DOCKER_REPO} with ID=${container_id} has not been properly started. Exiting..." exit 1 fi +if [[ ! "${SUT_BRANCH}" =~ "danube" && ${INSTALLER_TYPE} == 'fuel' && ${DEPLOY_TYPE} == 'baremetal' ]]; then + source_cmd="source ${OPENRC}" + get_public_url_cmd="openstack --insecure endpoint list --service keystone --interface public | sed -n 4p | awk '{print \$14}'" + public_url=$(sudo docker exec "$container_id" /bin/bash -c "${source_cmd} && ${get_public_url_cmd}") + sed -i 's#OS_AUTH_URL=.*#OS_AUTH_URL='"${public_url}"'#g' ${OPENRC} + sed -i 's/internal/public/g' ${OPENRC} + if [[ ${public_url} =~ 'v2' ]]; then + sed -i "s/OS_IDENTITY_API_VERSION=3/OS_IDENTITY_API_VERSION=2.0/g" ${OPENRC} + sed -i '/OS_PROJECT_DOMAIN_NAME/d' ${OPENRC} + sed -i '/OS_USER_DOMAIN_NAME/d' ${OPENRC} + fi + cat ${OPENRC} +fi + # Modify tempest_conf.yaml file tempest_conf_file=${DOVETAIL_CONFIG}/tempest_conf.yaml if [[ ${INSTALLER_TYPE} == 'compass' || ${INSTALLER_TYPE} == 'apex' ]]; then diff --git a/jjb/dpacc/dpacc.yml b/jjb/dpacc/dpacc.yml index 3501d276d..a9a091413 100644 --- a/jjb/dpacc/dpacc.yml +++ b/jjb/dpacc/dpacc.yml @@ -1,64 +1,8 @@ --- -################################################### -# All the jobs except verify have been removed! -# They will only be enabled on request by projects! -################################################### - project: name: dpacc project: '{name}' jobs: - - 'dpacc-verify-{stream}' - - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: false - - euphrates: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' - disabled: false - -- job-template: - name: 'dpacc-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-ubuntu-defaults' - - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**|.gitignore' - - builders: - - shell: | - echo "Nothing to verify!" + - '{project}-verify-basic' diff --git a/jjb/fuel/fuel-daily-jobs.yml b/jjb/fuel/fuel-daily-jobs.yml index 5dc8a72c3..902e75499 100644 --- a/jjb/fuel/fuel-daily-jobs.yml +++ b/jjb/fuel/fuel-daily-jobs.yml @@ -50,18 +50,9 @@ - zte-pod1: slave-label: zte-pod1 <<: *master - - zte-pod3: - slave-label: zte-pod3 - <<: *master - zte-pod1: slave-label: zte-pod1 <<: *euphrates - - zte-pod3: - slave-label: zte-pod3 - <<: *euphrates - - zte-pod1: - slave-label: zte-pod1 - <<: *danube # ------------------------------- # scenarios # ------------------------------- @@ -94,6 +85,8 @@ auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - 'os-onos-nofeature-noha': auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' + - 'os-ovn-nofeature-noha': + auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - 'os-nosdn-kvm-noha': auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - 'os-nosdn-ovs-noha': @@ -207,34 +200,21 @@ build-step-failure-threshold: 'never' failure-threshold: 'never' unstable-threshold: 'FAILURE' - # 1.dovetail only has master, based on D release - # 2.here the stream means the SUT stream, dovetail stream is defined in its own job - # 3.only debug testsuite here(refstack, ha, ipv6, bgpvpn) - # 4.not used for release criteria or compliance, - # only to debug the dovetail tool bugs with bgpvpn and nosdn-nofeature - # 5.only run against scenario os-odl-bgpvpn-ha(regex used here, can extend to more scenarios future) - # 6.ZTE pod1, os-nosdn-nofeature-ha and os-odl-bgpvpn-ha, run against danube - - conditional-step: - condition-kind: and - condition-operands: - - condition-kind: regex-match - regex: os-(nosdn-nofeature|odl_l2-bgpvpn)-ha - label: '{scenario}' - - condition-kind: regex-match - regex: 'danube' - label: '{stream}' - steps: - - trigger-builds: - - project: 'dovetail-fuel-{pod}-proposed_tests-master' - current-parameters: false - predefined-parameters: - DEPLOY_SCENARIO={scenario} - block: true - same-node: true - block-thresholds: - build-step-failure-threshold: 'never' - failure-threshold: 'never' - unstable-threshold: 'FAILURE' + # 1.here the stream means the SUT stream, dovetail stream is defined in its own job + # 2.only debug testsuite here(refstack, ha, vping, ipv6, tempest, bgpvpn) + # 3.not used for release criteria or compliance, only to debug the dovetail tool bugs + # 4.ZTE pod1, os-nosdn-nofeature-ha and os-odl-bgpvpn-ha, run against danube + - trigger-builds: + - project: 'dovetail-fuel-{pod}-proposed_tests-{stream}' + current-parameters: false + predefined-parameters: + DEPLOY_SCENARIO={scenario} + block: true + same-node: true + block-thresholds: + build-step-failure-threshold: 'never' + failure-threshold: 'never' + unstable-threshold: 'FAILURE' - conditional-step: condition-kind: not condition-operand: @@ -409,6 +389,10 @@ triggers: - timed: '' - trigger: + name: 'fuel-os-ovn-nofeature-noha-baremetal-daily-master-trigger' + triggers: + - timed: '' +- trigger: name: 'fuel-os-nosdn-kvm-noha-baremetal-daily-master-trigger' triggers: - timed: '' @@ -478,6 +462,10 @@ triggers: - timed: '' - trigger: + name: 'fuel-os-ovn-nofeature-noha-baremetal-daily-euphrates-trigger' + triggers: + - timed: '' +- trigger: name: 'fuel-os-nosdn-kvm-noha-baremetal-daily-euphrates-trigger' triggers: - timed: '' @@ -546,6 +534,10 @@ triggers: - timed: '' # '5 23 * * *' - trigger: + name: 'fuel-os-ovn-nofeature-noha-virtual-daily-master-trigger' + triggers: + - timed: '5 23 * * *' +- trigger: name: 'fuel-os-nosdn-kvm-noha-virtual-daily-master-trigger' triggers: - timed: '' # '35 6 * * *' @@ -614,6 +606,10 @@ triggers: - timed: '' # '0 23 * * *' - trigger: + name: 'fuel-os-ovn-nofeature-noha-virtual-daily-euphrates-trigger' + triggers: + - timed: '' +- trigger: name: 'fuel-os-nosdn-kvm-noha-virtual-daily-euphrates-trigger' triggers: - timed: '' # '30 6 * * *' @@ -635,7 +631,7 @@ - trigger: name: 'fuel-os-nosdn-nofeature-ha-zte-pod1-daily-master-trigger' triggers: - - timed: '0 10 * * *' + - timed: '0 22 * * *' - trigger: name: 'fuel-os-odl-nofeature-ha-zte-pod1-daily-master-trigger' triggers: @@ -682,6 +678,10 @@ triggers: - timed: '' - trigger: + name: 'fuel-os-ovn-nofeature-noha-zte-pod1-daily-master-trigger' + triggers: + - timed: '' +- trigger: name: 'fuel-os-nosdn-kvm-noha-zte-pod1-daily-master-trigger' triggers: - timed: '' @@ -698,80 +698,12 @@ triggers: - timed: '' # ---------------------------------------------- -# ZTE POD3 Triggers running against master branch -# ---------------------------------------------- -- trigger: - name: 'fuel-os-nosdn-nofeature-ha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' # '0 10 * * *' -- trigger: - name: 'fuel-os-odl-nofeature-ha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-onos-sfc-ha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-onos-nofeature-ha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm-ha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-ovs-ha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk-ha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-ha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -# NOHA Scenarios -- trigger: - name: 'fuel-os-nosdn-nofeature-noha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-odl-nofeature-noha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-onos-sfc-noha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-onos-nofeature-noha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm-noha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-ovs-noha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk-noha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-noha-zte-pod3-daily-master-trigger' - triggers: - - timed: '' -# ---------------------------------------------- # ZTE POD1 Triggers running against euphrates branch # ---------------------------------------------- - trigger: name: 'fuel-os-nosdn-nofeature-ha-zte-pod1-daily-euphrates-trigger' triggers: - - timed: '' + - timed: '0 10 * * *' - trigger: name: 'fuel-os-odl-nofeature-ha-zte-pod1-daily-euphrates-trigger' triggers: @@ -818,6 +750,10 @@ triggers: - timed: '' - trigger: + name: 'fuel-os-ovn-nofeature-noha-zte-pod1-daily-euphrates-trigger' + triggers: + - timed: '' +- trigger: name: 'fuel-os-nosdn-kvm-noha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' @@ -833,143 +769,3 @@ name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-noha-zte-pod1-daily-euphrates-trigger' triggers: - timed: '' -# ---------------------------------------------- -# ZTE POD3 Triggers running against euphrates branch -# ---------------------------------------------- -- trigger: - name: 'fuel-os-nosdn-nofeature-ha-zte-pod3-daily-euphrates-trigger' - triggers: - - timed: '' # '0 18 * * *' -- trigger: - name: 'fuel-os-odl-nofeature-ha-zte-pod3-daily-euphrates-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-onos-sfc-ha-zte-pod3-daily-euphrates-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-onos-nofeature-ha-zte-pod3-daily-euphrates-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm-ha-zte-pod3-daily-euphrates-trigger' - triggers: - - timed: '' # '0 2 * * *' -- 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-euphrates-trigger' - triggers: - - timed: '' -- 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-euphrates-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-odl-nofeature-noha-zte-pod3-daily-euphrates-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-onos-sfc-noha-zte-pod3-daily-euphrates-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-onos-nofeature-noha-zte-pod3-daily-euphrates-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm-noha-zte-pod3-daily-euphrates-trigger' - triggers: - - timed: '' -- 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-euphrates-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-noha-zte-pod3-daily-euphrates-trigger' - triggers: - - timed: '' -# ----------------------------------------------- -# ZTE POD1 Triggers running against danube branch -# ----------------------------------------------- -- trigger: - name: 'fuel-os-nosdn-nofeature-ha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-odl_l2-bgpvpn-ha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-odl-nofeature-ha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-onos-sfc-ha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-onos-nofeature-ha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm-ha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-ovs-ha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk-ha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-ha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -# NOHA Scenarios -- trigger: - name: 'fuel-os-nosdn-nofeature-noha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-odl-nofeature-noha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-onos-sfc-noha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-onos-nofeature-noha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm-noha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-ovs-noha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk-noha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' -- trigger: - name: 'fuel-os-nosdn-kvm_ovs_dpdk_bar-noha-zte-pod1-daily-danube-trigger' - triggers: - - timed: '' diff --git a/jjb/functest/functest-daily-jobs.yml b/jjb/functest/functest-daily-jobs.yml index 2d5d397ae..79e5c1503 100644 --- a/jjb/functest/functest-daily-jobs.yml +++ b/jjb/functest/functest-daily-jobs.yml @@ -192,9 +192,9 @@ - 'suite': job-timeout: 60 - 'daily': - job-timeout: 240 + job-timeout: 300 - 'arm-daily': - job-timeout: 240 + job-timeout: 300 jobs: - 'functest-{installer}-{pod}-{testsuite}-{stream}' diff --git a/jjb/global/basic-jobs.yml b/jjb/global/basic-jobs.yml new file mode 100644 index 000000000..e55f068ca --- /dev/null +++ b/jjb/global/basic-jobs.yml @@ -0,0 +1,46 @@ +--- +## +# Basic Job Config +# +# This is used for project which don't have any jobs of substance +# defined yet, but still need 'Verified+1'. +## +- job-group: + name: '{project}-verify-basic' + + stream: + - master: + branch: '{stream}' + gs-pathname: '' + disabled: false + - euphrates: + branch: 'stable/{stream}' + gs-pathname: '/{stream}' + disabled: false + + jobs: + - '{project}-verify-{stream}' + +- job-template: + name: '{project}-verify-{stream}' + + disabled: '{obj:disabled}' + + parameters: + - project-parameter: + project: '{project}' + branch: '{branch}' + - 'opnfv-build-defaults' + + scm: + - git-scm-gerrit + + triggers: + - gerrit-trigger-patchset-created: + project: '{project}' + branch: '{branch}' + files: 'docs/**|.gitignore' + + builders: + - shell: | + echo "Nothing to verify!" diff --git a/jjb/global/installer-report.sh b/jjb/global/installer-report.sh new file mode 100755 index 000000000..e2fcfd6f6 --- /dev/null +++ b/jjb/global/installer-report.sh @@ -0,0 +1,25 @@ +#!/bin/bash +############################################################################## +# Copyright (c) 2017 ZTE Corporation 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 +############################################################################## + +source $WORKSPACE/installer_track.sh +echo """ + INSTALLER: $INSTALLER + INSTALLER_VERSION: $INSTALLER_VERSION + JOB_NAME: $JOB_NAME + BUILD_ID: $BUILD_ID + SENARIO: $DEPLOY_SCENARIO + UPSTREAM_JOB_NAME: $UPSTREAM_JOB_NAME: + UPSTREAM_BUILD_ID: $UPSTREAM_BUILD_ID + PROVISION_RESULT: $PROVISION_RESULT + TIMESTAMP_START: $TIMESTAMP_START + TIMESTAMP_END: `date '+%Y-%m-%d %H:%M:%S.%3N'` + POD_NAME: $NODE_NAME +""" + +# TODO call TestAPI to report installer provisoin result when API is ready diff --git a/jjb/global/releng-macros.yml b/jjb/global/releng-macros.yml index c8fcca670..330584e25 100644 --- a/jjb/global/releng-macros.yml +++ b/jjb/global/releng-macros.yml @@ -76,6 +76,16 @@ submodule: recursive: true timeout: 20 + +- scm: + name: git-scm-openstack + scm: + - git: &git-scm-openstack-defaults + url: '$GIT_BASE' + branches: + - 'origin/$BRANCH' + timeout: 15 + - trigger: name: 'daily-trigger-disabled' triggers: @@ -421,6 +431,12 @@ - shell: | find $WORKSPACE -type f -name '*.log' | xargs rm -f +- builder: + name: track-begin-timestamp + builders: + - shell: | + echo "export TIMESTAMP_START="\'`date '+%Y-%m-%d %H:%M:%S.%3N'`\' > $WORKSPACE/installer_track.sh + - publisher: name: archive-artifacts publishers: @@ -869,7 +885,12 @@ <<: *email_releng_ptl_defaults - publisher: name: 'email-releng-testresults-ptl' - <<: *email_releng_ptl_defaults + publishers: + - email-ext: + <<: *email_ptl_defaults + recipients: > + fatih.degirmenci@ericsson.com + feng.xiaowei@zte.com.cn - publisher: name: 'email-releng-utils-ptl' <<: *email_releng_ptl_defaults @@ -956,3 +977,23 @@ <<: *email_ptl_defaults recipients: > ross.b.brattain@intel.com + +- publisher: + name: 'report-provision-result' + publishers: + - postbuildscript: + script-only-if-succeeded: true + builders: + - shell: | + echo "export PROVISION_RESULT=SUCCEED" >> $WORKSPACE/installer_track.sh + echo "export INSTALLER={installer}" >> $WORKSPACE/installer_track.sh + - shell: + !include-raw-escape: installer-report.sh + - postbuildscript: + script-only-if-failed: true + builders: + - shell: | + echo "export PROVISION_RESULT=FAIL" >> $WORKSPACE/installer_track.sh + echo "export INSTALLER={installer}" >> $WORKSPACE/installer_track.sh + - shell: + !include-raw-escape: installer-report.sh diff --git a/jjb/global/slave-params.yml b/jjb/global/slave-params.yml index c645de60e..5136e7148 100644 --- a/jjb/global/slave-params.yml +++ b/jjb/global/slave-params.yml @@ -441,6 +441,22 @@ description: "Directory where the build artifact will be located upon the completion of the build." - parameter: + name: 'pharos-dashboard-defaults' + parameters: + - label: + name: SLAVE_LABEL + default: 'pharos-dashboard' + description: 'Slave label on Jenkins' + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: 'Git URL to use on this Jenkins Slave' + - string: + name: BUILD_DIRECTORY + default: $WORKSPACE/build_output + description: "Directory where the build artifact will be located upon the completion of the build." + +- parameter: name: 'opnfv-build-defaults' parameters: - label: @@ -647,6 +663,20 @@ default: https://gerrit.opnfv.org/gerrit/$PROJECT - parameter: + name: 'intel-pod17-defaults' + parameters: + - node: + name: SLAVE_NAME + description: 'Slave name on Jenkins' + allowed-slaves: + - intel-pod17 + default-slaves: + - intel-pod17 + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + +- parameter: name: 'huawei-virtual5-defaults' parameters: - label: @@ -754,6 +784,29 @@ description: 'pxe bridge for booting of Daisy master' - parameter: + name: 'zte-pod9-defaults' + parameters: + - node: + name: SLAVE_NAME + description: 'Slave name on Jenkins' + allowed-slaves: + - zte-pod9 + default-slaves: + - zte-pod9 + - string: + name: GIT_BASE + default: https://gerrit.opnfv.org/gerrit/$PROJECT + description: 'Git URL to use on this Jenkins Slave' + - string: + name: INSTALLER_IP + default: '10.20.7.2' + description: 'IP of the installer' + - string: + name: BRIDGE + default: 'br0' + description: 'pxe bridge for booting of Daisy master' + +- parameter: name: zte-virtual5-defaults parameters: - node: diff --git a/jjb/ipv6/ipv6.yml b/jjb/ipv6/ipv6.yml index f51c4970b..2946ec77b 100644 --- a/jjb/ipv6/ipv6.yml +++ b/jjb/ipv6/ipv6.yml @@ -1,64 +1,8 @@ --- -################################################### -# All the jobs except verify have been removed! -# They will only be enabled on request by projects! -################################################### - project: name: ipv6 project: '{name}' jobs: - - 'ipv6-verify-{stream}' - - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: false - - euphrates: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' - disabled: false - -- job-template: - name: 'ipv6-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-ubuntu-defaults' - - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**|.gitignore' - - builders: - - shell: | - echo "Nothing to verify!" + - '{project}-verify-basic' diff --git a/jjb/joid/joid-daily-jobs.yml b/jjb/joid/joid-daily-jobs.yml index 92f7a3414..947b2f1ab 100644 --- a/jjb/joid/joid-daily-jobs.yml +++ b/jjb/joid/joid-daily-jobs.yml @@ -316,12 +316,12 @@ - trigger: name: 'joid-os-nosdn-openbaton-ha-baremetal-euphrates-trigger' triggers: - - timed: '5 25 * * *' + - timed: '5 23 * * *' # os-nosdn-openbaton-ha trigger - branch: master - trigger: name: 'joid-os-nosdn-openbaton-ha-baremetal-master-trigger' triggers: - - timed: '5 25 * * *' + - timed: '5 23 * * *' # os-ocl-nofeature-ha trigger - branch: euphrates - trigger: name: 'joid-os-ocl-nofeature-ha-baremetal-euphrates-trigger' diff --git a/jjb/models/models.yml b/jjb/models/models.yml index b317c05f2..40fcf68de 100644 --- a/jjb/models/models.yml +++ b/jjb/models/models.yml @@ -1,69 +1,8 @@ --- -################################################### -# All the jobs except verify have been removed! -# They will only be enabled on request by projects! -################################################### - project: name: models project: '{name}' jobs: - - 'models-verify-{stream}' - - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: false - - euphrates: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' - disabled: false - -- job-template: - name: 'models-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-ubuntu-defaults' - - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**|.gitignore' - - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # shellcheck -f tty tests/*.sh + - '{project}-verify-basic' diff --git a/jjb/netready/netready.yml b/jjb/netready/netready.yml index b72eeaa46..798029373 100644 --- a/jjb/netready/netready.yml +++ b/jjb/netready/netready.yml @@ -5,7 +5,7 @@ project: '{name}' jobs: - - 'netready-verify-{stream}' + - '{project}-verify-{stream}' - 'netready-build-gluon-packages-daily-{stream}' stream: @@ -15,47 +15,6 @@ disabled: false - job-template: - name: 'netready-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**' - - builders: - - shell: | - echo "Nothing to verify!" - - -- job-template: name: 'netready-build-gluon-packages-daily-{stream}' disabled: true diff --git a/jjb/octopus/octopus.yml b/jjb/octopus/octopus.yml index fb6263d81..a04d7f10d 100644 --- a/jjb/octopus/octopus.yml +++ b/jjb/octopus/octopus.yml @@ -8,56 +8,4 @@ project: '{name}' jobs: - - 'octopus-verify-{stream}' - - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: false - - euphrates: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' - disabled: false - -- job-template: - name: 'octopus-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-ubuntu-defaults' - - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**|.gitignore' - - builders: - - shell: | - echo "Nothing to verify!" + - '{project}-verify-basic' diff --git a/jjb/pharos/check-jinja2.yml b/jjb/pharos/check-jinja2.yml index cfc123e4c..8ee2a2aa1 100644 --- a/jjb/pharos/check-jinja2.yml +++ b/jjb/pharos/check-jinja2.yml @@ -68,6 +68,8 @@ - compare-type: ANT pattern: '**/*.yaml' - compare-type: ANT + pattern: 'config/installers/**/*.j2' + - compare-type: ANT pattern: 'check-jinja2.sh' skip-vote: successful: true diff --git a/jjb/pharos/pharos.yml b/jjb/pharos/pharos.yml index 7af4f0fa6..c721c8d87 100644 --- a/jjb/pharos/pharos.yml +++ b/jjb/pharos/pharos.yml @@ -1,8 +1,4 @@ --- -################################################### -# All the jobs except verify have been removed! -# They will only be enabled on request by projects! -################################################### - project: name: pharos @@ -11,56 +7,32 @@ - '{name}-tools' jobs: - - '{project}-verify-{stream}' - - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: false - - euphrates: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' - disabled: false + - '{project}-verify-basic' + - 'backup-pharos-dashboard' - job-template: - name: '{project}-verify-{stream}' + name: 'backup-pharos-dashboard' disabled: '{obj:disabled}' parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-ubuntu-defaults' - - scm: - - git-scm-gerrit + - 'pharos-dashboard-defaults' triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**|.gitignore' + - timed: '@daily' builders: - shell: | - echo "Nothing to verify!" + BACKUP_DIR=$HOME/backups/ + TMP_DIR=$HOME/tmp/ + mkdir -p $BACKUP_DIR + echo "-- $(date +%Y%m%d) --" + echo "Backing up Pharos Dashboard data..." + sudo docker run -it --rm \ + -v pharos-data:/pharos-data:ro \ + -v $TMP_DIR:/backup \ + alpine \ + tar -czf /backup/pharos-dashboard-db-$(date +%Y%m%d).tar.gz -C /pharos-data ./ + sudo mv $TMP_DIR/pharos-dashboard-db-$(date +%Y%m%d).tar.gz $BACKUP_DIR + sudo chown $USER:$USER $BACKUP_DIR/pharos-dashboard-db-$(date +%Y%m%d).tar.gz + echo "...complete" diff --git a/jjb/prediction/prediction.yml b/jjb/prediction/prediction.yml index 5e6e834e8..b686d9524 100644 --- a/jjb/prediction/prediction.yml +++ b/jjb/prediction/prediction.yml @@ -1,64 +1,8 @@ --- -################################################### -# All the jobs except verify have been removed! -# They will only be enabled on request by projects! -################################################### - project: name: prediction project: '{name}' jobs: - - 'prediction-verify-{stream}' - - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: false - - euphrates: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' - disabled: false - -- job-template: - name: 'prediction-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-ubuntu-defaults' - - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**|.gitignore' - - builders: - - shell: | - echo "Nothing to verify!" + - '{project}-verify-basic' diff --git a/jjb/promise/promise.yml b/jjb/promise/promise.yml index 3f1d9e23b..6e6fb54a8 100644 --- a/jjb/promise/promise.yml +++ b/jjb/promise/promise.yml @@ -1,64 +1,8 @@ --- -################################################### -# All the jobs except verify have been removed! -# They will only be enabled on request by projects! -################################################### - project: name: promise project: '{name}' jobs: - - 'promise-verify-{stream}' - - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: false - - euphrates: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' - disabled: false - -- job-template: - name: 'promise-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-ubuntu-defaults' - - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**|.gitignore' - - builders: - - shell: | - echo "Nothing to verify!" + - '{project}-verify-basic' diff --git a/jjb/qtip/qtip-experimental-jobs.yml b/jjb/qtip/qtip-experimental-jobs.yml index db2fb8b07..103069fb7 100644 --- a/jjb/qtip/qtip-experimental-jobs.yml +++ b/jjb/qtip/qtip-experimental-jobs.yml @@ -7,7 +7,7 @@ name: qtip-experimental-jobs project: qtip jobs: - - 'qtip-experimental-{stream}' + - 'qtip-experimental-{pod}-{stream}' stream: - master: branch: '{stream}' @@ -18,12 +18,17 @@ gs-pathname: '/{stream}' disabled: false + pod: + - zte-virtual6: + installer: fuel + pod: zte-virtual6 + ################################ ## job templates ################################# - job-template: - name: 'qtip-experimental-{stream}' + name: 'qtip-experimental-{pod}-{stream}' disabled: '{obj:disabled}' @@ -31,9 +36,8 @@ - project-parameter: project: '{project}' branch: '{branch}' - # Pin the tests on zte-pod6 with MCP deployment - - fuel-defaults - - zte-virtual6-defaults + - '{installer}-defaults' + - '{pod}-defaults' scm: - git-scm-gerrit diff --git a/jjb/qtip/qtip-verify-jobs.yml b/jjb/qtip/qtip-verify-jobs.yml index 047d7f2be..783c92b04 100644 --- a/jjb/qtip/qtip-verify-jobs.yml +++ b/jjb/qtip/qtip-verify-jobs.yml @@ -8,8 +8,6 @@ project: qtip jobs: - 'qtip-verify-{stream}' - - 'qtip-verify-notebook-{stream}' - - 'qtip-merged-notebook-{stream}' stream: - master: branch: '{stream}' @@ -67,7 +65,8 @@ - publish-coverage - email-jenkins-admins-on-failure -# upload juypter notebook to artifacts for review +# Upload juypter notebook to artifacts for review +# TODO(yujunz): deal with *.ipynb deletion - job-template: name: 'qtip-verify-notebook-{stream}' @@ -191,7 +190,8 @@ mkdir -p $local_path - git diff HEAD~1 --name-only | grep -E ".+\.ipynb$" | xargs -I '{}' cp '{}' $local_path + git diff HEAD~1 --name-status | grep -E "[AM]\t.+\.ipynb$" | awk '{print $2}' \ + | xargs -I '{}' cp '{}' $local_path gsutil -m cp -r "$local_path" "gs://$gs_base/" echo "Document link(s):" >> gerrit_comment.txt diff --git a/jjb/releng/compass4nfv-docker.yml b/jjb/releng/compass4nfv-docker.yml index 3b3bb29f1..7f142241c 100644 --- a/jjb/releng/compass4nfv-docker.yml +++ b/jjb/releng/compass4nfv-docker.yml @@ -26,8 +26,7 @@ - 'cobbler' - 'db' - 'deck' - - 'tasks-k8s' - - 'tasks-osa' + - 'tasks-base' # settings for jobs run in multijob phases build-job-settings: &build-job-settings @@ -78,10 +77,10 @@ builders: - multijob: - name: 'build compass-tasks images' + name: 'build compass-tasks-base images' execution-type: PARALLEL projects: - - name: 'compass-tasks-build-amd64-{stream}' + - name: 'compass-tasks-base-build-amd64-{stream}' <<: *build-job-settings - multijob: name: 'build all compass images' @@ -94,9 +93,7 @@ <<: *build-job-settings - name: 'compass-deck-build-amd64-{stream}' <<: *build-job-settings - - name: 'compass-tasks-k8s-build-amd64-{stream}' - <<: *build-job-settings - - name: 'compass-tasks-osa-build-amd64-{stream}' + - name: 'compass-tasks-build-amd64-{stream}' <<: *build-job-settings publishers: diff --git a/jjb/releng/functest-docker.yml b/jjb/releng/functest-docker.yml index cc5f216d9..584dc302c 100644 --- a/jjb/releng/functest-docker.yml +++ b/jjb/releng/functest-docker.yml @@ -58,8 +58,8 @@ # yamllint enable rule:key-duplicates jobs: - "functest-docker-{stream}" - - "functest-{image}-build-{arch_tag}-{stream}" - - "functest-{image}-manifest-{stream}" + - "functest-{image}-docker-build-{arch_tag}-{stream}" + - "functest-{image}-docker-manifest-{stream}" ######################## # job templates @@ -97,63 +97,67 @@ name: 'build functest-core images' execution-type: PARALLEL projects: - - name: 'functest-core-build-amd64-{stream}' + - name: 'functest-core-docker-build-amd64-{stream}' <<: *build-job-settings - - name: 'functest-core-build-arm64-{stream}' + - name: 'functest-core-docker-build-arm64-{stream}' <<: *build-job-settings - multijob: name: 'publish functest-core manifests' execution-type: PARALLEL projects: - - name: 'functest-core-manifest-{stream}' + - name: 'functest-core-docker-manifest-{stream}' <<: *manifest-job-settings - multijob: name: 'build all functest images' condition: SUCCESSFUL execution-type: PARALLEL projects: - - name: 'functest-healthcheck-build-amd64-{stream}' + - name: 'functest-healthcheck-docker-build-amd64-{stream}' <<: *build-job-settings - - name: 'functest-healthcheck-build-arm64-{stream}' + - name: 'functest-healthcheck-docker-build-arm64-{stream}' <<: *build-job-settings - - name: 'functest-features-build-amd64-{stream}' + - name: 'functest-features-docker-build-amd64-{stream}' <<: *build-job-settings - - name: 'functest-features-build-arm64-{stream}' + - name: 'functest-features-docker-build-arm64-{stream}' <<: *build-job-settings - - name: 'functest-components-build-amd64-{stream}' + - name: 'functest-components-docker-build-amd64-{stream}' <<: *build-job-settings - - name: 'functest-components-build-arm64-{stream}' + - name: 'functest-components-docker-build-arm64-{stream}' <<: *build-job-settings - - name: 'functest-parser-build-amd64-{stream}' + - name: 'functest-parser-docker-build-amd64-{stream}' <<: *build-job-settings - - name: 'functest-parser-build-arm64-{stream}' + - name: 'functest-parser-docker-build-arm64-{stream}' <<: *build-job-settings - - name: 'functest-smoke-build-amd64-{stream}' + - name: 'functest-smoke-docker-build-amd64-{stream}' <<: *build-job-settings - - name: 'functest-smoke-build-arm64-{stream}' + - name: 'functest-smoke-docker-build-arm64-{stream}' <<: *build-job-settings - - name: 'functest-vnf-build-amd64-{stream}' + - name: 'functest-vnf-docker-build-amd64-{stream}' <<: *build-job-settings - - name: 'functest-restapi-build-amd64-{stream}' + - name: 'functest-vnf-docker-build-arm64-{stream}' + <<: *build-job-settings + - name: 'functest-restapi-docker-build-amd64-{stream}' + <<: *build-job-settings + - name: 'functest-restapi-docker-build-arm64-{stream}' <<: *build-job-settings - multijob: name: 'publish all manifests' condition: SUCCESSFUL execution-type: PARALLEL projects: - - name: 'functest-healthcheck-manifest-{stream}' + - name: 'functest-healthcheck-docker-manifest-{stream}' <<: *manifest-job-settings - - name: 'functest-features-manifest-{stream}' + - name: 'functest-features-docker-manifest-{stream}' <<: *manifest-job-settings - - name: 'functest-components-manifest-{stream}' + - name: 'functest-components-docker-manifest-{stream}' <<: *manifest-job-settings - - name: 'functest-parser-manifest-{stream}' + - name: 'functest-parser-docker-manifest-{stream}' <<: *manifest-job-settings - - name: 'functest-smoke-manifest-{stream}' + - name: 'functest-smoke-docker-manifest-{stream}' <<: *manifest-job-settings - - name: 'functest-vnf-manifest-{stream}' + - name: 'functest-vnf-docker-manifest-{stream}' <<: *manifest-job-settings - - name: 'functest-restapi-manifest-{stream}' + - name: 'functest-restapi-docker-manifest-{stream}' <<: *manifest-job-settings publishers: @@ -161,7 +165,7 @@ - 'functest-arm64-recipients' - job-template: - name: 'functest-{image}-build-{arch_tag}-{stream}' + name: 'functest-{image}-docker-build-{arch_tag}-{stream}' disabled: '{obj:disabled}' parameters: - job-parameters: @@ -183,7 +187,7 @@ exit $? - job-template: - name: 'functest-{image}-manifest-{stream}' + name: 'functest-{image}-docker-manifest-{stream}' parameters: - project-parameter: @@ -213,18 +217,10 @@ *) tag="{stream}" ;; esac - case "{image}" in - "vnf"|"restapi") - sudo manifest-tool push from-args \ - --platforms linux/amd64 \ - --template opnfv/functest-{image}:ARCH-$tag \ - --target opnfv/functest-{image}:$tag ;; - *) - sudo manifest-tool push from-args \ - --platforms linux/amd64,linux/arm64 \ - --template opnfv/functest-{image}:ARCH-$tag \ - --target opnfv/functest-{image}:$tag ;; - esac + sudo manifest-tool push from-args \ + --platforms linux/amd64,linux/arm64 \ + --template opnfv/functest-{image}:ARCH-$tag \ + --target opnfv/functest-{image}:$tag exit $? # parameter macro diff --git a/jjb/releng/opnfv-docker-arm.yml b/jjb/releng/opnfv-docker-arm.yml index eedb6127a..fbf565844 100644 --- a/jjb/releng/opnfv-docker-arm.yml +++ b/jjb/releng/opnfv-docker-arm.yml @@ -19,7 +19,6 @@ receivers: > cristina.pauna@enea.com alexandru.avadanii@enea.com - alexandru.nemes@enea.com storperf-arm-receivers: &storperf-arm-receivers receivers: > cristina.pauna@enea.com @@ -29,8 +28,6 @@ receivers: > cristina.pauna@enea.com alexandru.avadanii@enea.com - alexandru.nemes@enea.com - catalina.focsa@enea.com delia.popescu@enea.com other-receivers: &other-receivers receivers: '' diff --git a/jjb/releng/opnfv-docker.sh b/jjb/releng/opnfv-docker.sh index db2213cc4..69a9f89c7 100644 --- a/jjb/releng/opnfv-docker.sh +++ b/jjb/releng/opnfv-docker.sh @@ -61,7 +61,9 @@ done # Remove the existing containers and images before building remove_containers_images -cd "$WORKSPACE/$DOCKER_DIR" || exit 1 +DOCKER_PATH=$WORKSPACE/$DOCKER_DIR + +cd $DOCKER_PATH || exit 1 HOST_ARCH="$(uname -m)" #If there is a patch for other arch then x86, apply the patch and #replace Dockerfile file @@ -110,7 +112,8 @@ echo "Building docker image: $DOCKER_REPO_NAME:$DOCKER_TAG" echo "--------------------------------------------------------" echo cmd="docker build --no-cache -t $DOCKER_REPO_NAME:$DOCKER_TAG --build-arg BRANCH=$BUILD_BRANCH - -f $DOCKERFILE ." + $ARCH_BUILD_ARG + -f $DOCKERFILE $DOCKER_PATH" echo ${cmd} ${cmd} diff --git a/jjb/releng/opnfv-docker.yml b/jjb/releng/opnfv-docker.yml index 0951cf641..fd0b9bd1d 100644 --- a/jjb/releng/opnfv-docker.yml +++ b/jjb/releng/opnfv-docker.yml @@ -39,6 +39,36 @@ project: 'releng-anteater' <<: *master <<: *other-receivers + - 'barometer': + project: 'barometer' + dockerdir: '.' + dockerfile: 'docker/Dockerfile' + <<: *master + <<: *other-receivers + - 'barometer-grafana': + project: 'barometer' + dockerdir: '.' + dockerfile: 'docker/barometer-grafana/Dockerfile' + <<: *master + <<: *other-receivers + - 'barometer-influxdb': + project: 'barometer' + dockerdir: '.' + dockerfile: 'docker/barometer-influxdb/Dockerfile' + <<: *master + <<: *other-receivers + - 'barometer-kafka': + project: 'barometer' + dockerdir: '.' + dockerfile: 'docker/barometer-kafka/Dockerfile' + <<: *master + <<: *other-receivers + - 'barometer-ves': + project: 'barometer' + dockerdir: '.' + dockerfile: 'docker/barometer-ves/Dockerfile' + <<: *master + <<: *other-receivers - 'bottlenecks': project: 'bottlenecks' <<: *master @@ -57,6 +87,8 @@ <<: *other-receivers - 'qtip': project: 'qtip' + dockerdir: '.' + dockerfile: 'docker/Dockerfile.local' <<: *master <<: *other-receivers - 'storperf-master': @@ -93,20 +125,23 @@ project: 'yardstick' <<: *master <<: *other-receivers - # projects with jobs for Danube - - 'qtip': - project: 'qtip' - <<: *euphrates - <<: *other-receivers - - 'yardstick': - project: 'yardstick' - <<: *euphrates + - 'functest-kubernetes': + project: 'functest-kubernetes' + <<: *master <<: *other-receivers # projects with jobs for euphrates - 'bottlenecks': project: 'bottlenecks' <<: *euphrates <<: *other-receivers + - 'nfvbench': + project: 'nfvbench' + <<: *euphrates + <<: *other-receivers + - 'qtip': + project: 'qtip' + <<: *euphrates + <<: *other-receivers - 'storperf-master': project: 'storperf' dockerdir: 'docker/storperf-master' @@ -137,10 +172,15 @@ arch_tag: 'x86_64' <<: *euphrates <<: *storperf-receivers - - 'nfvbench': - project: 'nfvbench' + - 'yardstick': + project: 'yardstick' <<: *euphrates <<: *other-receivers + # projects with jobs for danube + - 'dovetail': + project: 'dovetail' + <<: *danube + <<: *other-receivers # yamllint enable rule:key-duplicates jobs: diff --git a/jjb/releng/opnfv-repo-archiver.sh b/jjb/releng/opnfv-repo-archiver.sh index 2408c2a83..6fa0aef50 100644 --- a/jjb/releng/opnfv-repo-archiver.sh +++ b/jjb/releng/opnfv-repo-archiver.sh @@ -61,6 +61,8 @@ echo "--------------------------------------" gsutil cp "$WORKSPACE/opnfv-archive-$DATE.tar.gz" \ "gs://opnfv-archive/opnfv-archive-$DATE.tar.gz" 2>&1 +echo "https://storage.googleapis.com/opnfv-archive/opnfv-archive-$DATE.tar.gz" > archive-link.txt + rm -f opnfv-archive-$DATE.tar.gz echo "Finished" diff --git a/jjb/releng/opnfv-utils.yml b/jjb/releng/opnfv-utils.yml index 80cd08f4e..6f77cd250 100644 --- a/jjb/releng/opnfv-utils.yml +++ b/jjb/releng/opnfv-utils.yml @@ -24,8 +24,8 @@ description: Slaves to prune docker images default-slaves: - arm-build2 + - ericsson-build3 - ericsson-build4 - - ericsson-build5 - lf-build2 allowed-multiselect: true ignore-offline-nodes: true @@ -65,6 +65,19 @@ - shell: !include-raw-escape: opnfv-repo-archiver.sh + publishers: + - email-ext: + content-type: 'text' + failure: false + always: true + body: + ${{FILE,path="archive-link.txt"}} + reply-to: > + helpdesk@opnfv.org + recipients: > + swinslow@linuxfoundation.org + + - job-template: name: 'check-status-of-slaves' diff --git a/jjb/releng/releng-ci-jobs.yml b/jjb/releng/releng-ci-jobs.yml index c4b7c8db3..ef99f5abb 100644 --- a/jjb/releng/releng-ci-jobs.yml +++ b/jjb/releng/releng-ci-jobs.yml @@ -90,6 +90,12 @@ project: '{project}' branch: 'master' + properties: + - throttle: + max-per-node: 1 + max-total: 1 + option: 'project' + scm: - git-scm diff --git a/jjb/snaps/snaps-verify-jobs.yml b/jjb/snaps/snaps-verify-jobs.yml index bc3f39315..a6c86c966 100644 --- a/jjb/snaps/snaps-verify-jobs.yml +++ b/jjb/snaps/snaps-verify-jobs.yml @@ -15,7 +15,7 @@ - master: branch: '{stream}' gs-pathname: '' - disabled: false + disabled: true - job-template: name: 'snaps-verify-{stream}' diff --git a/jjb/stor4nfv/stor4nfv-project.yml b/jjb/stor4nfv/stor4nfv-project.yml index fc479b1a1..6e796cfd4 100644 --- a/jjb/stor4nfv/stor4nfv-project.yml +++ b/jjb/stor4nfv/stor4nfv-project.yml @@ -1,64 +1,8 @@ --- -################################################### -# All the jobs except verify have been removed! -# They will only be enabled on request by projects! -################################################### - project: name: stor4nfv project: '{name}' jobs: - - 'stor4nfv-verify-{stream}' - - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: false - - euphrates: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' - disabled: false - -- job-template: - name: 'stor4nfv-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-ubuntu-defaults' - - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**|.gitignore' - - builders: - - shell: | - echo "Nothing to verify!" + - '{project}-verify-basic' diff --git a/jjb/ves/ves.yml b/jjb/ves/ves.yml index d2182cbc3..f8c5da2b4 100644 --- a/jjb/ves/ves.yml +++ b/jjb/ves/ves.yml @@ -1,70 +1,8 @@ --- -################################################### -# All the jobs except verify have been removed! -# They will only be enabled on request by projects! -################################################### - project: name: ves project: '{name}' jobs: - - 'ves-verify-{stream}' - - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: false - - euphrates: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' - disabled: false - -- job-template: - name: 'ves-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - - 'opnfv-build-ubuntu-defaults' - - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - forbidden-file-paths: - - compare-type: ANT - pattern: 'docs/**|.gitignore' - - builders: - - shell: | - #!/bin/bash - set -o errexit - set -o nounset - set -o pipefail - - # shellcheck -f tty tests/*.sh - # shellcheck -f tty utils/*.sh + - '{project}-verify-basic' diff --git a/jjb/vnf_forwarding_graph/vnf_forwarding_graph.yml b/jjb/vnf_forwarding_graph/vnf_forwarding_graph.yml index 7f21032e2..b11c20f62 100644 --- a/jjb/vnf_forwarding_graph/vnf_forwarding_graph.yml +++ b/jjb/vnf_forwarding_graph/vnf_forwarding_graph.yml @@ -5,50 +5,4 @@ project: '{name}' jobs: - - 'vnf_forwarding_graph-verify-{stream}' - - stream: - - master: - branch: '{stream}' - gs-pathname: '' - disabled: false - - euphrates: - branch: 'stable/{stream}' - gs-pathname: '/{stream}' - disabled: false - -- job-template: - name: 'vnf_forwarding_graph-verify-{stream}' - - disabled: '{obj:disabled}' - - parameters: - - project-parameter: - project: '{project}' - branch: '{branch}' - scm: - - git-scm-gerrit - - triggers: - - gerrit: - server-name: 'gerrit.opnfv.org' - trigger-on: - - patchset-created-event: - exclude-drafts: 'false' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'false' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - - comment-added-contains-event: - comment-contains-value: 'reverify' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - - builders: - - shell: | - echo "Nothing to verify!" + - '{project}-verify-basic' diff --git a/jjb/xci/bifrost-verify-jobs.yml b/jjb/xci/bifrost-verify-jobs.yml index f8d39b2fb..e4c2d0e5b 100644 --- a/jjb/xci/bifrost-verify-jobs.yml +++ b/jjb/xci/bifrost-verify-jobs.yml @@ -70,7 +70,9 @@ - build-blocker: use-build-blocker: true blocking-jobs: + - 'xci-verify-{distro}-.*' - '.*-bifrost-verify.*-{type}' + block-level: 'NODE' parameters: @@ -78,9 +80,6 @@ name: PROJECT_REPO default: 'https://git.openstack.org/openstack/bifrost' - string: - name: CLONE_LOCATION - default: '$WORKSPACE/bifrost' - - string: name: DISTRO default: '{distro}' - string: @@ -173,6 +172,7 @@ - comment-added-contains-event: comment-contains-value: 'recheck' silent-start: true + custom-url: '* $JOB_NAME $BUILD_URL' projects: - project-compare-type: 'PLAIN' project-pattern: 'openstack/bifrost' diff --git a/jjb/xci/bifrost-verify.sh b/jjb/xci/bifrost-verify.sh index a86ba91c3..198f2e1c7 100755 --- a/jjb/xci/bifrost-verify.sh +++ b/jjb/xci/bifrost-verify.sh @@ -11,15 +11,13 @@ set -o errexit set -o nounset set -o pipefail -git clone https://git.openstack.org/openstack/bifrost $WORKSPACE/bifrost git clone https://gerrit.opnfv.org/gerrit/releng-xci $WORKSPACE/releng-xci -# checkout the patch -cd $CLONE_LOCATION +cd $WORKSPACE git fetch $PROJECT_REPO $GERRIT_REFSPEC && sudo git checkout FETCH_HEAD # combine opnfv and upstream scripts/playbooks -/bin/cp -rf $WORKSPACE/releng-xci/bifrost/* $WORKSPACE/bifrost/ +/bin/cp -rf $WORKSPACE/releng-xci/bifrost/* $WORKSPACE/ cd $WORKSPACE/releng-xci cat > bifrost_test.sh<<EOF @@ -27,9 +25,6 @@ cd ~/bifrost # provision 3 VMs; xcimaster, controller, and compute ./scripts/bifrost-provision.sh -# list the provisioned VMs -source env-vars -ironic node-list sudo -H -E virsh list EOF chmod a+x bifrost_test.sh @@ -41,8 +36,11 @@ case ${DISTRO} in *suse*) VM_DISTRO=opensuse ;; esac +export XCI_BUILD_CLEAN_VM_OS=false +export XCI_UPDATE_CLEAN_VM_OS=true + ./xci/scripts/vm/start-new-vm.sh $VM_DISTRO -rsync -a $WORKSPACE/releng-xci ${VM_DISTRO}_xci_vm:~/bifrost +rsync -a -e "ssh -F $HOME/.ssh/xci-vm-config" $WORKSPACE/ ${VM_DISTRO}_xci_vm:~/bifrost -ssh -F $HOME/.ssh/xci-vm-config ${VM_DISTRO}_xci_vm "cd ~/bifrost && ./bifrost_test.sh" +ssh -F $HOME/.ssh/xci-vm-config ${VM_DISTRO}_xci_vm "cd ~/bifrost/releng-xci && ./bifrost_test.sh" diff --git a/jjb/xci/osa-periodic-jobs.yml b/jjb/xci/osa-periodic-jobs.yml index 26c1575f4..64daa696b 100644 --- a/jjb/xci/osa-periodic-jobs.yml +++ b/jjb/xci/osa-periodic-jobs.yml @@ -2,7 +2,7 @@ - project: name: 'opnfv-osa-periodic' - project: 'releng-xci' + project: openstack-ansible # ------------------------------- # branches # ------------------------------- @@ -13,19 +13,19 @@ # distros # ------------------------------- distro: - - 'xenial': + - ubuntu: + disabled: false + - centos: + disabled: false + - opensuse: disabled: false - - 'centos7': - disabled: true - - 'suse': - disabled: true # ------------------------------- # type # ------------------------------- type: - virtual # ------------------------------- - # phases + # periodic deploy & test phases # ------------------------------- phase: - 'deploy' @@ -34,32 +34,37 @@ # jobs # ------------------------------- jobs: - - 'osa-periodic-{distro}-{type}-{stream}' - - 'osa-periodic-{phase}-{type}-{stream}' - + - 'xci-osa-periodic-{distro}-{type}-{stream}' + - 'xci-osa-periodic-{distro}-{phase}-{type}-{stream}' # ------------------------------- # job templates # ------------------------------- - job-template: - name: 'osa-periodic-{distro}-{type}-{stream}' + name: 'xci-osa-periodic-{distro}-{type}-{stream}' project-type: multijob disabled: '{obj:disabled}' - concurrent: false + concurrent: true properties: - logrotate-default - build-blocker: use-build-blocker: true blocking-jobs: - - 'xci-verify-.*' - - 'bifrost-verify-.*' - - 'bifrost-periodic-.*' - - 'osa-verify-.*' - - 'osa-periodic-.*' + - 'xci-verify-{distro}-.*' + - 'bifrost-verify-{distro}-.*' + - 'bifrost-periodic-{distro}-.*' + - 'xci-osa-verify-{distro}-.*' + - 'xci-osa-periodic-{distro}-.*' block-level: 'NODE' + - throttle: + max-per-node: 2 + max-total: 10 + categories: + - xci-verify-virtual + option: category wrappers: - ssh-agent-wrapper @@ -68,12 +73,7 @@ - fix-workspace-permissions scm: - - git-scm-osa - - triggers: - - pollscm: - cron: "@midnight" - ignore-post-commit-hooks: true + - git-scm-openstack parameters: - project-parameter: @@ -81,7 +81,17 @@ branch: '{branch}' - label: name: SLAVE_LABEL - default: 'xci-virtual-{distro}' + default: 'xci-virtual' + - string: + name: OPENSTACK_OSA_VERSION + default: 'master' + - string: + name: CLEAN_DIB_IMAGES + default: 'true' + - string: + name: GIT_BASE + default: 'https://git.openstack.org/openstack/$PROJECT' + description: 'Git URL to use on this Jenkins Slave' builders: - description-setter: @@ -90,32 +100,38 @@ name: deploy condition: SUCCESSFUL projects: - - name: 'osa-periodic-deploy-{type}-{stream}' + - name: 'xci-osa-periodic-{distro}-deploy-{type}-{stream}' current-parameters: true predefined-parameters: | DISTRO={distro} DEPLOY_SCENARIO=os-nosdn-nofeature-noha - git-revision: true + OPENSTACK_OSA_VERSION=$OPENSTACK_OSA_VERSION + CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES + BRANCH=$BRANCH node-parameters: true kill-phase-on: FAILURE abort-all-job: true + git-revision: true - multijob: name: healthcheck condition: SUCCESSFUL projects: - - name: 'osa-periodic-healthcheck-{type}-{stream}' + - name: 'xci-osa-periodic-{distro}-healthcheck-{type}-{stream}' current-parameters: true predefined-parameters: | DISTRO={distro} DEPLOY_SCENARIO=os-nosdn-nofeature-noha + OPENSTACK_OSA_VERSION=$OPENSTACK_OSA_VERSION + CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES FUNCTEST_MODE=tier FUNCTEST_TIER=healthcheck + BRANCH=$BRANCH node-parameters: true kill-phase-on: NEVER - abort-all-job: false + abort-all-job: true - job-template: - name: 'osa-periodic-{phase}-{type}-{stream}' + name: 'xci-osa-periodic-{distro}-{phase}-{type}-{stream}' disabled: false @@ -126,41 +142,23 @@ - build-blocker: use-build-blocker: true blocking-jobs: - - 'xci-verify-deploy-.*' - - 'xci-verify-healthcheck-.*' - - 'bifrost-verify-.*' - - 'bifrost-periodic-.*' - - 'osa-verify-deploy-.*' - - 'osa-verify-halthcheck-.*' - - 'osa-periodic-deploy-.*' - - 'osa-periodic-healthcheck-.*' + - '.*-bifrost-verify-.*' + - '.*-bifrost-periodic-.*' block-level: 'NODE' parameters: - project-parameter: project: '{project}' branch: '{branch}' - - label: - name: SLAVE_LABEL - default: 'xci-virtual-{distro}' - - string: - name: OPENSTACK_OSA_VERSION - default: 'master' - string: name: DISTRO - default: 'xenial' + default: 'ubuntu' - string: name: DEPLOY_SCENARIO default: 'os-nosdn-nofeature-noha' - string: - name: XCI_FLAVOR - default: 'mini' - - string: - name: XCI_LOOP - default: 'periodic' - - string: - name: OPNFV_RELENG_DEV_PATH - default: $WORKSPACE/releng-xci + name: OPENSTACK_OSA_VERSION + default: 'master' - string: name: FUNCTEST_MODE default: 'tier' @@ -168,14 +166,18 @@ name: FUNCTEST_SUITE_NAME default: 'healthcheck' - string: - name: FORCE_MASTER + name: XCI_FLAVOR + default: 'mini' + - string: + name: CLEAN_DIB_IMAGES default: 'true' - string: + name: INSTALLER_TYPE + default: 'osa' + - string: name: GIT_BASE - default: https://gerrit.opnfv.org/gerrit/$PROJECT - - scm: - - git-scm-osa + default: 'https://git.openstack.org/openstack/$PROJECT' + description: 'Git URL to use on this Jenkins Slave' wrappers: - ssh-agent-wrapper @@ -183,48 +185,76 @@ timeout: 240 - fix-workspace-permissions + scm: + - git-scm-openstack + builders: - description-setter: description: "Built on $NODE_NAME" - - 'osa-periodic-{phase}-macro' + - 'xci-osa-periodic-{phase}-macro' # ------------------------------- # builder macros # ------------------------------- - builder: - name: 'osa-periodic-deploy-macro' + name: 'xci-osa-periodic-deploy-macro' builders: - shell: | #!/bin/bash - # here we will - # - clone releng-xci repo as the jobs are running against openstack gerrit - # and we need to clone releng-xci ourselves to $OPNFV_RELENG_DEV_PATH - # - run sources-branch-updater.sh from osa to update/pin the role versions - # at the time this job gets triggered against osa master in case if the - # deployment succeeds and we decide to bump version used by xci - # - copy generated role versions into $OPNFV_RELENG_DEV_PATH/xci/file - # - start the deployment by executing xci-deploy.sh as usual - # - # we might also need to pin versions of openstack services as well. + cd $WORKSPACE + + # The start-new-vm.sh script will copy the entire releng-xci directory + # so lets prepare the test script now so it can be copied by the script. + # Please do not move it elsewhere or you would have to move it to the VM + # yourself. + cat > xci_test.sh<<EOF + #!/bin/bash + export DISTRO=$DISTRO + export DEPLOY_SCENARIO=$DEPLOY_SCENARIO + export OPENSTACK_OSA_VERSION=$OPENSTACK_OSA_VERSION + export FUNCTEST_MODE=$FUNCTEST_MODE + export FUNCTEST_SUITE_NAME=$FUNCTEST_SUITE_NAME + export XCI_FLAVOR=$XCI_FLAVOR + export CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES + export OPNFV_RELENG_DEV_PATH=/home/devuser/releng-xci/ + export INSTALLER_TYPE=$INSTALLER_TYPE + export GIT_BASE=$GIT_BASE + export JENKINS_HOME=$JENKINS_HOME + + cd xci + ./xci-deploy.sh + EOF + chmod a+x xci_test.sh + + export XCI_BUILD_CLEAN_VM_OS=false + export XCI_UPDATE_CLEAN_VM_OS=true + + ./xci/scripts/vm/start-new-vm.sh $DISTRO + - shell: | + #!/bin/bash + + ssh -F $HOME/.ssh/xci-vm-config ${DISTRO}_xci_vm "cd releng-xci && ./xci_test.sh" - echo "Hello World!" - builder: - name: 'osa-periodic-healthcheck-macro' + name: 'xci-osa-periodic-healthcheck-macro' builders: - shell: | #!/bin/bash echo "Hello World!" -# ------------------------------- -# scm macro -# ------------------------------- -- scm: - name: git-scm-osa - scm: - - git: - url: https://review.openstack.org/p/openstack/openstack-ansible.git - branches: - - master - timeout: 15 + - shell: | + #!/bin/bash + + sudo virsh destroy ${DISTRO}_xci_vm + sudo virsh undefine ${DISTRO}_xci_vm + +# this will be enabled once the xci is prepared +# - builder: +# name: 'xci-verify-healthcheck-macro' +# builders: +# - shell: +# !include-raw: ../../utils/fetch_os_creds.sh +# - shell: +# !include-raw: ../functest/functest-alpine.sh diff --git a/jjb/xci/xci-verify-jobs.yml b/jjb/xci/xci-verify-jobs.yml index 93ca18708..fffd5c2b4 100644 --- a/jjb/xci/xci-verify-jobs.yml +++ b/jjb/xci/xci-verify-jobs.yml @@ -68,8 +68,8 @@ - 'xci-verify-{distro}-.*' - 'bifrost-verify-{distro}-.*' - 'bifrost-periodic-{distro}-.*' - - 'osa-verify-{distro}-.*' - - 'osa-periodic-{distro}-.*' + - 'xci-osa-verify-{distro}-.*' + - 'xci-osa-periodic-{distro}-.*' block-level: 'NODE' - throttle: max-per-node: 2 @@ -106,22 +106,12 @@ branches: - branch-compare-type: 'ANT' branch-pattern: '**/{branch}' - disable-strict-forbidden-file-verification: 'true' - file-paths: - - compare-type: ANT - pattern: 'bifrost/**' - - compare-type: ANT - pattern: 'xci/**' + disable-strict-forbidden-file-verification: 'false' forbidden-file-paths: - compare-type: ANT - pattern: 'prototypes/**' - - compare-type: ANT - pattern: 'upstream/**' - - compare-type: ANT - pattern: '**/README.rst' - - compare-type: ANT - pattern: 'docs/**' + pattern: 'xci/scripts/vm/**' readable-message: true + custom-url: '* $JOB_NAME $BUILD_URL' skip-vote: successful: '{obj:successful}' failed: '{obj:failed}' @@ -154,7 +144,7 @@ current-parameters: true predefined-parameters: | DISTRO={distro} - DEPLOY_SCENARIO=os-nosdn-nofeature-noha + DEPLOY_SCENARIO=os-nosdn-nofeature CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES GERRIT_BRANCH=$GERRIT_BRANCH GERRIT_REFSPEC=$GERRIT_REFSPEC @@ -171,7 +161,7 @@ current-parameters: true predefined-parameters: | DISTRO={distro} - DEPLOY_SCENARIO=os-nosdn-nofeature-noha + DEPLOY_SCENARIO=os-nosdn-nofeature CLEAN_DIB_IMAGES=$CLEAN_DIB_IMAGES FUNCTEST_MODE=tier FUNCTEST_TIER=healthcheck @@ -195,8 +185,8 @@ - build-blocker: use-build-blocker: true blocking-jobs: - - 'bifrost-verify-.*' - - 'bifrost-periodic-.*' + - '.*-bifrost-verify-.*' + - '.*-bifrost-periodic-.*' - 'osa-verify-.*' - 'osa-periodic-.*' block-level: 'NODE' @@ -210,7 +200,7 @@ default: 'ubuntu' - string: name: DEPLOY_SCENARIO - default: 'os-nosdn-nofeature-noha' + default: 'os-nosdn-nofeature' - string: name: FUNCTEST_MODE default: 'tier' diff --git a/jjb/yardstick/yardstick-daily.sh b/jjb/yardstick/yardstick-daily.sh index 4b8c5d240..f0e4f8e22 100755 --- a/jjb/yardstick/yardstick-daily.sh +++ b/jjb/yardstick/yardstick-daily.sh @@ -22,7 +22,7 @@ fi if [[ ${INSTALLER_TYPE} == 'joid' ]]; then if [[ "${DEPLOY_SCENARIO:0:2}" == "k8" ]];then - rc_file_vol="-v /home/ubuntu/config:/etc/yardstick/admin.conf" + rc_file_vol="-v ${HOME}/admin.conf:/etc/yardstick/admin.conf" else # If production lab then creds may be retrieved dynamically # creds are on the jumphost, always in the same folder @@ -31,8 +31,12 @@ if [[ ${INSTALLER_TYPE} == 'joid' ]]; then # replace the default one by the customized one provided by jenkins config fi elif [[ ${INSTALLER_TYPE} == 'compass' ]]; then - cacert_file_vol="-v ${HOME}/os_cacert:/etc/yardstick/os_cacert" - echo "export OS_CACERT=/etc/yardstick/os_cacert" >> ${HOME}/opnfv-openrc.sh + if [[ "${DEPLOY_SCENARIO:0:2}" == "k8" ]];then + rc_file_vol="-v ${HOME}/admin.conf:/etc/yardstick/admin.conf" + else + cacert_file_vol="-v ${HOME}/os_cacert:/etc/yardstick/os_cacert" + echo "export OS_CACERT=/etc/yardstick/os_cacert" >> ${HOME}/opnfv-openrc.sh + fi elif [[ ${INSTALLER_TYPE} == 'fuel' ]]; then cacert_file_vol="-v ${HOME}/os_cacert:/etc/ssl/certs/mcp_os_cacert" sshkey="-v ${SSH_KEY}:/root/.ssh/mcp.rsa" @@ -68,13 +72,8 @@ sudo rm -rf ${dir_result}/* map_log_dir="-v ${dir_result}:/tmp/yardstick" # Run docker -if [[ ${INSTALLER_TYPE} == "joid" && "${DEPLOY_SCENARIO:0:2}" == "k8" ]];then - juju ssh kubernetes-master/0 sudo apt-get install -y docker.io - cmd="juju ssh kubernetes-master/0 sudo docker run ${opts} ${envs} ${rc_file_vol} ${cacert_file_vol} ${map_log_dir} ${sshkey} ${DOCKER_REPO}:${DOCKER_TAG} exec_tests.sh ${YARDSTICK_DB_BACKEND} ${YARDSTICK_SCENARIO_SUITE_NAME}" -else - cmd="sudo docker run ${opts} ${envs} ${rc_file_vol} ${cacert_file_vol} ${map_log_dir} ${sshkey} ${DOCKER_REPO}:${DOCKER_TAG} \ - exec_tests.sh ${YARDSTICK_DB_BACKEND} ${YARDSTICK_SCENARIO_SUITE_NAME}" -fi +cmd="sudo docker run ${opts} ${envs} ${rc_file_vol} ${cacert_file_vol} ${map_log_dir} ${sshkey} ${DOCKER_REPO}:${DOCKER_TAG} \ +exec_tests.sh ${YARDSTICK_DB_BACKEND} ${YARDSTICK_SCENARIO_SUITE_NAME}" echo "Yardstick: Running docker cmd: ${cmd}" ${cmd} diff --git a/jjb/yardstick/yardstick-get-k8s-conf.sh b/jjb/yardstick/yardstick-get-k8s-conf.sh index e93367f9a..22a6aa4e6 100755 --- a/jjb/yardstick/yardstick-get-k8s-conf.sh +++ b/jjb/yardstick/yardstick-get-k8s-conf.sh @@ -4,5 +4,9 @@ set -e dest_path="$HOME/admin.conf" if [[ "${DEPLOY_SCENARIO:0:2}" == "k8" ]];then - juju scp kubernetes-master/0:config "${dest_path}" + if [[ ${INSTALLER_TYPE} == 'joid' ]];then + juju scp kubernetes-master/0:config "${dest_path}" + elif [[ ${INSTALLER_TYPE} == 'compass' ]];then + docker cp compass-tasks:/opt/admin.conf "${dest_path}" + fi fi diff --git a/jjb/yardstick/yardstick-project-jobs.yml b/jjb/yardstick/yardstick-project-jobs.yml index 7486d8a11..e2fee2988 100644 --- a/jjb/yardstick/yardstick-project-jobs.yml +++ b/jjb/yardstick/yardstick-project-jobs.yml @@ -67,7 +67,12 @@ fail: true builders: - - yardstick-unit-tests-and-docs-build + - yardstick-unit-tests-python-27 + - yardstick-unit-tests-python-3 + - yardstick-functional-tests-python-27 + - yardstick-functional-tests-python-3 + - yardstick-coverage-tests + - yardstick-pep8-tests - job-template: name: 'yardstick-merge-{stream}' @@ -108,14 +113,19 @@ fail: true builders: - - yardstick-unit-tests-and-docs-build + - yardstick-unit-tests-python-27 + - yardstick-unit-tests-python-3 + - yardstick-functional-tests-python-27 + - yardstick-functional-tests-python-3 + - yardstick-coverage-tests + - yardstick-pep8-tests ################################ # job builders ################################ - builder: - name: yardstick-unit-tests-and-docs-build + name: yardstick-unit-tests-python-27 builders: - shell: | #!/bin/bash @@ -124,6 +134,76 @@ sudo apt-get install -y build-essential python-dev python3-dev - echo "Running unit tests..." + echo "Running unit tests in Python 2.7 ..." cd $WORKSPACE - tox + tox -epy27 + +- builder: + name: yardstick-unit-tests-python-3 + builders: + - shell: | + #!/bin/bash + set -o errexit + set -o pipefail + + sudo apt-get install -y build-essential python-dev python3-dev + + echo "Running unit tests in Python 3 ..." + cd $WORKSPACE + tox -epy3 + +- builder: + name: yardstick-functional-tests-python-27 + builders: + - shell: | + #!/bin/bash + set -o errexit + set -o pipefail + + sudo apt-get install -y build-essential python-dev python3-dev + + echo "Running functional tests in Python 2.7 ..." + cd $WORKSPACE + tox -efunctional + +- builder: + name: yardstick-functional-tests-python-3 + builders: + - shell: | + #!/bin/bash + set -o errexit + set -o pipefail + + sudo apt-get install -y build-essential python-dev python3-dev + + echo "Running functional tests in Python 3 ..." + cd $WORKSPACE + tox -efunctional-py3 + +- builder: + name: yardstick-coverage-tests + builders: + - shell: | + #!/bin/bash + set -o errexit + set -o pipefail + + sudo apt-get install -y build-essential python-dev python3-dev + + echo "Running coverage tests ..." + cd $WORKSPACE + tox -ecoverage + +- builder: + name: yardstick-pep8-tests + builders: + - shell: | + #!/bin/bash + set -o errexit + set -o pipefail + + sudo apt-get install -y build-essential python-dev python3-dev + + echo "Running style guidelines (PEP8) tests ..." + cd $WORKSPACE + tox -epep8 diff --git a/modules/opnfv/deployment/daisy/__init__.py b/modules/opnfv/deployment/daisy/__init__.py new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/modules/opnfv/deployment/daisy/__init__.py diff --git a/modules/opnfv/deployment/daisy/adapter.py b/modules/opnfv/deployment/daisy/adapter.py new file mode 100644 index 000000000..5634e242b --- /dev/null +++ b/modules/opnfv/deployment/daisy/adapter.py @@ -0,0 +1,202 @@ +############################################################################## +# Copyright (c) 2017 ZTE Corporation 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 +############################################################################## + + +from opnfv.deployment import manager +from opnfv.utils import opnfv_logger as logger +from opnfv.utils import ssh_utils + +logger = logger.Logger(__name__).getLogger() + + +class DaisyAdapter(manager.DeploymentHandler): + + def __init__(self, installer_ip, installer_user, installer_pwd): + super(DaisyAdapter, self).__init__(installer='daisy', + installer_ip=installer_ip, + installer_user=installer_user, + installer_pwd=installer_pwd, + pkey_file=None) + + def _get_clusters(self): + clusters = [] + cmd = 'source /root/daisyrc_admin; daisy cluster-list | grep -v "+--"' + output = self.installer_node.run_cmd(cmd) + lines = output.rsplit('\n') + if len(lines) < 2: + logger.info("No environments found in the deployment.") + return None + else: + fields = lines[0].rsplit('|') + + index_id = -1 + index_status = -1 + index_name = -1 + index_nodes = -1 + + for i in range(len(fields)): + if "ID" in fields[i]: + index_id = i + elif "Status" in fields[i]: + index_status = i + elif "Name" in fields[i]: + index_name = i + elif "Nodes" in fields[i]: + index_nodes = i + + # order env info + for i in range(1, len(lines)): + fields = lines[i].rsplit('|') + dict = {"id": fields[index_id].strip(), + "status": fields[index_status].strip(), + "name": fields[index_name].strip(), + "nodes": fields[index_nodes].strip()} + clusters.append(dict) + + return clusters + + def get_nodes(self, options=None): + if hasattr(self, 'nodes') and len(self.nodes) > 0: + if options and 'cluster' in options and options['cluster']: + nodes = [] + for node in self.nodes: + if str(node.info['cluster']) == str(options['cluster']): + nodes.append(node) + return nodes + else: + return self.nodes + + clusters = self._get_clusters() + nodes = [] + for cluster in clusters: + if options and 'cluster' in options and options['cluster']: + if cluster["id"] != options['cluster']: + continue + cmd = 'source /root/daisyrc_admin; daisy host-list ' \ + '--cluster-id {} | grep -v "+--"'.format(cluster["id"]) + output = self.installer_node.run_cmd(cmd) + lines = output.rsplit('\n') + if len(lines) < 2: + logger.info("No nodes found in the cluster {}".format( + cluster["id"])) + continue + + fields = lines[0].rsplit('|') + index_id = -1 + index_status = -1 + index_name = -1 + + for i in range(len(fields)): + if "ID" in fields[i]: + index_id = i + elif "Role_status" in fields[i]: + index_status = i + elif "Name" in fields[i]: + index_name = i + + for i in range(1, len(lines)): + fields = lines[i].rsplit('|') + id = fields[index_id].strip().encode() + status_node = fields[index_status].strip().encode().lower() + name = fields[index_name].strip().encode() + ip = ".".join(name.split("-")[1:]) + + cmd_role = 'source /root/daisyrc_admin; ' \ + 'daisy host-detail {} | grep "^| role"'.format(id) + output_role = self.installer_node.run_cmd(cmd_role) + role_all = output_role.rsplit('|')[2].strip().encode() + roles = [] + if 'COMPUTER' in role_all: + roles.append(manager.Role.COMPUTE) + if 'CONTROLLER_LB' in role_all or 'CONTROLLER_HA' in role_all: + roles.append(manager.Role.CONTROLLER) + + ssh_client = None + if status_node == 'active': + status = manager.NodeStatus.STATUS_OK + proxy = {'ip': self.installer_ip, + 'username': self.installer_user, + 'password': self.installer_pwd, + 'pkey_file': '/root/.ssh/id_dsa'} + ssh_client = ssh_utils.get_ssh_client(hostname=ip, + username='root', + proxy=proxy) + else: + status = manager.NodeStatus.STATUS_INACTIVE + + node = DaisyNode(id, ip, name, status, roles, ssh_client) + nodes.append(node) + return nodes + + def get_openstack_version(self): + cmd = 'docker exec nova_api nova-manage version 2>/dev/null' + version = None + for node in self.nodes: + if node.is_controller() and node.is_active(): + version = node.run_cmd(cmd) + break + return version + + def get_sdn_version(self): + version = None + for node in self.nodes: + if manager.Role.CONTROLLER in node.roles and node.is_active(): + cmd = 'docker inspect --format=\'{{.Name}}\' `docker ps -q`' + output = node.run_cmd(cmd) + if '/opendaylight' in output.rsplit('\n'): + cmd2 = 'docker exec opendaylight ' \ + 'sudo yum info opendaylight 2>/dev/null ' \ + '| grep Version | tail -1' + odl_ver = node.run_cmd(cmd2) + if odl_ver: + version = 'OpenDaylight: ' + odl_ver.split(' ')[-1] + break + return version + + def get_deployment_status(self): + clusters = self._get_clusters() + if clusters is None or len(clusters) == 0: + return 'unknown' + else: + return clusters[0]['status'] + + +class DaisyNode(manager.Node): + + def __init__(self, + id, + ip, + name, + status, + roles=None, + ssh_client=None, + info=None): + super(DaisyNode, self).__init__(id, ip, name, status, + roles, ssh_client, info) + + def is_odl(self): + ''' + Returns if the node is an opendaylight + ''' + if manager.Role.CONTROLLER in self.roles and self.is_active(): + cmd = 'docker inspect --format=\'{{.Name}}\' `docker ps -q`' + output = self.run_cmd(cmd) + if '/opendaylight' in output.rsplit('\n'): + return True + return False + + def get_ovs_info(self): + ''' + Returns the ovs version installed + ''' + if self.is_active(): + cmd = 'docker exec openvswitch_vswitchd ' \ + 'ovs-vsctl --version | head -1 | awk \'{print $NF}\'' + return self.run_cmd(cmd) + return None diff --git a/modules/opnfv/deployment/factory.py b/modules/opnfv/deployment/factory.py index e14783fe2..2788e5eaa 100644 --- a/modules/opnfv/deployment/factory.py +++ b/modules/opnfv/deployment/factory.py @@ -12,6 +12,7 @@ from opnfv.deployment.apex import adapter as apex_adapter from opnfv.deployment.compass import adapter as compass_adapter from opnfv.deployment.fuel import adapter as fuel_adapter from opnfv.deployment.osa import adapter as osa_adapter +from opnfv.deployment.daisy import adapter as daisy_adapter from opnfv.utils import opnfv_logger as logger logger = logger.Logger(__name__).getLogger() @@ -51,6 +52,10 @@ class Factory(object): return osa_adapter.OSAAdapter(installer_ip=installer_ip, installer_user=installer_user, pkey_file=pkey_file) + elif installer.lower() == "daisy": + return daisy_adapter.DaisyAdapter(installer_ip=installer_ip, + installer_user=installer_user, + installer_pwd=installer_pwd) else: raise Exception("Installer adapter is not implemented for " "the given installer.") diff --git a/modules/opnfv/utils/ssh_utils.py b/modules/opnfv/utils/ssh_utils.py index 4c5ff5c1b..175a38078 100644 --- a/modules/opnfv/utils/ssh_utils.py +++ b/modules/opnfv/utils/ssh_utils.py @@ -49,9 +49,11 @@ def get_ssh_client(hostname, client = paramiko.SSHClient() else: client = ProxyHopClient() + proxy_pkey_file = proxy.get('pkey_file', '/root/.ssh/id_rsa') client.configure_jump_host(proxy['ip'], proxy['username'], - proxy['password']) + proxy['password'], + proxy_pkey_file) if client is None: raise Exception('Could not connect to client') @@ -115,6 +117,8 @@ class ProxyHopClient(paramiko.SSHClient): jh_ssh_key='/root/.ssh/id_rsa'): self.proxy_ip = jh_ip self.proxy_ssh_key = jh_ssh_key + self.local_ssh_key = os.path.join(os.getcwd(), + jh_ssh_key.split('/')[-1]) self.proxy_ssh = paramiko.SSHClient() self.proxy_ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) self.proxy_ssh.connect(jh_ip, @@ -138,8 +142,12 @@ class ProxyHopClient(paramiko.SSHClient): self.local_ssh_key) if get_file_res is None: raise Exception('Could\'t fetch SSH key from jump host') - proxy_key = (paramiko.RSAKey - .from_private_key_file(self.local_ssh_key)) + if self.proxy_ssh_key.split('/')[-1] == 'id_dsa': + proxy_key = (paramiko.DSSKey + .from_private_key_file(self.local_ssh_key)) + else: + proxy_key = (paramiko.RSAKey + .from_private_key_file(self.local_ssh_key)) self.proxy_channel = self.proxy_transport.open_channel( "direct-tcpip", diff --git a/utils/create_pod_file.py b/utils/create_pod_file.py index def5ecca8..a60ece475 100644 --- a/utils/create_pod_file.py +++ b/utils/create_pod_file.py @@ -92,6 +92,9 @@ def create_file(handler, INSTALLER_TYPE): if args.INSTALLER_TYPE == 'compass': for item in node_list: item['password'] = 'root' + elif args.INSTALLER_TYPE == 'daisy': + for item in node_list: + item['key_filename'] = '/root/.ssh/id_dsa' else: for item in node_list: item['key_filename'] = args.sshkey diff --git a/utils/push-test-logs.sh b/utils/push-test-logs.sh index 8e00b9c0c..0fcea0d7b 100644 --- a/utils/push-test-logs.sh +++ b/utils/push-test-logs.sh @@ -23,7 +23,7 @@ dir_result="${HOME}/opnfv/$project/results/${branch}" node_list=(\ 'lf-pod1' 'lf-pod2' 'intel-pod2' 'intel-pod12' \ 'lf-virtual2' 'lf-virtual3' \ -'intel-pod5' 'intel-pod6' 'intel-pod7' 'intel-pod8' \ +'intel-pod5' 'intel-pod6' 'intel-pod7' 'intel-pod8' 'intel-pod18' \ 'ericsson-pod1' 'ericsson-pod2' \ 'ericsson-virtual1' 'ericsson-virtual2' 'ericsson-virtual3' \ 'ericsson-virtual4' 'ericsson-virtual5' 'ericsson-virtual12' \ @@ -32,7 +32,7 @@ node_list=(\ 'huawei-pod6' 'huawei-pod7' 'huawei-pod12' \ 'huawei-virtual1' 'huawei-virtual2' 'huawei-virtual3' 'huawei-virtual4' \ 'huawei-virtual5' 'huawei-virtual8' 'huawei-virtual9' \ -'zte-pod2' \ +'zte-pod2' 'zte-pod3' \ 'zte-virtual1') |