summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené Moser <mail@renemoser.net>2016-12-05 16:18:28 +0100
committerGitHub <noreply@github.com>2016-12-05 16:18:28 +0100
commit424e853dd48e3d0976484dd51b2740bc82a75803 (patch)
treeef31b48f46733f9e2d736c6c1b1b15c942a9015f
parent5aa1143b172e670693bc9aee26b691a35d936567 (diff)
downloadansible-modules-extras-424e853dd48e3d0976484dd51b2740bc82a75803.tar.gz
cloudstack: cs_ip_address: implement VPC support (#3403)
-rw-r--r--cloud/cloudstack/cs_ip_address.py62
1 files changed, 18 insertions, 44 deletions
diff --git a/cloud/cloudstack/cs_ip_address.py b/cloud/cloudstack/cs_ip_address.py
index 62d6ac21..2eb21411 100644
--- a/cloud/cloudstack/cs_ip_address.py
+++ b/cloud/cloudstack/cs_ip_address.py
@@ -139,62 +139,34 @@ class AnsibleCloudStackIPAddress(AnsibleCloudStack):
'ipaddress': 'ip_address',
}
-
- #TODO: Add to parent class, duplicated in cs_network
- def get_network(self, key=None, network=None):
- if not network:
- network = self.module.params.get('network')
-
- if not network:
- return None
-
- args = {}
- args['account'] = self.get_account('name')
- args['domainid'] = self.get_domain('id')
- args['projectid'] = self.get_project('id')
- args['zoneid'] = self.get_zone('id')
-
- networks = self.cs.listNetworks(**args)
- if not networks:
- self.module.fail_json(msg="No networks available")
-
- for n in networks['network']:
- if network in [ n['displaytext'], n['name'], n['id'] ]:
- return self._get_by_key(key, n)
- 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:
return self._get_by_key(key, self.ip_address)
ip_address = self.module.params.get('ip_address')
- if not ip_address:
- self.module.fail_json(msg="IP address param 'ip_address' is required")
-
- args = {}
- args['ipaddress'] = ip_address
- args['account'] = self.get_account(key='name')
- args['domainid'] = self.get_domain(key='id')
- args['projectid'] = self.get_project(key='id')
- args['vpcid'] = self.get_vpc(key='id')
+ args = {
+ 'ipaddress': self.module.params.get('ip_address'),
+ 'account': self.get_account(key='name'),
+ 'domainid': self.get_domain(key='id'),
+ 'projectid': self.get_project(key='id'),
+ 'vpcid': self.get_vpc(key='id'),
+ }
ip_addresses = self.cs.listPublicIpAddresses(**args)
if ip_addresses:
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 = {}
- args['account'] = self.get_account(key='name')
- args['domainid'] = self.get_domain(key='id')
- args['projectid'] = self.get_project(key='id')
- args['networkid'] = self.get_network(key='id')
- args['zoneid'] = self.get_zone(key='id')
- ip_address = {}
+ args = {
+ 'account': self.get_account(key='name'),
+ 'domainid': self.get_domain(key='id'),
+ 'projectid': self.get_project(key='id'),
+ 'networkid': self.get_network(key='id'),
+ 'zoneid': self.get_zone(key='id'),
+ }
+ ip_address = None
if not self.module.check_mode:
res = self.cs.associateIpAddress(**args)
if 'errortext' in res:
@@ -205,7 +177,6 @@ class AnsibleCloudStackIPAddress(AnsibleCloudStack):
ip_address = self.poll_job(res, 'ipaddress')
return ip_address
-
def disassociate_ip_address(self):
ip_address = self.get_ip_address()
if not ip_address:
@@ -241,6 +212,9 @@ def main():
module = AnsibleModule(
argument_spec=argument_spec,
required_together=cs_required_together(),
+ required_if=[
+ ('state', 'absent', ['ip_address']),
+ ],
supports_check_mode=True
)