Add 'mclu reboot' command.
authorRichard W.M. Jones <rjones@redhat.com>
Fri, 9 May 2014 16:01:41 +0000 (17:01 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Fri, 9 May 2014 16:01:41 +0000 (17:01 +0100)
Makefile.am
mclu.py
mclu_reboot.py [new file with mode: 0644]

index abdbe83..2723187 100644 (file)
@@ -35,6 +35,7 @@ pkgdata_SCRIPTS = \
        mclu_info.py \
        mclu_list.py \
        mclu_migrate.py \
+       mclu_reboot.py \
        mclu_shutdown.py \
        mclu_start.py \
        mclu_status.py \
diff --git a/mclu.py b/mclu.py
index c0ab197..ee0c10b 100755 (executable)
--- a/mclu.py
+++ b/mclu.py
@@ -48,6 +48,8 @@ import mclu_list
 mclu_list.cmdline (subparsers)
 import mclu_migrate
 mclu_migrate.cmdline (subparsers)
+import mclu_reboot
+mclu_reboot.cmdline (subparsers)
 import mclu_shutdown
 mclu_shutdown.cmdline (subparsers)
 import mclu_start
diff --git a/mclu_reboot.py b/mclu_reboot.py
new file mode 100644 (file)
index 0000000..c8eddf5
--- /dev/null
@@ -0,0 +1,54 @@
+#!/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 argparse
+import fnmatch
+import libvirt
+
+import lib
+
+def cmdline (subparsers):
+    p = subparsers.add_parser (
+        'reboot',
+        help='reboot virtual machine(s)',
+    )
+    p.add_argument (
+        '--force', action='store_const', const=True,
+        help='reset the virtual machine(s) forcibly'
+    )
+    p.add_argument (
+        'wildcards', nargs='+',
+        help='virtual machine(s) to be rebooted'
+    )
+    p.set_defaults (run=run)
+
+def run (c, args, nodes):
+    running, _ = lib.get_all_guests (c, nodes.values ())
+
+    for vm in running.values():
+        node = vm['node']
+        dom = vm['dom']
+        # Form the name of this VM (eg. "ham0:vm") so we can match it
+        # against the wildcards (eg. "ham0:*")
+        name = node.name + ":" + dom.name()
+        for wc in args.wildcards:
+            if fnmatch.fnmatch (name, wc) or fnmatch.fnmatch (dom.name(), wc):
+                if args.force:
+                    dom.reset(0)
+                else:
+                    dom.reboot(0)