ppa.pp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. if versioncmp($::apt::xfacts['lsbdistrelease'], '15.10') >= 0 {
  16. $distid = downcase($::apt::xfacts['lsbdistid'])
  17. $filename = regsubst($name, '^ppa:([^/]+)/(.+)$', "\\1-${distid}-\\2-${release}")
  18. } else {
  19. $filename = regsubst($name, '^ppa:([^/]+)/(.+)$', "\\1-\\2-${release}")
  20. }
  21. $filename_no_slashes = regsubst($filename, '/', '-', 'G')
  22. $filename_no_specialchars = regsubst($filename_no_slashes, '[\.\+]', '_', 'G')
  23. $sources_list_d_filename = "${filename_no_specialchars}.list"
  24. if $ensure == 'present' {
  25. if $package_manage {
  26. ensure_packages($package_name)
  27. $_require = [File['sources.list.d'], Package[$package_name]]
  28. } else {
  29. $_require = File['sources.list.d']
  30. }
  31. $_proxy = $::apt::_proxy
  32. if $_proxy['host'] {
  33. if $_proxy['https'] {
  34. $_proxy_env = ["http_proxy=http://${$_proxy['host']}:${$_proxy['port']}", "https_proxy=https://${$_proxy['host']}:${$_proxy['port']}"]
  35. } else {
  36. $_proxy_env = ["http_proxy=http://${$_proxy['host']}:${$_proxy['port']}"]
  37. }
  38. } else {
  39. $_proxy_env = []
  40. }
  41. exec { "add-apt-repository-${name}":
  42. environment => $_proxy_env,
  43. command => "/usr/bin/add-apt-repository ${options} ${name}",
  44. unless => "/usr/bin/test -f ${::apt::sources_list_d}/${sources_list_d_filename}",
  45. user => 'root',
  46. logoutput => 'on_failure',
  47. notify => Class['apt::update'],
  48. require => $_require,
  49. }
  50. file { "${::apt::sources_list_d}/${sources_list_d_filename}":
  51. ensure => file,
  52. require => Exec["add-apt-repository-${name}"],
  53. }
  54. }
  55. else {
  56. file { "${::apt::sources_list_d}/${sources_list_d_filename}":
  57. ensure => 'absent',
  58. notify => Class['apt::update'],
  59. }
  60. }
  61. }