Send the correct mgmt-IP to mtce
After the management reconfiguration, it was not possible to apply a reboot-required patch because the sysinv was sending the old mgmt IP adress to the mtce. Consequently, mtce wasn't creating the required file (/var/run/.node_locked) during the host-lock command. This file is essential for the sw-patch tool to proceed with the installation. Additionally, the management network reconfiguration runtime manifest can be executed prematurely if the MGMT_NETWORK_RECONFIGURATION_ONGOING flag is used. However, users might introduce other changes that could unintentionally trigger the runtime manifests before the host-unlock command. This could lead to unexpected keystone changes, potentially causing CLI blockage or system reboots. The MGMT_NETWORK_RECONFIGURATION_ONGOING flag is created when initiating management network reconfiguration commands and it is intended to avoid update on the dnsmasq files until system reboot. Changed to MGMT_NETWORK_RECONFIGURATION_UNLOCK because this flag is intended to guarantee keystone changes only occur during the unlock command. Tests dome: IPv4 AIO-SX fresh install IPv4 AIO-DX with mgmt in vlan fresh install IPv4 DC with subcloud AIO-SX IPv4 AIO-SX mgmt reconfig and apply a reboot-required patch IPv4 subcloud AIO-SX mgmt reconfig and apply a reboot-required patch Partial-Bug: #2060066 Story: 2010722 Task: 49810 Change-Id: I138d8e31edd60a41a4595cfb8bd2dc478bc01013
This commit is contained in:
parent
ecdb0d3b9f
commit
4919bf7213
|
@ -2081,7 +2081,7 @@ class AgentManager(service.PeriodicService):
|
||||||
# Set ready flag for maintenance to proceed with the unlock of
|
# Set ready flag for maintenance to proceed with the unlock of
|
||||||
# the initial controller.
|
# the initial controller.
|
||||||
utils.touch(constants.UNLOCK_READY_FLAG)
|
utils.touch(constants.UNLOCK_READY_FLAG)
|
||||||
elif (os.path.isfile(tsc.MGMT_NETWORK_RECONFIGURATION_ONGOING) and
|
elif (os.path.isfile(tsc.MGMT_NETWORK_RECONFIGURATION_UNLOCK) and
|
||||||
applied_classes == ['openstack::keystone::endpoint::reconfig']):
|
applied_classes == ['openstack::keystone::endpoint::reconfig']):
|
||||||
# Set ready flag for maintenance to proceed with the unlock
|
# Set ready flag for maintenance to proceed with the unlock
|
||||||
# after mgmt ip reconfiguration
|
# after mgmt ip reconfiguration
|
||||||
|
|
|
@ -2047,6 +2047,19 @@ class HostController(rest.RestController):
|
||||||
"name={}, value={}. ").format(
|
"name={}, value={}. ").format(
|
||||||
capability, new_value))
|
capability, new_value))
|
||||||
|
|
||||||
|
def _get_mgmt_ip(self, hostname):
|
||||||
|
# Notify maintenance about updated mgmt_ip
|
||||||
|
# During mgmt network reconfiguration, do not change the mgmt IP
|
||||||
|
# in maintencance as it will be updated after the unlock.
|
||||||
|
if os.path.isfile(tsc.MGMT_NETWORK_RECONFIGURATION_ONGOING):
|
||||||
|
return cutils.gethostbyname(constants.CONTROLLER_0_FQDN)
|
||||||
|
else:
|
||||||
|
address_name = cutils.format_address_name(hostname,
|
||||||
|
constants.NETWORK_TYPE_MGMT)
|
||||||
|
address = utils.get_primary_address_by_name(address_name,
|
||||||
|
constants.NETWORK_TYPE_MGMT, True)
|
||||||
|
return address.address
|
||||||
|
|
||||||
def _patch(self, uuid, patch):
|
def _patch(self, uuid, patch):
|
||||||
log_start = cutils.timestamped("ihost_patch_start")
|
log_start = cutils.timestamped("ihost_patch_start")
|
||||||
|
|
||||||
|
@ -2299,16 +2312,7 @@ class HostController(rest.RestController):
|
||||||
ihost_obj['uuid'], {'capabilities': ihost_obj['capabilities']})
|
ihost_obj['uuid'], {'capabilities': ihost_obj['capabilities']})
|
||||||
|
|
||||||
# Notify maintenance about updated mgmt_ip
|
# Notify maintenance about updated mgmt_ip
|
||||||
# During mgmt network reconfiguration, do not change the mgmt IP
|
ihost_obj['mgmt_ip'] = self._get_mgmt_ip(ihost_obj.hostname)
|
||||||
# in maintencance as it will be updated after the unlock.
|
|
||||||
if os.path.isfile(tsc.MGMT_NETWORK_RECONFIGURATION_ONGOING):
|
|
||||||
ihost_obj['mgmt_ip'] = cutils.gethostbyname(constants.CONTROLLER_0_FQDN)
|
|
||||||
else:
|
|
||||||
address_name = cutils.format_address_name(ihost_obj.hostname,
|
|
||||||
constants.NETWORK_TYPE_MGMT)
|
|
||||||
address = utils.get_primary_address_by_name(address_name,
|
|
||||||
constants.NETWORK_TYPE_MGMT, True)
|
|
||||||
ihost_obj['mgmt_ip'] = address.address
|
|
||||||
|
|
||||||
hostupdate.notify_mtce = True
|
hostupdate.notify_mtce = True
|
||||||
|
|
||||||
|
@ -2340,6 +2344,10 @@ class HostController(rest.RestController):
|
||||||
if nonmtc_change_count > 0:
|
if nonmtc_change_count > 0:
|
||||||
LOG.info("%s Action %s perform notify_mtce" %
|
LOG.info("%s Action %s perform notify_mtce" %
|
||||||
(hostupdate.displayid, myaction))
|
(hostupdate.displayid, myaction))
|
||||||
|
|
||||||
|
# Notify maintenance about updated mgmt_ip
|
||||||
|
ihost_obj['mgmt_ip'] = self._get_mgmt_ip(ihost_obj.hostname)
|
||||||
|
|
||||||
new_ihost_mtc = ihost_obj.as_dict()
|
new_ihost_mtc = ihost_obj.as_dict()
|
||||||
new_ihost_mtc = cutils.removekeys_nonmtce(new_ihost_mtc)
|
new_ihost_mtc = cutils.removekeys_nonmtce(new_ihost_mtc)
|
||||||
|
|
||||||
|
|
|
@ -2497,7 +2497,8 @@ class ConductorManager(service.PeriodicService):
|
||||||
if utils.config_is_reboot_required(host.config_target):
|
if utils.config_is_reboot_required(host.config_target):
|
||||||
config_uuid = self._config_set_reboot_required(config_uuid)
|
config_uuid = self._config_set_reboot_required(config_uuid)
|
||||||
self._puppet.update_host_config(host, config_uuid)
|
self._puppet.update_host_config(host, config_uuid)
|
||||||
elif os.path.isfile(tsc.MGMT_NETWORK_RECONFIGURATION_ONGOING):
|
|
||||||
|
elif os.path.isfile(tsc.MGMT_NETWORK_RECONFIGURATION_UNLOCK):
|
||||||
# Remove unlock ready flag to prevent maintenance rebooting the
|
# Remove unlock ready flag to prevent maintenance rebooting the
|
||||||
# node until the runtime manifest is finished.
|
# node until the runtime manifest is finished.
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue