diff --git a/lib/ansible/modules/cloud/misc/virt.py b/lib/ansible/modules/cloud/misc/virt.py index 80801c44718..987221a6277 100644 --- a/lib/ansible/modules/cloud/misc/virt.py +++ b/lib/ansible/modules/cloud/misc/virt.py @@ -47,8 +47,14 @@ options: - in addition to state management, various non-idempotent commands are available. See examples required: false choices: ["create","status", "start", "stop", "pause", "unpause", - "shutdown", "undefine", "destroy", "get_xml", "autostart", + "shutdown", "undefine", "destroy", "get_xml", "freemem", "list_vms", "info", "nodeinfo", "virttype", "define"] + autostart: + description: + - start VM at host startup + choices: [True, False] + version_added: "2.3" + default: null uri: description: - libvirt connection uri @@ -127,7 +133,7 @@ else: ALL_COMMANDS = [] VM_COMMANDS = ['create','status', 'start', 'stop', 'pause', 'unpause', - 'shutdown', 'undefine', 'destroy', 'get_xml', 'autostart', 'define'] + 'shutdown', 'undefine', 'destroy', 'get_xml', 'define'] HOST_COMMANDS = ['freemem', 'list_vms', 'info', 'nodeinfo', 'virttype'] ALL_COMMANDS.extend(VM_COMMANDS) ALL_COMMANDS.extend(HOST_COMMANDS) @@ -339,9 +345,14 @@ class Virt(object): def virttype(self): return self.__get_conn().get_type() - def autostart(self, vmid): + def autostart(self, vmid, as_flag): self.conn = self.__get_conn() - return self.conn.set_autostart(vmid, True) + # Change autostart flag only if needed + if self.conn.get_autostart(vmid) != as_flag: + self.conn.set_autostart(vmid, as_flag) + return True + + return False def freemem(self): self.conn = self.__get_conn() @@ -431,6 +442,7 @@ class Virt(object): def core(module): state = module.params.get('state', None) + autostart = module.params.get('autostart', None) guest = module.params.get('name', None) command = module.params.get('command', None) uri = module.params.get('uri', None) @@ -449,7 +461,6 @@ def core(module): if not guest: module.fail_json(msg = "state change requires a guest specified") - res['changed'] = False if state == 'running': if v.status(guest) is 'paused': res['changed'] = True @@ -474,6 +485,9 @@ def core(module): return VIRT_SUCCESS, res + if autostart is not None and v.autostart(guest, autostart): + res['changed'] = True + if command: if command in VM_COMMANDS: if not guest: @@ -508,6 +522,7 @@ def main(): module = AnsibleModule(argument_spec=dict( name = dict(aliases=['guest']), state = dict(choices=['running', 'shutdown', 'destroyed', 'paused']), + autostart = dict(type='bool'), command = dict(choices=ALL_COMMANDS), uri = dict(default='qemu:///system'), xml = dict(),