79 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| resource_name :postgresql_custom_server
 | |
| provides :postgresql_custom_server
 | |
| 
 | |
| property :postgresql_version, String, required: true, name_property: true
 | |
| property :role, String, required: true # Can be primary or replica
 | |
| 
 | |
| action :create do
 | |
|   postgresql_version = new_resource.postgresql_version
 | |
|   postgresql_data_dir = "/var/lib/postgresql/#{postgresql_version}/main"
 | |
|   postgresql_service = "postgresql@#{postgresql_version}-main"
 | |
|   postgresql_credentials = data_bag_item('credentials', 'postgresql')
 | |
| 
 | |
|   build_essential do
 | |
|     compile_time true
 | |
|   end
 | |
| 
 | |
|   package("libpq-dev") { action :nothing }.run_action(:install)
 | |
| 
 | |
|   chef_gem 'pg' do
 | |
|     compile_time true
 | |
|   end
 | |
| 
 | |
|   user "postgres" do
 | |
|     manage_home false
 | |
|   end
 | |
| 
 | |
|   postgresql_server_install "main" do
 | |
|     version postgresql_version
 | |
|     setup_repo true
 | |
|     password postgresql_credentials['server_password']
 | |
|     action :install
 | |
|   end
 | |
| 
 | |
|   service postgresql_service do
 | |
|     supports restart: true, status: true, reload: true
 | |
|     action [:enable, :start]
 | |
|   end
 | |
| 
 | |
|   # This service is a dependency that will auto-start our cluster service on
 | |
|   # boot if it's enabled, so we disable it explicitly
 | |
|   service "postgresql" do
 | |
|     action :disable
 | |
|   end
 | |
| 
 | |
|   shared_buffers = if node['memory']['total'].to_i / 1024 < 1024 # < 1GB RAM
 | |
|                      "128MB"
 | |
|                    else # >= 1GB RAM, use 50% of total RAM
 | |
|                      "#{node['memory']['total'].to_i / 1024 / 2}MB"
 | |
|                    end
 | |
| 
 | |
|   additional_config = {
 | |
|     max_connections: 200, # default
 | |
|     shared_buffers: shared_buffers,
 | |
|     unix_socket_directories: "/var/run/postgresql",
 | |
|     dynamic_shared_memory_type: "posix",
 | |
|     timezone: "UTC", # default is GMT
 | |
|     listen_addresses: "0.0.0.0"
 | |
|   }
 | |
| 
 | |
|   additional_config[:promote_trigger_file] = "#{postgresql_data_dir}/failover.trigger"
 | |
| 
 | |
|   postgresql_server_conf "main" do
 | |
|     version postgresql_version
 | |
|     additional_config additional_config
 | |
|     notifies :reload, "service[#{postgresql_service}]", :delayed
 | |
|   end
 | |
| 
 | |
|   postgresql_user "replication" do
 | |
|     action :create
 | |
|     replication true
 | |
|     password postgresql_credentials['replication_password']
 | |
|   end
 | |
| end
 | |
| 
 | |
| action_class do
 | |
|   # to use the data_dir helper
 | |
|   include PostgresqlCookbook::Helpers
 | |
| end
 |