diff --git a/packaging/org.linkedin.glu.packaging-all/src/cmdline/resources/bin/tutorial.sh b/packaging/org.linkedin.glu.packaging-all/src/cmdline/resources/bin/tutorial.sh index aa574e59..2deb457e 100644 --- a/packaging/org.linkedin.glu.packaging-all/src/cmdline/resources/bin/tutorial.sh +++ b/packaging/org.linkedin.glu.packaging-all/src/cmdline/resources/bin/tutorial.sh @@ -46,9 +46,9 @@ init() GLU_TUTORIAL_DISTS=$GLU_TUTORIAL_DIR/distributions/tutorial GLU_TUTORIAL_BIN=$GLU_TUTORIAL_DIR/bin - GLU_TUTORIAL_AGENT_ROOT=$GLU_TUTORIAL_DISTS/agents/org.linkedin.glu.agent-server-$GLU_VERSION-$GLU_TUTORIAL_AGENT_NAME - GLU_TUTORIAL_CONSOLE_ROOT=$GLU_TUTORIAL_DISTS/consoles/org.linkedin.glu.console-server-$GLU_VERSION-$GLU_TUTORIAL_CONSOLE_NAME - GLU_TUTORIAL_ZOOKEEPER_ROOT=$GLU_TUTORIAL_DISTS/zookeeper-clusters/zookeeper-cluster-$GLU_TUTORIAL_ZOOKEEPER_CLUSTER_NAME/org.linkedin.zookeeper-server-$ZOOKEEPER_VERSION-$GLU_TUTORIAL_ZOOKEEPER_HOST + GLU_TUTORIAL_AGENT_ROOT=$GLU_TUTORIAL_DISTS/agents/org.linkedin.glu.agent-server-$GLU_TUTORIAL_AGENT_NAME-$GLU_VERSION + GLU_TUTORIAL_CONSOLE_ROOT=$GLU_TUTORIAL_DISTS/consoles/org.linkedin.glu.console-server-$GLU_TUTORIAL_CONSOLE_NAME-$GLU_VERSION + GLU_TUTORIAL_ZOOKEEPER_ROOT=$GLU_TUTORIAL_DISTS/zookeeper-clusters/zookeeper-cluster-$GLU_TUTORIAL_ZOOKEEPER_CLUSTER_NAME/org.linkedin.zookeeper-server-$ZOOKEEPER_VERSION GLU_TUTORIAL_AGENT_LINK=$GLU_TUTORIAL_DIR/agent-server GLU_TUTORIAL_CONSOLE_LINK=$GLU_TUTORIAL_DIR/console-server diff --git a/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/AgentServerPackager.groovy b/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/AgentServerPackager.groovy index fe1a2d47..5396f779 100644 --- a/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/AgentServerPackager.groovy +++ b/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/AgentServerPackager.groovy @@ -65,9 +65,9 @@ public class AgentServerPackager extends BasePackager metaModel.configTokens } - PackagedArtifact createPackage() + def createPackage() { - ensureVersion(metaModel.version) + String packageName = ensureVersion(metaModel.version) def tokens = [ agentMetaModel: metaModel, @@ -110,18 +110,36 @@ public class AgentServerPackager extends BasePackager if(configTokens.GLU_AGENT_FABRIC) parts << configTokens.GLU_AGENT_FABRIC + def upgradeParts = [*parts] + + upgradeParts << 'upgrade' + + parts << metaModel.version + upgradeParts << metaModel.version + if(metaModel.gluMetaModel.zooKeeperRoot != GluMetaModel.DEFAULT_ZOOKEEPER_ROOT) tokens[CONFIG_TOKENS_KEY].GLU_AGENT_ZOOKEEPER_ROOT = metaModel.gluMetaModel.zooKeeperRoot Resource packagePath = outputFolder.createRelative(parts.join('-')) + Resource upgradePackagePath = outputFolder.createRelative(upgradeParts.join('-')) + if(!dryMode) { copyInputPackage(packagePath) - configure(packagePath, tokens) + Resource serverRoot = configure(packagePath, tokens) + + shell.delete(upgradePackagePath) + shell.cp(serverRoot, upgradePackagePath) } - return new PackagedArtifact(location: packagePath, - host: metaModel.host.resolveHostAddress(), - port: agentPort) + + return [ + agentServer: new PackagedArtifact(location: packagePath, + host: metaModel.host.resolveHostAddress(), + port: agentPort), + agentServerUpgrade: new PackagedArtifact(location: upgradePackagePath, + host: metaModel.host.resolveHostAddress(), + port: agentPort), + ] } Resource configure(Resource packagePath, Map tokens) @@ -136,6 +154,6 @@ public class AgentServerPackager extends BasePackager processConfigs('agent-server', tokens, serverRoot) - return packagePath + return serverRoot } } \ No newline at end of file diff --git a/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/BasePackager.groovy b/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/BasePackager.groovy index 8877aee2..a74a119c 100644 --- a/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/BasePackager.groovy +++ b/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/BasePackager.groovy @@ -27,10 +27,19 @@ public class BasePackager protected def _sha1s = [:].withDefault { Resource r -> shell.sha1(r) } - void ensureVersion(String version) + /** + * Make sure the package name ends with the proper version + * + * @return the package name (without the version) + */ + String ensureVersion(String version) { - if(!inputPackage.filename.endsWith("-${version}")) + String fullPackageName = inputPackage.filename + + if(!fullPackageName.endsWith("-${version}")) throw new IllegalArgumentException("input package [${inputPackage.filename}] mismatch version [${version}]") + + fullPackageName - "-${version}" } Shell getShell() @@ -38,19 +47,14 @@ public class BasePackager packagerContext.shell } - String getPackageName() - { - def fileName = inputPackage.filename - if(fileName.endsWith(".tgz")) - return fileName[0..-5] - else - return fileName - } - Resource copyInputPackage(Resource destination) { Resource parent = shell.mkdirs(destination.parentResource) + // make sure do not exist... + shell.delete(destination) + shell.delete(parent.createRelative(inputPackage.filename)) + Resource location = shell.cp(inputPackage, parent) if(location != destination) diff --git a/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/ConsoleServerPackager.groovy b/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/ConsoleServerPackager.groovy index 5ba2f133..87a7d506 100644 --- a/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/ConsoleServerPackager.groovy +++ b/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/ConsoleServerPackager.groovy @@ -50,7 +50,7 @@ public class ConsoleServerPackager extends BasePackager PackagedArtifact createPackage() { - ensureVersion(metaModel.version) + String packageName = ensureVersion(metaModel.version) def jettyDistribution = shell.ls(inputPackage).find { it.filename.startsWith('jetty-distribution-') }?.filename @@ -76,6 +76,8 @@ public class ConsoleServerPackager extends BasePackager if(metaModel.name != 'default') parts << metaModel.name + parts << metaModel.version + Resource packagePath =outputFolder.createRelative(parts.join('-')) if(!dryMode) { diff --git a/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/ZooKeeperClusterPackager.groovy b/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/ZooKeeperClusterPackager.groovy index 4748ff89..e33cdd3d 100644 --- a/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/ZooKeeperClusterPackager.groovy +++ b/packaging/org.pongasoft.glu.packaging-setup-impl/src/main/groovy/org/pongasoft/glu/packaging/setup/ZooKeeperClusterPackager.groovy @@ -39,16 +39,22 @@ public class ZooKeeperClusterPackager extends BasePackager PackagedArtifact createPackage(Resource clusterPackagePath, ZooKeeperMetaModel zk) { - ensureVersion(zk.version) + String packageName = ensureVersion(zk.version) String host = zk.host ?: 'localhost' int port = zk.clientPort def parts = [packageName] - parts << host + + // include host name only when 'real' cluster + if(zk.zooKeeperCluster.zooKeepers.size() > 1) + parts << host if(port != ZooKeeperMetaModel.DEFAULT_CLIENT_PORT) parts << port + + parts << zk.version + String newPackageName = parts.join('-') Resource packagePath = clusterPackagePath.createRelative(newPackageName) if(!dryMode) diff --git a/packaging/org.pongasoft.glu.packaging-setup-impl/src/test/groovy/test/setup/TestAgentServerPackager.groovy b/packaging/org.pongasoft.glu.packaging-setup-impl/src/test/groovy/test/setup/TestAgentServerPackager.groovy index 8ff75cb9..5b11e074 100644 --- a/packaging/org.pongasoft.glu.packaging-setup-impl/src/test/groovy/test/setup/TestAgentServerPackager.groovy +++ b/packaging/org.pongasoft.glu.packaging-setup-impl/src/test/groovy/test/setup/TestAgentServerPackager.groovy @@ -47,9 +47,11 @@ public class TestAgentServerPackager extends BasePackagerTest configsRoots: copyConfigs(shell.toResource('/configs')), metaModel: testModel.agents[0]) - PackagedArtifact artifact = packager.createPackage() + def pkg = packager.createPackage() - assertEquals(shell.toResource("/out/org.linkedin.glu.agent-server-${GLU_VERSION}-agent-1"), artifact.location) + PackagedArtifact artifact = pkg.agentServer + + assertEquals(shell.toResource("/out/org.linkedin.glu.agent-server-agent-1-${GLU_VERSION}"), artifact.location) assertEquals('localhost', artifact.host) assertEquals(AgentMetaModel.DEFAULT_PORT, artifact.port) @@ -91,6 +93,20 @@ GLU_AGENT_NAME="agent-1" ] checkPackageContent(expectedResources, artifact.location) + + // now check for upgrade + artifact = pkg.agentServerUpgrade + + assertEquals(shell.toResource("/out/org.linkedin.glu.agent-server-agent-1-upgrade-${GLU_VERSION}"), artifact.location) + assertEquals('localhost', artifact.host) + assertEquals(AgentMetaModel.DEFAULT_PORT, artifact.port) + + expectedResources = + expectedResources + .findAll { k, v -> k.startsWith("/${GLU_VERSION}/")} + .collectEntries {k, v -> [k - "/${GLU_VERSION}", v]} + + checkPackageContent(expectedResources, artifact.location) } } @@ -135,9 +151,11 @@ zooKeeperClusters << [ configsRoots: copyConfigs(shell.toResource('/configs')), metaModel: toGluMetaModel(metaModel).agents[0]) - PackagedArtifact artifact = packager.createPackage() + def pkg = packager.createPackage() - assertEquals(shell.toResource("/out/org.linkedin.glu.agent-server-${GLU_VERSION}-12345"), artifact.location) + PackagedArtifact artifact = pkg.agentServer + + assertEquals(shell.toResource("/out/org.linkedin.glu.agent-server-12345-${GLU_VERSION}"), artifact.location) assertEquals('ha', artifact.host) assertEquals(12345, artifact.port) @@ -176,6 +194,20 @@ GLU_AGENT_PORT="12345" ] checkPackageContent(expectedResources, artifact.location) + + // now check for upgrade + artifact = pkg.agentServerUpgrade + + assertEquals(shell.toResource("/out/org.linkedin.glu.agent-server-12345-upgrade-${GLU_VERSION}"), artifact.location) + assertEquals('ha', artifact.host) + assertEquals(12345, artifact.port) + + expectedResources = + expectedResources + .findAll { k, v -> k.startsWith("/${GLU_VERSION}/")} + .collectEntries {k, v -> [k - "/${GLU_VERSION}", v]} + + checkPackageContent(expectedResources, artifact.location) } } diff --git a/packaging/org.pongasoft.glu.packaging-setup-impl/src/test/groovy/test/setup/TestConsoleServerPackager.groovy b/packaging/org.pongasoft.glu.packaging-setup-impl/src/test/groovy/test/setup/TestConsoleServerPackager.groovy index 7091753a..495bdb2c 100644 --- a/packaging/org.pongasoft.glu.packaging-setup-impl/src/test/groovy/test/setup/TestConsoleServerPackager.groovy +++ b/packaging/org.pongasoft.glu.packaging-setup-impl/src/test/groovy/test/setup/TestConsoleServerPackager.groovy @@ -47,7 +47,7 @@ public class TestConsoleServerPackager extends BasePackagerTest PackagedArtifact artifact = packager.createPackage() - assertEquals(shell.toResource("/out/org.linkedin.glu.console-server-${GLU_VERSION}-tutorialConsole"), artifact.location) + assertEquals(shell.toResource("/out/org.linkedin.glu.console-server-tutorialConsole-${GLU_VERSION}"), artifact.location) assertEquals('localhost', artifact.host) assertEquals(ConsoleMetaModel.DEFAULT_PORT, artifact.port) diff --git a/packaging/org.pongasoft.glu.packaging-setup-impl/src/test/groovy/test/setup/TestZooKeeperClusterPackager.groovy b/packaging/org.pongasoft.glu.packaging-setup-impl/src/test/groovy/test/setup/TestZooKeeperClusterPackager.groovy index f48f6949..3b18e2e9 100644 --- a/packaging/org.pongasoft.glu.packaging-setup-impl/src/test/groovy/test/setup/TestZooKeeperClusterPackager.groovy +++ b/packaging/org.pongasoft.glu.packaging-setup-impl/src/test/groovy/test/setup/TestZooKeeperClusterPackager.groovy @@ -24,6 +24,8 @@ public class TestZooKeeperClusterPackager extends BasePackagerTest def pkg = packager.createPackage() + def zkPackageName = "org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}" + def expectedResources = [ // zookeeper cluster config @@ -42,14 +44,14 @@ public class TestZooKeeperClusterPackager extends BasePackagerTest '/conf/org/glu/agents/fabrics/glu-dev-1/config/console.truststore': toBinaryResource(keysRootResource.createRelative('console.truststore')), // zookeeper server config - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-127.0.0.1": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-127.0.0.1/README.md": 'this is the readme', - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-127.0.0.1/bin": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-127.0.0.1/bin/zookeeperctl.sh": ZOOKEEPERCTL_SH, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-127.0.0.1/lib": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-127.0.0.1/lib/acme.jar": 'this is the jar', - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-127.0.0.1/conf": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-127.0.0.1/conf/zoo.cfg": """# The number of milliseconds of each tick + "/${zkPackageName}": DIRECTORY, + "/${zkPackageName}/README.md": 'this is the readme', + "/${zkPackageName}/bin": DIRECTORY, + "/${zkPackageName}/bin/zookeeperctl.sh": ZOOKEEPERCTL_SH, + "/${zkPackageName}/lib": DIRECTORY, + "/${zkPackageName}/lib/acme.jar": 'this is the jar', + "/${zkPackageName}/conf": DIRECTORY, + "/${zkPackageName}/conf/zoo.cfg": """# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take @@ -73,7 +75,7 @@ clientPort=2181 def zk = (pkg.zooKeepers as List)[0] - assertEquals(shell.toResource("/out/zookeeper-cluster-tutorialZooKeeperCluster/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-127.0.0.1"), + assertEquals(shell.toResource("/out/zookeeper-cluster-tutorialZooKeeperCluster/${zkPackageName}"), zk.location) assertEquals('127.0.0.1', zk.host) assertEquals(2181, zk.port) @@ -123,6 +125,9 @@ zooKeeperClusters << [ assertEquals(shell.toResource("/out/zookeeper-cluster-zkc"), pkg.zooKeeperCluster.location) + def zk1PackageName = "org.linkedin.zookeeper-server-h1-${ZOOKEEPER_VERSION}" + def zk2PackageName = "org.linkedin.zookeeper-server-h2-${ZOOKEEPER_VERSION}" + def expectedResources = [ // zookeeper cluster config '/conf': DIRECTORY, @@ -137,15 +142,15 @@ zooKeeperClusters << [ '/conf/org/glu/agents/fabrics/f1/config/console.truststore': toBinaryResource(keysRootResource.createRelative('console.truststore')), // zookeeper server config for h1 - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1/README.md": 'this is the readme', - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1/bin": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1/bin/zookeeperctl.sh": ZOOKEEPERCTL_SH, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1/lib": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1/lib/acme.jar": 'this is the jar', - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1/conf": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1/conf/myid": '1', - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1/conf/zoo.cfg": """# The number of milliseconds of each tick + "/${zk1PackageName}": DIRECTORY, + "/${zk1PackageName}/README.md": 'this is the readme', + "/${zk1PackageName}/bin": DIRECTORY, + "/${zk1PackageName}/bin/zookeeperctl.sh": ZOOKEEPERCTL_SH, + "/${zk1PackageName}/lib": DIRECTORY, + "/${zk1PackageName}/lib/acme.jar": 'this is the jar', + "/${zk1PackageName}/conf": DIRECTORY, + "/${zk1PackageName}/conf/myid": '1', + "/${zk1PackageName}/conf/zoo.cfg": """# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take @@ -164,15 +169,15 @@ server.2=h2:2888:3888 """, // zookeeper server config for h2 - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h2": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h2/README.md": 'this is the readme', - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h2/bin": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h2/bin/zookeeperctl.sh": ZOOKEEPERCTL_SH, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h2/lib": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h2/lib/acme.jar": 'this is the jar', - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h2/conf": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h2/conf/myid": '2', - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h2/conf/zoo.cfg": """# The number of milliseconds of each tick + "/${zk2PackageName}": DIRECTORY, + "/${zk2PackageName}/README.md": 'this is the readme', + "/${zk2PackageName}/bin": DIRECTORY, + "/${zk2PackageName}/bin/zookeeperctl.sh": ZOOKEEPERCTL_SH, + "/${zk2PackageName}/lib": DIRECTORY, + "/${zk2PackageName}/lib/acme.jar": 'this is the jar', + "/${zk2PackageName}/conf": DIRECTORY, + "/${zk2PackageName}/conf/myid": '2', + "/${zk2PackageName}/conf/zoo.cfg": """# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take @@ -197,14 +202,14 @@ server.2=h2:2888:3888 def zk1 = (pkg.zooKeepers as List)[0] - assertEquals(shell.toResource("/out/zookeeper-cluster-zkc/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1"), + assertEquals(shell.toResource("/out/zookeeper-cluster-zkc/${zk1PackageName}"), zk1.location) assertEquals('h1', zk1.host) assertEquals(2181, zk1.port) def zk2 = (pkg.zooKeepers as List)[1] - assertEquals(shell.toResource("/out/zookeeper-cluster-zkc/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h2"), + assertEquals(shell.toResource("/out/zookeeper-cluster-zkc/${zk2PackageName}"), zk2.location) assertEquals('h2', zk2.host) assertEquals(2181, zk2.port) @@ -261,6 +266,8 @@ zooKeeperClusters << [ assertEquals(shell.toResource("/out/zookeeper-cluster-zkc"), pkg.zooKeeperCluster.location) + def zkPackageName = "org.linkedin.zookeeper-server-1234-${ZOOKEEPER_VERSION}" + def expectedResources = [ // zookeeper cluster config '/conf': DIRECTORY, @@ -301,14 +308,14 @@ glu.agent.ivySettings= ''', // zookeeper server config for h1 - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1-1234": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1-1234/README.md": 'this is the readme', - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1-1234/bin": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1-1234/bin/zookeeperctl.sh": ZOOKEEPERCTL_SH, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1-1234/lib": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1-1234/lib/acme.jar": 'this is the jar', - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1-1234/conf": DIRECTORY, - "/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1-1234/conf/zoo.cfg": """# The number of milliseconds of each tick + "/${zkPackageName}": DIRECTORY, + "/${zkPackageName}/README.md": 'this is the readme', + "/${zkPackageName}/bin": DIRECTORY, + "/${zkPackageName}/bin/zookeeperctl.sh": ZOOKEEPERCTL_SH, + "/${zkPackageName}/lib": DIRECTORY, + "/${zkPackageName}/lib/acme.jar": 'this is the jar', + "/${zkPackageName}/conf": DIRECTORY, + "/${zkPackageName}/conf/zoo.cfg": """# The number of milliseconds of each tick tickTime= # The number of ticks that the initial # synchronization phase can take @@ -330,7 +337,7 @@ clientPort=1234 def zk1 = (pkg.zooKeepers as List)[0] - assertEquals(shell.toResource("/out/zookeeper-cluster-zkc/org.linkedin.zookeeper-server-${ZOOKEEPER_VERSION}-h1-1234"), + assertEquals(shell.toResource("/out/zookeeper-cluster-zkc/${zkPackageName}"), zk1.location) assertEquals('h1', zk1.host) assertEquals(1234, zk1.port)