fix for $lsbdistcodename regression introduced by ac166366d7

What happened here was the $codename = $::lsbdistcodename was removed from
init.pp and replaced with just $::lsbdistcodename whereever $codename was
used. Then in the sources.list.erb and preferences files things were changed
like this:

<pre>+### Debian current: <%= codename = scope.lookupvar('::lsbdistcodename') %>
...
-deb <%= debian_url %> <%= codename %> <%= repos %>
...
+deb <%= debian_url=scope.lookupvar('apt::debian_url') %> <%= codename %> <%= repos=scope.lookupvar('apt::repos') %>
</pre>

This meant that the codename was always set to lsbdistcodename, and you because
in newer puppet versions you cannot assign a value to a top-level facter
variable, it is not possible to change this.

Because we cannot change $lsbdistcodename, we have to fix this by allowing the
user to pass a different, non-top-level scoped variable to the class as a
parameter, which defaults to $::lsbdistcodename, so that upgrades can be
triggered.

This is documented in the README in an upgrade notice
This commit is contained in:
Micah Anderson 2012-12-05 13:46:23 -05:00
parent 460c1d54d1
commit 07a031f205
9 changed files with 61 additions and 45 deletions

28
README
View file

@ -31,6 +31,17 @@ Ubuntu support is lagging behind but not absent either.
class { 'apt': debian_url => "http://localhost:9999/debian/", use_next_release => true } class { 'apt': debian_url => "http://localhost:9999/debian/", use_next_release => true }
previously, you could manually set $lsbdistcodename which would enable forced
upgrades, but because this is a top-level facter variable, and newer puppet
versions do not let you assign variables to other namespaces, this is no
longer possible. However, there is a way to obtain this functionality, and
that is to pass the 'codename' parameter to the apt class, which will change
the sources.list and preferences files to be the codename you set, allowing
you to trigger upgrades:
include apt::dist_upgrade
class { 'apt': codename => 'wheezy', notify => Exec['apt_dist-upgrade'] }
* the apticron class has been moved to a parameterized class. if you were * the apticron class has been moved to a parameterized class. if you were
including this class before, you will need to move to instantiating the including this class before, you will need to move to instantiating the
class instead. For example, if you had the following in your manifests: class instead. For example, if you had the following in your manifests:
@ -106,13 +117,6 @@ site_apt/files/some.host.com/03clean_vserver)
Variables Variables
========= =========
$::lsbdistcodename
----------------
Contains the codename ("etch", "lenny", ...) of the client's
release. While these values come from lsb-release by default, this
value can be set manually too, e.g. to enable forced upgrades.
$custom_sources_list $custom_sources_list
-------------------- --------------------
@ -219,6 +223,16 @@ apt/preferences file to be absent:
class { 'apt': custom_preferences => false } class { 'apt': custom_preferences => false }
codename
--------
Contains the codename ("squeeze", "wheezy", ...) of the client's release. While
these values come from lsb-release by default, this parameter can be set
manually, e.g. to enable forced upgrades. For example:
include apt::dist_upgrade
class { 'apt': codename => 'wheezy', notify => Exec['apt_dist-upgrade'] }
apt::apticron apt::apticron
------------- -------------

View file

@ -4,6 +4,7 @@
# See LICENSE for the full license granted to you. # See LICENSE for the full license granted to you.
class apt( class apt(
$codename = '',
$use_volatile = false, $use_volatile = false,
$include_src = false, $include_src = false,
$use_next_release = false, $use_next_release = false,
@ -38,16 +39,17 @@ class apt(
include lsb include lsb
# init $release, $next_release, $codename, $next_codename, $release_version # init $release, $next_release, $codename, $next_codename, $release_version
case $::lsbdistcodename { case $codename {
'': { '': {
$codename = $::lsbdistcodename
$release = $::lsbdistrelease $release = $::lsbdistrelease
} }
default: { default: {
$release = debian_release($::lsbdistcodename) $release = debian_release($codename)
} }
} }
$release_version = debian_release_version($::lsbdistcodename) $release_version = debian_release_version($codename)
$next_codename = debian_nextcodename($::lsbdistcodename) $next_codename = debian_nextcodename($codename)
$next_release = debian_nextrelease($release) $next_release = debian_nextrelease($release)
file { file {

View file

@ -3,8 +3,8 @@ class apt::preferences {
concat::fragment{"apt_preferences_header": concat::fragment{"apt_preferences_header":
content => $apt::custom_preferences ? { content => $apt::custom_preferences ? {
'' => $::operatingsystem ? { '' => $::operatingsystem ? {
'debian' => template("apt/${::operatingsystem}/preferences_${::lsbdistcodename}.erb"), 'debian' => template("apt/${::operatingsystem}/preferences_${apt::codename}.erb"),
'ubuntu' => template("apt/${::operatingsystem}/preferences_${::lsbdistcodename}.erb"), 'ubuntu' => template("apt/${::operatingsystem}/preferences_${apt::codename}.erb"),
}, },
default => $custom_preferences default => $custom_preferences
}, },

View file

@ -1,4 +1,4 @@
Explanation: Debian <%= scope.lookupvar('::lsbdistcodename') %> Explanation: Debian <%= codename=scope.lookupvar('apt::codename') %>
Package: * Package: *
Pin: release o=Debian,a=<%= scope.lookupvar('apt::release') %>,v=<%= scope.lookupvar('apt::release_version') %>* Pin: release o=Debian,a=<%= scope.lookupvar('apt::release') %>,v=<%= scope.lookupvar('apt::release_version') %>*
Pin-Priority: 990 Pin-Priority: 990
@ -8,9 +8,9 @@ Package: *
Pin: origin backports.debian.org Pin: origin backports.debian.org
Pin-Priority: 200 Pin-Priority: 200
Explanation: Debian <%= scope.lookupvar('apt::next_release') %> Explanation: Debian <%= next_release=scope.lookupvar('apt::next_release') %>
Package: * Package: *
Pin: release o=Debian,a=<%= scope.lookupvar('apt::next_release') %> Pin: release o=Debian,a=<%= next_release %>
Pin-Priority: 2 Pin-Priority: 2
Explanation: Debian sid Explanation: Debian sid

View file

@ -1,16 +1,16 @@
Explanation: Debian <%= scope.lookupvar('::lsbdistcodename') %> Explanation: Debian <%= codename=scope.lookupvar('apt::codename') %>
Package: * Package: *
Pin: release o=Debian,n=<%= scope.lookupvar('::lsbdistcodename') %> Pin: release o=Debian,n=<%= codename %>
Pin-Priority: 990 Pin-Priority: 990
Explanation: Debian <%= scope.lookupvar('::lsbdistcodename') %>-updates Explanation: Debian <%= codename %>-updates
Package: * Package: *
Pin: release o=Debian,n=<%= scope.lookupvar('::lsbdistcodename') %>-updates Pin: release o=Debian,n=<%= codename %>-updates
Pin-Priority: 990 Pin-Priority: 990
Explanation: Debian <%= scope.lookupvar('apt::next_codename') %> Explanation: Debian <%= next_codename=scope.lookupvar('apt::next_codename') %>
Package: * Package: *
Pin: release o=Debian,n=<%= scope.lookupvar('apt::next_codename') %> Pin: release o=Debian,n=<%= next_codename %>
Pin-Priority: 2 Pin-Priority: 2
Explanation: Debian sid Explanation: Debian sid

View file

@ -1,11 +1,11 @@
Explanation: Debian <%= scope.lookupvar('::lsbdistcodename') %> Explanation: Debian <%= codename=scope.lookupvar('apt::codename') %>
Package: * Package: *
Pin: release o=Debian,n=<%= scope.lookupvar('::lsbdistcodename') %> Pin: release o=Debian,n=<%= codename %>
Pin-Priority: 990 Pin-Priority: 990
Explanation: Debian <%= scope.lookupvar('::lsbdistcodename') %>-updates Explanation: Debian <%= codename %>-updates
Package: * Package: *
Pin: release o=Debian,n=<%= scope.lookupvar('::lsbdistcodename') %>-updates Pin: release o=Debian,n=<%= codename %>-updates
Pin-Priority: 990 Pin-Priority: 990
Explanation: Debian sid Explanation: Debian sid

View file

@ -1,7 +1,7 @@
# This file is managed by puppet # This file is managed by puppet
# all local modifications will be overwritten # all local modifications will be overwritten
### Debian current: <%= codename = scope.lookupvar('::lsbdistcodename') %> ### Debian current: <%= codename=scope.lookupvar('apt::codename') %>
# basic # basic
deb <%= debian_url=scope.lookupvar('apt::debian_url') %> <%= codename %> <%= lrepos=scope.lookupvar('apt::real_repos') %> deb <%= debian_url=scope.lookupvar('apt::debian_url') %> <%= codename %> <%= lrepos=scope.lookupvar('apt::real_repos') %>

View file

@ -1,26 +1,26 @@
Explanation: Ubuntu <%= scope.lookupvar('::lsbdistcodename') %> security Explanation: Ubuntu <%= codename=scope.lookupvar('apt::codename') %> security
Package: * Package: *
Pin: release o=Ubuntu,a=<%= scope.lookupvar('::lsbdistcodename') %>-security Pin: release o=Ubuntu,a=<%= codename %>-security
Pin-Priority: 990 Pin-Priority: 990
Explanation: Ubuntu <%= scope.lookupvar('::lsbdistcodename') %> updates Explanation: Ubuntu <%= codename %> updates
Package: * Package: *
Pin: release o=Ubuntu,a=<%= scope.lookupvar('::lsbdistcodename') %>-updates Pin: release o=Ubuntu,a=<%= codename %>-updates
Pin-Priority: 980 Pin-Priority: 980
Explanation: Ubuntu <%= scope.lookupvar('::lsbdistcodename') %> Explanation: Ubuntu <%= codename %>
Package: * Package: *
Pin: release o=Ubuntu,a=<%= scope.lookupvar('::lsbdistcodename') %> Pin: release o=Ubuntu,a=<%= codename %>
Pin-Priority: 970 Pin-Priority: 970
Explanation: Ubuntu backports Explanation: Ubuntu backports
Package: * Package: *
Pin: release a=<%= scope.lookupvar('::lsbdistcodename') %>-backports Pin: release a=<%= codename %>-backports
Pin-Priority: 200 Pin-Priority: 200
Explanation: Ubuntu <%= scope.lookupvar('apt::next_release') %> Explanation: Ubuntu <%= next_release=scope.lookupvar('apt::next_release') %>
Package: * Package: *
Pin: release o=Ubuntu,a=<%= scope.lookupvar('apt::next_release') %> Pin: release o=Ubuntu,a=<%= next_release %>
Pin-Priority: 2 Pin-Priority: 2
Explanation: Ubuntu fallback Explanation: Ubuntu fallback

View file

@ -1,26 +1,26 @@
# This file is managed by puppet # This file is managed by puppet
# all local modifications will be overwritten # all local modifications will be overwritten
# basic <%= lsbdistcodename=scope.lookupvar('::lsbdistcodename') %> # basic <%= codename=scope.lookupvar('apt::codename') %>
deb <%= ubuntu_url=scope.lookupvar('apt::ubuntu_url') %> <%= lsbdistcodename %> <%= lrepos=scope.lookupvar('apt::real_repos') %> deb <%= ubuntu_url=scope.lookupvar('apt::ubuntu_url') %> <%= codename %> <%= lrepos=scope.lookupvar('apt::real_repos') %>
<% if include_src=scope.lookupvar('apt::include_src') -%> <% if include_src=scope.lookupvar('apt::include_src') -%>
deb-src <%= ubuntu_url %> <%= lsbdistcodename %> <%= lrepos %> deb-src <%= ubuntu_url %> <%= codename %> <%= lrepos %>
<% end -%> <% end -%>
# updates # updates
deb <%= ubuntu_url %> <%= lsbdistcodename %>-updates <%= lrepos %> deb <%= ubuntu_url %> <%= codename %>-updates <%= lrepos %>
<% if include_src -%> <% if include_src -%>
deb-src <%= ubuntu_url %> <%= lsbdistcodename %>-updates <%= lrepos %> deb-src <%= ubuntu_url %> <%= codename %>-updates <%= lrepos %>
<% end -%> <% end -%>
# security suppport # security suppport
deb <%= ubuntu_url %> <%= lsbdistcodename %>-security <%= lrepos %> deb <%= ubuntu_url %> <%= codename %>-security <%= lrepos %>
<% if include_src -%> <% if include_src -%>
deb-src <%= ubuntu_url %> <%= lsbdistcodename %>-security <%= lrepos %> deb-src <%= ubuntu_url %> <%= codename %>-security <%= lrepos %>
<% end -%> <% end -%>
# backports # backports
deb <%= ubuntu_url %> <%= lsbdistcodename %>-backports main <%= lrepos %> deb <%= ubuntu_url %> <%= codename %>-backports main <%= lrepos %>
<% if include_src -%> <% if include_src -%>
deb-src <%= ubuntu_url %> <%= lsbdistcodename %>-backports <%= lrepos %> deb-src <%= ubuntu_url %> <%= codename %>-backports <%= lrepos %>
<% end -%> <% end -%>