From 081d855a030174f3304b9edecd8fa80de6003e22 Mon Sep 17 00:00:00 2001 From: Joshua Boniface Date: Tue, 12 Mar 2019 21:09:54 -0400 Subject: [PATCH] Allow dumping of VMs --- client-cli/pvc.py | 23 +++++++++++++++++++++++ client-common/vm.py | 11 +++++++++++ 2 files changed, 34 insertions(+) diff --git a/client-cli/pvc.py b/client-cli/pvc.py index 56a0e3d1..08245c6b 100755 --- a/client-cli/pvc.py +++ b/client-cli/pvc.py @@ -385,6 +385,28 @@ def vm_undefine(domain): retcode, retmsg = pvc_vm.undefine_vm(zk_conn, domain) cleanup(retcode, retmsg, zk_conn) +############################################################################### +# pvc vm dump +############################################################################### +@click.command(name='dump', short_help='Dump a virtual machine XML to stdout.') +@click.argument( + 'domain' +) +def vm_dump(domain): + """ + Dump the Libvirt XML definition of virtual machine DOMAIN to stdout. DOMAIN may be a UUID or name. + """ + + # Ensure at least one search method is set + if domain == None: + click.echo("ERROR: You must specify either a name or UUID value.") + exit(1) + + # Open a Zookeeper connection + zk_conn = pvc_common.startZKConnection(zk_host) + retcode, retmsg = pvc_vm.dump_vm(zk_conn, domain) + cleanup(retcode, retmsg, zk_conn) + ############################################################################### # pvc vm start ############################################################################### @@ -1280,6 +1302,7 @@ cli_vm.add_command(vm_add) cli_vm.add_command(vm_define) cli_vm.add_command(vm_modify) cli_vm.add_command(vm_undefine) +cli_vm.add_command(vm_dump) cli_vm.add_command(vm_start) cli_vm.add_command(vm_restart) cli_vm.add_command(vm_shutdown) diff --git a/client-common/vm.py b/client-common/vm.py index 52d22487..6bb21220 100644 --- a/client-common/vm.py +++ b/client-common/vm.py @@ -248,6 +248,17 @@ def modify_vm(zk_conn, domain, restart, new_vm_config): return True, '' +def dump_vm(zk_conn, domain): + dom_uuid = getDomainUUID(zk_conn, domain) + if dom_uuid == None: + return False, 'ERROR: Could not find VM "{}" in the cluster!'.format(domain) + + # Gram the domain XML and dump it to stdout + vm_xml = zkhandler.readdata(zk_conn, '/domains/{}/xml'.format(dom_uuid)) + click.echo(vm_xml) + + return True, '' + def undefine_vm(zk_conn, domain): # Validate and obtain alternate passed value dom_uuid = getDomainUUID(zk_conn, domain)