summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené Moser <mail@renemoser.net>2016-05-26 07:43:40 +0200
committerRené Moser <mail@renemoser.net>2016-05-26 07:43:40 +0200
commit176a207c61475db4da9561a59f6399b8851a7494 (patch)
tree0a09778c6848a0d197a37a2b51d92524b57f080a
parent7b5513cf228baca79fac4ffe8a6d027f2c6967d0 (diff)
parent62c424797aeae9a5c3eb0a44d0b1a572515a51a2 (diff)
downloadansible-176a207c61475db4da9561a59f6399b8851a7494.tar.gz
Merge pull request #15974 from resmo/feature/vpc
cloudstack: add VPC support
-rw-r--r--lib/ansible/module_utils/cloudstack.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/ansible/module_utils/cloudstack.py b/lib/ansible/module_utils/cloudstack.py
index af385ee300..c9071b7e63 100644
--- a/lib/ansible/module_utils/cloudstack.py
+++ b/lib/ansible/module_utils/cloudstack.py
@@ -102,6 +102,8 @@ class AnsibleCloudStack(object):
self.account = None
self.project = None
self.ip_address = None
+ self.network = None
+ self.vpc = None
self.zone = None
self.vm = None
self.os_type = None
@@ -175,6 +177,58 @@ class AnsibleCloudStack(object):
return my_dict
+ def get_vpc(self, key=None):
+ """Return a VPC dictionary or the value of given key of."""
+ if self.vpc:
+ return self._get_by_key(key, self.vpc)
+
+ vpc = self.module.params.get('vpc')
+ if not vpc:
+ return None
+
+ args = {
+ 'account': self.get_account(key='name'),
+ 'domainid': self.get_domain(key='id'),
+ 'projectid': self.get_project(key='id'),
+ 'zoneid': self.get_zone(key='id'),
+ }
+ vpcs = self.cs.listVPCs(**args)
+ if not vpcs:
+ self.module.fail_json(msg="No VPCs available.")
+
+ for v in vpcs['vpc']:
+ if vpc in [v['displaytext'], v['name'], v['id']]:
+ self.vpc = v
+ return self._get_by_key(key, self.vpc)
+ self.module.fail_json(msg="VPC '%s' not found" % vpc)
+
+
+ def get_network(self, key=None):
+ """Return a network dictionary or the value of given key of."""
+ if self.network:
+ return self._get_by_key(key, self.network)
+
+ network = self.module.params.get('network')
+ if not network:
+ return None
+
+ args = {
+ 'account': self.get_account('name'),
+ 'domainid': self.get_domain('id'),
+ 'projectid': self.get_project('id'),
+ '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']]:
+ self.network = n
+ return self._get_by_key(key, self.network)
+ self.module.fail_json(msg="Network '%s' not found" % network)
+
+
def get_project(self, key=None):
if self.project:
return self._get_by_key(key, self.project)