From 398e1175f48a4880ebfd6653755a2bd6b7c8d694 Mon Sep 17 00:00:00 2001
From: "James E. Blair" <jeblair@openstack.org>
Date: Wed, 16 Apr 2014 09:50:14 -0700
Subject: [PATCH] Fixes to nodepool installation on jenkins-dev.o.o

The patch to add nodepool to jenkins-dev (https://review.openstack.org/#/c/57333)
did not work.

There were a few issues with it:
  1. jenkins-dev.pp was passing literal strings to the nodepool module, instead it
     should be passing in the variables.
  2. jenkins-dev.pp was calling ::nodepool but puppet seems to think that it wants
     ::openstack_project::nodepool due to puppet's scoping weirdness :(
  3. The script to build nodepool machines needed the jenkins_dev_ssh_key.

Fixes to above issues:
  1. This is trivial, just passed the variables thru instead of literal strings.
  2. The nodepool.pp module is renamed to nodepool_prod.pp to prevent the scoping problem.
  3. We use the dev jenkins ssh key with dev nodepool by allowing the nodepool module
     to pass arbitrary env settings through the defaults file.

Change-Id: Id91053212f088079ff1b0f06ebdce5c381f5cd19
---
 manifests/site.pp                             |  2 +-
 modules/nodepool/manifests/init.pp            |  1 +
 .../nodepool/templates/nodepool.default.erb   |  8 ++--
 .../manifests/jenkins_dev.pp                  | 42 ++++++++++++++-----
 .../{nodepool.pp => nodepool_prod.pp}         |  4 +-
 5 files changed, 40 insertions(+), 17 deletions(-)
 rename modules/openstack_project/manifests/{nodepool.pp => nodepool_prod.pp} (95%)

diff --git a/manifests/site.pp b/manifests/site.pp
index a0f927b504..d87f932a07 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -398,7 +398,7 @@ node 'status.openstack.org' {
 }
 
 node 'nodepool.openstack.org' {
-  class { 'openstack_project::nodepool':
+  class { 'openstack_project::nodepool_prod':
     mysql_password           => hiera('nodepool_mysql_password'),
     mysql_root_password      => hiera('nodepool_mysql_root_password'),
     nodepool_ssh_private_key => hiera('jenkins_ssh_private_key_contents'),
diff --git a/modules/nodepool/manifests/init.pp b/modules/nodepool/manifests/init.pp
index fadb0e7a42..a211509d89 100644
--- a/modules/nodepool/manifests/init.pp
+++ b/modules/nodepool/manifests/init.pp
@@ -27,6 +27,7 @@ class nodepool (
   $vhost_name = 'nodepool.openstack.org',
   $image_log_document_root = '/var/log/nodepool/image',
   $enable_image_log_via_http = false,
+  $environment = {},
 ) {
 
   class { 'mysql::server':
diff --git a/modules/nodepool/templates/nodepool.default.erb b/modules/nodepool/templates/nodepool.default.erb
index 657027e788..a0be88dde9 100644
--- a/modules/nodepool/templates/nodepool.default.erb
+++ b/modules/nodepool/templates/nodepool.default.erb
@@ -1,6 +1,8 @@
-<% if scope.lookupvar("nodepool::statsd_host") != "" %>
+<% if scope.lookupvar("nodepool::statsd_host") != "" -%>
 export STATSD_HOST=<%= scope.lookupvar("nodepool::statsd_host") %>
 export STATSD_PORT=8125
-<% end %>
+<% end -%>
+<% scope.lookupvar("nodepool::environment").keys.sort.each do |key| -%>
+export <%= key %>='<%= scope.lookupvar("nodepool::environment")[key] %>'
+<% end -%>
 DAEMON_ARGS="-c /etc/nodepool/nodepool.yaml -l /etc/nodepool/logging.conf"
-
diff --git a/modules/openstack_project/manifests/jenkins_dev.pp b/modules/openstack_project/manifests/jenkins_dev.pp
index d366fca12a..fe71629a52 100644
--- a/modules/openstack_project/manifests/jenkins_dev.pp
+++ b/modules/openstack_project/manifests/jenkins_dev.pp
@@ -12,6 +12,7 @@ class openstack_project::jenkins_dev (
   $hpcloud_username ='',
   $hpcloud_password ='',
   $hpcloud_project ='',
+  $nodepool_template ='nodepool-dev.yaml.erb',
 ) {
   include openstack_project
 
@@ -44,17 +45,36 @@ class openstack_project::jenkins_dev (
   }
 
   class { '::nodepool':
-    mysql_password           => 'mysql_password',
-    mysql_root_password      => 'mysql_root_password',
-    nodepool_ssh_private_key => 'nodepool_ssh_private_key',
-    nodepool_template        => 'nodepool-dev.yaml.erb',
-    sysadmins                => 'sysadmins',
-    jenkins_api_user         => 'jenkins_api_user',
-    jenkins_api_key          => 'jenkins_api_key',
-    jenkins_credentials_id   => 'jenkins_credentials_id',
-    hpcloud_username         => 'hpcloud_username',
-    hpcloud_password         => 'hpcloud_password',
-    hpcloud_project          => 'hpcloud_project',
+    mysql_root_password      => $mysql_root_password,
+    mysql_password           => $mysql_password,
+    nodepool_ssh_private_key => $nodepool_ssh_private_key,
+    environment              => {
+      'NODEPOOL_SSH_KEY'     => $openstack_project::jenkins_dev_ssh_key,
+    }
+  }
+
+  file { '/etc/nodepool/nodepool.yaml':
+    ensure  => present,
+    owner   => 'nodepool',
+    group   => 'root',
+    mode    => '0400',
+    content => template("openstack_project/nodepool/${nodepool_template}"),
+    require => [
+      File['/etc/nodepool'],
+      User['nodepool'],
+    ],
+  }
+
+  file { '/etc/nodepool/scripts':
+    ensure  => directory,
+    owner   => 'root',
+    group   => 'root',
+    mode    => '0755',
+    recurse => true,
+    purge   => true,
+    force   => true,
+    require => File['/etc/nodepool'],
+    source  => 'puppet:///modules/openstack_project/nodepool/scripts',
   }
 
 }
diff --git a/modules/openstack_project/manifests/nodepool.pp b/modules/openstack_project/manifests/nodepool_prod.pp
similarity index 95%
rename from modules/openstack_project/manifests/nodepool.pp
rename to modules/openstack_project/manifests/nodepool_prod.pp
index faf93725b4..cd5cee8df5 100644
--- a/modules/openstack_project/manifests/nodepool.pp
+++ b/modules/openstack_project/manifests/nodepool_prod.pp
@@ -1,6 +1,6 @@
-# == Class: openstack_project::nodepool
+# == Class: openstack_project::nodepool_prod
 #
-class openstack_project::nodepool(
+class openstack_project::nodepool_prod(
   $mysql_root_password,
   $mysql_password,
   $nodepool_ssh_private_key = '',