Merge pull request #666 from HelenCampbell/release
[puppet-modules/puppetlabs-apt.git] / manifests / backports.pp
index 147801e6e8042541fc804a3a2a92b564ef0ac9f1..f7e85f59ed9744fdaaaa8ce7b46d9b788e23ce60 100644 (file)
@@ -1,45 +1,65 @@
-# This adds the necessary components to get backports for ubuntu and debian
-#
-# == Parameters
-#
-# [*release*]
-#   The ubuntu/debian release name. Defaults to $lsbdistcodename. Setting this
-#   manually can cause undefined behavior. (Read: universe exploding)
-#
-# == Examples
-#
-#   include apt::backports
-#
-#   class { 'apt::backports':
-#     release => 'natty',
-#   }
-#
-# == Authors
-#
-# Ben Hughes, I think. At least blame him if this goes wrong. I just added puppet doc.
-#
-# == Copyright
-#
-# Copyright 2011 Puppet Labs Inc, unless otherwise noted.
-class apt::backports(
-  $release  = $::lsbdistcodename,
-  $location = $apt::params::backports_location
-) inherits apt::params {
+class apt::backports (
+  $location = undef,
+  $release  = undef,
+  $repos    = undef,
+  $key      = undef,
+  $pin      = 200,
+){
+  if $location {
+    validate_string($location)
+    $_location = $location
+  }
+  if $release {
+    validate_string($release)
+    $_release = $release
+  }
+  if $repos {
+    validate_string($repos)
+    $_repos = $repos
+  }
+  if $key {
+    unless is_hash($key) {
+      validate_string($key)
+    }
+    $_key = $key
+  }
+  if ($::apt::xfacts['lsbdistid'] == 'debian' or $::apt::xfacts['lsbdistid'] == 'ubuntu') {
+    unless $location {
+      $_location = $::apt::backports['location']
+    }
+    unless $release {
+      $_release = "${::apt::xfacts['lsbdistcodename']}-backports"
+    }
+    unless $repos {
+      $_repos = $::apt::backports['repos']
+    }
+    unless $key {
+      $_key =  $::apt::backports['key']
+    }
+  } else {
+    unless $location and $release and $repos and $key {
+      fail('If not on Debian or Ubuntu, you must explicitly pass location, release, repos, and key')
+    }
+  }
 
-  $release_real = downcase($release)
+  if is_hash($pin) {
+    $_pin = $pin
+  } elsif is_numeric($pin) or is_string($pin) {
+    # apt::source defaults to pinning to origin, but we should pin to release
+    # for backports
+    $_pin = {
+      'priority' => $pin,
+      'release'  => $_release,
+    }
+  } else {
+    fail('pin must be either a string, number or hash')
+  }
 
   apt::source { 'backports':
-    location   => $location,
-    release    => "${release_real}-backports",
-    repos      => $::lsbdistid ? {
-      'debian' => 'main contrib non-free',
-      'ubuntu' => 'universe multiverse restricted',
-    },
-    key        => $::lsbdistid ? {
-      'debian' => '55BE302B',
-      'ubuntu' => '437D05B5',
-    },
-    key_server => 'pgp.mit.edu',
-    pin        => '200',
+    location => $_location,
+    release  => $_release,
+    repos    => $_repos,
+    key      => $_key,
+    pin      => $_pin,
   }
 }