Merge branch 'master' of https://github.com/puppetlabs/puppetlabs-apt
[puppet-modules/puppetlabs-apt.git] / manifests / pin.pp
1 # pin.pp
2 # pin a release in apt, useful for unstable repositories
3
4 define apt::pin(
5   $ensure     = present,
6   $explanation = "${::caller_module_name}: ${name}",
7   $order      = '',
8   $packages   = '*',
9   $priority   = 0,
10   $release    = '',
11   $origin     = '',
12   $originator = '',
13   $version    = ''
14 ) {
15
16   include apt::params
17
18   $preferences_d = $apt::params::preferences_d
19
20   if $order != '' and !is_integer($order) {
21     fail('Only integers are allowed in the apt::pin order param')
22   }
23
24   if $release != '' {
25     $pin = "release a=${release}"
26   } elsif $origin != '' {
27     $pin = "origin \"${origin}\""
28   } elsif $originator != '' {
29     $pin = "release o=${originator}"
30   } elsif $version != '' {
31     $pin = "version ${version}"
32   } else {
33     $pin = "release a=${name}"
34   }
35
36   $path = $order ? {
37     ''      => "${preferences_d}/${name}.pref",
38     default => "${preferences_d}/${order}-${name}.pref",
39   }
40   file { "${name}.pref":
41     ensure  => $ensure,
42     path    => $path,
43     owner   => root,
44     group   => root,
45     mode    => '0644',
46     content => template('apt/pin.pref.erb'),
47   }
48 }