3361N/A<?xml version="1.0" encoding="UTF-8" standalone="no"?>
3361N/A<!DOCTYPE stax SYSTEM "/stax.dtd">
3361N/A<!--
3361N/A ! CDDL HEADER START
3361N/A !
3361N/A ! The contents of this file are subject to the terms of the
3361N/A ! Common Development and Distribution License, Version 1.0 only
3361N/A ! (the "License"). You may not use this file except in compliance
3361N/A ! with the License.
3361N/A !
3361N/A ! You can obtain a copy of the license at
3361N/A ! trunk/opends/resource/legal-notices/OpenDS.LICENSE
3361N/A ! or https://OpenDS.dev.java.net/OpenDS.LICENSE.
3361N/A ! See the License for the specific language governing permissions
3361N/A ! and limitations under the License.
3361N/A !
3361N/A ! When distributing Covered Code, include this CDDL HEADER in each
3361N/A ! file and include the License file at
3361N/A ! trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
3361N/A ! add the following below this CDDL HEADER, with the fields enclosed
3361N/A ! by brackets "[]" replaced with your own identifying information:
3361N/A ! Portions Copyright [yyyy] [name of copyright owner]
3361N/A !
3361N/A ! CDDL HEADER END
3361N/A !
5065N/A ! Portions Copyright 2008-2010 Sun Microsystems, Inc.
3361N/A! -->
3361N/A<stax>
3361N/A
3379N/A <function name="createWebcontainer" scope="local">
3361N/A <function-prolog>
3361N/A This function creates a default webcontainer instance
3361N/A </function-prolog>
3379N/A
3379N/A <function-map-args>
3379N/A <function-arg-def name="location" type="optional" default="STAF_REMOTE_HOSTNAME">
3379N/A <function-arg-description>
3379N/A Location of target host
3379N/A </function-arg-description>
3379N/A <function-arg-property name="type" value="hostname"/>
3379N/A </function-arg-def>
3379N/A <function-arg-def name="wcPath" type="optional" default="'%s' % WC_DIRECTORY">
3379N/A <function-arg-description>
3379N/A Pathname to installation root
3379N/A </function-arg-description>
3379N/A <function-arg-property name="type" value="filepath"/>
3379N/A </function-arg-def>
3379N/A </function-map-args>
3379N/A
3361N/A <try>
3361N/A
3361N/A <sequence>
3392N/A
3392N/A <script>
3392N/A mylocation=location
3392N/A </script>
3361N/A
3392N/A <!-- Copy webcontainer zip archive to remote host -->
3392N/A <message>
3392N/A 'Copy webcontainer %s to host %s' % (WC_ZIPNAME,location)
3392N/A </message>
3392N/A <call function="'copyFile'">
3392N/A { 'location' : STAXServiceMachine,
3392N/A 'srcfile' : '%s/%s' % (WC_ZIPPATH,WC_ZIPNAME),
3392N/A 'destfile' : '%s/%s' % (wcPath,WC_ZIPNAME),
3392N/A 'remotehost' : mylocation
3392N/A }
3392N/A </call>
3392N/A
3361N/A <!-- Unzip webcontainer into temporary folder -->
3361N/A <message>
3379N/A 'Extract temporary webcontainer zip archive to %s %s.' % (location, wcPath)
3361N/A </message>
3361N/A <call function="'unZipFile'">
3392N/A { 'location' : mylocation,
3392N/A 'zipfile' : '%s/%s' % (wcPath,WC_ZIPNAME),
3392N/A 'unzipdir' : '%s' % wcPath }
3361N/A </call>
3392N/A
3585N/A <!-- generate SSL certificate -->
3585N/A
4978N/A <!-- Check if 'webcontainer Certificate' file exists -->
3889N/A <call function="'GetEntry'">
3889N/A {
3889N/A 'location' : STAXServiceMachine,
5105N/A 'entry' : '%s/HttpCertificate' % TMPDIR,
3889N/A 'attribute' : 'TYPE'
3585N/A }
3585N/A </call>
4978N/A <!-- 'WCCertificate' file does not exist so generate it -->
3889N/A <if expr="RC == 48">
4978N/A <sequence>
4978N/A <!-- working arround sunwebserver migrate-jks-certs issue 6393534
4978N/A by, making the alias be 'cn=sunwebserver' -->
4978N/A <call function="'runCommand'">
4978N/A { 'name' : 'Generate a Certificate',
4978N/A 'location' : STAXServiceMachine,
4978N/A 'command' : '%s/bin/keytool' % (LOCAL_JAVA_HOME),
4978N/A 'arguments' : '-genkey -alias %s -keyalg rsa \
4978N/A -dname "cn=%s,O=Sun Microsystems,C=US" \
5105N/A -keystore "%s/HttpCertificate" \
4978N/A -storepass "changeit" -keypass "changeit" \
5105N/A -storetype JKS ' % (WC_TYPE, WC_TYPE, TMPDIR),
4978N/A 'path' : '%s/bin' % (LOCAL_JAVA_HOME),
4978N/A 'expectedRC': 0
4978N/A }
4978N/A </call>
4978N/A </sequence>
3889N/A </if>
4978N/A <!-- copying cert File over -->
4978N/A <message>
5105N/A 'copying %s/HttpCertificate to %s/HttpCertificate' % (TMPDIR,wcPath)
4978N/A </message>
3585N/A <call function="'copyFile'">
3585N/A { 'location' : STAXServiceMachine,
5105N/A 'srcfile' : '%s/HttpCertificate' % TMPDIR,
5105N/A 'destfile' : '%s/HttpCertificate' % wcPath,
3585N/A 'remotehost' : mylocation
3585N/A }
3585N/A </call>
4978N/A
4978N/A
4978N/A <if expr="WC_TYPE == 'tomcat'">
4978N/A <sequence>
4978N/A <!-- chmod +x all the .sh file in tomcat bin directory -->
4978N/A <stafcmd name="'make tomcat shell scripts executable'">
4978N/A <location>'%s' % mylocation</location>
4978N/A <service>'fs'</service>
4978N/A <request>' LIST DIRECTORY %s/apache-%s-%s/bin EXT sh' % \
4978N/A (wcPath, WC_TYPE, WC_VERSION)</request>
4978N/A </stafcmd>
4978N/A <script>
4978N/A shFilesRC=RC
4978N/A shFilesResult=" ".join(STAFResult)
4978N/A </script>
4978N/A <message>'shFilesResult=%s' % shFilesResult</message>
4978N/A <process name="'chmod +x tomcat\'s shell scripts'">
4978N/A <location>'%s' % mylocation</location>
4978N/A <command mode="'shell'">'chmod +x %s' % shFilesResult</command>
4978N/A <parms/>
4978N/A <workdir>'%s/apache-%s-%s/bin' % (wcPath, WC_TYPE, WC_VERSION)</workdir>
4978N/A <envs>['PATH=/bin:/usr/bin']</envs>
4978N/A <stderr mode="'stdout'"/>
4978N/A <stdout/>
4978N/A <returnstdout/>
4978N/A </process>
4978N/A
4978N/A <!-- configure webcontainer's PORTs -->
4978N/A <message>
4978N/A 'Configure webcontainer ports HTTP %s / HTTPS %s' % (WC_PORT, WC_SSL_PORT)
4978N/A </message>
4978N/A <stafcmd name="'get tomcat configuration file'">
4978N/A <location>'%s' % mylocation</location>
4978N/A <service>'fs'</service>
4978N/A <request>' GET FILE %s/apache-%s-%s/conf/server.xml ' % \
4978N/A (wcPath, WC_TYPE, WC_VERSION)</request>
4978N/A </stafcmd>
4978N/A <script>
4978N/A serverXmlInput=STAFResult
4978N/A import re
4978N/A # update the HTTP / HTTPS ports
4978N/A portRegEx = re.compile('8080')
4978N/A sslPortRegEx = re.compile('8443')
4978N/A content=portRegEx.sub(WC_PORT, serverXmlInput)
4978N/A content=sslPortRegEx.sub(WC_SSL_PORT, content)
4978N/A
4978N/A # enable the SSL port
4978N/A sslConnectorRegEx = re.compile('&lt;Service name="Catalina"&gt;')
4978N/A SSL_CONNECTOR = '&lt;Service name="Catalina"&gt;\n \
4978N/A &lt;Connector port="%s" protocole="HTTP/1.1" \
4978N/A SSLEnabled="true" maxThreads="150" scheme="https" secure="true" \
4978N/A clientAuth="false" sslProtocol="SSL" \
5105N/A keystoreFile="%s/HttpCertificate" \
4978N/A keyAlias="%s" \
4978N/A keystorePass="changeit" /&gt;' % \
5105N/A (WC_SSL_PORT, wcPath, WC_TYPE)
4978N/A content=sslConnectorRegEx.sub(SSL_CONNECTOR, content)
4978N/A serverXmlOutput=open('%s/%s-apache-%s-%s_server.xml' % \
4978N/A (local.temp,STAF_REMOTE_HOSTNAME,WC_TYPE,WC_VERSION),'w')
4978N/A serverXmlOutput.write(content)
4978N/A serverXmlOutput.close()
4978N/A </script>
4978N/A <call function="'copyFile'">
4978N/A {'srcfile' : '%s/%s-apache-%s-%s_server.xml' % (local.temp, STAF_REMOTE_HOSTNAME, WC_TYPE, WC_VERSION),
4978N/A 'destfile' : '%s/apache-%s-%s/conf/server.xml' % (wcPath, WC_TYPE, WC_VERSION),
4978N/A 'remotehost' : '%s' % STAF_REMOTE_HOSTNAME
4978N/A }
4978N/A </call>
5065N/A <call function="'copyFile'">
5065N/A { 'srcfile' : '%/ext/emma/lib/emma.jar' % TESTS_ROOT,
5065N/A 'destfile' : '%s/apache-%s-%s/lib/emma.jar' % (wcPath, WC_TYPE, WC_VERSION),
5065N/A 'remotehost' : '%s' % STAF_REMOTE_HOSTNAME
5065N/A }
5065N/A </call>
4978N/A <if expr="RC != 0">
4978N/A <return>RC</return>
4978N/A </if>
4978N/A </sequence>
4978N/A <elseif expr="WC_TYPE == 'glassfish'">
4978N/A <sequence>
4978N/A <!-- configure webcontainer's PORTs -->
4978N/A <message>
4978N/A 'Configure webcontainer ports HTTP %s / HTTPS %s' % (WC_PORT, WC_SSL_PORT)
4978N/A </message>
4978N/A <script>
4978N/A # create a glassfish batch command file
4978N/A asadminCmds = ["delete-jvm-options -Djavax.net.ssl.keyStore=${com.sun.aas.instanceRoot}/config/keystore.jks",
5105N/A "create-jvm-options -Djavax.net.ssl.keyStore=%s/HttpCertificate:-Djavax.net.ssl.keyStorePassword=changeit" % wcPath,
4978N/A "delete-http-listener http-listener-1",
4978N/A "delete-http-listener http-listener-2",
4978N/A "create-http-listener -e --enabled=true --listenerport %s --listeneraddress %s --defaultvs server httpListener" % (WC_PORT, STAF_REMOTE_HOSTNAME),
4978N/A "create-http-listener -e --enabled=true --listenerport %s --listeneraddress %s --defaultvs server httpsListener" % (WC_SSL_PORT, STAF_REMOTE_HOSTNAME),
4978N/A "create-ssl --type http-listener --certname %s httpsListener" % WC_TYPE
4978N/A ]
4978N/A asadminBatchFile = open(os.path.join(local.temp,'asadminWebContainerConfig'),'w')
4978N/A # FIXME - had to resort to workarround that somce create-http-listener didn't work when in the batchfile
4978N/A # batch only the delete-jvm-options / create-jvm-options, the rest is done one asadmin cmdline at a time
4978N/A asadminBatchFile.write('\n'.join(asadminCmds[:2]))
4978N/A asadminBatchFile.write('\n')
4978N/A asadminBatchFile.flush()
4978N/A asadminBatchFile.close()
4978N/A </script>
4978N/A <call function="'copyFile'">
4978N/A {'srcfile' : '%s/asadminWebContainerConfig' % (local.temp),
4978N/A 'destfile' : '%s/asadminWebContainerConfig' % (remote.temp),
4978N/A 'remotehost' : '%s' % STAF_REMOTE_HOSTNAME
4978N/A }
4978N/A </call>
4978N/A <if expr="RC != 0">
4978N/A <return>RC</return>
4978N/A </if>
4978N/A <message>'Starting glassfish to enable administration'</message>
4978N/A <script>
4978N/A STAFCmd = None
4978N/A STAFCmdEnv = None
4978N/A if wcPath:
4978N/A wcBinPath=os.path.join(wcPath, 'glassfishv3','bin')
4978N/A STAFCmd='%s/asadmin' % wcBinPath
4978N/A STAFCmdEnv=['PATH=%s/bin:/bin:/usr/bin' % JAVA_HOME, 'JAVA_HOME=%s' % JAVA_HOME]
4978N/A </script>
4978N/A
4978N/A <message>
4978N/A '%s' % STAFCmd
4978N/A </message>
4978N/A
4978N/A <call function="'runCommand'">
4978N/A { 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'command' : STAFCmd,
4978N/A 'envCmd' : STAFCmdEnv,
4978N/A 'arguments' : 'start-domain',
4978N/A 'name' : STAFCmd,
4978N/A 'path' : wcBinPath
4978N/A }
4978N/A </call>
4978N/A <message>'Configuring glassfish ports and certificate'</message>
4978N/A <script>
4978N/A if wcPath:
4978N/A wcBinPath=os.path.join(wcPath, 'glassfishv3','bin')
4978N/A STAFCmd='%s/asadmin' % wcBinPath
4978N/A STAFCmdEnv=['PATH=%s/bin:/bin:/usr/bin' % JAVA_HOME, 'JAVA_HOME=%s' % JAVA_HOME]
4978N/A STAFCmdArgs=' '.join(['multimode',
4978N/A '--file',
4978N/A '%s/asadminWebContainerConfig' % (remote.temp)])
4978N/A </script>
4978N/A
4978N/A <message>
4978N/A '%s' % STAFCmd
4978N/A </message>
4978N/A
4978N/A <call function="'runCommand'">
4978N/A { 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'command' : STAFCmd,
4978N/A 'arguments' : STAFCmdArgs,
4978N/A 'envCmd' : STAFCmdEnv,
4978N/A 'name' : STAFCmd,
4978N/A 'path' : wcBinPath
4978N/A }
4978N/A </call>
4978N/A <if expr="RC != 0">
4978N/A <sequence>
4978N/A <message>
4978N/A 'failed configuring glassfish with STAXResult=[%s]' % STAXResult
4978N/A </message>
4978N/A <return>RC</return>
4978N/A </sequence>
4978N/A </if>
4978N/A <iterate var="cfgItem" in="asadminCmds[2:]">
4978N/A <sequence>
4978N/A <message> 'configure with cfgItem=%s' % cfgItem </message>
4978N/A <call function="'runCommand'">
4978N/A { 'location' : location,
4978N/A 'command' : STAFCmd,
4978N/A 'arguments' : cfgItem,
4978N/A 'envCmd' : STAFCmdEnv,
4978N/A 'name' : STAFCmd,
4978N/A 'path' : wcBinPath
4978N/A }
4978N/A </call>
4978N/A <if expr="RC != 0">
4978N/A <sequence>
4978N/A <message>
4978N/A 'failed configuring glassfish with STAXResult=[%s]' % STAXResult
4978N/A </message>
4978N/A <return>RC</return>
4978N/A </sequence>
4978N/A </if>
4978N/A </sequence>
4978N/A </iterate>
4978N/A <message>'Stopping glassfish '</message>
4978N/A <script>
4978N/A if wcPath:
4978N/A wcBinPath=os.path.join(wcPath, 'glassfishv3','bin')
4978N/A STAFCmd='%s/asadmin' % wcBinPath
4978N/A STAFCmdEnv=['PATH=%s/bin:/bin:/usr/bin' % JAVA_HOME,\
4978N/A 'JAVA_HOME=%s' % JAVA_HOME]
4978N/A </script>
4978N/A
4978N/A <message>
4978N/A '%s' % STAFCmd
4978N/A </message>
4978N/A
4978N/A <call function="'runCommand'">
4978N/A { 'location' : location,
4978N/A 'command' : STAFCmd,
4978N/A 'arguments' : 'stop-domain',
4978N/A 'envCmd' : STAFCmdEnv,
4978N/A 'name' : STAFCmd,
4978N/A 'path' : wcBinPath
4978N/A }
4978N/A </call>
4978N/A </sequence>
4978N/A </elseif>
4978N/A <elseif expr="WC_TYPE == 'sunwebserver'">
4978N/A <sequence>
4978N/A <!-- generate a statefile -->
4978N/A <call function="'GetVar'">
4978N/A {
4978N/A 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'type' : 'system',
4978N/A 'variable' : 'STAF/Env/USER'
4978N/A }
4978N/A </call>
4978N/A <script>
4978N/A wcUser = STAFResult
4978N/A print 'sunwebserver as user : %s' % wcUser
4978N/A STAFCmd = os.path.join(wcPath,'setup')
4978N/A </script>
4978N/A <call function="'runCommand'">
4978N/A { 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'name' : 'getting SunWebserver ID',
4978N/A 'command' : STAFCmd,
4978N/A 'arguments' : '--id',
4978N/A 'path' : wcPath,
4978N/A }
4978N/A </call>
4978N/A <script>
4978N/A sunWebserverID = STAXResult[0][1]
4978N/A stateFileList = [ '[STATE_BEGIN Sun Java System Web Server %s]' % sunWebserverID.strip(),
4978N/A 'defaultInstallDirectory = /sun/webserver7',
4978N/A 'currentInstallDirectory = %s/%s-%s' % (wcPath, WC_TYPE, WC_VERSION),
4978N/A 'UPGRADE = false',
4978N/A 'SELECTED_COMPONENTS = admincli,svrcore,devsupport',
4978N/A 'USE_BUNDLED_JDK = true',
4978N/A 'JDK_LOCATION = ',
4978N/A 'IS_ADMIN_NODE = false',
4978N/A 'STARTUP_ONBOOT = false',
4978N/A 'CREATE_SERVICE = ',
4978N/A 'ADMIN_HOST = %s' % STAF_REMOTE_HOSTNAME,
4978N/A 'ADMIN_SSL_PORT = 8989', #FIXME need to define a new port
4978N/A 'ADMIN_PORT = ',
4978N/A 'ADMIN_UID = %s' % wcUser,
4978N/A 'ADMIN_NAME = admin',
4978N/A 'ADMIN_PASSWD = password',
4978N/A 'NODE_HOST = ',
4978N/A 'NODE_SSL_PORT = ',
4978N/A 'REGISTER_NODE = ',
4978N/A 'WEB_SERVERNAME = %s' % STAF_REMOTE_HOSTNAME,
4978N/A 'WEB_PORT = %s' % WC_PORT,
4978N/A 'WEB_UID = %s ' % wcUser,
4978N/A 'WEB_DOCROOT = ',
4978N/A 'SIXTYFOURBIT_INSTALL = false', # FIXME we could figure out this with a call to java -d 64
4978N/A 'CONFIG_NAME = %s ' % STAF_REMOTE_HOSTNAME,
4978N/A 'SKIP_INSTANCE_CREATION = ',
4978N/A 'START_ADMIN = true',
4978N/A '[STATE_DONE Sun Java System Web Server %s]' % sunWebserverID.strip(),
4978N/A ]
4978N/A print 'sunwebserver install statefile %s' % '\n'.join(stateFileList)
4978N/A silentFilename = 'sunwebserver.statefile'
5105N/A silentFd = open(os.path.join(local.temp,silentFilename),'w')
4978N/A silentFd.write('\n'.join(stateFileList))
4978N/A silentFd.flush()
4978N/A silentFd.close()
4978N/A silentFilePath = os.path.join(wcPath, silentFilename)
4978N/A STAFCmdArgs = '--silent %s' % silentFilePath
4978N/A </script>
4978N/A <call function="'copyFile'">
4978N/A { 'location' : STAXServiceMachine,
5105N/A 'srcfile' : '%s' % os.path.join(local.temp,silentFilename),
4978N/A 'destfile' : '%s' % silentFilePath,
4978N/A 'remotehost' : STAF_REMOTE_HOSTNAME,
4978N/A }
4978N/A </call>
4978N/A <call function="'runCommand'">
4978N/A { 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'name' : 'Setup SunWebserver silent mode',
4978N/A 'command' : STAFCmd,
4978N/A 'arguments' : STAFCmdArgs,
4978N/A 'path' : wcPath,
4978N/A }
4978N/A </call>
4978N/A <if expr="RC != 0">
4978N/A <sequence>
4978N/A
4978N/A <message>'Failed to setup the %s-%s, backing setup log' % (WC_TYPE, WC_VERSION)</message>
4978N/A <script>
4978N/A backupType='Setup'
4978N/A srcDir = os.path.join(wcPath, '%s-%s' % (WC_TYPE, WC_VERSION), 'setup')
4978N/A destDir = os.path.join(local.temp,'%s%sBackup' % (WC_TYPE, backupType))
4978N/A </script>
4978N/A <call function="'runSTAFCommand'">
4978N/A { 'name' : 'backup webapps WEB-INF files',
4978N/A 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'service' : 'FS',
4978N/A 'request' : 'COPY ',
4978N/A 'arguments' : 'DIRECTORY %s TODIRECTORY %s TOMACHINE %s RECURSE' % (srcDir, destDir, STAXServiceMachine)
4978N/A }
4978N/A </call>
4978N/A
4978N/A <if expr="RC != 0">
4978N/A <sequence>
4978N/A <message>'Failed to backup %s-%s setup log file' % (WC_TYPE, WC_VERSION)</message>
4978N/A <return>0</return>
4978N/A </sequence>
4978N/A </if>
4978N/A
4978N/A </sequence>
4978N/A </if>
4978N/A <!-- create a wadm passwordfile -->
4978N/A <script>
5105N/A wadmPwdFilename = os.path.join(local.temp,'wadmPwd')
4978N/A wadmPwdFile = open(wadmPwdFilename,'w')
4978N/A wadmPwdFile.write('wadm_password=password\n')
4978N/A wadmPwdFile.flush()
4978N/A wadmPwdFile.close()
4978N/A wadmDestPwdFilename = os.path.join(wcPath,'wadmPwd')
4978N/A </script>
4978N/A <call function="'copyFile'">
4978N/A { 'location' : STAXServiceMachine,
4978N/A 'srcfile' : '%s' % wadmPwdFilename,
4978N/A 'destfile' : '%s' % wadmDestPwdFilename,
4978N/A 'remotehost' : location}
4978N/A </call>
4978N/A
4978N/A <!-- migrate the JKS keystore -->
4978N/A <script>
4978N/A STAFCmd = os.path.join(wcPath,'%s-%s' % (WC_TYPE, WC_VERSION), 'bin', 'wadm')
4978N/A STAFCmdArgs = ' '.join(['migrate-jks-keycert',
4978N/A '--user=admin', '--password-file=%s' % wadmDestPwdFilename,
4978N/A '--host=%s' % STAF_REMOTE_HOSTNAME,
4978N/A '--config=%s' % STAF_REMOTE_HOSTNAME,
5105N/A '--keystore=%s/HttpCertificate' % wcPath,
4978N/A '--key-password=changeit', '--keystore-password=changeit'])
4978N/A </script>
4978N/A <call function="'runCommand'">
4978N/A { 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'name' : 'Migrate the keystore',
4978N/A 'command' : STAFCmd,
4978N/A 'arguments' : STAFCmdArgs,
4978N/A 'path' : wcPath,
4978N/A }
4978N/A </call>
4978N/A <script>
4978N/A STAFCmdArgs = ' '.join(['list-certs',
4978N/A '--user=admin', '--password-file=%s' % wadmDestPwdFilename,
4978N/A '--host=%s' % STAF_REMOTE_HOSTNAME,
4978N/A '--config=%s' % STAF_REMOTE_HOSTNAME])
4978N/A </script>
4978N/A <call function="'runCommand'">
4978N/A { 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'name' : 'Migrate the keystore',
4978N/A 'command' : STAFCmd,
4978N/A 'arguments' : STAFCmdArgs,
4978N/A 'path' : wcPath,
4978N/A }
4978N/A </call>
4978N/A <!-- create SSL listener -->
4978N/A <script>
4978N/A STAFCmdArgs = ' '.join(['create-http-listener', '--user=admin',
4978N/A '--password-file=%s' % wadmDestPwdFilename,
4978N/A '--host=%s' % STAF_REMOTE_HOSTNAME,
4978N/A '--config=%s' % STAF_REMOTE_HOSTNAME,
4978N/A '--server-name=%s-%s' % (WC_TYPE,WC_VERSION),
4978N/A '--description=SSL-listener',
4978N/A '--listener-port=%s' % WC_SSL_PORT,
4978N/A '--default-virtual-server-name=%s' % STAF_REMOTE_HOSTNAME,
4978N/A 'ssl-listener-1'])
4978N/A </script>
4978N/A <call function="'runCommand'">
4978N/A { 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'name' : 'Create SSL dedicated http-listener',
4978N/A 'command' : STAFCmd,
4978N/A 'arguments' : STAFCmdArgs,
4978N/A 'path' : wcPath,
4978N/A }
4978N/A </call>
4978N/A
4978N/A <script>
4978N/A # there's a known issue with the keystore migration from JKS see : 6393534
4978N/A # hence cert alias like following don't work : "CN=sunwebserver,O=Sun Microsystems,C=US"
4978N/A # yielding 3 aliases in the server.xml as :
4978N/A # CN=sunwebserver
4978N/A # O=Sun Microsystems
4978N/A # C=US
4978N/A # apparently from the cmdline this works :
4978N/A # bin/wadm set-ssl-prop --user=admin server-cert-nickname="CN=sunwebserver\,O=Sun Microsystems\,C=US"
4978N/A #certNickName="cn=%s" % (WC_TYPE)
4978N/A certNickName=r'"cn=%s\,O=Sun Microsystems\,C=US"' % (WC_TYPE)
4978N/A print 'certNickName used in set-ssl-prop cmdline = [%s]' % certNickName
4978N/A STAFCmdArgs = ' '.join(['set-ssl-prop',
4978N/A '--user=admin', '--password-file=%s' % wadmDestPwdFilename,
4978N/A '--host=%s' % STAF_REMOTE_HOSTNAME,
4978N/A '--config=%s' % STAF_REMOTE_HOSTNAME,
4978N/A '--http-listener=ssl-listener-1',
4978N/A 'enabled=true',
4978N/A 'tls=true',
4978N/A 'client-auth-timeout=60',
4978N/A 'client-auth=false',
4978N/A 'enabled=true',
4978N/A 'ssl2=true',
4978N/A 'max-client-auth-data=1048576',
4978N/A 'tls-rollback-detection=true',
4978N/A 'ssl3=true'
4978N/A ])
4978N/A STAFCmdArgs = r'%s server-cert-nickname=%s' % (STAFCmdArgs, certNickName)
4978N/A </script>
4978N/A <call function="'runCommand'">
4978N/A { 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'name' : 'set the SSL handling for the SSL dedicated http-listener',
4978N/A 'command' : STAFCmd,
4978N/A 'arguments' : STAFCmdArgs,
4978N/A 'path' : wcPath,
4978N/A }
4978N/A </call>
4978N/A <!-- deploy Config -->
4978N/A <script>
4978N/A STAFCmd = os.path.join(wcPath,'%s-%s' % (WC_TYPE, WC_VERSION), 'bin', 'wadm')
4978N/A STAFCmdArgs = ' '.join(['deploy-config',
4978N/A '--user=admin', '--password-file=%s' % wadmDestPwdFilename,
4978N/A '--host=%s' % STAF_REMOTE_HOSTNAME,
4978N/A '--no-prompt',
4978N/A '--restart',
4978N/A STAF_REMOTE_HOSTNAME])
4978N/A </script>
4978N/A <call function="'runCommand'">
4978N/A { 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'name' : 'deploy config',
4978N/A 'command' : STAFCmd,
4978N/A 'arguments' : STAFCmdArgs,
4978N/A 'path' : wcPath,
4978N/A }
4978N/A </call>
4978N/A
4978N/A <!-- backup the config -->
4978N/A <message>'backing up the webcontainer config'</message>
4978N/A <script>
4978N/A backupType='Config'
4978N/A if WC_TYPE == 'tomcat':
4978N/A srcDir = os.path.join(WC_DIRECTORY, 'apache-%s-%s' % (WC_TYPE, WC_VERSION), 'conf')
4978N/A elif WC_TYPE == 'glassfish':
4978N/A srcDir = os.path.join(WC_DIRECTORY, 'glassfishv3', 'glassfish', 'domains', 'domain1', 'config')
4978N/A elif WC_TYPE == 'sunwebserver':
4978N/A srcDir = os.path.join(wcPath, '%s-%s' % (WC_TYPE, WC_VERSION), 'https-%s' % STAF_REMOTE_HOSTNAME, 'config')
4978N/A destDir = os.path.join(local.temp,'%s%sBackup' % (WC_TYPE, backupType))
4978N/A </script>
4978N/A <call function="'runSTAFCommand'">
4978N/A { 'name' : 'backup webcontainers log files',
4978N/A 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'service' : 'FS',
4978N/A 'request' : 'COPY ',
4978N/A 'arguments' : 'DIRECTORY %s TODIRECTORY %s TOMACHINE %s RECURSE' % (srcDir, destDir, STAXServiceMachine)
4978N/A }
4978N/A </call>
4978N/A
4978N/A <if expr="RC != 0">
4978N/A <sequence>
4978N/A <message>'Failed to backup webcontainer log file'</message>
4978N/A <return>0</return>
4978N/A </sequence>
4978N/A </if>
4978N/A
4978N/A </sequence>
4978N/A </elseif>
3361N/A </if>
3361N/A </sequence>
3361N/A
3361N/A <catch exception="'TestExceptionResultFailed'" typevar="eType" var="eInfo">
3361N/A <sequence>
3361N/A <message>'caught %s with %s' % (eType,eInfo)</message>
3361N/A <message>
3379N/A 'Remove temporary webcontainer zip archive from %s %s' % (location,wcPath)
3361N/A </message>
3361N/A <call function="'deleteFolder'">
3379N/A { 'location' : location ,
3379N/A 'foldername' : '%s' % wcPath }
3361N/A </call>
3361N/A </sequence>
3361N/A </catch>
3361N/A
3361N/A </try>
3361N/A
3361N/A </function>
3361N/A
3379N/A <function name="deployWebApplicationWAR" scope="local">
3361N/A <function-prolog>
3361N/A This function deploys a Web Application War file
3361N/A </function-prolog>
3361N/A
3361N/A <function-map-args>
3379N/A <function-arg-def name="location" type="optional" default="STAF_REMOTE_HOSTNAME">
3361N/A <function-arg-description>
3361N/A Location of target host
3361N/A </function-arg-description>
3361N/A <function-arg-property name="type" value="hostname"/>
3361N/A </function-arg-def>
3379N/A <function-arg-def name="wcPath" type="optional" default="'%s' % WC_DIRECTORY">
3379N/A <function-arg-description>
3379N/A Pathname to installation root
3379N/A </function-arg-description>
3379N/A <function-arg-property name="type" value="filepath"/>
3379N/A </function-arg-def>
3379N/A <function-arg-def name="warFilePath" type="required" default="''">
3361N/A <function-arg-description>
3361N/A Web application war file path
3361N/A </function-arg-description>
3361N/A <function-arg-property name="type" value="filepath"/>
3361N/A </function-arg-def>
3379N/A <function-arg-def name="destWarFileName" type="optional" default="'dsml.war'">
3361N/A <function-arg-description>
3361N/A Web application war destination file path
3361N/A </function-arg-description>
3361N/A <function-arg-property name="type" value="filepath"/>
3361N/A </function-arg-def>
3361N/A </function-map-args>
3361N/A <sequence>
3361N/A
3361N/A <message>
4978N/A 'setup: deploy web application %s to auto deploy webapp directory' % (warFilePath)
3361N/A </message>
3361N/A
4978N/A <script>
4978N/A # create the autodeploy webapp path
4978N/A destWarFilePath = None
4978N/A if WC_TYPE == 'tomcat':
4978N/A destWarFilePath = os.path.join(wcPath, 'apache-%s-%s' % (WC_TYPE, WC_VERSION), 'webapps', destWarFileName)
4978N/A elif WC_TYPE == 'glassfish':
4978N/A destWarFilePath = os.path.join(wcPath, 'glassfishv3', 'glassfish',
4978N/A 'domains', 'domain1', 'autodeploy', destWarFileName)
4978N/A elif WC_TYPE == 'sunwebserver':
4978N/A destWarFilePath = os.path.join(wcPath, '%s-%s' % (WC_TYPE, WC_VERSION), 'https-%s' % STAF_REMOTE_HOSTNAME, 'auto-deploy', destWarFileName)
4978N/A </script>
4978N/A <message>
4978N/A 'autodeploy directory %s' % destWarFilePath
4978N/A </message>
3361N/A <call function="'copyFile'">
3379N/A { 'location' : STAXServiceMachine,
3361N/A 'srcfile' : '%s' % warFilePath,
4978N/A 'destfile' : '%s' % destWarFilePath,
3379N/A 'remotehost' : location}
3361N/A </call>
3361N/A </sequence>
3361N/A
3361N/A </function>
3361N/A
3379N/A <function name="stopWebcontainerWithScript" scope="local">
3361N/A <function-prolog>
3361N/A This function stops a webcontainer
3361N/A </function-prolog>
3361N/A <function-map-args>
3379N/A <function-arg-def name="location" type="optional" default="STAF_REMOTE_HOSTNAME">
3361N/A <function-arg-description>
3361N/A Location of target host
3361N/A </function-arg-description>
3361N/A <function-arg-property name="type" value="hostname"/>
3361N/A </function-arg-def>
3379N/A <function-arg-def name="wcPath" type="optional" default="'%s' % WC_DIRECTORY">
3361N/A <function-arg-description>
3361N/A Pathname to installation root
3361N/A </function-arg-description>
3361N/A <function-arg-property name="type" value="filepath"/>
3361N/A </function-arg-def>
3361N/A </function-map-args>
3361N/A
3361N/A <sequence>
3361N/A
3361N/A <!-- Build the Command -->
3361N/A <script>
4978N/A if wcPath:
4978N/A if WC_TYPE == 'tomcat':
4978N/A CATALINA_HOME=os.path.join(wcPath, 'apache-%s-%s' % (WC_TYPE, WC_VERSION) )
4978N/A wcBinPath = os.path.join('%s' % CATALINA_HOME, 'bin')
4978N/A STAFCmd='%s/shutdown%s' % (wcBinPath, scriptExt)
4978N/A STAFCmdEnv=['CATALINA_HOME=%s' % CATALINA_HOME,
4978N/A 'PATH=%s/bin:/bin:/usr/bin' % JAVA_HOME,\
4978N/A 'JAVA_HOME=%s' % JAVA_HOME]
4978N/A STAFCmdArgs=""
4978N/A elif WC_TYPE == 'glassfish':
4978N/A wcBinPath = os.path.join(wcPath, 'glassfishv3', 'bin')
4978N/A STAFCmd='%s/asadmin' % wcBinPath
4978N/A STAFCmdEnv=['PATH=%s/bin:/bin:/usr/bin' % JAVA_HOME ,\
4978N/A 'JAVA_HOME=%s' % JAVA_HOME]
4978N/A STAFCmdArgs="stop-domain"
4978N/A elif WC_TYPE == 'sunwebserver':
4978N/A wcBinPath = os.path.join(wcPath, '%s-%s' % (WC_TYPE, WC_VERSION), 'https-%s' % STAF_REMOTE_HOSTNAME, 'bin')
4978N/A STAFCmd = os.path.join(wcBinPath,'stopserv')
4978N/A STAFCmdEnv=['PATH=%s/bin:/bin:/usr/bin' % JAVA_HOME ,\
4978N/A 'JAVA_HOME=%s' % JAVA_HOME]
4978N/A STAFCmdArgs = ""
3361N/A </script>
4978N/A
3361N/A <message>
3361N/A '%s' % STAFCmd
3361N/A </message>
3361N/A
3361N/A <call function="'runCommand'">
3889N/A { 'location' : location,
3889N/A 'command' : STAFCmd,
4978N/A 'arguments' : STAFCmdArgs,
3949N/A 'envCmd' : STAFCmdEnv,
3889N/A 'name' : STAFCmd,
3889N/A 'path' : wcBinPath
3361N/A }
3361N/A </call>
3361N/A
4978N/A <!-- backup the web.xml -->
4978N/A <message>'backing up the web.xml'</message>
4978N/A <script>
4978N/A backupType='WebappConfig'
4978N/A if WC_TYPE == 'tomcat':
4978N/A srcDir = os.path.join(WC_DIRECTORY, 'apache-%s-%s' % (WC_TYPE, WC_VERSION), 'webapps', 'dsml', 'WEB-INF')
4978N/A elif WC_TYPE == 'glassfish':
4978N/A srcDir = os.path.join(WC_DIRECTORY, 'glassfishv3', 'glassfish', 'domains',
4978N/A 'domain1', 'applications', 'dsml', 'WEB-INF')
4978N/A elif WC_TYPE == 'sunwebserver':
4978N/A srcDir = os.path.join(WC_DIRECTORY, '%s-%s' % (WC_TYPE, WC_VERSION), 'https-%s' % STAF_REMOTE_HOSTNAME,
4978N/A 'generated', STAF_REMOTE_HOSTNAME, 'dsml', 'WEB-INF')
4978N/A destDir = os.path.join(local.temp,'%s%sBackup' % (WC_TYPE, backupType))
4978N/A </script>
4978N/A <call function="'runSTAFCommand'">
4978N/A { 'name' : 'backup webapps WEB-INF files',
4978N/A 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'service' : 'FS',
4978N/A 'request' : 'COPY ',
4978N/A 'arguments' : 'DIRECTORY %s TODIRECTORY %s TOMACHINE %s RECURSE' % (srcDir, destDir, STAXServiceMachine)
4978N/A }
4978N/A </call>
4978N/A
4978N/A <if expr="RC != 0">
4978N/A <sequence>
4978N/A <message>'Failed to backup webcontainer log file'</message>
4978N/A <return>0</return>
4978N/A </sequence>
4978N/A </if>
4978N/A
4978N/A <!-- backup the logs -->
4978N/A <message>'backing up the webcontainer logs'</message>
4978N/A <script>
4978N/A backupType='Logs'
4978N/A if WC_TYPE == 'tomcat':
4978N/A srcDir = os.path.join(WC_DIRECTORY, 'apache-%s-%s' % (WC_TYPE, WC_VERSION), 'logs')
4978N/A elif WC_TYPE == 'glassfish':
4978N/A srcDir = os.path.join(WC_DIRECTORY, 'glassfishv3', 'glassfish', 'domains', 'domain1', 'logs')
4978N/A elif WC_TYPE == 'sunwebserver':
4978N/A srcDir = os.path.join(wcPath, '%s-%s' % (WC_TYPE, WC_VERSION), 'https-%s' % STAF_REMOTE_HOSTNAME, 'logs')
4978N/A destDir = os.path.join(local.temp,'%s%sBackup' % (WC_TYPE, backupType))
4978N/A </script>
4978N/A <call function="'runSTAFCommand'">
4978N/A { 'name' : 'backup webcontainers log files',
4978N/A 'location' : STAF_REMOTE_HOSTNAME,
4978N/A 'service' : 'FS',
4978N/A 'request' : 'COPY ',
4978N/A 'arguments' : 'DIRECTORY %s TODIRECTORY %s TOMACHINE %s RECURSE' % (srcDir, destDir, STAXServiceMachine)
4978N/A }
4978N/A </call>
4978N/A
4978N/A <if expr="RC != 0">
4978N/A <sequence>
4978N/A <message>'Failed to backup webcontainer log file'</message>
4978N/A <return>0</return>
4978N/A </sequence>
4978N/A </if>
4978N/A
3361N/A </sequence>
3361N/A
3361N/A </function>
3361N/A
3379N/A <function name="startWebcontainerWithScript" scope="local">
3361N/A <function-prolog>
3379N/A This function start a webcontainer
3361N/A </function-prolog>
3361N/A <function-map-args>
3379N/A <function-arg-def name="location" type="optional" default="STAF_REMOTE_HOSTNAME">
3361N/A <function-arg-description>
3361N/A Location of target host
3361N/A </function-arg-description>
3361N/A <function-arg-property name="type" value="hostname"/>
3361N/A </function-arg-def>
4978N/A <function-arg-def name="wcPath" type="optional" default="'%s' % WC_DIRECTORY">
3361N/A <function-arg-description>
3361N/A Pathname to installation root
3361N/A </function-arg-description>
3361N/A <function-arg-property name="type" value="filepath"/>
3361N/A </function-arg-def>
3361N/A </function-map-args>
3361N/A
3361N/A <sequence>
3361N/A
3361N/A <!-- Build the Command -->
3361N/A <script>
4978N/A if wcPath:
4978N/A if WC_TYPE == 'tomcat':
4978N/A CATALINA_HOME=os.path.join(wcPath, 'apache-%s-%s' % (WC_TYPE, WC_VERSION) )
4978N/A wcBinPath = os.path.join('%s' % CATALINA_HOME, 'bin')
4978N/A STAFCmd='%s/startup%s' % (wcBinPath, scriptExt)
4978N/A STAFCmdEnv=['CATALINA_HOME=%s' % CATALINA_HOME,
4978N/A 'PATH=%s/bin:/bin:/usr/bin' % JAVA_HOME,\
4978N/A 'JAVA_HOME=%s' % JAVA_HOME]
4978N/A STAFCmdArgs = ''
4978N/A elif WC_TYPE == 'glassfish':
4978N/A wcBinPath = os.path.join(wcPath, 'glassfishv3', 'bin')
4978N/A STAFCmd='%s/asadmin' % wcBinPath
4978N/A STAFCmdEnv=['PATH=%s/bin:/bin:/usr/bin' % JAVA_HOME ,\
4978N/A 'JAVA_HOME=%s' % JAVA_HOME]
4978N/A STAFCmdArgs = 'start-domain'
4978N/A elif WC_TYPE == 'sunwebserver':
4978N/A wcBinPath = os.path.join(wcPath, '%s-%s' % (WC_TYPE,WC_VERSION), 'https-%s' % STAF_REMOTE_HOSTNAME, 'bin')
4978N/A STAFCmd = os.path.join(wcBinPath,'startserv')
4978N/A STAFCmdEnv=['PATH=%s/bin:/bin:/usr/bin' % JAVA_HOME ,\
4978N/A 'JAVA_HOME=%s' % JAVA_HOME]
4978N/A STAFCmdArgs = ""
3361N/A </script>
3361N/A
3361N/A <message>
3361N/A '%s' % STAFCmd
3361N/A </message>
3889N/A
4865N/A <!-- On Windows 2003, startup command return 1 and 2008 returns 0 -->
4865N/A <script>
4865N/A winVersion = is_windows_platform(location)
4865N/A if winVersion and winVersion.find('2003') != -1:
4865N/A expectedRC=1
4865N/A else:
4865N/A expectedRC=0
4865N/A </script>
3361N/A <call function="'runCommand'">
3889N/A { 'location' : location,
3889N/A 'command' : STAFCmd,
4978N/A 'arguments' : STAFCmdArgs,
3949N/A 'envCmd' : STAFCmdEnv,
3889N/A 'name' : STAFCmd,
3889N/A 'path' : wcBinPath,
4865N/A 'expectedRC' : expectedRC
3361N/A }
3361N/A </call>
3361N/A
3361N/A </sequence>
3361N/A
3361N/A </function>
3361N/A
3379N/A <function name="removeWebcontainer" scope="local">
3361N/A <function-prolog>
3361N/A This function removes the webcontainer instance
3361N/A </function-prolog>
3379N/A
3379N/A <function-map-args>
3379N/A <function-arg-def name="location" type="optional" default="STAF_REMOTE_HOSTNAME">
3379N/A <function-arg-description>
3379N/A Location of target host
3379N/A </function-arg-description>
3379N/A <function-arg-property name="type" value="hostname"/>
3379N/A </function-arg-def>
3379N/A <function-arg-def name="wcPath" type="optional" default="'%s' % WC_DIRECTORY">
3379N/A <function-arg-description>
3379N/A Pathname to installation root
3379N/A </function-arg-description>
3379N/A <function-arg-property name="type" value="filepath"/>
3379N/A </function-arg-def>
3379N/A </function-map-args>
3379N/A
3361N/A <try>
3361N/A
3361N/A <sequence>
3361N/A
3361N/A <!-- Remove webcontainer directory -->
3361N/A <message>
3379N/A 'Remove webcontainer from %s %s.' % (location,wcPath)
3361N/A </message>
4978N/A <if expr="WC_TYPE == 'tomcat'">
4978N/A <call function="'deleteFolder'">
4978N/A { 'location' : location,
4978N/A 'foldername' : os.path.join(wcPath,'apache-%s-%s' % (WC_TYPE, WC_VERSION)) }
4978N/A </call>
4978N/A <elseif expr="WC_TYPE == 'glassfish'">
4978N/A <call function="'deleteFolder'">
4978N/A { 'location' : location,
4978N/A 'foldername' : os.path.join(wcPath, 'glassfishv3') }
4978N/A </call>
4978N/A </elseif>
4978N/A <elseif expr="WC_TYPE == 'sunwebserver'">
4978N/A<sequence>
4978N/A<script>
4978N/A wcBinPath = os.path.join(wcPath, '%s-%s' % (WC_TYPE, WC_VERSION), 'bin')
4978N/A STAFCmd = os.path.join(wcBinPath,'uninstall')
4978N/A STAFCmdArgs = '--silent'
4978N/A STAFCmdEnv=['PATH=%s/bin:/bin:/usr/bin' % JAVA_HOME, 'JAVA_HOME=%s' % JAVA_HOME]
4978N/A</script>
4978N/A <call function="'runCommand'">
4978N/A { 'location' : location,
4978N/A 'command' : STAFCmd,
4978N/A 'arguments' : STAFCmdArgs,
4978N/A 'envCmd' : STAFCmdEnv,
4978N/A 'name' : STAFCmd,
4978N/A 'path' : wcBinPath,
4978N/A 'expectedRC' : 0
4978N/A }
4978N/A </call>
4978N/A
4978N/A <call function="'deleteFolder'">
4978N/A { 'location' : location,
4978N/A 'foldername' : '%s/%s-%s' % (wcPath, WC_TYPE, WC_VERSION) }
4978N/A </call>
4978N/A</sequence>
4978N/A </elseif>
4978N/A </if>
3361N/A
3361N/A <if expr="RC != 0">
3361N/A <return>RC</return>
3361N/A </if>
3361N/A
3361N/A </sequence>
3361N/A
3361N/A <catch exception="'TestExceptionResultFailed'" typevar="eType" var="eInfo">
3361N/A <sequence>
3361N/A <message>'caught %s with %s' % (eType,eInfo)</message>
3361N/A <message>
3379N/A 'Remove temporary webcontainer zip archive from %s %s' % (location,wcPath)
3361N/A </message>
4978N/A <if expr="WC_TYPE == 'tomcat'">
4978N/A <call function="'deleteFolder'">
4978N/A { 'location' : location,
4978N/A 'foldername' : os.path.join(wcPath,'apache-%s-%s' % (WC_TYPE, WC_VERSION)) }
4978N/A </call>
4978N/A <elseif expr="WC_TYPE == 'glassfish'">
4978N/A <call function="'deleteFolder'">
4978N/A { 'location' : location,
4978N/A 'foldername' : os.path.join(wcPath, 'glassfishv3') }
4978N/A </call>
4978N/A </elseif>
4978N/A <elseif expr="WC_TYPE == 'sunwebserver'">
4978N/A <call function="'deleteFolder'">
4978N/A { 'location' : location,
4978N/A 'foldername' : '%s/%s-%s' % (wcPath, WC_TYPE, WC_VERSION) }
4978N/A </call>
4978N/A </elseif>
4978N/A </if>
3361N/A </sequence>
3361N/A </catch>
3361N/A
3361N/A </try>
3361N/A
3361N/A </function>
3361N/A</stax>