From 2fb63a34bae191bf39b86b8cafb67e4020599ca9 Mon Sep 17 00:00:00 2001 From: Allan Vidal Date: Thu, 20 Aug 2015 10:26:29 -0300 Subject: [PATCH] Add LED status retrieval. --- confluent_server/confluent/core.py | 6 ++++++ confluent_server/confluent/messages.py | 15 +++++++++++++++ .../confluent/plugins/hardwaremanagement/ipmi.py | 11 ++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/confluent_server/confluent/core.py b/confluent_server/confluent/core.py index 823b85a9..b403b68a 100644 --- a/confluent_server/confluent/core.py +++ b/confluent_server/confluent/core.py @@ -207,6 +207,12 @@ noderesources = { 'default': 'ipmi', }), }, + 'led': { + 'all': PluginRoute({ + 'pluginattrs': ['hardwaremanagement.method'], + 'default': 'ipmi', + }) + } }, } diff --git a/confluent_server/confluent/messages.py b/confluent_server/confluent/messages.py index 3cd1f83e..bd65be7e 100644 --- a/confluent_server/confluent/messages.py +++ b/confluent_server/confluent/messages.py @@ -822,6 +822,21 @@ class KeyValueData(ConfluentMessage): self.kvpairs = {name: kvdata} +class LEDStatus(ConfluentMessage): + readonly = True + + def __init__(self, data, name): + self.notnode = name is None + self.desc = 'led status' + + self.kvpairs = {} + for led_category in data: + self.kvpairs[led_category] = [data[led_category]] + + if not self.notnode: + self.kvpairs = {name: self.kvpairs} + + class NetworkConfiguration(ConfluentMessage): desc = 'Network configuration' diff --git a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py index 2e7e5ee3..1c5ef0ee 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py @@ -594,6 +594,12 @@ class IpmiHandler(object): return self.read_inventory(self.element[-1]) raise Exception('Unsupported scenario...') + def list_leds(self): + led_categories = {} + for category, leds in self.ipmicmd.get_leds(): + led_categories[category] = leds + self.output.put(msg.LEDStatus(led_categories, self.node)) + def read_inventory(self, component): invitems = [] if component == 'all': @@ -628,8 +634,11 @@ class IpmiHandler(object): if len(self.element) < 3: return self.sensorcategory = self.element[2] - if len(self.element) == 3: # list sensors per category + # list sensors per category + if len(self.element) == 3 and self.element[-2] == 'hardware': return self.list_sensors() + elif len(self.element) == 3 and self.element[-2] == 'led': + return self.list_leds() elif len(self.element) == 4: # resource requested return self.read_sensors(self.element[-1])