source.pp 2.3 KB

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