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