diff --git a/playbooks/legacy/loci/post.yaml b/playbooks/legacy/loci/post.yaml
deleted file mode 100644
index e07f5510..00000000
--- a/playbooks/legacy/loci/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/loci/run.yaml b/playbooks/legacy/loci/run.yaml
deleted file mode 100644
index 52fc47e1..00000000
--- a/playbooks/legacy/loci/run.yaml
+++ /dev/null
@@ -1,57 +0,0 @@
-- hosts: all
-  name: Autoconverted job legacy-loci from old job gate-{name}-loci-ubuntu-xenial
-  tasks:
-
-    - name: Ensure legacy workspace directory
-      file:
-        path: '{{ ansible_user_dir }}/workspace'
-        state: directory
-
-    - shell:
-        cmd: |
-          set -e
-          set -x
-          CLONEMAP=`mktemp`
-          function cleanup {
-              # In cases where zuul-cloner is aborted during a git
-              # clone operation, git will remove the git work tree in
-              # its cleanup. The work tree in these jobs is the
-              # workspace directory, which means that subsequent
-              # jenkins post-build actions can not run because the
-              # workspace has been removed.
-              # To reduce the likelihood of this having an impact,
-              # recreate the workspace directory if needed
-              mkdir -p $WORKSPACE
-              rm -f $CLONEMAP
-          }
-          trap cleanup EXIT
-          cat > $CLONEMAP << EOF
-          clonemap:
-            - name: $ZUUL_PROJECT
-              dest: .
-          EOF
-          /usr/zuul-env/bin/zuul-cloner -m $CLONEMAP --cache-dir /opt/git \
-              git://git.openstack.org $ZUUL_PROJECT
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          set -e
-          set -x
-          /usr/zuul-env/bin/zuul-cloner --cache-dir /opt/git \
-              git://git.openstack.org openstack/loci
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          set -e
-          set -x
-          openstack/loci/scripts/gate-setup.sh
-          openstack/loci/scripts/run-tests.sh
-        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 9d7c728d..5b450a0e 100644
--- a/zuul.d/zuul-legacy-jobs.yaml
+++ b/zuul.d/zuul-legacy-jobs.yaml
@@ -4520,13 +4520,6 @@
     timeout: 1800
     nodeset: legacy-centos-7
 
-- job:
-    name: legacy-loci
-    parent: legacy-base
-    run: playbooks/legacy/loci/run
-    post-run: playbooks/legacy/loci/post
-    timeout: 3600
-
 - job:
     name: legacy-logstash-filters
     parent: legacy-base
diff --git a/zuul.d/zuul-legacy-project-templates.yaml b/zuul.d/zuul-legacy-project-templates.yaml
index dcbe5afa..6a043e53 100644
--- a/zuul.d/zuul-legacy-project-templates.yaml
+++ b/zuul.d/zuul-legacy-project-templates.yaml
@@ -967,15 +967,6 @@
       jobs:
         - legacy-tempest-dsvm-neutron-src-plugin
 
-- project-template:
-    name: loci-jobs
-    check:
-      jobs:
-        - legacy-loci
-    gate:
-      jobs:
-        - legacy-loci
-
 - project-template:
     name: merge-check
     merge-check: