diff --git a/controllerconfig/controllerconfig/upgrade-scripts/97-reset-config-target.py b/controllerconfig/controllerconfig/upgrade-scripts/97-reset-config-target.py new file mode 100755 index 0000000000..a16f5d3dd4 --- /dev/null +++ b/controllerconfig/controllerconfig/upgrade-scripts/97-reset-config-target.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +# Copyright (c) 2021 Wind River Systems, Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# +# This script will clear the host config target. +# This is required in order to ensure tracking is aligned with config +# 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.common import log + +LOG = log.get_logger(__name__) + + +def main(): + action = None + from_release = None + to_release = None + arg = 1 + + while arg < len(sys.argv): + if arg == 1: + from_release = sys.argv[arg] + elif arg == 2: + to_release = sys.argv[arg] # noqa + elif arg == 3: + action = sys.argv[arg] + else: + print ("Invalid option %s." % sys.argv[arg]) + return 1 + arg += 1 + + log.configure() + + LOG.debug("%s invoked with from_release = %s to_release = %s action = %s" + % (sys.argv[0], from_release, to_release, action)) + + # This host table data migration will likely be required for each release + if action == "migrate": + try: + reset_config_target() + except Exception as ex: + LOG.exception(ex) + return 1 + + +def reset_config_target(): + + conn = psycopg2.connect("dbname=sysinv user=postgres") + with conn: + with conn.cursor(cursor_factory=RealDictCursor) as cur: + cur.execute("update i_host set config_target=NULL where " + "recordtype!='profile'",) + + LOG.info("Reset host config_target completed") + +if __name__ == "__main__": + sys.exit(main()) diff --git a/sysinv/sysinv/sysinv/sysinv/conductor/manager.py b/sysinv/sysinv/sysinv/sysinv/conductor/manager.py index c8b5ad3c55..b957571da9 100644 --- a/sysinv/sysinv/sysinv/sysinv/conductor/manager.py +++ b/sysinv/sysinv/sysinv/sysinv/conductor/manager.py @@ -5225,7 +5225,8 @@ class ConductorManager(service.PeriodicService): if upgrade.state == constants.UPGRADE_ACTIVATING_HOSTS: hosts = self.dbapi.ihost_get_list() - out_of_date_hosts = [host for host in hosts if host.config_target != host.config_applied] + out_of_date_hosts = [host for host in hosts + if host.config_target and host.config_target != host.config_applied] if not out_of_date_hosts: LOG.info("Manifests applied. Upgrade activation complete.") self.dbapi.software_upgrade_update(