source.pp 2.1 KB

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