diff --git a/virt b/virt index a6d22134780..c8805998d02 100755 --- a/virt +++ b/virt @@ -353,16 +353,11 @@ def main(): 'shutdown', 'undefine', 'destroy', 'get_xml', 'autostart'] host_commands = ['freemem', 'list_vms', 'info', 'nodeinfo', 'virttype'] - msg = """ virtmodule arguments: - - queryvm guest - - guest commands: (all require a single guest name an argument) - %s - - host commands: - %s - - """ % (', '.join(sorted(vm_commands)), ', '.join(sorted(host_commands))) + state=[running|shutdown] guest=guestname + command=some_virt_command [guest=guestname] + """ if len(sys.argv) == 1: return VIRT_FAILED, msg @@ -378,43 +373,60 @@ def main(): if not len(items): return VIRT_FAILED, msg - basecmd = items[0] - v = Virt() - if basecmd in ('queryvm'): - if len(items) < 3: - msg = "queryvm requires at least 2 arguments: guest itemname [itemname]" + # vm=name state=[running|shutdown|destroyed|undefined] + # command=[some command] [vm=name] + + params = {} + for x in items: + (k, v) = x.split("=") + params[k] = v + + state = params.get('state', None) + guest = params.get('guest', None) + command = params.get('command', None) + options = params.get('options', []) + + v = Virt() + res = {} + + if state: + if not guest: + msg = "state change requires a guest specified" return VIRT_FAILED, msg + + res['changed'] = False + if state == 'running': + if v.status(guest) is not 'running': + res['changed'] = True + res['msg'] = v.start(guest) + elif state == 'shutdown': + if v.status(guest) is not 'shutdown': + res['changed'] = True + res['msg'] = v.shutdown(guest) - guest = items[1] - reqs = items[2:] - res = {} - for req in reqs: - vm = v.get_vm(guest) - if hasattr(vm, req): - data = getattr(vm,req)() - res[req] = data - return rc, res + return VIRT_SUCCESS, res - # any methods that require the guest/vmid as the argument must be listed here - elif basecmd in vm_commands: - if len(items) < 2: - msg = "%s requires 1 argument: guest" % basecmd - return VIRT_FAILED, msg - - guest = items[1] - res = getattr(v, basecmd)(guest) - if type(res) != dict: - res = { basecmd: res } - return rc, res - - elif hasattr(v, basecmd): - res = getattr(v, basecmd)() - return rc, res + if command: + if command in vm_commands: + if not guest: + msg = "%s requires 1 argument: guest" % command + return VIRT_FAILED, msg + + res = getattr(v, command)(guest) + if type(res) != dict: + res = { command: res } + return rc, res - else: - msg = "Command %s not recognized" % basecmd - rc = VIRT_FAILED + elif hasattr(v, command): + res = getattr(v, command)() + if type(res) != dict: + res = { command: res } + return rc, res + + else: + msg = "Command %s not recognized" % basecmd + rc = VIRT_FAILED return rc, msg