diff options
author | René Moser <mail@renemoser.net> | 2016-05-26 07:43:40 +0200 |
---|---|---|
committer | René Moser <mail@renemoser.net> | 2016-05-26 07:43:40 +0200 |
commit | 176a207c61475db4da9561a59f6399b8851a7494 (patch) | |
tree | 0a09778c6848a0d197a37a2b51d92524b57f080a | |
parent | 7b5513cf228baca79fac4ffe8a6d027f2c6967d0 (diff) | |
parent | 62c424797aeae9a5c3eb0a44d0b1a572515a51a2 (diff) | |
download | ansible-176a207c61475db4da9561a59f6399b8851a7494.tar.gz |
Merge pull request #15974 from resmo/feature/vpc
cloudstack: add VPC support
-rw-r--r-- | lib/ansible/module_utils/cloudstack.py | 54 |
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) |