From cfb6d326f40c2ee79b5efc6905528de1df7432de Mon Sep 17 00:00:00 2001
From: Clark Boylan <clark.boylan@gmail.com>
Date: Mon, 8 Oct 2012 18:29:01 -0700
Subject: [PATCH] Use puppetlabs apt repo and pin puppet version.

In openstack_project::base use the Apt module to configure the upstream
puppet labs apt repository and pin puppet to version 2.7.*.

Change-Id: I0a09e02e3d26eb9452215e5bccef143487e9e58d
Reviewed-on: https://review.openstack.org/14194
Approved: James E. Blair <corvus@inaugust.com>
Reviewed-by: James E. Blair <corvus@inaugust.com>
Tested-by: Jenkins
---
 install_jenkins_slave.sh                      |  7 ++++++
 modules/jenkins/manifests/master.pp           |  1 -
 modules/jenkins/manifests/slave.pp            |  1 -
 .../openstack_project/files/00-puppet.pref    |  3 +++
 modules/openstack_project/manifests/base.pp   | 25 ++++++++++++-------
 5 files changed, 26 insertions(+), 11 deletions(-)
 create mode 100644 modules/openstack_project/files/00-puppet.pref

diff --git a/install_jenkins_slave.sh b/install_jenkins_slave.sh
index 9d8042cc78..4e5d22d26e 100755
--- a/install_jenkins_slave.sh
+++ b/install_jenkins_slave.sh
@@ -1,9 +1,16 @@
 #!/bin/bash
 
+cat > /etc/apt/preferences.d/00-puppet.pref <<EOF
+Package: puppet puppet-common puppetmaster puppetmaster-common
+Pin: version 2.7*
+Pin-Priority: 501
+EOF
+
 lsbdistcodename=`lsb_release -c -s`
 puppet_deb=puppetlabs-release-${lsbdistcodename}.deb
 wget http://apt.puppetlabs.com/$puppet_deb -O $puppet_deb
 dpkg -i $puppet_deb
+
 apt-get update
 apt-get install -y puppet git rubygems
 
diff --git a/modules/jenkins/manifests/master.pp b/modules/jenkins/manifests/master.pp
index 957637e645..cce3636243 100644
--- a/modules/jenkins/manifests/master.pp
+++ b/modules/jenkins/manifests/master.pp
@@ -77,7 +77,6 @@ class jenkins::master(
 
   $packages = [
     'python-babel',
-    'wget',
   ]
 
   package { $packages:
diff --git a/modules/jenkins/manifests/slave.pp b/modules/jenkins/manifests/slave.pp
index ac82bfe672..7f64051d30 100644
--- a/modules/jenkins/manifests/slave.pp
+++ b/modules/jenkins/manifests/slave.pp
@@ -41,7 +41,6 @@ class jenkins::slave($ssh_key, $sudo = false, $bare = false, $user = true) {
                  "rubygems",
                  "sqlite3",
                  "unzip",
-                 "wget",
                  "xsltproc", # for building openstack docs
                  "xvfb", # for selenium tests
                  "pyflakes"]
diff --git a/modules/openstack_project/files/00-puppet.pref b/modules/openstack_project/files/00-puppet.pref
new file mode 100644
index 0000000000..f2c442da00
--- /dev/null
+++ b/modules/openstack_project/files/00-puppet.pref
@@ -0,0 +1,3 @@
+Package: puppet puppet-common puppetmaster puppetmaster-common
+Pin: version 2.7*
+Pin-Priority: 501
diff --git a/modules/openstack_project/manifests/base.pp b/modules/openstack_project/manifests/base.pp
index e7786a6f51..cd70e50c41 100644
--- a/modules/openstack_project/manifests/base.pp
+++ b/modules/openstack_project/manifests/base.pp
@@ -2,6 +2,7 @@ class openstack_project::base(
   $certname = $::fqdn,
   $install_users = true
 ) {
+  include apt
   include openstack_project::users
   include sudoers
 
@@ -14,7 +15,6 @@ class openstack_project::base(
   }
 
   if ($::lsbdistcodename == 'oneiric') {
-    include apt
     apt::ppa { 'ppa:git-core/ppa': }
     package { 'git':
       ensure  => latest,
@@ -29,6 +29,7 @@ class openstack_project::base(
   $packages = [
     'puppet',
     'python-setuptools',
+    'wget',
   ]
 
   package { $packages:
@@ -57,15 +58,21 @@ class openstack_project::base(
     )
   }
 
-  # Download and set up puppet apt repo
-  exec { "download:puppetlabs-release-$::{lsbdistcodename}.deb":
-    command => "/usr/bin/wget http://apt.puppetlabs.com/puppetlabs-release-$::{lsbdistcodename}.deb -O /root/puppetlabs-release-$::{lsbdistcodename}.deb",
-    creates => "/root/puppetlabs-release-$::{lsbdistcodename}.deb",
+  # Use upstream puppet and pin to version 2.7.*
+  apt::source { 'puppetlabs':
+    location   => 'http://apt.puppetlabs.com',
+    repos      => 'main',
+    key        => '4BD6EC30',
+    key_server => 'pgp.mit.edu',
   }
-  exec { "dpkg:puppetlabs-release-$::{lsbdistcodename}.deb":
-    command => "/usr/bin/dpkg -i /root/puppetlabs-release-$::{lsbdistcodename}.deb",
-    onlyif  => '/usr/bin/test ! -f /etc/apt/sources.list.d/puppetlabs.list',
-    require => Exec["download:puppetlabs-release-$::{lsbdistcodename}.deb"],
+
+  file { '/etc/apt/preferences.d/00-puppet.pref':
+    ensure  => present,
+    owner   => 'root',
+    group   => 'root',
+    mode    => '0444',
+    source  => 'puppet:///modules/openstack_project/00-puppet.pref',
+    replace => true,
   }
 
   file { '/etc/puppet/puppet.conf':