From 026285366ca98f846439435911b43b07436eae52 Mon Sep 17 00:00:00 2001 From: kgaikwad Date: Wed, 4 Mar 2020 05:58:36 -0500 Subject: [PATCH 1/2] Fixes #28943 - pre-upgrade check to validate external DB version --- .../foreman/validate_external_db_version.rb | 26 +++++++++++++++++++ .../concerns/base_database.rb | 11 ++++++++ 2 files changed, 37 insertions(+) create mode 100644 definitions/checks/foreman/validate_external_db_version.rb diff --git a/definitions/checks/foreman/validate_external_db_version.rb b/definitions/checks/foreman/validate_external_db_version.rb new file mode 100644 index 000000000..5dce73e5b --- /dev/null +++ b/definitions/checks/foreman/validate_external_db_version.rb @@ -0,0 +1,26 @@ +module Checks + module Foreman + class ValidateExternalDbVersion < ForemanMaintain::Check + metadata do + description 'Make sure server is running on required database version' + tags :pre_upgrade + label :validate_external_db_version + confine do + feature(:foreman_database) && !feature(:foreman_database).local? && + !check_min_version('foreman', '2.0') + end + end + + def run + current_db_version = feature(:foreman_database).db_version + fail!(db_upgrade_message(current_db_version)) if current_db_version.major < 12 + end + + def db_upgrade_message(db_version) + "\n\n*** WARNING: Server is running on PostgreSQL #{db_version}.\n"\ + "*** Before performing the upgrade, please upgrade your database to PostgreSQL (>=12)\n"\ + "*** otherwise data will be lost.\n" + end + end + end +end diff --git a/lib/foreman_maintain/concerns/base_database.rb b/lib/foreman_maintain/concerns/base_database.rb index fb522e8f1..181100cd2 100644 --- a/lib/foreman_maintain/concerns/base_database.rb +++ b/lib/foreman_maintain/concerns/base_database.rb @@ -150,6 +150,17 @@ def dropdb(config = configuration) end end + def db_version(config = configuration) + if ping(config) + # Note - t removes headers, -A removes alignment whitespace + server_version_cmd = psql_command(config) + ' -c "SHOW server_version" -t -A' + version_string = execute!(server_version_cmd, :hidden_patterns => [config['password']]) + version(version_string) + else + raise_service_error + end + end + private def base_command(config, command = 'psql') From 3f9d18a026f5ff855793bc64a4345884a17f2e09 Mon Sep 17 00:00:00 2001 From: kgaikwad Date: Thu, 19 Mar 2020 05:44:05 -0400 Subject: [PATCH 2/2] Refs #28943 - re-phrase a warning message --- .../checks/foreman/validate_external_db_version.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/definitions/checks/foreman/validate_external_db_version.rb b/definitions/checks/foreman/validate_external_db_version.rb index 5dce73e5b..b77586501 100644 --- a/definitions/checks/foreman/validate_external_db_version.rb +++ b/definitions/checks/foreman/validate_external_db_version.rb @@ -17,9 +17,11 @@ def run end def db_upgrade_message(db_version) - "\n\n*** WARNING: Server is running on PostgreSQL #{db_version}.\n"\ - "*** Before performing the upgrade, please upgrade your database to PostgreSQL (>=12)\n"\ - "*** otherwise data will be lost.\n" + product_name = feature(:instance).product_name + + "\n\n*** ERROR: Server is running on PostgreSQL #{db_version} database.\n"\ + "*** Newer version of #{product_name} supports only PostgreSQL version 12.\n"\ + "*** Before proceeding further, you must upgrade database to PostgreSQL 12.\n" end end end