]> Frank Brehm's Git Trees - pixelpark/pp-admin-tools.git/commitdiff
Implementing mirroring only struct entries.
authorFrank Brehm <frank.brehm@pixelpark.com>
Mon, 5 Feb 2024 17:09:34 +0000 (18:09 +0100)
committerFrank Brehm <frank.brehm@pixelpark.com>
Mon, 5 Feb 2024 17:09:34 +0000 (18:09 +0100)
lib/pp_admintools/app/mirror_ldap.py

index ce220e612df9463d8d489d24d6efa9a3679e1706..c6cbaa33a88b95a264f4c4cda5a25b6a27eb7ba8 100644 (file)
@@ -36,7 +36,7 @@ from ..errors import DpxLdapReadError
 from ..errors import DpxLdapSessionError
 from ..xlate import XLATOR
 
-__version__ = '1.2.3'
+__version__ = '1.3.0'
 LOG = logging.getLogger(__name__)
 
 _ = XLATOR.gettext
@@ -162,6 +162,7 @@ class MirrorLdapApplication(BaseLdapApplication):
                 self.exit(1)
 
         self.wait_after_write = getattr(self.args, 'wait', self.default_wait_after_write)
+        self.only_struct = getattr(self.args, 'struct', False)
 
         self._check_source_instance()
         self._eval_keep_dns()
@@ -291,44 +292,9 @@ class MirrorLdapApplication(BaseLdapApplication):
             self.clean_tgt_non_struct_entries()
             self.clean_tgt_struct_entries()
             self.mirror_struct_entries()
-            self.mirror_non_struct_entries()
-            self.update_memberships()
-
-            self.empty_line()
-            msg = ngettext(
-                '{:>5} entry deleted.', '{:>5} entries deleted.', self.total_deleted).format(
-                self.total_deleted)
-            msg += ' ' + ngettext(
-                '{:>5} entry updated.', '{:>5} entries updated.', self.total_updated).format(
-                self.total_updated)
-            msg += ' ' + ngettext(
-                '{:>5} entry created.', '{:>5} entries created.', self.total_created).format(
-                self.total_created)
-            LOG.info(msg)
-
-            if not self.quiet:
-                self.empty_line()
-                title = _('Changes total:')
-                print(self.colored(title, 'CYAN'))
-                self.line(width=len(title), linechar='=', color='CYAN')
-                self.empty_line()
-
-                msg = ' * ' + ngettext(
-                    '{:>5} entry deleted.', '{:>5} entries deleted.', self.total_deleted).format(
-                        self.total_deleted)
-                print(msg)
-
-                msg = ' * ' + ngettext(
-                    '{:>5} entry updated.', '{:>5} entries updated.', self.total_updated).format(
-                        self.total_updated)
-                print(msg)
-
-                msg = ' * ' + ngettext(
-                    '{:>5} entry created.', '{:>5} entries created.', self.total_created).format(
-                        self.total_created)
-                print(msg)
-
-                self.empty_line()
+            if not self.only_struct:
+                self.mirror_non_struct_entries()
+                self.update_memberships()
 
         except (DpxLdapReadError, DpxLdapSessionError) as e:
             cls = e.__class__.__name__
@@ -341,9 +307,58 @@ class MirrorLdapApplication(BaseLdapApplication):
             LOG.error(msg)
             self.exit(10)
 
+        finally:
+            self.print_summary()
+
         self.empty_line()
         LOG.info(_('Finished.'))
 
+    # -------------------------------------------------------------------------
+    def print_summary(self):
+        """Print a summary after the complete mirroring."""
+        self.empty_line()
+        title = _('Summary')
+        print(self.colored(title, 'CYAN'))
+        self.line(width=len(title), linechar='=', color='CYAN')
+
+        self.empty_line()
+        msg = ngettext(
+            '{:>5} entry deleted.', '{:>5} entries deleted.', self.total_deleted).format(
+            self.total_deleted)
+        msg += ' ' + ngettext(
+            '{:>5} entry updated.', '{:>5} entries updated.', self.total_updated).format(
+            self.total_updated)
+        msg += ' ' + ngettext(
+            '{:>5} entry created.', '{:>5} entries created.', self.total_created).format(
+            self.total_created)
+        LOG.info(msg)
+
+        if self.quiet:
+            return
+
+        self.empty_line()
+        title = _('Changes total:')
+        print(self.colored(title, 'CYAN'))
+        self.line(width=len(title), linechar='-', color='CYAN')
+        self.empty_line()
+
+        msg = ' * ' + ngettext(
+            '{:>5} entry deleted.', '{:>5} entries deleted.', self.total_deleted).format(
+                self.total_deleted)
+        print(msg)
+
+        msg = ' * ' + ngettext(
+            '{:>5} entry updated.', '{:>5} entries updated.', self.total_updated).format(
+                self.total_updated)
+        print(msg)
+
+        msg = ' * ' + ngettext(
+            '{:>5} entry created.', '{:>5} entries created.', self.total_created).format(
+                self.total_created)
+        print(msg)
+
+        self.empty_line()
+
     # -------------------------------------------------------------------------
     def get_current_src_entries(self):
         """Get DNs of all entries in the source LDAP instance and sort them."""