diff --git a/.gitignore b/.gitignore index b98e075dab3..c7935bc1bb5 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ setuptools*.egg/ !/.pylintrc !/.stestr.conf !/.testr.conf +!/.zuul.yaml # Files created by releasenotes build releasenotes/build diff --git a/.zuul.yaml b/.zuul.yaml new file mode 100644 index 00000000000..25fbadfe0b0 --- /dev/null +++ b/.zuul.yaml @@ -0,0 +1,59 @@ +- job: + name: neutron-tempest-plugin-api + parent: legacy-dsvm-base + run: playbooks/neutron-tempest-plugin-api/run.yaml + post-run: playbooks/neutron-tempest-plugin-api/post.yaml + timeout: 10000 + required-projects: + - openstack-infra/devstack-gate + - openstack/neutron + - openstack/neutron-tempest-plugin + - openstack/tempest + irrelevant-files: + - ^(test-|)requirements.txt$ + - ^setup.cfg$ + voting: false + +- job: + name: neutron-tempest-plugin-scenario-linuxbridge + parent: legacy-dsvm-base + run: playbooks/neutron-tempest-plugin-scenario-linuxbridge/run.yaml + post-run: playbooks/neutron-tempest-plugin-scenario-linuxbridge/post.yaml + timeout: 10000 + required-projects: + - openstack-infra/devstack-gate + - openstack/neutron + - openstack/neutron-tempest-plugin + - openstack/tempest + irrelevant-files: + - ^(test-|)requirements.txt$ + - ^setup.cfg$ + voting: false + +- job: + name: neutron-tempest-plugin-dvr-multinode-scenario + parent: legacy-dsvm-base-multinode + run: playbooks/neutron-tempest-plugin-dvr-multinode-scenario/run.yaml + post-run: playbooks/neutron-tempest-plugin-dvr-multinode-scenario/post.yaml + nodeset: legacy-ubuntu-xenial-2-node + timeout: 10800 + required-projects: + - openstack-infra/devstack-gate + - openstack/neutron + - openstack/neutron-tempest-plugin + - openstack/tempest + irrelevant-files: + - ^(test-|)requirements.txt$ + - ^setup.cfg$ + voting: false + +- project: + name: openstack/neutron + check: + jobs: + - neutron-tempest-plugin-dvr-multinode-scenario + - neutron-tempest-plugin-scenario-linuxbridge + - neutron-tempest-plugin-api + gate: + jobs: + - neutron-tempest-plugin-api diff --git a/playbooks/neutron-tempest-plugin-api/post.yaml b/playbooks/neutron-tempest-plugin-api/post.yaml new file mode 100644 index 00000000000..dac875340aa --- /dev/null +++ b/playbooks/neutron-tempest-plugin-api/post.yaml @@ -0,0 +1,80 @@ +- hosts: primary + tasks: + + - name: Copy files from {{ ansible_user_dir }}/workspace/ on node + synchronize: + src: '{{ ansible_user_dir }}/workspace/' + dest: '{{ zuul.executor.log_root }}' + mode: pull + copy_links: true + verify_host: true + rsync_opts: + - --include=**/*nose_results.html + - --include=*/ + - --exclude=* + - --prune-empty-dirs + + - name: Copy files from {{ ansible_user_dir }}/workspace/ on node + synchronize: + src: '{{ ansible_user_dir }}/workspace/' + dest: '{{ zuul.executor.log_root }}' + mode: pull + copy_links: true + verify_host: true + rsync_opts: + - --include=**/*testr_results.html.gz + - --include=*/ + - --exclude=* + - --prune-empty-dirs + + - name: Copy files from {{ ansible_user_dir }}/workspace/ on node + synchronize: + src: '{{ ansible_user_dir }}/workspace/' + dest: '{{ zuul.executor.log_root }}' + mode: pull + copy_links: true + verify_host: true + rsync_opts: + - --include=/.testrepository/tmp* + - --include=*/ + - --exclude=* + - --prune-empty-dirs + + - name: Copy files from {{ ansible_user_dir }}/workspace/ on node + synchronize: + src: '{{ ansible_user_dir }}/workspace/' + dest: '{{ zuul.executor.log_root }}' + mode: pull + copy_links: true + verify_host: true + rsync_opts: + - --include=**/*testrepository.subunit.gz + - --include=*/ + - --exclude=* + - --prune-empty-dirs + + - name: Copy files from {{ ansible_user_dir }}/workspace/ on node + synchronize: + src: '{{ ansible_user_dir }}/workspace/' + dest: '{{ zuul.executor.log_root }}/tox' + mode: pull + copy_links: true + verify_host: true + rsync_opts: + - --include=/.tox/*/log/* + - --include=*/ + - --exclude=* + - --prune-empty-dirs + + - name: Copy files from {{ ansible_user_dir }}/workspace/ on node + synchronize: + src: '{{ ansible_user_dir }}/workspace/' + dest: '{{ zuul.executor.log_root }}' + mode: pull + copy_links: true + verify_host: true + rsync_opts: + - --include=/logs/** + - --include=*/ + - --exclude=* + - --prune-empty-dirs diff --git a/playbooks/neutron-tempest-plugin-api/run.yaml b/playbooks/neutron-tempest-plugin-api/run.yaml new file mode 100644 index 00000000000..3470bd4e3c7 --- /dev/null +++ b/playbooks/neutron-tempest-plugin-api/run.yaml @@ -0,0 +1,68 @@ +- hosts: all + name: neutron-tempest-plugin-api + tasks: + + - name: Ensure legacy workspace directory + file: + path: '{{ ansible_user_dir }}/workspace' + state: directory + + - shell: + cmd: | + set -e + set -x + cat > clonemap.yaml << EOF + clonemap: + - name: openstack-infra/devstack-gate + dest: devstack-gate + EOF + /usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \ + git://git.openstack.org \ + openstack-infra/devstack-gate + executable: /bin/bash + chdir: '{{ ansible_user_dir }}/workspace' + environment: '{{ zuul | zuul_legacy_vars }}' + + - shell: + cmd: | + set -e + set -x + cat << 'EOF' >>"/tmp/dg-local.conf" + [[local|localrc]] + TEMPEST_PLUGINS='/opt/stack/new/neutron-tempest-plugin' + EOF + executable: /bin/bash + chdir: '{{ ansible_user_dir }}/workspace' + environment: '{{ zuul | zuul_legacy_vars }}' + + - shell: + cmd: | + set -e + set -x + export PYTHONUNBUFFERED=true + export DEVSTACK_GATE_TEMPEST=1 + export DEVSTACK_GATE_NEUTRON=1 + export DEVSTACK_GATE_EXERCISES=0 + export DEVSTACK_GATE_TEMPEST_REGEX="neutron_tempest_plugin.api" + export BRANCH_OVERRIDE=default + if [ "$BRANCH_OVERRIDE" != "default" ] ; then + export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE + fi + + export PROJECTS="openstack/neutron-tempest-plugin $PROJECTS" + + function gate_hook { + bash -xe $BASE/new/neutron/neutron/tests/contrib/gate_hook.sh api + } + export -f gate_hook + + function post_test_hook { + bash -xe $BASE/new/neutron/neutron/tests/contrib/post_test_hook.sh api + } + export -f post_test_hook + + cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh + ./safe-devstack-vm-gate-wrap.sh + executable: /bin/bash + chdir: '{{ ansible_user_dir }}/workspace' + environment: '{{ zuul | zuul_legacy_vars }}' diff --git a/playbooks/neutron-tempest-plugin-dvr-multinode-scenario/post.yaml b/playbooks/neutron-tempest-plugin-dvr-multinode-scenario/post.yaml new file mode 100644 index 00000000000..e07f5510ae7 --- /dev/null +++ b/playbooks/neutron-tempest-plugin-dvr-multinode-scenario/post.yaml @@ -0,0 +1,15 @@ +- hosts: primary + tasks: + + - name: Copy files from {{ ansible_user_dir }}/workspace/ on node + synchronize: + src: '{{ ansible_user_dir }}/workspace/' + dest: '{{ zuul.executor.log_root }}' + mode: pull + copy_links: true + verify_host: true + rsync_opts: + - --include=/logs/** + - --include=*/ + - --exclude=* + - --prune-empty-dirs diff --git a/playbooks/neutron-tempest-plugin-dvr-multinode-scenario/run.yaml b/playbooks/neutron-tempest-plugin-dvr-multinode-scenario/run.yaml new file mode 100644 index 00000000000..d68747c7e8a --- /dev/null +++ b/playbooks/neutron-tempest-plugin-dvr-multinode-scenario/run.yaml @@ -0,0 +1,71 @@ +- hosts: all + name: neutron-tempest-plugin-dvr-multinode-scenario + tasks: + + - name: Ensure legacy workspace directory + file: + path: '{{ ansible_user_dir }}/workspace' + state: directory + + - shell: + cmd: | + set -e + set -x + cat > clonemap.yaml << EOF + clonemap: + - name: openstack-infra/devstack-gate + dest: devstack-gate + EOF + /usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \ + git://git.openstack.org \ + openstack-infra/devstack-gate + executable: /bin/bash + chdir: '{{ ansible_user_dir }}/workspace' + environment: '{{ zuul | zuul_legacy_vars }}' + + - shell: + cmd: | + set -e + set -x + cat << 'EOF' >>"/tmp/dg-local.conf" + [[local|localrc]] + TEMPEST_PLUGINS='/opt/stack/new/neutron-tempest-plugin' + EOF + executable: /bin/bash + chdir: '{{ ansible_user_dir }}/workspace' + environment: '{{ zuul | zuul_legacy_vars }}' + + - shell: + cmd: | + set -e + set -x + export PYTHONUNBUFFERED=true + export DEVSTACK_GATE_TEMPEST=1 + export DEVSTACK_GATE_NEUTRON=1 + export DEVSTACK_GATE_CONFIGDRIVE=0 + export DEVSTACK_GATE_TEMPEST_REGEX="(neutron_tempest_plugin.scenario)" + export TEMPEST_CONCURRENCY=2 + # Test DVR works multinode + export DEVSTACK_GATE_NEUTRON_DVR=1 + export BRANCH_OVERRIDE=default + if [ "$BRANCH_OVERRIDE" != "default" ] ; then + export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE + fi + export DEVSTACK_GATE_TOPOLOGY="multinode" + export PROJECTS="openstack/neutron-tempest-plugin $PROJECTS" + + function gate_hook { + bash -xe $BASE/new/neutron/neutron/tests/contrib/gate_hook.sh dsvm-scenario-ovs + } + export -f gate_hook + + function post_test_hook { + bash -xe $BASE/new/neutron/neutron/tests/contrib/post_test_hook.sh dsvm-scenario-ovs + } + export -f post_test_hook + + cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh + ./safe-devstack-vm-gate-wrap.sh + executable: /bin/bash + chdir: '{{ ansible_user_dir }}/workspace' + environment: '{{ zuul | zuul_legacy_vars }}' diff --git a/playbooks/neutron-tempest-plugin-scenario-linuxbridge/post.yaml b/playbooks/neutron-tempest-plugin-scenario-linuxbridge/post.yaml new file mode 100644 index 00000000000..dac875340aa --- /dev/null +++ b/playbooks/neutron-tempest-plugin-scenario-linuxbridge/post.yaml @@ -0,0 +1,80 @@ +- hosts: primary + tasks: + + - name: Copy files from {{ ansible_user_dir }}/workspace/ on node + synchronize: + src: '{{ ansible_user_dir }}/workspace/' + dest: '{{ zuul.executor.log_root }}' + mode: pull + copy_links: true + verify_host: true + rsync_opts: + - --include=**/*nose_results.html + - --include=*/ + - --exclude=* + - --prune-empty-dirs + + - name: Copy files from {{ ansible_user_dir }}/workspace/ on node + synchronize: + src: '{{ ansible_user_dir }}/workspace/' + dest: '{{ zuul.executor.log_root }}' + mode: pull + copy_links: true + verify_host: true + rsync_opts: + - --include=**/*testr_results.html.gz + - --include=*/ + - --exclude=* + - --prune-empty-dirs + + - name: Copy files from {{ ansible_user_dir }}/workspace/ on node + synchronize: + src: '{{ ansible_user_dir }}/workspace/' + dest: '{{ zuul.executor.log_root }}' + mode: pull + copy_links: true + verify_host: true + rsync_opts: + - --include=/.testrepository/tmp* + - --include=*/ + - --exclude=* + - --prune-empty-dirs + + - name: Copy files from {{ ansible_user_dir }}/workspace/ on node + synchronize: + src: '{{ ansible_user_dir }}/workspace/' + dest: '{{ zuul.executor.log_root }}' + mode: pull + copy_links: true + verify_host: true + rsync_opts: + - --include=**/*testrepository.subunit.gz + - --include=*/ + - --exclude=* + - --prune-empty-dirs + + - name: Copy files from {{ ansible_user_dir }}/workspace/ on node + synchronize: + src: '{{ ansible_user_dir }}/workspace/' + dest: '{{ zuul.executor.log_root }}/tox' + mode: pull + copy_links: true + verify_host: true + rsync_opts: + - --include=/.tox/*/log/* + - --include=*/ + - --exclude=* + - --prune-empty-dirs + + - name: Copy files from {{ ansible_user_dir }}/workspace/ on node + synchronize: + src: '{{ ansible_user_dir }}/workspace/' + dest: '{{ zuul.executor.log_root }}' + mode: pull + copy_links: true + verify_host: true + rsync_opts: + - --include=/logs/** + - --include=*/ + - --exclude=* + - --prune-empty-dirs diff --git a/playbooks/neutron-tempest-plugin-scenario-linuxbridge/run.yaml b/playbooks/neutron-tempest-plugin-scenario-linuxbridge/run.yaml new file mode 100644 index 00000000000..f2be1309851 --- /dev/null +++ b/playbooks/neutron-tempest-plugin-scenario-linuxbridge/run.yaml @@ -0,0 +1,71 @@ +- hosts: all + name: neutron-tempest-plugin-scenario-linuxbridge + tasks: + + - name: Ensure legacy workspace directory + file: + path: '{{ ansible_user_dir }}/workspace' + state: directory + + - shell: + cmd: | + set -e + set -x + cat > clonemap.yaml << EOF + clonemap: + - name: openstack-infra/devstack-gate + dest: devstack-gate + EOF + /usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \ + git://git.openstack.org \ + openstack-infra/devstack-gate + executable: /bin/bash + chdir: '{{ ansible_user_dir }}/workspace' + environment: '{{ zuul | zuul_legacy_vars }}' + + - shell: + cmd: | + set -e + set -x + cat << 'EOF' >>"/tmp/dg-local.conf" + [[local|localrc]] + Q_AGENT=linuxbridge + PHYSICAL_NETWORK=default + TEMPEST_PLUGINS='/opt/stack/new/neutron-tempest-plugin' + + EOF + executable: /bin/bash + chdir: '{{ ansible_user_dir }}/workspace' + environment: '{{ zuul | zuul_legacy_vars }}' + + - shell: + cmd: | + set -e + set -x + export PYTHONUNBUFFERED=true + export DEVSTACK_GATE_TEMPEST=1 + export DEVSTACK_GATE_NEUTRON=1 + export DEVSTACK_GATE_EXERCISES=0 + export DEVSTACK_GATE_TEMPEST_REGEX="(neutron_tempest_plugin.scenario)" + export BRANCH_OVERRIDE=default + if [ "$BRANCH_OVERRIDE" != "default" ] ; then + export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE + fi + + export TEMPEST_CONCURRENCY=2 + export PROJECTS="openstack/neutron-tempest-plugin $PROJECTS" + function gate_hook { + bash -xe $BASE/new/neutron/neutron/tests/contrib/gate_hook.sh dsvm-scenario-linuxbridge dvrskip + } + export -f gate_hook + + function post_test_hook { + bash -xe $BASE/new/neutron/neutron/tests/contrib/post_test_hook.sh dsvm-scenario-linuxbridge + } + export -f post_test_hook + + cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh + ./safe-devstack-vm-gate-wrap.sh + executable: /bin/bash + chdir: '{{ ansible_user_dir }}/workspace' + environment: '{{ zuul | zuul_legacy_vars }}'