diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-05-24 15:36:13 +0100 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-05-24 15:36:13 +0100 |
commit | 2df50e48b8ff417ecc80da57bffeffe0e6bdc946 (patch) | |
tree | c288eb3a137531787a8f47b5b668e552a1808c5a | |
parent | a6164848501f14b3fca0938abf03ffa1602f20c1 (diff) | |
download | xen-2df50e48b8ff417ecc80da57bffeffe0e6bdc946.tar.gz xen-2df50e48b8ff417ecc80da57bffeffe0e6bdc946.tar.bz2 xen-2df50e48b8ff417ecc80da57bffeffe0e6bdc946.zip |
xend: Give "xm start" a -c parameter for connecting to the console
From: Chris Lalancette <clalance@redhat.com>
Signed-off-by: Keir Fraser <keir@xensource.com>
-rw-r--r-- | tools/python/xen/xm/main.py | 67 |
1 files changed, 53 insertions, 14 deletions
diff --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py index 1e0d8502e4..7f0a57a875 100644 --- a/tools/python/xen/xm/main.py +++ b/tools/python/xen/xm/main.py @@ -231,6 +231,7 @@ SUBCOMMAND_OPTIONS = { ), 'start': ( ('-p', '--paused', 'Do not unpause domain after starting it'), + ('-c', '--console_autoconnect', 'Connect to the console after the domain is created'), ), 'resume': ( ('-p', '--paused', 'Do not unpause domain after resuming it'), @@ -1125,29 +1126,67 @@ def xm_vcpu_list(args): print format % locals() +def start_do_console(domain_name): + cpid = os.fork() + if cpid != 0: + for i in range(10): + # Catch failure of the create process + time.sleep(1) + (p, rv) = os.waitpid(cpid, os.WNOHANG) + if os.WIFEXITED(rv): + if os.WEXITSTATUS(rv) != 0: + sys.exit(os.WEXITSTATUS(rv)) + try: + # Acquire the console of the created dom + if serverType == SERVER_XEN_API: + domid = server.xenapi.VM.get_domid( + get_single_vm(domain_name)) + else: + dom = server.xend.domain(domain_name) + domid = int(sxp.child_value(dom, 'domid', '-1')) + console.execConsole(domid) + except: + pass + print("Could not start console\n"); + sys.exit(0) + def xm_start(args): - arg_check(args, "start", 1, 2) + + paused = False + console_autoconnect = False try: - (options, params) = getopt.gnu_getopt(args, 'p', ['paused']) + (options, params) = getopt.gnu_getopt(args, 'cp', ['console_autoconnect','paused']) + for (k, v) in options: + if k in ('-p', '--paused'): + paused = True + if k in ('-c', '--console_autoconnect'): + console_autoconnect = True + + if len(params) != 1: + raise OptionError("Expects 1 argument") except getopt.GetoptError, opterr: err(opterr) usage('start') - paused = False - for (k, v) in options: - if k in ['-p', '--paused']: - paused = True + dom = params[0] - if len(params) != 1: - err("Wrong number of parameters") - usage('start') + if console_autoconnect: + start_do_console(dom) - dom = params[0] - if serverType == SERVER_XEN_API: - server.xenapi.VM.start(get_single_vm(dom), paused) - else: - server.xend.domain.start(dom, paused) + try: + if serverType == SERVER_XEN_API: + server.xenapi.VM.start(get_single_vm(dom), paused) + domid = int(server.xenapi.VM.get_domid(get_single_vm(dom))) + else: + server.xend.domain.start(dom, paused) + info = server.xend.domain(dom) + domid = int(sxp.child_value(info, 'domid', '-1')) + except: + raise + + if domid == -1: + raise xmlrpclib.Fault(0, "Domain '%s' is not started" % dom) def xm_delete(args): arg_check(args, "delete", 1) |