diff options
author | Andrew Geissler <andrewg@us.ibm.com> | 2017-02-20 16:10:26 -0600 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2017-03-09 21:53:42 +0000 |
commit | 8f8cbcea43655ef22dd79838408d1e1d052f1191 (patch) | |
tree | c6622629f5dd39547ad3d36b2b49c18cec33288d /pytools | |
parent | b44db264b367bd9d122a84da8816b368f4b80baf (diff) | |
download | talos-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/obmcutil | 130 |
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 |