Merge pull request #616 from ghoneycutt/add_confs
[puppet-modules/puppetlabs-apt.git] / manifests / init.pp
1 # == Class: apt
2 #
3 # Manage APT (Advanced Packaging Tool)
4 #
5 class apt (
6   $confs    = {},
7   $update   = {},
8   $purge    = {},
9   $proxy    = {},
10   $sources  = {},
11   $keys     = {},
12   $ppas     = {},
13   $pins     = {},
14   $settings = {},
15 ) inherits ::apt::params {
16
17   $frequency_options = ['always','daily','weekly','reluctantly']
18   validate_hash($update)
19   if $update['frequency'] {
20     validate_re($update['frequency'], $frequency_options)
21   }
22   if $update['timeout'] {
23     unless is_integer($update['timeout']) {
24       fail('timeout value for update must be an integer')
25     }
26   }
27   if $update['tries'] {
28     unless is_integer($update['tries']) {
29       fail('tries value for update must be an integer')
30     }
31   }
32
33   $_update = merge($::apt::update_defaults, $update)
34   include ::apt::update
35
36   validate_hash($purge)
37   if $purge['sources.list'] {
38     validate_bool($purge['sources.list'])
39   }
40   if $purge['sources.list.d'] {
41     validate_bool($purge['sources.list.d'])
42   }
43   if $purge['preferences'] {
44     validate_bool($purge['preferences'])
45   }
46   if $purge['preferences.d'] {
47     validate_bool($purge['preferences.d'])
48   }
49
50   $_purge = merge($::apt::purge_defaults, $purge)
51
52   validate_hash($proxy)
53   if $proxy['ensure'] {
54     validate_re($proxy['ensure'], ['file', 'present', 'absent'])
55   }
56   if $proxy['host'] {
57     validate_string($proxy['host'])
58   }
59   if $proxy['port'] {
60     unless is_integer($proxy['port']) {
61       fail('$proxy port must be an integer')
62     }
63   }
64   if $proxy['https'] {
65     validate_bool($proxy['https'])
66   }
67
68   $_proxy = merge($apt::proxy_defaults, $proxy)
69
70   validate_hash($confs)
71   validate_hash($sources)
72   validate_hash($keys)
73   validate_hash($settings)
74   validate_hash($ppas)
75   validate_hash($pins)
76
77   if $_proxy['ensure'] == 'absent' or $_proxy['host'] {
78     apt::setting { 'conf-proxy':
79       ensure   => $_proxy['ensure'],
80       priority => '01',
81       content  => template('apt/_conf_header.erb', 'apt/proxy.erb'),
82     }
83   }
84
85   $sources_list_content = $_purge['sources.list'] ? {
86     true    => "# Repos managed by puppet.\n",
87     default => undef,
88   }
89
90   $preferences_ensure = $_purge['preferences'] ? {
91     true    => absent,
92     default => file,
93   }
94
95   if $_update['frequency'] == 'always' {
96     Exec <| title=='apt_update' |> {
97       refreshonly => false,
98     }
99   }
100
101   apt::setting { 'conf-update-stamp':
102     priority => 15,
103     content  => template('apt/_conf_header.erb', 'apt/15update-stamp.erb'),
104   }
105
106   file { 'sources.list':
107     ensure  => file,
108     path    => $::apt::sources_list,
109     owner   => root,
110     group   => root,
111     mode    => '0644',
112     content => $sources_list_content,
113     notify  => Class['apt::update'],
114   }
115
116   file { 'sources.list.d':
117     ensure  => directory,
118     path    => $::apt::sources_list_d,
119     owner   => root,
120     group   => root,
121     mode    => '0644',
122     purge   => $_purge['sources.list.d'],
123     recurse => $_purge['sources.list.d'],
124     notify  => Class['apt::update'],
125   }
126
127   file { 'preferences':
128     ensure => $preferences_ensure,
129     path   => $::apt::preferences,
130     owner  => root,
131     group  => root,
132     mode   => '0644',
133     notify => Class['apt::update'],
134   }
135
136   file { 'preferences.d':
137     ensure  => directory,
138     path    => $::apt::preferences_d,
139     owner   => root,
140     group   => root,
141     mode    => '0644',
142     purge   => $_purge['preferences.d'],
143     recurse => $_purge['preferences.d'],
144     notify  => Class['apt::update'],
145   }
146
147   if $confs {
148     create_resources('apt::conf', $confs)
149   }
150   # manage sources if present
151   if $sources {
152     create_resources('apt::source', $sources)
153   }
154   # manage keys if present
155   if $keys {
156     create_resources('apt::key', $keys)
157   }
158   # manage ppas if present
159   if $ppas {
160     create_resources('apt::ppa', $ppas)
161   }
162   # manage settings if present
163   if $settings {
164     create_resources('apt::setting', $settings)
165   }
166
167   # manage pins if present
168   if $pins {
169     create_resources('apt::pin', $pins)
170   }
171 }