init.pp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #
  2. class apt(
  3. $update = {},
  4. $purge = {},
  5. $proxy = {},
  6. $sources = {},
  7. $keys = {},
  8. $ppas = {},
  9. $pins = {},
  10. $settings = {},
  11. ) inherits ::apt::params {
  12. $frequency_options = ['always','daily','weekly','reluctantly']
  13. validate_hash($update)
  14. if $update['frequency'] {
  15. validate_re($update['frequency'], $frequency_options)
  16. }
  17. if $update['timeout'] {
  18. unless is_integer($update['timeout']) {
  19. fail('timeout value for update must be an integer')
  20. }
  21. }
  22. if $update['tries'] {
  23. unless is_integer($update['tries']) {
  24. fail('tries value for update must be an integer')
  25. }
  26. }
  27. $_update = merge($::apt::update_defaults, $update)
  28. include ::apt::update
  29. validate_hash($purge)
  30. if $purge['sources.list'] {
  31. validate_bool($purge['sources.list'])
  32. }
  33. if $purge['sources.list.d'] {
  34. validate_bool($purge['sources.list.d'])
  35. }
  36. if $purge['preferences'] {
  37. validate_bool($purge['preferences'])
  38. }
  39. if $purge['preferences.d'] {
  40. validate_bool($purge['preferences.d'])
  41. }
  42. $_purge = merge($::apt::purge_defaults, $purge)
  43. validate_hash($proxy)
  44. if $proxy['ensure'] {
  45. validate_re($proxy['ensure'], ['file', 'present', 'absent'])
  46. }
  47. if $proxy['host'] {
  48. validate_string($proxy['host'])
  49. }
  50. if $proxy['port'] {
  51. unless is_integer($proxy['port']) {
  52. fail('$proxy port must be an integer')
  53. }
  54. }
  55. if $proxy['https'] {
  56. validate_bool($proxy['https'])
  57. }
  58. $_proxy = merge($apt::proxy_defaults, $proxy)
  59. validate_hash($sources)
  60. validate_hash($keys)
  61. validate_hash($settings)
  62. validate_hash($ppas)
  63. validate_hash($pins)
  64. if $_proxy['ensure'] == 'absent' or $_proxy['host'] {
  65. apt::setting { 'conf-proxy':
  66. ensure => $_proxy['ensure'],
  67. priority => '01',
  68. content => template('apt/_conf_header.erb', 'apt/proxy.erb'),
  69. }
  70. }
  71. $sources_list_content = $_purge['sources.list'] ? {
  72. true => "# Repos managed by puppet.\n",
  73. default => undef,
  74. }
  75. $preferences_ensure = $_purge['preferences'] ? {
  76. true => absent,
  77. default => file,
  78. }
  79. if $_update['frequency'] == 'always' {
  80. Exec <| title=='apt_update' |> {
  81. refreshonly => false,
  82. }
  83. }
  84. apt::setting { 'conf-update-stamp':
  85. priority => 15,
  86. content => template('apt/_conf_header.erb', 'apt/15update-stamp.erb'),
  87. }
  88. file { 'sources.list':
  89. ensure => file,
  90. path => $::apt::sources_list,
  91. owner => root,
  92. group => root,
  93. mode => '0644',
  94. content => $sources_list_content,
  95. notify => Class['apt::update'],
  96. }
  97. file { 'sources.list.d':
  98. ensure => directory,
  99. path => $::apt::sources_list_d,
  100. owner => root,
  101. group => root,
  102. mode => '0644',
  103. purge => $_purge['sources.list.d'],
  104. recurse => $_purge['sources.list.d'],
  105. notify => Class['apt::update'],
  106. }
  107. file { 'preferences':
  108. ensure => $preferences_ensure,
  109. path => $::apt::preferences,
  110. owner => root,
  111. group => root,
  112. mode => '0644',
  113. notify => Class['apt::update'],
  114. }
  115. file { 'preferences.d':
  116. ensure => directory,
  117. path => $::apt::preferences_d,
  118. owner => root,
  119. group => root,
  120. mode => '0644',
  121. purge => $_purge['preferences.d'],
  122. recurse => $_purge['preferences.d'],
  123. notify => Class['apt::update'],
  124. }
  125. # manage sources if present
  126. if $sources {
  127. create_resources('apt::source', $sources)
  128. }
  129. # manage keys if present
  130. if $keys {
  131. create_resources('apt::key', $keys)
  132. }
  133. # manage ppas if present
  134. if $ppas {
  135. create_resources('apt::ppa', $ppas)
  136. }
  137. # manage settings if present
  138. if $settings {
  139. create_resources('apt::setting', $settings)
  140. }
  141. # manage pins if present
  142. if $pins {
  143. create_resources('apt::pin', $pins)
  144. }
  145. }