]> Frank Brehm's Git Trees - pixelpark/pp-admin-tools.git/commitdiff
Changing logic in mirror-ldap, using a modified pp function.
authorFrank Brehm <frank@brehm-online.com>
Thu, 27 Oct 2022 11:52:34 +0000 (13:52 +0200)
committerFrank Brehm <frank@brehm-online.com>
Thu, 27 Oct 2022 11:52:34 +0000 (13:52 +0200)
14 files changed:
lib/pp_admintools/__init__.py
lib/pp_admintools/app/__init__.py
lib/pp_admintools/app/dns_deploy_zones.py
lib/pp_admintools/app/ldap.py
lib/pp_admintools/app/mail.py
lib/pp_admintools/app/mirror_ldap.py
lib/pp_admintools/app/pdns.py
lib/pp_admintools/app/remove_ldap_user.py
lib/pp_admintools/app/set_ldap_password.py
lib/pp_admintools/config/dns_deploy_zones.py
lib/pp_admintools/config/ldap.py
lib/pp_admintools/config/mail.py
lib/pp_admintools/config/mirror_ldap.py
lib/pp_admintools/config/pdns.py

index 16797b5d12d2affb645cb725783e6bff6a2ae744..02c4939fb14baf548204b970d9da99188283bee9 100644 (file)
@@ -1,9 +1,37 @@
 #!/bin/env python3
 # -*- coding: utf-8 -*-
+from __future__ import absolute_import
 
-__version__ = '0.6.0'
+# Standard modules
+import shutil
+
+# Own modules
+import fb_tools.common
+
+__version__ = '0.7.0'
 
 MAX_PORT_NUMBER = (2 ** 16) - 1
 DEFAULT_CONFIG_DIR = 'pixelpark'
+DEFAULT_TERMINAL_WIDTH = 99
+DEFAULT_TERMINAL_HEIGHT = 40
+
+
+# =============================================================================
+def pp(value, indent=4, width=None, depth=None):
+    """
+    Return a pretty print string of the given value.
+
+    @return: pretty print string
+    @rtype: str
+    """
+
+    if not width:
+        term_size = shutil.get_terminal_size((DEFAULT_TERMINAL_WIDTH, DEFAULT_TERMINAL_HEIGHT))
+        width = term_size.columns
+
+    return fb_tools.common.pp(value, indent=indent, width=width, depth=depth)
+
+
+# =============================================================================
 
 # vim: ts=4 et list
index 19da0561ab106fcbb6c29f62ba730fe5669f7f19..cc9e1b308579ac248f69a7e5a1c656d96d8a5331 100644 (file)
@@ -26,7 +26,7 @@ LOG = logging.getLogger(__name__)
 _ = XLATOR.gettext
 ngettext = XLATOR.ngettext
 
-__version__ = '0.5.1'
+__version__ = '0.6.1'
 
 
 # =============================================================================
@@ -66,6 +66,21 @@ class BaseDPXApplication(FbConfigApplication):
             env_prefix=env_prefix, config_dir=config_dir
         )
 
+    # -------------------------------------------------------------------------
+    def line(self, width=80, linechar='-', color=None):
+        """Print out an line on stdout, if not in quiet mode."""
+        if self.quiet:
+            return
+
+        lchar = str(linechar).strip()
+        if not lchar:
+            lchar = '-'
+
+        lin = (lchar * width)[0:width]
+        if color:
+            lin=self.colored(lin, color)
+        print(lin)
+
     # -------------------------------------------------------------------------
     def empty_line(self):
         """Print out an empty line on stdout, if not in quiet mode."""
index 0cf7aeb1f79e888763cacab22b812bbd8a51f9a8..216a178f2f2091479c91ec58d12dfd3253755b13 100644 (file)
@@ -30,13 +30,14 @@ import six
 from pytz import timezone, UnknownTimeZoneError
 
 # Own modules
-from fb_tools.common import pp, to_str
+from fb_tools.common import to_str
 
 from fb_tools.app import BaseApplication
 
 from fb_tools.pidfile import PidFileError, PidFile
 
 from .. import __version__ as GLOBAL_VERSION
+from .. import pp
 
 from .pdns import PpPDNSAppError, PpPDNSApplication
 
@@ -44,7 +45,7 @@ from ..config.dns_deploy_zones import DnsDeployZonesConfig
 
 from ..xlate import XLATOR
 
-__version__ = '0.8.5'
+__version__ = '0.8.6'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
index 3c707d99e617ab23d0763cceb2c52fddc1d9bcd0..9396d0073532fa62f992ab092bd204cf6173b121 100644 (file)
@@ -32,13 +32,14 @@ from ldap3 import ALL_ATTRIBUTES
 from ldap3.core.exceptions import LDAPException
 # from ldap3.core.exceptions import LDAPException, LDAPBindError
 
-from fb_tools.common import pp, is_sequence, to_bool
+from fb_tools.common import is_sequence, to_bool
 from fb_tools.argparse_actions import TimeoutOptionAction
 from fb_tools.mailaddress import MailAddress
 from fb_tools.collections import FrozenCIStringSet, CIStringSet, CIDict
 
 # Own modules
 from .. import __version__ as GLOBAL_VERSION
+from .. import pp
 
 from ..xlate import XLATOR, format_list
 
@@ -53,7 +54,7 @@ from ..config.ldap import LdapConnectionInfo, LdapConfiguration
 # rom ..config.ldap import DEFAULT_PORT_LDAP, DEFAULT_PORT_LDAPS
 from ..config.ldap import DEFAULT_TIMEOUT
 
-__version__ = '0.10.0'
+__version__ = '0.10.1'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
@@ -808,6 +809,9 @@ class BaseLdapApplication(BaseDPXApplication):
         attributes = ['objectClass']
         ldap_filter = '(objectClass=*)'
 
+        LOG.debug(_("Getting all Entry DNs of LDAP instance {i!r} below {b!r}.").format(
+            i=inst, b=base_dn))
+
         req_status, req_result, req_response, req_whatever = ldap.search(
             search_base=base_dn, search_scope=SUBTREE, search_filter=ldap_filter,
             get_operational_attributes=False, attributes=attributes,
index 3a630839ec36ca5426b6bb550bee1fbb07f5742c..8e838c39c67f08d08b09cd7b6e28cfdf9ec72a85 100644 (file)
@@ -21,13 +21,13 @@ from subprocess import Popen, PIPE
 import smtplib
 
 # Third party modules
-from fb_tools.common import pp
 from fb_tools.xlate import format_list
 from fb_tools import MailAddress
 
 # Own modules
 from .. import __version__ as GLOBAL_VERSION
 from .. import MAX_PORT_NUMBER, DEFAULT_CONFIG_DIR
+from .. import pp
 
 from ..xlate import XLATOR
 
@@ -37,7 +37,7 @@ from ..config.mail import MailConfiguration
 
 from . import DPXAppError, BaseDPXApplication
 
-__version__ = '0.3.1'
+__version__ = '0.3.2'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
index ea1d9c50a93bcfed6bbad1d783ac4c1edc747f79..73a5bc7a62be737cdc55fd2869da9bac8859a9be 100644 (file)
@@ -20,11 +20,12 @@ from functools import cmp_to_key
 # from ldap3 import MODIFY_REPLACE, MODIFY_ADD, MODIFY_DELETE
 
 # Own modules
-# from fb_tools.common import to_bool, is_sequence, pp
-from fb_tools.common import pp
+# from fb_tools.common import to_bool, is_sequence
 # from fb_tools.collections import FrozenCIStringSet, CIStringSet, CIDict
 from fb_tools.collections import CIDict, CIStringSet
 
+from .. import pp
+
 from ..xlate import XLATOR
 
 from ..config.mirror_ldap import MirrorLdapConfiguration
@@ -36,7 +37,7 @@ from .ldap import BaseLdapApplication
 from ..argparse_actions import NonNegativeItegerOptionAction
 from ..argparse_actions import LimitedFloatOptionAction
 
-__version__ = '0.5.3'
+__version__ = '0.6.0'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
@@ -75,7 +76,6 @@ class MirrorLdapApplication(BaseLdapApplication):
 
         self.src_dns = []
         self.tgt_dns_current = CIDict()
-        self.registered_tgt_dns = CIDict()
 
         self.limit = 0
         self.wait_after_write = self.default_wait_after_write
@@ -247,10 +247,14 @@ class MirrorLdapApplication(BaseLdapApplication):
             self.countdown(number=5, delay=1, prompt=msg)
 
         self.empty_line()
+        self.line(linechar='=', color='CYAN')
         LOG.info("I'm walking, yes indeed I'm walking ...")
 
         try:
-            self.clean_target_instance()
+            self.get_current_src_entries()
+            self.get_current_tgt_entries()
+            self.eval_sync_entries()
+            # self.clean_target_instance()
 
         except KeyboardInterrupt:
             msg = _("Got a {}:").format('KeyboardInterrupt') + ' ' + _("Interrupted on demand.")
@@ -266,24 +270,52 @@ class MirrorLdapApplication(BaseLdapApplication):
             "Removing all existing entries in target LDAP instance "
             "(except the base DN entry, of course)."))
 
-        self.get_current_tgt_entries()
-        self.eval_sync_entries()
-        self.clean_tgt_non_struct_entries()
-        self.clean_tgt_struct_entries()
+        # self.clean_tgt_non_struct_entries()
+        # self.clean_tgt_struct_entries()
+
+    # -------------------------------------------------------------------------
+    def get_current_src_entries(self):
+        """Get DNs of all entries in the source LDAP instance and sort them."""
+
+        self.empty_line()
+        self.line(color='CYAN')
+        LOG.info(_("Trying to get DNs of all entries in the source LDAP instance."))
+
+        self.src_dns = self.get_all_entry_dns_hash(self.src_instance)
+
+        sorted_dns = sorted(list(self.src_dns.keys()), key=cmp_to_key(self.compare_ldap_dns))
+
+        for dn in sorted_dns:
+            self.register_dn_tokens(dn, self.src_dns[dn], self.src_dns)
+
+        if self.verbose > 2:
+            if self.verbose > 4:
+                LOG.debug("Current source entries:\n" + pp(self.src_dns.dict()))
+            else:
+                msg = _("Found DNs in instance {!r}:").format(self.src_instance)
+                LOG.debug(msg + '\n' + pp(sorted_dns))
 
     # -------------------------------------------------------------------------
     def get_current_tgt_entries(self):
         """Get DNs of all entries in the target LDAP instance and sort them."""
 
-        LOG.debug(_("Trying to get DNs of all entries in the target LDAP instance."))
+        self.empty_line()
+        self.line(color='CYAN')
+        LOG.info(_("Trying to get DNs of all entries in the target LDAP instance."))
 
         self.tgt_dns_current = self.get_all_entry_dns_hash(self.tgt_instance)
+        sorted_dns = sorted(
+            list(self.tgt_dns_current.keys()), key=cmp_to_key(self.compare_ldap_dns))
 
-        for dn in sorted(list(self.tgt_dns_current.keys()), key=cmp_to_key(self.compare_ldap_dns)):
+        for dn in sorted_dns:
             self.register_dn_tokens(dn, self.tgt_dns_current[dn], self.tgt_dns_current)
 
-        if self.verbose > 4:
-            LOG.debug("Current target entries:\n" + pp(self.tgt_dns_current.dict()))
+        if self.verbose > 2:
+            if self.verbose > 4:
+                LOG.debug("Current target entries:\n" + pp(self.tgt_dns_current.dict()))
+            else:
+                msg = _("Found DNs in instance {!r}:").format(self.tgt_instance)
+                LOG.debug(msg + '\n' + pp(sorted_dns))
 
     # -------------------------------------------------------------------------
     def eval_sync_entries(self):
index 16bb693173d2e1958700658b81068816cd05f618..cedfeddab583c7ec5b1f2ead275c239df289b6d6 100644 (file)
@@ -21,7 +21,6 @@ import socket
 import psutil
 
 # Own modules
-from fb_tools.common import pp
 from fb_tools.xlate import format_list
 
 from fb_pdnstools.zone import PowerDNSZone
@@ -30,6 +29,7 @@ from fb_pdnstools.errors import PDNSApiNotFoundError
 from fb_pdnstools.errors import PDNSApiValidationError
 
 from .. import __version__ as GLOBAL_VERSION
+from .. import pp
 
 from ..argparse_actions import PortOptionAction
 
@@ -40,7 +40,7 @@ from ..config.pdns import PdnsConfiguration
 
 from ..xlate import XLATOR
 
-__version__ = '0.9.5'
+__version__ = '0.9.6'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
index b0feb4ad4e57b0de2f41129d129676553dc485d6..13e9311638ae4bbf0de7eeb4c61abcd5df005143 100644 (file)
@@ -16,14 +16,16 @@ import crypt
 from ldap3 import MODIFY_REPLACE, MODIFY_ADD, MODIFY_DELETE
 
 # Own modules
-from fb_tools.common import to_bool, is_sequence, pp
+from fb_tools.common import to_bool, is_sequence
+
+from .. import pp
 
 from ..xlate import XLATOR
 
 from .ldap import LdapAppError, FatalLDAPError
 from .ldap import BaseLdapApplication
 
-__version__ = '0.5.7'
+__version__ = '0.5.8'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
index d7a089df98ab70440e57fcdde80997784a205452..e40f06c6b8c8f6a55b0fc2b307f42c3db0f7019e 100644 (file)
@@ -28,7 +28,9 @@ except ImportError:
 
 # Own modules
 # from fb_tools.common import to_bool, is_sequence, pp
-from fb_tools.common import is_sequence, pp
+from fb_tools.common import is_sequence
+
+from .. import pp
 
 from ..xlate import XLATOR
 
@@ -36,7 +38,7 @@ from .ldap import LdapAppError, FatalLDAPError
 from .ldap import BaseLdapApplication
 from .ldap import PasswordFileOptionAction
 
-__version__ = '0.6.5'
+__version__ = '0.6.6'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
index d90c819ae77125545b142cda32fa301f0dc9c26f..038f4b53d6fa0db1b919da93ec5e9e5e75fd3704 100644 (file)
@@ -21,7 +21,7 @@ from pathlib import Path
 
 # Own modules
 
-from fb_tools.common import is_sequence, pp, to_bool
+from fb_tools.common import is_sequence, to_bool
 
 # from .config import ConfigError, BaseConfiguration
 from fb_tools.multi_config import DEFAULT_ENCODING
@@ -29,9 +29,11 @@ from fb_tools.multi_config import DEFAULT_ENCODING
 from .pdns import PdnsConfigError, PdnsConfiguration
 from .mail import DEFAULT_CONFIG_DIR
 
+from .. import pp
+
 from ..xlate import XLATOR
 
-__version__ = '0.2.2'
+__version__ = '0.2.3'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
index 4a27f5606f527f5ad654ddbdcd71c457a1aa7288..91c15495605f2fd848d0d60cafe28e1aa5423db7 100644 (file)
@@ -19,7 +19,6 @@ import re
 # Own modules
 
 from fb_tools import MAX_TIMEOUT
-# from fb_tools.common import pp
 from fb_tools.common import is_sequence, to_bool
 from fb_tools.multi_config import DEFAULT_ENCODING
 from fb_tools.obj import FbGenericBaseObject, FbBaseObject
@@ -27,12 +26,13 @@ from fb_tools.obj import FbGenericBaseObject, FbBaseObject
 from . import PpConfigurationError, PpBaseConfiguration
 
 from .. import MAX_PORT_NUMBER, DEFAULT_CONFIG_DIR
+# from .. import pp
 
 from . import VALID_TIERS, DEFAULT_TIER
 
 from ..xlate import XLATOR
 
-__version__ = '0.6.1'
+__version__ = '0.6.2'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
index 3f82d3d542d8a484b53e1fbd27f5b3151f239e3c..92e0c6c6b8be5d827985c3ae436bdc3d7574073f 100644 (file)
@@ -18,7 +18,7 @@ import copy
 
 # Own modules
 
-from fb_tools.common import is_sequence, pp, to_bool
+from fb_tools.common import is_sequence, to_bool
 
 from fb_tools.multi_config import DEFAULT_ENCODING
 
@@ -26,12 +26,13 @@ from fb_tools import MailAddress
 
 from .. import __version__ as GLOBAL_VERSION
 from .. import MAX_PORT_NUMBER, DEFAULT_CONFIG_DIR
+from .. import pp
 
 from . import PpConfigurationError, PpBaseConfiguration
 
 from ..xlate import XLATOR
 
-__version__ = '0.2.1'
+__version__ = '0.2.2'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
index 6adf088ba5eb6cbcc06e0d3ade11c981fa0123c4..6766d8032521440a60c1784dfa037c2a51abd8e4 100644 (file)
@@ -17,17 +17,18 @@ import re
 from collections.abc import Mapping
 
 # Third party modules
-from fb_tools.common import is_sequence, pp
+from fb_tools.common import is_sequence
 from fb_tools.multi_config import DEFAULT_ENCODING
 
 # Own modules
 from .. import DEFAULT_CONFIG_DIR
+from .. import pp
 
 from .ldap import LdapConfigError, LdapConfiguration
 
 from ..xlate import XLATOR
 
-__version__ = '0.2.0'
+__version__ = '0.2.1'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
index b4c02606f1595770548620f0d426816283bbce18..3d2587c3f02d69363d5470b7b2abb78137020515 100644 (file)
@@ -20,12 +20,13 @@ import copy
 # Own modules
 
 from fb_tools import MAX_TIMEOUT
-from fb_tools.common import is_sequence, pp
+from fb_tools.common import is_sequence
 # from .config import ConfigError, BaseConfiguration
 from fb_tools.multi_config import DEFAULT_ENCODING
 
 from .. import __version__ as GLOBAL_VERSION
 from .. import MAX_PORT_NUMBER
+from .. import pp
 
 from .mail import MailConfigError, MailConfiguration
 from .mail import DEFAULT_CONFIG_DIR
@@ -34,7 +35,7 @@ from ..xlate import XLATOR
 
 LIBRARY_NAME = "pp-pdns-api-client"
 
-__version__ = '0.2.4'
+__version__ = '0.2.5'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext