Add upgrade check for NIC Switch agent
This commit adds an upgrade check for NIC switch agent alerting operators to ensure relevant hosts have kernel >= 3.13. This check is introduced due to recent cleanup in NIC switch agent code. As of U release, Supported CentOS major was updated to 8 so it is not expected that any deployment will have hosts running kernel < 3.13. This check is added as an extra precaution. This check should be removed in 1-2 cycles. A TODO was added to reflect that. Change-Id: I34003b3c2f0ac23185d036c9e47dc1c8662d6ce7 Related-bug: #1841067
This commit is contained in:
parent
22d2bb94f7
commit
a8b5afa41e
|
@ -59,3 +59,11 @@ Command details
|
||||||
upgrade.
|
upgrade.
|
||||||
* - 255
|
* - 255
|
||||||
- An unexpected error occurred.
|
- An unexpected error occurred.
|
||||||
|
|
||||||
|
**History of Checks**
|
||||||
|
|
||||||
|
**21.0.0 (Ussuri)**
|
||||||
|
|
||||||
|
* A Check was added for NIC Switch agents to ensure nodes are running with
|
||||||
|
kernel 3.13 or newer. This check serves as a notification for operators
|
||||||
|
to ensure this requirement is fullfiled on relevant nodes.
|
||||||
|
|
|
@ -30,8 +30,13 @@ LAST_NETWORKING_OVN_EXPAND_HEAD = "e55d09277410"
|
||||||
LAST_NETWORKING_OVN_CONTRACT_HEAD = "1d271ead4eb6"
|
LAST_NETWORKING_OVN_CONTRACT_HEAD = "1d271ead4eb6"
|
||||||
|
|
||||||
|
|
||||||
def get_l3_agents():
|
def get_agents(agt_type):
|
||||||
filters = {'agent_type': [constants.AGENT_TYPE_L3]}
|
"""Get agent information from Database
|
||||||
|
|
||||||
|
:param agt_type: agent type, one of constants.AGENT_TYPE_*
|
||||||
|
:return: list of database query results
|
||||||
|
"""
|
||||||
|
filters = {'agent_type': [agt_type]}
|
||||||
ctx = context.get_admin_context()
|
ctx = context.get_admin_context()
|
||||||
query = model_query.get_collection_query(ctx,
|
query = model_query.get_collection_query(ctx,
|
||||||
agent_model.Agent,
|
agent_model.Agent,
|
||||||
|
@ -39,6 +44,14 @@ def get_l3_agents():
|
||||||
return query.all()
|
return query.all()
|
||||||
|
|
||||||
|
|
||||||
|
def get_l3_agents():
|
||||||
|
return get_agents(constants.AGENT_TYPE_L3)
|
||||||
|
|
||||||
|
|
||||||
|
def get_nic_switch_agents():
|
||||||
|
return get_agents(constants.AGENT_TYPE_NIC_SWITCH)
|
||||||
|
|
||||||
|
|
||||||
def get_networks():
|
def get_networks():
|
||||||
ctx = context.get_admin_context()
|
ctx = context.get_admin_context()
|
||||||
query = model_query.get_collection_query(ctx,
|
query = model_query.get_collection_query(ctx,
|
||||||
|
@ -67,7 +80,10 @@ class CoreChecks(base.BaseChecks):
|
||||||
(_("External network bridge"),
|
(_("External network bridge"),
|
||||||
self.external_network_bridge_check),
|
self.external_network_bridge_check),
|
||||||
(_("Worker counts configured"), self.worker_count_check),
|
(_("Worker counts configured"), self.worker_count_check),
|
||||||
(_("Networking-ovn database revision"), self.ovn_db_revision_check)
|
(_("Networking-ovn database revision"),
|
||||||
|
self.ovn_db_revision_check),
|
||||||
|
(_("NIC Switch agent check kernel"),
|
||||||
|
self.nic_switch_agent_min_kernel_check)
|
||||||
]
|
]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -198,3 +214,29 @@ class CoreChecks(base.BaseChecks):
|
||||||
return upgradecheck.Result(
|
return upgradecheck.Result(
|
||||||
upgradecheck.Code.SUCCESS,
|
upgradecheck.Code.SUCCESS,
|
||||||
_("Networking-ovn database tables are up to date."))
|
_("Networking-ovn database tables are up to date."))
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def nic_switch_agent_min_kernel_check(checker):
|
||||||
|
# TODO(adrianc): This was introduced in U release, consider removing
|
||||||
|
# in 1-2 cycles.
|
||||||
|
# Background: Issue with old kernel is appernet in CentOS 7 and older.
|
||||||
|
# U release is the first release that moves from CentOS-7 to CentOS-8,
|
||||||
|
# this was added as a "heads-up" for operators to make sure min kernel
|
||||||
|
# requirement is fullfiled.
|
||||||
|
if not cfg.CONF.database.connection:
|
||||||
|
return upgradecheck.Result(
|
||||||
|
upgradecheck.Code.WARNING,
|
||||||
|
_("Database connection string is not set. "
|
||||||
|
"Check for NIC Switch agent can't be done."))
|
||||||
|
|
||||||
|
agents = get_nic_switch_agents()
|
||||||
|
if len(agents):
|
||||||
|
hosts = ','.join([agent.get("host") for agent in agents])
|
||||||
|
return upgradecheck.Result(
|
||||||
|
upgradecheck.Code.WARNING,
|
||||||
|
_("NIC Switch agents detected on hosts %s, please ensure the "
|
||||||
|
"hosts run with a kernel version 3.13 or newer.") % hosts)
|
||||||
|
else:
|
||||||
|
return upgradecheck.Result(
|
||||||
|
upgradecheck.Code.SUCCESS,
|
||||||
|
_("No NIC Switch agents detected."))
|
||||||
|
|
|
@ -158,3 +158,23 @@ class TestChecks(base.BaseTestCase):
|
||||||
result = checks.CoreChecks.ovn_db_revision_check(mock.Mock())
|
result = checks.CoreChecks.ovn_db_revision_check(mock.Mock())
|
||||||
self.assertEqual(Code.FAILURE, result.code)
|
self.assertEqual(Code.FAILURE, result.code)
|
||||||
get_ovn_db_revisions.assert_called_once_with()
|
get_ovn_db_revisions.assert_called_once_with()
|
||||||
|
|
||||||
|
def test_nic_switch_agent_min_kernel_check_no_nic_switch_agents(self):
|
||||||
|
with mock.patch.object(checks, "get_nic_switch_agents",
|
||||||
|
return_value=[]):
|
||||||
|
result = checks.CoreChecks.nic_switch_agent_min_kernel_check(
|
||||||
|
mock.Mock())
|
||||||
|
self.assertEqual(Code.SUCCESS, result.code)
|
||||||
|
|
||||||
|
def test_nic_switch_agent_min_kernel_check(self):
|
||||||
|
agents = [
|
||||||
|
{'host': 'Host A'},
|
||||||
|
{'host': 'Host B'}
|
||||||
|
]
|
||||||
|
with mock.patch.object(checks, "get_nic_switch_agents",
|
||||||
|
return_value=agents):
|
||||||
|
result = checks.CoreChecks.nic_switch_agent_min_kernel_check(
|
||||||
|
mock.Mock())
|
||||||
|
self.assertEqual(Code.WARNING, result.code)
|
||||||
|
self.assertIn('Host A', result.details)
|
||||||
|
self.assertIn('Host B', result.details)
|
||||||
|
|
Loading…
Reference in New Issue