source.pp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. # source.pp
  2. # add an apt source
  3. define apt::source(
  4. $comment = $name,
  5. $ensure = present,
  6. $location = '',
  7. $release = 'UNDEF',
  8. $repos = 'main',
  9. $include_src = true,
  10. $include_deb = true,
  11. $required_packages = false,
  12. $key = undef,
  13. $key_server = 'keyserver.ubuntu.com',
  14. $key_content = undef,
  15. $key_source = undef,
  16. $pin = false,
  17. $architecture = undef,
  18. $trusted_source = false,
  19. ) {
  20. include apt::params
  21. include apt::update
  22. validate_string($architecture)
  23. validate_bool($trusted_source)
  24. $sources_list_d = $apt::params::sources_list_d
  25. $provider = $apt::params::provider
  26. if $release == 'UNDEF' {
  27. if $::lsbdistcodename == undef {
  28. fail('lsbdistcodename fact not available: release parameter required')
  29. } else {
  30. $release_real = $::lsbdistcodename
  31. }
  32. } else {
  33. $release_real = $release
  34. }
  35. file { "${name}.list":
  36. ensure => $ensure,
  37. path => "${sources_list_d}/${name}.list",
  38. owner => root,
  39. group => root,
  40. mode => '0644',
  41. content => template("${module_name}/source.list.erb"),
  42. notify => Exec['apt_update'],
  43. }
  44. if ($pin != false) {
  45. # Get the host portion out of the url so we can pin to origin
  46. $url_split = split($location, '/')
  47. $host = $url_split[2]
  48. apt::pin { $name:
  49. ensure => $ensure,
  50. priority => $pin,
  51. before => File["${name}.list"],
  52. origin => $host,
  53. }
  54. }
  55. if ($required_packages != false) and ($ensure == 'present') {
  56. exec { "Required packages: '${required_packages}' for ${name}":
  57. command => "${provider} -y install ${required_packages}",
  58. logoutput => 'on_failure',
  59. refreshonly => true,
  60. tries => 3,
  61. try_sleep => 1,
  62. subscribe => File["${name}.list"],
  63. before => Exec['apt_update'],
  64. }
  65. }
  66. # We do not want to remove keys when the source is absent.
  67. if $key and ($ensure == 'present') {
  68. apt::key { "Add key: ${key} from Apt::Source ${title}":
  69. ensure => present,
  70. key => $key,
  71. key_server => $key_server,
  72. key_content => $key_content,
  73. key_source => $key_source,
  74. before => File["${name}.list"],
  75. }
  76. }
  77. # Need anchor to provide containment for dependencies.
  78. anchor { "apt::source::${name}":
  79. require => Class['apt::update'],
  80. }
  81. }