Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 7 additions & 19 deletions definitions/checks/candlepin/db_up.rb
Original file line number Diff line number Diff line change
@@ -1,32 +1,20 @@
require_relative '../db_up_check'

module Checks
module Candlepin
class DBUp < ForemanMaintain::Check
class DBUp < DBUpCheck
metadata do
description 'Make sure Candlepin DB is up'
label :candlepin_db_up
for_feature :candlepin_database
end

def run
status = false
if feature(:candlepin_database).psql_cmd_available?
with_spinner('Checking connection to the Candlepin DB') do
status = feature(:candlepin_database).ping
end
assert(status, 'Candlepin DB is not responding. ' \
'It needs to be up and running to perform the following steps',
:next_steps => start_pgsql)
else
feature(:candlepin_database).raise_psql_missing_error
end
def database_feature
:candlepin_database
end

def start_pgsql
if feature(:candlepin_database).local?
[Procedures::Service::Start.new(:only => 'postgresql')]
else
[] # there is nothing we can do for remote db
end
def database_name
'Candlepin'
end
end
end
Expand Down
21 changes: 21 additions & 0 deletions definitions/checks/container_gateway/db_up.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
require_relative '../db_up_check'

module Checks
module ContainerGateway
class DBUp < DBUpCheck
metadata do
description 'Make sure ContainerGateway DB is up'
label :container_gateway_db_up
for_feature :container_gateway_database
end

def database_feature
:container_gateway_database
end

def database_name
'Container Gateway'
end
end
end
end
33 changes: 33 additions & 0 deletions definitions/checks/db_up_check.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
module Checks
class DBUpCheck < ForemanMaintain::Check
def run
status = false
if feature(database_feature).psql_cmd_available?
with_spinner("Checking connection to the #{database_name} DB") do
status = feature(database_feature).ping
end
assert(status, "#{database_name} DB is not responding. " \
"It needs to be up and running to perform the following steps",
:next_steps => start_pgsql)
else
feature(database_feature).raise_psql_missing_error
end
end

def start_pgsql
if feature(database_feature).local?
[Procedures::Service::Start.new(:only => 'postgresql')]
else
[] # there is nothing we can do for remote db
end
end

def database_feature
raise NotImplementedError, 'Subclasses must define `database_feature`'
end

def database_name
raise NotImplementedError, 'Subclasses must define `database_name`'
end
end
end
26 changes: 7 additions & 19 deletions definitions/checks/foreman/db_up.rb
Original file line number Diff line number Diff line change
@@ -1,32 +1,20 @@
require_relative '../db_up_check'

module Checks
module Foreman
class DBUp < ForemanMaintain::Check
class DBUp < DBUpCheck
metadata do
description 'Make sure Foreman DB is up'
label :foreman_db_up
for_feature :foreman_database
end

def run
status = false
if feature(:foreman_database).psql_cmd_available?
with_spinner('Checking connection to the Foreman DB') do
status = feature(:foreman_database).ping
end
assert(status, 'Foreman DB is not responding. ' \
'It needs to be up and running to perform the following steps',
:next_steps => start_pgsql)
else
feature(:foreman_database).raise_psql_missing_error
end
def database_feature
:foreman_database
end

def start_pgsql
if feature(:foreman_database).local?
[Procedures::Service::Start.new(:only => 'postgresql')]
else
[] # there is nothing we can do for remote db
end
def database_name
'Foreman'
end
end
end
Expand Down
22 changes: 7 additions & 15 deletions definitions/checks/pulpcore/db_up.rb
Original file line number Diff line number Diff line change
@@ -1,28 +1,20 @@
require_relative '../db_up_check'

module Checks
module Pulpcore
class DBUp < ForemanMaintain::Check
class DBUp < DBUpCheck
metadata do
description 'Make sure Pulpcore DB is up'
label :pulpcore_db_up
for_feature :pulpcore_database
end

def run
status = false
with_spinner('Checking connection to the Pulpcore DB') do
status = feature(:pulpcore_database).ping
end
assert(status, 'Pulpcore DB is not responding. ' \
'It needs to be up and running to perform the following steps',
:next_steps => next_steps)
def database_feature
:pulpcore_database
end

def next_steps
if feature(:pulpcore_database).local?
[Procedures::Service::Start.new(:only => 'postgresql')]
else
[] # there is nothing we can do for remote db
end
def database_name
'Pulpcore'
end
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def run
backup = ForemanMaintain::Utils::Backup.new(@backup_dir)
if feature(:instance).postgresql_local?
errors = []
[:candlepin_dump, :foreman_dump, :pulpcore_dump].each do |dump|
[:candlepin_dump, :foreman_dump, :pulpcore_dump, :container_gateway_dump].each do |dump|
next unless backup.file_map[dump][:present]

unless system("runuser - postgres -c 'test -r #{backup.file_map[dump][:path]}'")
Expand Down
4 changes: 4 additions & 0 deletions definitions/features/candlepin_database.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ def load_configuration
'driver_class' => full_config['jpa.config.hibernate.connection.driver_class'],
'url' => url,
}

# Build connection string for pg_dump (only used for local databases)
@configuration['connection_string'] = "postgres:///#{@configuration['database']}"
@configuration
end

def extend_with_db_options
Expand Down
39 changes: 39 additions & 0 deletions definitions/features/container_gateway_database.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
class Features::ContainerGatewayDatabase < ForemanMaintain::Feature
CONTAINER_GATEWAY_DB_CONFIG = '/etc/foreman-proxy/settings.d/container_gateway.yml'.freeze

include ForemanMaintain::Concerns::BaseDatabase
include ForemanMaintain::Concerns::DirectoryMarker

metadata do
label :container_gateway_database

confine do
file_nonzero?(CONTAINER_GATEWAY_DB_CONFIG)
end
end

def configuration
@configuration || load_configuration
end

def services
[
system_service('postgresql', 10, :component => 'container_gateway',
:db_feature => feature(:container_gateway_database)),
]
end

private

def load_configuration
config = YAML.load(File.read(CONTAINER_GATEWAY_DB_CONFIG))
@configuration = {}
connection_string = config[:db_connection_string]
if connection_string
uri = URI.parse(connection_string)
@configuration['connection_string'] = connection_string
@configuration['database'] = uri.path.delete_prefix('/')
end
@configuration
end
end
3 changes: 3 additions & 0 deletions definitions/features/foreman_database.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ def load_configuration

@configuration = config['production']
@configuration['host'] ||= 'localhost'

# Build connection string for pg_dump (only used for local databases)
@configuration['connection_string'] = "postgres:///#{@configuration['database']}"
@configuration
end
end
3 changes: 2 additions & 1 deletion definitions/features/instance.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ def database_local?(feature)
def postgresql_local?
database_local?(:candlepin_database) ||
database_local?(:foreman_database) ||
database_local?(:pulpcore_database)
database_local?(:pulpcore_database) ||
database_local?(:container_gateway_database)
end

def foreman_proxy_with_content?
Expand Down
3 changes: 3 additions & 0 deletions definitions/features/pulpcore_database.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ def load_configuration
@configuration['database'] = db_config['NAME']
@configuration['username'] = db_config['USER']
@configuration['password'] = db_config['PASSWORD']

# Build connection string for pg_dump (only used for local databases)
@configuration['connection_string'] = "postgres:///#{db_config['NAME']}"
@configuration
end
end
21 changes: 21 additions & 0 deletions definitions/procedures/backup/online/container_gateway_db.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
module Procedures::Backup
module Online
class ContainerGatewayDB < ForemanMaintain::Procedure
metadata do
description 'Backup Container Gateway database'
tags :backup
label :backup_online_container_gateway_db
for_feature :container_gateway_database
preparation_steps { Checks::ContainerGateway::DBUp.new }
param :backup_dir, 'Directory where to backup to', :required => true
end

def run
with_spinner('Getting Container Gateway DB dump') do
feature(:container_gateway_database).
dump_db(File.join(@backup_dir, 'container_gateway.dump'))
end
end
end
end
end
31 changes: 31 additions & 0 deletions definitions/procedures/restore/container_gateway_dump.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
module Procedures::Restore
class ContainerGatewayDump < ForemanMaintain::Procedure
metadata do
description 'Restore container gateway postgresql dump from backup'
param :backup_dir,
'Path to backup directory',
:required => true
preparation_steps { Checks::ContainerGateway::DBUp.new }
confine do
feature(:container_gateway_database)
end
end

def run
backup = ForemanMaintain::Utils::Backup.new(@backup_dir)

with_spinner('Restoring container gateway postgresql dump') do |spinner|
restore_container_gateway_dump(backup, spinner)
end
end

def restore_container_gateway_dump(backup, spinner)
if backup.file_map[:container_gateway_dump][:present]
spinner.update('Restoring container gateway dump')
local = feature(:container_gateway_database).local?
feature(:container_gateway_database).
restore_dump(backup.file_map[:container_gateway_dump][:path], local)
end
end
end
end
11 changes: 10 additions & 1 deletion definitions/procedures/restore/drop_databases.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ class DropDatabases < ForemanMaintain::Procedure
feature(:iop_inventory_database) ||
feature(:iop_remediations_database) ||
feature(:iop_vmaas_database) ||
feature(:iop_vulnerability_database)
feature(:iop_vulnerability_database) ||
feature(:container_gateway_database)
end
end

Expand All @@ -30,6 +31,7 @@ def run
drop_iop_remediations(backup, spinner)
drop_iop_vmaas(backup, spinner)
drop_iop_vulnerability(backup, spinner)
drop_container_gateway(backup, spinner)
end
end

Expand Down Expand Up @@ -88,5 +90,12 @@ def drop_iop_vulnerability(backup, spinner)
feature(:iop_vulnerability_database).dropdb
end
end

def drop_container_gateway(backup, spinner)
if backup.file_map[:container_gateway_dump][:present]
spinner.update('Dropping container gateway database')
feature(:container_gateway_database).dropdb
end
end
end
end
7 changes: 6 additions & 1 deletion definitions/procedures/restore/extract_files.rb
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,12 @@ def extract_pulp_data(backup)
end

def any_database
feature(:foreman_database) || feature(:candlepin_database) || feature(:pulpcore_database)
%i[
foreman_database
candlepin_database
pulpcore_database
container_gateway_database
].any? { |db| feature(db) }
end
end
end
6 changes: 4 additions & 2 deletions definitions/scenarios/backup.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ def set_context_mapping
Procedures::Backup::Online::IopRemediationsDB => :backup_dir,
Procedures::Backup::Online::IopVmaasDB => :backup_dir,
Procedures::Backup::Online::IopVulnerabilityDB => :backup_dir,
Procedures::Backup::Online::PulpcoreDB => :backup_dir)
Procedures::Backup::Online::PulpcoreDB => :backup_dir,
Procedures::Backup::Online::ContainerGatewayDB => :backup_dir)
context.map(:preserve_dir,
Procedures::Backup::PrepareDirectory => :preserve_dir)
context.map(:incremental_dir,
Expand Down Expand Up @@ -112,7 +113,8 @@ def add_database_backup_steps
Procedures::Backup::Online::IopRemediationsDB,
Procedures::Backup::Online::IopVmaasDB,
Procedures::Backup::Online::IopVulnerabilityDB,
Procedures::Backup::Online::PulpcoreDB
Procedures::Backup::Online::PulpcoreDB,
Procedures::Backup::Online::ContainerGatewayDB
)
end

Expand Down
Loading