diff --git a/playbooks/legacy/functional-nova-network-dsvm-ec2api/post.yaml b/playbooks/legacy/functional-nova-network-dsvm-ec2api/post.yaml
deleted file mode 100644
index e07f5510..00000000
--- a/playbooks/legacy/functional-nova-network-dsvm-ec2api/post.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-- 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/legacy/functional-nova-network-dsvm-ec2api/run.yaml b/playbooks/legacy/functional-nova-network-dsvm-ec2api/run.yaml
deleted file mode 100644
index 23e4a7f4..00000000
--- a/playbooks/legacy/functional-nova-network-dsvm-ec2api/run.yaml
+++ /dev/null
@@ -1,66 +0,0 @@
-- hosts: all
-  name: Autoconverted job legacy-functional-nova-network-dsvm-ec2api from old job
-    gate-functional-nova-network-dsvm-ec2api-ubuntu-xenial
-  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]]
-          enable_plugin ec2-api git://git.openstack.org/openstack/ec2-api
-
-          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 TEMPEST_CONCURRENCY=2
-          export BRANCH_OVERRIDE=default
-          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
-              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
-          fi
-          export PROJECTS="openstack/ec2-api $PROJECTS"
-
-          if [ "nova-network" = "neutron" ] ; then
-              export DEVSTACK_GATE_NEUTRON=1
-          else
-              export DEVSTACK_GATE_NEUTRON=0
-          fi
-
-          export DEVSTACK_GATE_TEMPEST_ALL_PLUGINS=1
-          export DEVSTACK_GATE_TEMPEST_REGEX="ec2api.tests.functional"
-
-          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/legacy/functional-nova-network-dsvm-gceapi/post.yaml b/playbooks/legacy/functional-nova-network-dsvm-gceapi/post.yaml
deleted file mode 100644
index e07f5510..00000000
--- a/playbooks/legacy/functional-nova-network-dsvm-gceapi/post.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-- 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/legacy/functional-nova-network-dsvm-gceapi/run.yaml b/playbooks/legacy/functional-nova-network-dsvm-gceapi/run.yaml
deleted file mode 100644
index ba7ccacb..00000000
--- a/playbooks/legacy/functional-nova-network-dsvm-gceapi/run.yaml
+++ /dev/null
@@ -1,70 +0,0 @@
-- hosts: all
-  name: Autoconverted job legacy-functional-nova-network-dsvm-gceapi from old job
-    gate-functional-nova-network-dsvm-gceapi-ubuntu-xenial-nv
-  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]]
-          enable_plugin gce-api git://git.openstack.org/openstack/gce-api
-
-          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_TEMPEST_NOTESTS=1
-          export BRANCH_OVERRIDE=default
-          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
-              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
-          fi
-          export PROJECTS="openstack/gce-api $PROJECTS"
-
-          if [ "nova-network" = "neutron" ] ; then
-              export DEVSTACK_GATE_NEUTRON=1
-          else
-              export DEVSTACK_GATE_NEUTRON=0
-          fi
-
-          function post_test_hook {
-              source $BASE/new/devstack/accrc/admin/admin
-              cd /opt/stack/new/gce-api/
-              ./gceapi/tests/contrib/post_test_hook.sh
-          }
-          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/legacy/horizon-selenium-headless-legacy/run.yaml b/playbooks/legacy/horizon-selenium-headless-legacy/run.yaml
deleted file mode 100644
index 0dc1761d..00000000
--- a/playbooks/legacy/horizon-selenium-headless-legacy/run.yaml
+++ /dev/null
@@ -1,67 +0,0 @@
-- hosts: all
-  name: Autoconverted job legacy-horizon-selenium-headless-legacy from old job gate-horizon-selenium-headless-legacy-ubuntu-xenial
-  tasks:
-
-    - name: Ensure legacy workspace directory
-      file:
-        path: '{{ ansible_user_dir }}/workspace'
-        state: directory
-
-    - shell:
-        cmd: |
-          set -e
-          set -x
-          CLONEMAP=`mktemp`
-          REQS_DIR=`mktemp -d`
-          function cleanup {
-              mkdir -p $WORKSPACE
-              rm -rf $CLONEMAP $REQS_DIR
-          }
-          trap cleanup EXIT
-          cat > $CLONEMAP << EOF
-          clonemap:
-            - name: $ZUUL_PROJECT
-              dest: .
-          EOF
-          # zuul cloner works poorly if there are 2 names that are the
-          # same in here.
-          if [[ "$ZUUL_PROJECT" != "openstack/requirements" ]]; then
-          cat >> $CLONEMAP << EOF
-            - name: openstack/requirements
-              dest: $REQS_DIR
-          EOF
-          fi
-          /usr/zuul-env/bin/zuul-cloner -m $CLONEMAP --cache-dir /opt/git \
-              git://git.openstack.org $ZUUL_PROJECT openstack/requirements
-          # REQS_DIR is not set for openstack/requirements and there is also
-          # no need to copy in this case.
-          if [[ "$ZUUL_PROJECT" != "openstack/requirements" ]]; then
-              cp $REQS_DIR/upper-constraints.txt ./
-          fi
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: /usr/local/jenkins/slave_scripts/install-distro-packages.sh
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          set -x
-          sudo rm -f /etc/sudoers.d/zuul
-          # Prove that general sudo access is actually revoked
-          ! sudo -n true
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          set -e
-          set -x
-          NOSE_WITH_XUNIT=1 tox -evenv -- /bin/bash run_tests.sh -N --only-selenium --selenium-headless
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
diff --git a/playbooks/legacy/novaclient-dsvm-functional/post.yaml b/playbooks/legacy/novaclient-dsvm-functional/post.yaml
deleted file mode 100644
index dac87534..00000000
--- a/playbooks/legacy/novaclient-dsvm-functional/post.yaml
+++ /dev/null
@@ -1,80 +0,0 @@
-- 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/legacy/novaclient-dsvm-functional/run.yaml b/playbooks/legacy/novaclient-dsvm-functional/run.yaml
deleted file mode 100644
index 166cd33e..00000000
--- a/playbooks/legacy/novaclient-dsvm-functional/run.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-- hosts: all
-  name: Autoconverted job legacy-novaclient-dsvm-functional from old job gate-novaclient-dsvm-functional-ubuntu-xenial
-  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
-          export PYTHONUNBUFFERED=true
-          export BRANCH_OVERRIDE=default
-          export DEVSTACK_PROJECT_FROM_GIT=python-novaclient
-          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
-              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
-          fi
-          # This ensures that if we set override branch to something
-          # else, we still take python-novaclient from the zuul branch
-          # name. So override branch can be 'stable/mitaka' but we can
-          # test master changes.
-          uc_project=`echo $DEVSTACK_PROJECT_FROM_GIT | tr [:lower:] [:upper:] | tr '-' '_' | sed 's/[^A-Z_]//'`
-          export "OVERRIDE_"$uc_project"_PROJECT_BRANCH"=$ZUUL_BRANCH
-
-          function post_test_hook {
-              # Configure and run functional tests
-              $BASE/new/python-novaclient/novaclient/tests/functional/hooks/post_test_hook.sh
-          }
-          if [ "" == "-identity-v3-only" ] ; then
-              export DEVSTACK_LOCAL_CONFIG="ENABLE_IDENTITY_V2=False"
-          elif [ "" == "-neutron" ] ; then
-              export DEVSTACK_GATE_NEUTRON=1
-          fi
-          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/legacy/periodic-tempest-dsvm-networking-midonet-aio-ml2-newton/post.yaml b/playbooks/legacy/periodic-tempest-dsvm-networking-midonet-aio-ml2-newton/post.yaml
deleted file mode 100644
index e07f5510..00000000
--- a/playbooks/legacy/periodic-tempest-dsvm-networking-midonet-aio-ml2-newton/post.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-- 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/legacy/periodic-tempest-dsvm-networking-midonet-aio-ml2-newton/run.yaml b/playbooks/legacy/periodic-tempest-dsvm-networking-midonet-aio-ml2-newton/run.yaml
deleted file mode 100644
index 7fde00d4..00000000
--- a/playbooks/legacy/periodic-tempest-dsvm-networking-midonet-aio-ml2-newton/run.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-- hosts: all
-  name: Autoconverted job legacy-periodic-tempest-dsvm-networking-midonet-aio-ml2-newton
-    from old job periodic-tempest-dsvm-networking-midonet-aio-ml2-ubuntu-xenial-newton
-  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
-          export PYTHONUNBUFFERED=true
-          export DEVSTACK_GATE_NEUTRON=1
-          export DEVSTACK_GATE_TEMPEST=1
-          export BRANCH_OVERRIDE=stable/newton
-          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
-              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
-          fi
-          export DEVSTACK_GATE_TOPOLOGY=aio
-
-          # Because we are testing a non standard project, add
-          # our project repository. This makes zuul do the right
-          # reference magic for testing changes.
-          export PROJECTS="openstack/networking-midonet $PROJECTS"
-          export PROJECTS="openstack/neutron-dynamic-routing $PROJECTS"
-          export PROJECTS="openstack/networking-l2gw $PROJECTS"
-          export PROJECTS="openstack/tap-as-a-service $PROJECTS"
-
-          function gate_hook {
-               bash -xe $BASE/new/networking-midonet/devstack/ci/gate_hook.sh ml2
-          }
-          export -f gate_hook
-          export DEVSTACK_GATE_SETTINGS=/opt/stack/new/networking-midonet/devstack/devstackgaterc
-
-          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/legacy/periodic-tempest-dsvm-networking-midonet-aio-v2-newton/post.yaml b/playbooks/legacy/periodic-tempest-dsvm-networking-midonet-aio-v2-newton/post.yaml
deleted file mode 100644
index e07f5510..00000000
--- a/playbooks/legacy/periodic-tempest-dsvm-networking-midonet-aio-v2-newton/post.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-- 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/legacy/periodic-tempest-dsvm-networking-midonet-aio-v2-newton/run.yaml b/playbooks/legacy/periodic-tempest-dsvm-networking-midonet-aio-v2-newton/run.yaml
deleted file mode 100644
index 30ecfea3..00000000
--- a/playbooks/legacy/periodic-tempest-dsvm-networking-midonet-aio-v2-newton/run.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-- hosts: all
-  name: Autoconverted job legacy-periodic-tempest-dsvm-networking-midonet-aio-v2-newton
-    from old job periodic-tempest-dsvm-networking-midonet-aio-v2-ubuntu-xenial-newton
-  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
-          export PYTHONUNBUFFERED=true
-          export DEVSTACK_GATE_NEUTRON=1
-          export DEVSTACK_GATE_TEMPEST=1
-          export BRANCH_OVERRIDE=stable/newton
-          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
-              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
-          fi
-          export DEVSTACK_GATE_TOPOLOGY=aio
-
-          # Because we are testing a non standard project, add
-          # our project repository. This makes zuul do the right
-          # reference magic for testing changes.
-          export PROJECTS="openstack/networking-midonet $PROJECTS"
-          export PROJECTS="openstack/neutron-dynamic-routing $PROJECTS"
-          export PROJECTS="openstack/networking-l2gw $PROJECTS"
-          export PROJECTS="openstack/tap-as-a-service $PROJECTS"
-
-          function gate_hook {
-               bash -xe $BASE/new/networking-midonet/devstack/ci/gate_hook.sh v2
-          }
-          export -f gate_hook
-          export DEVSTACK_GATE_SETTINGS=/opt/stack/new/networking-midonet/devstack/devstackgaterc
-
-          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/legacy/swift-tox-xfs-tmp-func-fast-post-centos-7/post.yaml b/playbooks/legacy/swift-tox-xfs-tmp-func-fast-post-centos-7/post.yaml
deleted file mode 100644
index 68fbdf81..00000000
--- a/playbooks/legacy/swift-tox-xfs-tmp-func-fast-post-centos-7/post.yaml
+++ /dev/null
@@ -1,67 +0,0 @@
-- 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
diff --git a/playbooks/legacy/swift-tox-xfs-tmp-func-fast-post-centos-7/run.yaml b/playbooks/legacy/swift-tox-xfs-tmp-func-fast-post-centos-7/run.yaml
deleted file mode 100644
index 03e7e139..00000000
--- a/playbooks/legacy/swift-tox-xfs-tmp-func-fast-post-centos-7/run.yaml
+++ /dev/null
@@ -1,99 +0,0 @@
-- hosts: all
-  name: Autoconverted job legacy-swift-tox-xfs-tmp-func-fast-post-centos-7 from old
-    job gate-swift-tox-xfs-tmp-func-fast-post-centos-7
-  tasks:
-
-    - name: Ensure legacy workspace directory
-      file:
-        path: '{{ ansible_user_dir }}/workspace'
-        state: directory
-
-    - shell:
-        cmd: |
-          set -e
-          set -x
-          CLONEMAP=`mktemp`
-          REQS_DIR=`mktemp -d`
-          function cleanup {
-              mkdir -p $WORKSPACE
-              rm -rf $CLONEMAP $REQS_DIR
-          }
-          trap cleanup EXIT
-          cat > $CLONEMAP << EOF
-          clonemap:
-            - name: $ZUUL_PROJECT
-              dest: .
-          EOF
-          # zuul cloner works poorly if there are 2 names that are the
-          # same in here.
-          if [[ "$ZUUL_PROJECT" != "openstack/requirements" ]]; then
-          cat >> $CLONEMAP << EOF
-            - name: openstack/requirements
-              dest: $REQS_DIR
-          EOF
-          fi
-          /usr/zuul-env/bin/zuul-cloner -m $CLONEMAP --cache-dir /opt/git \
-              git://git.openstack.org $ZUUL_PROJECT openstack/requirements
-          # REQS_DIR is not set for openstack/requirements and there is also
-          # no need to copy in this case.
-          if [[ "$ZUUL_PROJECT" != "openstack/requirements" ]]; then
-              cp $REQS_DIR/upper-constraints.txt ./
-          fi
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: /usr/local/jenkins/slave_scripts/install-distro-packages.sh
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          set -e
-          set -x
-          # create a large-ish file that we will mount as a loopback
-          truncate -s 1GB $HOME/1G_xfs_file
-          # format the new file as xfs
-          /sbin/mkfs.xfs $HOME/1G_xfs_file
-          # loopback mount the file
-          mkdir -p $HOME/xfstmp
-          sudo mount -o loop,noatime,nodiratime $HOME/1G_xfs_file $HOME/xfstmp
-          sudo chmod 777 $HOME/xfstmp
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          set -x
-          sudo rm -f /etc/sudoers.d/zuul
-          # Prove that general sudo access is actually revoked
-          ! sudo -n true
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          set -x
-          export TMPDIR=$HOME/xfstmp
-          /usr/local/jenkins/slave_scripts/run-tox.sh func-fast-post
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          OUT=`git ls-files --other --exclude-standard --directory`
-          if [ -z "$OUT" ]; then
-              echo "No extra files created during test."
-              exit 0
-          else
-              echo "The following un-ignored files were created during the test:"
-              echo "$OUT"
-              exit 0  # TODO: change to 1 to fail tests.
-          fi
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
diff --git a/playbooks/legacy/swift-tox-xfs-tmp-func-fast-post/post.yaml b/playbooks/legacy/swift-tox-xfs-tmp-func-fast-post/post.yaml
deleted file mode 100644
index 68fbdf81..00000000
--- a/playbooks/legacy/swift-tox-xfs-tmp-func-fast-post/post.yaml
+++ /dev/null
@@ -1,67 +0,0 @@
-- 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
diff --git a/playbooks/legacy/swift-tox-xfs-tmp-func-fast-post/run.yaml b/playbooks/legacy/swift-tox-xfs-tmp-func-fast-post/run.yaml
deleted file mode 100644
index 7940b530..00000000
--- a/playbooks/legacy/swift-tox-xfs-tmp-func-fast-post/run.yaml
+++ /dev/null
@@ -1,98 +0,0 @@
-- hosts: all
-  name: Autoconverted job legacy-swift-tox-xfs-tmp-func-fast-post from old job gate-swift-tox-xfs-tmp-func-fast-post-ubuntu-xenial
-  tasks:
-
-    - name: Ensure legacy workspace directory
-      file:
-        path: '{{ ansible_user_dir }}/workspace'
-        state: directory
-
-    - shell:
-        cmd: |
-          set -e
-          set -x
-          CLONEMAP=`mktemp`
-          REQS_DIR=`mktemp -d`
-          function cleanup {
-              mkdir -p $WORKSPACE
-              rm -rf $CLONEMAP $REQS_DIR
-          }
-          trap cleanup EXIT
-          cat > $CLONEMAP << EOF
-          clonemap:
-            - name: $ZUUL_PROJECT
-              dest: .
-          EOF
-          # zuul cloner works poorly if there are 2 names that are the
-          # same in here.
-          if [[ "$ZUUL_PROJECT" != "openstack/requirements" ]]; then
-          cat >> $CLONEMAP << EOF
-            - name: openstack/requirements
-              dest: $REQS_DIR
-          EOF
-          fi
-          /usr/zuul-env/bin/zuul-cloner -m $CLONEMAP --cache-dir /opt/git \
-              git://git.openstack.org $ZUUL_PROJECT openstack/requirements
-          # REQS_DIR is not set for openstack/requirements and there is also
-          # no need to copy in this case.
-          if [[ "$ZUUL_PROJECT" != "openstack/requirements" ]]; then
-              cp $REQS_DIR/upper-constraints.txt ./
-          fi
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: /usr/local/jenkins/slave_scripts/install-distro-packages.sh
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          set -e
-          set -x
-          # create a large-ish file that we will mount as a loopback
-          truncate -s 1GB $HOME/1G_xfs_file
-          # format the new file as xfs
-          /sbin/mkfs.xfs $HOME/1G_xfs_file
-          # loopback mount the file
-          mkdir -p $HOME/xfstmp
-          sudo mount -o loop,noatime,nodiratime $HOME/1G_xfs_file $HOME/xfstmp
-          sudo chmod 777 $HOME/xfstmp
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          set -x
-          sudo rm -f /etc/sudoers.d/zuul
-          # Prove that general sudo access is actually revoked
-          ! sudo -n true
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          set -x
-          export TMPDIR=$HOME/xfstmp
-          /usr/local/jenkins/slave_scripts/run-tox.sh func-fast-post
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          OUT=`git ls-files --other --exclude-standard --directory`
-          if [ -z "$OUT" ]; then
-              echo "No extra files created during test."
-              exit 0
-          else
-              echo "The following un-ignored files were created during the test:"
-              echo "$OUT"
-              exit 0  # TODO: change to 1 to fail tests.
-          fi
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
diff --git a/zuul.d/zuul-legacy-jobs.yaml b/zuul.d/zuul-legacy-jobs.yaml
index 2e60ce27..fecbbbe5 100644
--- a/zuul.d/zuul-legacy-jobs.yaml
+++ b/zuul.d/zuul-legacy-jobs.yaml
@@ -1491,28 +1491,6 @@
       - openstack/gce-api
       - openstack/neutron
 
-- job:
-    name: legacy-functional-nova-network-dsvm-ec2api
-    parent: legacy-dsvm-base
-    run: playbooks/legacy/functional-nova-network-dsvm-ec2api/run
-    post-run: playbooks/legacy/functional-nova-network-dsvm-ec2api/post
-    timeout: 7800
-    required-projects:
-      - openstack-infra/devstack-gate
-      - openstack/ec2-api
-      - openstack/nova
-
-- job:
-    name: legacy-functional-nova-network-dsvm-gceapi
-    parent: legacy-dsvm-base
-    run: playbooks/legacy/functional-nova-network-dsvm-gceapi/run
-    post-run: playbooks/legacy/functional-nova-network-dsvm-gceapi/post
-    timeout: 7500
-    required-projects:
-      - openstack-infra/devstack-gate
-      - openstack/gce-api
-      - openstack/nova
-
 - job:
     name: legacy-fuxi-dsvm-fullstack
     parent: legacy-dsvm-base
@@ -2310,12 +2288,6 @@
     required-projects:
       - openstack/requirements
 
-- job:
-    name: legacy-horizon-selenium-headless-legacy
-    parent: legacy-base
-    run: playbooks/legacy/horizon-selenium-headless-legacy/run
-    timeout: 1800
-
 - job:
     name: legacy-horizon-tox-py27dj110
     parent: legacy-base
@@ -3866,17 +3838,6 @@
     required-projects:
       - openstack/requirements
 
-- job:
-    name: legacy-novaclient-dsvm-functional
-    parent: legacy-dsvm-base
-    run: playbooks/legacy/novaclient-dsvm-functional/run
-    post-run: playbooks/legacy/novaclient-dsvm-functional/post
-    timeout: 7200
-    required-projects:
-      - openstack-infra/devstack-gate
-      - openstack/nova
-      - openstack/python-novaclient
-
 - job:
     name: legacy-novaclient-dsvm-functional-identity-v3-only
     parent: legacy-dsvm-base
@@ -5163,21 +5124,6 @@
       - openstack/tap-as-a-service
       - openstack/tempest
 
-- job:
-    name: legacy-periodic-tempest-dsvm-networking-midonet-aio-ml2-newton
-    parent: legacy-dsvm-base
-    run: playbooks/legacy/periodic-tempest-dsvm-networking-midonet-aio-ml2-newton/run
-    post-run: playbooks/legacy/periodic-tempest-dsvm-networking-midonet-aio-ml2-newton/post
-    branches: stable/newton
-    timeout: 7800
-    required-projects:
-      - openstack-infra/devstack-gate
-      - openstack/networking-l2gw
-      - openstack/networking-midonet
-      - openstack/neutron-dynamic-routing
-      - openstack/tap-as-a-service
-      - openstack/tempest
-
 - job:
     name: legacy-periodic-tempest-dsvm-networking-midonet-aio-v2-full-ocata
     parent: legacy-dsvm-base
@@ -5193,21 +5139,6 @@
       - openstack/tap-as-a-service
       - openstack/tempest
 
-- job:
-    name: legacy-periodic-tempest-dsvm-networking-midonet-aio-v2-newton
-    parent: legacy-dsvm-base
-    run: playbooks/legacy/periodic-tempest-dsvm-networking-midonet-aio-v2-newton/run
-    post-run: playbooks/legacy/periodic-tempest-dsvm-networking-midonet-aio-v2-newton/post
-    branches: stable/newton
-    timeout: 7800
-    required-projects:
-      - openstack-infra/devstack-gate
-      - openstack/networking-l2gw
-      - openstack/networking-midonet
-      - openstack/neutron-dynamic-routing
-      - openstack/tap-as-a-service
-      - openstack/tempest
-
 - job:
     name: legacy-periodic-tempest-dsvm-networking-sfc
     parent: legacy-dsvm-base
@@ -7704,25 +7635,6 @@
     required-projects:
       - openstack/requirements
 
-- job:
-    name: legacy-swift-tox-xfs-tmp-func-fast-post
-    parent: legacy-base
-    run: playbooks/legacy/swift-tox-xfs-tmp-func-fast-post/run
-    post-run: playbooks/legacy/swift-tox-xfs-tmp-func-fast-post/post
-    timeout: 2400
-    required-projects:
-      - openstack/requirements
-
-- job:
-    name: legacy-swift-tox-xfs-tmp-func-fast-post-centos-7
-    parent: legacy-base
-    run: playbooks/legacy/swift-tox-xfs-tmp-func-fast-post-centos-7/run
-    post-run: playbooks/legacy/swift-tox-xfs-tmp-func-fast-post-centos-7/post
-    timeout: 2400
-    nodeset: legacy-centos-7
-    required-projects:
-      - openstack/requirements
-
 - job:
     name: legacy-swift-tox-xfs-tmp-func-post-as-copy
     parent: legacy-base