blob: d0db8b521a239b2ec9e028c47dbdc4bc2555d391 [file] [log] [blame]
Norman Jamesb4914ad2015-10-26 07:14:29 -05001#!/usr/bin/python
2
3import sys
Norman Jamesb4914ad2015-10-26 07:14:29 -05004import dbus
Andrew Jeffery0b6883d2017-10-11 22:08:55 +10305import argparse
Norman Jamesb4914ad2015-10-26 07:14:29 -05006
Andrew Jefferyc6b5deb2017-10-11 22:18:27 +10307descriptors = {
Andrew Geisslercae038e2016-12-19 15:29:10 -06008 'power': {
9 'bus_name': 'org.openbmc.control.Power',
10 'object_name': '/org/openbmc/control/power0',
11 'interface_name': 'org.openbmc.control.Power'
12 },
Andrew Geissler2cbbb672017-05-17 10:52:49 -050013 'chassison': {
14 'bus_name': 'xyz.openbmc_project.State.Chassis',
15 'object_name': '/xyz/openbmc_project/state/chassis0',
16 'interface_name': 'xyz.openbmc_project.State.Chassis',
17 'property': 'RequestedPowerTransition',
18 'value': 'xyz.openbmc_project.State.Chassis.Transition.On'
19 },
20 'chassisoff': {
21 'bus_name': 'xyz.openbmc_project.State.Chassis',
22 'object_name': '/xyz/openbmc_project/state/chassis0',
23 'interface_name': 'xyz.openbmc_project.State.Chassis',
24 'property': 'RequestedPowerTransition',
25 'value': 'xyz.openbmc_project.State.Chassis.Transition.Off'
26 },
Andrew Geisslercae038e2016-12-19 15:29:10 -060027 'poweron': {
Andrew Geissler25b9a852016-12-19 16:14:09 -060028 'bus_name': 'xyz.openbmc_project.State.Host',
29 'object_name': '/xyz/openbmc_project/state/host0',
30 'interface_name': 'xyz.openbmc_project.State.Host',
31 'property': 'RequestedHostTransition',
32 'value': 'xyz.openbmc_project.State.Host.Transition.On'
Andrew Geisslercae038e2016-12-19 15:29:10 -060033 },
34 'poweroff': {
Andrew Geissler25b9a852016-12-19 16:14:09 -060035 'bus_name': 'xyz.openbmc_project.State.Host',
36 'object_name': '/xyz/openbmc_project/state/host0',
37 'interface_name': 'xyz.openbmc_project.State.Host',
38 'property': 'RequestedHostTransition',
39 'value': 'xyz.openbmc_project.State.Host.Transition.Off'
Andrew Geisslercae038e2016-12-19 15:29:10 -060040 },
Andrew Geissler8f8cbce2017-02-20 16:10:26 -060041 'bmcstate': {
42 'bus_name': 'xyz.openbmc_project.State.BMC',
43 'object_name': '/xyz/openbmc_project/state/bmc0',
44 'interface_name': 'xyz.openbmc_project.State.BMC',
45 'property': 'CurrentBMCState',
46 },
47 'chassisstate': {
48 'bus_name': 'xyz.openbmc_project.State.Chassis',
49 'object_name': '/xyz/openbmc_project/state/chassis0',
50 'interface_name': 'xyz.openbmc_project.State.Chassis',
51 'property': 'CurrentPowerState',
52 },
53 'hoststate': {
54 'bus_name': 'xyz.openbmc_project.State.Host',
55 'object_name': '/xyz/openbmc_project/state/host0',
56 'interface_name': 'xyz.openbmc_project.State.Host',
57 'property': 'CurrentHostState',
Andrew Geisslercae038e2016-12-19 15:29:10 -060058 },
59 'bootprogress': {
George Keishing3be09952017-08-18 09:48:03 -050060 'bus_name': 'xyz.openbmc_project.State.Host',
61 'object_name': '/xyz/openbmc_project/state/host0',
62 'interface_name': 'xyz.openbmc_project.State.Boot.Progress',
63 'property': 'BootProgress',
Andrew Geisslercae038e2016-12-19 15:29:10 -060064 },
Andrew Jeffery0b6883d2017-10-11 22:08:55 +103065 'state' : ['bmcstate', 'chassisstate', 'hoststate']
Norman Jamesb4914ad2015-10-26 07:14:29 -050066}
67
Andrew Jefferyc6b5deb2017-10-11 22:18:27 +103068def run_one_command(dbus_bus, descriptor):
69 bus = descriptor['bus_name']
70 obj = descriptor['object_name']
71 iface = descriptor['interface_name']
Andrew Jefferye4dcaef2017-10-11 18:08:01 +103072 dbus_obj = dbus_bus.get_object(bus, obj)
73
Andrew Jefferyc6b5deb2017-10-11 22:18:27 +103074 if (descriptor.has_key('property')):
75 prop = descriptor['property']
Andrew Jefferye4dcaef2017-10-11 18:08:01 +103076 dbus_iface = dbus.Interface(dbus_obj, "org.freedesktop.DBus.Properties")
Andrew Jefferyc6b5deb2017-10-11 22:18:27 +103077 if descriptor.has_key('value'):
78 dbus_iface.Set(iface, prop, descriptor['value'])
Andrew Jefferye4dcaef2017-10-11 18:08:01 +103079 else:
80 dbus_prop = dbus_iface.Get(iface, prop)
81 print '{:<20}: {}'.format(prop, str(dbus_prop))
82 else:
83 dbus_iface = dbus.Interface(dbus_obj, "org.freedesktop.DBus.Properties")
84 props = dbus_iface.GetAll(iface)
85 for p in props:
Andrew Jefferybba82bd2017-10-11 22:20:30 +103086 print "{} = {}".format(p, str(props[p]))
Andrew Jefferye4dcaef2017-10-11 18:08:01 +103087
Andrew Jefferyc6b5deb2017-10-11 22:18:27 +103088def run_all_commands(dbus_bus, recipe):
89 if isinstance(recipe, dict):
90 run_one_command(dbus_bus, recipe)
Andrew Jeffery7b376e72017-10-11 18:12:05 +103091 return
92
Andrew Jefferyc6b5deb2017-10-11 22:18:27 +103093 assert isinstance(recipe, list)
94 for command in recipe:
95 run_one_command(dbus_bus, descriptors[command])
Andrew Jeffery7b376e72017-10-11 18:12:05 +103096
Andrew Jeffery44e6d9c2017-10-11 16:57:31 +103097def main():
Andrew Jeffery0b6883d2017-10-11 22:08:55 +103098 parser = argparse.ArgumentParser()
Andrew Jefferyc6b5deb2017-10-11 22:18:27 +103099 parser.add_argument('recipe', choices=sorted(descriptors.keys()))
Andrew Jeffery0b6883d2017-10-11 22:08:55 +1030100 args = parser.parse_args()
Andrew Geissler8f8cbce2017-02-20 16:10:26 -0600101
Andrew Jefferybdb74352017-10-11 17:29:48 +1030102 dbus_bus = dbus.SystemBus()
Andrew Jeffery0b6883d2017-10-11 22:08:55 +1030103 try:
Andrew Jefferyc6b5deb2017-10-11 22:18:27 +1030104 run_all_commands(dbus_bus, descriptors[args.recipe], args)
Andrew Jeffery0b6883d2017-10-11 22:08:55 +1030105 finally:
106 dbus_bus.close()
Andrew Jeffery44e6d9c2017-10-11 16:57:31 +1030107
108if __name__ == "__main__":
109 main()