Skip to content

Commit fd0d2ab

Browse files
committed
proxmox_firewall: Fix minor bugs and sanity issues
- When state is absent and pos is 0 if condition with pos was failing. to fix it explicitly check if pos is not None.
1 parent 6f37333 commit fd0d2ab

File tree

6 files changed

+27
-23
lines changed

6 files changed

+27
-23
lines changed

plugins/module_utils/proxmox.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -102,20 +102,20 @@ def compare_list_of_dicts(existing_list, new_list, uid, params_to_ignore=None):
102102

103103
common_uids = set(existing_list.keys()).intersection(set(new_list.keys()))
104104
missing_uids = set(new_list.keys()) - set(existing_list.keys())
105-
items_to_create = [new_list[id] for id in missing_uids]
105+
items_to_create = [new_list[uid] for uid in missing_uids]
106106

107-
for id in common_uids:
107+
for uid in common_uids:
108108
# If new rule has a parameter that is not present in existing rule we need to update
109-
if set(new_list[id].keys()) - set(existing_list[id].keys()) != set():
110-
items_to_update.append(new_list[id])
109+
if set(new_list[uid].keys()) - set(existing_list[uid].keys()) != set():
110+
items_to_update.append(new_list[uid])
111111
continue
112112

113113
# If existing rule param value doesn't match new rule param OR
114114
# If existing rule has a param that is not present in new rule except for params in params_to_ignore
115-
for existing_rule_param, existing_parm_value in existing_list[id].items():
115+
for existing_rule_param, existing_parm_value in existing_list[uid].items():
116116
if (existing_rule_param not in params_to_ignore and
117-
new_list[id].get(existing_rule_param) != existing_parm_value):
118-
items_to_update.append(new_list[id])
117+
new_list[uid].get(existing_rule_param) != existing_parm_value):
118+
items_to_update.append(new_list[uid])
119119

120120
return items_to_create, items_to_update
121121

plugins/module_utils/proxmox_sdn.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def get_aliases(self, firewall_obj):
113113
return firewall_obj().aliases().get()
114114
except Exception as e:
115115
self.module.fail_json(
116-
msg='Failed to retrieve aliases'
116+
msg=f'Failed to retrieve aliases - {e}'
117117
)
118118

119119
def get_fw_rules(self, rules_obj, pos=None):
@@ -123,13 +123,14 @@ def get_fw_rules(self, rules_obj, pos=None):
123123
:param pos: Rule position if it is None it'll return all rules
124124
:return: Firewall rules as a list of dict
125125
"""
126-
if pos:
127-
try:
128-
return rules_obj(str(pos)).get()
129-
except Exception as e:
130-
self.module.fail_json(
131-
msg=f'Failed to retrieve firewall rules: {e}'
132-
)
126+
if pos is not None:
127+
pos = str(pos)
128+
try:
129+
return rules_obj(pos).get()
130+
except Exception as e:
131+
self.module.fail_json(
132+
msg=f'Failed to retrieve firewall rules: {e}'
133+
)
133134

134135
def get_groups(self):
135136
"""Get firewall security groups

plugins/modules/proxmox_firewall.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@
1414
short_description: Manage firewall rules in Proxmox
1515
version_added: "1.4.0"
1616
description:
17-
- Create/update/delete firewall rules at cluster/group/vnet/node/vm level.
18-
- Create/delete firewall security groups.
17+
- create/update/delete FW rules at cluster/group/vnet/node/vm level
18+
- Create/delete firewall security groups
19+
- Create/delete aliases
1920
author: 'Jana Hoch <[email protected]> (!UNKNOWN)'
2021
attributes:
2122
check_mode:
@@ -427,7 +428,7 @@ def validate_params(self):
427428
msg="When state is present either group_conf should be true or rules/aliases must be present but not both"
428429
)
429430
elif self.params.get('state') == 'absent':
430-
if self.params.get('group_conf') != bool(self.params.get('pos') or self.params.get('aliases')):
431+
if self.params.get('group_conf') != bool((self.params.get('pos') is not None) or self.params.get('aliases')):
431432
return True
432433
else:
433434
self.module.fail_json(
@@ -482,7 +483,7 @@ def run(self):
482483
if aliases:
483484
self.aliases_present(firewall_obj=firewall_obj, level=level, aliases=aliases, update=update)
484485
elif state == "absent":
485-
if self.params.get('pos'):
486+
if self.params.get('pos') is not None:
486487
self.fw_rule_absent(rules_obj=rules_obj, pos=self.params.get('pos'))
487488
if group_conf:
488489
self.group_absent(group_name=group)

plugins/modules/proxmox_firewall_info.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
version_added: "1.4.0"
1616
description:
1717
- Get firewall rules at cluster/group/vnet/node/vm level.
18+
- Get firewall security groups at cluster level.
19+
- Get aliases at cluster/VM level.
1820
author: 'Jana Hoch <[email protected]> (!UNKNOWN)'
1921
options:
2022
level:

tests/unit/plugins/modules/test_proxmox_firewall.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def setUp(self):
123123
self.connect_mock = patch(
124124
"ansible_collections.community.proxmox.plugins.module_utils.proxmox.ProxmoxAnsible._connect",
125125
).start()
126-
self.connect_mock.return_value.cluster.return_value.firewall.return_value.rules.get.return_value = RAW_FIREWALL_RULES
126+
self.connect_mock.return_value.cluster.return_value.firewall.return_value.rules.return_value.get.return_value = RAW_FIREWALL_RULES
127127
self.connect_mock.return_value.cluster.return_value.firewall.return_value.groups.return_value.get.return_value = RAW_GROUPS
128128

129129
def tearDown(self):
@@ -159,7 +159,7 @@ def test_create_fw_rules(self):
159159

160160
def test_delete_fw_rule(self):
161161
with pytest.raises(SystemExit) as exc_info:
162-
with set_module_args(get_module_args_fw_delete(state='absent', pos=1)):
162+
with set_module_args(get_module_args_fw_delete(state='absent', pos=0)):
163163
self.module.main()
164164
result = exc_info.value.args[0]
165165
assert result['changed'] is True

tests/unit/plugins/modules/test_proxmox_firewall_info.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,11 +147,11 @@ def setUp(self):
147147
mock_cluster_fw = self.connect_mock.return_value.cluster.return_value.firewall.return_value
148148
mock_vm100_fw = self.connect_mock.return_value.nodes.return_value.return_value.return_value.firewall.return_value
149149

150-
mock_cluster_fw.rules.get.return_value = RAW_FIREWALL_RULES
150+
mock_cluster_fw.rules.return_value.get.return_value = RAW_FIREWALL_RULES
151151
mock_cluster_fw.groups.return_value.get.return_value = RAW_GROUPS
152152
mock_cluster_fw.aliases.return_value.get.return_value = RAW_ALIASES
153153

154-
mock_vm100_fw.rules.get.return_value = RAW_FIREWALL_RULES
154+
mock_vm100_fw.rules.return_value.get.return_value = RAW_FIREWALL_RULES
155155
mock_vm100_fw.aliases.return_value.get.return_value = RAW_ALIASES
156156

157157
def tearDown(self):

0 commit comments

Comments
 (0)