Write the pin preference filename as ${name} rather than ${release}, so
that we can pin more than one thing.
Change apt::source so that when pin is set, that it pins to the origin
rather than the release.
$ensure = present,
$packages = '*',
$priority = 0,
- $release = $name
+ $release = '',
+ $origin = ''
) {
include apt::params
$preferences_d = $apt::params::preferences_d
+ if $release != '' {
+ $pin = "release a=${release}"
+ } elsif $origin != '' {
+ $pin = "origin \"${origin}\""
+ } else {
+ err("Apt::Pin needs either $release or $origin")
+ }
+
file { "${name}.pref":
ensure => $ensure,
path => "${preferences_d}/${name}",
owner => root,
group => root,
mode => '0644',
- content => "# ${name}\nPackage: ${packages}\nPin: release a=${release}\nPin-Priority: ${priority}",
+ content => "# ${name}\nPackage: ${packages}\nPin: ${pin}\nPin-Priority: ${priority}",
}
}
notify => Exec['apt_update'],
}
+
if ($pin != false) and ($ensure == 'present') {
- apt::pin { $release:
+ # Get the host portion out of the url so we can pin to origin
+ $url_split = split($location, '/')
+ $host = $url_split[2]
+
+ apt::pin { $name:
priority => $pin,
- before => File["${name}.list"]
+ before => File["${name}.list"],
+ origin => $host,
}
}