Class: ManageIQ::ApplianceConsole::DatabaseReplication

Inherits:
Object
  • Object
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_nameObject

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_passwordObject

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_userObject

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_numberObject

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_hostObject

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_credentialsObject



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_numberObject



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

#confirmObject



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_reconfigurationObject



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

#repmgr_configured?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/manageiq/appliance_console/database_replication.rb', line 40

def repmgr_configured?
  File.exist?(REPMGR_CONFIG)
end

#write_pgpass_fileObject



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