add idempotent and ='s separated parameters to virt module to make people happy

reviewable/pr18780/r1
Seth Vidal 13 years ago
parent 7f328752be
commit 26a0644a27

92
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 <queryable item from libvirt domain api> <more of those>
- 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

Loading…
Cancel
Save