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);
     }