X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=manifests%2Fpin.pp;h=e6e293e45260db337f3b2d80f4fe2fc74f8bd4d5;hb=414c57926c21e53222807b42ea9281296988bf6c;hp=96a3d70643455e96b1eb007961d9b674ad99e7bb;hpb=40f875521715759eddab7315f6d51e6519f016d8;p=puppet-modules%2Fpuppetlabs-apt.git diff --git a/manifests/pin.pp b/manifests/pin.pp index 96a3d70..e6e293e 100644 --- a/manifests/pin.pp +++ b/manifests/pin.pp @@ -2,13 +2,19 @@ # pin a release in apt, useful for unstable repositories define apt::pin( - $ensure = present, - $order = '', - $packages = '*', - $priority = 0, - $release = '', - $origin = '', - $originator = '' + $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= ) { include apt::params @@ -19,14 +25,36 @@ define apt::pin( fail('Only integers are allowed in the apt::pin order param') } - if $release != '' { - $pin = "release a=${release}" - } elsif $origin != '' { - $pin = "origin \"${origin}\"" - } elsif $originator != '' { - $pin = "release o=${originator}" - } else { - $pin = "release a=${name}" + $pin_release = join([ + $release, + $codename, + $release_version, + $component, + $originator, + $label], '') + + # Read the manpage 'apt_preferences(5)', especially the chapter + # 'Thea Effect of APT Preferences' to understand the following logic + # and the difference between specific and general form + if $packages != '*' { # 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') + } + } $path = $order ? { @@ -39,6 +67,6 @@ define apt::pin( owner => root, group => root, mode => '0644', - content => template("apt/pin.pref.erb"), + content => template('apt/pin.pref.erb'), } }