Skip to content

Commit e9f0865

Browse files
andrewhughes101ledina
authored andcommitted
Add zoau compatibility util
1 parent 1c54a20 commit e9f0865

14 files changed

+119
-23
lines changed

plugins/module_utils/_data_set.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
from __future__ import (absolute_import, division, print_function)
99

10+
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils._zoau_version_checker import _check_zoau_version
11+
1012

1113
__metaclass__ = type
1214

@@ -72,6 +74,10 @@ def __init__(self, primary, secondary):
7274
)
7375
self.process_volume_arg()
7476
self.validate_parameters()
77+
try:
78+
_check_zoau_version()
79+
except ImportError as e:
80+
self._fail(e.msg)
7581

7682
def get_result(self): # type: () -> dict
7783
return {
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# -*- coding: utf-8 -*-
2+
3+
# (c) Copyright IBM Corp. 2025
4+
# Apache License, Version 2.0 (see https://opensource.org/licenses/Apache-2.0)
5+
6+
import traceback
7+
from ansible_collections.ibm.ibm_zos_core.plugins.module_utils.import_handler import ZOAUImportError
8+
9+
try:
10+
from zoautil_py import ZOAU_API_VERSION
11+
except Exception:
12+
# Use ibm_zos_core's approach to handling zoautil_py imports so sanity tests pass
13+
ZOAU_API_VERSION = ZOAUImportError(traceback.format_exc())
14+
15+
16+
CURRENT_MINIMUM_LEVEL = "1.3.0.0"
17+
18+
IMPORT_ERROR_MESSAGE = f"Incompatible ZOAU API version found. Minimum supported version is v{CURRENT_MINIMUM_LEVEL}."
19+
20+
21+
def _check_zoau_version():
22+
if isinstance(ZOAU_API_VERSION, str):
23+
zoau_version = list(map(int, ZOAU_API_VERSION.split('.')))
24+
min_version = list(map(int, CURRENT_MINIMUM_LEVEL.split('.')))
25+
if not _zoau_version_greater_than_min(zoau_version, min_version):
26+
raise ImportError(f"{IMPORT_ERROR_MESSAGE} Version found is {ZOAU_API_VERSION}")
27+
else:
28+
raise ImportError(IMPORT_ERROR_MESSAGE)
29+
30+
31+
def _zoau_version_greater_than_min(zoau_version, min_version): # type: (list[int],list[int]) -> bool
32+
for i in range(4):
33+
if zoau_version[i] > min_version[i]:
34+
return True
35+
elif min_version[i] > zoau_version[i]:
36+
return False
37+
38+
# Version is equal to minimum
39+
return True

plugins/modules/stop_region.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,10 +248,8 @@
248248
from ansible.module_utils.basic import AnsibleModule
249249

250250
from ansible_collections.ibm.ibm_zos_core.plugins.module_utils.job import job_status
251-
252-
from ansible_collections.ibm.ibm_zos_core.plugins.module_utils.import_handler import (
253-
ZOAUImportError
254-
)
251+
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils._zoau_version_checker import _check_zoau_version
252+
from ansible_collections.ibm.ibm_zos_core.plugins.module_utils.import_handler import ZOAUImportError
255253

256254
try:
257255
from zoautil_py.exceptions import JobFetchException
@@ -284,6 +282,10 @@ def __init__(self):
284282
self.msg = ""
285283

286284
def main(self):
285+
try:
286+
_check_zoau_version()
287+
except ImportError as e:
288+
self._module.fail_json(e.msg)
287289
# At this point, this module only gets executed with JOB_ID
288290
# This is as a wrapper to jls via ibm_zos_core job to clean-up the output
289291
# if there is no job found with that ID (ZOAU throws an exception)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# -*- coding: utf-8 -*-
2+
3+
# (c) Copyright IBM Corp. 2025
4+
# Apache License, Version 2.0 (see https://opensource.org/licenses/Apache-2.0)
5+
6+
7+
import pytest
8+
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _zoau_version_checker
9+
10+
11+
def test_check_zoau_version_higher_than_min():
12+
_zoau_version_checker.ZOAU_API_VERSION = "1.3.0.1"
13+
_zoau_version_checker._check_zoau_version()
14+
15+
16+
def test_check_zoau_version_higher_equal_to_min():
17+
_zoau_version_checker.ZOAU_API_VERSION = "1.3.0.0"
18+
_zoau_version_checker._check_zoau_version()
19+
20+
21+
def test_check_zoau_version_lower_than_min():
22+
_zoau_version_checker.ZOAU_API_VERSION = "1.2.9.9"
23+
with pytest.raises(ImportError) as err:
24+
_zoau_version_checker._check_zoau_version()
25+
assert _zoau_version_checker.IMPORT_ERROR_MESSAGE in err.value.msg

tests/unit/modules/test_aux_temp_storage.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# (c) Copyright IBM Corp. 2023,2024
44
# Apache License, Version 2.0 (see https://opensource.org/licenses/Apache-2.0)
55
from __future__ import absolute_import, division, print_function
6-
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _data_set_utils as data_set_utils, _icetool as icetool
6+
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _data_set, _data_set_utils as data_set_utils, _icetool as icetool
77
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils._response import _execution
88
from ansible_collections.ibm.ibm_zos_cics.tests.unit.helpers.data_set_helper import (
99
PYTHON_LANGUAGE_FEATURES_MESSAGE,
@@ -46,6 +46,8 @@ def initialise_module(**kwargs):
4646
initial_args = default_arg_parms
4747
initial_args.update(kwargs)
4848
set_module_args(initial_args)
49+
# Mock the ZOAU API check
50+
_data_set._check_zoau_version = MagicMock(return_value=None)
4951
temp_module = aux_temp_storage.AnsibleAuxiliaryTempModule()
5052
temp_module._module.fail_json = MagicMock(return_value=None)
5153
temp_module._module.exit_json = MagicMock(return_value=None)

tests/unit/modules/test_aux_trace.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# (c) Copyright IBM Corp. 2024
44
# Apache License, Version 2.0 (see https://opensource.org/licenses/Apache-2.0)
55
from __future__ import absolute_import, division, print_function
6-
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _data_set_utils as data_set_utils
6+
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _data_set, _data_set_utils as data_set_utils
77
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils._response import _execution
88
from ansible_collections.ibm.ibm_zos_cics.tests.unit.helpers.data_set_helper import (
99
PYTHON_LANGUAGE_FEATURES_MESSAGE,
@@ -53,6 +53,8 @@ def initialise_module(**kwargs):
5353
initial_args = default_arg_parms
5454
initial_args.update(kwargs)
5555
set_module_args(initial_args)
56+
# Mock the ZOAU API check
57+
_data_set._check_zoau_version = MagicMock(return_value=None)
5658
trace_module = aux_trace.AnsibleAuxiliaryTraceModule()
5759
trace_module._module.fail_json = MagicMock(return_value=None)
5860
trace_module._module.exit_json = MagicMock(return_value=None)

tests/unit/modules/test_csd.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# (c) Copyright IBM Corp. 2023,2024
44
# Apache License, Version 2.0 (see https://opensource.org/licenses/Apache-2.0)
55
from __future__ import absolute_import, division, print_function
6-
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _data_set_utils as data_set_utils
6+
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _data_set, _data_set_utils as data_set_utils
77
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _csd as csd_utils
88
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _icetool as icetool
99
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils._response import _execution
@@ -65,6 +65,8 @@ def initialise_module(**kwargs):
6565
initial_args = default_arg_parms
6666
initial_args.update(kwargs)
6767
set_module_args(initial_args)
68+
# Mock the ZOAU API check
69+
_data_set._check_zoau_version = MagicMock(return_value=None)
6870
csd_module = csd.AnsibleCSDModule()
6971
# Mock Ansible module fail and exits, this prevents sys.exit being called but retains an accurate results
7072
csd_module._module.fail_json = MagicMock(return_value=None)

tests/unit/modules/test_global_catalog.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# (c) Copyright IBM Corp. 2023,2024
44
# Apache License, Version 2.0 (see https://opensource.org/licenses/Apache-2.0)
55
from __future__ import absolute_import, division, print_function
6-
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _data_set_utils as data_set_utils
6+
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _data_set, _data_set_utils as data_set_utils
77
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _global_catalog as global_catalog_utils
88
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils._response import _execution
99
from ansible_collections.ibm.ibm_zos_cics.tests.unit.helpers.data_set_helper import (
@@ -61,6 +61,8 @@ def initialise_module(**kwargs):
6161
initial_args = default_arg_parms
6262
initial_args.update(kwargs)
6363
set_module_args(initial_args)
64+
# Mock the ZOAU API check
65+
_data_set._check_zoau_version = MagicMock(return_value=None)
6466
gcd_module = global_catalog.AnsibleGlobalCatalogModule()
6567
# Mock Ansible module fail and exits, this prevents sys.exit being called but retains an accurate results
6668
gcd_module._module.fail_json = MagicMock(return_value=None)

tests/unit/modules/test_local_catalog.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# (c) Copyright IBM Corp. 2023,2024
44
# Apache License, Version 2.0 (see https://opensource.org/licenses/Apache-2.0)
55
from __future__ import absolute_import, division, print_function
6-
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _data_set_utils as data_set_utils
6+
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _data_set, _data_set_utils as data_set_utils
77
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _local_catalog as local_catalog_utils
88
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _icetool as icetool
99
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils._response import _execution
@@ -58,6 +58,8 @@ def initialise_module(**kwargs):
5858
initial_args = default_arg_parms
5959
initial_args.update(kwargs)
6060
set_module_args(initial_args)
61+
# Mock the ZOAU API check
62+
_data_set._check_zoau_version = MagicMock(return_value=None)
6163
lcd_module = local_catalog.AnsibleLocalCatalogModule()
6264
# Mock Ansible module fail and exits, this prevents sys.exit being called but retains an accurate results
6365
lcd_module._module.fail_json = MagicMock(return_value=None)

tests/unit/modules/test_local_request_queue.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# (c) Copyright IBM Corp. 2023,2024
44
# Apache License, Version 2.0 (see https://opensource.org/licenses/Apache-2.0)
55
from __future__ import absolute_import, division, print_function
6-
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _data_set_utils as data_set_utils, _icetool as icetool
6+
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils import _data_set, _data_set_utils as data_set_utils, _icetool as icetool
77
from ansible_collections.ibm.ibm_zos_cics.plugins.module_utils._response import _execution
88
from ansible_collections.ibm.ibm_zos_cics.tests.unit.helpers.data_set_helper import (
99
PYTHON_LANGUAGE_FEATURES_MESSAGE,
@@ -51,6 +51,8 @@ def initialise_module(**kwargs):
5151
initial_args = default_arg_parms
5252
initial_args.update(kwargs)
5353
set_module_args(initial_args)
54+
# Mock the ZOAU API check
55+
_data_set._check_zoau_version = MagicMock(return_value=None)
5456
lrq_module = local_request_queue.AnsibleLocalRequestQueueModule()
5557
lrq_module._module.fail_json = MagicMock(return_value=None)
5658
lrq_module._module.exit_json = MagicMock(return_value=None)

0 commit comments

Comments
 (0)