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