From 9faffd579c061107475187c8201683b00df70151 Mon Sep 17 00:00:00 2001 From: Samir Jha Date: Tue, 6 Aug 2024 13:01:43 -0400 Subject: [PATCH] Fixes #37717 - Update evr extension ownership to foreman --- hooks/boot/01-kafo-hook-extensions.rb | 1 + .../pre/35-change-evr-extension-ownership.rb | 26 +++++++++++++++++++ spec/hook_context_extension_spec.rb | 2 +- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 hooks/pre/35-change-evr-extension-ownership.rb diff --git a/hooks/boot/01-kafo-hook-extensions.rb b/hooks/boot/01-kafo-hook-extensions.rb index 32826ff4..25b13e2b 100644 --- a/hooks/boot/01-kafo-hook-extensions.rb +++ b/hooks/boot/01-kafo-hook-extensions.rb @@ -113,6 +113,7 @@ def execute!(command, do_say = true, do_log = true) log_and_say(:error, "#{command} failed! Check the output for error!", do_say, do_log) exit 1 end + stdout_stderr end def execute_as!(user, command, do_say = true, do_log = true) diff --git a/hooks/pre/35-change-evr-extension-ownership.rb b/hooks/pre/35-change-evr-extension-ownership.rb new file mode 100644 index 00000000..28704910 --- /dev/null +++ b/hooks/pre/35-change-evr-extension-ownership.rb @@ -0,0 +1,26 @@ +# In Katello 4.15, 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_postgresql? && execute("rpm -q postgresql-evr", false, false) + is_postgresql_active = execute_command("systemctl is-active postgresql", false, true)&.first&.strip == "active" + + # Ensure the PostgreSQL service is running + unless is_postgresql_active + logger.debug("Starting postgresql service") + start_services(['postgresql']) unless app_value(:noop) + end + + # Update the ownership of the evr extension + logger.debug("Updating ownership of the evr extension if it is enabled") + database = param_value('foreman', 'db_database') || 'foreman' + username = param_value('foreman', 'db_username') || 'foreman' + sql = "psql -d '#{database}' -c \\\"UPDATE pg_extension SET extowner = (SELECT oid FROM pg_authid WHERE rolname='#{username}') WHERE extname='evr';\\\"" + logger.debug("Executing: #{sql}") + execute_as!('postgres', sql, false, true) unless app_value(:noop) + + # Stop the PostgreSQL service if it was not running + unless is_postgresql_active + logger.debug("Stopping postgresql service") + stop_services(['postgresql']) unless app_value(:noop) + end +end diff --git a/spec/hook_context_extension_spec.rb b/spec/hook_context_extension_spec.rb index 9116430d..603b4956 100644 --- a/spec/hook_context_extension_spec.rb +++ b/spec/hook_context_extension_spec.rb @@ -152,7 +152,7 @@ end it 'executes a command' do - expect(subject).to be_nil + expect(subject).to eq(command) expect(context).to have_received(:execute_command).with(command, true, true) end end