--- /dev/null
+#!/usr/bin/python
+# mclu (mini cluster)
+# Copyright (C) 2014 Red Hat 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.
+
+import sys
+import os
+import subprocess
+
+import argparse
+import lib
+
+def cmdline (subparsers):
+ p = subparsers.add_parser (
+ 'on',
+ help='power on a node (or nodes)'
+ )
+ p.add_argument (
+ '--all', action='store_const', const=True,
+ help='wake up all nodes'
+ )
+ p.add_argument (
+ 'nodes', nargs='*',
+ help='node name to be woken up'
+ )
+ p.set_defaults (run=run)
+
+def run (c, args, all_nodes):
+ nodes = lib.get_nodes_by_name (all_nodes, args.nodes, args.all)
+
+ # Wake them up.
+ up = 0
+ for node in nodes:
+ if node.ping (force=True):
+ up += 1
+ else:
+ node.wake()
+
+ # Wait for them to come up.
+ pings = 30
+ while pings > 0 and up < len (nodes):
+ for node in nodes:
+ if not node.up:
+ if node.ping (force=True):
+ up += 1
+ pings -= 1
+
+ if pings == 0:
+ sys.exit ('warning: some nodes did not wake up')