From 8347b74ace1758952d61da9a7d6b3f91ce8edddb Mon Sep 17 00:00:00 2001
From: "James E. Blair" <jeblair@hp.com>
Date: Thu, 18 Sep 2014 13:05:06 -0700
Subject: [PATCH] Switch zuul and zuul-dev to project-config

Start using the project-config repo for Zuul.  Stop managing
/etc/zuul/layout in the zuul module itself in favor of the
project_config module.

Change-Id: I46ddb22c53783c0cffa665959f708b0568abd25f
---
 manifests/site.pp                             |  2 ++
 .../openstack_project/manifests/zuul_dev.pp   | 24 ++++++-------
 .../openstack_project/manifests/zuul_prod.pp  | 22 +++++-------
 modules/project_config/manifests/init.pp      | 35 +++++++++++++++++++
 modules/zuul/manifests/init.pp                |  5 ---
 modules/zuul/manifests/server.pp              | 14 ++++++++
 6 files changed, 71 insertions(+), 31 deletions(-)
 create mode 100644 modules/project_config/manifests/init.pp

diff --git a/manifests/site.pp b/manifests/site.pp
index 56c038c4f7..91c558853c 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -464,6 +464,7 @@ node 'nodepool.openstack.org' {
 # Node-OS: precise
 node 'zuul.openstack.org' {
   class { 'openstack_project::zuul_prod':
+    project_config_repo            => 'https://git.openstack.org/openstack-infra/project-config',
     gerrit_server                  => 'review.openstack.org',
     gerrit_user                    => 'jenkins',
     gerrit_ssh_host_key            => hiera('gerrit_ssh_rsa_pubkey_contents', 'XXX'),
@@ -549,6 +550,7 @@ node 'zm04.openstack.org' {
 # Node-OS: precise
 node 'zuul-dev.openstack.org' {
   class { 'openstack_project::zuul_dev':
+    project_config_repo  => 'https://git.openstack.org/openstack-infra/project-config',
     gerrit_server        => 'review-dev.openstack.org',
     gerrit_user          => 'zuul-dev',
     zuul_ssh_private_key => hiera('zuul_dev_ssh_private_key_contents', 'XXX'),
diff --git a/modules/openstack_project/manifests/zuul_dev.pp b/modules/openstack_project/manifests/zuul_dev.pp
index a83acd9467..0999c9291f 100644
--- a/modules/openstack_project/manifests/zuul_dev.pp
+++ b/modules/openstack_project/manifests/zuul_dev.pp
@@ -12,6 +12,7 @@ class openstack_project::zuul_dev(
   $sysadmins = [],
   $statsd_host = '',
   $gearman_workers = [],
+  $project_config_repo = '',
 ) {
 
   realize (
@@ -28,6 +29,11 @@ class openstack_project::zuul_dev(
     sysadmins                 => $sysadmins,
   }
 
+  class { 'project_config':
+    url  => $project_config_repo,
+    base => 'dev/',
+  }
+
   class { '::zuul':
     vhost_name           => $vhost_name,
     gearman_server       => $gearman_server,
@@ -43,7 +49,11 @@ class openstack_project::zuul_dev(
     git_name             => 'OpenStack Jenkins',
   }
 
-  class { '::zuul::server': }
+  class { '::zuul::server':
+    layout_dir => $::project_config::zuul_layout_dir,
+    require    => $::project_config::config_dir,
+  }
+
   class { '::zuul::merger': }
 
   if $gerrit_ssh_host_key != '' {
@@ -65,18 +75,6 @@ class openstack_project::zuul_dev(
     }
   }
 
-  file { '/etc/zuul/layout/layout.yaml':
-    ensure => present,
-    source => 'puppet:///modules/openstack_project/zuul/layout-dev.yaml',
-    notify => Exec['zuul-reload'],
-  }
-
-  file { '/etc/zuul/layout/openstack_functions.py':
-    ensure => present,
-    source => 'puppet:///modules/openstack_project/zuul/openstack_functions.py',
-    notify => Exec['zuul-reload'],
-  }
-
   file { '/etc/zuul/logging.conf':
     ensure => present,
     source => 'puppet:///modules/openstack_project/zuul/logging.conf',
diff --git a/modules/openstack_project/manifests/zuul_prod.pp b/modules/openstack_project/manifests/zuul_prod.pp
index 9671963a97..6ce7c02b70 100644
--- a/modules/openstack_project/manifests/zuul_prod.pp
+++ b/modules/openstack_project/manifests/zuul_prod.pp
@@ -20,6 +20,7 @@ class openstack_project::zuul_prod(
   $sysadmins = [],
   $statsd_host = '',
   $gearman_workers = [],
+  $project_config_repo = '',
 ) {
   # Turn a list of hostnames into a list of iptables rules
   $iptables_rules = regsubst ($gearman_workers, '^(.*)$', '-m state --state NEW -m tcp -p tcp --dport 4730 -s \1 -j ACCEPT')
@@ -31,6 +32,10 @@ class openstack_project::zuul_prod(
     sysadmins                 => $sysadmins,
   }
 
+  class { 'project_config':
+    url  => $project_config_repo,
+  }
+
   class { '::zuul':
     vhost_name                     => $vhost_name,
     gearman_server                 => $gearman_server,
@@ -54,7 +59,10 @@ class openstack_project::zuul_prod(
     swift_default_logserver_prefix => $swift_default_logserver_prefix,
   }
 
-  class { '::zuul::server': }
+  class { '::zuul::server':
+    layout_dir => $::project_config::zuul_layout_dir,
+    require    => $::project_config::config_dir,
+  }
 
   if $gerrit_ssh_host_key != '' {
     file { '/home/zuul/.ssh':
@@ -75,18 +83,6 @@ class openstack_project::zuul_prod(
     }
   }
 
-  file { '/etc/zuul/layout/layout.yaml':
-    ensure => present,
-    source => 'puppet:///modules/openstack_project/zuul/layout.yaml',
-    notify => Exec['zuul-reload'],
-  }
-
-  file { '/etc/zuul/layout/openstack_functions.py':
-    ensure => present,
-    source => 'puppet:///modules/openstack_project/zuul/openstack_functions.py',
-    notify => Exec['zuul-reload'],
-  }
-
   file { '/etc/zuul/logging.conf':
     ensure => present,
     source => 'puppet:///modules/openstack_project/zuul/logging.conf',
diff --git a/modules/project_config/manifests/init.pp b/modules/project_config/manifests/init.pp
new file mode 100644
index 0000000000..1f440bd152
--- /dev/null
+++ b/modules/project_config/manifests/init.pp
@@ -0,0 +1,35 @@
+# Copyright 2014 Hewlett-Packard Development Company, L.P.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# Class: project_config
+#
+
+class project_config(
+  $url = '',
+  $base = '',
+) {
+
+  $config_dir = Vcsrepo['/etc/project-config']
+
+  if (!defined($config_dir)) {
+    vcsrepo { '/etc/project-config':
+      ensure   => latest,
+      provider => git,
+      revision => 'master',
+      source   => $url,
+    }
+  }
+
+  $zuul_layout_dir = "/etc/project-config/${base}zuul"
+}
diff --git a/modules/zuul/manifests/init.pp b/modules/zuul/manifests/init.pp
index 8b2b5ec837..59bcd3f6b7 100644
--- a/modules/zuul/manifests/init.pp
+++ b/modules/zuul/manifests/init.pp
@@ -146,11 +146,6 @@ class zuul (
     ensure => directory,
   }
 
-  file { '/etc/zuul/layout':
-    ensure  => directory,
-    require => File['/etc/zuul'],
-  }
-
 # TODO: We should put in  notify either Service['zuul'] or Exec['zuul-reload']
 #       at some point, but that still has some problems.
   file { '/etc/zuul/zuul.conf':
diff --git a/modules/zuul/manifests/server.pp b/modules/zuul/manifests/server.pp
index c0c8f4ed3a..c744b97c31 100644
--- a/modules/zuul/manifests/server.pp
+++ b/modules/zuul/manifests/server.pp
@@ -16,6 +16,7 @@
 # == Class: zuul::server
 #
 class zuul::server (
+  $layout_dir = '',
 ) {
   service { 'zuul':
     name       => 'zuul',
@@ -30,6 +31,19 @@ class zuul::server (
     refreshonly => true,
   }
 
+  file { '/etc/zuul/layout':
+    ensure  => directory,
+    owner   => 'root',
+    group   => 'root',
+    mode    => '0755',
+    recurse => true,
+    purge   => true,
+    force   => true,
+    source  => $layout_dir,
+    require => File['/etc/zuul'],
+    notify  => Exec['zuul-reload'],
+  }
+
   include logrotate
   logrotate::file { 'zuul.log':
     log     => '/var/log/zuul/zuul.log',