This function creates the topology required by the Test Group/Suite. Topology Description file Specifies whether the instance should be initialised with some default data. Specifies a relative folder that holds the shared data for the tests Specifies a list of file extension to add to testdata.zip Specifies whether the replication servers should be split from the ldap servers and be configured on separate instances. { 'groupDataDir' : sharedDataFolder, 'fileExtensions' : fileExtensions } 'SINGLE instance deployment: read parameters from config.py' 'MULTIPLE instance deployment: read parameters from %s' \ % topologyDescFile { 'file' : topologyDescFile } 'Replication servers will be split from ldap servers.' 'Number of server instances required by the deployment: %s' \ % len(_splitServerList) { 'dsHost' : server.getHostname(), 'dsDir' : server.getDir(), 'dsPort' : server.getPort(), 'dsAdminPort' : server.getAdminPort(), 'dsSslPort' : server.getSslPort(), 'dsJmxPort' : server.getJmxPort(), 'dsBindDN' : server.getRootDn(), 'dsBindPwd' : server.getRootPwd(), 'dsBaseDN' : server.getBaseDn() } This function prepares locally the necessary files to create an instance: data zip file and OpenDS zip file. Specifies a relative folder that holds the shared data for the test group Specifies a list of file extension to add to testdata.zip Specifies a list of java projects to add to testdata.zip { 'customFileExtensions' : fileExtensions, 'testGroupDirName' : groupDataDir } { 'customJavaProjects' : javaProjects } 'Delete %s/testdata.zip' % local.temp { 'location' : STAXServiceMachine, 'filename' : '%s/testdata.zip' % local.temp } 'Zip up local testdata files to %s/testdata.zip' % local.temp { 'location' : STAXServiceMachine, 'zipfile' : '%s/testdata.zip' % local.temp, 'folder' : local.testdata, 'relativeto' : local.directory } This function creates an instance on a given host. It copies both data and OpenDS zip files onto the host, unzips them, and configures OpenDS. Hostname where the instance is to be created Directory where OpenDS will be installed Directory Server port number Directory Server admin port number Directory Server SSL port number Directory Server JMX port number Directory Manager DN Directory Server SSL port number Directory Server base suffix dn 'Create instance in host %s at directory %s' % (dsHost,dsDir) 'Delete folder %s/%s on host %s' % (dsDir,OPENDSNAME,dsHost) { 'location' : dsHost, 'foldername' : '%s/%s' % (dsDir,OPENDSNAME) } 'Create folder %s on host %s' % (dsDir,dsHost) { 'location' : dsHost, 'foldername' : '%s' % dsDir } 'Delete staging data folder %s/shared' % dsDir { 'location' : dsHost, 'foldername' : '%s/testdata' % dsDir } 'Copy %s/testdata.zip to %s on %s' % (local.testdata,dsDir,dsHost) { 'srcfile' : '%s/testdata.zip' % local.temp, 'destfile' : '%s/testdata.zip' % dsDir, 'remotehost' : dsHost } 'Extract contents of test data %s on %s' % (dsDir,dsHost) { 'location' : dsHost, 'zipfile' : '%s/testdata.zip' % dsDir, 'unzipdir' : dsDir } { 'location' : dsHost, 'entry' : '%s/%s' % (dsDir,ZIPNAME), 'attribute' : 'TYPE' } 'Copy DS zip archive %s/%s to %s' % (ZIPPATH,ZIPNAME,dsHost) { 'srcfile' : '%s/%s' % (ZIPPATH,ZIPNAME), 'destfile' : '%s/%s' % (dsDir,ZIPNAME), 'remotehost' : dsHost } 'DS zip archive %s/%s already exists, nothing to do' % (dsDir,ZIPNAME) 'Extract DS zip archive to %s on %s' % (dsDir,dsHost) { 'location' : dsHost, 'zipfile' : '%s/%s' % (dsDir,ZIPNAME), 'unzipdir' : dsDir } 'Set up DS on %s : %s/%s' % (dsHost,dsDir,OPENDSNAME) { 'location' : dsHost, 'dsPath' : '%s/%s' % (dsDir, OPENDSNAME), 'dsPort' : dsPort, 'dsAdminPort' : dsAdminPort, 'dsSslPort' : dsSslPort, 'dsJmxPort' : dsJmxPort, 'dsBindDN' : dsBindDN, 'dsBindPwd' : dsBindPwd, 'dsBaseDN' : dsBaseDN, 'dsEnableWindowsService' : enableWindowsService, 'dsDoNotStart' : 'true' } { 'returncode' : RC , 'result' : STAXResult } 'Instance created.' 'Failed to create instance.' This function configures replication in a given server. Map containing a Server class instance representing the server to configure. 'Configure replication on server on host %s at directory %s' \ % (syncserver.getHostname(),syncserver.getDir()) 'Copy %s file from %s to %s' % (filename,local.testdata,dataDir) { 'srcfile' : filePath, 'destfile' : '%s/%s' % (dataDir,filename), 'remotehost' : syncserver.getHostname() } { 'location' : syncserver.getHostname(), 'dsPath' : syncserverPath } { 'returncode' : RC , 'result' : STAXResult } 'Add replication configuration entries in %s' % remoteFilePath { 'location' : syncserver.getHostname(), 'dsPath' : syncserverPath, 'dsInstanceHost' : syncserver.getHostname(), 'dsInstancePort' : syncserver.getPort(), 'dsInstanceDn' : syncserver.getRootDn(), 'dsInstancePswd' : syncserver.getRootPwd(), 'entryToBeAdded' : remoteFilePath } { 'returncode' : RC, 'result' : STAXResult } { 'location' : syncserver.getHostname(), 'dsHost' : syncserver.getHostname(), 'dsPath' : syncserverPath, 'dsAdminPort' : syncserver.getAdminPort(), 'dsBindDN' : syncserver.getRootDn(), 'dsBindPwd' : syncserver.getRootPwd() } { 'returncode' : RC , 'result' : STAXResult } This function configures replication in a given server. Server class instance representing the server to configure. 'Configure replication on server on host %s at directory %s' \ % (syncserver.getHostname(),syncserver.getDir()) { 'location' : syncserver.getHostname(), 'dsPath' : syncserverPath } { 'location' : syncserver.getHostname(), 'dsPath' : syncserverPath, 'dsInstanceHost' : syncserver.getHostname(), 'dsInstancePort' : syncserver.getPort(), 'dsInstanceDn' : syncserver.getRootDn(), 'dsInstancePswd' : syncserver.getRootPwd(), 'entryToBeAdded' : '%s/%s/replication/workaround-2201.ldif' \ % (syncserver.getDir(),remote.reldatadir) } 'List synchronization providers' { 'location' : syncserver.getHostname(), 'dsPath' : syncserverPath, 'dsInstanceHost' : syncserver.getHostname(), 'dsInstanceAdminPort' : syncserver.getAdminPort(), 'dsInstanceDn' : syncserver.getRootDn(), 'dsInstancePswd' : syncserver.getRootPwd() } 'Create replication server listening on port: %s' \ % replicationServer.getPort() { 'location' : syncserver.getHostname(), 'dsPath' : syncserverPath, 'dsInstanceHost' : syncserver.getHostname(), 'dsInstanceAdminPort' : syncserver.getAdminPort(), 'dsInstanceDn' : syncserver.getRootDn(), 'dsInstancePswd' : syncserver.getRootPwd(), 'replicationPort' : replicationServer.getPort(), 'replicationServerId' : replicationServer.getId(), 'replicationServerList' : replicationServer.getChangelogServerList() } 'Create domain name for suffix: %s' % suffix.getSuffixDn() { 'location' : syncserver.getHostname(), 'dsPath' : syncserverPath, 'dsInstanceHost' : syncserver.getHostname(), 'dsInstanceAdminPort' : syncserver.getAdminPort(), 'dsInstanceDn' : syncserver.getRootDn(), 'dsInstancePswd' : syncserver.getRootPwd(), 'domainName' : 'SUFFIX-%s' % i, 'replicationDn' : suffix.getSuffixDn(), 'serverId' : suffix.getId(), 'replicationServerList' : suffix.getChangelogServerList() } { 'location' : syncserver.getHostname(), 'dsHost' : syncserver.getHostname(), 'dsPath' : syncserverPath, 'dsAdminPort' : syncserver.getAdminPort(), 'dsBindDN' : syncserver.getRootDn(), 'dsBindPwd' : syncserver.getRootPwd() } This function enables replication between servers using dsreplication. Location of target host Pathname to installation root Directory server hostname or IP address Directory server admin port number Bind DN Bind password Replication port number Encrypt communications over dsReplicationPort (secure replication) Server only to contain replicated data (no Repl server/changelog) Server only to contain Repl server/changelog (no replicated data) Reference Directory server hostname or IP address Reference Directory server admin port number Reference server Bind DN Reference server Bind password Reference server Replication port number Encrypt communications over refReplicationPort (secure replication) Server only to contain replicated data (no Repl server/changelog) Server only to contain Repl server/changelog (no replicated data) DN of the replicated suffix Global Administrator UID Global Administrator password Do not enable schema replication Take the refInstanceHost as the source for the schema initialisation Expected return code value. Default value is 0. Wildcard 'noCheck' to not check the RC { 'name' : 'Enable Replication', 'location' : location, 'command' : STAFCmd, 'arguments' : STAFCmdParams, 'expectedRC': expectedRC } STAXResult This function initializes replicated suffixes with the contents of a source server using dsreplication. Location of target host Pathname to installation root Directory server hostname or IP address Directory server admin port number Source Directory server hostname or IP address Source Directory server admin port number DN of the replicated suffix Global Administrator UID Global Administrator password Expected return code value. Default value is 0. Wildcard 'noCheck' to not check the RC { 'name' : 'Initialize Replication', 'location' : location, 'command' : STAFCmd, 'arguments' : STAFCmdParams, 'expectedRC' : expectedRC, 'knownIssue' : '4495' } STAXResult This function disables replication for a given baseDN on a server using dsreplication. Location of target host Pathname to installation root Directory server hostname or IP address Directory server port number DN of the replicated suffix Disable replication server (remove configuration, changelot and port) Disable replication completely (domain, repl-server, changelog and admin data). Global Administrator UID Global Administrator password Expected return code value. Default value is 0. Wildcard 'noCheck' to not check the RC { 'name' : 'Disable Replication', 'location' : location, 'command' : STAFCmd, 'arguments' : STAFCmdParams, 'expectedRC': expectedRC } STAXResult This function reads the topology from a given file. It parses the topology description file and sets _topologyServerList, a list of the servers that form the topology. File containing the topology description. 'Parse file %s for topology parameters' % file This function removes an instance on a given host. Hostname where the instance is to be created Directory where OpenDS will be installed 'Removing instance %s/%s on host %s' % (dsDir,OPENDSNAME,dsHost) 'Delete staging data file %s/testdata.zip' % dsDir { 'location' : dsHost, 'filename' : '%s/testdata.zip' % dsDir } This function removes the topology created for the Test Group/Suite. Tells whether it is a single (i.e. parameters read from config.py) or a multiple-instance topology (i.e. parameters read from topology desc file). { 'dsHost' : server.getHostname(), 'dsDir' : server.getDir() } This function prepares one or all instances in a topology for the external re-initialisation of replicated suffixes using dsreplication. Location of target host Pathname to installation root Directory server hostname or IP address Directory server admin port number Only the contents of the specified server will be initialised. DN of the replicated suffix Global Administrator UID Global Administrator password Expected return code value. Default value is 0 'Preparing instance %s:%s for external initialization' \ % (dsInstanceHost,dsInstanceAdminPort) { 'name' : 'Pre-Initialize Replication', 'location' : location, 'command' : STAFCmd, 'arguments' : STAFCmdParams, 'knownIssue' : '4495' } { 'returncode' : STAXCode, 'result' : STAXReason, 'expected' : expectedRC } STAXReason This function ends the process of the external re-initialisation of replicated suffixes in one or all instances in a topology using dsreplication. Location of target host Pathname to installation root Directory server hostname or IP address Directory server admin port number DN of the replicated suffix Global Administrator UID Global Administrator password Expected return code value. Default value is 0 'Post-processing external initialization of instance %s:%s' \ % (dsInstanceHost,dsInstanceAdminPort) { 'name' : 'Post-Initialize Replication', 'location' : location, 'command' : STAFCmd, 'arguments' : STAFCmdParams, 'knownIssue' : '4495' } { 'returncode' : STAXCode, 'result' : STAXReason, 'expected' : expectedRC } STAXReason This function resets the data in a replicated suffix with the backup of a source server and re-initialises the topology using dsreplication. Location of target host Pathname to installation root Directory server hostname or IP address Directory server port number Directory server admin port number Bind DN Bind password The name of the backup directory DN of the replicated suffix Global Administrator UID Global Administrator password Expected return code value. Default value is 0 'Resetting %s data in replication topology using backup %s on instance \ %s:%s' % (suffixDn,backupDir,sourceInstanceHost,sourceInstanceAdminPort) { 'location' : location, 'dsPath' : dsPath, 'dsInstanceHost' : sourceInstanceHost, 'dsInstanceAdminPort' : sourceInstanceAdminPort, 'localOnly' : False, 'replicationDnList' : [suffixDn], 'adminUID' : adminUID, 'adminPswd' : adminPswd } { 'location' : location, 'dsPath' : dsPath, 'dsInstanceHost' : sourceInstanceHost, 'dsInstancePort' : sourceInstancePort, 'dsInstanceDn' : sourceInstanceDn, 'dsInstancePswd' : sourceInstancePswd, 'taskID' : 'restore task - %s' % resetCounter, 'backupDir' : backupDir } { 'location' : location, 'dsPath' : dsPath, 'dsInstanceHost' : sourceInstanceHost, 'dsInstanceAdminPort' : sourceInstanceAdminPort, 'replicationDnList' : [suffixDn], 'adminUID' : adminUID, 'adminPswd' : adminPswd } { 'location' : location, 'dsPath' : dsPath, 'sourceInstanceHost' : sourceInstanceHost, 'sourceInstanceAdminPort' : sourceInstanceAdminPort, 'replicationDnList' : [suffixDn], 'adminUID' : adminUID, 'adminPswd' : adminPswd } { 'returncode' : STAXCode, 'result' : STAXReason, 'expected' : expectedRC } STAXReason This function helps to perform a common setup and data load of directory server. The directory server object instance Perform a quick start of the server with preloaded data Load data into the server Start the server Stop the server Path and name of the ldif file to be used to add entries Allow pre-encoded passwords to be added Generate with makeldif the ldif file to be imported Path and name of the ldif template to be used to generate entries { 'functionName' : 'createTopology' , 'functionMessage' : 'Create DS topology' , 'functionException' : 'Server.CreateTopologyException' , 'functionArguments' : { 'initialiseInstance' : quickStart } } { 'functionName' : 'StartDsWithScript' , 'functionMessage' : 'Start the Directory Server.' , 'functionException' : 'Server.StartException' , 'functionArguments' : { 'location' : directoryServer.location } } { 'functionName' : 'isAlive' , 'functionMessage' : 'Start the Directory Server.' , 'functionException' : 'Server.StartException' , 'functionArguments' : { 'noOfLoops' : 100 , 'noOfMilliSeconds' : 3000 } } 'Generating ldif file (%s) from template (%s)' % (ldifFile,ldifTemplate) 'On-line import.' { 'dsInstanceHost' : directoryServer.host, 'dsInstanceAdminPort' : directoryServer.adminport, 'dsInstanceDn' : directoryServer.dn, 'dsInstancePswd' : directoryServer.password, 'objectName' : 'password-policy', 'propertyType' : 'policy', 'propertyName' : 'Default Password Policy', 'attributeName' : 'allow-pre-encoded-passwords', 'attributeValue' : 'true' } { 'functionName' : 'ldapModifyWithScript' , 'functionMessage' : 'Adding Initial Entries' , 'functionException' : 'LDAP.ModifyException' , 'functionArguments' : { 'dsAdd' : 'TRUE' , 'dsInstanceHost' : directoryServer.host , 'dsInstancePort' : directoryServer.port , 'dsInstanceDn' : directoryServer.dn , 'dsInstancePswd' : directoryServer.password , 'dsFilename' : ldifFile } } 'Off-line import.' { 'functionName' : 'ImportLdifWithScript' , 'functionMessage' : 'Off-line Import LDIF.' , 'functionException' : 'Server.ImportException' , 'functionArguments' : { 'location' : directoryServer.location , 'ldifFile' : ldifFile , 'backEnd' : directoryServer.backend } } { 'functionName' : 'StartDsWithScript' , 'functionMessage' : 'Start the Directory Server.' , 'functionException' : 'Server.ImportException' , 'functionArguments' : { 'location' : directoryServer.location } } { 'functionName' : 'isAlive' , 'functionMessage' : 'Check the Directory Server has started.' , 'functionException' : 'Server.ImportException' , 'functionArguments' : { 'location' : directoryServer.location , 'noOfLoops' : 10 , 'noOfMilliSeconds' : 2000 } } { 'functionName' : 'StartDsWithScript' , 'functionMessage' : 'Stop the Directory Server.' , 'functionException' : 'Server.StopException' , 'functionArguments' : { 'location' : directoryServer.location } } '%s: Create topology failed. eInfo(%s)' % (eType,eInfo) '%s: Failed to start Directory Server. eInfo(%s)' % (eType,eInfo) '%s: Failed to import ldif file. eInfo(%s)' % (eType,eInfo) '%s: Failed to stop Directory Server. eInfo(%s)' % (eType,eInfo) '%s: LDAPModify failed. eInfo(%s)' % (eType,eInfo) This function helps to perform a common cleanup of directory server and its data. The directory server object instance Delete the suffix that holds the directory data { 'functionName' : 'ldapSearchWithScript' , 'functionMessage' : 'Check Server is Alive.' , 'functionArguments' : { 'dsInstanceHost' : directoryServer.host , 'dsInstancePort' : directoryServer.port , 'dsBaseDN' : 'cn=config' , 'dsInstanceDn' : directoryServer.dn , 'dsInstancePswd' : directoryServer.password , 'dsFilter' : 'objectclass=*' , 'dsScope' : 'base' , 'expectedRC' : 'noCheck' } } { 'functionName' : 'StartDsWithScript' , 'functionMessage' : 'Start the Directory Server.' , 'functionArguments' : { 'expectedRC' : 'noCheck' } } { 'functionName' : 'ldapDeleteWithScript' , 'functionMessage' : 'Recursive delete of suffix.' , 'functionArguments' : { 'dsDeleteSubtree' : 'TRUE' , 'dsInstanceHost' : directoryServer.host , 'dsInstancePort' : directoryServer.port , 'dsInstanceDn' : directoryServer.dn , 'dsInstancePswd' : directoryServer.password , 'dsDn' : ['%s' % server.suffix] , 'expectedRC' : 'noCheck' , 'knownIssue' : '6917970' } } { 'functionName' : 'StopDsWithScript' , 'functionMessage' : 'Stop the Directory Server.' , 'functionArguments' : { 'dsHost' : directoryServer.host , 'dsAdminPort' : directoryServer.adminport , 'dsBindDN' : directoryServer.dn , 'dsBindPwd' : directoryServer.password , 'expectedRC' : 'noCheck' } } { 'functionName' : 'removeTopology' , 'functionMessage' : 'Remove DS topology.' , } '%s: LDAPDelete failed. eInfo(%s)' % (eType,eInfo) '%s: Failed to cleanup. eInfo(%s)' % (eType,eInfo) This function gets the replication status of a topology using dsreplication. Location of target host Pathname to installation root Directory server hostname or IP address Directory server admin port number DN of the replicated suffix Global Administrator UID Global Administrator password Number of iterations Number of milliseconds to wait between iterations Expected return code value. Default value is 0 'Getting replication status from server %s:%s' \ % (dsInstanceHost,dsInstanceAdminPort) { 'name' : 'Get Replication Status', 'location' : location, 'command' : STAFCmd, 'arguments' : STAFCmdParams } { 'returncode' : commandRC, 'result' : commandResult, 'expected' : expectedRC } commandResult 'getReplicationStatus LOOP %s => missingChanges? \ (True=1/False=0) : %s' % (myLoop, missingRC) { 'sleepForMilliSeconds' : noOfMilliSeconds } 'getReplicationStatus: Replication status retrieved from server \ %s:%s : \n%s ' % \ (dsInstanceHost, dsInstanceAdminPort, replStatusResult) 'getReplicationStatus: Server %s is missing %s changes. \ Entries: %s - Age of the oldest missing change: %s ' % \ (server, missingChanges, entries, age) 'getReplicationStatus: Different number of entries.\n\ Server %s : %s entries\n\ Reference server %s : %s entries\n' % \ (server, entries, refServername, refNbOfEntries) commandResult This function stages locally the static data files Non default file extensions for specific tests Name of the test group directory that holds the static data files 'Not staging static data files as remote host %s (%s) is local.' % (STAF_REMOTE_HOSTNAME,gethostbyname(STAF_REMOTE_HOSTNAME)) 'Will creating stub folder in testdata.' 0 'Remote host %s (%s) is not local.' % (STAF_REMOTE_HOSTNAME,gethostbyname(STAF_REMOTE_HOSTNAME)) { 'location' : STAXServiceMachine, 'entry' : localTestsGroupDir, 'attribute' : 'TYPE' } 'Not staging static data files as they already exist.' 0 'Staging static data files on local machine.' 'Copy quickstart ldif data files locally from %s to %s.' % \ (quickStartGroupDir,quickStartLocalTestsGroupDir) { 'location' : STAXServiceMachine, 'srcfolder' : quickStartGroupDir, 'destfolder' : quickStartLocalTestsGroupDir, 'extension' : 'ldif' } 'Copy %s data files locally from %s to %s.' % \ (fExt,sourceTestsGroupDir,localTestsGroupDir) { 'location' : STAXServiceMachine, 'srcfolder' : sourceTestsGroupDir, 'destfolder' : localTestsGroupDir, 'extension' : '%s' % fExt } This function stages locally and builds the java class files Name of the custom java based project (should be folder name) { 'location' : STAXServiceMachine, 'entry' : javaLocalDir, 'attribute' : 'TYPE' } 'Staging %s java files on local machine.' % javaProject 'Copy %s java files locally from %s to %s.' % \ (javaProject,javaSharedDir,javaLocalDir) { 'location' : STAXServiceMachine, 'srcfolder' : javaSharedDir, 'destfolder' : javaLocalDir, 'extension' : 'java' } 'Copy any jar files locally from %s to %s.' % \ (javaSharedDir,javaLocalDir) { 'location' : STAXServiceMachine, 'srcfolder' : javaSharedDir, 'destfolder' : javaLocalDir, 'extension' : 'jar' } { 'location' : STAXServiceMachine, 'foldername' : javaLocalDir, 'extension' : 'class' } 'Compile Java files under %s on %s' \ % (javaLocalDir, STAXServiceMachine) { 'location' : STAXServiceMachine, 'foldername' : '%s' % javaLocalDir, 'classpath' : java_classpath } 'Not Staging %s java files as they already exist.' % javaProject This function stages locally and builds the java class files Name of the custom SNMP based project (should be folder name) { 'location' : STAXServiceMachine, 'entry' : javaLocalDir, 'attribute' : 'TYPE' } 'Not Staging SNMP files as they already exist.' 0 'Staging SNMP files on local machine.' 'Copy java files locally from %s to %s.' % \ (javaSharedDir,javaLocalDir) { 'location' : STAXServiceMachine, 'srcfolder' : javaSharedDir, 'destfolder' : javaLocalDir, 'extension' : 'java' } { 'location' : STAXServiceMachine, 'entry' : SNMP_OPENDMK_JARFILE, 'attribute' : 'TYPE' } 'OpenDMK jar %s not found.' % SNMP_OPENDMK_JARFILE { 'location' : STAXServiceMachine, 'foldername' : javaLocalDir, 'extension' : 'class' } 'Copy DS zip archive locally from %s to %s.' % \ (ZIPPATH,local.temp) { 'srcfile' : '%s/%s' % (ZIPPATH, ZIPNAME), 'destfile' : '%s/%s' % (local.temp, ZIPNAME), 'remotehost' : STAXServiceMachine } 'Extract locally DS zip archive to %s' % local.temp { 'location' : STAXServiceMachine, 'zipfile' : '%s/%s' % (local.temp, ZIPNAME), 'unzipdir' : local.temp } { 'location' : STAF_REMOTE_HOSTNAME, 'srcfile' : '%s/%s' % (DIRECTORY_INSTANCE_BIN,SNMP_OPENDS_JARFILE), 'destfile' : '%s/%s' % (local.temp,SNMP_OPENDS_JARFILE), 'remotehost' : STAXServiceMachine } 'Compile Java files under %s on %s' \ % (javaLocalDir, STAXServiceMachine) { 'location' : STAXServiceMachine, 'foldername' : javaLocalDir, 'classpath' : '%s%s%s%s%s' \ % (opends_jarfile,separator,SNMP_OPENDMK_JARFILE,separator,jstaf_jarfile) } 'Copy OpenDMK jar file %s locally to %s.' \ % (SNMP_OPENDMK_JARFILE,javaLocalDir) { 'remotehost' : STAXServiceMachine, 'srcfile' : SNMP_OPENDMK_JARFILE, 'destfile' : '%s/jdmkrt.jar' % javaLocalDir, 'remotehost' : STAXServiceMachine } 'Delete %s/%s' % (local.temp, ZIPNAME) { 'location' : STAXServiceMachine, 'filename' : '%s/%s' % (local.temp, ZIPNAME) } 'Delete %s/%s' % (local.temp, OPENDSNAME) { 'location' : STAXServiceMachine, 'foldername' : '%s/%s' % (local.temp, OPENDSNAME) } This function creates some stub folders in testdata 'Create folder %s/data on host %s' % (local.directory,STAF_LOCAL_HOSTNAME) { 'location' : STAF_LOCAL_HOSTNAME, 'foldername' : '%s/data' % local.directory }