From e5517fafc11bafb37af531fc00b1a8decd0d1c0d Mon Sep 17 00:00:00 2001 From: Rene Moser Date: Tue, 1 Sep 2015 00:28:27 +0200 Subject: [PATCH] cloudstack: cs_instance: deploy instance in desired state on state=started/stopped Before this change, an instance must be present for make use of state=stopped/started. Now we are deploying an instance in the desire state if it does not exist. In this case all args needed to deploy the instance must be passed. However the short form for stopping/starting an _existing_ instance still works as before. --- .../extras/cloud/cloudstack/cs_instance.py | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/lib/ansible/modules/extras/cloud/cloudstack/cs_instance.py b/lib/ansible/modules/extras/cloud/cloudstack/cs_instance.py index b7815812a4..8cececcfb7 100644 --- a/lib/ansible/modules/extras/cloud/cloudstack/cs_instance.py +++ b/lib/ansible/modules/extras/cloud/cloudstack/cs_instance.py @@ -548,7 +548,7 @@ class AnsibleCloudStackInstance(AnsibleCloudStack): return user_data - def deploy_instance(self): + def deploy_instance(self, start_vm=True): self.result['changed'] = True networkids = self.get_network_ids() if networkids is not None: @@ -573,6 +573,7 @@ class AnsibleCloudStackInstance(AnsibleCloudStack): args['group'] = self.module.params.get('group') args['keypair'] = self.module.params.get('ssh_key') args['size'] = self.module.params.get('disk_size') + args['startvm'] = start_vm args['rootdisksize'] = self.module.params.get('root_disk_size') args['securitygroupnames'] = ','.join(self.module.params.get('security_groups')) args['affinitygroupnames'] = ','.join(self.module.params.get('affinity_groups')) @@ -700,10 +701,12 @@ class AnsibleCloudStackInstance(AnsibleCloudStack): def stop_instance(self): instance = self.get_instance() - if not instance: - self.module.fail_json(msg="Instance named '%s' not found" % self.module.params.get('name')) - if instance['state'].lower() in ['stopping', 'stopped']: + if not instance: + instance = self.deploy_instance(start_vm=False) + return instance + + elif instance['state'].lower() in ['stopping', 'stopped']: return instance if instance['state'].lower() in ['starting', 'running']: @@ -722,10 +725,12 @@ class AnsibleCloudStackInstance(AnsibleCloudStack): def start_instance(self): instance = self.get_instance() - if not instance: - self.module.fail_json(msg="Instance named '%s' not found" % module.params.get('name')) - if instance['state'].lower() in ['starting', 'running']: + if not instance: + instance = self.deploy_instance() + return instance + + elif instance['state'].lower() in ['starting', 'running']: return instance if instance['state'].lower() in ['stopped', 'stopping']: @@ -744,10 +749,12 @@ class AnsibleCloudStackInstance(AnsibleCloudStack): def restart_instance(self): instance = self.get_instance() - if not instance: - module.fail_json(msg="Instance named '%s' not found" % self.module.params.get('name')) - if instance['state'].lower() in [ 'running', 'starting' ]: + if not instance: + instance = self.deploy_instance() + return instance + + elif instance['state'].lower() in [ 'running', 'starting' ]: self.result['changed'] = True if not self.module.check_mode: instance = self.cs.rebootVirtualMachine(id=instance['id'])