diff options
Diffstat (limited to 'pyipmi/commands/fabric_config.py')
-rw-r--r-- | pyipmi/commands/fabric_config.py | 288 |
1 files changed, 288 insertions, 0 deletions
diff --git a/pyipmi/commands/fabric_config.py b/pyipmi/commands/fabric_config.py new file mode 100644 index 0000000..fe6b92f --- /dev/null +++ b/pyipmi/commands/fabric_config.py @@ -0,0 +1,288 @@ +# Copyright (c) 2012, Calxeda Inc. +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of Calxeda Inc. nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +# DAMAGE. + + +from .. import Command +from pyipmi.tools.responseparser import ResponseParserMixIn +from pyipmi.fabric import * +from pyipmi import IpmiError + +class CommandWithErrors(Command, ResponseParserMixIn): + + def parse_response(self, out, err): + """Parse the response to a command + + The 'ipmitool_response_format' attribute is used to determine + what parser to use to for interpreting the results. + + Arguments: + out -- the text response of an command from stdout + err -- the text response of an command from stderr + """ + + out = out + err + return self.response_parser(out, err) + +class GetIPInfoCommand(CommandWithErrors): + """ Describes the cxoem fabric list_ip_addrs IPMI command + """ + + name = "Retrieve fabric IP info" + result_type = FabricGetIPInfoResult + + response_fields = { + 'File Name' : {}, + 'Error' : {} + } + + @property + def ipmitool_args(self): + if self._params['tftp_addr'] != None: + tftp_args = self._params['tftp_addr'].split(":") + if len(tftp_args) == 1: + return ["cxoem", "fabric", "config", "get", "ipinfo", "tftp", + tftp_args[0], "file", self._params['filename']] + else: + return ["cxoem", "fabric", "config", "get", "ipinfo", "tftp", + tftp_args[0], "port", tftp_args[1], "file", + self._params['filename']] + else: + return ["cxoem", "fabric", "config", "get", "ipinfo", "file", + self._params['filename']] + +class GetUplinkInfoCommand(CommandWithErrors): + """ Describes the cxoem fabric list_ip_addrs IPMI command + """ + + name = "Retrieve fabric Uplink info" + result_type = FabricGetUplinkInfoResult + + response_fields = { + 'File Name' : {}, + 'Error' : {} + } + + @property + def ipmitool_args(self): + if self._params['tftp_addr'] != None: + tftp_args = self._params['tftp_addr'].split(":") + if len(tftp_args) == 1: + return ["cxoem", "fabric", "config", "get", "uplink_info", + "tftp", tftp_args[0], "file", self._params['filename']] + else: + return ["cxoem", "fabric", "config", "get", "uplink_info", + "tftp", tftp_args[0], "port", tftp_args[1], "file", + self._params['filename']] + else: + return ["cxoem", "fabric", "config", "get", "uplink_info", "file", + self._params['filename']] + +class GetMACAddressesCommand(CommandWithErrors): + """ Describes the cxoem fabric list_macs IPMI command + """ + + name = "Retrieve fabric MAC addresses" + result_type = FabricGetMACAddressesResult + + response_fields = { + 'File Name' : {}, + 'Error' : {} + } + + @property + def ipmitool_args(self): + if self._params['tftp_addr'] != None: + tftp_args = self._params['tftp_addr'].split(":") + if len(tftp_args) == 1: + return ["cxoem", "fabric", "config", "get", "macaddrs", "tftp", + tftp_args[0], "file", self._params['filename']] + else: + return ["cxoem", "fabric", "config", "get", "macaddrs", "tftp", + tftp_args[0], "port", tftp_args[1], "file", + self._params['filename']] + else: + return ["cxoem", "fabric", "config", "get", "macaddrs", "file", + self._params['filename']] + +class UpdateConfigCommand(Command, ResponseParserMixIn): + """Describes the ipmitool fabric config update config command""" + name = "Update Config" + + ipmitool_args = ['cxoem', 'fabric', 'config', 'update_config'] + +class GetIPSrcCommand(Command, ResponseParserMixIn): + """Describes the ipmitool fabric get ipsrc command""" + name = "Get ipsrc command" + result_type = int + + def parse_response(self, out, err): + return int(out) + + response_fields = { + } + + @property + def ipmitool_args(self): + return ["cxoem", "fabric", "config", "get", "ipsrc"] + +class SetIPSrcCommand(Command, ResponseParserMixIn): + """Describes the ipmitool fabric set ipsrc command""" + name = "Set ipsrc command" + + @property + def ipmitool_args(self): + return ['cxoem', + 'fabric', + 'config', + 'set', + 'ipsrc', + self._params['ipsrc_mode']] + +class FactoryDefaultCommand(Command, ResponseParserMixIn): + """Describes the ipmitool fabric config factory_default command""" + name = "Fabric config factory_default command" + + ipmitool_args = ['cxoem', 'fabric', 'config', 'factory_default'] + +class GetIPAddrBase(Command, ResponseParserMixIn): + """Describes the ipmitool fabric config get ipaddr_base command""" + name = "Get fabric config ipaddr_base command" + result_type = str + + ipmitool_args = ['cxoem', 'fabric', 'config', 'get', 'ipaddr_base'] + + def parse_response(self, out, err): + return out.strip() + +class GetLinkspeedCommand(Command, ResponseParserMixIn): + """Describes the ipmitool fabric config get linkspeed command""" + name = "Get global linkspeed command" + result_type = float + + def parse_response(self, out, err): + if err: + raise IpmiError(err) + return float(out) + + ipmitool_args = ['cxoem', 'fabric', 'config', 'get', 'linkspeed'] + +class SetLinkspeedCommand(Command, ResponseParserMixIn): + """Describes the ipmitool fabric config set linkspeed command""" + name = "Set linkspeed command" + + @property + def ipmitool_args(self): + return ['cxoem', 'fabric', 'config', 'set', 'linkspeed', + self._params['linkspeed']] + +class GetLinkspeedPolicyCommand(Command, ResponseParserMixIn): + """Describes the ipmitool fabric config get ls_policy command""" + name = "Get global ls_policy command" + result_type = int + + def parse_response(self, out, err): + if err: + raise IpmiError(err) + return int(out) + + ipmitool_args = ['cxoem', 'fabric', 'config', 'get', 'ls_policy'] + +class SetLinkspeedPolicyCommand(Command, ResponseParserMixIn): + """Describes the ipmitool fabric config set ls_policy command""" + name = "Set linkspeed command" + + @property + def ipmitool_args(self): + return ['cxoem', 'fabric', 'config', 'set', 'ls_policy', + self._params['ls_policy']] + +class GetUplinkCommand(Command, ResponseParserMixIn): + """Describes the ipmitool fabric config get uplink command""" + name = "Get uplink command" + result_type = int + + def parse_response(self, out, err): + if err: + raise IpmiError(err) + return int(out) + + @property + def ipmitool_args(self): + return ['cxoem', 'fabric', 'config', 'get', 'uplink', 'interface', + self._params['iface']] + +class SetUplinkCommand(Command, ResponseParserMixIn): + """Describes the ipmitool fabric config set uplink command""" + name = "Set uplink command" + + @property + def ipmitool_args(self): + return ['cxoem', 'fabric', 'config', 'set', 'uplink', + self._params['uplink'], 'interface', self._params['iface']] + +class GetLinkUsersFactorCommand(Command, ResponseParserMixIn): + """Describes the ipmitool fabric config get lu_factor command""" + name = "Get global link users factor command" + result_type = int + + def parse_response(self, out, err): + if err: + raise IpmiError(err) + return int(out) + + ipmitool_args = ['cxoem', 'fabric', 'config', 'get', 'lu_factor'] + +class SetLinkUsersFactorCommand(Command, ResponseParserMixIn): + """Describes the ipmitool fabric config set lu_factor command""" + name = "Set global link users factor command" + + @property + def ipmitool_args(self): + return ['cxoem', 'fabric', 'config', 'set', 'lu_factor', + self._params['lu_factor']] + +fabric_config_commands = { + "fabric_config_getipinfo" : GetIPInfoCommand, + "fabric_config_getmacaddresses" : GetMACAddressesCommand, + "fabric_config_updateconfig" : UpdateConfigCommand, + "fabric_config_getipsrc" : GetIPSrcCommand, + "fabric_config_setipsrc" : SetIPSrcCommand, + "fabric_config_factory_default" : FactoryDefaultCommand, + "fabric_config_get_ipaddr_base" : GetIPAddrBase, + "fabric_config_getlinkspeed" : GetLinkspeedCommand, + "fabric_config_setlinkspeed" : SetLinkspeedCommand, + "fabric_config_getlinkspeedpolicy" : GetLinkspeedPolicyCommand, + "fabric_config_setlinkspeedpolicy" : SetLinkspeedPolicyCommand, + "fabric_config_getuplinkinfo" : GetUplinkInfoCommand, + "fabric_config_getuplink" : GetUplinkCommand, + "fabric_config_setuplink" : SetUplinkCommand, + "fabric_config_getlinkusersfactor" : GetLinkUsersFactorCommand, + "fabric_config_setlinkusersfactor" : SetLinkUsersFactorCommand +} |