Adds basic support for installing riak 2.0 (does not add support for 2.0-specific features)
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/31082e4a Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/31082e4a Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/31082e4a Branch: refs/heads/master Commit: 31082e4a44663850cfa941edaf75024590d19922 Parents: 26b9203 Author: Martin Harris <[email protected]> Authored: Mon Sep 15 12:58:55 2014 +0100 Committer: Martin Harris <[email protected]> Committed: Thu Sep 18 17:10:14 2014 +0100 ---------------------------------------------------------------------- .../hello-world-sql/src/main/webapp/riak.jsp | 3 +- .../brooklyn/entity/nosql/riak/RiakNode.java | 2 +- .../entity/nosql/riak/RiakNodeSshDriver.java | 40 ++++++++++++-------- .../entity/nosql/riak/riak-with-webapp.yaml | 3 +- 4 files changed, 29 insertions(+), 19 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/31082e4a/examples/webapps/hello-world-sql/src/main/webapp/riak.jsp ---------------------------------------------------------------------- diff --git a/examples/webapps/hello-world-sql/src/main/webapp/riak.jsp b/examples/webapps/hello-world-sql/src/main/webapp/riak.jsp index 44934ee..bfb296e 100644 --- a/examples/webapps/hello-world-sql/src/main/webapp/riak.jsp +++ b/examples/webapps/hello-world-sql/src/main/webapp/riak.jsp @@ -86,7 +86,8 @@ IRiakClient httpClient = RiakFactory.newClient(httpClusterConfig); - Bucket bucket = httpClient.fetchBucket("visitors").execute(); + // If the bucket already exists, createBucket simply fetches the bucket + Bucket bucket = httpClient.createBucket("visitors").execute(); if (request.getParameter("name") != null) { Message message = new Message(request.getParameter("name"), request.getParameter("message")); http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/31082e4a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java ---------------------------------------------------------------------- diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java index 8eb583f..aef9de1 100644 --- a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java +++ b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java @@ -42,7 +42,7 @@ public interface RiakNode extends SoftwareProcess { @SetFromFlag("version") ConfigKey<String> SUGGESTED_VERSION = ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION, - "1.4.10"); + "2.0.0"); @SetFromFlag("vmArgsTemplateUrl") ConfigKey<String> RIAK_VM_ARGS_TEMPLATE_URL = ConfigKeys.newStringConfigKey( http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/31082e4a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java ---------------------------------------------------------------------- diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java index 13250ce..5e57ccb 100644 --- a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java +++ b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java @@ -23,6 +23,7 @@ import static brooklyn.util.ssh.BashCommands.INSTALL_TAR; import static brooklyn.util.ssh.BashCommands.alternatives; import static brooklyn.util.ssh.BashCommands.chainGroup; import static brooklyn.util.ssh.BashCommands.commandToDownloadUrlAs; +import static brooklyn.util.ssh.BashCommands.ok; import static brooklyn.util.ssh.BashCommands.sudo; import static java.lang.String.format; @@ -103,19 +104,26 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen private List<String> installLinux(String expandedInstallDir) { LOG.info("Ignoring version config ({}) and installing from package manager", getEntity().getConfig(RiakNode.SUGGESTED_VERSION)); isPackageInstall = true; + OsDetails osDetails = getMachine().getMachineDetails().getOsDetails(); + String osVersion = osDetails.getVersion(); + String osMajorVersion = osVersion.contains(".") ? osVersion.substring(0, osVersion.indexOf(".")) : osVersion; + String fullVersion = getEntity().getConfig(RiakNode.SUGGESTED_VERSION); + String majorVersion = fullVersion.substring(0, 3); String installBin = Urls.mergePaths(expandedInstallDir, "bin"); String apt = chainGroup( //debian fix "export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "which apt-get", - "curl http://apt.basho.com/gpg/basho.apt.key | " + sudo("apt-key add -"), - sudo("bash -c \"echo deb http://apt.basho.com $(lsb_release -sc) main > /etc/apt/sources.list.d/basho.list\""), - sudo("apt-get update"), - sudo("apt-get -y --allow-unauthenticated install riak=" + getEntity().getConfig(RiakNode.SUGGESTED_VERSION) + "*")); + ok(sudo("apt-get -y --allow-unauthenticated install apt-get install libpam0g-dev")), + ok(sudo("apt-get -y --allow-unauthenticated install apt-get install libssl0.9.8")), + // TODO: Debian support (default debian image fails with 'sudo: command not found') + "[[ \"lucid natty precise\" =~ (^| )`lsb_release -sc`($| ) ]] && export OS_RELEASE=`lsb_release -sc` || export OS_RELEASE=precise", + String.format("wget http://s3.amazonaws.com/downloads.basho.com/riak/%s/%s/ubuntu/$OS_RELEASE/riak_%<s-1_amd64.deb", majorVersion, fullVersion), + sudo(String.format("dpkg -i riak_%s-1_amd64.deb", fullVersion))); String yum = chainGroup( "which yum", - sudo("yum -y --nogpgcheck install http://yum.basho.com/gpg/basho-release-5-1.noarch.rpm"), - sudo("yum -y --nogpgcheck install riak-" + getEntity().getConfig(RiakNode.SUGGESTED_VERSION) + "*")); + String.format("wget http://s3.amazonaws.com/downloads.basho.com/riak/%s/%s/rhel/%s/riak-%s-1.el6.x86_64.rpm", majorVersion, fullVersion, osMajorVersion, fullVersion), + sudo(String.format("rpm -Uvh riak-%s-1.el6.x86_64.rpm", fullVersion))); return ImmutableList.<String>builder() .add("mkdir -p " + installBin) .add(INSTALL_CURL) @@ -229,8 +237,9 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen @Override public boolean isRunning() { + // Version 2.0.0 requires sudo for `riak ping` ScriptHelper checkRunningScript = newScript(CHECK_RUNNING) - .body.append(format("%s ping", getRiakCmd())); + .body.append(sudo(format("%s ping", getRiakCmd()))); if (!isRiakOnPath) { Map<String, String> newPathVariable = ImmutableMap.of("PATH", sbinPath); @@ -262,7 +271,7 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen if (!hasJoinedCluster()) { ScriptHelper joinClusterScript = newScript("joinCluster") - .body.append(format("%s cluster join %s", getRiakAdminCmd(), nodeName)) + .body.append(sudo(format("%s cluster join %s", getRiakAdminCmd(), nodeName))) .failOnNonZeroResultCode(); if (!isRiakOnPath) { @@ -282,15 +291,15 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen @Override public void leaveCluster() { - //TODO: add 'riak-admin cluster force-remove' for erreneous and unrecoverable nodes. + //TODO: add 'riak-admin cluster force-remove' for erroneous and unrecoverable nodes. //FIXME: find a way to batch commit the changes, instead of committing for every operation. //FIXME: find a way to check if the node is the last in the cluster to avoid removing the only member and getting "last node error" if (hasJoinedCluster()) { ScriptHelper leaveClusterScript = newScript("leaveCluster") - .body.append(format("%s cluster leave", getRiakAdminCmd())) - .body.append(format("%s cluster plan", getRiakAdminCmd())) - .body.append(format("%s cluster commit", getRiakAdminCmd())); + .body.append(sudo(format("%s cluster leave", getRiakAdminCmd()))) + .body.append(sudo(format("%s cluster plan", getRiakAdminCmd()))) + .body.append(sudo(format("%s cluster commit", getRiakAdminCmd()))); if (!isRiakOnPath) { Map<String, String> newPathVariable = ImmutableMap.of("PATH", sbinPath); @@ -348,9 +357,10 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen .body.append(format("%s down %s", getRiakAdminCmd(), failedNodeName)) .body.append(sudo(format("rm -rf %s", getRingStateDir()))) .body.append(startCommand) - .body.append(format("%s cluster join %s", getRiakAdminCmd(), nodeName)) - .body.append(format("%s cluster plan", getRiakAdminCmd())) - .body.append(format("%s cluster commit", getRiakAdminCmd())); + .body.append(sudo(format("%s cluster join %s", getRiakAdminCmd(), nodeName))) + .body.append(sudo(format("%s cluster plan", getRiakAdminCmd()))) + .body.append(sudo(format("%s cluster commit", getRiakAdminCmd()))) + .failOnNonZeroResultCode(); if (!isRiakOnPath) { Map<String, String> newPathVariable = ImmutableMap.of("PATH", sbinPath); http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/31082e4a/software/nosql/src/main/resources/brooklyn/entity/nosql/riak/riak-with-webapp.yaml ---------------------------------------------------------------------- diff --git a/software/nosql/src/main/resources/brooklyn/entity/nosql/riak/riak-with-webapp.yaml b/software/nosql/src/main/resources/brooklyn/entity/nosql/riak/riak-with-webapp.yaml index 92def6a..8941f6e 100644 --- a/software/nosql/src/main/resources/brooklyn/entity/nosql/riak/riak-with-webapp.yaml +++ b/software/nosql/src/main/resources/brooklyn/entity/nosql/riak/riak-with-webapp.yaml @@ -29,13 +29,12 @@ services: initialSize: 2 id: mycluster brooklyn.config: - install.version: 1.4.10 + install.version: 2.0.0 provisioning.properties: osFamily: centos - serviceType: brooklyn.entity.webapp.ControlledDynamicWebAppCluster name: My Web - location: localhost brooklyn.config: initialSize: 2 wars.root: "classpath://brooklyn-example-hello-world-sql-webapp.war"
