#!/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 ConfigParser import os import re import sys import config import mclu_build import mclu_console import mclu_import import mclu_info import mclu_list import mclu_migrate import mclu_off import mclu_on import mclu_reboot import mclu_start import mclu_status import mclu_stop import mclu_viewer parser = argparse.ArgumentParser ( prog='mclu', description='Mini virtualization cluster management tool', ) parser.add_argument ( '-f', type=file, help='specify location of the configuration file', metavar='MCLU.CONF', ) # Add subcommands. subparsers = parser.add_subparsers () mclu_build.cmdline (subparsers) mclu_console.cmdline (subparsers) mclu_import.cmdline (subparsers) mclu_info.cmdline (subparsers) mclu_list.cmdline (subparsers) mclu_migrate.cmdline (subparsers) mclu_off.cmdline (subparsers) mclu_on.cmdline (subparsers) mclu_reboot.cmdline (subparsers) mclu_start.cmdline (subparsers) mclu_status.cmdline (subparsers) mclu_stop.cmdline (subparsers) mclu_viewer.cmdline (subparsers) args = parser.parse_args() # Default location of the config file if not defined on the command line: if not args.f: config_dir = config.sysconfdir + "/" + config.PACKAGE_NAME args.f = open (config_dir + "/" + "mclu.conf") else: # config_dir is the directory containing mclu.conf config_dir = os.path.dirname (args.f.name) # Configuration file default settings. You cannot set defaults per # section, so we have to rely on setting names not overlapping. conf_defaults = { "home" : os.getenv ("HOME"), "config_dir" : config_dir, } # Read the configuration file. conf = ConfigParser.SafeConfigParser (conf_defaults) conf.readfp (args.f) # Global configuration. images_dir = conf.get ("global", "images_dir") if not os.path.isdir (images_dir): sys.exit ("configuration error: [globals] 'images_dir' (%s) directory does not exist" % images_dir) xmls_dir = conf.get ("global", "xmls_dir") if not os.path.isdir (xmls_dir): sys.exit ("configuration error: [globals] 'xmls_dir' (%s) directory does not exist", xmls_dir) nodes_group = conf.get ("global", "nodes_group") # A config dict with less-used configuration settings. c = { "config_file" : args.f.name, "config_dir" : config_dir, "images_dir" : images_dir, "nodes_group" : nodes_group, "xmls_dir" : xmls_dir, "conf" : conf, } # Run the subcommand. args.run (c, args)