Skip to content

Commit 5b1fb90

Browse files
committed
cannot use distutils; use custom version
distutils is deprecated, and ansible-lint 2.14 throws an error about this. There isn't really a suitable version parser replacement that works without additional dependencies across python 2.7 - 3.11. So, write our own version parser.
1 parent 2934dd6 commit 5b1fb90

File tree

4 files changed

+50
-3
lines changed

4 files changed

+50
-3
lines changed

.sanity-ansible-ignore-2.13.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
plugins/modules/firewall_lib.py validate-modules:missing-gplv3-license
2+
plugins/modules/firewall_lib_facts.py validate-modules:missing-gplv3-license
3+
plugins/modules/firewall_lib.py validate-modules:missing-examples
4+
roles/firewall/files/get_files_checksums.sh shebang!skip

.sanity-ansible-ignore-2.14.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
plugins/modules/firewall_lib.py validate-modules:missing-gplv3-license
2+
plugins/modules/firewall_lib_facts.py validate-modules:missing-gplv3-license
3+
plugins/modules/firewall_lib.py validate-modules:missing-examples
4+
roles/firewall/files/get_files_checksums.sh shebang!skip

library/firewall_lib.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,6 @@
210210
default: true
211211
"""
212212

213-
from distutils.version import LooseVersion
214213
from ansible.module_utils.basic import AnsibleModule
215214
import re
216215
import os
@@ -249,6 +248,22 @@
249248
PCI_REGEX = re.compile("[0-9a-fA-F]{4}:[0-9a-fA-F]{4}")
250249

251250

251+
# NOTE: Because of PEP632, we cannot use distutils.
252+
# In addition, because of the wide range of python
253+
# versions we have to support, there isn't a good
254+
# version parser across all of them, that is provided
255+
# with Ansible.
256+
def lsr_parse_version(v_str):
257+
v_ary = v_str.split(".")
258+
v = []
259+
for v_ary_str in v_ary:
260+
try:
261+
v.append(int(v_ary_str))
262+
except ValueError:
263+
v.append(0)
264+
return v
265+
266+
252267
def try_get_connection_of_interface(interface):
253268
try:
254269
return nm_get_connection_of_interface(interface)
@@ -832,7 +847,7 @@ def main():
832847
permanent = True
833848

834849
# Pre-run version checking
835-
if LooseVersion(FW_VERSION) < LooseVersion("0.3.9"):
850+
if lsr_parse_version(FW_VERSION) < lsr_parse_version("0.3.9"):
836851
module.fail_json(
837852
msg="Unsupported firewalld version %s" " requires >= 0.3.9" % FW_VERSION
838853
)
@@ -851,7 +866,7 @@ def main():
851866
fw.start()
852867
else:
853868
# Pre-run version checking
854-
if LooseVersion(FW_VERSION) < LooseVersion("0.2.11"):
869+
if lsr_parse_version(FW_VERSION) < lsr_parse_version("0.2.11"):
855870
module.fail_json(
856871
msg="Unsupported firewalld version %s, requires >= 0.2.11" % FW_VERSION
857872
)

tests/unit/test_firewall_lib.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,3 +717,27 @@ def test_module_parameters(method, state, input, expected):
717717
has_fw_patcher.stop()
718718
fw_ver_patcher.stop()
719719
rich_rule_patcher.stop()
720+
721+
722+
class FirewallVersionTest(unittest.TestCase):
723+
"""class to test lsr_parse_version"""
724+
725+
def test_lsr_parse_version(self):
726+
ver = firewall_lib.lsr_parse_version("")
727+
assert ver == [0]
728+
ver = firewall_lib.lsr_parse_version("a.b")
729+
assert ver == [0, 0]
730+
ver = firewall_lib.lsr_parse_version("1")
731+
assert ver == [1]
732+
ver = firewall_lib.lsr_parse_version("1.2")
733+
assert ver == [1, 2]
734+
ver = firewall_lib.lsr_parse_version("1.2.3")
735+
assert ver == [1, 2, 3]
736+
ver = firewall_lib.lsr_parse_version("1.2.3.4")
737+
assert ver == [1, 2, 3, 4]
738+
ver_b = firewall_lib.lsr_parse_version("0.3")
739+
assert ver_b < ver
740+
ver_b = firewall_lib.lsr_parse_version("1.2.3")
741+
assert ver_b < ver
742+
ver_b = firewall_lib.lsr_parse_version("1.2.4")
743+
assert ver_b > ver

0 commit comments

Comments
 (0)