[local]
localhost ansible_connection=local
[dbservers]
server1
server2
server3localhost | SUCCESS => {
"changed": false,
"failed": false,
"status": "running"
} - hosts: dbservers
tasks:
- name: Test command for VMs
virt:
command: status
name: '{{ansible_host }}'An exception occurred during task execution. To see the full traceback, use -vvv. The error was: VMNotFound: virtual machine server1 not found
fatal: [server1]: FAILED! => {"changed": false, "failed": true, "msg": "virtual machine server1 not found"}
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: VMNotFound: virtual machine server2 not found
fatal: [server2]: FAILED! => {"changed": false, "failed": true, "msg": "virtual machine server2 not found"}
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: VMNotFound: virtual machine server3 not found
fatal: [server3]: FAILED! => {"changed": false, "failed": true, "msg": "virtual machine server3 not found"}The full traceback is:
Traceback (most recent call last):
File "/tmp/ansible_WuP4hq/ansible_module_virt.py", line 540, in main
rc, result = core(module)
File "/tmp/ansible_WuP4hq/ansible_module_virt.py", line 506, in core
res = getattr(v, command)(guest)
File "/tmp/ansible_WuP4hq/ansible_module_virt.py", line 410, in status
return self.conn.get_status(vmid)
File "/tmp/ansible_WuP4hq/ansible_module_virt.py", line 236, in get_status
state = self.find_vm(vmid).info()[0]
File "/tmp/ansible_WuP4hq/ansible_module_virt.py", line 205, in find_vm
raise VMNotFound("virtual machine %s not found" % vmid)
VMNotFound: virtual machine server3 not found
fatal: [server3]: FAILED! => {
"changed": false,
"failed": true,
"invocation": {
"module_args": {
"autostart": null,
"command": "status",
"name": "server3",
"state": null,
"uri": "qemu:///system",
"xml": null
}
},
"msg": "virtual machine server3 not found"
}ansible --version
ansible 2.4.1.0
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/bfranklin/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /home/bfranklin/.local/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.13 (default, Jan 19 2017, 14:48:08) [GCC 6.3.0 20170118]/Python 2.7.13 (default, Jan 19 2017, 14:48:08)
[GCC 6.3.0 20170118] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import libvirt
>>> print "VMs off"
VMs off
>>> conn = libvirt.open('qemu:///system')
>>> vms = []
>>> ids = conn.listDomainsID()
>>> ids
[]
>>> domains = conn.listDefinedDomains()
>>> domains
['server3', 'server2', 'server1']
>>> for id in ids:
... vm = conn.lookupByID(id)
... vms.append(vm)
...
>>> vms
[]
>>> for domain in domains:
... vm = conn.lookupByName(domain)
... vms.append(vm)
...
>>> vms
[<libvirt.virDomain object at 0x7fe15b71f690>, <libvirt.virDomain object at 0x7fe15b71f6d0>, <libvirt.virDomain object at 0x7fe15b71f710>]
>>> vms[0].name()
'server3'
>>> vms[1].name()
'server2'
>>> vms[2].name()
'server1'>>> print 'VMs on'
VMs on
>>> ids = conn.listDomainsID()
>>> ids
[95, 94, 93]
>>> for id in ids:
... vm = conn.lookupByID(id)
... vms.append(vm)
...
>>> vms
[<libvirt.virDomain object at 0x7fe15b71f690>, <libvirt.virDomain object at 0x7fe15b71f6d0>, <libvirt.virDomain object at 0x7fe15b71f710>, <libvirt.virDomain object at 0x7fe15b71f650>, <libvirt.virDomain object at 0x7fe15b71f790>, <libvirt.virDomain object at 0x7fe15b71f7d0>]
>>> vms[0].name()
'server3'
>>> vms[1].name()
'server2'
>>> vms[2].name()
'server1'
>>> domains = conn.listDefinedDomains()
>>> domains
[]
>>> for domain in domains:
... vm = conn.lookupByName(domain)
... vms.append(vm)
...
>>> domains
[]
>>>
def find_vm(self, vmid):
"""
Extra bonus feature: vmid = -1 returns a list of everything
"""
conn = self.conn
vms = []
# this block of code borrowed from virt-manager:
# get working domain's name
ids = conn.listDomainsID()
for id in ids:
vm = conn.lookupByID(id)
vms.append(vm)
# get defined domain
names = conn.listDefinedDomains()
for name in names:
vm = conn.lookupByName(name)
vms.append(vm)
if vmid == -1:
return vms
for vm in vms:
if vm.name() == vmid:
return vm
raise VMNotFound("virtual machine %s not found" % vmid)
- hosts: dbservers
tasks:
- name: Test command for VMs
virt:
command: status
name: localhost<server3> (0, '\r\n{"msg": "virtual machine localhost not found", "failed": true, "exception": "Traceback (most recent call last):\\n File \\"/tmp/ansible_mQLcdU/ansible_module_virt.py\\", line 540, in main\\n rc, result = core(module)\\n File \\"/tmp/ansible_mQLcdU/ansible_module_virt.py\\", line 506, in core\\n res = getattr(v, command)(guest)\\n File \\"/tmp/ansible_mQLcdU/ansible_module_virt.py\\", line 410, in status\\n return self.conn.get_status(vmid)\\n File \\"/tmp/ansible_mQLcdU/ansible_module_virt.py\\", line 236, in get_status\\n state = self.find_vm(vmid).info()[0]\\n File \\"/tmp/ansible_mQLcdU/ansible_module_virt.py\\", line 205, in find_vm\\n raise VMNotFound(\\"virtual machine %s not found\\" % vmid)\\nVMNotFound: virtual machine localhost not found\\n", "invocation": {"module_args": {"xml": null, "name": "localhost", "uri": "qemu:///system", "state": null, "command": "status", "autostart": null}}}\r\n', 'Shared connection to server3 closed.\r\n')
The full traceback is:
Traceback (most recent call last):
File "/tmp/ansible_mQLcdU/ansible_module_virt.py", line 540, in main
rc, result = core(module)
File "/tmp/ansible_mQLcdU/ansible_module_virt.py", line 506, in core
res = getattr(v, command)(guest)
File "/tmp/ansible_mQLcdU/ansible_module_virt.py", line 410, in status
return self.conn.get_status(vmid)
File "/tmp/ansible_mQLcdU/ansible_module_virt.py", line 236, in get_status
state = self.find_vm(vmid).info()[0]
File "/tmp/ansible_mQLcdU/ansible_module_virt.py", line 205, in find_vm
raise VMNotFound("virtual machine %s not found" % vmid)
VMNotFound: virtual machine localhost not found
fatal: [server3]: FAILED! => {
"changed": false,
"failed": true,
"invocation": {
"module_args": {
"autostart": null,
"command": "status",
"name": "localhost",
"state": null,
"uri": "qemu:///system",
"xml": null
}
},
"msg": "virtual machine localhost not found"
- hosts: local
tasks:
- name: Test command for VMs
virt:
command: status
TASK [Test command for VMs] *****************************************************************************************************************************************************************************************
task path: /home/bfranklin/bin/test.test/tasks/test3.yml:20
Using module file /home/bfranklin/.local/lib/python2.7/site-packages/ansible/modules/cloud/misc/virt.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: bfranklin
<localhost> EXEC /bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/bfranklin/.ansible/tmp/ansible-tmp-1510956849.89-176724624375677 `" && echo ansible-tmp-1510956849.89-176724624375677="` echo /home/bfranklin/.ansible/tmp/ansible-tmp-1510956849.89-176724624375677 `" ) && sleep 0'
<localhost> PUT /tmp/tmpgNSjwP TO /home/bfranklin/.ansible/tmp/ansible-tmp-1510956849.89-176724624375677/virt.py
<localhost> EXEC /bin/sh -c 'chmod u+x /home/bfranklin/.ansible/tmp/ansible-tmp-1510956849.89-176724624375677/ /home/bfranklin/.ansible/tmp/ansible-tmp-1510956849.89-176724624375677/virt.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python /home/bfranklin/.ansible/tmp/ansible-tmp-1510956849.89-176724624375677/virt.py; rm -rf "/home/bfranklin/.ansible/tmp/ansible-tmp-1510956849.89-176724624375677/" > /dev/null 2>&1 && sleep 0'
fatal: [localhost]: FAILED! => {
"changed": false,
"failed": true,
"invocation": {
"module_args": {
"autostart": null,
"command": "status",
"name": null,
"state": null,
"uri": "qemu:///system",
"xml": null
}
},
"msg": "status requires 1 argument: guest"