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, #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, #start_evm, #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

Constructor Details

#initialize(hash = {}) ⇒ InternalDatabaseConfiguration

Returns a new instance of InternalDatabaseConfiguration.



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

def initialize(hash = {})
  set_defaults
  super
end

Instance Attribute Details

#diskObject

Returns the value of attribute disk.



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

def disk
  @disk
end

#run_as_evm_serverObject

Returns the value of attribute run_as_evm_server.



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

def run_as_evm_server
  @run_as_evm_server
end

Class Method Details

.postgres_dirObject



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

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

.postgresql_templateObject



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

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

Instance Method Details

#activateObject



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

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



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

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



71
72
73
74
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 71

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



67
68
69
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 67

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

#configure_postgresObject



107
108
109
110
111
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 107

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

#initialize_postgresqlObject



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

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



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

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

#post_activationObject



113
114
115
# File 'lib/manageiq/appliance_console/internal_database_configuration.rb', line 113

def post_activation
  start_evm if run_as_evm_server
end

#set_defaultsObject



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

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