#!/usr/bin/env python # This file is part of Cockpit. # # Copyright (C) 2013 Red Hat, Inc. # # Cockpit is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # Cockpit 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with Cockpit; If not, see . import argparse import errno import os import subprocess import sys from common import testvm TEST = os.path.dirname(__file__) BOTS = os.path.normpath(os.path.join(TEST, "..", "bots")) parser = argparse.ArgumentParser(description='Run a test machine') parser.add_argument('-v', '--verbose', action='store_true', help='Display verbose details') parser.add_argument('-m', '--maintain', action='store_true', help='Changes are permanent') parser.add_argument('-M', '--memory', default=None, type=int, help='Memory (in MiB) of the target machine') parser.add_argument('-C', '--cpus', default=None, type=int, help='Number of cpus in the target machine') parser.add_argument('image', help='The image to run') args = parser.parse_args() try: machine = testvm.VirtMachine(verbose=args.verbose, image=args.image) # Hack to make things easier for users who don't know about kubeconfig if args.image == 'openshift': kubeconfig = os.path.join(os.path.expanduser("~"), ".kube", "config") if not os.path.lexists(kubeconfig): d = os.path.dirname(kubeconfig) src = os.path.abspath(os.path.join(TEST, "verify", "files", "openshift.kubeconfig")) if not os.path.exists(d): os.makedirs(d) sys.stderr.write("image-run: linking kubeconfig into ~/.kube/config\n") os.symlink(src, kubeconfig) # Check that things are configured with open(os.devnull, 'w') as fp: if subprocess.call(["ip", "address", "show", "dev", "cockpit1"], stdout=fp, stderr=fp) != 0: raise Exception("vm-run: please run: sudo test/vm-prep") # Check that image is downloaded if not os.path.exists(machine.image_file): try: ret = subprocess.call([ os.path.join(BOTS, "image-download"), args.image]) except OSError, ex: if ex.errno != errno.ENOENT: raise else: if ret != 0: sys.exit(ret) machine.qemu_console(maintain=args.maintain, memory_mb=args.memory, cpus=args.cpus) except testvm.Failure, ex: print >> sys.stderr, "vm-run:", ex sys.exit(1)