def __init__(self, module): """ Constructor """ ActionBundle.__init__(self, module) # Initialize application server object appServer = ApplicationServer(module, scriptGlobals.appsrvProperties) # Generate a unique ActionBundle execution id guid = generateGUID() log.info("Unique ActionBundle execution ID generated: " + guid) # Check if Tomcat is running if getProcessPIDByPathAndIdentifier(module.targetDeploymentPath, appServer.processIdentifier): die("The Jboss server at '" + module.targetDeploymentPath + "' is up. Installation will not continue") # Since MSM is deployed on JBOSS some paths have an %s to allow a configurable # profile, so do a little sprintf to fix them sprintfOnDictionaryValues(module.relativeConfigurationFiles, module.targetDeploymentProfile) sprintfOnDictionaryValues(module.relativeCopyableFilesOrFolders, module.targetDeploymentProfile) # For JbosswebappPath = "/server/" + module.targetDeploymentProfile + "/deploy/" + module.subModule.name + ".war" # for Tomcat webappPath = "/webapps/" + module.subModule.name webappPath = "/webapps/" + module.subModule.name # Check if module exists. for k, v in module.relativeCopyableFilesOrFolders.items(): exactTargetLocation = module.targetDeploymentPath + scriptGlobals.osDirSeparator + v if exactTargetLocation.find(webappPath) != -1: if not os.path.isdir(exactTargetLocation): die( "\n\n" + module.subModule.name + " is not installed under:" + module.targetDeploymentPath + ". Please first run a clean installation" ) # Get Previous Hudson data previousManifilePath = module.targetDeploymentPath + webappPath + "/META-INF/MANIFEST.MF" previousVersionInfo = grepFile(module.versionInformationRegex, previousManifilePath) previousBuildInfo = grepFile(module.buildInformationRegex, previousManifilePath) previousRevisionInfo = grepFile(module.revisionInformationRegex, previousManifilePath) previousVersionInfo = (previousVersionInfo.replace(module.versionInformationRegex, "")).strip() if previousBuildInfo != None: previousBuildInfo = (previousBuildInfo.replace(module.buildInformationRegex, "")).strip() previousRevisionInfo = (previousRevisionInfo.replace(module.revisionInformationRegex, "")).strip() # Prepare directory to keep backups previousVersionBackupPath = createDirectoriesRecursively( scriptGlobals.workingDir + scriptGlobals.osDirSeparator + "previousVersionBackup" ) # Backup webapps if lib.OptParser.action != "install-nodb-nobackup": for k, v in module.relativeCopyableFilesOrFolders.items(): exactLocation = module.targetDeploymentPath + scriptGlobals.osDirSeparator + v exactBackupLocation = previousVersionBackupPath + scriptGlobals.osDirSeparator + k CopyDirOrFile3(exactLocation, exactBackupLocation) # Construct the email notification emailSender = readPropertyFromPropertiesFileWithFallback( "emailNotificationSenderAddress", scriptGlobals.scriptVarSectionName, lib.OptParser.options.envprops, scriptGlobals.emailNotificationSenderAddress, ) emailRecipients = scriptGlobals.globalNotificationEmailList emailSubject = ( "MSM Installation: " + module.subModule.name + "@" + getCurrentHostname() + " (" + module.friendlyServerName + ")" ) emailText = detailedUpdateInstallationReportTemplate( module.subModule.name, previousVersionInfo, lib.OptParser.options.action, getCurrentHostname(), os.getcwd(), guid, " ".join(platform.uname()), getpass.getuser(), previousBuildInfo, previousRevisionInfo, lib.OptParser.options.envprops, previousVersionInfo, previousBuildInfo, previousRevisionInfo, scriptGlobals.workingDir, ) # Email all required parties SendEmail(emailSender, emailRecipients, emailSubject, emailText, scriptGlobals.smtpHost, scriptGlobals.smtpPort)
def __init__(self, module): ''' Constructor ''' ActionBundle.__init__(self, module) # Initialize application server object # appServer = ApplicationServer(module, scriptGlobals.appsrvProperties) # Generate a unique ActionBundle execution id guid = generateGUID() log.info("Unique ActionBundle execution ID generated: " + guid) # Check if standalone is running if getProcessPIDByPathAndIdentifier(module.targetDeploymentPath, module.subModule.processIdentifier): die("\n\nThe " + module.subModule.name + " server at '" + module.targetDeploymentPath + "' is up. Installation will not continue\n") exists="true" # Check if module is already installed for k, v in module.relativeCopyableFilesOrFolders.items(): exactLocation = module.targetDeploymentPath + scriptGlobals.osDirSeparator + v if not os.path.isdir(exactLocation): exists = "false" #die(module.subModule.name + " is Not already installed to:" + module.targetDeploymentPath + ". Maybe you want to make a clean Installation !!") previousVersionInfo="" previousBuildInfo="" previousRevisionInfo="" if (exists == "true"): # Get Previous Hudson data previousManifilePath = module.targetDeploymentPath + scriptGlobals.osDirSeparator + module.subModule.name + scriptGlobals.osDirSeparator + "META-INF" + scriptGlobals.osDirSeparator + "MANIFEST.MF" previousVersionInfo = grepFile(module.versionInformationRegex, previousManifilePath) previousBuildInfo = grepFile(module.buildInformationRegex, previousManifilePath) previousRevisionInfo = grepFile(module.revisionInformationRegex, previousManifilePath) previousVersionInfo = (previousVersionInfo.replace(module.versionInformationRegex, "")).strip() previousRevisionInfo = (previousRevisionInfo.replace(module.revisionInformationRegex, "")).strip() if previousBuildInfo != None: previousBuildInfo = (previousBuildInfo.replace(module.buildInformationRegex, "")).strip() # Prepare directory to keep backups previousVersionBackupPath = createDirectoriesRecursively(scriptGlobals.workingDir + scriptGlobals.osDirSeparator + "previousVersionBackup") # Backup standalone if (lib.OptParser.action !="install-nodb-nobackup" and exists == "true"): for k, v in module.relativeCopyableFilesOrFolders.items(): exactLocation = module.targetDeploymentPath + scriptGlobals.osDirSeparator + v exactBackupLocation = previousVersionBackupPath + scriptGlobals.osDirSeparator + k CopyDirOrFile3(exactLocation, exactBackupLocation) if exactLocation.find(module.subModule.name) != -1 : DeleteDirOrFile(exactLocation) # Prepare directory to unpack package unzippedPackagePath = createDirectoriesRecursively(scriptGlobals.workingDir + scriptGlobals.osDirSeparator + "unzippedPackage") # Extract MSM package into tmp dir ExtractZipToDir(module.moduleFilename, unzippedPackagePath) # CreateDirectory(unzippedPackagePath + "/bin/" + module.subModule.name) # ExtractZipToDir(unzippedPackagePath + "/bin/" + module.subModule.name + ".war", unzippedPackagePath + "/bin/" + module.subModule.name) filenameToExtract = "META-INF/MANIFEST.MF" zipFilename = unzippedPackagePath + "/bin/" + module.subModule.name + "/lib/" + module.subModule.name +".jar" location = unzippedPackagePath + "/bin/" + module.subModule.name + "/META-INF" ExtractFileFromZipToDir(zipFilename, filenameToExtract, location) # Configure xxx.properties in tmp/../conf using envprops for k, v in module.relativeConfigurationFiles.items(): exactExtractedLocation = unzippedPackagePath + scriptGlobals.osDirSeparator + k ConfigureTemplateFile(module.name, lib.OptParser.options.envprops, exactExtractedLocation) CheckFileConfigurationIsComplete(exactExtractedLocation) # Copy relativeCopyableFilesOrFolders to specified locations on Server (values) for k, v in module.relativeCopyableFilesOrFolders.items(): exactExtractedLocation = unzippedPackagePath + scriptGlobals.osDirSeparator + k exactTargetLocation = module.targetDeploymentPath + scriptGlobals.osDirSeparator + v CopyDirOrFile(exactExtractedLocation, exactTargetLocation) # Copy tmp/../conf/xxx.properties to to specified locations on Server (values) for k, v in module.relativeConfigurationFiles.items(): exactExtractedLocation = unzippedPackagePath + scriptGlobals.osDirSeparator + k exactTargetLocation = module.targetDeploymentPath + scriptGlobals.osDirSeparator + v CopyDirOrFile(exactExtractedLocation, exactTargetLocation) if (module.subModule.name == "mrouter"): exactExtractedLocation = unzippedPackagePath + scriptGlobals.osDirSeparator + module._locations['relativeStartupScript'] ChangePathPermissions(exactExtractedLocation, 0777) CopyDirOrFile2(exactExtractedLocation, module.targetDeploymentPath) path1 = module.targetDeploymentPath + "/" + module.subModule.name + "/bin" ChangePathPermissions(path1, 0744) # Find version/revision info versionInfo = grepFile(module.versionInformationRegex, unzippedPackagePath + scriptGlobals.osDirSeparator + module.relativeVersionInformationPath) versionInfo = (versionInfo.replace(module.versionInformationRegex, "")).strip() revisionInfo = grepFile(module.revisionInformationRegex, unzippedPackagePath + scriptGlobals.osDirSeparator + module.relativeVersionInformationPath) revisionInfo = (revisionInfo.replace(module.revisionInformationRegex, "")).strip() buildInfo = grepFile(module.buildInformationRegex, unzippedPackagePath + scriptGlobals.osDirSeparator + module.relativeVersionInformationPath) if buildInfo != None: buildInfo = (buildInfo.replace(module.buildInformationRegex, "")).strip() if (lib.OptParser.action == "install-update" or lib.OptParser.action == "_customUpgrade"): moduleDeployPath = module.targetDeploymentPath + "/" + module.subModule.name path1 = moduleDeployPath + "/bin" ChangePathPermissions(path1, 0744) path2 = moduleDeployPath + "/" + module.subModule.installUpdateScript if (lib.OptParser.action == "_customUpgrade"): path2=path2 + " UPGRADE YES " else: path2=path2 + " UPDATE YES " ExecuteOSCommand(path2, None) # Construct the email notification emailSender = readPropertyFromPropertiesFileWithFallback("emailNotificationSenderAddress", scriptGlobals.scriptVarSectionName, lib.OptParser.options.envprops, scriptGlobals.emailNotificationSenderAddress) emailRecipients = scriptGlobals.globalNotificationEmailList emailSubject = "MSM Installation: " + module.name + "@"+ getCurrentHostname() + " (" + module.friendlyServerName + ")" emailText = detailedUpdateInstallationReportTemplate(module.subModule.name, versionInfo, lib.OptParser.options.action, getCurrentHostname(), os.getcwd(), guid, " ".join(platform.uname()), getpass.getuser(), buildInfo, revisionInfo, lib.OptParser.options.envprops, previousVersionInfo, previousBuildInfo, previousRevisionInfo, scriptGlobals.workingDir) # Email all required parties SendEmail(emailSender, emailRecipients, emailSubject, emailText, scriptGlobals.smtpHost, scriptGlobals.smtpPort)
def __init__(self, module): """ Constructor """ ActionBundle.__init__(self, module) # Initialize application server object appServer = ApplicationServer(module, scriptGlobals.appsrvProperties) # Generate a unique ActionBundle execution id guid = generateGUID() log.info("Unique ActionBundle execution ID generated: " + guid) # Check if Tomcat is running if getProcessPIDByPathAndIdentifier(module.targetDeploymentPath, appServer.processIdentifier): die("\n\nThe Jboss server at '" + module.targetDeploymentPath + "' is up. Installation will not continue") # Since MSM is deployed on JBOSS some paths have an %s to allow a configurable # profile, so do a little sprintf to fix them sprintfOnDictionaryValues(module.relativeConfigurationFiles, module.targetDeploymentProfile) sprintfOnDictionaryValues(module.relativeCopyableFilesOrFolders, module.targetDeploymentProfile) # For JbosswebappPath = "/server/" + module.targetDeploymentProfile + "/deploy/" + module.subModule.name + ".war" # for Tomcat webappPath = "/webapps/" + module.subModule.name webappPath = "/webapps/" + module.subModule.name exists = "true" # Check if module exists. for k, v in module.relativeCopyableFilesOrFolders.items(): exactTargetLocation = module.targetDeploymentPath + scriptGlobals.osDirSeparator + v if exactTargetLocation.find(webappPath) != -1: if not os.path.isdir(exactTargetLocation): exists = "false" previousVersionInfo = "" previousBuildInfo = "" previousRevisionInfo = "" if exists == "true": # Get Previous Hudson data previousManifilePath = module.targetDeploymentPath + webappPath + "/META-INF/MANIFEST.MF" previousVersionInfo = grepFile(module.versionInformationRegex, previousManifilePath) previousBuildInfo = grepFile(module.buildInformationRegex, previousManifilePath) previousRevisionInfo = grepFile(module.revisionInformationRegex, previousManifilePath) previousVersionInfo = (previousVersionInfo.replace(module.versionInformationRegex, "")).strip() previousRevisionInfo = (previousRevisionInfo.replace(module.revisionInformationRegex, "")).strip() if previousBuildInfo != None: previousBuildInfo = (previousBuildInfo.replace(module.buildInformationRegex, "")).strip() # Prepare directory to keep backups previousVersionBackupPath = createDirectoriesRecursively( scriptGlobals.workingDir + scriptGlobals.osDirSeparator + "previousVersionBackup" ) # Backup webapps if (lib.OptParser.action != "install-nodb-nobackup") and (exists == "true"): for k, v in module.relativeCopyableFilesOrFolders.items(): exactLocation = module.targetDeploymentPath + scriptGlobals.osDirSeparator + v exactBackupLocation = previousVersionBackupPath + scriptGlobals.osDirSeparator + k CopyDirOrFile3(exactLocation, exactBackupLocation) if exactLocation.find(webappPath) != -1: DeleteDirOrFile(exactLocation) # Prepare directory to unpack package unzippedPackagePath = createDirectoriesRecursively( scriptGlobals.workingDir + scriptGlobals.osDirSeparator + "unzippedPackage" ) # Extract MSM package into tmp dir ExtractZipToDir(module.moduleFilename, unzippedPackagePath) CreateDirectory(unzippedPackagePath + "/bin/" + module.subModule.name) ExtractZipToDir( unzippedPackagePath + "/bin/" + module.subModule.name + ".war", unzippedPackagePath + "/bin/" + module.subModule.name, ) # Configure xxx.properties in tmp/../conf using envprops for k, v in module.relativeConfigurationFiles.items(): exactExtractedLocation = unzippedPackagePath + scriptGlobals.osDirSeparator + k ConfigureTemplateFile(module.name, lib.OptParser.options.envprops, exactExtractedLocation) CheckFileConfigurationIsComplete(exactExtractedLocation) # Copy relativeCopyableFilesOrFolders to specified locations on Server (values) for k, v in module.relativeCopyableFilesOrFolders.items(): exactExtractedLocation = unzippedPackagePath + scriptGlobals.osDirSeparator + k exactTargetLocation = module.targetDeploymentPath + scriptGlobals.osDirSeparator + v CopyDirOrFile(exactExtractedLocation, exactTargetLocation) # Copy tmp/../conf/xxx.properties to to specified locations on Server (values) for k, v in module.relativeConfigurationFiles.items(): exactExtractedLocation = unzippedPackagePath + scriptGlobals.osDirSeparator + k exactTargetLocation = module.targetDeploymentPath + scriptGlobals.osDirSeparator + v CopyDirOrFile(exactExtractedLocation, exactTargetLocation) # Find version/revision info revisionInfo = grepFile( module.revisionInformationRegex, unzippedPackagePath + scriptGlobals.osDirSeparator + module.relativeVersionInformationPath, ) revisionInfo = (revisionInfo.replace(module.revisionInformationRegex, "")).strip() versionInfo = grepFile( module.versionInformationRegex, unzippedPackagePath + scriptGlobals.osDirSeparator + module.relativeVersionInformationPath, ) versionInfo = (versionInfo.replace(module.versionInformationRegex, "")).strip() buildInfo = grepFile( module.buildInformationRegex, unzippedPackagePath + scriptGlobals.osDirSeparator + module.relativeVersionInformationPath, ) if buildInfo != None: buildInfo = (buildInfo.replace(module.buildInformationRegex, "")).strip() # CREATE/UPDATE/UPGRADE script if lib.OptParser.action == "install-update" or lib.OptParser.action == "_customUpgrade": if module.subModule.installUpdateScript != "": path2 = module.targetDeploymentPath + webappPath + "/" + module.subModule.installUpdateScript ChangePathPermissions(path2, 0744) if lib.OptParser.action == "_customUpgrade": path2 = path2 + " UPGRADE YES " else: path2 = path2 + " UPDATE YES " ExecuteOSCommand(path2, None) # Construct the email notification emailSender = readPropertyFromPropertiesFileWithFallback( "emailNotificationSenderAddress", scriptGlobals.scriptVarSectionName, lib.OptParser.options.envprops, scriptGlobals.emailNotificationSenderAddress, ) emailRecipients = scriptGlobals.globalNotificationEmailList emailSubject = ( "MSM Installation: " + module.subModule.name + "@" + getCurrentHostname() + " (" + module.friendlyServerName + ")" ) emailText = detailedUpdateInstallationReportTemplate( module.subModule.name, versionInfo, lib.OptParser.options.action, getCurrentHostname(), os.getcwd(), guid, " ".join(platform.uname()), getpass.getuser(), buildInfo, revisionInfo, lib.OptParser.options.envprops, previousVersionInfo, previousBuildInfo, previousRevisionInfo, scriptGlobals.workingDir, ) # Email all required parties SendEmail(emailSender, emailRecipients, emailSubject, emailText, scriptGlobals.smtpHost, scriptGlobals.smtpPort)
def __init__(self, module): ''' Constructor ''' ActionBundle.__init__(self, module) # Generate a unique ActionBundle execution id guid = generateGUID() log.info("Unique ActionBundle execution ID generated: " + guid) # Check if standalone is running if getProcessPIDByPathAndIdentifier(module.targetDeploymentPath, module.subModule.processIdentifier): die("\n\nThe " + module.subModule.name + " server at '" + module.targetDeploymentPath + "' is up. Configuration will not continue\n") # Check if module is already installed for k, v in module.relativeCopyableFilesOrFolders.items(): exactLocation = module.targetDeploymentPath + scriptGlobals.osDirSeparator + v if not os.path.isdir(exactLocation): die(module.subModule.name + " is Not already installed to:" + module.targetDeploymentPath + ". Maybe you want to make a clean Installation !!") # Get Previous Hudson data previousManifilePath = module.targetDeploymentPath + scriptGlobals.osDirSeparator + module.subModule.name + scriptGlobals.osDirSeparator + "META-INF" + scriptGlobals.osDirSeparator + "MANIFEST.MF" previousVersionInfo = grepFile(module.versionInformationRegex, previousManifilePath) previousBuildInfo = grepFile(module.buildInformationRegex, previousManifilePath) previousRevisionInfo = grepFile(module.revisionInformationRegex, previousManifilePath) previousVersionInfo = (previousVersionInfo.replace(module.versionInformationRegex, "")).strip() if previousBuildInfo != None: previousBuildInfo = (previousBuildInfo.replace(module.buildInformationRegex, "")).strip() previousRevisionInfo = (previousRevisionInfo.replace(module.revisionInformationRegex, "")).strip() # Prepare directory to keep backups previousVersionBackupPath = createDirectoriesRecursively(scriptGlobals.workingDir + scriptGlobals.osDirSeparator + "previousVersionBackup") # Backup standalone for k, v in module.relativeCopyableFilesOrFolders.items(): exactLocation = module.targetDeploymentPath + scriptGlobals.osDirSeparator + v exactBackupLocation = previousVersionBackupPath + scriptGlobals.osDirSeparator + k CopyDirOrFile3(exactLocation, exactBackupLocation) # if exactLocation.find(module.subModule.name) != -1 : # DeleteDirOrFile(exactLocation) # Prepare directory to unpack package unzippedPackagePath = createDirectoriesRecursively(scriptGlobals.workingDir + scriptGlobals.osDirSeparator + "unzippedPackage") # Extract MSM package into tmp dir ExtractZipToDir(module.moduleFilename, unzippedPackagePath) filenameToExtract = "META-INF/MANIFEST.MF" zipFilename = unzippedPackagePath + "/bin/" + module.subModule.name + "/lib/" + module.subModule.name +".jar" location = unzippedPackagePath + "/bin/" + module.subModule.name + "/META-INF" ExtractFileFromZipToDir(zipFilename, filenameToExtract, location) # Configure xxx.properties in tmp/../conf using envprops for k, v in module.relativeConfigurationFiles.items(): exactExtractedLocation = unzippedPackagePath + scriptGlobals.osDirSeparator + k ConfigureTemplateFile(module.name, lib.OptParser.options.envprops, exactExtractedLocation) CheckFileConfigurationIsComplete(exactExtractedLocation) # Copy tmp/../conf/xxx.properties to to specified locations on Server (values) for k, v in module.relativeConfigurationFiles.items(): exactExtractedLocation = unzippedPackagePath + scriptGlobals.osDirSeparator + k exactTargetLocation = module.targetDeploymentPath + scriptGlobals.osDirSeparator + v CopyDirOrFile(exactExtractedLocation, exactTargetLocation) # Construct the email notification emailSender = readPropertyFromPropertiesFileWithFallback("emailNotificationSenderAddress", scriptGlobals.scriptVarSectionName, lib.OptParser.options.envprops, scriptGlobals.emailNotificationSenderAddress) emailRecipients = scriptGlobals.globalNotificationEmailList emailSubject = "MSM Installation: " + module.name + "@"+ getCurrentHostname() + " (" + module.friendlyServerName + ")" emailText = detailedUpdateInstallationReportTemplate(module.subModule.name, previousVersionInfo, lib.OptParser.options.action, getCurrentHostname(), os.getcwd(), guid, " ".join(platform.uname()), getpass.getuser(), previousBuildInfo, previousRevisionInfo, lib.OptParser.options.envprops, previousVersionInfo, previousBuildInfo, previousRevisionInfo, scriptGlobals.workingDir) # Email all required parties SendEmail(emailSender, emailRecipients, emailSubject, emailText, scriptGlobals.smtpHost, scriptGlobals.smtpPort)