X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=manifests%2Fpin.pp;h=7e661f2172f9be2f25b4f48b5b72cb4a86c2f653;hb=65904b214d98c899f390ac6908322fc06e3aca13;hp=a6e3cf8e29cceebd65a772cf42525a2d2f8d0375;hpb=501a1b5627687b13c0809b82db03f9df168fbd7a;p=puppet-modules%2Fpuppetlabs-apt.git diff --git a/manifests/pin.pp b/manifests/pin.pp index a6e3cf8..7e661f2 100644 --- a/manifests/pin.pp +++ b/manifests/pin.pp @@ -2,24 +2,29 @@ # pin a release in apt, useful for unstable repositories define apt::pin( - $ensure = present, - $explanation = "${caller_module_name}: ${name}", - $order = '', - $packages = '*', - $priority = 0, - $release = '', # a= - $origin = '', - $version = '', - $codename = '', # n= - $release_version = '', # v= - $component = '', # c= - $originator = '', # o= - $label = '' # l= + Optional[Enum['file', 'present', 'absent']] $ensure = present, + Optional[String] $explanation = undef, + Variant[Integer] $order = 50, + Variant[String, Array] $packages = '*', + Variant[Numeric, String] $priority = 0, + Optional[String] $release = '', # a= + Optional[String] $origin = '', + Optional[String] $version = '', + Optional[String] $codename = '', # n= + Optional[String] $release_version = '', # v= + Optional[String] $component = '', # c= + Optional[String] $originator = '', # o= + Optional[String] $label = '', # l= ) { - $preferences_d = $apt::params::preferences_d - if $order != '' and !is_integer($order) { - fail('Only integers are allowed in the apt::pin order param') + if $explanation { + $_explanation = $explanation + } else { + if defined('$caller_module_name') { # strict vars check + $_explanation = "${caller_module_name}: ${name}" + } else { + $_explanation = ": ${name}" + } } $pin_release_array = [ @@ -28,13 +33,14 @@ define apt::pin( $release_version, $component, $originator, - $label] + $label, + ] $pin_release = join($pin_release_array, '') # Read the manpage 'apt_preferences(5)', especially the chapter # 'The Effect of APT Preferences' to understand the following logic # and the difference between specific and general form - if is_array($packages) { + if $packages =~ Array { $packages_string = join($packages, ' ') } else { $packages_string = $packages @@ -43,18 +49,17 @@ define apt::pin( if $packages_string != '*' { # specific form if ( $pin_release != '' and ( $origin != '' or $version != '' )) or ( $version != '' and ( $pin_release != '' or $origin != '' )) { - fail('parameters release, origin, and version are mutually exclusive') + fail(translate('parameters release, origin, and version are mutually exclusive')) } } else { # general form if $version != '' { - fail('parameter version cannot be used in general form') + fail(translate('parameter version cannot be used in general form')) } if ( $pin_release != '' and $origin != '' ) { - fail('parameters release and origin are mutually exclusive') + fail(translate('parameters release and origin are mutually exclusive')) } } - # According to man 5 apt_preferences: # The files have either no or "pref" as filename extension # and only contain alphanumeric, hyphen (-), underscore (_) and period @@ -64,16 +69,28 @@ define apt::pin( # be silently ignored. $file_name = regsubst($title, '[^0-9a-z\-_\.]', '_', 'IG') - $path = $order ? { - '' => "${preferences_d}/${file_name}.pref", - default => "${preferences_d}/${order}-${file_name}.pref", - } - file { "${file_name}.pref": - ensure => $ensure, - path => $path, - owner => root, - group => root, - mode => '0644', - content => template('apt/_header.erb', 'apt/pin.pref.erb'), + $headertmp = epp('apt/_header.epp') + + $pinpreftmp = epp('apt/pin.pref.epp', { + 'name' => $name, + 'pin_release' => $pin_release, + 'release' => $release, + 'codename' => $codename, + 'release_version' => $release_version, + 'component' => $component, + 'originator' => $originator, + 'label' => $label, + 'version' => $version, + 'origin' => $origin, + 'explanation' => $_explanation, + 'packages_string' => $packages_string, + 'priority' => $priority, + }) + + apt::setting { "pref-${file_name}": + ensure => $ensure, + priority => $order, + content => "${headertmp}${pinpreftmp}", + notify_update => false, } }