diff --git a/modules/gerritbot/files/gerritbot_channel_config.yaml b/modules/gerritbot/files/gerritbot_channel_config.yaml
index 4cb5fc1a6c..823876b591 100644
--- a/modules/gerritbot/files/gerritbot_channel_config.yaml
+++ b/modules/gerritbot/files/gerritbot_channel_config.yaml
@@ -37,6 +37,7 @@ openstack-infra:
       - openstack-infra/puppet-storyboard
       - openstack-infra/puppet-vcsrepo
       - openstack-infra/puppet-yum
+      - openstack-infra/puppet-zuul
       - openstack-infra/pypi-mirror
       - openstack-infra/release-tools
       - openstack-infra/releasestatus
@@ -682,6 +683,7 @@ openstack-merges:
       - openstack-infra/puppet-storyboard
       - openstack-infra/puppet-vcsrepo
       - openstack-infra/puppet-yum
+      - openstack-infra/puppet-zuul
       - openstack-infra/pypi-mirror
       - openstack-infra/releasestatus
       - openstack-infra/reviewday
diff --git a/modules/openstack_project/files/gerrit/acls/openstack-infra/puppet-zuul.config b/modules/openstack_project/files/gerrit/acls/openstack-infra/puppet-zuul.config
new file mode 100644
index 0000000000..7f0690c49e
--- /dev/null
+++ b/modules/openstack_project/files/gerrit/acls/openstack-infra/puppet-zuul.config
@@ -0,0 +1,8 @@
+[access "refs/heads/*"]
+        label-Code-Review = -2..+2 group openstack-ci-core
+        label-Workflow = -1..+1 group openstack-ci-core
+        abandon = group openstack-ci-core
+[receive]
+        requireChangeId = true
+[submit]
+        mergeContent = true
diff --git a/modules/openstack_project/files/review.projects.yaml b/modules/openstack_project/files/review.projects.yaml
index 98fbfd8d6a..640736c9de 100644
--- a/modules/openstack_project/files/review.projects.yaml
+++ b/modules/openstack_project/files/review.projects.yaml
@@ -158,6 +158,9 @@
 - project: openstack-infra/puppet-yum
   group: openstack-ci
   upstream: git://github.com/dprince/puppet-yum.git
+- project: openstack-infra/puppet-zuul
+  description: Puppet module to install and configure zuul
+  group: openstack-ci
 - project: openstack-infra/pypi-mirror
   group: openstack-ci
   upstream: git://github.com/openstack-infra/jeepyb.git
diff --git a/modules/openstack_project/files/zuul/layout.yaml b/modules/openstack_project/files/zuul/layout.yaml
index 0b0c1bb935..9e8e80baeb 100644
--- a/modules/openstack_project/files/zuul/layout.yaml
+++ b/modules/openstack_project/files/zuul/layout.yaml
@@ -2800,6 +2800,14 @@ projects:
       - gate-config-puppet-lint
       - gate-config-puppet-syntax
 
+  - name: openstack-infra/puppet-zuul
+    check:
+      - gate-config-puppet-lint
+      - gate-config-puppet-syntax
+    gate:
+      - gate-config-puppet-lint
+      - gate-config-puppet-syntax
+
   - name: openstack-infra/puppet-vcsrepo
     check:
       - noop