From 0c1257b0c17da7f8ba629c35cb90fd2456da3828 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. --- cloud/cloudstack/cs_instance.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/cloud/cloudstack/cs_instance.py b/cloud/cloudstack/cs_instance.py index 4ead1317b2f..6f1339123d8 100644 --- a/cloud/cloudstack/cs_instance.py +++ b/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'])