Hi

I would like to add experimental support for z/OS, because python was 
ported to z/OS 
https://www.rocketsoftware.com/product-categories/mainframe/python-for-zos

The main obstacle of adding z/OS support into ansible is EBCDIC character 
set.
I can use raw module out of the box but when using other ansible modules I 
hit encoding issue.

Ansible modules are transferred via sftp in binary mode. This results in 
situation that transferred python modules on mainframe have a wrong 
encoding.
I found a workaround scp_if_ssh = True option in ansible.cfg to enforce scp 
file transfer that converts file content from Ascii to EBCDIC during 
transfer to target host however this has a caveat when using copy module to 
transfer a file from my workstation to mainframe I have to specify checksum 
of content in EBCDIC otherwise transfer fails with checksum mismatch.

I was looking into source-code 
https://github.com/ansible/ansible/blob/baf59ccaac267a7eac5dbbea5e439229e686b012/lib/ansible/plugins/action/__init__.py#L787
 self._transfer_data(remote_module_path, module_data) is responsible to 
transfer data where module_style='new'
When I replaced it with 

               tmp = self._connection._play_context.ssh_transfer_method

               self._play_context.ssh_transfer_method = "scp"

               display.vvv("Original transfer method %s enforced transfer 
method %s to transfer module file %s" % (tmp, 
self._play_context.ssh_transfer_method, remote_module_path))

               self._transfer_data(remote_module_path, module_data)

               self._play_context.ssh_transfer_method = tmp

               display.vvv("Original transfer method %s restored" % tmp)

to enforce scp mode only for python modules while normal files are copied 
in binary mode, however this is an ugly hack.

I'm looking for a way how to make it properly:
1) do some magic autodetection of z/OS and based on that enforce scp 
transfer mode for ansible modules
or
2) "tag" hosts in inventory that require scp mode to transfer of python 
modules. eg

  hosts:
    jumper:      scp_if_ssh_for_ansible_modules = True             <-- to 
enforce scp mode
      ansible_port: 5555
      ansible_host: 192.0.2.50


I would say the 2nd option is easier to do.
Would it be acceptable and in line with ansible architecture?
I plan to submit PR then.

Regards
Vitek

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-devel+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to