2431af2a4d0dc02b4df666c1a470a13285b207f3
[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   $codename   = '',
12   $origin     = '',
13   $originator = '',
14   $version    = ''
15 ) {
16
17   include apt::params
18
19   $preferences_d = $apt::params::preferences_d
20
21   if $order != '' and !is_integer($order) {
22     fail('Only integers are allowed in the apt::pin order param')
23   }
24
25   if $release != '' {
26     $pin = "release a=${release}"
27   } elsif $codename != '' {
28     $pin = "release n=${codename}"
29   } elsif $origin != '' {
30     $pin = "origin \"${origin}\""
31   } elsif $originator != '' {
32     $pin = "release o=${originator}"
33   } elsif $version != '' {
34     $pin = "version ${version}"
35   } else {
36     $pin = "release a=${name}"
37   }
38
39   $path = $order ? {
40     ''      => "${preferences_d}/${name}.pref",
41     default => "${preferences_d}/${order}-${name}.pref",
42   }
43   file { "${name}.pref":
44     ensure  => $ensure,
45     path    => $path,
46     owner   => root,
47     group   => root,
48     mode    => '0644',
49     content => template('apt/pin.pref.erb'),
50   }
51 }