Skip to content

Commit

Permalink
Fixes #37717 - Update evr extension ownership to foreman
Browse files Browse the repository at this point in the history
  • Loading branch information
sjha4 authored and ekohl committed Dec 12, 2024
1 parent 57e5af7 commit d4a78ff
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
15 changes: 14 additions & 1 deletion hooks/boot/01-kafo-hook-extensions.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require 'English'
require 'open3'
require 'shellwords'

module HookContextExtension
# FIXME: remove when #23332 is released
Expand Down Expand Up @@ -85,6 +86,12 @@ def pulpcore_enabled?
module_enabled?('foreman_proxy_content')
end

def local_db_exists?(database)
db_existence_command = pg_sql_statement("SELECT 1 FROM pg_database WHERE datname = '#{database}';")
db_existence_output, = execute_preformatted_as('postgres', db_existence_command, false, true)
db_existence_output&.strip == '1'
end

def log_and_say(level, message, do_say = true, do_log = true)
style = case level
when :error
Expand Down Expand Up @@ -164,13 +171,19 @@ def execute_as!(user, command, do_say = true, do_log = true, extra_env = {})
execute!(runuser_command, do_say, do_log, extra_env)
end

def execute_preformatted_as(user, command, do_say = true, do_log = true, extra_env = {})
runuser_command = ['runuser', '-l', user, '-c', command]
execute_command(runuser_command, do_say, do_log, extra_env)
end

def execute(command, do_say, do_log, extra_env = {})
_stdout_stderr, status = execute_command(command, do_say, do_log, extra_env)
status
end

def execute_command(command, do_say, do_log, extra_env = {})
log_and_say(:debug, "Executing: #{command}", do_say, do_log)
display_command = command.is_a?(Array) ? Shellwords.join(command) : command
log_and_say(:debug, "Executing: #{display_command}", do_say, do_log)

begin
stdout_stderr, status = Open3.capture2e(*Kafo::PuppetCommand.format_command(command, extra_env))
Expand Down
28 changes: 28 additions & 0 deletions hooks/pre/35-change-evr-extension-ownership.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# In Katello 4.16, the 'evr' extension is removed from PostgreSQL and integrated into the Katello database via a migration.
# This hook ensures the 'evr' extension's ownership is transferred to the 'foreman' user so migrations can act on it.

if (local_foreman_db? || devel_scenario?) && execute("rpm -q postgresql-evr", false, false)
if app_value(:noop)
logger.debug("Would start postgresql service")
else
start_services(['postgresql'])
end

database = param_value('foreman', 'db_database') || 'foreman'
username = param_value('foreman', 'db_username') || 'foreman'

if local_db_exists?(database)
sql = "UPDATE pg_extension SET extowner = (SELECT oid FROM pg_authid WHERE rolname='#{username}') WHERE extname='evr'"
if app_value(:noop)
logger.debug("Would execute the following SQL statement to update ownership of the evr extension: #{sql}")
else
logger.debug("Updating ownership of the evr extension")
_, success = execute_preformatted_as('postgres', "psql -d #{database} -c \"#{sql}\"", false, true)
unless success
fail_and_exit("Failed to update ownership of the evr extension. Please make sure the following sql succeeds before proceeding: #{sql}")
end
end
else
logger.notice("The Foreman database #{database} does not exist.")
end
end

0 comments on commit d4a78ff

Please sign in to comment.