-# 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:
#
-# == Authors
+# - Debian: 'main contrib non-free'
#
-# Ben Hughes, I think. At least blame him if this goes wrong. I just added puppet doc.
+# - Ubuntu: 'main universe multiverse restricted'
#
-# == Copyright
+# @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:
#
-# Copyright 2011 Puppet Labs Inc, unless otherwise noted.
-class apt::backports(
- $release = $lsbdistcodename,
- $location = $apt::params::backports_location
-) inherits apt::params {
+# - Debian: 'A1BD8E9D78F7FE5C3E65D8AF8B48AD6246925553'
+#
+# - Ubuntu: '630239CC130E1A7FD81A27B140976EAF437D05B5'
+#
+# @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.
+#
+# @param include
+# Specifies whether to include 'deb' or 'src', or both.
+#
+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
+
+ if $location {
+ $_location = $location
+ }
+ 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']
+ }
- $release_real = downcase($release)
+ 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.list':
- 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',
- notify => Exec["apt_update"],
+ apt::source { 'backports':
+ location => $_location,
+ release => $_release,
+ repos => $_repos,
+ include => $include,
+ key => $_key,
+ pin => $_pin,
}
}