provision: Split out result reporting for backends.
authorJelmer Vernooij <jelmer@samba.org>
Sun, 26 Feb 2012 15:23:18 +0000 (16:23 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Sun, 26 Feb 2012 15:27:06 +0000 (16:27 +0100)
source4/scripting/python/samba/provision/__init__.py
source4/scripting/python/samba/provision/backend.py
source4/scripting/python/samba/tests/provision.py

index 2f6a84c70988e1da6e7591b33a97f929638b887e..42da9033021eec84fcb4f6ada56329a7eafa32cc 100644 (file)
@@ -379,9 +379,13 @@ class ProvisionResult(object):
         self.domainsid = None
         self.adminpass_generated = None
         self.adminpass = None
+        self.backend_result = None
 
     def report_logger(self, logger):
         """Report this provision result to a logger."""
+        logger.info(
+            "Once the above files are installed, your Samba4 server will "
+            "be ready to use")
         if self.adminpass_generated:
             logger.info("Admin password:        %s", self.adminpass)
         logger.info("Server Role:           %s", self.server_role)
@@ -396,6 +400,9 @@ class ProvisionResult(object):
                 "the Samba 4 LDAP server has been created in %s.",
                 self.paths.phpldapadminconfig)
 
+        if self.backend_result:
+            self.backend_result.report_logger(logger)
+
 
 def check_install(lp, session_info, credentials):
     """Check whether the current install seems ok.
@@ -727,7 +734,7 @@ def setup_samdb_partitions(samdb_path, logger, lp, session_info,
                 lp=lp, options=["modules:"])
 
     ldap_backend_line = "# No LDAP backend"
-    if provision_backend.type is not "ldb":
+    if provision_backend.type != "ldb":
         ldap_backend_line = "ldapBackend: %s" % provision_backend.ldap_uri
 
     samdb.transaction_start()
@@ -1604,7 +1611,7 @@ def provision(logger, session_info, credentials, smbconf=None,
 
     if ldapadminpass is None:
         # Make a new, random password between Samba and it's LDAP server
-        ldapadminpass=samba.generate_random_password(128, 255)
+        ldapadminpass = samba.generate_random_password(128, 255)
 
     if backend_type is None:
         backend_type = "ldb"
@@ -1740,8 +1747,7 @@ def provision(logger, session_info, credentials, smbconf=None,
     # only install a new shares config db if there is none
     if not os.path.exists(paths.shareconf):
         logger.info("Setting up share.ldb")
-        share_ldb = Ldb(paths.shareconf, session_info=session_info,
-                        lp=lp)
+        share_ldb = Ldb(paths.shareconf, session_info=session_info, lp=lp)
         share_ldb.load_ldif_file_add(setup_path("share.ldif"))
 
     logger.info("Setting up secrets.ldb")
@@ -1751,15 +1757,13 @@ def provision(logger, session_info, credentials, smbconf=None,
 
     try:
         logger.info("Setting up the registry")
-        setup_registry(paths.hklm, session_info,
-                       lp=lp)
+        setup_registry(paths.hklm, session_info, lp=lp)
 
         logger.info("Setting up the privileges database")
         setup_privileges(paths.privilege, session_info, lp=lp)
 
         logger.info("Setting up idmap db")
-        idmap = setup_idmapdb(paths.idmapdb,
-            session_info=session_info, lp=lp)
+        idmap = setup_idmapdb(paths.idmapdb, session_info=session_info, lp=lp)
 
         setup_name_mappings(idmap, sid=str(domainsid),
                             root_uid=root_uid, nobody_uid=nobody_uid,
@@ -1816,7 +1820,7 @@ def provision(logger, session_info, credentials, smbconf=None,
         if serverrole == "domain controller":
             create_dns_update_list(lp, logger, paths)
 
-        provision_backend.post_setup()
+        backend_result = provision_backend.post_setup()
         provision_backend.shutdown()
 
         create_phpldapadmin_config(paths.phpldapadminconfig,
@@ -1839,7 +1843,6 @@ def provision(logger, session_info, credentials, smbconf=None,
                 logger.info("Failed to chown %s to bind gid %u",
                             dns_keytab_path, paths.bind_gid)
 
-    logger.info("Once the above files are installed, your Samba4 server will be ready to use")
     result = ProvisionResult()
     result.server_role = serverrole
     result.domaindn = domaindn
@@ -1856,21 +1859,8 @@ def provision(logger, session_info, credentials, smbconf=None,
     else:
         result.adminpass_generated = False
         result.adminpass = None
-    if provision_backend.type is not "ldb":
-        if provision_backend.credentials.get_bind_dn() is not None:
-            logger.info("LDAP Backend Admin DN: %s" %
-                provision_backend.credentials.get_bind_dn())
-        else:
-            logger.info("LDAP Admin User:       %s" %
-                provision_backend.credentials.get_username())
-
-        if provision_backend.slapd_command_escaped is not None:
-            # now display slapd_command_file.txt to show how slapd must be
-            # started next time
-            logger.info("Use later the following commandline to start slapd, then Samba:")
-            logger.info(provision_backend.slapd_command_escaped)
-            logger.info("This slapd-Commandline is also stored under: %s/ldap_backend_startup.sh",
-                    provision_backend.ldapdir)
+
+    result.backend_result = backend_result
 
     return result
 
index 4ab827b545df2b090eea9423028f205b178d73fe..1931bc193e4fe8c4259eb265693be5be167a9c4c 100644 (file)
@@ -51,7 +51,43 @@ class SlapdAlreadyRunning(Exception):
             self.ldapi_uri)
 
 
+class BackendResult(object):
+
+    def report_logger(self, logger):
+        """Rerport this result to a particular logger.
+
+        """
+        raise NotImplementedError(self.report_logger)
+
+
+class LDAPBackendResult(BackendResult):
+
+    def __init__(self, credentials, slapd_command_escaped, ldapdir):
+        self.credentials = credentials
+        self.slapd_command_escaped = slapd_command_escaped
+        self.ldapdir = ldapdir
+
+    def report_logger(self, logger):
+        if self.credentials.get_bind_dn() is not None:
+            logger.info("LDAP Backend Admin DN: %s" %
+                self.credentials.get_bind_dn())
+        else:
+            logger.info("LDAP Admin User:       %s" %
+                self.credentials.get_username())
+
+        if self.slapd_command_escaped is not None:
+            # now display slapd_command_file.txt to show how slapd must be
+            # started next time
+            logger.info(
+                "Use later the following commandline to start slapd, then Samba:")
+            logger.info(self.slapd_command_escaped)
+            logger.info(
+                "This slapd-Commandline is also stored under: %s/ldap_backend_startup.sh",
+                self.ldapdir)
+
+
 class ProvisionBackend(object):
+
     def __init__(self, backend_type, paths=None, lp=None,
             credentials=None, names=None, logger=None):
         """Provision a backend for samba4"""
@@ -79,7 +115,10 @@ class ProvisionBackend(object):
         raise NotImplementedError(self.shutdown)
 
     def post_setup(self):
-        """Post setup."""
+        """Post setup.
+
+        :return: A BackendResult or None
+        """
         raise NotImplementedError(self.post_setup)
 
 
@@ -278,7 +317,8 @@ class LDAPBackend(ProvisionBackend):
             self.slapd.communicate()
 
     def post_setup(self):
-        pass
+        return LDAPBackendResult(self.credentials, self.slapd_command_escaped,
+                    self.ldapdir)
 
 
 class OpenLDAPBackend(LDAPBackend):
@@ -770,3 +810,5 @@ class FDSBackend(LDAPBackend):
                          self.names.schemadn):
             m.dn = ldb.Dn(ldapi_db, dnstring)
             ldapi_db.modify(m)
+        return LDAPBackendResult(self.credentials, self.slapd_command_escaped,
+            self.ldapdir)
index 8420f9c152af7edc812a95ddad3ff12f0c1e583f..0ebe40040546aa026c9e801ce45d1d492076082f 100644 (file)
@@ -167,6 +167,8 @@ class ProvisionResultTests(TestCase):
         result = self.base_result()
         entries = self.report_logger(result)
         self.assertEquals(entries, [
+            ('INFO', 'Once the above files are installed, your Samba4 server '
+                'will be ready to use'),
             ('INFO', 'Server Role:           domain controller'),
             ('INFO', 'Hostname:              hostnaam'),
             ('INFO', 'NetBIOS Domain:        DOMEIN'),
@@ -185,6 +187,6 @@ class ProvisionResultTests(TestCase):
         result.adminpass_generated = True
         result.adminpass = "geheim"
         entries = self.report_logger(result)
-        self.assertEquals(entries[0],
+        self.assertEquals(entries[1],
                 ("INFO", 'Admin password:        geheim'))