Class: ManageIQ::ApplianceConsole::DatabaseReplication
- Inherits:
-
Object
- Object
- ManageIQ::ApplianceConsole::DatabaseReplication
show all
- Includes:
- Logging
- Defined in:
- lib/manageiq/appliance_console/database_replication.rb
Constant Summary
collapse
- REPMGR_CONFIG =
'/etc/repmgr/10/repmgr.conf'.freeze
- REPMGR_LOG =
'/var/log/repmgr/repmgrd.log'.freeze
- PGPASS_FILE =
'/var/lib/pgsql/.pgpass'.freeze
- NETWORK_INTERFACE =
'eth0'.freeze
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from Logging
#error_and_logging_from_command_result_error, #error_and_logging_from_standard_error, #interactive, #interactive=, interactive?, #interactive?, #log_and_feedback, #log_and_feedback_exception, #log_and_feedback_info, #log_error, #log_prefix, #logger, #logger=, #say_error, #say_info
Instance Attribute Details
#database_name ⇒ Object
Returns the value of attribute database_name.
15
16
17
|
# File 'lib/manageiq/appliance_console/database_replication.rb', line 15
def database_name
@database_name
end
|
#database_password ⇒ Object
Returns the value of attribute database_password.
15
16
17
|
# File 'lib/manageiq/appliance_console/database_replication.rb', line 15
def database_password
@database_password
end
|
#database_user ⇒ Object
Returns the value of attribute database_user.
15
16
17
|
# File 'lib/manageiq/appliance_console/database_replication.rb', line 15
def database_user
@database_user
end
|
#node_number ⇒ Object
Returns the value of attribute node_number.
15
16
17
|
# File 'lib/manageiq/appliance_console/database_replication.rb', line 15
def node_number
@node_number
end
|
#primary_host ⇒ Object
Returns the value of attribute primary_host.
15
16
17
|
# File 'lib/manageiq/appliance_console/database_replication.rb', line 15
def primary_host
@primary_host
end
|
Instance Method Details
#ask_for_database_credentials ⇒ Object
22
23
24
25
|
# File 'lib/manageiq/appliance_console/database_replication.rb', line 22
def ask_for_database_credentials
ask_for_cluster_database_credentials
self.primary_host = ask_for_ip_or_hostname("primary database hostname or IP address", primary_host)
end
|
#ask_for_unique_cluster_node_number ⇒ Object
18
19
20
|
# File 'lib/manageiq/appliance_console/database_replication.rb', line 18
def ask_for_unique_cluster_node_number
self.node_number = ask_for_integer("number uniquely identifying this node in the replication cluster")
end
|
#config_file_contents(host) ⇒ Object
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/manageiq/appliance_console/database_replication.rb', line 55
def config_file_contents(host)
service_name = PostgresAdmin.service_name
<<-EOS.strip_heredoc
node_id=#{node_number}
node_name=#{host}
conninfo='host=#{host} user=#{database_user} dbname=#{database_name}'
use_replication_slots=1
pg_basebackup_options='--wal-method=stream'
failover=automatic
promote_command='repmgr standby promote -f #{REPMGR_CONFIG} --log-to-file'
follow_command='repmgr standby follow -f #{REPMGR_CONFIG} --log-to-file --upstream-node-id=%n'
log_file=#{REPMGR_LOG}
service_start_command='sudo systemctl start #{service_name}'
service_stop_command='sudo systemctl stop #{service_name}'
service_restart_command='sudo systemctl restart #{service_name}'
service_reload_command='sudo systemctl reload #{service_name}'
data_directory='#{PostgresAdmin.data_directory}'
EOS
end
|
#confirm ⇒ Object
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/manageiq/appliance_console/database_replication.rb', line 27
def confirm
clear_screen
say(<<-EOL)
Replication Server Configuration
Cluster Node Number: #{node_number}
Cluster Database Name: #{database_name}
Cluster Database User: #{database_user}
Cluster Database Password: "********"
Cluster Primary Host: #{primary_host}
EOL
end
|
#confirm_reconfiguration ⇒ Object
44
45
46
47
48
|
# File 'lib/manageiq/appliance_console/database_replication.rb', line 44
def confirm_reconfiguration
say("Warning: File #{REPMGR_CONFIG} exists. Replication is already configured")
logger.warn("Warning: File #{REPMGR_CONFIG} exists. Replication is already configured")
agree("Continue with configuration? (Y/N): ")
end
|
#create_config_file(host) ⇒ Object
50
51
52
53
|
# File 'lib/manageiq/appliance_console/database_replication.rb', line 50
def create_config_file(host)
File.write(REPMGR_CONFIG, config_file_contents(host))
true
end
|
40
41
42
|
# File 'lib/manageiq/appliance_console/database_replication.rb', line 40
def repmgr_configured?
File.exist?(REPMGR_CONFIG)
end
|
#write_pgpass_file ⇒ Object
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/manageiq/appliance_console/database_replication.rb', line 75
def write_pgpass_file
File.open(PGPASS_FILE, "w") do |f|
f.write("*:*:#{database_name}:#{database_user}:#{database_password}\n")
f.write("*:*:replication:#{database_user}:#{database_password}\n")
end
FileUtils.chmod(0600, PGPASS_FILE)
FileUtils.chown("postgres", "postgres", PGPASS_FILE)
true
end
|