ppa.pp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. # ppa.pp
  2. define apt::ppa(
  3. $release = $::lsbdistcodename
  4. ) {
  5. include apt::params
  6. include apt::update
  7. $sources_list_d = $apt::params::sources_list_d
  8. if ! $release {
  9. fail('lsbdistcodename fact not available: release parameter required')
  10. }
  11. $filename_without_slashes = regsubst($name, '/', '-', G)
  12. $filename_without_dots = regsubst($filename_without_slashes, '\.', '_', G)
  13. $filename_without_ppa = regsubst($filename_without_dots, '^ppa:', '', G)
  14. $sources_list_d_filename = "${filename_without_ppa}-${release}.list"
  15. $package = $::lsbdistrelease ? {
  16. /^[1-9]\..*|1[01]\..*|12.04$/ => 'python-software-properties',
  17. default => 'software-properties-common',
  18. }
  19. if ! defined(Package[$package]) {
  20. package { $package: }
  21. }
  22. exec { "add-apt-repository-${name}":
  23. command => "/usr/bin/add-apt-repository ${name}",
  24. creates => "${sources_list_d}/${sources_list_d_filename}",
  25. logoutput => 'on_failure',
  26. require => [
  27. File[$sources_list_d],
  28. Package["${package}"],
  29. ],
  30. notify => Exec['apt_update'],
  31. }
  32. file { "${sources_list_d}/${sources_list_d_filename}":
  33. ensure => file,
  34. require => Exec["add-apt-repository-${name}"],
  35. }
  36. # Need anchor to provide containment for dependencies.
  37. anchor { "apt::ppa::${name}":
  38. require => Class['apt::update'],
  39. }
  40. }