Source code for univention.udm.modules.computers_all
# SPDX-FileCopyrightText: 2018-2025 Univention GmbH
# SPDX-License-Identifier: AGPL-3.0-only
r"""Module and object for all `computers/\*` UDM modules."""
from ..encoders import (
CnameListPropertyEncoder, DnsEntryZoneAliasListPropertyEncoder, DnsEntryZoneForwardListMultiplePropertyEncoder,
DnsEntryZoneReverseListMultiplePropertyEncoder, StringIntBooleanPropertyEncoder, StringIntPropertyEncoder,
dn_list_property_encoder_for, dn_property_encoder_for,
)
from .generic import GenericModule, GenericObject, GenericObjectProperties
[docs]
class ComputersAllObjectProperties(GenericObjectProperties):
r"""`computers/\*` UDM properties."""
_encoders = {
'dnsAlias': CnameListPropertyEncoder, # What is this? Isn't this data in dnsEntryZoneAlias already?
'dnsEntryZoneAlias': DnsEntryZoneAliasListPropertyEncoder,
'dnsEntryZoneForward': DnsEntryZoneForwardListMultiplePropertyEncoder,
'dnsEntryZoneReverse': DnsEntryZoneReverseListMultiplePropertyEncoder,
'groups': dn_list_property_encoder_for('groups/group'),
'nagiosServices': dn_list_property_encoder_for('nagios/service'),
'network': dn_property_encoder_for('networks/network'),
'primaryGroup': dn_property_encoder_for('groups/group'),
'reinstall': StringIntBooleanPropertyEncoder,
'sambaRID': StringIntPropertyEncoder,
}
[docs]
class ComputersAllObject(GenericObject):
r"""Better representation of `computers/\*` properties."""
udm_prop_class = ComputersAllObjectProperties
[docs]
class ComputersAllModule(GenericModule):
"""ComputersAllObject factory"""
_udm_object_class = ComputersAllObject
class Meta:
supported_api_versions = [1, 2, 3]
default_positions_property = 'computers'
suitable_for = ['computers/*']
[docs]
class ComputersDCModule(ComputersAllModule):
"""ComputersAllObject factory with an adjusted default position"""
class Meta:
supported_api_versions = [1, 2, 3]
default_positions_property = 'domaincontroller'
suitable_for = ['computers/domaincontroller_master', 'computers/domaincontroller_backup', 'computers/domaincontroller_slave']
[docs]
class ComputersMemberModule(ComputersAllModule):
"""ComputersAllObject factory with an adjusted default position"""
def _get_default_object_positions(self) -> list[str]:
ret = super()._get_default_object_positions()
if f'cn=computers,{self.connection.base}' in ret and \
f'cn=memberserver,cn=computers,{self.connection.base}' in ret and \
f'cn=dc,cn=computers,{self.connection.base}' in ret and \
self.connection.base in ret:
ret.remove(f'cn=memberserver,cn=computers,{self.connection.base}')
ret.insert(0, f'cn=memberserver,cn=computers,{self.connection.base}')
return ret
class Meta:
supported_api_versions = [1, 2, 3]
default_positions_property = 'computers'
suitable_for = ['computers/memberserver']