3 # Manage APT (Advanced Packaging Tool)
6 Variant[Hash, Stdlib::Compat::Hash] $update_defaults,
7 Variant[Hash, Stdlib::Compat::Hash] $purge_defaults,
8 Variant[Hash, Stdlib::Compat::Hash] $proxy_defaults,
9 Variant[Hash, Stdlib::Compat::Hash] $include_defaults,
10 Variant[String, Stdlib::Compat::String] $provider,
11 Variant[String, Stdlib::Compat::String] $keyserver,
12 Optional[Variant[String, Stdlib::Compat::String]] $ppa_options,
13 Optional[Variant[String, Stdlib::Compat::String]] $ppa_package,
14 Optional[Variant[Hash, Stdlib::Compat::Hash]] $backports,
15 Variant[Hash, Stdlib::Compat::Hash] $confs = {},
16 Variant[Hash, Stdlib::Compat::Hash] $update = {},
17 Variant[Hash, Stdlib::Compat::Hash] $purge = {},
18 Variant[Hash, Stdlib::Compat::Hash] $proxy = {},
19 Variant[Hash, Stdlib::Compat::Hash] $sources = {},
20 Variant[Hash, Stdlib::Compat::Hash] $keys = {},
21 Variant[Hash, Stdlib::Compat::Hash] $ppas = {},
22 Variant[Hash, Stdlib::Compat::Hash] $pins = {},
23 Variant[Hash, Stdlib::Compat::Hash] $settings = {},
24 Variant[String, Stdlib::Compat::String] $root = '/etc/apt',
25 Variant[String, Stdlib::Compat::String] $sources_list = "${root}/sources.list",
26 Variant[String, Stdlib::Compat::String] $sources_list_d = "${root}/sources.list.d",
27 Variant[String, Stdlib::Compat::String] $conf_d = "${root}/apt.conf.d",
28 Variant[String, Stdlib::Compat::String] $preferences = "${root}/preferences",
29 Variant[String, Stdlib::Compat::String] $preferences_d = "${root}/preferences.d",
30 Variant[Hash, Stdlib::Compat::Hash] $config_files = { conf => { path => $conf_d, ext => '' }, pref => { path => $preferences_d, ext => '.pref' }, list => { path => $sources_list_d, ext => '.list' } },
31 Variant[Hash, Stdlib::Compat::Hash] $source_key_defaults = { 'server' => $keyserver, 'options' => undef, 'content' => undef, 'source' => undef },
34 if $facts['osfamily'] != 'Debian' {
35 fail('This module only works on Debian or derivatives like Ubuntu')
38 $frequency_options = ['always','daily','weekly','reluctantly']
39 validate_legacy(Hash, 'validate_hash', $update)
40 if $update['frequency'] {
41 validate_re($update['frequency'], $frequency_options)
43 if $update['timeout'] {
44 unless is_integer($update['timeout']) {
45 fail('timeout value for update must be an integer')
49 unless is_integer($update['tries']) {
50 fail('tries value for update must be an integer')
54 $_update = merge($::apt::update_defaults, $update)
57 validate_legacy(Hash, 'validate_hash', $purge)
58 if $purge['sources.list'] {
59 validate_legacy(Boolean, 'validate_bool', $purge['sources.list'])
61 if $purge['sources.list.d'] {
62 validate_legacy(Boolean, 'validate_bool', $purge['sources.list.d'])
64 if $purge['preferences'] {
65 validate_legacy(Boolean, 'validate_bool', $purge['preferences'])
67 if $purge['preferences.d'] {
68 validate_legacy(Boolean, 'validate_bool', $purge['preferences.d'])
71 $_purge = merge($::apt::purge_defaults, $purge)
75 validate_re($proxy['ensure'], ['file', 'present', 'absent'])
78 validate_legacy(String, 'validate_string', $proxy['host'])
81 unless is_integer($proxy['port']) {
82 fail('$proxy port must be an integer')
86 validate_legacy(Boolean, 'validate_bool', $proxy['https'])
89 $_proxy = merge($apt::proxy_defaults, $proxy)
91 validate_legacy(Hash, 'validate_hash', $confs)
92 validate_legacy(Hash, 'validate_hash', $sources)
93 validate_legacy(Hash, 'validate_hash', $keys)
94 validate_legacy(Hash, 'validate_hash', $settings)
95 validate_legacy(Hash, 'validate_hash', $ppas)
96 validate_legacy(Hash, 'validate_hash', $pins)
98 $confheadertmp = epp('apt/_conf_header.epp')
99 $proxytmp = epp('apt/proxy.epp', {'proxies' => $_proxy})
100 $updatestamptmp = epp('apt/15update-stamp.epp')
102 if $_proxy['ensure'] == 'absent' or $_proxy['host'] {
103 apt::setting { 'conf-proxy':
104 ensure => $_proxy['ensure'],
106 content => "${confheadertmp}${proxytmp}",
110 $sources_list_content = $_purge['sources.list'] ? {
111 true => "# Repos managed by puppet.\n",
115 $preferences_ensure = $_purge['preferences'] ? {
120 if $_update['frequency'] == 'always' {
121 Exec <| title=='apt_update' |> {
122 refreshonly => false,
126 apt::setting { 'conf-update-stamp':
128 content => "${confheadertmp}${updatestamptmp}",
131 file { 'sources.list':
133 path => $::apt::sources_list,
137 content => $sources_list_content,
138 notify => Class['apt::update'],
141 file { 'sources.list.d':
143 path => $::apt::sources_list_d,
147 purge => $_purge['sources.list.d'],
148 recurse => $_purge['sources.list.d'],
149 notify => Class['apt::update'],
152 file { 'preferences':
153 ensure => $preferences_ensure,
154 path => $::apt::preferences,
158 notify => Class['apt::update'],
161 file { 'preferences.d':
163 path => $::apt::preferences_d,
167 purge => $_purge['preferences.d'],
168 recurse => $_purge['preferences.d'],
169 notify => Class['apt::update'],
173 create_resources('apt::conf', $confs)
175 # manage sources if present
177 create_resources('apt::source', $sources)
179 # manage keys if present
181 create_resources('apt::key', $keys)
183 # manage ppas if present
185 create_resources('apt::ppa', $ppas)
187 # manage settings if present
189 create_resources('apt::setting', $settings)
192 # manage pins if present
194 create_resources('apt::pin', $pins)