diff options
Diffstat (limited to 'scripts/DeployHelpers.py')
-rw-r--r-- | scripts/DeployHelpers.py | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/scripts/DeployHelpers.py b/scripts/DeployHelpers.py new file mode 100644 index 0000000000..2c879088ff --- /dev/null +++ b/scripts/DeployHelpers.py @@ -0,0 +1,82 @@ +#coding=UTF-8 + +### Helper class for wildfly deployments. ### +# Related files $HOME/.deploy-url $HOME/.deploy-credentials + +import sys, json +try: + import requests +except Exception as e: + print("DeployHelpers depends on requests library. Install it with `pip install requests`") + sys.exit(1) +from requests.auth import HTTPDigestAuth +from os.path import join, expanduser, basename +from BuildHelpers import parser, getArgs + +parser.add_argument("--deployUrl", help="Wildfly management URL") +parser.add_argument("--deployUser", help="Deployment user", default=None) +parser.add_argument("--deployPass", help="Deployment password", default=None) + +# Helper for handling the full deployment +# name should end with .war +def deployWar(warFile, name=None): + if name is None: + name = basename(warFile).replace('.war', "-%s.war" % (getArgs().version.split('-')[0])) + + print("Deploying to context %s" % (name[:-4])) + # Undeploy/Remove old version if needed + if deploymentExists(name): + removeDeployment(name) + # Do upload war file + hash = doUploadWarFile(warFile) + # Do deployment under name + doDeploy(hash, name) + +def deploymentExists(name): + # Deployment existence check data + data = {"operation" : "read-attribute", "name": "runtime-name", "address": [{"deployment" : name}]} + result = doPostJson(url=getUrl(), auth=getAuth(), data=json.dumps(data)) + return result.json()["outcome"] == "success" + +def doDeploy(hash, name): + # Deployment data + data = {} + data["content"] = [{"hash" : hash}] + data["address"] = [{"deployment" : name}] + data["operation"] = "add" + data["enabled"] = True + return doPostJson(data=json.dumps(data), auth=getAuth(), url=getUrl()) + +# Helper for adding Content-Type to headers +def doPostJson(**kwargs): + r = requests.post(headers={"Content-Type" : "application/json"}, **kwargs) + # Wildfly gives code 500 when asking for a non-existent deployment + if r.status_code == requests.codes.ok or r.status_code == 500: + return r + r.raise_for_status() + +def doUploadWarFile(warFile): + # Upload request, just see the outcome + result = requests.post("%s/add-content" % (getUrl()), files={"file" : open(warFile, 'rb')}, auth=getAuth()).json() + if "outcome" not in result or result["outcome"] != "success": + raise Exception("File upload failed.", result) + return result["result"] + +# Method for removing an existing deployment +def removeDeployment(name): + data = {} + data["address"] = [{"deployment" : name}] + for i in ["undeploy", "remove"]: + print("%s old deployment of %s" % (i, name)) + data["operation"] = i + doPostJson(data=json.dumps(data), auth=getAuth(), url=getUrl()) + +# Read credentials file and return a HTTPDigestAuth object +def getAuth(): + args = getArgs() + return HTTPDigestAuth(args.deployUser, args.deployPass) + +# Read the deploy url file and return the url +def getUrl(): + return getArgs().deployUrl + |