new style for 2.7

This commit is contained in:
mh 2012-06-05 21:31:15 -03:00
parent f1a0eca466
commit 39917fb4db
12 changed files with 117 additions and 197 deletions

12
README
View file

@ -45,7 +45,7 @@ site_apt/files/some.host.com/03clean_vserver)
Variables
=========
$lsbdistcodename
$::lsbdistcodename
----------------
Contains the codename ("etch", "lenny", ...) of the client's
@ -173,7 +173,7 @@ defaults, which you are free to change before you include the class:
$apticron_ensure_version = "present"
$apticron_email = "root"
$apticron_config = "apt/${operatingsystem}/apticron_${lsbrelease}.erb"
$apticron_config = "apt/${::operatingsystem}/apticron_${::lsbrelease}.erb"
$apticron_diff_only = "1"
$apticron_listchanges_profile = "apticron"
$apticron_system = false
@ -230,7 +230,7 @@ file's content changes. The initiator file is copied from the first
available source amongst the following ones, in decreasing priority
order:
- puppet:///site_apt/${fqdn}/upgrade_initiator
- puppet:///site_apt/${::fqdn}/upgrade_initiator
- puppet:///site_apt/upgrade_initiator
- puppet:///apt/upgrade_initiator
@ -258,7 +258,7 @@ This class, when included, installs apt-listchanges and configures it using the
following variables, the defaults are below:
$apt_listchanges_version = "present"
$apt_listchanges_config = "apt/${operatingsystem}/listchanges_${lsbrelease}.erb"
$apt_listchanges_config = "apt/${::operatingsystem}/listchanges_${::lsbrelease}.erb"
$apt_listchanges_frontend = "pager"
$apt_listchanges_email = "root"
$apt_listchanges_confirm = "0"
@ -320,7 +320,7 @@ apt::preseeded_package
This simplifies installation of packages for which you wish to preseed the
answers to debconf. For example, if you wish to provide a preseed file for the
locales package, you would place the locales.seed file in
'site_apt/templates/$lsbdistcodename/locales.seeds' and then include the
'site_apt/templates/${::lsbdistcodename}/locales.seeds' and then include the
following in your manifest:
apt::preseeded_package { locales: }
@ -343,7 +343,7 @@ meta-parameter to define content inline or with the help of a template.
Example:
apt::sources_list { "company_internals.list":
source => ["puppet:///modules/site_apt/${fqdn}/company_internals.list",
source => ["puppet:///modules/site_apt/${::fqdn}/company_internals.list",
"puppet:///modules/site_apt/company_internals.list"],
}

View file

@ -1,53 +1,21 @@
class apt::apticron {
class apt::apticron(
$ensure_version = hiera('apticron_ensure_version','installed'),
$config = hiera('apticron_config',"apt/${::operatingsystem}/apticron_${::lsbdistcodename}.erb"),
$email = hiera('apticron_email', 'root'),
$diff_only = hiera('apticron_diff_only', '1'),
$listchanges_profile = hiera('apticron_listchanges_profile','apticron'),
$system = hiera('apticron_system',false),
$ipaddressnum = hiera('apticron_ipaddressnum',false),
$ipaddresses = hiera('apticron_ipaddresses', false),
$notifyholds = hiera('apticron_notifyholds', '0'),
$notifynew = hiera('apticron_notifynew', '0'),
$customsubject = hiera('apticron_customsubject','')
) {
case $apticron_ensure_version {
'': { $apticron_ensure_version = "present" }
}
case $apticron_config {
'': { $apticron_config = "apt/${operatingsystem}/apticron_${lsbdistcodename}.erb" }
}
case $apticron_email {
'': { $apticron_email = "root" }
}
case $apticron_diff_only {
'': { $apticron_diff_only = "1" }
}
case $apticron_listchanges_profile {
'': { $apticron_listchanges_profile = "apticron" }
}
case $apticron_system {
'': { $apticron_system = false }
}
case $apticron_ipaddressnum {
'': { $apticron_ipaddressnum = false }
}
case $apticron_ipaddresses {
'': { $apticron_ipaddresses = false }
}
case $apticron_notifyholds {
'': { $apticron_notifyholds = "0" }
}
case $apticron_notifynew {
'': { $apticron_notifynew = "0" }
}
case $apticron_customsubject {
'': { $apticron_customsubject = "" }
}
package { apticron: ensure => $apticron_ensure_version }
package { apticron: ensure => $ensure_version }
file { "/etc/apticron/apticron.conf":
content => template($apticron_config),
content => template($apt::apticron::config),
mode => 0644, owner => root, group => root,
require => Package["apticron"];
}

View file

@ -10,7 +10,7 @@ class apt::dist_upgrade::initiator inherits apt::dist_upgrade {
path => "${initiator_abs}",
checksum => md5,
source => [
"puppet:///modules/site_apt/${fqdn}/${initiator}",
"puppet:///modules/site_apt/${::fqdn}/${initiator}",
"puppet:///modules/site_apt/${initiator}",
"puppet:///modules/apt/${initiator}",
],

View file

@ -3,54 +3,29 @@
# Copyright (C) 2007 David Schmitt <david@schmitt.edv-bus.at>
# See LICENSE for the full license granted to you.
class apt {
$use_volatile = $apt_volatile_enabled ? {
'' => false,
default => $apt_volatile_enabled,
}
$include_src = $apt_include_src ? {
'' => false,
default => $apt_include_src,
}
$use_next_release = $apt_use_next_release ? {
'' => false,
default => $apt_use_next_release,
}
$debian_url = $apt_debian_url ? {
'' => 'http://cdn.debian.net/debian/',
default => "${apt_debian_url}",
}
$security_url = $apt_security_url ? {
'' => 'http://security.debian.org/',
default => "${apt_security_url}",
}
$backports_url = $apt_backports_url ? {
'' => 'http://backports.debian.org/debian-backports/',
default => "${apt_backports_url}",
}
$volatile_url = $apt_volatile_url ? {
'' => 'http://volatile.debian.org/debian-volatile/',
default => "${apt_volatile_url}",
}
$ubuntu_url = $apt_ubuntu_url ? {
'' => 'http://archive.ubuntu.com/ubuntu',
default => "${apt_ubuntu_url}",
}
case $operatingsystem {
class apt(
$use_volatile = hiera('apt_volatile_enabled',false),
$include_src = hiera('apt_include_src',false),
$use_next_release = hiera('apt_use_next_release'),
$debian_url = hiera('apt_debian_url','http://cdn.debian.net/debian/'),
$security_url = hiera('apt_security_url','http://security.debian.org/'),
$backports_url = hiera('apt_backports_url','http://backports.debian.org/debian-backports/'),
$volatile_url = hiera('apt_volatile_url', 'http://volatile.debian.org/debian-volatile/'),
$ubuntu_url = hiera('apt_ubuntu_url', 'http://archive.ubuntu.com/ubuntu'),
$repos = hiera('apt_repos','auto'),
$custom_preferences = hiera('apt_custom_preferences','')
) {
case $::operatingsystem {
'debian': {
$repos = $apt_repos ? {
'' => 'main contrib non-free',
default => "${apt_repos}",
$real_repos = $repos ? {
'auto' => 'main contrib non-free',
default => $repos,
}
}
'ubuntu': {
$repos = $apt_repos ? {
$real_repos = $repos ? {
'' => 'main restricted universe multiverse',
default => "${apt_repos}",
default => $repos,
}
}
}
@ -63,13 +38,13 @@ class apt {
include lsb
# init $release, $next_release, $codename, $next_codename, $release_version
case $lsbdistcodename {
case $::lsbdistcodename {
'': {
$codename = $lsbdistcodename
$release = $lsbdistrelease
$codename = $::lsbdistcodename
$release = $::lsbdistrelease
}
default: {
$codename = $lsbdistcodename
$codename = $::lsbdistcodename
$release = debian_release($codename)
}
}
@ -82,7 +57,7 @@ class apt {
# additional sources should be included via the apt::sources_list define
"/etc/apt/sources.list":
content => $custom_sources_list ? {
'' => template( "apt/$operatingsystem/sources.list.erb"),
'' => template( "apt/${::operatingsystem}/sources.list.erb"),
default => $custom_sources_list
},
require => Package['lsb'],
@ -90,14 +65,14 @@ class apt {
}
apt_conf { "02show_upgraded":
source => [ "puppet:///modules/site_apt/${fqdn}/02show_upgraded",
source => [ "puppet:///modules/site_apt/${::fqdn}/02show_upgraded",
"puppet:///modules/site_apt/02show_upgraded",
"puppet:///modules/apt/02show_upgraded" ]
}
if ( $virtual == "vserver" ) {
if ( $::virtual == "vserver" ) {
apt_conf { "03clean_vserver":
source => [ "puppet:///modules/site_apt/${fqdn}/03clean_vserver",
source => [ "puppet:///modules/site_apt/${::fqdn}/03clean_vserver",
"puppet:///modules/site_apt/03clean_vserver",
"puppet:///modules/apt/03clean_vserver" ],
alias => "03clean";
@ -105,7 +80,7 @@ class apt {
}
else {
apt_conf { "03clean":
source => [ "puppet:///modules/site_apt/${fqdn}/03clean",
source => [ "puppet:///modules/site_apt/${::fqdn}/03clean",
"puppet:///modules/site_apt/03clean",
"puppet:///modules/apt/03clean" ]
}
@ -122,13 +97,6 @@ class apt {
}
}
# backward compatibility: upgrade from previous versions of this module.
file {
[ "/etc/apt/apt.conf.d/from_puppet", "/etc/apt/apt.conf.d/99from_puppet" ]:
ensure => 'absent',
require => [ Apt_conf['02show_upgraded'], Apt_conf['03clean'] ];
}
include apt::dot_d_directories
## This package should really always be current

View file

@ -1,37 +1,16 @@
class apt::listchanges {
case $apt_listchanges_version {
'': { $apt_listchanges_version = "present" }
}
case $apt_listchanges_config {
'': { $apt_listchanges_config = "apt/${operatingsystem}/listchanges_${lsbdistcodename}.erb" }
}
case $apt_listchanges_frontend {
'': { $apt_listchanges_frontend = "mail" }
}
case $apt_listchanges_email {
'': { $apt_listchanges_email = "root" }
}
case $apt_listchanges_confirm {
'': { $apt_listchanges_confirm = "0" }
}
case $apt_listchanges_saveseen {
'': { $apt_listchanges_saveseen = "/var/lib/apt/listchanges.db" }
}
case $apt_listchanges_which {
'': { $apt_listchanges_which = "both" }
}
package { apt-listchanges: ensure => $apt_listchanges_ensure_version }
class apt::listchanges(
$ensure_version = hiera('apt_listchanges_version','installed'),
$config = hiera('apt_listchanges_config', "apt/${::operatingsystem}/listchanges_${::lsbdistcodename}.erb"),
$frontend = hiera('apt_listchanges_frontend','mail'),
$email = hiera('apt_listchanges_email','root'),
$confirm = hiera('apt_listchanges_confirm','0'),
$saveseen = hiera('pt_listchanges_saveseen','/var/lib/apt/listchanges.db'),
$which = hiera('apt_listchanges_which','both')
){
package { apt-listchanges: ensure => $ensure_version }
file { "/etc/apt/listchanges.conf":
content => template($apt_listchanges_config),
content => template($apt::listchanges::config),
mode => 0644, owner => root, group => root,
require => Package["apt-listchanges"];
}

View file

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

View file

@ -1,12 +1,11 @@
define apt::preseeded_package ($content = "", $ensure = "installed") {
$seedfile = "/var/cache/local/preseeding/$name.seeds"
$real_content = $content ? {
"" => template ( "site_apt/$lsbdistcodename/$name.seeds" ),
default => $content
}
$seedfile = "/var/cache/local/preseeding/${name}.seeds"
file { $seedfile:
content => $real_content,
content => $content ? {
"" => template ( "site_apt/${::lsbdistcodename}/${name}.seeds" ),
default => $content
},
mode => 0600, owner => root, group => root,
}

View file

@ -6,9 +6,10 @@ class apt::unattended_upgrades {
}
apt_conf { "50unattended-upgrades":
source => ["puppet:///modules/site_apt/$lsbdistcodename/50unattended-upgrades",
"puppet:///modules/site_apt/50unattended-upgrades",
"puppet:///modules/apt/$lsbdistcodename/50unattended-upgrades" ],
source => [
"puppet:///modules/site_apt/${::lsbdistcodename}/50unattended-upgrades",
"puppet:///modules/site_apt/50unattended-upgrades",
"puppet:///modules/apt/${::lsbdistcodename}/50unattended-upgrades" ],
require => Package['unattended-upgrades'],
}

View file

@ -2,7 +2,7 @@
#
# set EMAIL to a list of addresses which will be notified of impending updates
#
EMAIL="<%= apticron_email %>"
EMAIL="<%= scope.lookupvar('apt::apticron::email') %>"
#
# Set DIFF_ONLY to "1" to only output the difference of the current run
@ -10,22 +10,22 @@ EMAIL="<%= apticron_email %>"
# are no differences, no output/email will be generated. By default, apticron
# will output everything that needs to be upgraded.
#
DIFF_ONLY="<%= apticron_diff_only %>"
DIFF_ONLY="<%= scope.lookupvar('apt::apticron::diff_only') %>"
#
# Set LISTCHANGES_PROFILE if you would like apticron to invoke apt-listchanges
# with the --profile option. You should add a corresponding profile to
# /etc/apt/listchanges.conf
#
LISTCHANGES_PROFILE="<%= apticron_listchanges_profile %>"
LISTCHANGES_PROFILE="<%= scope.lookupvar('apt::apticron::listchanges_profile') %>"
#
# Set SYSTEM if you would like apticron to use something other than the output
# of "hostname -f" for the system name in the mails it generates
#
# SYSTEM="foobar.example.com"
<%- if has_variable?('apticron_system') and instance_variable_get("@#{'apticron_system'}").to_s != "false" -%>
<%= 'SYSTEM="' + instance_variable_get("@#{'apticron_system'}").to_s + '"' %>
<%- unless scope.lookupvar('apt::apticron::system').to_s == "false" -%>
<%= "SYSTEM=\"#{scope.lookupvar('apt::apticron::system')}\"" %>
<%- end -%>
#
@ -34,8 +34,8 @@ LISTCHANGES_PROFILE="<%= apticron_listchanges_profile %>"
# family type (inet, inet6), if available.
#
# IPADDRESSNUM="1"
<%- if has_variable?('apticron_ipaddressnum') and instance_variable_get("@#{'apticron_ipaddressnum'}").to_s != "false" -%>
<%= 'IPADDRESSNUM="' + instance_variable_get("@#{'apticron_ipaddressnum'}").to_s + '"' %>
<%- unless scope.lookupvar('apt::apticron::ipaddressnum').to_s == "false" -%>
<%= "IPADDRESSNUM=\"#{scope.lookupvar('apt::apticron::ipaddressnum')}\"" %>
<%- end -%>
#
@ -44,6 +44,7 @@ LISTCHANGES_PROFILE="<%= apticron_listchanges_profile %>"
# "ip" command
#
# IPADDRESSES="192.0.2.1 2001:db8:1:2:3::1"
<%- if has_variable?('apticron_ipaddresses') and instance_variable_get("@#{'apticron_ipaddresses'}").to_s != "false" -%>
<%= 'IPADDRESSES="' + instance_variable_get("@#{'apticron_ipaddresses'}").to_s + '"' %>
<%- unless scope.lookupvar('apt::apticron::ipaddresses').to_s == "false" -%>
<%= "IPADDRESSES=\"#{scope.lookupvar('apt::apticron::ipaddresses')}\"" %>
<%- end -%>

View file

@ -3,7 +3,8 @@
# set EMAIL to a space separated list of addresses which will be notified of
# impending updates
#
EMAIL="<%= apticron_email %>"
EMAIL="<%= scope.lookupvar('apt::apticron::email') %>"
#
# Set DIFF_ONLY to "1" to only output the difference of the current run
@ -11,51 +12,54 @@ EMAIL="<%= apticron_email %>"
# are no differences, no output/email will be generated. By default, apticron
# will output everything that needs to be upgraded.
#
DIFF_ONLY="<%= apticron_diff_only %>"
DIFF_ONLY="<%= scope.lookupvar('apt::apticron::diff_only') %>"
#
# Set LISTCHANGES_PROFILE if you would like apticron to invoke apt-listchanges
# with the --profile option. You should add a corresponding profile to
# /etc/apt/listchanges.conf
#
LISTCHANGES_PROFILE="<%= apticron_listchanges_profile %>"
LISTCHANGES_PROFILE="<%= scope.lookupvar('apt::apticron::listchanges_profile') %>"
#
# Set SYSTEM if you would like apticron to use something other than the output
# of "hostname -f" for the system name in the mails it generates
#
# SYSTEM="foobar.example.com"
<%- if has_variable?('apticron_system') and instance_variable_get("@#{'apticron_system'}").to_s != "false" -%>
<%= 'SYSTEM="' + instance_variable_get("@#{'apticron_system'}").to_s + '"' %>
<%- unless scope.lookupvar('apt::apticron::system').to_s == "false" -%>
<%= "SYSTEM=\"#{scope.lookupvar('apt::apticron::system')}\"" %>
<%- end -%>
#
# Set IPADDRESSNUM if you would like to configure the maximal number of IP
# addresses apticron displays. The default is to display 1 address of each
# family type (inet, inet6), if available.
#
# IPADDRESSNUM="1"
<%- if has_variable?('apticron_ipaddressnum') and instance_variable_get("@#{'apticron_ipaddressnum'}").to_s != "false" -%>
<%= 'IPADDRESSNUM="' + instance_variable_get("@#{'apticron_ipaddressnum'}").to_s + '"' %>
<%- unless scope.lookupvar('apt::apticron::ipaddressnum').to_s == "false" -%>
<%= "IPADDRESSNUM=\"#{scope.lookupvar('apt::apticron::ipaddressnum')}\"" %>
<%- end -%>
#
# Set IPADDRESSES to a whitespace separated list of reachable addresses for
# this system. By default, apticron will try to work these out using the
# "ip" command
#
# IPADDRESSES="192.0.2.1 2001:db8:1:2:3::1"
<%- if has_variable?('apticron_ipaddresses') and instance_variable_get("@#{'apticron_ipaddresses'}").to_s != "false" -%>
<%= 'IPADDRESSES="' + instance_variable_get("@#{'apticron_ipaddresses'}").to_s + '"' %>
<%- unless scope.lookupvar('apt::apticron::ipaddresses').to_s == "false" -%>
<%= "IPADDRESSES=\"#{scope.lookupvar('apt::apticron::ipaddresses')}\"" %>
<%- end -%>
#
# Set NOTIFY_HOLDS="0" if you don't want to be notified about new versions of
# packages on hold in your system. The default behavior is downloading and
# listing them as any other package.
#
# NOTIFY_HOLDS="0"
NOTIFY_HOLDS="<%= apticron_notifyholds %>"
NOTIFY_HOLDS="<%= scope.lookupvar('apt::apticron::notifyholds') %>"
#
# Set NOTIFY_NEW="0" if you don't want to be notified about packages which
@ -67,12 +71,12 @@ NOTIFY_HOLDS="<%= apticron_notifyholds %>"
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=531002#44
#
# NOTIFY_NEW="0"
NOTIFY_NEW="<%= apticron_notifynew %>"
NOTIFY_NEW="<%= scope.lookupvar('apt::apticron::notifynew') %>"
#
# Set CUSTOM_SUBJECT if you want to replace the default subject used in
# the notification e-mails. This may help filtering/sorting client-side e-mail.
#
# CUSTOM_SUBJECT=""
CUSTOM_SUBJECT="<%= apticron_customsubject %>"
CUSTOM_SUBJECT="<%= scope.lookupvar('apt::apticron::customsubject') %>"

View file

@ -3,7 +3,7 @@
# set EMAIL to a space separated list of addresses which will be notified of
# impending updates
#
EMAIL="<%= apticron_email %>"
EMAIL="<%= scope.lookupvar('apt::apticron::email') %>"
#
# Set DIFF_ONLY to "1" to only output the difference of the current run
@ -11,22 +11,22 @@ EMAIL="<%= apticron_email %>"
# are no differences, no output/email will be generated. By default, apticron
# will output everything that needs to be upgraded.
#
DIFF_ONLY="<%= apticron_diff_only %>"
DIFF_ONLY="<%= scope.lookupvar('apt::apticron::diff_only') %>"
#
# Set LISTCHANGES_PROFILE if you would like apticron to invoke apt-listchanges
# with the --profile option. You should add a corresponding profile to
# /etc/apt/listchanges.conf
#
LISTCHANGES_PROFILE="<%= apticron_listchanges_profile %>"
LISTCHANGES_PROFILE="<%= scope.lookupvar('apt::apticron::listchanges_profile') %>"
#
# Set SYSTEM if you would like apticron to use something other than the output
# of "hostname -f" for the system name in the mails it generates
#
# SYSTEM="foobar.example.com"
<%- if has_variable?('apticron_system') and instance_variable_get("@#{'apticron_system'}").to_s != "false" -%>
<%= 'SYSTEM="' + instance_variable_get("@#{'apticron_system'}").to_s + '"' %>
<%- unless scope.lookupvar('apt::apticron::system').to_s == "false" -%>
<%= "SYSTEM=\"#{scope.lookupvar('apt::apticron::system')}\"" %>
<%- end -%>
#
@ -35,8 +35,8 @@ LISTCHANGES_PROFILE="<%= apticron_listchanges_profile %>"
# family type (inet, inet6), if available.
#
# IPADDRESSNUM="1"
<%- if has_variable?('apticron_ipaddressnum') and instance_variable_get("@#{'apticron_ipaddressnum'}").to_s != "false" -%>
<%= 'IPADDRESSNUM="' + instance_variable_get("@#{'apticron_ipaddressnum'}").to_s + '"' %>
<%- unless scope.lookupvar('apt::apticron::ipaddressnum').to_s == "false" -%>
<%= "IPADDRESSNUM=\"#{scope.lookupvar('apt::apticron::ipaddressnum')}\"" %>
<%- end -%>
#
@ -45,8 +45,8 @@ LISTCHANGES_PROFILE="<%= apticron_listchanges_profile %>"
# "ip" command
#
# IPADDRESSES="192.0.2.1 2001:db8:1:2:3::1"
<%- if has_variable?('apticron_ipaddresses') and instance_variable_get("@#{'apticron_ipaddresses'}").to_s != "false" -%>
<%= 'IPADDRESSES="' + instance_variable_get("@#{'apticron_ipaddresses'}").to_s + '"' %>
<%- unless scope.lookupvar('apt::apticron::ipaddresses').to_s == "false" -%>
<%= "IPADDRESSES=\"#{scope.lookupvar('apt::apticron::ipaddresses')}\"" %>
<%- end -%>
#
@ -55,7 +55,7 @@ LISTCHANGES_PROFILE="<%= apticron_listchanges_profile %>"
# listing them as any other package.
#
# NOTIFY_HOLDS="0"
NOTIFY_HOLDS="<%= apticron_notifyholds %>"
NOTIFY_HOLDS="<%= scope.lookupvar('apt::apticron::notifyholds') %>"
#
# Set NOTIFY_NEW="0" if you don't want to be notified about packages which
@ -67,7 +67,7 @@ NOTIFY_HOLDS="<%= apticron_notifyholds %>"
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=531002#44
#
# NOTIFY_NEW="0"
NOTIFY_NEW="<%= apticron_notifynew %>"
NOTIFY_NEW="<%= scope.lookupvar('apt::apticron::notifynew') %>"
#
@ -77,4 +77,4 @@ NOTIFY_NEW="<%= apticron_notifynew %>"
# ='[apticron] : package update(s)'
#
# CUSTOM_SUBJECT=""
CUSTOM_SUBJECT="<%= apticron_customsubject %>"
CUSTOM_SUBJECT="<%= scope.lookupvar('apt::apticron::customsubject') %>"

View file

@ -1,7 +1,7 @@
[apt]
frontend=<%= apt_listchanges_frontend %>
email_address=<%= apt_listchanges_email %>
confirm=<%= apt_listchanges_confirm %>
save_seen=<%= apt_listchanges_saveseen %>
which=<%= apt_listchanges_which %>
frontend=<%= scope.lookupvar('apt::listchanges::frontend') %>
email_address=<%= scope.lookupvar('apt::listchanges::email') %>
confirm=<%= scope.lookupvar('apt::listchanges::confirm') %>
save_seen=<%= scope.lookupvar('apt::listchanges::saveseen') %>
which=<%= scope.lookupvar('apt::listchanges::which') %>