Advertisement
Guest User

Untitled

a guest
Apr 24th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.54 KB | None | 0 0
  1. class roles::postgres_rds_basic (
  2. $rds_host = hiera('rds_host'),
  3. $rds_password = hiera('rds_password'),
  4. $rds_database = hiera('rds_database'),
  5. $rds_privilege = "ALL PRIVILEGES",
  6. $rds_role_admin = hiera('rds_role_admin'),
  7. $rds_role_public = hiera('rds_role_public'),
  8. $rds_role_admin_password = hiera('rds_role_admin_password'),
  9. $rds_role_public_password = hiera('rds_role_public_password'),
  10. $monitoring_user = "sensu",
  11. $monitoring_password = "sensu",
  12. ){
  13. class { 'postgresql::globals':
  14. manage_package_repo => false
  15. } ->
  16. class { 'roles::pgsql_client':
  17. postgres_client_version => '9.6'
  18. } ->
  19. class { 'postgresql::server':
  20. package_ensure => false
  21. }
  22. $connection_settings = {
  23. 'PGUSER' => 'postgres',
  24. 'PGPASSWORD' => $rds_password,
  25. 'PGHOST' => $rds_host,
  26. 'PGPORT' => '5432',
  27. 'PGDATABASE' => 'postgres',
  28. }
  29. #create db and shema
  30. postgresql::server::database { $rds_database:
  31. connect_settings => $connection_settings,
  32. }
  33. postgresql::server::schema { $rds_database:
  34. connect_settings => $connection_settings,
  35. }
  36.  
  37. #admin user
  38.  
  39. postgresql::server::role { $rds_role_admin:
  40. password_hash => postgresql_password($rds_role_admin, $rds_role_admin_password),
  41. update_password => false,
  42. connect_settings => $connection_settings,
  43. }
  44.  
  45. postgresql::server::database_grant { $rds_role_admin:
  46. connect_settings => $connection_settings,
  47. privilege => $rds_privilege,
  48. db => $rds_database,
  49. role => $rds_role_admin,
  50. }
  51.  
  52. #public user
  53.  
  54. postgresql::server::role { $rds_role_public:
  55. password_hash => postgresql_password($rds_role_public, $rds_role_public_password),
  56. update_password => false,
  57. connect_settings => $connection_settings,
  58. }
  59. postgresql::server::database_grant { $rds_role_public:
  60. connect_settings => $connection_settings,
  61. privilege => $rds_privilege,
  62. db => $rds_database,
  63. role => $rds_role_public,
  64. } ->
  65.  
  66. exec { "Set default privileges fot TABLES":
  67. path => ["/usr/bin","/bin"],
  68. environment => ["PGPASSWORD=$rds_role_admin_password"],
  69. command => "psql -h $rds_host -U $rds_role_admin -d $rds_database -c 'ALTER DEFAULT PRIVILEGES FOR ROLE $rds_role_admin IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES to $rds_role_public;'",
  70. unless => "psql -h $rds_host -U $rds_role_admin -d $rds_database -c '\ddp' | grep $rds_role_public",
  71. } ->
  72.  
  73. exec { "Set default privileges fot SEQUENCES":
  74. path => ["/usr/bin","/bin"],
  75. environment => ["PGPASSWORD=$rds_role_admin_password"],
  76. command => "psql -h $rds_host -U $rds_role_admin -d $rds_database -c 'ALTER DEFAULT PRIVILEGES FOR ROLE $rds_role_admin IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES to $rds_role_public;'",
  77. unless => "psql -h $rds_host -U $rds_role_admin -d $rds_database -c '\ddp' | grep $rds_role_public",
  78. }
  79.  
  80. #monitoring
  81. file { "/etc/sensu/plugins/hmpo/sensu_postgres_wrapper.sh":
  82. owner => "sensu",
  83. group => "sensu",
  84. mode => "0700",
  85. content => template('roles/postgres_rds/sensu_postgres_wrapper.sh.erb'),
  86. }
  87. $dbs_to_monitor = hiera_hash('roles::postgres_rds::dbs_to_monitor',{})
  88. $dbs_to_monitor.each |$db_name,$table_list| {
  89. create_resources('roles::postgres_rds::monitor_grant', $postgres_app_users, {
  90. db_name => $db_name,
  91. table_list => $table_list,
  92. monitoring_user => $monitoring_user,
  93. rds_host => $rds_host })
  94. }
  95. define roles::postgres_rds::monitor_grant($postgres_password, $postgres_dbs, $db_name,$table_list, $monitoring_user, $rds_host) {
  96. if $postgres_dbs == $db_name {
  97. $connection_settings_usr = {
  98. 'PGUSER' => $name,
  99. 'PGPASSWORD' => $postgres_password,
  100. 'PGHOST' => $rds_host,
  101. 'PGPORT' => '5432',
  102. 'PGDATABASE' => $postgres_dbs,
  103. }
  104. postgresql::server::database_grant { "${monitoring_user}_${db_name}":
  105. privilege => 'CONNECT',
  106. db => $db_name,
  107. role => $monitoring_user,
  108. connect_settings => $connection_settings_usr,
  109. }
  110. $table_list.each |$table| {
  111. postgresql::server::table_grant { "${monitoring_user}_${db_name}_${table}":
  112. privilege => 'SELECT',
  113. db => $db_name,
  114. table => $table,
  115. role => $monitoring_user,
  116. connect_settings => $connection_settings_usr,
  117. }
  118. }
  119. }
  120. }
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement