Skip to content

Instantly share code, notes, and snippets.

@mbornoz
Created June 13, 2013 08:34
Show Gist options
  • Save mbornoz/5772142 to your computer and use it in GitHub Desktop.
Save mbornoz/5772142 to your computer and use it in GitHub Desktop.
# pin.pp
# pin a release in apt, useful for unstable repositories
define apt::pin(
$ensure = present,
$explanation = "${::caller_module_name}: ${name}",
$order = '',
$packages = '*',
$priority = 0,
$release = '',
$origin = '',
$originator = '',
$version = '',
$codename = '',
$component = '',
$label = '',
) {
include apt::params
$preferences_d = $apt::params::preferences_d
if $order != '' and !is_integer($order) {
fail('Only integers are allowed in the apt::pin order param')
}
# Read the manpage 'apt_preferences', chapter 'The Effect of APT Preferences'
# to understand the following logic
if $packages != '*' { # specific form
# keywords version, release and origin are mutually exclusive
if ( $version != '' and ( $release != '' or $origin != '' )) or
( $release != '' and ( $version != '' or $origin != '' )) or
( $origin != '' and ( $version != '' or $release != '' )) {
fail('keywords version, release and origin are mutually exclusive')
}
$pin =
} else { # specific form
}
if $release != '' {
$pin = "release a=${release}"
} elsif $origin != '' {
$pin = "origin \"${origin}\""
} elsif $originator != '' {
$pin = "release o=${originator}"
} elsif $version != '' {
$pin = "version ${version}"
} elsif $codename != '' {
$pin = "release n=${codename}"
} elsif $component != '' {
$pin = "release c=${component}"
} elsif $label != '' {
$pin = "release l=${label}"
} else {
$pin = "release a=${name}"
}
$path = $order ? {
'' => "${preferences_d}/${name}.pref",
default => "${preferences_d}/${order}-${name}.pref",
}
file { "${name}.pref":
ensure => $ensure,
path => $path,
owner => root,
group => root,
mode => '0644',
content => template('apt/pin.pref.erb'),
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment