From 51976544375baab5210c6421a4f06aecc4f40d2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Moser?= Date: Tue, 12 Apr 2016 18:46:52 +0200 Subject: [PATCH] cloudstack, cs_firewall: fix network not found error in return results (#2006) Only a small issue in results. In case of type is ingress, we rely on ip address, but in results we also return the network. Resolving the ip address works without zone params. If the ip address is not located in the default zone and zone param is not set, the network won't be found because default zone was used for the network query listing. However since network param is not used for type ingress we skip the return of the network in results. --- .../modules/extras/cloud/cloudstack/cs_firewall.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/ansible/modules/extras/cloud/cloudstack/cs_firewall.py b/lib/ansible/modules/extras/cloud/cloudstack/cs_firewall.py index 5450254473..ad51a5136a 100644 --- a/lib/ansible/modules/extras/cloud/cloudstack/cs_firewall.py +++ b/lib/ansible/modules/extras/cloud/cloudstack/cs_firewall.py @@ -227,6 +227,7 @@ class AnsibleCloudStackFirewall(AnsibleCloudStack): 'icmptype': 'icmp_type', } self.firewall_rule = None + self.network = None def get_firewall_rule(self): @@ -302,10 +303,11 @@ class AnsibleCloudStackFirewall(AnsibleCloudStack): return cidr == rule['cidrlist'] - def get_network(self, key=None, network=None): - if not network: - network = self.module.params.get('network') + def get_network(self, key=None): + if self.network: + return self._get_by_key(key, self.network) + network = self.module.params.get('network') if not network: return None @@ -321,6 +323,7 @@ class AnsibleCloudStackFirewall(AnsibleCloudStack): for n in networks['network']: if network in [ n['displaytext'], n['name'], n['id'] ]: + self.network = n return self._get_by_key(key, n) break self.module.fail_json(msg="Network '%s' not found" % network) @@ -385,8 +388,8 @@ class AnsibleCloudStackFirewall(AnsibleCloudStack): super(AnsibleCloudStackFirewall, self).get_result(firewall_rule) if firewall_rule: self.result['type'] = self.module.params.get('type') - if 'networkid' in firewall_rule: - self.result['network'] = self.get_network(key='displaytext', network=firewall_rule['networkid']) + if self.result['type'] == 'egress': + self.result['network'] = self.get_network(key='displaytext') return self.result