summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Kraft <george.kraft@calxeda.com>2012-08-16 10:16:06 -0500
committerGeorge Kraft <george.kraft@calxeda.com>2012-08-16 10:16:06 -0500
commitceeb912f50c9acaee69ce36ee137ea871798d6d3 (patch)
treec116876b9f5565ce9a10caac2c870559986d2953
parent34a7d8aaf96c7f3affd9679ce7d1654ac0e081c1 (diff)
downloadcxmanage-ceeb912f50c9acaee69ce36ee137ea871798d6d3.tar.gz
cxmanage: Make sensor_name argument be a filter
So you can say, for example, "cxmanage sensor power" and it'll list all sensors with "power" in the name.
-rw-r--r--cxmanage/controller.py10
-rw-r--r--cxmanage/target.py14
-rwxr-xr-xscripts/cxmanage11
3 files changed, 23 insertions, 12 deletions
diff --git a/cxmanage/controller.py b/cxmanage/controller.py
index e2db8a3..032e9cc 100644
--- a/cxmanage/controller.py
+++ b/cxmanage/controller.py
@@ -324,18 +324,18 @@ class Controller:
return len(errors) > 0
- def get_sensors(self, name=None):
+ def get_sensors(self, name=""):
""" Get sensor readings from all targets """
- results, errors = self._run_command("get_sensors")
+ results, errors = self._run_command("get_sensors", name)
if len(results) > 0:
# Get sensor names
sensor_names = []
for address in results:
for sensor in results[address]:
- if (name in [None, sensor.sensor_name] and not
- sensor.sensor_name in sensor_names):
- sensor_names.append(sensor.sensor_name)
+ sensor_name = sensor.sensor_name
+ if not sensor_name in sensor_names:
+ sensor_names.append(sensor_name)
# Print all sensors
for sensor_name in sensor_names:
diff --git a/cxmanage/target.py b/cxmanage/target.py
index 8723bf8..a08d7c9 100644
--- a/cxmanage/target.py
+++ b/cxmanage/target.py
@@ -197,13 +197,23 @@ class Target:
except IpmiError as e:
raise CxmanageError(self._parse_ipmierror(e))
- def get_sensors(self):
+ def get_sensors(self, name=""):
""" Get a list of sensors from this target """
try:
- return self.bmc.sdr_list()
+ sensors = [x for x in self.bmc.sdr_list()
+ if name.lower() in x.sensor_name.lower()]
except IpmiError as e:
raise CxmanageError(self._parse_ipmierror(e))
+ if len(sensors) == 0:
+ if name == "":
+ raise CxmanageError("No sensors were found")
+ else:
+ raise CxmanageError("No sensors containing \"%s\" were found"
+ % name)
+
+ return sensors
+
def get_firmware_info(self):
""" Get firmware info from the target """
try:
diff --git a/scripts/cxmanage b/scripts/cxmanage
index 7a0fd58..9a5be3a 100755
--- a/scripts/cxmanage
+++ b/scripts/cxmanage
@@ -164,7 +164,7 @@ def build_parser():
p['sensor'] = p['subparsers'].add_parser('sensor',
help='read sensor value')
p['sensor'].add_argument('sensor_name', help='Sensor name to read',
- nargs='?')
+ nargs='?', default='')
p['sensor'].set_defaults(func=sensor_command)
#ipinfo command
@@ -370,10 +370,11 @@ def fwupdate_command(controller, args):
def sensor_command(controller, args):
"""read sensor values from a cluster or host"""
- if not args.sensor_name or args.sensor_name.lower() == 'list':
- return controller.get_sensors()
- else:
- return controller.get_sensors(args.sensor_name)
+ sensor_name = args.sensor_name
+ if sensor_name.lower() == 'list':
+ sensor_name = ''
+
+ return controller.get_sensors(sensor_name)
def ipinfo_command(controller, args):