Author: asavu
Date: Wed Mar 21 15:46:15 2012
New Revision: 1303450

URL: http://svn.apache.org/viewvc?rev=1303450&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/branches/branch-0.7/CHANGES.txt
    
whirr/branches/branch-0.7/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java

Modified: whirr/branches/branch-0.7/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/whirr/branches/branch-0.7/CHANGES.txt?rev=1303450&r1=1303449&r2=1303450&view=diff
==============================================================================
--- whirr/branches/branch-0.7/CHANGES.txt (original)
+++ whirr/branches/branch-0.7/CHANGES.txt Wed Mar 21 15:46:15 2012
@@ -22,9 +22,12 @@ Release 0.7.2
     WHIRR-554. Upgrade elasticsearch to 0.19.0 (Andrei Savu)
 
     WHIRR-553. Upgrade Cassandra to 1.0.8 (Andrei Savu)
-
+  
     WHIRR-335. Update Hama service to Hama 0.4-incubating (Edward J. Yoon via 
Frank Scholten)
 
+    WHIRR-464. Do not fail if whirr.cluster-user already exists on the 
+    remote machine (Rodrigo Duarte Sousa via Andrei Savu)
+ 
   BUG FIXES
 
 Release 0.7.1 - 2012-02-23

Modified: 
whirr/branches/branch-0.7/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java
URL: 
http://svn.apache.org/viewvc/whirr/branches/branch-0.7/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java?rev=1303450&r1=1303449&r2=1303450&view=diff
==============================================================================
--- 
whirr/branches/branch-0.7/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java
 (original)
+++ 
whirr/branches/branch-0.7/core/src/main/java/org/apache/whirr/compute/BootstrapTemplate.java
 Wed Mar 21 15:46:15 2012
@@ -41,6 +41,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;
 
@@ -86,7 +87,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)
     );
@@ -109,22 +110,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


Reply via email to