From f19d70a4655632415ad6aab7fd5494da176b89c8 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Fri, 9 May 2014 17:01:41 +0100 Subject: [PATCH] Add 'mclu reboot' command. --- Makefile.am | 1 + mclu.py | 2 ++ mclu_reboot.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 mclu_reboot.py diff --git a/Makefile.am b/Makefile.am index abdbe83..2723187 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 --- 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 index 0000000..c8eddf5 --- /dev/null +++ b/mclu_reboot.py @@ -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) -- 1.8.3.1