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