1#!/bin/bash
2# Usage of this utility
3function usage() {
4    echo "usage: power-util mb [on|off|status|cycle|reset]";
5    echo "       power-util sled-cycle"
6}
7
8power_off() {
9    echo "Shutting down Server"
10    busctl set-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.Off
11}
12
13power_on() {
14    echo "Powering on Server"
15    busctl set-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.On
16}
17
18power_status() {
19    st=$(busctl get-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis CurrentPowerState | cut -d"." -f6)
20    if [ "$st" == "On\"" ]; then
21        echo "on"
22    else
23        echo "off"
24    fi
25}
26
27power_reset() {
28    echo "Reset on server"
29    busctl set-property xyz.openbmc_project.State.Chassis /xyz/openbmc_project/state/chassis0 xyz.openbmc_project.State.Chassis RequestedPowerTransition s xyz.openbmc_project.State.Chassis.Transition.Reset
30}
31
32sled_cycle() {
33    i2cset -y 7 0x45 0xd9 c
34}
35
36if [ "$1" == "sled-cycle" ]; then
37    echo "SLED_CYCLE starting at $(date)"
38    sled_cycle
39    exit 0;
40fi
41
42if [ $# -lt 2 ]; then
43    echo "Total number of parameter=$#"
44    echo "Insufficient parameter"
45    usage;
46    exit 0;
47fi
48
49if [ "$1" != "mb" ]; then
50    echo "Invalid parameter1=$1"
51    usage;
52    exit 0;
53fi
54
55if [ "$2" = "on" ]; then
56  if [ "$(power_status)" == "off" ]; then
57      power_on
58  fi
59elif [ "$2" = "off" ]; then
60  if [ "$(power_status)" == "on" ]; then
61      power_off
62  fi
63elif [ "$2" == "cycle" ]; then
64  if [ "$(power_status)" == "on" ]; then
65      power_off
66  else
67    echo "WARNING: Powering on server"
68  fi
69    power_on
70elif [ "$2" == "reset" ]; then
71  if [ "$(power_status)" == "on" ]; then
72      power_reset
73  else
74    echo "ERROR: Server not powered on"
75  fi
76elif [ "$2" == "status" ]; then
77    power_status
78else
79    echo "Invalid parameter2=$2"
80    usage;
81fi
82
83exit 0;
84