blob: 8e456fd9937e0f113539bc288950f0d499f61b0a [file] [log] [blame]
#!/bin/bash
#
# Copyright (C) 2011 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
SSH_USER='root'
SSH_FLAGS='-q -oStrictHostKeyChecking=no'
EXIT_SUCCESS=0
EXIT_FAILURE=1
EXIT_UNKNOWN=2
_run_ssh() {
local host="$1"
local command="$2"
ssh $SSH_FLAGS "$SSH_USER@$host" "$command" 1>&2
return $?
}
_power_on() {
echo 'power-on not supported in this script' >&2
exit $EXIT_FAILURE
}
_power_off() {
local host="$1"
if ! _run_ssh "$host" 'shutdown -h now'; then
echo "Failure during ssh to $host" >&2
exit $EXIT_FAILURE
fi
}
_power_cycle() {
local host="$1"
if ! _run_ssh "$host" 'shutdown -r now'; then
echo "Failure during ssh to $host" >&2
exit $EXIT_FAILURE
fi
}
_power_status() {
local host="$1"
if fping -q "$host" > /dev/null 2>&1; then
echo '{ "powered": true }'
else
echo '{ "powered": false }'
fi
}
_health() {
echo 'health not supported in this script' >&2
exit $EXIT_FAILURE
}
_action() {
local command="$1"
local host="$2"
case "$command" in
power-on)
_power_on "$host"
;;
power-off)
_power_off "$host"
;;
power-cycle)
_power_cycle "$host"
;;
power-status)
_power_status "$host"
;;
health)
_health "$host"
;;
*)
echo "Unsupported command '$command'" >&2
exit $EXIT_FAILURE
;;
esac
}
main() {
if [[ $# != 2 ]]; then
echo "Wrong argument count, got $#, expected 2" >&2
exit $EXIT_FAILURE
fi
_action "$@"
exit $EXIT_SUCCESS
}
main "$@"