ppa.pp 2.0 KB

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