-
Notifications
You must be signed in to change notification settings - Fork 72
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
Halt upgrades if evr is not owned by foreman #953
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
module Checks | ||
module Foreman | ||
class CheckExternalDbEvrPermissions < ForemanMaintain::Check | ||
metadata do | ||
label :external_db_evr_permissions | ||
for_feature :foreman_database | ||
description 'Check that external DBs have proper EVR extension permissions' | ||
tags :pre_upgrade | ||
confine do | ||
feature(:foreman_database) && !feature(:foreman_database).local? && feature(:katello) | ||
end | ||
end | ||
|
||
def run | ||
# No check is needed if the evr extension does not exist | ||
evr_exists = find_evr_exists | ||
return if !evr_exists | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think you could just turn this into more of a
|
||
|
||
error_msg = 'The evr extension is not owned by the foreman DB owner. Please run the following command to fix it: ' \ | ||
"UPDATE pg_extension SET extowner = (SELECT oid FROM pg_authid WHERE rolname='foreman') WHERE extname='evr';" | ||
foreman_owns_evr = find_foreman_owns_evr | ||
fail!(error_msg) if !foreman_owns_evr | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same idea here, switch to
|
||
end | ||
|
||
def find_evr_exists | ||
evr_exists = feature(:foreman_database).query(self.class.query_for_evr_existence) | ||
if !evr_exists.empty? && evr_exists.first['evr_exists'] == '1' | ||
return evr_exists.first['evr_exists'] == '1' | ||
end | ||
return false | ||
end | ||
|
||
def find_foreman_owns_evr | ||
evr_owned_by_postgres = feature(:foreman_database).query(self.class.query_to_find_evr_owner) | ||
if !evr_owned_by_postgres.empty? | ||
return evr_owned_by_postgres.first['evr_owned_by_postgres'] == '0' | ||
end | ||
fail!('Could not determine if the evr extension is owned by the foreman DB owner') | ||
end | ||
|
||
def self.query_for_evr_existence | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This does not need to be a class method |
||
<<-SQL | ||
SELECT 1 AS evr_exists FROM pg_extension WHERE extname = 'evr' | ||
SQL | ||
end | ||
|
||
def self.query_to_find_evr_owner | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This does not need to be a class method |
||
<<-SQL | ||
SELECT CASE WHEN r.rolname = 'foreman' THEN 0 ELSE 1 END AS evr_owned_by_postgres | ||
FROM pg_extension e JOIN pg_roles r ON e.extowner = r.oid WHERE e.extname = 'evr' | ||
SQL | ||
end | ||
end | ||
end | ||
end |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can drop this, the code reads well enough to tell me what's happening.