(maint) clean up key_compat_specs
[puppet-modules/puppetlabs-apt.git] / manifests / source.pp
1 # source.pp
2 # add an apt source
3 define apt::source(
4   $location          = undef,
5   $comment           = $name,
6   $ensure            = present,
7   $release           = undef,
8   $repos             = 'main',
9   $include           = {},
10   $key               = undef,
11   $pin               = undef,
12   $architecture      = undef,
13   $allow_unsigned    = false,
14   $include_src       = undef,
15   $include_deb       = undef,
16   $required_packages = undef,
17   $key_server        = undef,
18   $key_content       = undef,
19   $key_source        = undef,
20   $trusted_source    = undef,
21 ) {
22   validate_string($architecture, $comment, $location, $repos)
23   validate_bool($allow_unsigned)
24   validate_hash($include)
25
26   # This is needed for compat with 1.8.x
27   include ::apt
28
29   $_before = Apt::Setting["list-${title}"]
30
31   if $include_src != undef {
32     warning("\$include_src is deprecated and will be removed in the next major release, please use \$include => { 'src' => ${include_src} } instead")
33   }
34
35   if $include_deb != undef {
36     warning("\$include_deb is deprecated and will be removed in the next major release, please use \$include => { 'deb' => ${include_deb} } instead")
37   }
38
39   if $required_packages != undef {
40     warning('$required_packages is deprecated and will be removed in the next major release, please use package resources instead.')
41     exec { "Required packages: '${required_packages}' for ${name}":
42       command     => "${::apt::params::provider} -y install ${required_packages}",
43       logoutput   => 'on_failure',
44       refreshonly => true,
45       tries       => 3,
46       try_sleep   => 1,
47       before      => $_before,
48     }
49   }
50
51   if $key_server != undef {
52     warning("\$key_server is deprecated and will be removed in the next major release, please use \$key => { 'server' => ${key_server} } instead.")
53   }
54
55   if $key_content != undef {
56     warning("\$key_content is deprecated and will be removed in the next major release, please use \$key => { 'content' => ${key_content} } instead.")
57   }
58
59   if $key_source != undef {
60     warning("\$key_source is deprecated and will be removed in the next major release, please use \$key => { 'source' => ${key_source} } instead.")
61   }
62
63   if $trusted_source != undef {
64     warning('$trusted_source is deprecated and will be removed in the next major release, please use $allow_unsigned instead.')
65     $_allow_unsigned = $trusted_source
66   } else {
67     $_allow_unsigned = $allow_unsigned
68   }
69
70   if ! $release {
71     $_release = $::apt::params::xfacts['lsbdistcodename']
72     unless $_release {
73       fail('lsbdistcodename fact not available: release parameter required')
74     }
75   } else {
76     $_release = $release
77   }
78
79   if $ensure == 'present' and ! $location {
80     fail('cannot create a source entry without specifying a location')
81   }
82
83   if $include_src != undef and $include_deb != undef {
84     $_deprecated_include = {
85       'src' => $include_src,
86       'deb' => $include_deb,
87     }
88   } elsif $include_src != undef {
89     $_deprecated_include = { 'src' => $include_src }
90   } elsif $include_deb != undef {
91     $_deprecated_include = { 'deb' => $include_deb }
92   } else {
93     $_deprecated_include = {}
94   }
95
96   $_include = merge($::apt::params::include_defaults, $_deprecated_include, $include)
97
98   $_deprecated_key = {
99     'key_server'  => $key_server,
100     'key_content' => $key_content,
101     'key_source'  => $key_source,
102   }
103
104   if $key {
105     if is_hash($key) {
106       unless $key['id'] {
107         fail('key hash must contain at least an id entry')
108       }
109       $_key = merge($::apt::params::source_key_defaults, $_deprecated_key, $key)
110     } else {
111       validate_string($key)
112       $_key = merge( { 'id' => $key }, $_deprecated_key)
113     }
114   }
115
116   apt::setting { "list-${name}":
117     ensure  => $ensure,
118     content => template('apt/_header.erb', 'apt/source.list.erb'),
119   }
120
121   if $pin {
122     if is_hash($pin) {
123       $_pin = merge($pin, { 'ensure' => $ensure, 'before' => $_before })
124     } elsif (is_numeric($pin) or is_string($pin)) {
125       $url_split = split($location, '/')
126       $host      = $url_split[2]
127       $_pin = {
128         'ensure'   => $ensure,
129         'priority' => $pin,
130         'before'   => $_before,
131         'origin'   => $host,
132       }
133     } else {
134       fail('Received invalid value for pin parameter')
135     }
136     create_resources('apt::pin', { "${name}" => $_pin })
137   }
138
139   # We do not want to remove keys when the source is absent.
140   if $key and ($ensure == 'present') {
141     if is_hash($_key) {
142       apt::key { "Add key: ${$_key['id']} from Apt::Source ${title}":
143         ensure      => present,
144         id          => $_key['id'],
145         server      => $_key['server'],
146         content     => $_key['content'],
147         source      => $_key['source'],
148         options     => $_key['options'],
149         key_server  => $_key['key_server'],
150         key_content => $_key['key_content'],
151         key_source  => $_key['key_source'],
152         before      => $_before,
153       }
154     }
155   }
156 }