From 152b8f5f44503d2df48083acb952f3ed4df1b16a Mon Sep 17 00:00:00 2001 From: Luis Eduardo Bonatti Date: Fri, 29 Sep 2023 15:35:53 -0300 Subject: [PATCH] Update migration scripts to support optional "port" parameter Migration scripts with "migrate" action needs to be run under environment that from-release PostgreSQL using default port and to-release running with a different port in USM upgrade. This commit is to add the 4th parameter to indicate the port to postgres connection. Test Plan: PASS: Run legacy data-migration PASS: Run new data-migration Story: 2010676 Task: 48886 Change-Id: Ib7b5818b9355c1196fb8b6fc3d916ede7f7907fa Signed-off-by: Luis Eduardo Bonatti --- .../controllerconfig/common/constants.py | 2 ++ .../controllerconfig/controllerconfig/utils.py | 12 +++++++++++- .../upgrade-scripts/62-enable-fluxcd-controllers.py | 3 +++ .../upgrade-scripts/65-k8s-app-upgrade.sh | 2 +- .../68-pod-security-admission-controller-labels.py | 3 +++ .../upgrade-scripts/76-remove-armada-if-unused.py | 4 ++-- .../80-remove-psp-autogenerated-policies.py | 3 +++ .../upgrade-scripts/97-reset-config-target.py | 12 ++++++++---- .../upgrade-scripts/99-update-sysinv-motd.py | 4 +++- 9 files changed, 36 insertions(+), 9 deletions(-) diff --git a/controllerconfig/controllerconfig/controllerconfig/common/constants.py b/controllerconfig/controllerconfig/controllerconfig/common/constants.py index 24f3f8ded0..53cf1bc239 100644 --- a/controllerconfig/controllerconfig/controllerconfig/common/constants.py +++ b/controllerconfig/controllerconfig/controllerconfig/common/constants.py @@ -19,3 +19,5 @@ KEYRING_PERMDIR = tsconfig.KEYRING_PATH INITIAL_CONFIG_COMPLETE_FILE = '/etc/platform/.initial_config_complete' LOG_LOCAL1 = 'local1' + +POSTGRESQL_DEFAULT_PORT = 5432 diff --git a/controllerconfig/controllerconfig/controllerconfig/utils.py b/controllerconfig/controllerconfig/controllerconfig/utils.py index 2f81a475ea..51955ae53a 100644 --- a/controllerconfig/controllerconfig/controllerconfig/utils.py +++ b/controllerconfig/controllerconfig/controllerconfig/utils.py @@ -80,6 +80,16 @@ def wait_sm_service(service, timeout=180): return False +def connect_to_postgresql(port): + try: + import psycopg2 + conn = psycopg2.connect("dbname=sysinv user=postgres port=%s" % port) + return conn + except Exception as err: + LOG.error("Failed to connect to database: %s", err) + raise Exception("Failed to connect to database with port=%s" % port) + + def get_address_from_hosts_file(hostname): """ Get the IP address of a host from the /etc/hosts file @@ -190,7 +200,7 @@ def persist_config(): # move hiera data to puppet directory if os.path.isdir(constants.HIERADATA_WORKDIR): subprocess.check_call(["mv", constants.HIERADATA_WORKDIR, - tsconfig.PUPPET_PATH]) + tsconfig.PUPPET_PATH]) except subprocess.CalledProcessError: LOG.error("Failed to persist puppet config files") raise Exception("Failed to persist puppet config files") diff --git a/controllerconfig/controllerconfig/upgrade-scripts/62-enable-fluxcd-controllers.py b/controllerconfig/controllerconfig/upgrade-scripts/62-enable-fluxcd-controllers.py index 9ea2cf4841..d66c0101d8 100644 --- a/controllerconfig/controllerconfig/upgrade-scripts/62-enable-fluxcd-controllers.py +++ b/controllerconfig/controllerconfig/upgrade-scripts/62-enable-fluxcd-controllers.py @@ -25,6 +25,9 @@ def main(): to_release = sys.argv[arg] elif arg == 3: action = sys.argv[arg] + elif arg == 4: + # postgres_port = sys.argv[arg] + pass else: print("Invalid option %s." % sys.argv[arg]) return 1 diff --git a/controllerconfig/controllerconfig/upgrade-scripts/65-k8s-app-upgrade.sh b/controllerconfig/controllerconfig/upgrade-scripts/65-k8s-app-upgrade.sh index 9612b0b351..cf8c314645 100644 --- a/controllerconfig/controllerconfig/upgrade-scripts/65-k8s-app-upgrade.sh +++ b/controllerconfig/controllerconfig/upgrade-scripts/65-k8s-app-upgrade.sh @@ -22,7 +22,7 @@ FROM_RELEASE=$1 TO_RELEASE=$2 ACTION=$3 -if (( $# != 3 )); then +if (( $# != 3 && $# != 4 )); then >&2 echo "Error: Missing Arguments!" >&2 echo "Usage: 65-k8s-app-upgrade.sh FROM_RELEASE TO_RELEASE ACTION" >&2 echo "Exiting for manual intervention..." diff --git a/controllerconfig/controllerconfig/upgrade-scripts/68-pod-security-admission-controller-labels.py b/controllerconfig/controllerconfig/upgrade-scripts/68-pod-security-admission-controller-labels.py index d7c8542fae..65293a8140 100644 --- a/controllerconfig/controllerconfig/upgrade-scripts/68-pod-security-admission-controller-labels.py +++ b/controllerconfig/controllerconfig/upgrade-scripts/68-pod-security-admission-controller-labels.py @@ -27,6 +27,9 @@ def main(): to_release = sys.argv[arg] elif arg == 3: action = sys.argv[arg] + elif arg == 4: + # postgres_port = sys.argv[arg] + pass else: print("Invalid option %s." % sys.argv[arg]) return 1 diff --git a/controllerconfig/controllerconfig/upgrade-scripts/76-remove-armada-if-unused.py b/controllerconfig/controllerconfig/upgrade-scripts/76-remove-armada-if-unused.py index e9bbe91653..c8f5e3bfe8 100644 --- a/controllerconfig/controllerconfig/upgrade-scripts/76-remove-armada-if-unused.py +++ b/controllerconfig/controllerconfig/upgrade-scripts/76-remove-armada-if-unused.py @@ -371,13 +371,13 @@ def drop_helm_v2_database(): def main(): - if len(sys.argv) != 4: + if len(sys.argv) not in [4, 5]: error_msg = "Invalid arguments: %s" % (sys.argv) print(error_msg) LOG.error(error_msg) return 1 - script_name, from_release, to_release, action = sys.argv + script_name, from_release, to_release, action = sys.argv[0:4] LOG.info("%s invoked with from_release = %s to_release = %s action = %s" % (script_name, from_release, to_release, action)) diff --git a/controllerconfig/controllerconfig/upgrade-scripts/80-remove-psp-autogenerated-policies.py b/controllerconfig/controllerconfig/upgrade-scripts/80-remove-psp-autogenerated-policies.py index 6ba2d195e6..556c3cbe8e 100644 --- a/controllerconfig/controllerconfig/upgrade-scripts/80-remove-psp-autogenerated-policies.py +++ b/controllerconfig/controllerconfig/upgrade-scripts/80-remove-psp-autogenerated-policies.py @@ -27,6 +27,9 @@ def main(): to_release = sys.argv[arg] elif arg == 3: action = sys.argv[arg] + elif arg == 4: + # postgres_port = sys.argv[arg] + pass else: print("Invalid option %s." % sys.argv[arg]) return 1 diff --git a/controllerconfig/controllerconfig/upgrade-scripts/97-reset-config-target.py b/controllerconfig/controllerconfig/upgrade-scripts/97-reset-config-target.py index 78f92fac4f..e510a02d45 100755 --- a/controllerconfig/controllerconfig/upgrade-scripts/97-reset-config-target.py +++ b/controllerconfig/controllerconfig/upgrade-scripts/97-reset-config-target.py @@ -8,10 +8,11 @@ # requests in N+1 release and not due to potential stale configuration # from N release. -import psycopg2 import sys from psycopg2.extras import RealDictCursor +from controllerconfig import utils +from controllerconfig.common import constants from controllerconfig.common import log LOG = log.get_logger(__name__) @@ -21,6 +22,7 @@ def main(): action = None from_release = None to_release = None + postgres_port = constants.POSTGRESQL_DEFAULT_PORT arg = 1 while arg < len(sys.argv): @@ -30,6 +32,8 @@ def main(): to_release = sys.argv[arg] # noqa elif arg == 3: action = sys.argv[arg] + elif arg == 4: + postgres_port = sys.argv[arg] else: print("Invalid option %s." % sys.argv[arg]) return 1 @@ -43,15 +47,15 @@ def main(): # This host table data migration will likely be required for each release if action == "migrate": try: - reset_config_target() + reset_config_target(postgres_port) except Exception as ex: LOG.exception(ex) return 1 -def reset_config_target(): +def reset_config_target(port): - conn = psycopg2.connect("dbname=sysinv user=postgres") + conn = utils.connect_to_postgresql(port) with conn: with conn.cursor(cursor_factory=RealDictCursor) as cur: cur.execute("update i_host set config_target=NULL",) diff --git a/controllerconfig/controllerconfig/upgrade-scripts/99-update-sysinv-motd.py b/controllerconfig/controllerconfig/upgrade-scripts/99-update-sysinv-motd.py index 9d5234b084..45b90920d5 100755 --- a/controllerconfig/controllerconfig/upgrade-scripts/99-update-sysinv-motd.py +++ b/controllerconfig/controllerconfig/upgrade-scripts/99-update-sysinv-motd.py @@ -76,9 +76,11 @@ def main(): parser.add_argument("from_release", type=str) parser.add_argument("to_release", type=str) parser.add_argument("action", type=str) + if len(sys.argv) == 5: + parser.add_argument("postgres_port", type=int) args = parser.parse_args() - if len(sys.argv) != 4: + if len(sys.argv) not in [4, 5]: print("Invalid option {}".format(sys.arg)) return 1 if args.action == "activate":