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