(GH-cat-9) syntax:hiera:yaml fixes
[puppet-modules/puppetlabs-apt.git] / manifests / backports.pp
index 9cfa1c01130c55fd4ce25939f7656b2134744795..1a9ea1bcaefb4c629209cc25543b9e63308d6757 100644 (file)
-# This adds the necessary components to get backports for ubuntu and debian
+# @summary Manages backports.
 #
-# == Parameters
+# @example Set up a backport source for Linux Mint qiana
+#   class { 'apt::backports':
+#     location => 'http://us.archive.ubuntu.com/ubuntu',
+#     release  => 'trusty-backports',
+#     repos    => 'main universe multiverse restricted',
+#     key      => {
+#       id     => '630239CC130E1A7FD81A27B140976EAF437D05B5',
+#       server => 'keyserver.ubuntu.com',
+#     },
+#   }
 #
-# [*release*]
-#   The ubuntu/debian release name. Defaults to $lsbdistcodename. Setting this
-#   manually can cause undefined behavior. (Read: universe exploding)
+# @param location
+#   Specifies an Apt repository containing the backports to manage. Valid options: a string containing a URL. Default value for Debian and
+#   Ubuntu varies:
 #
-# == Examples
+#   - Debian: 'http://deb.debian.org/debian'
 #
-#   include apt::backports
+#   - Ubuntu: 'http://archive.ubuntu.com/ubuntu'
 #
-#   class { 'apt::backports':
-#     release => 'natty',
-#   }
+# @param release
+#   Specifies a distribution of the Apt repository containing the backports to manage. Used in populating the `source.list` configuration file.
+#   Default: on Debian and Ubuntu, `${fact('os.distro.codename')}-backports`. We recommend keeping this default, except on other operating
+#   systems.
+#
+# @param repos
+#   Specifies a component of the Apt repository containing the backports to manage. Used in populating the `source.list` configuration file.
+#   Default value for Debian and Ubuntu varies:
+#
+#   - Debian: 'main contrib non-free'
+#
+#   - Ubuntu: 'main universe multiverse restricted'
+#
+# @param key
+#   Specifies a key to authenticate the backports. Valid options: a string to be passed to the id parameter of the apt::key defined type, or a
+#   hash of parameter => value pairs to be passed to apt::key's id, server, content, source, and/or options parameters. Default value
+#   for Debian and Ubuntu varies:
+#
+#   - Debian: 'A1BD8E9D78F7FE5C3E65D8AF8B48AD6246925553'
 #
-# == Authors
+#   - Ubuntu: '630239CC130E1A7FD81A27B140976EAF437D05B5'
 #
-# Ben Hughes, I think. At least blame him if this goes wrong.
-# I just added puppet doc.
+# @param pin
+#   Specifies a pin priority for the backports. Valid options: a number or string to be passed to the `id` parameter of the `apt::pin` defined
+#   type, or a hash of `parameter => value` pairs to be passed to `apt::pin`'s corresponding parameters.
 #
-# == Copyright
+# @param include
+#   Specifies whether to include 'deb' or 'src', or both.
 #
-# Copyright 2011 Puppet Labs Inc, unless otherwise noted.
-class apt::backports(
-  $release  = $::lsbdistcodename,
-  $location = $apt::params::backports_location
-) inherits apt::params {
+class apt::backports (
+  Optional[String] $location                    = undef,
+  Optional[String] $release                     = undef,
+  Optional[String] $repos                       = undef,
+  Optional[Variant[String, Hash]] $key          = undef,
+  Variant[Integer, String, Hash] $pin           = 200,
+  Variant[Hash] $include                        = {},
+) {
+  include apt
 
-  $release_real = downcase($release)
-  $key = $::lsbdistid ? {
-    'debian' => '46925553',
-    'ubuntu' => '437D05B5',
+  if $location {
+    $_location = $location
   }
-  $repos = $::lsbdistid ? {
-    'debian' => 'main contrib non-free',
-    'ubuntu' => 'main universe multiverse restricted',
+  if $release {
+    $_release = $release
+  }
+  if $repos {
+    $_repos = $repos
+  }
+  if $key {
+    $_key = $key
+  }
+  if (!($facts['os']['name'] == 'Debian' or $facts['os']['name'] == 'Ubuntu')) {
+    unless $location and $release and $repos and $key {
+      fail('If not on Debian or Ubuntu, you must explicitly pass location, release, repos, and key')
+    }
+  }
+  unless $location {
+    $_location = $::apt::backports['location']
+  }
+  unless $release {
+    if fact('os.distro.codename') {
+      $_release = "${fact('os.distro.codename')}-backports"
+    } else {
+      fail('os.distro.codename fact not available: release parameter required')
+    }
+  }
+  unless $repos {
+    $_repos = $::apt::backports['repos']
+  }
+  unless $key {
+    $_key =  $::apt::backports['key']
+  }
+
+  if $pin =~ Hash {
+    $_pin = $pin
+  } elsif $pin =~ Numeric or $pin =~ String {
+    # 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      => $repos,
-    key        => $key,
-    key_server => 'pgp.mit.edu',
-    pin        => '200',
+    location => $_location,
+    release  => $_release,
+    repos    => $_repos,
+    include  => $include,
+    key      => $_key,
+    pin      => $_pin,
   }
 }