You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2015/03/13 12:20:03 UTC
[3/8] incubator-brooklyn git commit: Basho Riak - Linux Install
Basho Riak - Linux Install
- fix installation for debian 7
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/ccf41024
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/ccf41024
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/ccf41024
Branch: refs/heads/master
Commit: ccf41024f585cf96dc87eb429b0bbfd1da8c3ef9
Parents: 83299d1
Author: Valentin Aitken <bo...@gmail.com>
Authored: Fri Feb 27 10:26:01 2015 +0200
Committer: Valentin Aitken <bo...@gmail.com>
Committed: Mon Mar 2 13:26:26 2015 +0200
----------------------------------------------------------------------
.../entity/nosql/riak/RiakNodeSshDriver.java | 100 +++++++------------
1 file changed, 37 insertions(+), 63 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ccf41024/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 2e4fcd4..d390383 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
@@ -18,18 +18,14 @@
*/
package brooklyn.entity.nosql.riak;
-import static brooklyn.util.ssh.BashCommands.INSTALL_CURL;
-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 brooklyn.util.ssh.BashCommands.*;
import static java.lang.String.format;
import java.util.List;
import java.util.Map;
+import brooklyn.util.ssh.BashCommands;
+import com.google.api.client.util.Joiner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -44,8 +40,6 @@ import brooklyn.util.collections.MutableMap;
import brooklyn.util.net.Urls;
import brooklyn.util.os.Os;
import brooklyn.util.task.DynamicTasks;
-import brooklyn.util.task.ssh.SshTasks;
-import brooklyn.util.text.Strings;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
@@ -95,7 +89,6 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen
OsDetails osDetails = getMachine().getMachineDetails().getOsDetails();
List<String> commands = Lists.newLinkedList();
if (osDetails.isLinux()) {
-// commands.addAll(installLinux(getExpandedInstallDir()));
commands.addAll(installFromPackageCloud());
} else if (osDetails.isMac()) {
isPackageInstall = false;
@@ -113,69 +106,54 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen
.execute();
}
- private List<String> installLinux(String expandedInstallDir) {
- DynamicTasks.queueIfPossible(SshTasks.dontRequireTtyForSudo(getMachine(), SshTasks.OnFailingTask.WARN_OR_IF_DYNAMIC_FAIL_MARKING_INESSENTIAL)).orSubmitAndBlock();
-
- String installBin = Urls.mergePaths(expandedInstallDir, "bin");
- String saveAsYum = "riak.rpm";
- String saveAsApt = "riak.deb";
- OsDetails osDetails = getMachine().getOsDetails();
-
- String downloadUrl;
- String osReleaseCmd;
- if ("debian".equalsIgnoreCase(osDetails.getName())) {
- // TODO osDetails.getName() is returning "linux", instead of debian/ubuntu on AWS with jenkins image,
- // running as integration test targetting localhost.
- // TODO Debian support (default debian image fails with 'sudo: command not found')
- downloadUrl = (String)entity.getAttribute(RiakNode.DOWNLOAD_URL_DEBIAN);
- osReleaseCmd = osDetails.getVersion().substring(0, osDetails.getVersion().indexOf("."));
- } else {
- // assume Ubuntu
- downloadUrl = (String)entity.getAttribute(RiakNode.DOWNLOAD_URL_UBUNTU);
- osReleaseCmd = "`lsb_release -sc` && " +
- "export OS_RELEASE=`([[ \"lucid natty precise\" =~ (^| )\\$OS_RELEASE($| ) ]] && echo $OS_RELEASE || echo precise)`";
- }
- String apt = chainGroup(
- //debian fix
- "export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
- "which apt-get",
- ok(sudo("apt-get -y --allow-unauthenticated install logrotate libpam0g-dev libssl0.9.8")),
- "export OS_NAME=" + Strings.toLowerCase(osDetails.getName()),
- "export OS_RELEASE=" + osReleaseCmd,
- String.format("wget -O %s %s", saveAsApt, downloadUrl),
- sudo(String.format("dpkg -i %s", saveAsApt)));
- String yum = chainGroup(
- "which yum",
- ok(sudo("yum -y install openssl")),
- String.format("wget -O %s %s", saveAsYum, entity.getAttribute(RiakNode.DOWNLOAD_URL_RHEL_CENTOS)),
- sudo(String.format("rpm -Uvh %s", saveAsYum)));
+ private List<String> installFromPackageCloud() {
+ OsDetails osDetails = getMachine().getMachineDetails().getOsDetails();
return ImmutableList.<String>builder()
- .add("mkdir -p " + installBin)
- .add(INSTALL_CURL)
- .add(alternatives(apt, yum))
- .add("ln -s `which riak` " + Urls.mergePaths(installBin, "riak"))
- .add("ln -s `which riak-admin` " + Urls.mergePaths(installBin, "riak-admin"))
+ .add(osDetails.getName().toLowerCase().contains("debian") ? "export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" : "")
+ .add(ifNotExecutable("curl", Joiner.on('\n').join(installCurl())))
+ .addAll(ifExecutableElse("yum", installDebianBased(), installRpmBased()))
.build();
}
-
- private List<String> installFromPackageCloud() {
- return ifExecutableElse("yum", installDebianBased(), installRpmBased());
+
+ public List<String> installCurl() {
+ return ImmutableList.<String>builder()
+ .add(ifExecutableElse("yum",
+ BashCommands.sudo("apt-get install --assume-yes curl"),
+ BashCommands.sudo("yum install -y curl")))
+ .build();
}
private ImmutableList<String> installDebianBased() {
return ImmutableList.<String>builder()
- .add("curl https://packagecloud.io/install/repositories/basho/riak/script.deb | sudo bash")
- .add("sudo apt-get install --assume-yes riak")
+ .add("curl https://packagecloud.io/install/repositories/basho/riak/script.deb | " + BashCommands.sudo("bash"))
+ .add(BashCommands.sudo("apt-get install --assume-yes riak"))
.build();
}
-
+
private ImmutableList<String> installRpmBased() {
return ImmutableList.<String>builder()
- .add("curl https://packagecloud.io/install/repositories/basho/riak/script.rpm | sudo bash")
- .add("sudo yum install -y riak")
+ .add("curl https://packagecloud.io/install/repositories/basho/riak/script.rpm | " + BashCommands.sudo("bash"))
+ .add(BashCommands.sudo("yum install -y riak"))
.build();
}
+ private static String ifExecutableElse(String command, String ifTrue, String otherwise) {
+ return Joiner.on('\n').join(
+ ifExecutableElse(command, ImmutableList.<String>of(ifTrue), ImmutableList.<String>of(otherwise)));
+ }
+
+ /**
+ * Returns a command which
+ * executes <code>statement</code> only if <code>command</code> is NOT found in <code>$PATH</code>
+ *
+ * @param command
+ * @param statement
+ * @return command
+ */
+ private static String ifNotExecutable(String command, String statement) {
+ return String.format("{ { test ! -z `which %s`; } || { %s; } }", command, statement);
+ }
+
private static ImmutableList<String> ifExecutableElse(String command, List<String> ifTrue, List<String> otherwise) {
return ImmutableList.<String>builder()
.add(String.format("if test -z `which %s`; then", command))
@@ -449,10 +427,6 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen
.execute() == 0);
}
- protected boolean isPackageInstall() {
- return isPackageInstall;
- }
-
private String getRiakName() {
return entity.getAttribute(RiakNode.RIAK_NODE_NAME);
}