X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=manifests%2Fpin.pp;h=935dc226e55bdffb7adebefec965d7b4935859c1;hb=6b5e4d1790022b3389702ebc3d4b63fe9e186888;hp=e6e293e45260db337f3b2d80f4fe2fc74f8bd4d5;hpb=414c57926c21e53222807b42ea9281296988bf6c;p=puppet-modules%2Fpuppetlabs-apt.git diff --git a/manifests/pin.pp b/manifests/pin.pp index e6e293e..935dc22 100644 --- a/manifests/pin.pp +++ b/manifests/pin.pp @@ -3,7 +3,7 @@ define apt::pin( $ensure = present, - $explanation = "${::caller_module_name}: ${name}", + $explanation = "${caller_module_name}: ${name}", $order = '', $packages = '*', $priority = 0, @@ -14,9 +14,8 @@ define apt::pin( $release_version = '', # v= $component = '', # c= $originator = '', # o= - $label = '', # l= + $label = '' # l= ) { - include apt::params $preferences_d = $apt::params::preferences_d @@ -25,48 +24,58 @@ define apt::pin( fail('Only integers are allowed in the apt::pin order param') } - $pin_release = join([ + $pin_release_array = [ $release, $codename, $release_version, $component, $originator, - $label], '') + $label] + $pin_release = join($pin_release_array, '') # Read the manpage 'apt_preferences(5)', especially the chapter - # 'Thea Effect of APT Preferences' to understand the following logic + # 'The Effect of APT Preferences' to understand the following logic # and the difference between specific and general form - if $packages != '*' { # specific form + if is_array($packages) { + $packages_string = join($packages, ' ') + } else { + $packages_string = $packages + } + if $packages_string != '*' { # specific form if ( $pin_release != '' and ( $origin != '' or $version != '' )) or - ( $origin != '' and ( $pin_release != '' or $version != '' )) or ( $version != '' and ( $pin_release != '' or $origin != '' )) { fail('parameters release, origin, and version are mutually exclusive') } - } else { # general form - if $version != '' { fail('parameter version cannot be used in general form') } - - if ( $pin_release != '' and $origin != '' ) or - ( $origin != '' and $pin_release != '' ) { - fail('parmeters release and origin are mutually exclusive') + if ( $pin_release != '' and $origin != '' ) { + fail('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 + # (.) characters. Otherwise APT will print a notice that it has ignored a + # file, unless that file matches a pattern in the + # Dir::Ignore-Files-Silently configuration list - in which case it will + # be silently ignored. + $file_name = regsubst($title, '[^0-9a-z\-_\.]', '_', 'IG') + $path = $order ? { - '' => "${preferences_d}/${name}.pref", - default => "${preferences_d}/${order}-${name}.pref", + '' => "${preferences_d}/${file_name}.pref", + default => "${preferences_d}/${order}-${file_name}.pref", } - file { "${name}.pref": + file { "${file_name}.pref": ensure => $ensure, path => $path, owner => root, group => root, mode => '0644', - content => template('apt/pin.pref.erb'), + content => template('apt/_header.erb', 'apt/pin.pref.erb'), } }