ppa.pp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. # ppa.pp
  2. define apt::ppa(
  3. $ensure = 'present',
  4. $release = $::lsbdistcodename,
  5. $options = $::apt::params::ppa_options,
  6. $package_name = $::apt::params::ppa_package,
  7. $package_manage = true,
  8. ) {
  9. include apt::params
  10. include apt::update
  11. $sources_list_d = $apt::params::sources_list_d
  12. if ! $release {
  13. fail('lsbdistcodename fact not available: release parameter required')
  14. }
  15. if $::operatingsystem != 'Ubuntu' {
  16. fail('apt::ppa is currently supported on Ubuntu only.')
  17. }
  18. $filename_without_slashes = regsubst($name, '/', '-', 'G')
  19. $filename_without_dots = regsubst($filename_without_slashes, '\.', '_', 'G')
  20. $filename_without_ppa = regsubst($filename_without_dots, '^ppa:', '', 'G')
  21. $sources_list_d_filename = "${filename_without_ppa}-${release}.list"
  22. if $ensure == 'present' {
  23. if $package_manage {
  24. if ! defined(Package[$package_name]) {
  25. package { $package_name: }
  26. }
  27. $_require = [File['sources.list.d'], Package[$package_name]]
  28. } else {
  29. $_require = File['sources.list.d']
  30. }
  31. if defined(Class['apt']) {
  32. case $::apt::proxy_host {
  33. false, '', undef: {
  34. $proxy_env = []
  35. }
  36. default: {
  37. $proxy_env = ["http_proxy=http://${::apt::proxy_host}:${::apt::proxy_port}", "https_proxy=http://${::apt::proxy_host}:${::apt::proxy_port}"]
  38. }
  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 ${sources_list_d}/${sources_list_d_filename}",
  47. user => 'root',
  48. logoutput => 'on_failure',
  49. notify => Exec['apt_update'],
  50. require => $_require,
  51. }
  52. file { "${sources_list_d}/${sources_list_d_filename}":
  53. ensure => file,
  54. require => Exec["add-apt-repository-${name}"],
  55. }
  56. }
  57. else {
  58. file { "${sources_list_d}/${sources_list_d_filename}":
  59. ensure => 'absent',
  60. notify => Exec['apt_update'],
  61. }
  62. }
  63. # Need anchor to provide containment for dependencies.
  64. anchor { "apt::ppa::${name}":
  65. require => Class['apt::update'],
  66. }
  67. }