Bug 46099 - AttributeError: 'module' object has no attribute 'policies'
AttributeError: 'module' object has no attribute 'policies'
Status: RESOLVED WORKSFORME
Product: UCS
Classification: Unclassified
Component: UDM (Generic)
UCS 4.4
Other Linux
: P5 normal (vote)
: ---
Assigned To: UMC maintainers
UDM maintainers
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2018-01-20 12:55 CET by Philipp Hahn
Modified: 2021-09-16 00:47 CEST (History)
3 users (show)

See Also:
What kind of report is it?: Bug Report
What type of bug is this?: 5: Major Usability: Impairs usability in key scenarios
Who will be affected by this bug?: 1: Will affect a very few installed domains
How will those affected feel about the bug?: 5: Blocking further progress on the daily work
User Pain: 0.143
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Philipp Hahn univentionstaff 2018-01-20 12:55:37 CET
ladda update from UCS-3.2-8:amd64 to currently 4.1-5 (on to 4.2-3):

Starting univention-upgrade. Current UCS version is 4.1-5 errata494

Checking for local repository:                          none
Checking for package updates:                           none
Checking for app updates:                               Traceback in univention-upgrade:
Traceback (most recent call last):
  File "/usr/sbin/univention-upgrade", line 434, in do_update
    update_available = performUpdate(options, checkForUpdates=options.check, silent=False)
  File "/usr/sbin/univention-upgrade", line 138, in performUpdate
    if func(options, checkForUpdates, silent):
  File "/usr/sbin/univention-upgrade", line 240, in do_app_updates
    from univention.appcenter.actions import get_action, Abort
  File "/usr/lib/pymodules/python2.7/univention/appcenter/__init__.py", line 35, in <module>
    from univention.appcenter.actions import get_action, all_actions
  File "/usr/lib/pymodules/python2.7/univention/appcenter/actions/__init__.py", line 276, in <module>
    __import__('univention.appcenter.actions.%s' % pymodule_name)
  File "/usr/lib/pymodules/python2.7/univention/appcenter/actions/docker_install.py", line 39, in <module>
    from univention.appcenter.actions.install import Install
  File "/usr/lib/pymodules/python2.7/univention/appcenter/actions/install.py", line 37, in <module>
    from univention.appcenter.actions.install_base import InstallRemoveUpgrade
  File "/usr/lib/pymodules/python2.7/univention/appcenter/actions/install_base.py", line 45, in <module>
    from univention.appcenter.actions.register import Register
  File "/usr/lib/pymodules/python2.7/univention/appcenter/actions/register.py", line 46, in <module>
    from univention.appcenter.udm import create_object_if_not_exists, get_app_ldap_object, remove_object_if_exists, create_recursive_container
  File "/usr/lib/pymodules/python2.7/univention/appcenter/udm.py", line 49, in <module>
    udm_modules.update()
  File "/usr/lib/pymodules/python2.7/univention/admin/modules.py", line 94, in update
    os.path.walk(dir, _walk, p)
  File "/usr/lib/python2.7/posixpath.py", line 246, in walk
    walk(name, func, arg)
  File "/usr/lib/python2.7/posixpath.py", line 238, in walk
    func(arg, top, names)
  File "/usr/lib/pymodules/python2.7/univention/admin/modules.py", line 79, in _walk
    m = __import__(mod, globals(), locals(), name)
  File "/usr/lib/pymodules/python2.7/univention/admin/handlers/policies/policy.py", line 53, in <module>
    for pol in univention.admin.handlers.policies.policies:
AttributeError: 'module' object has no attribute 'policies'
Comment 1 Florian Best univentionstaff 2018-01-20 13:05:39 CET
Problem:
/usr/lib/pymodules/python2.7/univention/admin/handlers/policies/__init__.py is an empty file instead of a symlink to the exiting file.

Fix:
rm /usr/lib/pymodules/python2.7/univention/admin/handlers/policies/__init__.py
ln -s /usr/share/pyshared/univention/admin/handlers/policies/__init__.py /usr/lib/pymodules/python2.7/univention/admin/handlers/policies/__init__.py
Comment 2 Philipp Hahn univentionstaff 2018-01-20 13:06:54 CET
root@dimma:/usr/lib/pymodules/python2.7/univention/admin/handlers# find -name __init__.py -type f
./policies/__init__.py
./settings/__init__.py
./container/__init__.py
Comment 3 Philipp Hahn univentionstaff 2018-01-20 17:02:47 CET
cd /usr/lib/pymodules/python2.7 && find univention/admin/handlers -type f -name __init__.py -exec ln -snf /usr/share/pyshared/{} {} \;

after EACH patchlevel updater;
Something is seriously broken on dimma and ladda.
Comment 4 Philipp Hahn univentionstaff 2018-01-20 17:27:41 CET
Running the following command breaks it each time:
  update-python-modules -v /usr/share/python-support/python-univention-directory-manager.public
...
remove /usr/lib/pymodules/python2.7/univention/admin/handlers/policies/__init__.py
remove /usr/lib/pymodules/python2.7/univention/admin/handlers/policies/__init__.pyc
remove /usr/lib/pymodules/python2.7/univention/admin/handlers/container/__init__.py
remove /usr/lib/pymodules/python2.7/univention/admin/handlers/container/__init__.pyc
Generation of /usr/lib/pymodules/python2.7/.path...
create namespace /usr/lib/pymodules/python2.7/univention/admin/handlers/container/__init__.py
create namespace /usr/lib/pymodules/python2.7/univention/admin/handlers/policies/__init__.py
...

  cd /usr/lib/pymodules/python2.7 && find univention/admin/handlers -type f -name __init__.py
univention/admin/handlers/policies/__init__.py
univention/admin/handlers/container/__init__.py
Comment 5 Philipp Hahn univentionstaff 2018-01-20 18:19:05 CET
# grep -h __init__.py /usr/share/python-support/*.public|sort|uniq -d/usr/share/pyshared/univention/admin/handlers/appcenter/__init__.py
/usr/share/pyshared/univention/admin/handlers/container/__init__.py
/usr/share/pyshared/univention/admin/handlers/oxmail/__init__.py
/usr/share/pyshared/univention/admin/handlers/policies/__init__.py
/usr/share/pyshared/univention/admin/handlers/settings/__init__.py

Coincidence?

# grep -h __init__.py /usr/share/python-support/*.public|sort|uniq -d|grep -Ff - /usr/share/python-support/*.public|sed 's,/usr/share/,,g'
python-support/python-univention-directory-manager.public:pyshared/univention/admin/handlers/container/__init__.py
python-support/python-univention-directory-manager.public:pyshared/univention/admin/handlers/policies/__init__.py
python-support/python-univention-directory-manager.public:pyshared/univention/admin/handlers/settings/__init__.py
python-support/univention-management-console-module-appcenter.public:pyshared/univention/admin/handlers/appcenter/__init__.py
python-support/univentionUDMModule_appcenter_app.public:pyshared/univention/admin/handlers/appcenter/__init__.py
python-support/univentionUDMModule_container_msgpo.public:pyshared/univention/admin/handlers/container/__init__.py
python-support/univentionUDMModule_oxmail_oxcontext.public:pyshared/univention/admin/handlers/oxmail/__init__.py
python-support/univentionUDMModule_oxmail_oxdomain.public:pyshared/univention/admin/handlers/oxmail/__init__.py
python-support/univentionUDMModule_oxmail_oxfetchmailmulti.public:pyshared/univention/admin/handlers/oxmail/__init__.py
python-support/univentionUDMModule_oxmail_oxfetchmailsingle.public:pyshared/univention/admin/handlers/oxmail/__init__.py
python-support/univentionUDMModule_oxmail_oxfolder.public:pyshared/univention/admin/handlers/oxmail/__init__.py
python-support/univentionUDMModule_oxmail_oxlists.public:pyshared/univention/admin/handlers/oxmail/__init__.py
python-support/univentionUDMModule_oxmail_oxmail.public:pyshared/univention/admin/handlers/oxmail/__init__.py
python-support/univentionUDMModule_policies_mailquota.public:pyshared/univention/admin/handlers/policies/__init__.py
python-support/univentionUDMModule_settings_msprintconnectionpolicy.public:pyshared/univention/admin/handlers/settings/__init__.py
python-support/univentionUDMModule_settings_mswmifilter.public:pyshared/univention/admin/handlers/settings/__init__.py
Comment 6 Timo Denissen univentionstaff 2018-02-01 12:05:31 CET
(In reply to Philipp Hahn from comment #3)
> Something is seriously broken on dimma and ladda.
omar as well, as it seems.
Comment 7 Timo Denissen univentionstaff 2018-03-20 08:17:15 CET
Occured again on omar two days ago (just noticed it today).
Comment 8 Timo Denissen univentionstaff 2018-04-03 09:59:13 CEST
Occured again on omar.
Comment 9 Timo Denissen univentionstaff 2018-04-07 12:15:39 CEST
And again on omar.
Comment 10 Philipp Hahn univentionstaff 2018-04-21 12:29:26 CEST
# grep -l pyversions=2.6 /usr/share/python-support/univentionUDM*.public
/usr/share/python-support/univentionUDMHook_univention-openvpn.public
/usr/share/python-support/univentionUDMModule_container_msgpo.public
/usr/share/python-support/univentionUDMModule_policies_mailquota.public
/usr/share/python-support/univentionUDMModule_settings_msprintconnectionpolicy.public
/usr/share/python-support/univentionUDMModule_settings_mswmifilter.public
/usr/share/python-support/univentionUDMSyntax_univention-openvpn-schema.public

/usr/sbin/update-python-modules iterates over all files in /usr/lib/pymodules/python2.7/ and looks for their corresponding source packages.
The 3 __init__.py are contained in multiple packages and their *.public files list them as Python2.6 *only*, the they get removed from 2.7!

# grep -l pyversions=2.6 /usr/share/python-support/univentionUDM*.public | xargs grep __init__
/usr/share/python-support/univentionUDMModule_container_msgpo.public:                 /usr/share/pyshared/univention/admin/handlers/container/__init__.py
/usr/share/python-support/univentionUDMModule_policies_mailquota.public:              /usr/share/pyshared/univention/admin/handlers/policies/__init__.py
/usr/share/python-support/univentionUDMModule_settings_msprintconnectionpolicy.public:/usr/share/pyshared/univention/admin/handlers/settings/__init__.py
/usr/share/python-support/univentionUDMModule_settings_mswmifilter.public:            /usr/share/pyshared/univention/admin/handlers/settings/__init__.py

# udm settings/udm_module list | sed -ne 's/^DN: //p'
cn=policies/mailquota,cn=udm_module,cn=univention,dc=knut,dc=univention,dc=de
cn=settings/msprintconnectionpolicy,cn=udm_module,cn=univention,dc=knut,dc=univention,dc=de
cn=settings/mswmifilter,cn=udm_module,cn=univention,dc=knut,dc=univention,dc=de

The *.public files are created by management/univention-directory-manager-modules/listener/udm_extension.py, which uses the "default_python_version" (from `/usr/bin/pyversions`) of the system *at* *the* *time* *the* *extension* *is* *registered* - it never gets updates later on when it changes.
dimma, ladda, omar where all python2.6 back then, so only 2.6 is listed.
Comment 11 Philipp Hahn univentionstaff 2018-04-21 15:54:00 CEST
After deleting those duplicate __init__.py entries from the /usr/share/python-support/*.public files generated by the broken udm_modules extension mechanism I was finally able to update dimma/omar/ladda to UCS-4.3-0 without Python getting broken again.
Comment 12 Stefan Gohmann univentionstaff 2019-01-03 07:23:24 CET
This issue has been filled against UCS 4.1. The maintenance with bug and security fixes for UCS 4.1 has ended on 5st of April 2018.

Customers still on UCS 4.1 are encouraged to update to UCS 4.3. Please contact
your partner or Univention for any questions.

If this issue still occurs in newer UCS versions, please use "Clone this bug" or simply reopen the issue. In this case please provide detailed information on how this issue is affecting you.
Comment 13 Florian Best univentionstaff 2021-09-16 00:47:25 CEST
Since we migrated to dh-python instead of python-support this should not occur anymore.