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