ppa.pp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. # ppa.pp
  2. define apt::ppa(
  3. $ensure = 'present',
  4. $options = $::apt::ppa_options,
  5. $release = $::apt::xfacts['lsbdistcodename'],
  6. $package_name = $::apt::ppa_package,
  7. $package_manage = false,
  8. ) {
  9. unless $release {
  10. fail('lsbdistcodename fact not available: release parameter required')
  11. }
  12. if $::apt::xfacts['lsbdistid'] == 'Debian' {
  13. fail('apt::ppa is not currently supported on Debian.')
  14. }
  15. $ubuntu_release_year = regsubst($::apt::xfacts['lsbdistrelease'], '\.\d+$', '', 'G') + 0
  16. $ubuntu_release_month = regsubst($::apt::xfacts['lsbdistrelease'], '^\d+\.', '', 'G') + 0
  17. if $ubuntu_release_year >= 15 and $ubuntu_release_month >= 10 {
  18. $distid = downcase($::apt::xfacts['lsbdistid'])
  19. $filename = regsubst($name, '^ppa:([^/]+)/(.+)$', "\\1-${distid}-\\2-${release}")
  20. } else {
  21. $filename = regsubst($name, '^ppa:([^/]+)/(.+)$', "\\1-\\2-${release}")
  22. }
  23. $filename_no_slashes = regsubst($filename, '/', '-', 'G')
  24. $filename_no_specialchars = regsubst($filename_no_slashes, '[\.\+]', '_', 'G')
  25. $sources_list_d_filename = "${filename_no_specialchars}.list"
  26. if $ensure == 'present' {
  27. if $package_manage {
  28. ensure_packages($package_name)
  29. $_require = [File['sources.list.d'], Package[$package_name]]
  30. } else {
  31. $_require = File['sources.list.d']
  32. }
  33. $_proxy = $::apt::_proxy
  34. if $_proxy['host'] {
  35. if $_proxy['https'] {
  36. $_proxy_env = ["http_proxy=http://${$_proxy['host']}:${$_proxy['port']}", "https_proxy=https://${$_proxy['host']}:${$_proxy['port']}"]
  37. } else {
  38. $_proxy_env = ["http_proxy=http://${$_proxy['host']}:${$_proxy['port']}"]
  39. }
  40. } else {
  41. $_proxy_env = []
  42. }
  43. exec { "add-apt-repository-${name}":
  44. environment => $_proxy_env,
  45. command => "/usr/bin/add-apt-repository ${options} ${name}",
  46. unless => "/usr/bin/test -s ${::apt::sources_list_d}/${sources_list_d_filename}",
  47. user => 'root',
  48. logoutput => 'on_failure',
  49. notify => Class['apt::update'],
  50. require => $_require,
  51. }
  52. file { "${::apt::sources_list_d}/${sources_list_d_filename}":
  53. ensure => file,
  54. require => Exec["add-apt-repository-${name}"],
  55. }
  56. }
  57. else {
  58. file { "${::apt::sources_list_d}/${sources_list_d_filename}":
  59. ensure => 'absent',
  60. notify => Class['apt::update'],
  61. }
  62. }
  63. }