Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes #37717 - Update evr extension ownership to foreman #955

Merged
merged 1 commit into from
Dec 12, 2024
Merged
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
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)
sjha4 marked this conversation as resolved.
Show resolved Hide resolved
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
sjha4 marked this conversation as resolved.
Show resolved Hide resolved
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.")
sjha4 marked this conversation as resolved.
Show resolved Hide resolved
end
end
sjha4 marked this conversation as resolved.
Show resolved Hide resolved
Loading