Class: ManageIQ::ApplianceConsole::InternalDatabaseConfiguration

Inherits:
DatabaseConfiguration show all
Defined in:
lib/manageiq/appliance_console/internal_database_configuration.rb

Constant Summary collapse

DEDICATED_DB_SHARED_BUFFERS =
"'1GB'".freeze
SHARED_DB_SHARED_BUFFERS =
"'128MB'".freeze

Constants inherited from DatabaseConfiguration

DatabaseConfiguration::CREATE_REGION_AGREE, DatabaseConfiguration::DB_YML, DatabaseConfiguration::DB_YML_TMPL, DatabaseConfiguration::DEFAULT_PORT, DatabaseConfiguration::FAILED_WITH_ERROR_HYPHEN, DatabaseConfiguration::REGION_RANGE

Instance Attribute Summary collapse

Attributes inherited from DatabaseConfiguration

#adapter, #database, #host, #password, #port, #region, #run_as_evm_server, #username

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from DatabaseConfiguration

#ask_for_database_credentials, #create_new_region_questions, #create_or_join_region, #create_region, current, database_host, database_name, database_yml_configured?, decrypt_password, encrypt_password, #friendly_inspect, #join_region, #local?, #merged_settings, region, #reset_region, #run_interactive, #save, #settings_hash, #validate!, #validated

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

Methods included from ManageiqUserMixin

#manageiq_gid, #manageiq_uid

Constructor Details

#initialize(hash = {}) ⇒ InternalDatabaseConfiguration

Returns a new instance of InternalDatabaseConfiguration.



21
22
23
24
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 21

def initialize(hash = {})
  set_defaults
  super
end

Instance Attribute Details

#diskObject

Returns the value of attribute disk.



8
9
10
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 8

def disk
  @disk
end

Class Method Details

.postgres_dirObject



13
14
15
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 13

def self.postgres_dir
  PostgresAdmin.data_directory.relative_path_from(Pathname.new("/"))
end

.postgresql_templateObject



17
18
19
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 17

def self.postgresql_template
  PostgresAdmin.template_directory.join(postgres_dir)
end

Instance Method Details

#activateObject



32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 32

def activate
  if PostgresAdmin.initialized?
    say(<<-EOF.gsub!(/^\s+/, ""))
      An internal database already exists.
      Choose "Reset Configured Database" to reset the existing installation
      EOF
    return false
  end
  initialize_postgresql_disk if disk
  initialize_postgresql
  run_as_evm_server ? (return super) : save
  true
end

#ask_questionsObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 46

def ask_questions
  choose_disk
  check_disk_is_mount_point
  self.run_as_evm_server = !ask_yn?(<<-EOS.gsub!(/^ +/m, ""), "N")

    Should this appliance run as a standalone database server?

    NOTE:
    * The #{I18n.t("product.name")} application will not be running.
    * This is required when using highly available database deployments.
    * CAUTION: This is not reversible.

  EOS
  # TODO: Assume we want to create a region for a new internal database disk
  # until we allow for the internal selection against an already initialized disk.
  create_new_region_questions(false) if run_as_evm_server
  ask_for_database_credentials
end

#check_disk_is_mount_pointObject



69
70
71
72
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 69

def check_disk_is_mount_point
  error_message = "Internal databases require a volume mounted at #{mount_point}. Please add an unpartitioned disk and try again."
  raise error_message unless disk || pg_mount_point?
end

#choose_diskObject



65
66
67
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 65

def choose_disk
  @disk = ask_for_disk("database disk", false, true)
end

#configure_postgresObject



105
106
107
108
109
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 105

def configure_postgres
  copy_template "postgresql.conf"
  copy_template "pg_hba.conf"
  copy_template "pg_ident.conf"
end

#initialize_postgresqlObject



91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 91

def initialize_postgresql
  log_and_feedback(__method__) do
    PostgresAdmin.prep_data_directory
    run_initdb
    configure_ssl
    relabel_postgresql_dir
    configure_postgres
    start_postgres
    create_postgres_root_user
    create_postgres_database
    apply_initial_configuration
  end
end

#initialize_postgresql_diskObject



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 74

def initialize_postgresql_disk
  log_and_feedback(__method__) do
    LogicalVolumeManagement.new(:disk                => disk,
                                :mount_point         => mount_point,
                                :name                => "pg",
                                :volume_group_name   => PostgresAdmin.volume_group_name,
                                :filesystem_type     => PostgresAdmin.database_disk_filesystem,
                                :logical_volume_path => PostgresAdmin.logical_volume_path).setup
  end

  # if we mounted the disk onto the postgres user's home directory, fix the permissions
  if mount_point.to_s == "/var/lib/pgsql"
    FileUtils.chown(PostgresAdmin.user, PostgresAdmin.group, "/var/lib/pgsql")
    FileUtils.chmod(0o700, "/var/lib/pgsql")
  end
end

#set_defaultsObject



26
27
28
29
30
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 26

def set_defaults
  self.host     = 'localhost'
  self.username = "root"
  self.database = "vmdb_production"
end