You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whirr.apache.org by as...@apache.org on 2012/03/21 16:56:39 UTC

svn commit: r1303452 - in /whirr/trunk: CHANGES.txt core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java

Author: asavu
Date: Wed Mar 21 15:56:39 2012
New Revision: 1303452

URL: http://svn.apache.org/viewvc?rev=1303452&view=rev
Log:
WHIRR-464. Do not fail if whirr.cluster-user already exists on the remote machine (Rodrigo Duarte Sousa via Andrei Savu)

Modified:
    whirr/trunk/CHANGES.txt
    whirr/trunk/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java

Modified: whirr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/whirr/trunk/CHANGES.txt?rev=1303452&r1=1303451&r2=1303452&view=diff
==============================================================================
--- whirr/trunk/CHANGES.txt (original)
+++ whirr/trunk/CHANGES.txt Wed Mar 21 15:56:39 2012
@@ -73,6 +73,9 @@ Trunk (unreleased changes)
 
     WHIRR-551. Upgrade to jclouds 1.3.2 (Andrei Savu)
 
+    WHIRR-464. Do not fail if whirr.cluster-user already exists on the 
+    remote machine (Rodrigo Duarte Sousa via Andrei Savu)
+
   BUG FIXES
 
     WHIRR-555. Fix java install script: $(...) -> `...` (kve)

Modified: whirr/trunk/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java
URL: http://svn.apache.org/viewvc/whirr/trunk/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java?rev=1303452&r1=1303451&r2=1303452&view=diff
==============================================================================
--- whirr/trunk/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java (original)
+++ whirr/trunk/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java Wed Mar 21 15:56:39 2012
@@ -42,6 +42,7 @@ import java.net.MalformedURLException;
 
 import static org.jclouds.compute.options.TemplateOptions.Builder.runScript;
 import static org.jclouds.scriptbuilder.domain.Statements.appendFile;
+import static org.jclouds.scriptbuilder.domain.Statements.createOrOverwriteFile;
 import static org.jclouds.scriptbuilder.domain.Statements.interpret;
 import static org.jclouds.scriptbuilder.domain.Statements.newStatementList;
 
@@ -88,7 +89,7 @@ public class BootstrapTemplate {
       "/tmp/logs",// location of stdout.log and stderr.log
       ImmutableMap.of("newUser", user, "defaultHome", "/home/users"), // variables
       ImmutableList.<Statement> of(
-        createUserWithPublicAndPrivateKey(user, publicKey, privateKey),
+        ensureUserExistsWithPublicAndPrivateKey(user, publicKey, privateKey),
         makeSudoersOnlyPermitting(user),
         statement)
     );
@@ -123,22 +124,27 @@ public class BootstrapTemplate {
   }
 
   // must be used inside InitBuilder, as this sets the shell variables used in this statement
-  private static Statement createUserWithPublicAndPrivateKey(String username,
+  private static Statement ensureUserExistsWithPublicAndPrivateKey(String username,
      String publicKey, String privateKey) {
     // note directory must be created first
     return newStatementList(
       interpret(
-        "mkdir -p $DEFAULT_HOME/$NEW_USER/.ssh",
-        "useradd --shell /bin/bash -d $DEFAULT_HOME/$NEW_USER $NEW_USER\n"),
+        "USER_HOME=$DEFAULT_HOME/$NEW_USER",
+        "mkdir -p $USER_HOME/.ssh",
+        "useradd --shell /bin/bash -d $USER_HOME $NEW_USER",
+        "[ $? -ne 0 ] && USER_HOME=$(grep $NEW_USER /etc/passwd | cut -d \":\" -f6)\n"),
       appendFile(
-        "$DEFAULT_HOME/$NEW_USER/.ssh/authorized_keys",
+        "$USER_HOME/.ssh/authorized_keys",
         Splitter.on('\n').split(publicKey)),
-      appendFile(
-        "$DEFAULT_HOME/$NEW_USER/.ssh/id_rsa",
+      createOrOverwriteFile(
+        "$USER_HOME/.ssh/id_rsa.pub",
+        Splitter.on('\n').split(publicKey)),      
+      createOrOverwriteFile(
+        "$USER_HOME/.ssh/id_rsa",
         Splitter.on('\n').split(privateKey)),
       interpret(
-        "chmod 400 $DEFAULT_HOME/$NEW_USER/.ssh/*",
-        "chown -R $NEW_USER $DEFAULT_HOME/$NEW_USER\n"));
+        "chmod 400 $USER_HOME/.ssh/*",
+        "chown -R $NEW_USER $USER_HOME\n"));
   }
 
   // must be used inside InitBuilder, as this sets the shell variables used in this statement