Merge pull request #560 from mhaskel/MODULES-2446
[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['ensure'] {
49     validate_re($proxy['ensure'], ['file', 'present', 'absent'])
50   }
51   if $proxy['host'] {
52     validate_string($proxy['host'])
53   }
54   if $proxy['port'] {
55     unless is_integer($proxy['port']) {
56       fail('$proxy port must be an integer')
57     }
58   }
59   if $proxy['https'] {
60     validate_bool($proxy['https'])
61   }
62
63   $_proxy = merge($apt::proxy_defaults, $proxy)
64
65   validate_hash($sources)
66   validate_hash($keys)
67   validate_hash($settings)
68   validate_hash($ppas)
69
70   if $_proxy['ensure'] == 'absent' or $_proxy['host'] {
71     apt::setting { 'conf-proxy':
72       ensure   => $_proxy['ensure'],
73       priority => '01',
74       content  => template('apt/_conf_header.erb', 'apt/proxy.erb'),
75     }
76   }
77
78   $sources_list_content = $_purge['sources.list'] ? {
79     true    => "# Repos managed by puppet.\n",
80     default => undef,
81   }
82
83   $preferences_ensure = $_purge['preferences'] ? {
84     true    => absent,
85     default => file,
86   }
87
88   if $_update['frequency'] == 'always' {
89     Exec <| title=='apt_update' |> {
90       refreshonly => false,
91     }
92   }
93
94   apt::setting { 'conf-update-stamp':
95     priority => 15,
96     content  => template('apt/_conf_header.erb', 'apt/15update-stamp.erb'),
97   }
98
99   file { 'sources.list':
100     ensure  => file,
101     path    => $::apt::sources_list,
102     owner   => root,
103     group   => root,
104     mode    => '0644',
105     content => $sources_list_content,
106     notify  => Class['apt::update'],
107   }
108
109   file { 'sources.list.d':
110     ensure  => directory,
111     path    => $::apt::sources_list_d,
112     owner   => root,
113     group   => root,
114     mode    => '0644',
115     purge   => $_purge['sources.list.d'],
116     recurse => $_purge['sources.list.d'],
117     notify  => Class['apt::update'],
118   }
119
120   file { 'preferences':
121     ensure => $preferences_ensure,
122     path   => $::apt::preferences,
123     owner  => root,
124     group  => root,
125     mode   => '0644',
126     notify => Class['apt::update'],
127   }
128
129   file { 'preferences.d':
130     ensure  => directory,
131     path    => $::apt::preferences_d,
132     owner   => root,
133     group   => root,
134     mode    => '0644',
135     purge   => $_purge['preferences.d'],
136     recurse => $_purge['preferences.d'],
137     notify  => Class['apt::update'],
138   }
139
140   # manage sources if present
141   if $sources {
142     create_resources('apt::source', $sources)
143   }
144   # manage keys if present
145   if $keys {
146     create_resources('apt::key', $keys)
147   }
148   # manage ppas if present
149   if $ppas {
150     create_resources('apt::ppa', $ppas)
151   }
152   # manage settings if present
153   if $settings {
154     create_resources('apt::setting', $settings)
155   }
156 }