From 17eda9f1cd06c4a5858d4f02bb271217ae212fb2 Mon Sep 17 00:00:00 2001 From: Frank Brehm Date: Fri, 13 Nov 2020 10:45:42 +0100 Subject: [PATCH] Adding and evaluating etc/xlations.yaml --- etc/xlations.yaml | 5 +++++ lib/ldap_migration/config.py | 29 ++++++++++++++++++++++++++++- requirements.txt | 1 + 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 etc/xlations.yaml diff --git a/etc/xlations.yaml b/etc/xlations.yaml new file mode 100644 index 0000000..2c1c565 --- /dev/null +++ b/etc/xlations.yaml @@ -0,0 +1,5 @@ +--- +dn: + 'uid=uhu,ou=People,ou=Pixelpark,o=isp': + uid: 'banane' + dn: 'uid=banane,ou=People,ou=Pixelpark,o=isp' diff --git a/lib/ldap_migration/config.py b/lib/ldap_migration/config.py index 232d724..a00fd44 100644 --- a/lib/ldap_migration/config.py +++ b/lib/ldap_migration/config.py @@ -14,13 +14,14 @@ import re from pathlib import Path # Third party modules +import yaml # Own modules from fb_tools.common import to_bool from fb_tools.config import ConfigError, BaseConfiguration -__version__ = '0.1.1' +__version__ = '0.2.1' LOG = logging.getLogger(__name__) @@ -53,6 +54,7 @@ class LDAPMigrationConfiguration(BaseConfiguration): default_suffix = 'o=isp' default_timeout = 20 max_tcp_port = (2**16 - 1) + default_xlations_definitions_base = 'xlations.yaml' re_bind_dn = re.compile(r'^\s*bind[_-]?dn\s*$', re.IGNORECASE) re_bind_pw = re.compile(r'^\s*bind[_-]?(?:pw|passwd|passsword)\s*$', re.IGNORECASE) @@ -60,6 +62,7 @@ class LDAPMigrationConfiguration(BaseConfiguration): # ------------------------------------------------------------------------- def __init__( self, appname=None, verbose=0, version=__version__, base_dir=None, + xlations_definitions_base=None, encoding=None, config_dir=None, config_file=None, initialized=False): self.src_server = self.default_src_server @@ -76,12 +79,19 @@ class LDAPMigrationConfiguration(BaseConfiguration): self.suffix = self.default_suffix self._timeout = self.default_timeout + self.xlations_definitions_base = self.default_xlations_definitions_base + self.xlations_definitions_file = None + self.xlations_definitions = {} super(LDAPMigrationConfiguration, self).__init__( appname=appname, verbose=verbose, version=version, base_dir=base_dir, encoding=encoding, config_dir=config_dir, config_file=config_file, initialized=False, ) + if xlations_definitions_base: + self.xlations_definitions_base = xlations_definitions_base + self.xlations_definitions_file = self.config_dir / self.xlations_definitions_base + if initialized: self.initialized = True @@ -175,6 +185,23 @@ class LDAPMigrationConfiguration(BaseConfiguration): return res + # ------------------------------------------------------------------------- + def read(self): + """Reading the configuration file.""" + + super(LDAPMigrationConfiguration, self).read(error_if_not_exists=True) + + open_args = { + 'encoding': 'utf-8', + 'errors': 'surrogateescape', + 'mode': 'r', + } + + if self.xlations_definitions_file.exists() and self.xlations_definitions_file.is_file(): + LOG.debug("Reading YAML file {!r} ...".format(str(self.xlations_definitions_file))) + with self.xlations_definitions_file.open(**open_args) as fh: + self.xlations_definitions = yaml.load(fh, Loader=yaml.Loader) + # ------------------------------------------------------------------------- def eval_config_section(self, config, section_name): diff --git a/requirements.txt b/requirements.txt index e52c0ae..6c7c032 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ git+https://git.pixelpark.com/python/python_fb_tools.git@master ansible ldap3 +PyYAML -- 2.39.5