Change node power subcommands.
[mclu.git] / mclu_on.py
diff --git a/mclu_on.py b/mclu_on.py
new file mode 100644 (file)
index 0000000..31ff86c
--- /dev/null
@@ -0,0 +1,62 @@
+#!/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')