As the apt pinnings are parsed in ascending alphabetical order with
first match wins within a given scope it is useful to be able to specify
a ordering parameter. Then the name parameter can be kept to something
meaningful.
define apt::pin(
$ensure = present,
define apt::pin(
$ensure = present,
$packages = '*',
$priority = 0,
$release = '',
$packages = '*',
$priority = 0,
$release = '',
$preferences_d = $apt::params::preferences_d
$preferences_d = $apt::params::preferences_d
+ if $order != '' and !is_integer($order) {
+ fail('Only integers are allowed in the apt::pin order param')
+ }
+
if $release != '' {
$pin = "release a=${release}"
} elsif $origin != '' {
if $release != '' {
$pin = "release a=${release}"
} elsif $origin != '' {
$pin = "release a=${name}"
}
$pin = "release a=${name}"
}
+ $path = $order ? {
+ '' => "${preferences_d}/${name}.pref",
+ default => "${preferences_d}/${order}-${name}.pref",
+ }
file { "${name}.pref":
ensure => $ensure,
file { "${name}.pref":
ensure => $ensure,
- path => "${preferences_d}/${name}.pref",
owner => root,
group => root,
mode => '0644',
owner => root,
group => root,
mode => '0644',
let :default_params do
{
:ensure => 'present',
let :default_params do
{
:ensure => 'present',
:packages => '*',
:priority => '0',
:release => nil
:packages => '*',
:priority => '0',
:release => nil
:packages => 'apache',
:priority => '1'
},
:packages => 'apache',
:priority => '1'
},
+ {
+ :order => 50,
+ :packages => 'apache',
+ :priority => '1'
+ },
{
:ensure => 'absent',
:packages => 'apache',
{
:ensure => 'absent',
:packages => 'apache',
it { should contain_file("#{title}.pref").with({
'ensure' => param_hash[:ensure],
it { should contain_file("#{title}.pref").with({
'ensure' => param_hash[:ensure],
- 'path' => "/etc/apt/preferences.d/#{title}.pref",
+ 'path' => "/etc/apt/preferences.d/#{param_hash[:order] == '' ? "" : "#{param_hash[:order]}-"}#{title}.pref",
'owner' => 'root',
'group' => 'root',
'mode' => '0644',
'owner' => 'root',
'group' => 'root',
'mode' => '0644',