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