server.pp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  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. $disable_cleartext = $puppetdb::params::disable_cleartext,
  6. $open_listen_port = $puppetdb::params::open_listen_port,
  7. $ssl_listen_address = $puppetdb::params::ssl_listen_address,
  8. $ssl_listen_port = $puppetdb::params::ssl_listen_port,
  9. $disable_ssl = $puppetdb::params::disable_ssl,
  10. $open_ssl_listen_port = $puppetdb::params::open_ssl_listen_port,
  11. $ssl_dir = $puppetdb::params::ssl_dir,
  12. $ssl_set_cert_paths = $puppetdb::params::ssl_set_cert_paths,
  13. $ssl_cert_path = $puppetdb::params::ssl_cert_path,
  14. $ssl_key_path = $puppetdb::params::ssl_key_path,
  15. $ssl_ca_cert_path = $puppetdb::params::ssl_ca_cert_path,
  16. $ssl_deploy_certs = $puppetdb::params::ssl_deploy_certs,
  17. $ssl_key = $puppetdb::params::ssl_key,
  18. $ssl_cert = $puppetdb::params::ssl_cert,
  19. $ssl_ca_cert = $puppetdb::params::ssl_ca_cert,
  20. $ssl_protocols = $puppetdb::params::ssl_protocols,
  21. $database = $puppetdb::params::database,
  22. $database_host = $puppetdb::params::database_host,
  23. $database_port = $puppetdb::params::database_port,
  24. $database_username = $puppetdb::params::database_username,
  25. $database_password = $puppetdb::params::database_password,
  26. $database_name = $puppetdb::params::database_name,
  27. $database_ssl = $puppetdb::params::database_ssl,
  28. $jdbc_ssl_properties = $puppetdb::params::jdbc_ssl_properties,
  29. $database_validate = $puppetdb::params::database_validate,
  30. $database_embedded_path = $puppetdb::params::database_embedded_path,
  31. $node_ttl = $puppetdb::params::node_ttl,
  32. $node_purge_ttl = $puppetdb::params::node_purge_ttl,
  33. $report_ttl = $puppetdb::params::report_ttl,
  34. $gc_interval = $puppetdb::params::gc_interval,
  35. $log_slow_statements = $puppetdb::params::log_slow_statements,
  36. $conn_max_age = $puppetdb::params::conn_max_age,
  37. $conn_keep_alive = $puppetdb::params::conn_keep_alive,
  38. $conn_lifetime = $puppetdb::params::conn_lifetime,
  39. $puppetdb_package = $puppetdb::params::puppetdb_package,
  40. $puppetdb_service = $puppetdb::params::puppetdb_service,
  41. $puppetdb_service_status = $puppetdb::params::puppetdb_service_status,
  42. $puppetdb_user = $puppetdb::params::puppetdb_user,
  43. $puppetdb_group = $puppetdb::params::puppetdb_group,
  44. $read_database = $puppetdb::params::read_database,
  45. $read_database_host = $puppetdb::params::read_database_host,
  46. $read_database_port = $puppetdb::params::read_database_port,
  47. $read_database_username = $puppetdb::params::read_database_username,
  48. $read_database_password = $puppetdb::params::read_database_password,
  49. $read_database_name = $puppetdb::params::read_database_name,
  50. $read_database_ssl = $puppetdb::params::read_database_ssl,
  51. $read_database_jdbc_ssl_properties = $puppetdb::params::read_database_jdbc_ssl_properties,
  52. $read_database_validate = $puppetdb::params::read_database_validate,
  53. $read_log_slow_statements = $puppetdb::params::read_log_slow_statements,
  54. $read_conn_max_age = $puppetdb::params::read_conn_max_age,
  55. $read_conn_keep_alive = $puppetdb::params::read_conn_keep_alive,
  56. $read_conn_lifetime = $puppetdb::params::read_conn_lifetime,
  57. $confdir = $puppetdb::params::confdir,
  58. $vardir = $puppetdb::params::vardir,
  59. $manage_firewall = $puppetdb::params::manage_firewall,
  60. $java_args = $puppetdb::params::java_args,
  61. $merge_default_java_args = $puppetdb::params::merge_default_java_args,
  62. $max_threads = $puppetdb::params::max_threads,
  63. $command_threads = $puppetdb::params::command_threads,
  64. $store_usage = $puppetdb::params::store_usage,
  65. $temp_usage = $puppetdb::params::temp_usage,
  66. $certificate_whitelist_file = $puppetdb::params::certificate_whitelist_file,
  67. $certificate_whitelist = $puppetdb::params::certificate_whitelist,
  68. $database_max_pool_size = $puppetdb::params::database_max_pool_size,
  69. $read_database_max_pool_size = $puppetdb::params::read_database_max_pool_size,
  70. ) inherits puppetdb::params {
  71. # deprecation warnings
  72. if $database_ssl != undef {
  73. warning('$database_ssl is deprecated and will be removed in the next major release. Please use $jdbc_ssl_properties = "?ssl=true" instead.')
  74. }
  75. if $read_database_ssl != undef {
  76. warning('$read_database_ssl is deprecated and will be removed in the next major release. Please use $read_database_jdbc_ssl_properties = "?ssl=true" instead.')
  77. }
  78. # Apply necessary suffix if zero is specified.
  79. if $node_ttl == '0' {
  80. $node_ttl_real = '0s'
  81. } else {
  82. $node_ttl_real = downcase($node_ttl)
  83. }
  84. # Validate node_ttl
  85. validate_re ($node_ttl_real, ['^\d+(d|h|m|s|ms)$'], "node_ttl is <${node_ttl}> which does not match the regex validation")
  86. # Apply necessary suffix if zero is specified.
  87. if $node_purge_ttl == '0' {
  88. $node_purge_ttl_real = '0s'
  89. } else {
  90. $node_purge_ttl_real = downcase($node_purge_ttl)
  91. }
  92. # Validate node_purge_ttl
  93. 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")
  94. # Apply necessary suffix if zero is specified.
  95. if $report_ttl == '0' {
  96. $report_ttl_real = '0s'
  97. } else {
  98. $report_ttl_real = downcase($report_ttl)
  99. }
  100. # Validate report_ttl
  101. validate_re ($report_ttl_real, ['^\d+(d|h|m|s|ms)$'], "report_ttl is <${report_ttl}> which does not match the regex validation")
  102. # Validate puppetdb_service_status
  103. $service_enabled = $puppetdb_service_status ? {
  104. /(running|true)/ => true,
  105. /(stopped|false)/ => false,
  106. default => fail("puppetdb_service_status valid values are 'true', 'running', 'false', and 'stopped'. You provided '${puppetdb_service_status}'"),
  107. }
  108. # Validate database type (Currently only postgres and embedded are supported)
  109. if !($database in ['postgres', 'embedded']) {
  110. fail("database must must be 'postgres' or 'embedded'. You provided '${database}'")
  111. }
  112. # Validate read-database type (Currently only postgres is supported)
  113. if !($read_database in ['postgres']) {
  114. fail("read_database must be 'postgres'. You provided '${read_database}'")
  115. }
  116. package { $puppetdb_package:
  117. ensure => $puppetdb::params::puppetdb_version,
  118. notify => Service[$puppetdb_service],
  119. }
  120. if $manage_firewall {
  121. class { 'puppetdb::server::firewall':
  122. http_port => $listen_port,
  123. open_http_port => $open_listen_port,
  124. ssl_port => $ssl_listen_port,
  125. open_ssl_port => $open_ssl_listen_port,
  126. }
  127. }
  128. class { 'puppetdb::server::global':
  129. vardir => $vardir,
  130. confdir => $confdir,
  131. puppetdb_user => $puppetdb_user,
  132. puppetdb_group => $puppetdb_group,
  133. notify => Service[$puppetdb_service],
  134. }
  135. class { 'puppetdb::server::command_processing':
  136. command_threads => $command_threads,
  137. store_usage => $store_usage,
  138. temp_usage => $temp_usage,
  139. confdir => $confdir,
  140. notify => Service[$puppetdb_service],
  141. }
  142. class { 'puppetdb::server::database':
  143. database => $database,
  144. database_host => $database_host,
  145. database_port => $database_port,
  146. database_username => $database_username,
  147. database_password => $database_password,
  148. database_name => $database_name,
  149. database_ssl => $database_ssl,
  150. database_max_pool_size => $database_max_pool_size,
  151. jdbc_ssl_properties => $jdbc_ssl_properties,
  152. database_validate => $database_validate,
  153. database_embedded_path => $database_embedded_path,
  154. node_ttl => $node_ttl,
  155. node_purge_ttl => $node_purge_ttl,
  156. report_ttl => $report_ttl,
  157. gc_interval => $gc_interval,
  158. log_slow_statements => $log_slow_statements,
  159. conn_max_age => $conn_max_age,
  160. conn_keep_alive => $conn_keep_alive,
  161. conn_lifetime => $conn_lifetime,
  162. confdir => $confdir,
  163. puppetdb_user => $puppetdb_user,
  164. puppetdb_group => $puppetdb_group,
  165. notify => Service[$puppetdb_service],
  166. }
  167. class { 'puppetdb::server::read_database':
  168. database => $read_database,
  169. database_host => $read_database_host,
  170. database_port => $read_database_port,
  171. database_username => $read_database_username,
  172. database_password => $read_database_password,
  173. database_name => $read_database_name,
  174. database_ssl => $read_database_ssl,
  175. jdbc_ssl_properties => $read_database_jdbc_ssl_properties,
  176. database_validate => $read_database_validate,
  177. log_slow_statements => $read_log_slow_statements,
  178. conn_max_age => $read_conn_max_age,
  179. conn_keep_alive => $read_conn_keep_alive,
  180. conn_lifetime => $read_conn_lifetime,
  181. confdir => $confdir,
  182. puppetdb_user => $puppetdb_user,
  183. puppetdb_group => $puppetdb_group,
  184. notify => Service[$puppetdb_service],
  185. database_max_pool_size => $read_database_max_pool_size,
  186. }
  187. if str2bool($ssl_set_cert_paths) == true
  188. or str2bool($ssl_deploy_certs) == true {
  189. validate_absolute_path($ssl_key_path)
  190. validate_absolute_path($ssl_cert_path)
  191. validate_absolute_path($ssl_ca_cert_path)
  192. }
  193. if str2bool($ssl_deploy_certs) == true {
  194. validate_absolute_path($ssl_dir)
  195. file {
  196. $ssl_dir:
  197. ensure => directory,
  198. owner => $puppetdb_user,
  199. group => $puppetdb_group,
  200. mode => '0700';
  201. $ssl_key_path:
  202. ensure => file,
  203. content => $ssl_key,
  204. owner => $puppetdb_user,
  205. group => $puppetdb_group,
  206. mode => '0600',
  207. notify => Service[$puppetdb_service];
  208. $ssl_cert_path:
  209. ensure => file,
  210. content => $ssl_cert,
  211. owner => $puppetdb_user,
  212. group => $puppetdb_group,
  213. mode => '0600',
  214. notify => Service[$puppetdb_service];
  215. $ssl_ca_cert_path:
  216. ensure => file,
  217. content => $ssl_ca_cert,
  218. owner => $puppetdb_user,
  219. group => $puppetdb_group,
  220. mode => '0600',
  221. notify => Service[$puppetdb_service];
  222. }
  223. }
  224. class { 'puppetdb::server::jetty':
  225. listen_address => $listen_address,
  226. listen_port => $listen_port,
  227. disable_cleartext => $disable_cleartext,
  228. ssl_listen_address => $ssl_listen_address,
  229. ssl_listen_port => $ssl_listen_port,
  230. ssl_set_cert_paths => $ssl_set_cert_paths,
  231. ssl_key_path => $ssl_key_path,
  232. ssl_cert_path => $ssl_cert_path,
  233. ssl_ca_cert_path => $ssl_ca_cert_path,
  234. ssl_protocols => $ssl_protocols,
  235. disable_ssl => $disable_ssl,
  236. confdir => $confdir,
  237. max_threads => $max_threads,
  238. notify => Service[$puppetdb_service],
  239. puppetdb_user => $puppetdb_user,
  240. puppetdb_group => $puppetdb_group,
  241. }
  242. class { 'puppetdb::server::puppetdb':
  243. certificate_whitelist_file => $certificate_whitelist_file,
  244. certificate_whitelist => $certificate_whitelist,
  245. confdir => $confdir,
  246. puppetdb_user => $puppetdb_user,
  247. puppetdb_group => $puppetdb_group,
  248. notify => Service[$puppetdb_service],
  249. }
  250. if !empty($java_args) {
  251. if $merge_default_java_args {
  252. create_resources(
  253. 'ini_subsetting',
  254. puppetdb_create_subsetting_resource_hash(
  255. $java_args, {
  256. ensure => present,
  257. section => '',
  258. key_val_separator => '=',
  259. path => $puppetdb::params::puppetdb_initconf,
  260. setting => 'JAVA_ARGS',
  261. require => Package[$puppetdb_package],
  262. notify => Service[$puppetdb_service],
  263. }))
  264. } else {
  265. ini_setting { 'java_args':
  266. ensure => present,
  267. section => '',
  268. path => $puppetdb::params::puppetdb_initconf,
  269. setting => 'JAVA_ARGS',
  270. require => Package[$puppetdb_package],
  271. notify => Service[$puppetdb_service],
  272. value => puppetdb_flatten_java_args($java_args),
  273. }
  274. }
  275. }
  276. service { $puppetdb_service:
  277. ensure => $puppetdb_service_status,
  278. enable => $service_enabled,
  279. }
  280. if $manage_firewall {
  281. Package[$puppetdb_package] ->
  282. Class['puppetdb::server::firewall'] ->
  283. Class['puppetdb::server::global'] ->
  284. Class['puppetdb::server::command_processing'] ->
  285. Class['puppetdb::server::database'] ->
  286. Class['puppetdb::server::read_database'] ->
  287. Class['puppetdb::server::jetty'] ->
  288. Class['puppetdb::server::puppetdb'] ->
  289. Service[$puppetdb_service]
  290. } else {
  291. Package[$puppetdb_package] ->
  292. Class['puppetdb::server::global'] ->
  293. Class['puppetdb::server::command_processing'] ->
  294. Class['puppetdb::server::database'] ->
  295. Class['puppetdb::server::read_database'] ->
  296. Class['puppetdb::server::jetty'] ->
  297. Class['puppetdb::server::puppetdb'] ->
  298. Service[$puppetdb_service]
  299. }
  300. }