diff --git a/hiera/group/zuul-merger.yaml b/hiera/group/zuul-merger.yaml
new file mode 100644
index 0000000000..47d46cf5e0
--- /dev/null
+++ b/hiera/group/zuul-merger.yaml
@@ -0,0 +1,51 @@
+---
+zuul_sites:
+  - name: 'tarballs.openstack.org'
+    host: 'tarballs.openstack.org'
+    user: 'jenkins'
+    root: '/srv/static'
+
+  - name: 'eavesdrop.openstack.org'
+    host: 'eavesdrop.openstack.org'
+    user: 'jenkins'
+    root: '/srv/static'
+
+  - name: 'static.openstack.org'
+    host: 'static.openstack.org'
+    user: 'jenkins'
+    root: '/srv/static'
+
+  - name: 'docs.openstack.org'
+    host: 'ftp3.ftptoyoursite.com'
+    user: 'openstackdocs'
+    pass: "%{hiera('openstackdocs_ftp_password')}"
+    root: '/web/content'
+
+  - name: 'api.openstack.org'
+    host: 'ftp3.ftptoyoursite.com'
+    user: 'cloudapidocs'
+    pass: "%{hiera('cloudapidocs_ftp_password')}"
+    root: '/web/content'
+
+  - name: 'developer.openstack.org'
+    host: 'ftp3.ftptoyoursite.com'
+    user: 'clouddevdocs'
+    pass: "%{hiera('clouddevdocs_ftp_password')}"
+    root: '/web/content'
+
+zuul_nodes:
+  - name: 'proposal.slave.openstack.org'
+    host: 'proposal.slave.openstack.org'
+    labels: 'proposal'
+
+  - name: 'release.slave.openstack.org'
+    host: 'release.slave.openstack.org'
+    labels: 'release'
+
+  - name: 'wheel-mirror-centos-7.amd64.slave.openstack.org'
+    host: 'wheel-mirror-centos-7.amd64.slave.openstack.org'
+    labels: 'wheel-mirror-centos-7-amd64'
+
+  - name: 'wheel-mirror-ubuntu-trusty-amd64.slave.openstack.org'
+    host: 'wheel-mirror-centos-7.amd64.slave.openstack.org'
+    labels: 'proposal'
diff --git a/manifests/site.pp b/manifests/site.pp
index a3d9cc44c5..2bf81e092c 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -7,47 +7,6 @@
 #
 $elasticsearch_nodes = hiera_array('elasticsearch_nodes')
 $elasticsearch_clients = hiera_array('elasticsearch_clients')
-$zuul_sites = [
-  {
-    name => 'tarballs.openstack.org',
-    host => 'tarballs.openstack.org',
-    user => 'jenkins',
-    root => '/srv/static',
-  },
-  {
-    name => 'eavesdrop.openstack.org',
-    host => 'eavesdrop.openstack.org',
-    user => 'jenkins',
-    root => '/srv/static',
-  },
-  {
-    name => 'static.openstack.org',
-    host => 'static.openstack.org',
-    user => 'jenkins',
-    root => '/srv/static',
-  },
-  {
-    name => 'docs.openstack.org',
-    host => 'ftp3.ftptoyoursite.com',
-    user => 'openstackdocs',
-    pass => hiera('openstackdocs_ftp_password'),
-    root => '/web/content',
-  },
-  {
-    name => 'api.openstack.org',
-    host => 'ftp3.ftptoyoursite.com',
-    user => 'cloudapidocs',
-    pass => hiera('cloudapidocs_ftp_password'),
-    root => '/web/content',
-  },
-  {
-    name => 'developer.openstack.org',
-    host => 'ftp3.ftptoyoursite.com',
-    user => 'clouddevdocs',
-    pass => hiera('clouddevdocs_ftp_password'),
-    root => '/web/content',
-  },
-]
 
 #
 # Default: should at least behave like an openstack server
@@ -943,29 +902,8 @@ node /^zlstatic\d+\.openstack\.org$/ {
     zuul_ssh_private_key => hiera('jenkins_ssh_private_key_contents'),
     project_config_repo  => 'https://git.openstack.org/openstack-infra/project-config',
     sysadmins            => hiera('sysadmins', []),
-    sites                => $zuul_sites,
-    nodes                => [
-      {
-        name   => 'proposal.slave.openstack.org',
-        host   => 'proposal.slave.openstack.org',
-        labels => 'proposal',
-      },
-      {
-        name   => 'release.slave.openstack.org',
-        host   => 'release.slave.openstack.org',
-        labels => 'release',
-      },
-      {
-        name   => 'wheel-mirror-centos-7.amd64.slave.openstack.org',
-        host   => 'wheel-mirror-centos-7.amd64.slave.openstack.org',
-        labels => 'wheel-mirror-centos-7-amd64',
-      },
-      {
-        name   => 'wheel-mirror-ubuntu-trusty-amd64.slave.openstack.org',
-        host   => 'wheel-mirror-centos-7.amd64.slave.openstack.org',
-        labels => 'proposal',
-      },
-    ],
+    sites                => hiera('zuul_sites', []),
+    nodes                => hiera('zuul_nodes', []),
   }
 }
 
@@ -991,7 +929,7 @@ node /^zl\d+\.openstack\.org$/ {
     zuul_ssh_private_key => hiera('jenkins_ssh_private_key_contents'),
     project_config_repo  => 'https://git.openstack.org/openstack-infra/project-config',
     sysadmins            => hiera('sysadmins', []),
-    sites                => $zuul_sites,
+    sites                => hiera('zuul_sites', []),
   }
 }