def registerDataStores(sharedDataStoreConfig, forInstallPurposeOnly, username, password, dataDrive): successRegister = True sharedDBConfig = sharedDataStoreConfig sharedFolderConfig = sharedDataStoreConfig try: opsServer = OpsServerConfig.getOpsServerRootPath(dataDrive) environmentData = OpsServerConfig.getEnvDataRootPath(dataDrive) clientServerName = OpsServerConfig.publishingDBServer clientFolderPath = OpsServerConfig.publishingFolder clientFolderDSName = OpsServerConfig.dataFolderDStoreName installOnlyClientFolders = OpsServerConfig.installOnlyPublishingFolders dbsToRegister = OpsServerConfig.databasesToCreate print "\n\t-Register Data Stores with Site...\n" # --------------------------------------------------------------------- # Register Folders by just using paths # --------------------------------------------------------------------- if regFolders: if forInstallPurposeOnly: clientFolderPaths = installOnlyClientFolders else: clientFolderPaths = {clientFolderDSName: clientFolderPath} for registrationName, clientFolderPath in clientFolderPaths.items( ): # Create folder data store item if sharedFolderConfig: sharedStr = "shared" dsPath, dsItem = create_shared_folder_item( registrationName, environmentData, serverName) else: sharedStr = "replicated" dsPath, dsItem = create_replicated_folder_item( registrationName, clientFolderPath, environmentData) # Register the data store item print "\t\t-Registering folder " + environmentData + " with site as " + registrationName + " (" + sharedStr + ")..." success, response = register(serverName, serverPort, username, password, dsItem, useSSL=False) if success: print "\t\tDone.\n" else: successRegister = False print "ERROR:" + str(response) ## --------------------------------------------------------------------- ## Register databases ## (NOTE: Assumes database password is the same as that used to install ## arcgis server) ## --------------------------------------------------------------------- if regDatabases: for db in dbsToRegister: isManaged = dbsToRegister[db][0] registrationName = dbsToRegister[db][1] # Do not register managed database if it is for # install purposes only if isManaged and forInstallPurposeOnly: continueRegister = False else: continueRegister = True if continueRegister: success, server_db_conn = create_postgresql_db_connection_str( serverName, serverPort, username, password, serverName, db, 'sde', password, useSSL=False, token=None, encrypt_dbpassword=False) if not success: successRegister = False print "ERROR: error encountered while creating server database connection string -" print str(server_db_conn) if forInstallPurposeOnly: registrationName = registrationName + "_InstallOnly" managedStr = "" if isManaged: managedStr = "Managed" dsPath, dsItem = create_managed_entdb_item( registrationName, server_db_conn) else: managedStr = "Non-managed" if sharedDBConfig: managedStr = managedStr + " - shared" dsPath, dsItem = create_shared_entdb_item( registrationName, server_db_conn) else: managedStr = managedStr + " - replicated" success, publisher_db_conn = create_postgresql_db_connection_str( serverName, serverPort, username, password, clientServerName, db, 'sde', password, useSSL=False, token=None, encrypt_dbpassword=False) if not success: successRegister = False print "ERROR: error encountered while creating publisher database connection string -" print str(publisher_db_conn) dsPath, dsItem = create_replicated_entdb_item( registrationName, publisher_db_conn, server_db_conn) print "\t\t-Registering " + db + " database with site as " + registrationName + " (" + managedStr + ")..." success, response = register(serverName, serverPort, username, password, dsItem, useSSL=False) if success: print "\t\tDone.\n" else: successRegister = False print "ERROR:" + str(response) except: successRegister = False # Get the traceback object tb = sys.exc_info()[2] tbinfo = traceback.format_tb(tb)[0] # Concatenate information together concerning the error into a message string pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError Info:\n" + str( sys.exc_info()[1]) # Print Python error messages for use in Python / Python Window print print "***** ERROR ENCOUNTERED *****" print pymsg + "\n" finally: # Return success flag return successRegister
def createDataStores(agsServerAccount, password, dataDrive): success = True try: opsServer = OpsServerConfig.getOpsServerRootPath(dataDrive) environmentData = OpsServerConfig.getEnvDataRootPath(dataDrive) dbConnFileRootPath = OpsServerConfig.getDBConnFileRootPath(dataDrive) print print "--Create Local Data Stores..." # Create local variables to use for both creating enterprise # geodatabases and creating connection files. dbPlatform = "POSTGRESQL" accountAuthentication = "DATABASE_AUTH" dbAdmin = "postgres" #For PostgreSQL this is the postgres superuser gdbAdminName = "sde" #For PostreSQL this must be 'sde' # 2/26/2013: Modified to dynamically search for keycodes file instead of # hardcoding to specific version of the software. #pathList = ["Program Files", "ESRI", "License10.1", "sysgen", "keycodes"] #authorizationFile = makePath("C", pathList) pathList = ["Program Files", "ESRI"] authorizationFile = findFilePath(makePath("C", pathList), "keycodes") # Create list of database names to create connection file. dbsToConnect = [] for db in dbsToCreate: dbsToConnect.append(db) # --------------------------------------------------------------------- # Create local environment data folders # --------------------------------------------------------------------- if createLocalEnvFolders: print "\n\t-Creating local environment data folders..." foldersToCreate = [] foldersToCreate.append(environmentData) foldersToCreate.append(dbConnFileRootPath) if not os.path.exists(environmentData): for folder in foldersToCreate: print "\t\tCreating folder: " + folder os.makedirs(folder) print "\t\tDone." print changeOwnership(opsServer, agsServerAccount) # --------------------------------------------------------------------- # Create local enterprise databases # --------------------------------------------------------------------- if createEnterpriseGDBs: print "\n\t-Creating local enterprise geodatabases" + \ " (this will take a few minutes)...\n" for db in dbsToCreate: print "\t\tCreating geodatabase '" + db + "'..." arcpy.CreateEnterpriseGeodatabase_management(dbPlatform, "localhost", db, accountAuthentication, dbAdmin, password, "", gdbAdminName, password, "", authorizationFile) print "\t\tDone.\n" # --------------------------------------------------------------------- # Update PostgreSQL connection file to allow remote connections # to environment databases # --------------------------------------------------------------------- if updatePostgreSQLConnectionFile: connectionFilePath = findFilePath(rootPostgreSQLPath, "pg_hba.conf") print "\n\t-Updating PostgreSQL connection file to allow remote" + \ " connections to databases..." print "\t\tFile: " + connectionFilePath # Create list of PostgreSQL connection entries postgreSQLConnEntries = [] postgreSQLConnEntries.append("host all all 0.0.0.0/0 md5") #IPv4 postgreSQLConnEntries.append("host all all ::/0 md5") #IPv6 # Determine if connection entry already exists in file for postgreSQLConnEntry in postgreSQLConnEntries: if findInFile(connectionFilePath, postgreSQLConnEntry): #Entry already exists in file so remove entry from list postgreSQLConnEntries.remove(postgreSQLConnEntry) # Add connection entries if len(postgreSQLConnEntries) > 0: hbaFile = open(connectionFilePath, 'a') for postgreSQLConnEntry in postgreSQLConnEntries: hbaFile.write("{}\n".format(postgreSQLConnEntry)) hbaFile.close() # Reload config file print "\n\t-Reloading connection file..." exeFile = findFilePath(rootPostgreSQLPath, "pg_ctl.exe") confFolder = os.path.dirname(connectionFilePath) exeCommand = "”" + exeFile + "” -D “" + confFolder + "” reload" os.popen(exeCommand) print "\t\tDone." # --------------------------------------------------------------------- # Create SDE connection files to environment geodatabases # --------------------------------------------------------------------- if createSDEConnectionFiles: print "\n\t-Creating SDE connection files..." for db in dbsToCreate: outFile = dbsToCreate[db][1] + ".sde" # Set output folder location outFolder = dbConnFileRootPath sdeFilePath = os.path.join(outFolder, outFile) # If SDE connection file already exists, delete it. if os.path.exists(sdeFilePath): print "\t\t* Deleting existing file " + sdeFilePath os.remove(sdeFilePath) print "\t\tRe-creating connection file " + sdeFilePath else: print "\t\tCreating connection file " + sdeFilePath arcpy.CreateDatabaseConnection_management(outFolder, outFile, dbPlatform, servername, accountAuthentication, gdbAdminName, password, "SAVE_USERNAME", db.lower(), "#", "TRANSACTIONAL", "sde.DEFAULT", "#") print "\t\tDone.\n" # Change ownership of sde file changeOwnership(sdeFilePath, agsServerAccount) except: success = False # Get the traceback object tb = sys.exc_info()[2] tbinfo = traceback.format_tb(tb)[0] # Concatenate information together concerning the error into a message string pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1]) msgs = "ArcPy ERRORS:\n" + arcpy.GetMessages() + "\n" # Print Python error messages for use in Python / Python Window print print "***** ERROR ENCOUNTERED *****" print pymsg + "\n" print msgs finally: # Return success flag return success
def registerDataStores(sharedDataStoreConfig, forInstallPurposeOnly, username, password, dataDrive): successRegister = True sharedDBConfig = sharedDataStoreConfig sharedFolderConfig = sharedDataStoreConfig try: opsServer = OpsServerConfig.getOpsServerRootPath(dataDrive) environmentData = OpsServerConfig.getEnvDataRootPath(dataDrive) clientServerName = OpsServerConfig.publishingDBServer clientFolderPath = OpsServerConfig.publishingFolder clientFolderDSName = OpsServerConfig.dataFolderDStoreName installOnlyClientFolders = OpsServerConfig.installOnlyPublishingFolders dbsToRegister = OpsServerConfig.databasesToCreate print "\n\t-Register Data Stores with Site...\n" # --------------------------------------------------------------------- # Register Folders by just using paths # --------------------------------------------------------------------- if regFolders: if forInstallPurposeOnly: clientFolderPaths = installOnlyClientFolders else: clientFolderPaths = {clientFolderDSName: clientFolderPath} for registrationName, clientFolderPath in clientFolderPaths.items(): # Create folder data store item if sharedFolderConfig: sharedStr = "shared" dsPath, dsItem = create_shared_folder_item(registrationName, environmentData, serverName) else: sharedStr = "replicated" dsPath, dsItem = create_replicated_folder_item(registrationName, clientFolderPath, environmentData) # Register the data store item print "\t\t-Registering folder " + environmentData + " with site as " + registrationName + " (" + sharedStr + ")..." success, response = register(serverName, serverPort, username, password, dsItem, useSSL=False) if success: print "\t\tDone.\n" else: successRegister = False print "ERROR:" + str(response) ## --------------------------------------------------------------------- ## Register databases ## (NOTE: Assumes database password is the same as that used to install ## arcgis server) ## --------------------------------------------------------------------- if regDatabases: for db in dbsToRegister: isManaged = dbsToRegister[db][0] registrationName = dbsToRegister[db][1] # Do not register managed database if it is for # install purposes only if isManaged and forInstallPurposeOnly: continueRegister = False else: continueRegister = True if continueRegister: success, server_db_conn = create_postgresql_db_connection_str( serverName, serverPort, username, password, serverName, db, 'sde', password, useSSL=False, token=None, encrypt_dbpassword=False) if not success: successRegister = False print "ERROR: error encountered while creating server database connection string -" print str(server_db_conn) if forInstallPurposeOnly: registrationName = registrationName + "_InstallOnly" managedStr = "" if isManaged: managedStr = "Managed" dsPath, dsItem = create_managed_entdb_item(registrationName, server_db_conn) else: managedStr = "Non-managed" if sharedDBConfig: managedStr = managedStr + " - shared" dsPath, dsItem = create_shared_entdb_item(registrationName, server_db_conn) else: managedStr = managedStr + " - replicated" success, publisher_db_conn = create_postgresql_db_connection_str( serverName, serverPort, username, password, clientServerName, db, 'sde', password, useSSL=False, token=None, encrypt_dbpassword=False) if not success: successRegister = False print "ERROR: error encountered while creating publisher database connection string -" print str(publisher_db_conn) dsPath, dsItem = create_replicated_entdb_item(registrationName, publisher_db_conn, server_db_conn) print "\t\t-Registering " + db + " database with site as " + registrationName + " (" + managedStr + ")..." success, response = register(serverName, serverPort, username, password, dsItem, useSSL=False) if success: print "\t\tDone.\n" else: successRegister = False print "ERROR:" + str(response) except: successRegister = False # Get the traceback object tb = sys.exc_info()[2] tbinfo = traceback.format_tb(tb)[0] # Concatenate information together concerning the error into a message string pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1]) # Print Python error messages for use in Python / Python Window print print "***** ERROR ENCOUNTERED *****" print pymsg + "\n" finally: # Return success flag return successRegister
def createDataStores(agsServerAccount, password, dataDrive): success = True try: opsServer = OpsServerConfig.getOpsServerRootPath(dataDrive) environmentData = OpsServerConfig.getEnvDataRootPath(dataDrive) dbConnFileRootPath = OpsServerConfig.getDBConnFileRootPath(dataDrive) print print "--Create Local Data Stores..." # Create local variables to use for both creating enterprise # geodatabases and creating connection files. dbPlatform = "POSTGRESQL" accountAuthentication = "DATABASE_AUTH" dbAdmin = "postgres" #For PostgreSQL this is the postgres superuser gdbAdminName = "sde" #For PostreSQL this must be 'sde' # 2/26/2013: Modified to dynamically search for keycodes file instead of # hardcoding to specific version of the software. #pathList = ["Program Files", "ESRI", "License10.1", "sysgen", "keycodes"] #authorizationFile = makePath("C", pathList) pathList = ["Program Files", "ESRI"] authorizationFile = findFilePath(makePath("C", pathList), "keycodes") # Create list of database names to create connection file. dbsToConnect = [] for db in dbsToCreate: dbsToConnect.append(db) # --------------------------------------------------------------------- # Create local environment data folders # --------------------------------------------------------------------- if createLocalEnvFolders: print "\n\t-Creating local environment data folders..." foldersToCreate = [] foldersToCreate.append(environmentData) foldersToCreate.append(dbConnFileRootPath) if not os.path.exists(environmentData): for folder in foldersToCreate: print "\t\tCreating folder: " + folder os.makedirs(folder) print "\t\tDone." print changeOwnership(opsServer, agsServerAccount) # --------------------------------------------------------------------- # Create local enterprise databases # --------------------------------------------------------------------- if createEnterpriseGDBs: print "\n\t-Creating local enterprise geodatabases" + \ " (this will take a few minutes)...\n" for db in dbsToCreate: print "\t\tCreating geodatabase '" + db + "'..." arcpy.CreateEnterpriseGeodatabase_management( dbPlatform, "localhost", db, accountAuthentication, dbAdmin, password, "", gdbAdminName, password, "", authorizationFile) print "\t\tDone.\n" # --------------------------------------------------------------------- # Update PostgreSQL connection file to allow remote connections # to environment databases # --------------------------------------------------------------------- if updatePostgreSQLConnectionFile: connectionFilePath = findFilePath(rootPostgreSQLPath, "pg_hba.conf") print "\n\t-Updating PostgreSQL connection file to allow remote" + \ " connections to databases..." print "\t\tFile: " + connectionFilePath # Create list of PostgreSQL connection entries postgreSQLConnEntries = [] postgreSQLConnEntries.append("host all all 0.0.0.0/0 md5") #IPv4 postgreSQLConnEntries.append("host all all ::/0 md5") #IPv6 # Determine if connection entry already exists in file for postgreSQLConnEntry in postgreSQLConnEntries: if findInFile(connectionFilePath, postgreSQLConnEntry): #Entry already exists in file so remove entry from list postgreSQLConnEntries.remove(postgreSQLConnEntry) # Add connection entries if len(postgreSQLConnEntries) > 0: hbaFile = open(connectionFilePath, 'a') for postgreSQLConnEntry in postgreSQLConnEntries: hbaFile.write("{}\n".format(postgreSQLConnEntry)) hbaFile.close() # Reload config file print "\n\t-Reloading connection file..." exeFile = findFilePath(rootPostgreSQLPath, "pg_ctl.exe") confFolder = os.path.dirname(connectionFilePath) exeCommand = "”" + exeFile + "” -D “" + confFolder + "” reload" os.popen(exeCommand) print "\t\tDone." # --------------------------------------------------------------------- # Create SDE connection files to environment geodatabases # --------------------------------------------------------------------- if createSDEConnectionFiles: print "\n\t-Creating SDE connection files..." for db in dbsToCreate: outFile = dbsToCreate[db][1] + ".sde" # Set output folder location outFolder = dbConnFileRootPath sdeFilePath = os.path.join(outFolder, outFile) # If SDE connection file already exists, delete it. if os.path.exists(sdeFilePath): print "\t\t* Deleting existing file " + sdeFilePath os.remove(sdeFilePath) print "\t\tRe-creating connection file " + sdeFilePath else: print "\t\tCreating connection file " + sdeFilePath arcpy.CreateDatabaseConnection_management( outFolder, outFile, dbPlatform, servername, accountAuthentication, gdbAdminName, password, "SAVE_USERNAME", db.lower(), "#", "TRANSACTIONAL", "sde.DEFAULT", "#") print "\t\tDone.\n" # Change ownership of sde file changeOwnership(sdeFilePath, agsServerAccount) except: success = False # Get the traceback object tb = sys.exc_info()[2] tbinfo = traceback.format_tb(tb)[0] # Concatenate information together concerning the error into a message string pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError Info:\n" + str( sys.exc_info()[1]) msgs = "ArcPy ERRORS:\n" + arcpy.GetMessages() + "\n" # Print Python error messages for use in Python / Python Window print print "***** ERROR ENCOUNTERED *****" print pymsg + "\n" print msgs finally: # Return success flag return success