Skip to content

Commit 26453eb

Browse files
[Enhancement][zos_encode] Interface update to zos_encode (#2228)
* Updated zos_encode * updated test cases * Updated encoding tests * Added encoding dictionary to the docs * Updated changelogs * Fixed docs * Update zos_encode.py
1 parent df3440b commit 26453eb

File tree

3 files changed

+111
-11
lines changed

3 files changed

+111
-11
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
minor_changes:
2+
- zos_encode - Adds new return value ``encoding`` with ``from`` and ``to`` encoding values used in the operation.
3+
(https://github.com/ansible-collections/ibm_zos_core/pull/2228).

plugins/modules/zos_encode.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,25 @@
304304
returned: changed and if backup=yes
305305
type: str
306306
sample: /path/file_name.2020-04-23-08-32-29-bak.tar
307+
encoding:
308+
description:
309+
- Specifies which encodings the destination file or data set was
310+
converted from and to.
311+
type: dict
312+
returned: always
313+
contains:
314+
from:
315+
description:
316+
- The character set of the source I(src).
317+
type: str
318+
sample: IBM-1047
319+
returned: always
320+
to:
321+
description:
322+
- The destination I(dest) character set for the output that was written as.
323+
type: str
324+
sample: ISO8859-1
325+
returned: always
307326
"""
308327
from ansible_collections.ibm.ibm_zos_core.plugins.module_utils.import_handler import (
309328
ZOAUImportError,
@@ -536,10 +555,8 @@ def run_module():
536555
dest_data_set = None
537556
convert_rc = False
538557
changed = False
539-
540-
result = dict(changed=changed, src=src, dest=dest)
541-
if backup:
542-
result["backup_name"] = None
558+
encoding_dict = {"from": from_encoding, "to": to_encoding}
559+
result = dict(changed=changed, src=src, dest=dest, encoding=encoding_dict, backup_name=None)
543560

544561
try:
545562
# Check the src is a USS file/path or an MVS data set
@@ -701,9 +718,7 @@ def run_module():
701718
eu.uss_tag_encoding(new_dest, to_encoding)
702719

703720
changed = True
704-
result = dict(changed=changed, src=new_src, dest=new_dest, backup_name=backup_name)
705-
else:
706-
result = dict(src=new_src, dest=new_dest, changed=changed, backup_name=backup_name)
721+
result.update(dict(src=new_src, dest=new_dest, changed=changed, backup_name=backup_name))
707722
except encode.TaggingError as e:
708723
module.fail_json(
709724
msg=e.msg,

tests/functional/modules/test_zos_encode_func.py

Lines changed: 86 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,10 @@ def test_uss_encoding_conversion_uss_file_to_uss_file(ansible_zos_module):
245245
assert result.get("dest") == uss_dest_file
246246
assert result.get("backup_name") is None
247247
assert result.get("changed") is True
248+
assert result.get("encoding") is not None
249+
assert isinstance(result.get("encoding"), dict)
250+
assert result.get("encoding").get("to") == FROM_ENCODING
251+
assert result.get("encoding").get("from") == TO_ENCODING
248252

249253
tag_results = hosts.all.shell(cmd=f"ls -T {uss_dest_file}")
250254
for result in tag_results.contacted.values():
@@ -274,6 +278,9 @@ def test_uss_encoding_conversion_uss_file_to_uss_path(ansible_zos_module):
274278
assert result.get("dest") == uss_dest_path
275279
assert result.get("backup_name") is None
276280
assert result.get("changed") is True
281+
assert isinstance(result.get("encoding"), dict)
282+
assert result.get("encoding").get("to") == FROM_ENCODING
283+
assert result.get("encoding").get("from") == TO_ENCODING
277284

278285
tag_results = hosts.all.shell(cmd=f"ls -T {uss_dest_path}/{path.basename(uss_file)}")
279286
for result in tag_results.contacted.values():
@@ -306,6 +313,9 @@ def test_uss_encoding_conversion_uss_path_to_uss_path(ansible_zos_module):
306313
assert result.get("dest") == uss_dest_path
307314
assert result.get("backup_name") is not None
308315
assert result.get("changed") is True
316+
assert isinstance(result.get("encoding"), dict)
317+
assert result.get("encoding").get("to") == FROM_ENCODING
318+
assert result.get("encoding").get("from") == TO_ENCODING
309319

310320
tag_results = hosts.all.shell(cmd=f"ls -T {uss_dest_path}")
311321
for result in tag_results.contacted.values():
@@ -338,6 +348,9 @@ def test_uss_encoding_conversion_uss_file_to_mvs_ps(ansible_zos_module):
338348
assert result.get("dest") == mvs_ps
339349
assert result.get("backup_name") is None
340350
assert result.get("changed") is True
351+
assert isinstance(result.get("encoding"), dict)
352+
assert result.get("encoding").get("to") == FROM_ENCODING
353+
assert result.get("encoding").get("from") == TO_ENCODING
341354
finally:
342355
hosts.all.file(path=uss_file, state="absent")
343356
hosts.all.zos_data_set(name=mvs_ps, state="absent")
@@ -365,6 +378,9 @@ def test_uss_encoding_conversion_mvs_ps_to_uss_file(ansible_zos_module):
365378
assert result.get("dest") == uss_dest_file
366379
assert result.get("backup_name") is not None
367380
assert result.get("changed") is True
381+
assert isinstance(result.get("encoding"), dict)
382+
assert result.get("encoding").get("to") == TO_ENCODING
383+
assert result.get("encoding").get("from") == FROM_ENCODING
368384

369385
tag_results = hosts.all.shell(cmd=f"ls -T {uss_dest_file}")
370386
for result in tag_results.contacted.values():
@@ -397,6 +413,9 @@ def test_uss_encoding_conversion_uss_file_to_mvs_pds(ansible_zos_module):
397413
assert result.get("dest") == mvs_ps
398414
assert result.get("backup_name") is None
399415
assert result.get("changed") is True
416+
assert isinstance(result.get("encoding"), dict)
417+
assert result.get("encoding").get("to") == FROM_ENCODING
418+
assert result.get("encoding").get("from") == TO_ENCODING
400419
finally:
401420
hosts.all.file(path=uss_file, state="absent")
402421
hosts.all.zos_data_set(name=mvs_ps, state="absent")
@@ -435,6 +454,9 @@ def test_uss_encoding_conversion_uss_file_to_mvs_pds_member(ansible_zos_module):
435454
assert result.get("dest") == mvs_pds_member
436455
assert result.get("backup_name") is None
437456
assert result.get("changed") is True
457+
assert isinstance(result.get("encoding"), dict)
458+
assert result.get("encoding").get("to") == FROM_ENCODING
459+
assert result.get("encoding").get("from") == TO_ENCODING
438460
finally:
439461
hosts.all.file(path=uss_file, state="absent")
440462
hosts.all.zos_data_set(name=mvs_ps, state="absent")
@@ -471,6 +493,9 @@ def test_uss_encoding_conversion_mvs_pds_member_to_uss_file(ansible_zos_module):
471493
assert result.get("dest") == uss_dest_file
472494
assert result.get("backup_name") is not None
473495
assert result.get("changed") is True
496+
assert isinstance(result.get("encoding"), dict)
497+
assert result.get("encoding").get("to") == TO_ENCODING
498+
assert result.get("encoding").get("from") == FROM_ENCODING
474499

475500
tag_results = hosts.all.shell(cmd=f"ls -T {uss_dest_file}")
476501
for result in tag_results.contacted.values():
@@ -509,6 +534,10 @@ def test_uss_encoding_conversion_uss_path_to_mvs_pds(ansible_zos_module):
509534
assert result.get("dest") == mvs_ps
510535
assert result.get("backup_name") is None
511536
assert result.get("changed") is True
537+
assert isinstance(result.get("encoding"), dict)
538+
assert result.get("encoding").get("to") == FROM_ENCODING
539+
assert result.get("encoding").get("from") == TO_ENCODING
540+
512541
hosts.all.file(path=uss_dest_path, state="directory")
513542
results = hosts.all.zos_encode(
514543
src=mvs_ps,
@@ -524,6 +553,9 @@ def test_uss_encoding_conversion_uss_path_to_mvs_pds(ansible_zos_module):
524553
assert result.get("dest") == uss_dest_path
525554
assert result.get("backup_name") is None
526555
assert result.get("changed") is True
556+
assert isinstance(result.get("encoding"), dict)
557+
assert result.get("encoding").get("to") == FROM_ENCODING
558+
assert result.get("encoding").get("from") == TO_ENCODING
527559

528560
tag_results = hosts.all.shell(cmd=f"ls -T {uss_dest_path}")
529561
for result in tag_results.contacted.values():
@@ -559,6 +591,9 @@ def test_uss_encoding_conversion_mvs_ps_to_mvs_pds_member(ansible_zos_module):
559591
assert result.get("dest") == mvs_pds_member
560592
assert result.get("backup_name") is None
561593
assert result.get("changed") is True
594+
assert isinstance(result.get("encoding"), dict)
595+
assert result.get("encoding").get("to") == TO_ENCODING
596+
assert result.get("encoding").get("from") == FROM_ENCODING
562597
hosts.all.zos_data_set(name=mvs_ps, state="absent")
563598
hosts.all.zos_data_set(name=mvs_ps, state="absent")
564599

@@ -575,10 +610,11 @@ def test_uss_encoding_conversion_uss_file_to_mvs_vsam(ansible_zos_module):
575610
cmd=f"echo {quote(KSDS_CREATE_JCL.format(mvs_vs))} > {temp_jcl_path}/SAMPLE"
576611
)
577612
results = hosts.all.zos_job_submit(
578-
src=f"{temp_jcl_path}/SAMPLE", location="uss", wait_time_s=30
613+
src=f"{temp_jcl_path}/SAMPLE", remote_src=True, wait_time=30
579614
)
580615

581616
for result in results.contacted.values():
617+
print(result)
582618
assert result.get("jobs")[0].get("ret_code").get("msg_code") == "0000"
583619
assert result.get("jobs")[0].get("ret_code").get("code") == 0
584620
assert result.get("changed") is True
@@ -595,6 +631,9 @@ def test_uss_encoding_conversion_uss_file_to_mvs_vsam(ansible_zos_module):
595631
assert result.get("dest") == mvs_vs
596632
assert result.get("backup_name") is None
597633
assert result.get("changed") is True
634+
assert isinstance(result.get("encoding"), dict)
635+
assert result.get("encoding").get("to") == FROM_ENCODING
636+
assert result.get("encoding").get("from") == TO_ENCODING
598637
finally:
599638
hosts.all.file(path=temp_jcl_path, state="absent")
600639
hosts.all.file(path=uss_file, state="absent")
@@ -623,6 +662,9 @@ def test_uss_encoding_conversion_mvs_vsam_to_uss_file(ansible_zos_module):
623662
assert result.get("dest") == uss_dest_file
624663
assert result.get("backup_name") is not None
625664
assert result.get("changed") is True
665+
assert isinstance(result.get("encoding"), dict)
666+
assert result.get("encoding").get("to") == TO_ENCODING
667+
assert result.get("encoding").get("from") == FROM_ENCODING
626668

627669
tag_results = hosts.all.shell(cmd=f"ls -T {uss_dest_file}")
628670
for result in tag_results.contacted.values():
@@ -658,6 +700,10 @@ def test_uss_encoding_conversion_mvs_vsam_to_mvs_ps(ansible_zos_module):
658700
assert result.get("dest") == mvs_ps
659701
assert result.get("backup_name") is None
660702
assert result.get("changed") is True
703+
assert isinstance(result.get("encoding"), dict)
704+
assert result.get("encoding").get("to") == TO_ENCODING
705+
assert result.get("encoding").get("from") == FROM_ENCODING
706+
661707
hosts.all.zos_data_set(name=mvs_vs, state="absent")
662708
hosts.all.zos_data_set(name=mvs_ps, state="absent")
663709

@@ -691,6 +737,10 @@ def test_uss_encoding_conversion_mvs_vsam_to_mvs_pds_member(ansible_zos_module):
691737
assert result.get("dest") == mvs_pds_member
692738
assert result.get("backup_name") is None
693739
assert result.get("changed") is True
740+
assert result.get("encoding") is not None
741+
assert isinstance(result.get("encoding"), dict)
742+
assert result.get("encoding").get("to") == TO_ENCODING
743+
assert result.get("encoding").get("from") == FROM_ENCODING
694744
hosts.all.zos_data_set(name=mvs_vs, state="absent")
695745
hosts.all.zos_data_set(name=mvs_ps, state="absent")
696746

@@ -707,7 +757,7 @@ def test_uss_encoding_conversion_mvs_ps_to_mvs_vsam(ansible_zos_module):
707757
cmd=f"echo {quote(KSDS_CREATE_JCL.format(mvs_vs))} > {temp_jcl_path}/SAMPLE"
708758
)
709759
results = hosts.all.zos_job_submit(
710-
src=f"{temp_jcl_path}/SAMPLE", location="uss", wait_time_s=30
760+
src=f"{temp_jcl_path}/SAMPLE", remote_src=True, wait_time=30
711761
)
712762
for result in results.contacted.values():
713763
assert result.get("jobs") is not None
@@ -728,6 +778,10 @@ def test_uss_encoding_conversion_mvs_ps_to_mvs_vsam(ansible_zos_module):
728778
assert result.get("dest") == mvs_vs
729779
assert result.get("backup_name") is None
730780
assert result.get("changed") is True
781+
assert result.get("encoding") is not None
782+
assert isinstance(result.get("encoding"), dict)
783+
assert result.get("encoding").get("to") == FROM_ENCODING
784+
assert result.get("encoding").get("from") == TO_ENCODING
731785
finally:
732786
hosts.all.file(path=temp_jcl_path, state="absent")
733787
hosts.all.zos_data_set(name=mvs_ps, state="absent")
@@ -755,6 +809,10 @@ def test_uss_encoding_conversion_src_with_special_chars(ansible_zos_module):
755809
assert result.get("backup_name") is None
756810
assert result.get("changed") is True
757811
assert result.get("msg") is None
812+
assert result.get("encoding") is not None
813+
assert isinstance(result.get("encoding"), dict)
814+
assert result.get("encoding").get("to") == TO_ENCODING
815+
assert result.get("encoding").get("from") == FROM_ENCODING
758816

759817
finally:
760818
hosts.all.zos_data_set(name=src_data_set, state="absent")
@@ -813,6 +871,10 @@ def test_pds_backup_with_tmp_hlq_option(ansible_zos_module):
813871
)
814872
for enc_res in encode_res.contacted.values():
815873
assert enc_res.get("backup_name")[:6] == tmphlq
874+
assert enc_res.get("encoding") is not None
875+
assert isinstance(enc_res.get("encoding"), dict)
876+
assert enc_res.get("encoding").get("to") == FROM_ENCODING
877+
assert enc_res.get("encoding").get("from") == TO_ENCODING
816878
contents = hosts.all.shell(cmd="cat \"//'{0}(SAMPLE)'\"".format(enc_res.get("backup_name")))
817879
hosts.all.file(path=temp_jcl_path, state="absent")
818880
hosts.all.zos_data_set(name=mvs_ps, state="absent")
@@ -873,7 +935,7 @@ def test_vsam_backup(ansible_zos_module):
873935
cmd=f"echo {quote(KSDS_CREATE_JCL.format(mvs_vs))} > {temp_jcl_path}/SAMPLE"
874936
)
875937
hosts.all.zos_job_submit(
876-
src=f"{temp_jcl_path}/SAMPLE", location="uss", wait_time_s=30
938+
src=f"{temp_jcl_path}/SAMPLE", remote_src=True, wait_time=30
877939
)
878940
hosts.all.file(path=temp_jcl_path, state="absent")
879941
# submit JCL to populate KSDS
@@ -882,7 +944,7 @@ def test_vsam_backup(ansible_zos_module):
882944
cmd=f"echo {quote(KSDS_REPRO_JCL.format(mvs_vs.upper()))} > {temp_jcl_path}/SAMPLE"
883945
)
884946
hosts.all.zos_job_submit(
885-
src=f"{temp_jcl_path}/SAMPLE", location="uss", wait_time_s=30
947+
src=f"{temp_jcl_path}/SAMPLE", remote_src=True, wait_time=30
886948
)
887949

888950
hosts.all.zos_encode(
@@ -958,6 +1020,10 @@ def test_uss_backup_entire_folder_to_default_backup_location(ansible_zos_module)
9581020
backup_name = None
9591021
for result in results.contacted.values():
9601022
backup_name = result.get("backup_name")
1023+
assert result.get("encoding") is not None
1024+
assert isinstance(result.get("encoding"), dict)
1025+
assert result.get("encoding").get("to") == FROM_ENCODING
1026+
assert result.get("encoding").get("from") == TO_ENCODING
9611027
assert backup_name
9621028
contents = hosts.all.shell(cmd=f"cat {backup_name}file1")
9631029
content1 = ""
@@ -1026,6 +1092,10 @@ def test_uss_backup_entire_folder_to_default_backup_location_compressed(
10261092
backup_name = None
10271093
for result in results.contacted.values():
10281094
backup_name = result.get("backup_name")
1095+
assert result.get("encoding") is not None
1096+
assert isinstance(result.get("encoding"), dict)
1097+
assert result.get("encoding").get("to") == FROM_ENCODING
1098+
assert result.get("encoding").get("from") == TO_ENCODING
10291099

10301100
results = hosts.all.shell(cmd=f"ls -la {backup_name[:-4]}*")
10311101
for result in results.contacted.values():
@@ -1058,6 +1128,10 @@ def test_return_backup_name_on_module_success_and_failure(ansible_zos_module):
10581128
for content in enc_ds.contacted.values():
10591129
assert content.get("backup_name") is not None
10601130
assert content.get("backup_name") == backup_data_set
1131+
assert content.get("encoding") is not None
1132+
assert isinstance(content.get("encoding"), dict)
1133+
assert content.get("encoding").get("to") == TO_ENCODING
1134+
assert content.get("encoding").get("from") == FROM_ENCODING
10611135

10621136
hosts.all.zos_data_set(name=backup_data_set, state="absent")
10631137
enc_ds = hosts.all.zos_encode(
@@ -1074,6 +1148,10 @@ def test_return_backup_name_on_module_success_and_failure(ansible_zos_module):
10741148
assert content.get("msg") is not None
10751149
assert content.get("backup_name") is not None
10761150
assert content.get("backup_name") == backup_data_set
1151+
assert content.get("encoding") is not None
1152+
assert isinstance(content.get("encoding"), dict)
1153+
assert content.get("encoding").get("to") == TO_ENCODING
1154+
assert content.get("encoding").get("from") == INVALID_ENCODING
10771155
finally:
10781156
hosts.all.zos_data_set(name=mvs_ps, state="absent")
10791157
hosts.all.zos_data_set(name=backup_data_set, state="absent")
@@ -1101,6 +1179,10 @@ def test_gdg_encoding_conversion_src_with_invalid_generation(ansible_zos_module,
11011179
assert "not cataloged" in result.get("msg")
11021180
assert result.get("backup_name") is None
11031181
assert result.get("changed") is False
1182+
assert result.get("encoding") is not None
1183+
assert isinstance(result.get("encoding"), dict)
1184+
assert result.get("encoding").get("to") == TO_ENCODING
1185+
assert result.get("encoding").get("from") == FROM_ENCODING
11041186
finally:
11051187
hosts.all.shell(cmd=f"""drm "{ds_name}(0)" """)
11061188
hosts.all.shell(cmd=f"drm {ds_name}")

0 commit comments

Comments
 (0)