source.pp 2.4 KB

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