From 75010ac6f0b4ab40dc494432b1f19e61fc383ccc Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Thu, 7 Nov 2019 11:10:26 -0500 Subject: [PATCH] Guard against accidental node duplication If two nodes have same bmc, block one of them to prevent massive fluctuation back and forth. --- .../confluent/plugins/hardwaremanagement/ipmi.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py index e25206c2..b4361747 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py @@ -278,6 +278,7 @@ def _donothing(data): class IpmiConsole(conapi.Console): configattributes = frozenset(_configattributes) + bmctonodemapping = {} def __init__(self, node, config): self.error = None @@ -295,10 +296,18 @@ class IpmiConsole(conapi.Console): self.bmc = connparams['bmc'] self.port = connparams['port'] self.connected = False + # ok, is self.bmc unique among nodes already # Cannot actually create console until 'connect', when we get callback + if (self.bmc in self.bmctonodemapping and + self.bmctonodemapping[self.bmc] != node): + raise Exception( + "Duplicate hardwaremanagement.manager attribute for {0} and {1}".format( + node, self.bmctonodemapping[self.bmc])) + self.bmctonodemapping[self.bmc] = node def __del__(self): self.solconnection = None + del self.bmctonodemapping[self.bmc] def handle_data(self, data): if type(data) == dict: