]> review.fuel-infra Code Review - puppet-modules/puppetlabs-apt.git/blob - manifests/init.pp
apt: Change how purging is managed.
[puppet-modules/puppetlabs-apt.git] / manifests / init.pp
1 #
2 class apt(
3   $purge                = {},
4   $proxy                = {},
5   $always_apt_update    = false,
6   $apt_update_frequency = 'reluctantly',
7   $update_timeout       = undef,
8   $update_tries         = undef,
9   $sources              = undef,
10 ) inherits ::apt::params {
11
12   include apt::update
13
14   $frequency_options = ['always','daily','weekly','reluctantly']
15   validate_re($apt_update_frequency, $frequency_options)
16
17   validate_hash($purge)
18   if $purge['sources.list'] {
19     validate_bool($purge['sources.list'])
20   }
21   if $purge['sources.list.d'] {
22     validate_bool($purge['sources.list.d'])
23   }
24   if $purge['preferences'] {
25     validate_bool($purge['preferences'])
26   }
27   if $purge['preferences.d'] {
28     validate_bool($purge['preferences.d'])
29   }
30
31   $_purge = merge($::apt::purge_defaults, $purge)
32
33   validate_hash($proxy)
34   if $proxy['host'] {
35     validate_string($proxy['host'])
36   }
37   if $proxy['port'] {
38     unless is_integer($proxy['port']) {
39       fail('$proxy port must be an integer')
40     }
41   }
42   if $proxy['https'] {
43     validate_bool($proxy['https'])
44   }
45
46   $_proxy = merge($apt::proxy_defaults, $proxy)
47
48   if $proxy['host'] {
49     apt::setting { 'conf-proxy':
50       priority => '01',
51       content  => template('apt/_header.erb', 'apt/proxy.erb'),
52     }
53   }
54
55   $sources_list_content = $_purge['sources.list'] ? {
56     false => undef,
57     true  => "# Repos managed by puppet.\n",
58   }
59
60   $preferences_ensure = $_purge['preferences'] ? {
61     false => file,
62     true  => absent,
63   }
64
65   if $always_apt_update == true {
66     Exec <| title=='apt_update' |> {
67       refreshonly => false,
68     }
69   }
70
71   apt::setting { 'conf-update-stamp':
72     priority => 15,
73     content  => template('apt/_header.erb', 'apt/15update-stamp.erb'),
74   }
75
76   file { 'sources.list':
77     ensure  => file,
78     path    => $::apt::sources_list,
79     owner   => root,
80     group   => root,
81     mode    => '0644',
82     content => $sources_list_content,
83     notify  => Exec['apt_update'],
84   }
85
86   file { 'sources.list.d':
87     ensure  => directory,
88     path    => $::apt::sources_list_d,
89     owner   => root,
90     group   => root,
91     mode    => '0644',
92     purge   => $_purge['sources.list.d'],
93     recurse => $_purge['sources.list.d'],
94     notify  => Exec['apt_update'],
95   }
96
97   file { 'preferences':
98     ensure => $preferences_ensure,
99     path   => $::apt::preferences,
100     owner  => root,
101     group  => root,
102     mode   => '0644',
103     notify => Exec['apt_update'],
104   }
105
106   file { 'preferences.d':
107     ensure  => directory,
108     path    => $::apt::preferences_d,
109     owner   => root,
110     group   => root,
111     mode    => '0644',
112     purge   => $_purge['preferences.d'],
113     recurse => $_purge['preferences.d'],
114     notify  => Exec['apt_update'],
115   }
116
117   # Need anchor to provide containment for dependencies.
118   anchor { 'apt::update':
119     require => Class['apt::update'],
120   }
121
122   # manage sources if present
123   if $sources != undef {
124     validate_hash($sources)
125     create_resources('apt::source', $sources)
126   }
127 }