ansible-collections / ibm_zos_core

Red Hat Ansible Certified Content for IBM Z
76 stars 44 forks source link

[Enabler] [zos_find] GDG/GDS and special character support #1374

Closed ddimatos closed 1 month ago

ddimatos commented 4 months ago

Enabler description

MVSDataSet(
            name = params.get("name"),
            record_format = params.get("record_format", None),
            volumes = params.get("volumes", None),
            data_set_type = params.get("type", None),
            block_size = params.get("block_size", None),
            record_length = params.get("record_length", None),
            space_primary = params.get("space_primary", None),
            space_secondary = params.get("space_secondary", None),
            space_type = params.get("space_type", None),
            directory_blocks = params.get("directory_blocks", None),
            key_length = params.get("key_length", None),
            key_offset = params.get("key_offset", None),
            sms_storage_class = params.get("sms_storage_class", None),
            sms_data_class = params.get("sms_data_class", None),
            sms_management_class = params.get("sms_management_class", None),
        )

GDG/GDS Support

Option patterns and pds_patterns accept a list of string either as a pattern or a list of data set names, so user can provide a list of data set names that contain some GDS relative data set names, in that case, the module needs to resolve the relative name into absolute name before packing to correctly archive the given data set name.

- name: Exclude data sets that have a low level qualifier 'TEST'
  zos_find:
    patterns: ZOAUSER.GDG(-1)
    contains: "hello"

Internally, in the case of a data set name being a GDS relative name we should resolve those names into absolute GDS names when the generation number is 0 or negative.

Following functions will be implemented in #1386

# Sample of soon to be implemented gdg function
if DataSet.is_gds_relative_name(name):
    src = DataSet.resolve_gds_absolute_name(src)

Symbols support

Changes done to the BetterArgParser should be adopted in the module to not break and use the correct escaped name in case of the data set name having a symbol in it.

Add symbol support to the dest_data_set name option.

data set name with symbol

ZOAUSER.TE$T

That way, the modules will have to retrieve the new escaped named and the original user provided name inside the dictionary like:

name = DataSet.escape_data_set_name(name)

Escaping special characters could be done via a new function inside the BetterArgParser. These are some of the special characters:

For this task completion we need:

Ansible module

zos_find

richp405 commented 3 months ago

This is a regression for gdg, which is working. I will add special character tests and re-run.

Image