diff options
-rw-r--r-- | docs/ci/tables/ci-baremetal-servers.rst | 10 | ||||
-rw-r--r-- | jjb/armband/armband-ci-jobs.yaml | 56 | ||||
-rw-r--r-- | jjb/fuel/fuel-daily-jobs.yaml | 36 | ||||
-rw-r--r-- | jjb/functest/xtesting.yaml | 414 | ||||
-rw-r--r-- | jjb/releng/opnfv-docker.yaml | 5 | ||||
-rw-r--r-- | utils/push-test-logs.sh | 2 |
6 files changed, 476 insertions, 47 deletions
diff --git a/docs/ci/tables/ci-baremetal-servers.rst b/docs/ci/tables/ci-baremetal-servers.rst index 2efea0ac2..1bdc956ea 100644 --- a/docs/ci/tables/ci-baremetal-servers.rst +++ b/docs/ci/tables/ci-baremetal-servers.rst @@ -16,6 +16,16 @@ - Ubuntu 16.04 - `PDF <https://git.opnfv.org/pharos/plain/labs/arm/pod6.yaml>`__ - `IDF <https://git.opnfv.org/pharos/plain/labs/arm/idf-pod6.yaml>`__ + * - `arm-pod9 <https://build.opnfv.org/ci/computer/arm-pod9>`_ + - Armband + - Ubuntu 16.04 + - `PDF <https://git.opnfv.org/pharos/plain/labs/arm/pod9.yaml>`__ + - `IDF <https://git.opnfv.org/pharos/plain/labs/arm/idf-pod9.yaml>`__ + * - `arm-pod10 <https://build.opnfv.org/ci/computer/arm-pod10>`_ + - Fuel + - Ubuntu 16.04 + - `PDF <https://git.opnfv.org/pharos/plain/labs/arm/pod10.yaml>`__ + - `IDF <https://git.opnfv.org/pharos/plain/labs/arm/idf-pod10.yaml>`__ * - `ericsson-pod1 <https://build.opnfv.org/ci/computer/ericsson-pod1>`_ - Fuel - Ubuntu 16.04 diff --git a/jjb/armband/armband-ci-jobs.yaml b/jjb/armband/armband-ci-jobs.yaml index 2ab1a6d53..9694ba956 100644 --- a/jjb/armband/armband-ci-jobs.yaml +++ b/jjb/armband/armband-ci-jobs.yaml @@ -78,12 +78,12 @@ auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger' - 'os-nosdn-ovs-ha': auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger' - - 'os-nosdn-vpp-ha': - auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger' # NOHA scenarios - 'os-nosdn-nofeature-noha': auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger' + - 'os-nosdn-fdio-noha': + auto-trigger-name: '{installer}-{scenario}-{pod}-{stream}-trigger' exclude: # Dovetail (and only it) should run against Fraser HA baremetal scenarios @@ -91,7 +91,7 @@ stream: fraser - scenario: os-ovn-nofeature-ha stream: fraser - - scenario: os-nosdn-vpp-ha + - scenario: os-nosdn-fdio-noha stream: fraser jobs: @@ -310,11 +310,7 @@ - trigger: name: 'fuel-os-nosdn-nofeature-ha-armband-baremetal-master-trigger' triggers: - - timed: '0 1 * * 2,7' -- trigger: - name: 'fuel-os-nosdn-nofeature-noha-armband-baremetal-master-trigger' - triggers: - - timed: '' + - timed: '0 1 * * 7' - trigger: name: 'fuel-os-odl-nofeature-ha-armband-baremetal-master-trigger' triggers: @@ -322,30 +318,30 @@ - trigger: name: 'fuel-os-ovn-nofeature-ha-armband-baremetal-master-trigger' triggers: - - timed: '0 1 * * 1' + - timed: '0 1 * * 2' - trigger: name: 'fuel-os-nosdn-ovs-ha-armband-baremetal-master-trigger' triggers: - - timed: '0 1 * * 3,5' + - timed: '0 1 * * 1' - trigger: - name: 'fuel-os-nosdn-vpp-ha-armband-baremetal-master-trigger' + name: 'fuel-os-nosdn-nofeature-noha-armband-baremetal-master-trigger' triggers: - timed: '' +- trigger: + name: 'fuel-os-nosdn-fdio-noha-armband-baremetal-master-trigger' + triggers: + - timed: '0 1 * * 3,5' # --------------------------------------------------------------------- # Enea Armband CI Baremetal Triggers running against gambia branch # --------------------------------------------------------------------- - trigger: name: 'fuel-os-nosdn-nofeature-ha-armband-baremetal-gambia-trigger' triggers: - - timed: '10 1 * * 1,3' -- trigger: - name: 'fuel-os-nosdn-nofeature-noha-armband-baremetal-gambia-trigger' - triggers: - - timed: '' + - timed: '10 1 * * 1' - trigger: name: 'fuel-os-odl-nofeature-ha-armband-baremetal-gambia-trigger' triggers: - - timed: '10 1 * * 5,7' + - timed: '10 1 * * 7' - trigger: name: 'fuel-os-ovn-nofeature-ha-armband-baremetal-gambia-trigger' triggers: @@ -355,9 +351,13 @@ triggers: - timed: '10 1 * * 4,6' - trigger: - name: 'fuel-os-nosdn-vpp-ha-armband-baremetal-gambia-trigger' + name: 'fuel-os-nosdn-nofeature-noha-armband-baremetal-gambia-trigger' triggers: - timed: '' +- trigger: + name: 'fuel-os-nosdn-fdio-noha-armband-baremetal-gambia-trigger' + triggers: + - timed: '10 1 * * 3,5' # ------------------------------------------------------------------- # Enea Armband CI Baremetal Triggers running against fraser branch (for Dovetail) # ------------------------------------------------------------------- @@ -381,10 +381,6 @@ triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-nofeature-noha-armband-virtual-master-trigger' - triggers: - - timed: '' -- trigger: name: 'fuel-os-odl-nofeature-ha-armband-virtual-master-trigger' triggers: - timed: '' @@ -397,7 +393,11 @@ triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-vpp-ha-armband-virtual-master-trigger' + name: 'fuel-os-nosdn-nofeature-noha-armband-virtual-master-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-nosdn-fdio-noha-armband-virtual-master-trigger' triggers: - timed: '' # ------------------------------------------------------------------- @@ -408,10 +408,6 @@ triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-nofeature-noha-armband-virtual-gambia-trigger' - triggers: - - timed: '' -- trigger: name: 'fuel-os-odl-nofeature-ha-armband-virtual-gambia-trigger' triggers: - timed: '' @@ -424,6 +420,10 @@ triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-vpp-ha-armband-virtual-gambia-trigger' + name: 'fuel-os-nosdn-nofeature-noha-armband-virtual-gambia-trigger' + triggers: + - timed: '' +- trigger: + name: 'fuel-os-nosdn-fdio-noha-armband-virtual-gambia-trigger' triggers: - timed: '' diff --git a/jjb/fuel/fuel-daily-jobs.yaml b/jjb/fuel/fuel-daily-jobs.yaml index fb619c3f5..3e64c16cd 100644 --- a/jjb/fuel/fuel-daily-jobs.yaml +++ b/jjb/fuel/fuel-daily-jobs.yaml @@ -66,7 +66,7 @@ auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - 'os-nosdn-ovs-ha': auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - - 'os-nosdn-vpp-ha': + - 'os-nosdn-fdio-ha': auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' # NOHA scenarios - 'os-nosdn-nofeature-noha': @@ -83,7 +83,7 @@ auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - 'os-nosdn-ovs-noha': auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' - - 'os-nosdn-vpp-noha': + - 'os-nosdn-fdio-noha': auto-trigger-name: 'fuel-{scenario}-{pod}-daily-{stream}-trigger' exclude: @@ -102,11 +102,11 @@ stream: fraser - scenario: os-nosdn-ovs-noha stream: fraser - - scenario: os-nosdn-vpp-noha + - scenario: os-nosdn-fdio-noha stream: fraser - scenario: os-ovn-nofeature-ha stream: fraser - - scenario: os-nosdn-vpp-ha + - scenario: os-nosdn-fdio-ha stream: fraser jobs: @@ -366,7 +366,7 @@ - trigger: name: 'fuel-os-nosdn-nofeature-ha-baremetal-daily-master-trigger' triggers: - - timed: '5 20 * * *' + - timed: '5 20 * * 1,2,4,6,7' - trigger: name: 'fuel-os-odl-nofeature-ha-baremetal-daily-master-trigger' triggers: @@ -380,7 +380,7 @@ triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-vpp-ha-baremetal-daily-master-trigger' + name: 'fuel-os-nosdn-fdio-ha-baremetal-daily-master-trigger' triggers: - timed: '' @@ -414,9 +414,9 @@ triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-vpp-noha-baremetal-daily-master-trigger' + name: 'fuel-os-nosdn-fdio-noha-baremetal-daily-master-trigger' triggers: - - timed: '' + - timed: '5 20 * * 3,5' # ---------------------------------------------- # Triggers for job running on fuel-baremetal against gambia branch # ---------------------------------------------- @@ -424,7 +424,7 @@ - trigger: name: 'fuel-os-nosdn-nofeature-ha-baremetal-daily-gambia-trigger' triggers: - - timed: '0 20 * * *' + - timed: '0 20 * * 1,2,4,6,7' - trigger: name: 'fuel-os-odl-nofeature-ha-baremetal-daily-gambia-trigger' triggers: @@ -438,7 +438,7 @@ triggers: - timed: '0 5 * * *' - trigger: - name: 'fuel-os-nosdn-vpp-ha-baremetal-daily-gambia-trigger' + name: 'fuel-os-nosdn-fdio-ha-baremetal-daily-gambia-trigger' triggers: - timed: '' # NOHA Scenarios @@ -471,9 +471,9 @@ triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-vpp-noha-baremetal-daily-gambia-trigger' + name: 'fuel-os-nosdn-fdio-noha-baremetal-daily-gambia-trigger' triggers: - - timed: '' + - timed: '0 20 * * 3,5' # ---------------------------------------------- # Triggers for job running on fuel-virtual against master branch # ---------------------------------------------- @@ -494,7 +494,7 @@ triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-vpp-ha-virtual-daily-master-trigger' + name: 'fuel-os-nosdn-fdio-ha-virtual-daily-master-trigger' triggers: - timed: '' # NOHA Scenarios @@ -527,7 +527,7 @@ triggers: - timed: '5 9 * * *' - trigger: - name: 'fuel-os-nosdn-vpp-noha-virtual-daily-master-trigger' + name: 'fuel-os-nosdn-fdio-noha-virtual-daily-master-trigger' triggers: - timed: '' # ---------------------------------------------- @@ -565,7 +565,7 @@ triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-vpp-ha-virtual-daily-gambia-trigger' + name: 'fuel-os-nosdn-fdio-ha-virtual-daily-gambia-trigger' triggers: - timed: '' # NOHA Scenarios @@ -598,7 +598,7 @@ triggers: - timed: '0 9 * * *' - trigger: - name: 'fuel-os-nosdn-vpp-noha-virtual-daily-gambia-trigger' + name: 'fuel-os-nosdn-fdio-noha-virtual-daily-gambia-trigger' triggers: - timed: '' # ---------------------------------------------- @@ -621,7 +621,7 @@ triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-vpp-ha-zte-pod1-daily-master-trigger' + name: 'fuel-os-nosdn-fdio-ha-zte-pod1-daily-master-trigger' triggers: - timed: '' # NOHA Scenarios @@ -654,6 +654,6 @@ triggers: - timed: '' - trigger: - name: 'fuel-os-nosdn-vpp-noha-zte-pod1-daily-master-trigger' + name: 'fuel-os-nosdn-fdio-noha-zte-pod1-daily-master-trigger' triggers: - timed: '' diff --git a/jjb/functest/xtesting.yaml b/jjb/functest/xtesting.yaml new file mode 100644 index 000000000..267514a24 --- /dev/null +++ b/jjb/functest/xtesting.yaml @@ -0,0 +1,414 @@ +--- +- xtesting-jobs: &xtesting-jobs + name: 'xtesting-jobs' + current-parameters: true + +- xtesting-params: &xtesting-params + name: 'xtesting-params' + repo: 'opnfv' + port: + tag: + - latest: + branch: master + - hunter: + branch: stable/hunter + - gambia: + branch: stable/gambia + +- parameter: + name: xtesting-slave + parameters: + - label: + name: slave + default: lf-build2 + +- parameter: + name: xtesting-branch + parameters: + - string: + name: branch + default: '{branch}' + +- xtesting-containers: &xtesting-containers + name: 'xtesting-containers' + repo: '{repo}' + port: '{port}' + container: '{container}' + tag: '{tag}' + +- xtesting-run-containers: &xtesting-run-containers + name: 'xtesting-build-containers' + <<: *xtesting-containers + test: '{test}' + +- xtesting-build-containers: &xtesting-build-containers + name: 'xtesting-build-containers' + <<: *xtesting-containers + ref_arg: '{ref_arg}' + path: '{path}' + +- builder: + name: xtesting-pull-containers + builders: + - shell: | + set +x + if [ "{repo}" = "_" ]; then + image={container}:{tag} + elif [ "{port}" = "None" ]; then + image={repo}/{container}:{tag} + else + image={repo}:{port}/{container}:{tag} + fi + sudo docker pull $image + +- builder: + name: xtesting-build-containers + builders: + - shell: | + set +x + if [ "{repo}" = "_" ]; then + image={container}:{tag} + elif [ "{port}" = "None" ]; then + image={repo}/{container}:{tag} + else + image={repo}:{port}/{container}:{tag} + fi + if [ "{ref_arg}" = "None" ]; then + build_arg="" + else + build_arg="--build-arg {ref_arg}={ref}" + fi + cd {path} + sudo docker build $build_arg \ + --pull=false --no-cache --force-rm=true \ + -t $image . + +- builder: + name: xtesting-run-containers + builders: + - shell: | + set +ex + [ ! -z "$WORKSPACE" ] && sudo rm -rf $WORKSPACE/* || true + if [ "{repo}" = "_" ]; then + image={container}:{tag} + elif [ "{port}" = "None" ]; then + image={repo}/{container}:{tag} + else + image={repo}:{port}/{container}:{tag} + fi + sudo docker run --rm \ + -v $WORKSPACE/../$JOB_NAME/results:/var/lib/xtesting/results \ + $image run_tests -t {test} + res=$? + gsutil -m cp -r $WORKSPACE/ \ + gs://artifacts.opnfv.org/xtesting/$JOB_NAME-$BUILD_ID > /dev/null 2>&1 + find $WORKSPACE -type f \ + -printf \ + "http://artifacts.opnfv.org/xtesting/$JOB_NAME-$BUILD_ID/%P\n" + exit $res + +- builder: + name: xtesting-remove-images + builders: + - shell: | + set +x + if [ "{repo}" = "_" ]; then + image={container}:{tag} + elif [ "{port}" = "None" ]; then + image={repo}/{container}:{tag} + else + image={repo}:{port}/{container}:{tag} + fi + sudo docker rmi $image || true + +- scm: + name: xtesting-scm + scm: + - git: + url: https://gerrit.opnfv.org/gerrit/functest-xtesting + refspec: '+refs/changes/*:refs/changes/*' + branches: + - '{ref}' + +- job-template: + name: '{repo}-{container}-{tag}-pull' + parameters: + - xtesting-slave + builders: + - xtesting-pull-containers: + <<: *xtesting-containers + +- project: + name: 'opnfv-xtesting-pull' + <<: *xtesting-params + container: 'xtesting' + jobs: + - '{repo}-{container}-{tag}-pull' + +- job-template: + name: '{repo}-{container}-{tag}-rmi' + parameters: + - xtesting-slave + builders: + - xtesting-remove-images: + <<: *xtesting-containers + +- project: + name: 'opnfv-xtesting-rmi' + <<: *xtesting-params + container: 'xtesting' + jobs: + - '{repo}-{container}-{tag}-rmi' + +- job-template: + name: '{repo}-{container}-{tag}-{test}-run' + parameters: + - xtesting-slave + builders: + - xtesting-run-containers: + <<: *xtesting-run-containers + +- project: + name: 'opnfv-xtesting' + <<: *xtesting-params + container: 'xtesting' + test: + - first + - second + - third + - fourth + - fifth + jobs: + - '{repo}-{container}-{tag}-{test}-run' + +- job-template: + name: 'xtesting-{tag}-daily' + project-type: multijob + triggers: + - timed: '@daily' + parameters: + - xtesting-slave + properties: + - build-blocker: + use-build-blocker: true + blocking-level: 'NODE' + blocking-jobs: + - '^xtesting-.*-(daily|check|gate)$' + builders: + - multijob: + name: remove former images + projects: + - name: 'opnfv-xtesting-{tag}-rmi' + <<: *xtesting-jobs + - multijob: + name: pull containers + projects: + - name: 'opnfv-xtesting-{tag}-pull' + <<: *xtesting-jobs + - multijob: + name: opnfv/xtesting:{tag} + projects: + - name: 'opnfv-xtesting-{tag}-first-run' + <<: *xtesting-jobs + - name: 'opnfv-xtesting-{tag}-second-run' + <<: *xtesting-jobs + - name: 'opnfv-xtesting-{tag}-third-run' + <<: *xtesting-jobs + - name: 'opnfv-xtesting-{tag}-fourth-run' + <<: *xtesting-jobs + - name: 'opnfv-xtesting-{tag}-fifth-run' + <<: *xtesting-jobs + +- job-template: + name: '{repo}-{container}-{tag}-gate' + parameters: + - xtesting-slave + scm: + - xtesting-scm: + ref: $GERRIT_REFSPEC + builders: + - xtesting-build-containers: + <<: *xtesting-build-containers + ref: $GERRIT_REFSPEC + +- job-template: + name: '{repo}-{container}-{tag}-check' + parameters: + - xtesting-slave + - xtesting-branch: + branch: '{branch}' + scm: + - xtesting-scm: + ref: $branch + builders: + - xtesting-build-containers: + <<: *xtesting-build-containers + ref: $branch + +- project: + name: '_-alpine-3.8-rmi' + repo: _ + port: + container: alpine + tag: 3.8 + jobs: + - '{repo}-{container}-{tag}-rmi' + +- project: + name: '_-alpine-3.8-pull' + repo: _ + port: + container: alpine + tag: 3.8 + jobs: + - '{repo}-{container}-{tag}-pull' + +- project: + name: opnfv-xtesting-{tag}-build + <<: *xtesting-params + container: xtesting + ref_arg: BRANCH + path: docker + jobs: + - '{repo}-{container}-{tag}-gate' + - '{repo}-{container}-{tag}-check' + +- job-template: + name: 'xtesting-{tag}-check' + project-type: multijob + parameters: + - xtesting-slave + - xtesting-branch: + branch: '{branch}' + properties: + - build-blocker: + use-build-blocker: true + blocking-level: 'NODE' + blocking-jobs: + - '^xtesting-.*-(daily|check|gate)$' + builders: + - multijob: + name: remove former images + projects: + - name: 'opnfv-xtesting-{tag}-rmi' + <<: *xtesting-jobs + - multijob: + name: remove dependencies + projects: + - name: '_-alpine-3.8-rmi' + <<: *xtesting-jobs + - multijob: + name: pull dependencies + projects: + - name: '_-alpine-3.8-pull' + <<: *xtesting-jobs + - multijob: + name: opnfv/functest-xtesting + projects: + - name: 'opnfv-xtesting-{tag}-check' + <<: *xtesting-jobs + - multijob: + name: opnfv/xtesting:{tag} + projects: + - name: 'opnfv-xtesting-{tag}-first-run' + <<: *xtesting-jobs + - name: 'opnfv-xtesting-{tag}-second-run' + <<: *xtesting-jobs + - name: 'opnfv-xtesting-{tag}-third-run' + <<: *xtesting-jobs + - name: 'opnfv-xtesting-{tag}-fourth-run' + <<: *xtesting-jobs + - name: 'opnfv-xtesting-{tag}-fifth-run' + <<: *xtesting-jobs + +- trigger: + name: xtesting-patchset-created + triggers: + - gerrit: + server-name: 'gerrit.opnfv.org' + trigger-on: + - patchset-created-event + - comment-added-contains-event: + comment-contains-value: 'recheck' + - comment-added-contains-event: + comment-contains-value: 'reverify' + projects: + - project-compare-type: 'ANT' + project-pattern: 'functest-xtesting' + branches: + - branch-compare-type: 'ANT' + branch-pattern: '**/{branch}' + skip-vote: + successful: false + failed: false + unstable: false + notbuilt: false + +- job-template: + name: 'xtesting-{tag}-gate' + project-type: multijob + triggers: + - xtesting-patchset-created: + branch: '{branch}' + parameters: + - xtesting-slave + properties: + - build-blocker: + use-build-blocker: true + blocking-level: 'NODE' + blocking-jobs: + - '^xtesting-.*-(daily|check|gate)$' + builders: + - multijob: + name: remove former images + projects: + - name: 'opnfv-xtesting-{tag}-rmi' + <<: *xtesting-jobs + - multijob: + name: remove dependencies + projects: + - name: '_-alpine-3.8-rmi' + <<: *xtesting-jobs + - multijob: + name: pull dependencies + projects: + - name: '_-alpine-3.8-pull' + <<: *xtesting-jobs + - multijob: + name: opnfv/functest-xtesting + projects: + - name: 'opnfv-xtesting-{tag}-gate' + <<: *xtesting-jobs + - multijob: + name: opnfv/xtesting:{tag} + projects: + - name: 'opnfv-xtesting-{tag}-first-run' + <<: *xtesting-jobs + - name: 'opnfv-xtesting-{tag}-second-run' + <<: *xtesting-jobs + - name: 'opnfv-xtesting-{tag}-third-run' + <<: *xtesting-jobs + - name: 'opnfv-xtesting-{tag}-fourth-run' + <<: *xtesting-jobs + - name: 'opnfv-xtesting-{tag}-fifth-run' + <<: *xtesting-jobs + +- project: + name: 'xtesting' + <<: *xtesting-params + jobs: + - 'xtesting-{tag}-daily' + - 'xtesting-{tag}-check' + - 'xtesting-{tag}-gate' + +- view: + name: xtesting + view-type: list + columns: + - status + - weather + - job + - last-success + - last-failure + - last-duration + regex: ^xtesting-.*-(daily|check|gate)$ diff --git a/jjb/releng/opnfv-docker.yaml b/jjb/releng/opnfv-docker.yaml index 1f7366688..525d00452 100644 --- a/jjb/releng/opnfv-docker.yaml +++ b/jjb/releng/opnfv-docker.yaml @@ -258,6 +258,11 @@ project: 'yardstick' <<: *master <<: *yardstick-receivers + - 'yardstick-ubuntu-18.04': + project: 'yardstick' + dockerfile: 'docker/Dockerfile_ubuntu18' + <<: *master + <<: *yardstick-receivers - 'yardstick-image-k8s': project: 'yardstick' dockerdir: 'docker/k8s' diff --git a/utils/push-test-logs.sh b/utils/push-test-logs.sh index 253cfa7b3..63a1ecc0d 100644 --- a/utils/push-test-logs.sh +++ b/utils/push-test-logs.sh @@ -27,7 +27,7 @@ node_list=(\ 'ericsson-pod1' 'ericsson-pod2' \ 'ericsson-virtual1' 'ericsson-virtual2' 'ericsson-virtual3' \ 'ericsson-virtual4' 'ericsson-virtual5' \ -'arm-pod5' 'arm-pod6' \ +'arm-pod5' 'arm-pod6' 'arm-pod9' 'arm-pod10' \ 'huawei-pod1' 'huawei-pod2' 'huawei-pod3' 'huawei-pod4' \ 'huawei-pod6' 'huawei-pod7' 'huawei-pod12' 'huawei-pod8' \ 'huawei-virtual1' 'huawei-virtual2' 'huawei-virtual3' 'huawei-virtual4' \ |