Skip to content

Instantly share code, notes, and snippets.

@DemkaAge
Created September 18, 2014 11:55
Show Gist options
  • Save DemkaAge/8b3c63f2d0683e5ceb02 to your computer and use it in GitHub Desktop.
Save DemkaAge/8b3c63f2d0683e5ceb02 to your computer and use it in GitHub Desktop.
import sys
import os
import time
from java.io import BufferedReader
from java.io import InputStreamReader
from java.lang import ProcessBuilder
from java.lang import System
def exists(appName):
appId = AdminConfig.getid("/Deployment:" + appName + "/")
return len(appId) > 0
#endDef
def installEarFile(nodeName, serverName, appName,fileName):
print "---------------------------------------------------------------"
print " AdminApplication: Deploy application with -deployejb option"
print " Application name: " + appName
print " Ear file to deploy: " + fileName
print " Node name: " + nodeName
print " Server name: " + serverName
print "---------------------------------------------------------------"
opts = ["-appname", appName, "-node", nodeName, "-server", serverName,
"-deployejb -defaultbinding.virtual.host default_host -usedefaultbindings -deployws"]
#opts += mapRolesToUsers(server, app)
#opts += mapRunAsRolesToUsers(server, app)
AdminApp.install(fileName, opts)
#AdminApp.edit(appName, getEjbEnvMaps(server, app))
AdminConfig.save()
return 1 #succeed
#endDef
def startApplicationOnSingleServer(cellName, nodeName, serverName, appName):
print "---------------------------------------------------------------"
print " AdminApplication: Start an application on a single server "
print " Application name: " + appName
print " Node name: " + nodeName
print " Server name: " + serverName
print " Cell name: " + cellName
print "---------------------------------------------------------------"
print " Query server for app status."
# Query server
result = AdminApp.isAppReady(appName)
counter = 0
while (result == "false"):
counter = counter +1
#TimeOut
if counter >=20:
print " TimeOut. App not ready. Please run manual."
return -1
### Wait 5 seconds before checking again
time.sleep(5)
result = AdminApp.isAppReady(appName)
print " Try count " + str(counter)
print " Application is ready."
# Query application MBean on specific process
runningApp = AdminControl.queryNames("type=Application,name="+appName+",cell="+cellName+",node="+nodeName+",process="+serverName+",*")
if(len(runningApp) <= 0):
print " Starting application..."
# Query application manager mbean
appManager = AdminControl.queryNames(
"cell=" + cellName + ",node=" + nodeName + ",type=ApplicationManager,process=" + serverName + ",*")
AdminControl.invoke(appManager, "startApplication", appName)
return 1 # succeed
#endDef
print "---------------------------Welcome-----------------------------"
artifactDirectory = sys.argv[0]
serverName = sys.argv[1]
nodeName = sys.argv[2]
cellName = sys.argv[3]
for file in os.listdir(artifactDirectory):
if file.endswith(".ear"):
artifact = file
splitName = os.path.splitext(artifact)
appName = splitName[0]
extension = splitName[1]
print " Artifact directory: " + artifactDirectory
print " Artifact: " + artifact
print " ServerName: " + serverName
print " NodeName: " + nodeName
print " CellName: " + cellName
print " AppName: " + appName
print " Extension: " + extension
print "---------------------------------------------------------------"
if exists(appName):
print " App exists. Updating..."
#AdminApp.uninstall(appName)
opts = ["-operation update -contents", artifactDirectory + "/" + artifact]
AdminApp.update(appName,"app",opts)
AdminConfig.save()
else:
print " App not exists. Installing..."
installEarFile(nodeName, serverName,appName,artifactDirectory + "/" + artifact)
startApplicationOnSingleServer(cellName,nodeName,serverName,appName)
print "---------------------------END----------------------------------"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment