diff --git a/cloud/cloudstack/cs_facts.py b/cloud/cloudstack/cs_facts.py index e2bebf8b116..11230b4c229 100644 --- a/cloud/cloudstack/cs_facts.py +++ b/cloud/cloudstack/cs_facts.py @@ -218,4 +218,5 @@ def main(): from ansible.module_utils.basic import * from ansible.module_utils.urls import * from ansible.module_utils.facts import * -main() +if __name__ == '__main__': + main() diff --git a/cloud/cloudstack/cs_instance.py b/cloud/cloudstack/cs_instance.py index 17a342c37ae..3cda4065f99 100644 --- a/cloud/cloudstack/cs_instance.py +++ b/cloud/cloudstack/cs_instance.py @@ -402,9 +402,6 @@ class AnsibleCloudStackInstance(AnsibleCloudStack): if not template and not iso: self.module.fail_json(msg="Template or ISO is required.") - if template and iso: - self.module.fail_json(msg="Template are ISO are mutually exclusive.") - args = {} args['account'] = self.get_account(key='name') args['domainid'] = self.get_domain(key='id') @@ -853,6 +850,9 @@ def main(): api_http_method = dict(choices=['get', 'post'], default='get'), api_timeout = dict(type='int', default=10), ), + mutually_exclusive = ( + ['template', 'iso'], + ), required_together = ( ['api_key', 'api_secret', 'api_url'], ), diff --git a/cloud/cloudstack/cs_ip_address.py b/cloud/cloudstack/cs_ip_address.py index 1dc5a18835e..3e9c0f7bf26 100644 --- a/cloud/cloudstack/cs_ip_address.py +++ b/cloud/cloudstack/cs_ip_address.py @@ -21,7 +21,7 @@ DOCUMENTATION = ''' --- module: cs_ip_address -short_description: Manages Public/Secondary IP address associations +short_description: Manages public IP address associations on Apache CloudStack based clouds. description: - Acquires and associates a public IP to an account or project. Due to API limitations this is not an idempotent call, so be sure to only @@ -31,7 +31,8 @@ author: "Darren Worrall @dazworrall" options: ip_address: description: - - Public IP address. Required if C(state=absent) + - Public IP address. + - Required if C(state=absent) required: false default: null domain: @@ -69,7 +70,7 @@ extends_documentation_fragment: cloudstack ''' EXAMPLES = ''' -# Associate an IP address +# Associate an IP address conditonally - local_action: module: cs_ip_address network: My Network @@ -149,6 +150,7 @@ class AnsibleCloudStackIPAddress(AnsibleCloudStack): break self.module.fail_json(msg="Network '%s' not found" % network) + #TODO: Merge changes here with parent class def get_ip_address(self, key=None): if self.ip_address: @@ -169,6 +171,7 @@ class AnsibleCloudStackIPAddress(AnsibleCloudStack): self.ip_address = ip_addresses['publicipaddress'][0] return self._get_by_key(key, self.ip_address) + def associate_ip_address(self): self.result['changed'] = True args = {} @@ -189,6 +192,7 @@ class AnsibleCloudStackIPAddress(AnsibleCloudStack): ip_address = res return ip_address + def disassociate_ip_address(self): ip_address = self.get_ip_address() if ip_address is None: @@ -206,6 +210,7 @@ class AnsibleCloudStackIPAddress(AnsibleCloudStack): res = self._poll_job(res, 'ipaddress') return ip_address + def get_result(self, ip_address): if ip_address: if 'zonename' in ip_address: diff --git a/cloud/cloudstack/cs_network.py b/cloud/cloudstack/cs_network.py index c4fd51b7a0b..2ae731064a6 100644 --- a/cloud/cloudstack/cs_network.py +++ b/cloud/cloudstack/cs_network.py @@ -533,7 +533,7 @@ class AnsibleCloudStackNetwork(AnsibleCloudStack): self.result['type'] = network['type'] if 'traffictype' in network: self.result['traffic_type'] = network['traffictype'] - if 'zone' in network: + if 'zonename' in network: self.result['zone'] = network['zonename'] if 'domain' in network: self.result['domain'] = network['domain']