Author: abayer
Date: Wed Aug 15 18:43:21 2012
New Revision: 1373560

URL: http://svn.apache.org/viewvc?rev=1373560&view=rev
Log:
WHIRR-604. Non-resolvable hostnames should be reset to something resolvable

Modified:
    whirr/trunk/CHANGES.txt
    whirr/trunk/core/src/main/java/org/apache/whirr/ClusterSpec.java
    
whirr/trunk/core/src/main/java/org/apache/whirr/service/jclouds/VariablesToExport.java
    whirr/trunk/core/src/main/resources/functions/configure_hostnames.sh
    whirr/trunk/core/src/test/java/org/apache/whirr/ClusterSpecTest.java
    
whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java
    
whirr/trunk/services/yarn/src/main/java/org/apache/whirr/service/yarn/YarnHandler.java

Modified: whirr/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/whirr/trunk/CHANGES.txt?rev=1373560&r1=1373559&r2=1373560&view=diff
==============================================================================
--- whirr/trunk/CHANGES.txt (original)
+++ whirr/trunk/CHANGES.txt Wed Aug 15 18:43:21 2012
@@ -114,6 +114,9 @@ Trunk (unreleased changes)
     WHIRR-528. Add a retry loop around apt-get and yum commands to overcome 
transient errors (Andrei Savu via adriancole)
 
   BUG FIXES
+  
+    WHIRR-604. Non-resolvable hostnames should be reset to something
+    resolvable. (abayer)
 
     WHIRR-579. Sun/Oracle JDK install doesn't work - switch to OpenJDK
     by default. (abayer)

Modified: whirr/trunk/core/src/main/java/org/apache/whirr/ClusterSpec.java
URL: 
http://svn.apache.org/viewvc/whirr/trunk/core/src/main/java/org/apache/whirr/ClusterSpec.java?rev=1373560&r1=1373559&r2=1373560&view=diff
==============================================================================
--- whirr/trunk/core/src/main/java/org/apache/whirr/ClusterSpec.java (original)
+++ whirr/trunk/core/src/main/java/org/apache/whirr/ClusterSpec.java Wed Aug 15 
18:43:21 2012
@@ -163,6 +163,12 @@ public class ClusterSpec {
     TERMINATE_ALL_ON_LAUNCH_FAILURE(Boolean.class, false, "Whether or not to " 
+
                                     "automatically terminate all nodes when 
cluster launch fails for some reason."),
 
+    AUTO_HOSTNAME_PREFIX(String.class, false, "If given, used a prefix when 
automatically " +
+                         "generating hostnames. Ignored if 
AUTO_HOSTNAME_SUFFIX is not also set."),
+
+    AUTO_HOSTNAME_SUFFIX(String.class, false, "If given, use this (along with 
AUTO_HOSTNAME_PREFIX, if set) to set " +
+                             "the hostname for the instances."),
+
     AWS_EC2_PLACEMENT_GROUP(String.class, false, "If given, use this existing 
EC2 placement group. (aws-ec2 specific option)");
     
     private Class<?> type;
@@ -283,6 +289,10 @@ public class ClusterSpec {
 
   private String awsEc2PlacementGroup;
 
+  private String autoHostnamePrefix;
+
+  private String autoHostnameSuffix;
+    
   private Configuration config;
   
   public ClusterSpec() throws ConfigurationException {
@@ -314,6 +324,9 @@ public class ClusterSpec {
     setInstanceTemplates(InstanceTemplate.parse(config));
     setMaxStartupRetries(getInt(Property.MAX_STARTUP_RETRIES, 1));
 
+    setAutoHostnamePrefix(getString(Property.AUTO_HOSTNAME_PREFIX));
+    setAutoHostnameSuffix(getString(Property.AUTO_HOSTNAME_SUFFIX));
+
     setProvider(getString(Property.PROVIDER));
     setIdentity(getString(Property.IDENTITY));
     setCredential(getString(Property.CREDENTIAL));
@@ -419,6 +432,9 @@ public class ClusterSpec {
 
     r.setAwsEc2PlacementGroup(getAwsEc2PlacementGroup());
 
+    r.setAutoHostnamePrefix(getAutoHostnamePrefix());
+    r.setAutoHostnameSuffix(getAutoHostnameSuffix());
+
     return r;
   }
 
@@ -675,9 +691,22 @@ public class ClusterSpec {
       LOG.warn("Please use provider \"cloudservers-us\" instead of 
\"cloudservers\"");
       provider = "cloudservers-us";
     }
+    if (provider != null) 
+        setAutoHostnameForProvider(provider);
     this.provider = provider;
   }
 
+  private void setAutoHostnameForProvider(String provider) {
+      if (provider.equals("cloudservers")
+          || provider.equals("cloudservers-us")) {
+          setAutoHostnamePrefix(null);
+          setAutoHostnameSuffix(".static.cloud-ips.com");
+      } else if (provider.equals("cloudservers-uk")) {
+          setAutoHostnamePrefix(null);
+          setAutoHostnameSuffix(".static.cloud-ips.co.uk");
+      }
+  }
+      
   public void setIdentity(String identity) {
     this.identity = identity;
   }
@@ -751,10 +780,27 @@ public class ClusterSpec {
   public String getAwsEc2PlacementGroup() {
     return awsEc2PlacementGroup;
   }
+    
   public void setAwsEc2PlacementGroup(String awsEc2PlacementGroup) {
     this.awsEc2PlacementGroup = awsEc2PlacementGroup;
   }
 
+  public String getAutoHostnameSuffix() {
+    return autoHostnameSuffix;
+  }
+    
+  public void setAutoHostnameSuffix(String autoHostnameSuffix) {
+    this.autoHostnameSuffix = autoHostnameSuffix;
+  }
+
+  public String getAutoHostnamePrefix() {
+    return autoHostnamePrefix;
+  }
+    
+  public void setAutoHostnamePrefix(String autoHostnamePrefix) {
+    this.autoHostnamePrefix = autoHostnamePrefix;
+  }
+
   /**
    * The rsa public key which is authorized to login to your on the cloud 
nodes.
    * 
@@ -928,6 +974,8 @@ public class ClusterSpec {
         && Objects.equal(getStateStoreBlob(), that.getStateStoreBlob())
         && Objects.equal(getAwsEc2SpotPrice(), that.getAwsEc2SpotPrice())
         && Objects.equal(getAwsEc2PlacementGroup(), 
that.getAwsEc2PlacementGroup())
+        && Objects.equal(getAutoHostnamePrefix(), that.getAutoHostnamePrefix())
+        && Objects.equal(getAutoHostnameSuffix(), that.getAutoHostnameSuffix())
         ;
     }
     return false;
@@ -962,7 +1010,9 @@ public class ClusterSpec {
         getStateStoreBlob(),
         getStateStoreContainer(),
         getAwsEc2SpotPrice(),
-        getAwsEc2PlacementGroup()
+        getAwsEc2PlacementGroup(),
+        getAutoHostnamePrefix(),
+        getAutoHostnameSuffix()
     );
   }
   
@@ -997,6 +1047,8 @@ public class ClusterSpec {
       .add("awsEc2SpotPrice", getAwsEc2SpotPrice())
       .add("terminateAllOnLauchFailure",isTerminateAllOnLaunchFailure())
       .add("awsEc2PlacementGroup",getAwsEc2PlacementGroup())
+      .add("autoHostnamePrefix",getAutoHostnamePrefix())
+      .add("autoHostnameSuffix",getAutoHostnameSuffix())
       .toString();
   }
 }

Modified: 
whirr/trunk/core/src/main/java/org/apache/whirr/service/jclouds/VariablesToExport.java
URL: 
http://svn.apache.org/viewvc/whirr/trunk/core/src/main/java/org/apache/whirr/service/jclouds/VariablesToExport.java?rev=1373560&r1=1373559&r2=1373560&view=diff
==============================================================================
--- 
whirr/trunk/core/src/main/java/org/apache/whirr/service/jclouds/VariablesToExport.java
 (original)
+++ 
whirr/trunk/core/src/main/java/org/apache/whirr/service/jclouds/VariablesToExport.java
 Wed Aug 15 18:43:21 2012
@@ -73,6 +73,14 @@ class VariablesToExport implements Suppl
       metadataMap.put("CLUSTER_NAME", clusterSpec.getClusterName());
     if (clusterSpec.getProvider() != null)
       metadataMap.put("CLOUD_PROVIDER", clusterSpec.getProvider());
+    if (clusterSpec.getAutoHostnameSuffix() != null
+        && !clusterSpec.getAutoHostnameSuffix().equals("")) {
+        metadataMap.put("AUTO_HOSTNAME_SUFFIX", 
clusterSpec.getAutoHostnameSuffix());
+        if (clusterSpec.getAutoHostnamePrefix() != null
+            && !clusterSpec.getAutoHostnamePrefix().equals("")) {
+            metadataMap.put("AUTO_HOSTNAME_PREFIX", 
clusterSpec.getAutoHostnamePrefix());
+        }
+    }
     if (instance != null) {
       metadataMap.put("ROLES", Joiner.on(",").join(instance.getRoles()));
       if (instance.getPublicIp() != null)

Modified: whirr/trunk/core/src/main/resources/functions/configure_hostnames.sh
URL: 
http://svn.apache.org/viewvc/whirr/trunk/core/src/main/resources/functions/configure_hostnames.sh?rev=1373560&r1=1373559&r2=1373560&view=diff
==============================================================================
--- whirr/trunk/core/src/main/resources/functions/configure_hostnames.sh 
(original)
+++ whirr/trunk/core/src/main/resources/functions/configure_hostnames.sh Wed 
Aug 15 18:43:21 2012
@@ -17,20 +17,20 @@
 function configure_hostnames() {
   local OPTIND
   local OPTARG
-  
-  case $CLOUD_PROVIDER in
-    cloudservers | cloudservers-uk | cloudservers-us )
-      if which dpkg &> /dev/null; then
-        PRIVATE_IP=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | 
awk '{ print $1}'`
-        HOSTNAME=`echo $PRIVATE_IP | tr . -`.static.cloud-ips.com
-        echo $HOSTNAME > /etc/hostname
-        sed -i -e "s/$PRIVATE_IP.*/$PRIVATE_IP $HOSTNAME/" /etc/hosts
-        set +e
-        /etc/init.d/hostname restart
-        set -e
-        sleep 2
-        hostname
+
+  if [ ! -z $AUTO_HOSTNAME_SUFFIX ]; then
+      PUBLIC_IP=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk 
'{ print $1}'`
+      HOSTNAME=${AUTO_HOSTNAME_PREFIX}`echo $PUBLIC_IP | tr . 
-`${AUTO_HOSTNAME_SUFFIX}
+      echo $HOSTNAME > /etc/hostname
+      sed -i -e "s/$PUBLIC_IP.*/$PUBLIC_IP $HOSTNAME/" /etc/hosts
+      set +e
+      if [ -f /etc/init.d/hostname ]; then
+          /etc/init.d/hostname restart
+      else
+          hostname $HOSTNAME
       fi
-      ;;
-  esac
+      set -e
+      sleep 2
+      hostname
+  fi
 }

Modified: whirr/trunk/core/src/test/java/org/apache/whirr/ClusterSpecTest.java
URL: 
http://svn.apache.org/viewvc/whirr/trunk/core/src/test/java/org/apache/whirr/ClusterSpecTest.java?rev=1373560&r1=1373559&r2=1373560&view=diff
==============================================================================
--- whirr/trunk/core/src/test/java/org/apache/whirr/ClusterSpecTest.java 
(original)
+++ whirr/trunk/core/src/test/java/org/apache/whirr/ClusterSpecTest.java Wed 
Aug 15 18:43:21 2012
@@ -297,6 +297,31 @@ public class ClusterSpecTest {
   }
 
   @Test
+  public void testAutoHostnameForProvider() throws Exception {
+      Configuration cloudServersConfig = new PropertiesConfiguration();
+      cloudServersConfig.addProperty("whirr.provider", "cloudservers-us");
+
+      ClusterSpec cloudServersSpec = 
ClusterSpec.withTemporaryKeys(cloudServersConfig);
+      assertEquals(cloudServersSpec.getAutoHostnamePrefix(), null);
+      assertEquals(cloudServersSpec.getAutoHostnameSuffix(), 
".static.cloud-ips.com");
+
+      Configuration cloudServersUkConfig = new PropertiesConfiguration();
+      cloudServersUkConfig.addProperty("whirr.provider", "cloudservers-uk");
+
+      ClusterSpec cloudServersUkSpec = 
ClusterSpec.withTemporaryKeys(cloudServersUkConfig);
+      assertEquals(cloudServersUkSpec.getAutoHostnamePrefix(), null);
+      assertEquals(cloudServersUkSpec.getAutoHostnameSuffix(), 
".static.cloud-ips.co.uk");
+
+      Configuration ec2Config = new PropertiesConfiguration();
+      ec2Config.addProperty("whirr.provider", "aws-ec2");
+
+      ClusterSpec ec2Spec = ClusterSpec.withTemporaryKeys(ec2Config);
+      assertEquals(null, ec2Spec.getAutoHostnamePrefix());
+      assertEquals(null, ec2Spec.getAutoHostnameSuffix());
+  }
+      
+
+  @Test
   public void testApplySubroleAliases() throws ConfigurationException {
     CompositeConfiguration c = new CompositeConfiguration();
     Configuration config = new PropertiesConfiguration();

Modified: 
whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java
URL: 
http://svn.apache.org/viewvc/whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java?rev=1373560&r1=1373559&r2=1373560&view=diff
==============================================================================
--- 
whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java
 (original)
+++ 
whirr/trunk/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java
 Wed Aug 15 18:43:21 2012
@@ -56,7 +56,8 @@ public class HadoopProxy {
     KeyPair.setPermissionsTo600(identity);
     String user = clusterSpec.getClusterUser();
     InetAddress namenode = HadoopCluster.getNamenodePublicAddress(cluster);
-    String server = namenode.getHostName();
+    String server = namenode.getHostAddress();
+
     return new String[] { "ssh",
         "-i", identity.getAbsolutePath(),
         "-o", "ConnectTimeout=10",

Modified: 
whirr/trunk/services/yarn/src/main/java/org/apache/whirr/service/yarn/YarnHandler.java
URL: 
http://svn.apache.org/viewvc/whirr/trunk/services/yarn/src/main/java/org/apache/whirr/service/yarn/YarnHandler.java?rev=1373560&r1=1373559&r2=1373560&view=diff
==============================================================================
--- 
whirr/trunk/services/yarn/src/main/java/org/apache/whirr/service/yarn/YarnHandler.java
 (original)
+++ 
whirr/trunk/services/yarn/src/main/java/org/apache/whirr/service/yarn/YarnHandler.java
 Wed Aug 15 18:43:21 2012
@@ -51,6 +51,7 @@ public abstract class YarnHandler extend
     ClusterSpec clusterSpec = event.getClusterSpec();
     Configuration conf = getConfiguration(clusterSpec);
     
+    addStatement(event, call("retry_helpers"));
     addStatement(event, call("configure_hostnames"));
 
     addStatement(event, call(getInstallFunction(conf, "java", 
"install_openjdk")));


Reply via email to