server.pp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. # Class to configure a PuppetDB server. See README.md for more details.
  2. class puppetdb::server (
  3. $listen_address = $puppetdb::params::listen_address,
  4. $listen_port = $puppetdb::params::listen_port,
  5. $open_listen_port = $puppetdb::params::open_listen_port,
  6. $ssl_listen_address = $puppetdb::params::ssl_listen_address,
  7. $ssl_listen_port = $puppetdb::params::ssl_listen_port,
  8. $disable_ssl = $puppetdb::params::disable_ssl,
  9. $open_ssl_listen_port = $puppetdb::params::open_ssl_listen_port,
  10. $ssl_dir = $puppetdb::params::ssl_dir,
  11. $ssl_set_cert_paths = $puppetdb::params::ssl_set_cert_paths,
  12. $ssl_cert_path = $puppetdb::params::ssl_cert_path,
  13. $ssl_key_path = $puppetdb::params::ssl_key_path,
  14. $ssl_ca_cert_path = $puppetdb::params::ssl_ca_cert_path,
  15. $ssl_deploy_certs = $puppetdb::params::ssl_deploy_certs,
  16. $ssl_key = $puppetdb::params::ssl_key,
  17. $ssl_cert = $puppetdb::params::ssl_cert,
  18. $ssl_ca_cert = $puppetdb::params::ssl_ca_cert,
  19. $ssl_protocols = $puppetdb::params::ssl_protocols,
  20. $database = $puppetdb::params::database,
  21. $database_host = $puppetdb::params::database_host,
  22. $database_port = $puppetdb::params::database_port,
  23. $database_username = $puppetdb::params::database_username,
  24. $database_password = $puppetdb::params::database_password,
  25. $database_name = $puppetdb::params::database_name,
  26. $database_ssl = $puppetdb::params::database_ssl,
  27. $database_validate = $puppetdb::params::database_validate,
  28. $database_embedded_path = $puppetdb::params::database_embedded_path,
  29. $node_ttl = $puppetdb::params::node_ttl,
  30. $node_purge_ttl = $puppetdb::params::node_purge_ttl,
  31. $report_ttl = $puppetdb::params::report_ttl,
  32. $gc_interval = $puppetdb::params::gc_interval,
  33. $log_slow_statements = $puppetdb::params::log_slow_statements,
  34. $conn_max_age = $puppetdb::params::conn_max_age,
  35. $conn_keep_alive = $puppetdb::params::conn_keep_alive,
  36. $conn_lifetime = $puppetdb::params::conn_lifetime,
  37. $puppetdb_package = $puppetdb::params::puppetdb_package,
  38. $puppetdb_version = $puppetdb::params::puppetdb_version,
  39. $puppetdb_service = $puppetdb::params::puppetdb_service,
  40. $puppetdb_service_status = $puppetdb::params::puppetdb_service_status,
  41. $puppetdb_user = $puppetdb::params::puppetdb_user,
  42. $puppetdb_group = $puppetdb::params::puppetdb_group,
  43. $read_database = $puppetdb::params::read_database,
  44. $read_database_host = $puppetdb::params::read_database_host,
  45. $read_database_port = $puppetdb::params::read_database_port,
  46. $read_database_username = $puppetdb::params::read_database_username,
  47. $read_database_password = $puppetdb::params::read_database_password,
  48. $read_database_name = $puppetdb::params::read_database_name,
  49. $read_database_ssl = $puppetdb::params::read_database_ssl,
  50. $read_database_validate = $puppetdb::params::read_database_validate,
  51. $read_log_slow_statements = $puppetdb::params::read_log_slow_statements,
  52. $read_conn_max_age = $puppetdb::params::read_conn_max_age,
  53. $read_conn_keep_alive = $puppetdb::params::read_conn_keep_alive,
  54. $read_conn_lifetime = $puppetdb::params::read_conn_lifetime,
  55. $confdir = $puppetdb::params::confdir,
  56. $manage_firewall = $puppetdb::params::manage_firewall,
  57. $java_args = $puppetdb::params::java_args,
  58. $max_threads = $puppetdb::params::max_threads,
  59. $command_threads = $puppetdb::params::command_threads,
  60. $store_usage = $puppetdb::params::store_usage,
  61. $temp_usage = $puppetdb::params::temp_usage,
  62. ) inherits puppetdb::params {
  63. # Apply necessary suffix if zero is specified.
  64. if $node_ttl == '0' {
  65. $node_ttl_real = '0s'
  66. } else {
  67. $node_ttl_real = downcase($node_ttl)
  68. }
  69. # Validate node_ttl
  70. validate_re ($node_ttl_real, ['^\d+(d|h|m|s|ms)$'], "node_ttl is <${node_ttl}> which does not match the regex validation")
  71. # Apply necessary suffix if zero is specified.
  72. if $node_purge_ttl == '0' {
  73. $node_purge_ttl_real = '0s'
  74. } else {
  75. $node_purge_ttl_real = downcase($node_purge_ttl)
  76. }
  77. # Validate node_purge_ttl
  78. validate_re ($node_purge_ttl_real, ['^\d+(d|h|m|s|ms)$'], "node_purge_ttl is <${node_purge_ttl}> which does not match the regex validation")
  79. # Apply necessary suffix if zero is specified.
  80. if $report_ttl == '0' {
  81. $report_ttl_real = '0s'
  82. } else {
  83. $report_ttl_real = downcase($report_ttl)
  84. }
  85. # Validate report_ttl
  86. validate_re ($report_ttl_real, ['^\d+(d|h|m|s|ms)$'], "report_ttl is <${report_ttl}> which does not match the regex validation")
  87. # Validate puppetdb_service_status
  88. if !($puppetdb_service_status in ['true', 'running', 'false', 'stopped']) {
  89. fail("puppetdb_service_status valid values are 'true', 'running', 'false', and 'stopped'. You provided '${puppetdb_service_status}'")
  90. }
  91. # Validate read-database type (Currently only postgres is supported)
  92. if !($database in ['postgres', 'embedded']) {
  93. fail("database must must be 'postgres' or 'embedded'. You provided '${database}'")
  94. }
  95. # Validate read-database type (Currently only postgres is supported)
  96. if !($read_database in ['postgres']) {
  97. fail("read_database must be 'postgres'. You provided '${read_database}'")
  98. }
  99. package { $puppetdb_package:
  100. ensure => $puppetdb_version,
  101. notify => Service[$puppetdb_service],
  102. }
  103. if $manage_firewall {
  104. class { 'puppetdb::server::firewall':
  105. http_port => $listen_port,
  106. open_http_port => $open_listen_port,
  107. ssl_port => $ssl_listen_port,
  108. open_ssl_port => $open_ssl_listen_port,
  109. }
  110. }
  111. class { 'puppetdb::server::config_ini':
  112. command_threads => $command_threads,
  113. store_usage => $store_usage,
  114. temp_usage => $temp_usage,
  115. confdir => $confdir,
  116. notify => Service[$puppetdb_service],
  117. }
  118. class { 'puppetdb::server::database_ini':
  119. database => $database,
  120. database_host => $database_host,
  121. database_port => $database_port,
  122. database_username => $database_username,
  123. database_password => $database_password,
  124. database_name => $database_name,
  125. database_ssl => $database_ssl,
  126. database_validate => $database_validate,
  127. database_embedded_path => $database_embedded_path,
  128. node_ttl => $node_ttl,
  129. node_purge_ttl => $node_purge_ttl,
  130. report_ttl => $report_ttl,
  131. gc_interval => $gc_interval,
  132. log_slow_statements => $log_slow_statements,
  133. conn_max_age => $conn_max_age,
  134. conn_keep_alive => $conn_keep_alive,
  135. conn_lifetime => $conn_lifetime,
  136. confdir => $confdir,
  137. notify => Service[$puppetdb_service],
  138. }
  139. class { 'puppetdb::server::read_database_ini':
  140. database => $read_database,
  141. database_host => $read_database_host,
  142. database_port => $read_database_port,
  143. database_username => $read_database_username,
  144. database_password => $read_database_password,
  145. database_name => $read_database_name,
  146. database_ssl => $read_database_ssl,
  147. database_validate => $read_database_validate,
  148. log_slow_statements => $read_log_slow_statements,
  149. conn_max_age => $read_conn_max_age,
  150. conn_keep_alive => $read_conn_keep_alive,
  151. conn_lifetime => $read_conn_lifetime,
  152. confdir => $confdir,
  153. notify => Service[$puppetdb_service],
  154. }
  155. if str2bool($ssl_set_cert_paths) == true or str2bool($ssl_deploy_certs) == true {
  156. validate_absolute_path($ssl_key_path)
  157. validate_absolute_path($ssl_cert_path)
  158. validate_absolute_path($ssl_ca_cert_path)
  159. }
  160. if str2bool($ssl_deploy_certs) == true {
  161. validate_absolute_path($ssl_dir)
  162. file{
  163. $ssl_dir:
  164. ensure => directory,
  165. owner => $puppetdb_user,
  166. group => $puppetdb_group,
  167. mode => '0700';
  168. $ssl_key_path:
  169. ensure => file,
  170. content => $ssl_key,
  171. owner => $puppetdb_user,
  172. group => $puppetdb_group,
  173. mode => '0600',
  174. notify => Service[$puppetdb_service];
  175. $ssl_cert_path:
  176. ensure => file,
  177. content => $ssl_cert,
  178. owner => $puppetdb_user,
  179. group => $puppetdb_group,
  180. mode => '0600',
  181. notify => Service[$puppetdb_service];
  182. $ssl_ca_cert_path:
  183. ensure => file,
  184. content => $ssl_ca_cert,
  185. owner => $puppetdb_user,
  186. group => $puppetdb_group,
  187. mode => '0600',
  188. notify => Service[$puppetdb_service];
  189. }
  190. }
  191. class { 'puppetdb::server::jetty_ini':
  192. listen_address => $listen_address,
  193. listen_port => $listen_port,
  194. ssl_listen_address => $ssl_listen_address,
  195. ssl_listen_port => $ssl_listen_port,
  196. ssl_set_cert_paths => $ssl_set_cert_paths,
  197. ssl_key_path => $ssl_key_path,
  198. ssl_cert_path => $ssl_cert_path,
  199. ssl_ca_cert_path => $ssl_ca_cert_path,
  200. ssl_protocols => $ssl_protocols,
  201. disable_ssl => $disable_ssl,
  202. confdir => $confdir,
  203. max_threads => $max_threads,
  204. notify => Service[$puppetdb_service],
  205. }
  206. if !empty($java_args) {
  207. create_resources(
  208. 'ini_subsetting',
  209. puppetdb_create_subsetting_resource_hash(
  210. $java_args,
  211. { ensure => present,
  212. section => '',
  213. key_val_separator => '=',
  214. path => $puppetdb::params::puppetdb_initconf,
  215. setting => 'JAVA_ARGS',
  216. require => Package[$puppetdb_package],
  217. notify => Service[$puppetdb_service],
  218. })
  219. )
  220. }
  221. $service_enabled = $puppetdb_service_status ? {
  222. /(running|true)/ => true,
  223. /(stopped|false)/ => false,
  224. default => true,
  225. }
  226. service { $puppetdb_service:
  227. ensure => $puppetdb_service_status,
  228. enable => $service_enabled,
  229. }
  230. if $manage_firewall {
  231. Package[$puppetdb_package] ->
  232. Class['puppetdb::server::firewall'] ->
  233. Class['puppetdb::server::config_ini'] ->
  234. Class['puppetdb::server::database_ini'] ->
  235. Class['puppetdb::server::read_database_ini'] ->
  236. Class['puppetdb::server::jetty_ini'] ->
  237. Service[$puppetdb_service]
  238. } else {
  239. Package[$puppetdb_package] ->
  240. Class['puppetdb::server::config_ini'] ->
  241. Class['puppetdb::server::database_ini'] ->
  242. Class['puppetdb::server::read_database_ini'] ->
  243. Class['puppetdb::server::jetty_ini'] ->
  244. Service[$puppetdb_service]
  245. }
  246. }