summaryrefslogtreecommitdiffstats
path: root/pytools
diff options
context:
space:
mode:
authorAndrew Geissler <andrewg@us.ibm.com>2017-02-20 16:10:26 -0600
committerPatrick Williams <patrick@stwcx.xyz>2017-03-09 21:53:42 +0000
commit8f8cbcea43655ef22dd79838408d1e1d052f1191 (patch)
treec6622629f5dd39547ad3d36b2b49c18cec33288d /pytools
parentb44db264b367bd9d122a84da8816b368f4b80baf (diff)
downloadtalos-skeleton-8f8cbcea43655ef22dd79838408d1e1d052f1191.tar.gz
talos-skeleton-8f8cbcea43655ef22dd79838408d1e1d052f1191.zip
Add bmc, chassis, and host states to obmcutil
Remove the use of system state from obmcutil Change-Id: Ia74b68d945fce7526aa4bbc62cda4ad242cdec25 Signed-off-by: Andrew Geissler <andrewg@us.ibm.com>
Diffstat (limited to 'pytools')
-rw-r--r--pytools/obmcutil130
1 files changed, 81 insertions, 49 deletions
diff --git a/pytools/obmcutil b/pytools/obmcutil
index a0d9221..f762c59 100644
--- a/pytools/obmcutil
+++ b/pytools/obmcutil
@@ -96,11 +96,23 @@ dbus_objects = {
'property': 'RequestedHostTransition',
'value': 'xyz.openbmc_project.State.Host.Transition.Off'
},
- 'state': {
- 'bus_name': 'org.openbmc.managers.System',
- 'object_name': '/org/openbmc/managers/System',
- 'interface_name': 'org.openbmc.managers.System',
- 'method': 'getSystemState',
+ 'bmcstate': {
+ 'bus_name': 'xyz.openbmc_project.State.BMC',
+ 'object_name': '/xyz/openbmc_project/state/bmc0',
+ 'interface_name': 'xyz.openbmc_project.State.BMC',
+ 'property': 'CurrentBMCState',
+ },
+ 'chassisstate': {
+ 'bus_name': 'xyz.openbmc_project.State.Chassis',
+ 'object_name': '/xyz/openbmc_project/state/chassis0',
+ 'interface_name': 'xyz.openbmc_project.State.Chassis',
+ 'property': 'CurrentPowerState',
+ },
+ 'hoststate': {
+ 'bus_name': 'xyz.openbmc_project.State.Host',
+ 'object_name': '/xyz/openbmc_project/state/host0',
+ 'interface_name': 'xyz.openbmc_project.State.Host',
+ 'property': 'CurrentHostState',
},
'bootprogress': {
'bus_name': 'org.openbmc.Sensors',
@@ -156,10 +168,14 @@ dbus_objects = {
},
}
+# Commands that need to run multiple objects above
+multicmd_objects = { 'state' : ['bmcstate', 'chassisstate', 'hoststate'] }
+
bus = dbus.SystemBus()
-if (len(sys.argv) == 1 or sys.argv[1] == "-h" or dbus_objects.has_key(
- sys.argv[1]) == False):
+if (len(sys.argv) == 1 or sys.argv[1] == "-h" or
+ (not(dbus_objects.has_key(sys.argv[1])) and
+ (not(multicmd_objects.has_key(sys.argv[1]))))):
print "Usage: obmcutil [command] [[method] [*args]]"
print "\tIf [method] is blank, then all properties are printed\n"
print "Available commands:"
@@ -173,53 +189,69 @@ if (len(sys.argv) == 1 or sys.argv[1] == "-h" or dbus_objects.has_key(
dbus_objects[name]['property'] + ")"
print "\t" + name + m
+ print "Multi-Commands:"
+ for name in sorted(multicmd_objects.keys()):
+ print "\t" + name + " -> " + ",".join(multicmd_objects[name])
exit(0)
method_name = ""
property_name = ""
sys.argv.pop(0)
-objinfo = dbus_objects[sys.argv.pop(0)]
-
-if (objinfo.has_key('method')):
- method_name = objinfo['method']
-elif (objinfo.has_key('property')):
- property_name = objinfo['property']
-elif (len(sys.argv) > 0):
- ## if command line args left and method not specified
- ## then next arg must be method name
- method_name = sys.argv.pop(0)
-
-bus_name = objinfo['bus_name']
-obj_path = objinfo['object_name']
-intf_name = objinfo['interface_name']
-obj = bus.get_object(bus_name, obj_path)
-
-if (method_name != ""):
- methd = obj.get_dbus_method(method_name, intf_name)
- try:
- data = methd(*sys.argv)
- fix_byte(data, None, None)
- pydata = json.loads(json.dumps(data))
- if 'transform' in objinfo:
- objinfo['transform'](pydata)
- printDict("", pydata)
- except Exception as e:
- print e
- r = introspect(bus_name, obj_path, intf_name, method_name)
- if (r == False):
- print "ERROR: Invalid method: " + method_name
+cmd = [sys.argv.pop(0)]
+
+# Check if this is a multicmd command and update if it is
+if(multicmd_objects.has_key(cmd[0])):
+ cmd = multicmd_objects[cmd[0]]
+
+for c in cmd:
+ objinfo = dbus_objects[c]
+ if (objinfo.has_key('method')):
+ method_name = objinfo['method']
+ elif (objinfo.has_key('property')):
+ property_name = objinfo['property']
+ elif (len(sys.argv) > 0):
+ ## if command line args left and method not specified
+ ## then next arg must be method name
+ method_name = sys.argv.pop(0)
+
+ bus_name = objinfo['bus_name']
+ obj_path = objinfo['object_name']
+ intf_name = objinfo['interface_name']
+ obj = bus.get_object(bus_name, obj_path)
+
+ if (method_name != ""):
+ methd = obj.get_dbus_method(method_name, intf_name)
+ try:
+ data = methd(*sys.argv)
+ fix_byte(data, None, None)
+ pydata = json.loads(json.dumps(data))
+ if 'transform' in objinfo:
+ objinfo['transform'](pydata)
+ printDict("", pydata)
+ except Exception as e:
+ print e
+ r = introspect(bus_name, obj_path, intf_name, method_name)
+ if (r == False):
+ print "ERROR: Invalid method: " + method_name
+ else:
+ print "ERROR: Incorrect arguments passed to method"
+ elif (property_name != ""):
+ intf = dbus.Interface(obj, "org.freedesktop.DBus.Properties")
+ if (objinfo.has_key('value')):
+ property_value = objinfo['value']
+ else:
+ if(len(sys.argv) > 0):
+ property_value = eval(sys.argv.pop(0))
+ else:
+ property_value = None
+ if(property_value is not None):
+ intf.Set(intf_name, property_name, property_value)
else:
- print "ERROR: Incorrect arguments passed to method"
-elif (property_name != ""):
- intf = dbus.Interface(obj, "org.freedesktop.DBus.Properties")
- if (objinfo.has_key('value')):
- property_value = objinfo['value']
+ prop = intf.Get(intf_name,property_name)
+ print '{:<20}'.format(property_name+": ") + str(prop)
else:
- property_value = eval(sys.argv.pop(0))
- intf.Set(intf_name, property_name, property_value)
-else:
- intf = dbus.Interface(obj, "org.freedesktop.DBus.Properties")
- props = intf.GetAll(intf_name)
- for p in props:
- print p + " = " + str(props[p]) \ No newline at end of file
+ intf = dbus.Interface(obj, "org.freedesktop.DBus.Properties")
+ props = intf.GetAll(intf_name)
+ for p in props:
+ print p + " = " + str(props[p]) \ No newline at end of file
OpenPOWER on IntegriCloud