univention / ansible-modules

Ansible Modules for UCS
GNU General Public License v3.0
11 stars 6 forks source link

Broken version number sanitation in univention.ucs_modules.univention_app #12

Open s3lph opened 1 year ago

s3lph commented 1 year ago

In order to compare version numbers, the univention.ucs_modules.univention_app performs some kind of sanitation to get the human readable version numbers of Univention Apps into something machine readable:

https://github.com/univention/ansible-modules/blob/f7cd078c14f0e515324d889c7efa9dfe760d8f71/plugins/modules/univention_app.py#L206-L208

However, this fails for the current release of UCS@school:

# univention-app list
...
ucsschool
  Name: UCS@school
  Latest version: 5.0 v3
  Installations:

This version number gets sanitized to 5.0..3, which then gets split into ['5', '0', '', '3'] and each item cast to an int. This fails at the empty string:

Traceback (most recent call last):
  File "/root/.ansible/tmp/ansible-tmp-1689780655.570871-2321566-4997488254274/AnsiballZ_univention_app.py", line 107, in <module>
    _ansiballz_main()
  File "/root/.ansible/tmp/ansible-tmp-1689780655.570871-2321566-4997488254274/AnsiballZ_univention_app.py", line 99, in _ansiballz_main
    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
  File "/root/.ansible/tmp/ansible-tmp-1689780655.570871-2321566-4997488254274/AnsiballZ_univention_app.py", line 48, in invoke_module
    run_name='__main__', alter_sys=True)
  File "/usr/lib/python3.7/runpy.py", line 205, in run_module
    return _run_module_code(code, init_globals, run_name, mod_spec)
  File "/usr/lib/python3.7/runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "/usr/lib/python3.7/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/tmp/ansible_univention.ucs_modules.univention_app_payload_lyn9mkzw/ansible_univention.ucs_modules.univention_app_payload.zip/ansible_collections/univention/ucs_modules/plugins/modules/univention_app.py", line 568, in <module>
  File "/tmp/ansible_univention.ucs_modules.univention_app_payload_lyn9mkzw/ansible_univention.ucs_modules.univention_app_payload.zip/ansible_collections/univention/ucs_modules/plugins/modules/univention_app.py", line 420, in main
  File "/tmp/ansible_univention.ucs_modules.univention_app_payload_lyn9mkzw/ansible_univention.ucs_modules.univention_app_payload.zip/ansible_collections/univention/ucs_modules/plugins/modules/univention_app.py", line 220, in check_target_app_version
  File "/tmp/ansible_univention.ucs_modules.univention_app_payload_lyn9mkzw/ansible_univention.ucs_modules.univention_app_payload.zip/ansible_collections/univention/ucs_modules/plugins/modules/univention_app.py", line 208, in get_and_sort_versions
  File "/tmp/ansible_univention.ucs_modules.univention_app_payload_lyn9mkzw/ansible_univention.ucs_modules.univention_app_payload.zip/ansible_collections/univention/ucs_modules/plugins/modules/univention_app.py", line 208, in <lambda>
ValueError: invalid literal for int() with base 10: ''
tbreiden commented 4 months ago

Version v3.1.3 fixes this issue. https://github.com/univention/ansible-modules/releases/tag/v3.1.3