(FM-7316) - i18n Process implemented and .pot file generated
[puppet-modules/puppetlabs-apt.git] / manifests / ppa.pp
1 # ppa.pp
2 define apt::ppa(
3   String $ensure                 = 'present',
4   Optional[String] $options      = $::apt::ppa_options,
5   Optional[String] $release      = $facts['lsbdistcodename'],
6   Optional[String] $package_name = $::apt::ppa_package,
7   Boolean $package_manage        = false,
8 ) {
9   unless $release {
10     fail(translate('lsbdistcodename fact not available: release parameter required'))
11   }
12
13   if $facts['lsbdistid'] == 'Debian' {
14     fail(translate('apt::ppa is not currently supported on Debian.'))
15   }
16
17   if versioncmp($facts['lsbdistrelease'], '14.10') >= 0 {
18     $distid = downcase($facts['lsbdistid'])
19     $dash_filename = regsubst($name, '^ppa:([^/]+)/(.+)$', "\\1-${distid}-\\2")
20     $underscore_filename = regsubst($name, '^ppa:([^/]+)/(.+)$', "\\1_${distid}_\\2")
21   } else {
22     $dash_filename = regsubst($name, '^ppa:([^/]+)/(.+)$', "\\1-\\2")
23     $underscore_filename = regsubst($name, '^ppa:([^/]+)/(.+)$', "\\1_\\2")
24   }
25
26   $dash_filename_no_slashes      = regsubst($dash_filename, '/', '-', 'G')
27   $dash_filename_no_specialchars = regsubst($dash_filename_no_slashes, '[\.\+]', '_', 'G')
28   $underscore_filename_no_slashes      = regsubst($underscore_filename, '/', '-', 'G')
29   $underscore_filename_no_specialchars = regsubst($underscore_filename_no_slashes, '[\.\+]', '_', 'G')
30
31   $sources_list_d_filename  = "${dash_filename_no_specialchars}-${release}.list"
32
33   if versioncmp($facts['lsbdistrelease'], '15.10') >= 0 {
34     $trusted_gpg_d_filename = "${underscore_filename_no_specialchars}.gpg"
35   } else {
36     $trusted_gpg_d_filename = "${dash_filename_no_specialchars}.gpg"
37   }
38
39   if $ensure == 'present' {
40     if $package_manage {
41       ensure_packages($package_name)
42       $_require = [File['sources.list.d'], Package[$package_name]]
43     } else {
44       $_require = File['sources.list.d']
45     }
46
47     $_proxy = $::apt::_proxy
48     if $_proxy['host'] {
49       if $_proxy['https'] {
50         $_proxy_env = ["http_proxy=http://${$_proxy['host']}:${$_proxy['port']}", "https_proxy=https://${$_proxy['host']}:${$_proxy['port']}"]
51       } else {
52         $_proxy_env = ["http_proxy=http://${$_proxy['host']}:${$_proxy['port']}"]
53       }
54     } else {
55       $_proxy_env = []
56     }
57
58     exec { "add-apt-repository-${name}":
59       environment => $_proxy_env,
60       command     => "/usr/bin/add-apt-repository ${options} ${name} || (rm ${::apt::sources_list_d}/${sources_list_d_filename} && false)",
61       unless      => "/usr/bin/test -f ${::apt::sources_list_d}/${sources_list_d_filename} && /usr/bin/test -f ${::apt::trusted_gpg_d}/${trusted_gpg_d_filename}",
62       user        => 'root',
63       logoutput   => 'on_failure',
64       notify      => Class['apt::update'],
65       require     => $_require,
66     }
67
68     file { "${::apt::sources_list_d}/${sources_list_d_filename}":
69       ensure  => file,
70       require => Exec["add-apt-repository-${name}"],
71     }
72   }
73   else {
74     file { "${::apt::sources_list_d}/${sources_list_d_filename}":
75       ensure => 'absent',
76       notify => Class['apt::update'],
77     }
78   }
79 }