diff --git a/confluent_server/confluent/core.py b/confluent_server/confluent/core.py index c1942ec5..7398464e 100644 --- a/confluent_server/confluent/core.py +++ b/confluent_server/confluent/core.py @@ -163,6 +163,10 @@ def _init_core(): 'default': 'ipmi', }), }, + 'clear': PluginRoute({ + 'pluginattrs': ['hardwaremanagement.method'], + 'default': 'ipmi', + }), 'users': PluginCollection({ 'pluginattrs': ['hardwaremanagement.method'], 'default': 'ipmi', @@ -205,6 +209,16 @@ def _init_core(): 'default': 'ipmi', }), }, + 'extended': { + 'all': PluginRoute({ + 'pluginattrs': ['hardwaremanagement.method'], + 'default': 'ipmi', + }), + 'advanced': PluginRoute({ + 'pluginattrs': ['hardwaremanagement.method'], + 'default': 'ipmi', + }), + }, }, 'storage': { 'all': PluginRoute({ diff --git a/confluent_server/confluent/messages.py b/confluent_server/confluent/messages.py index 3590919e..d328d26c 100644 --- a/confluent_server/confluent/messages.py +++ b/confluent_server/confluent/messages.py @@ -450,10 +450,11 @@ def get_input_message(path, operation, inputdata, nodes=None, multinode=False, elif (path[:4] == ['configuration', 'management_controller', 'ntp', 'servers'] and operation != 'retrieve' and len(path) == 5): return InputNTPServer(path, nodes, inputdata) - elif (path[:3] == ['configuration', 'system', 'all'] and + elif (path[:3] in (['configuration', 'system', 'all'], + ['configuration', 'management_controller', 'extended']) and operation != 'retrieve'): return InputConfigChangeSet(path, inputdata, nodes, configmanager) - elif (path[:3] == ['configuration', 'system', 'clear'] and + elif (path[0] == 'configuration' and path[2] == 'clear' and operation != 'retrieve'): return InputConfigClear(path, inputdata, nodes, configmanager) elif (path[:3] == ['configuration', 'storage', 'disks'] and diff --git a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py index 400cb19e..e5fb8b35 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py @@ -623,12 +623,18 @@ class IpmiHandler(object): return self.handle_domain_name() elif self.element[1:3] == ['management_controller', 'ntp']: return self.handle_ntp() + elif self.element[1:4] == ['management_controller', 'extended', 'all']: + return self.handle_bmcconfig() + elif self.element[1:4] == ['management_controller', 'extended', 'all']: + return self.handle_bmcconfig(True) elif self.element[1:3] == ['system', 'all']: return self.handle_sysconfig() elif self.element[1:3] == ['system', 'advanced']: return self.handle_sysconfig(True) elif self.element[1:3] == ['system', 'clear']: return self.handle_sysconfigclear() + elif self.element[1:3] == ['management_controller', 'clear']: + return self.handle_bmcconfigclear() elif self.element[1:3] == ['management_controller', 'licenses']: return self.handle_licenses() elif self.element[1:3] == ['management_controller', 'save_licenses']: @@ -1373,12 +1379,31 @@ class IpmiHandler(object): self.ipmicmd.set_domain_name(dn) return + def handle_bmcconfigclear(self): + if 'read' == self.op: + raise exc.InvalidArgumentException( + 'Cannot read the "clear" resource') + self.ipmicmd.clear_bmc_configuration() + def handle_sysconfigclear(self): if 'read' == self.op: raise exc.InvalidArgumentException( 'Cannot read the "clear" resource') self.ipmicmd.clear_system_configuration() + def handle_bmcconfig(self, advanced=False): + if 'read' == self.op: + try: + self.output.put(msg.ConfigSet( + self.node, + self.ipmicmd.get_bmc_configuration())) + except Exception as e: + self.output.put( + msg.ConfluentNodeError(self.node, str(e))) + elif 'update' == self.op: + self.ipmicmd.set_bmc_configuration( + self.inputdata.get_attributes(self.node)) + def handle_sysconfig(self, advanced=False): if 'read' == self.op: try: