tidying and bug-fixing around domain names and hostname salting

Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/5d767b69
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/5d767b69
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/5d767b69

Branch: refs/heads/master
Commit: 5d767b69500fb26e2100bac300f881d425a8930b
Parents: b4518dd
Author: Alex Heneveld <[email protected]>
Authored: Fri May 8 17:48:12 2015 +0100
Committer: Alex Heneveld <[email protected]>
Committed: Fri May 8 18:51:51 2015 +0100

----------------------------------------------------------------------
 .../location/cloud/CloudLocationConfig.java      |  4 ++--
 .../cloud/names/AbstractCloudMachineNamer.java   |  1 +
 docs/guide/ops/locations/index.md                |  5 +++--
 .../location/jclouds/JcloudsLocation.java        | 19 +++++++++----------
 4 files changed, 15 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5d767b69/core/src/main/java/brooklyn/location/cloud/CloudLocationConfig.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/location/cloud/CloudLocationConfig.java 
b/core/src/main/java/brooklyn/location/cloud/CloudLocationConfig.java
index 6831726..6c941a3 100644
--- a/core/src/main/java/brooklyn/location/cloud/CloudLocationConfig.java
+++ b/core/src/main/java/brooklyn/location/cloud/CloudLocationConfig.java
@@ -57,9 +57,9 @@ public interface CloudLocationConfig {
     /** @deprecated since 0.6.0; included here so it gets picked up in 
auto-detect routines */ @Deprecated
     public static final ConfigKey<String> LEGACY_PRIVATE_KEY_PASSPHRASE = 
LocationConfigKeys.LEGACY_PRIVATE_KEY_PASSPHRASE;
 
-    // default is just shy of common 64-char boundary (could perhaps increase 
slightly...)
+    // default is just shy of common 64-char boundary, leaving 4 chars plus 
our salt allowance (default 4+1) which allows up to -12345678 by jclouds
     public static final ConfigKey<Integer> VM_NAME_MAX_LENGTH = 
ConfigKeys.newIntegerConfigKey(
-        "vmNameMaxLength", "Maximum length of VM name", 61);
+        "vmNameMaxLength", "Maximum length of VM name", 60);
 
     public static final ConfigKey<Integer> VM_NAME_SALT_LENGTH = 
ConfigKeys.newIntegerConfigKey(
         "vmNameSaltLength", "Number of characters to use for a random 
identifier inserted in hostname "

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5d767b69/core/src/main/java/brooklyn/location/cloud/names/AbstractCloudMachineNamer.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/location/cloud/names/AbstractCloudMachineNamer.java
 
b/core/src/main/java/brooklyn/location/cloud/names/AbstractCloudMachineNamer.java
index 4e81a46..8e4cd41 100644
--- 
a/core/src/main/java/brooklyn/location/cloud/names/AbstractCloudMachineNamer.java
+++ 
b/core/src/main/java/brooklyn/location/cloud/names/AbstractCloudMachineNamer.java
@@ -95,6 +95,7 @@ public abstract class AbstractCloudMachineNamer implements 
CloudMachineNamer {
         return defaultMachineNameMaxLength;  
     }
     
+    // sometimes we create salt string, sometimes jclouds does
     public int getLengthForMachineUniqueNameSalt(ConfigBag setup, boolean 
includeSeparator) {
         int saltLen;
         if (setup.containsKey(CloudLocationConfig.VM_NAME_SALT_LENGTH)) {

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5d767b69/docs/guide/ops/locations/index.md
----------------------------------------------------------------------
diff --git a/docs/guide/ops/locations/index.md 
b/docs/guide/ops/locations/index.md
index 02e82bb..78f185d 100644
--- a/docs/guide/ops/locations/index.md
+++ b/docs/guide/ops/locations/index.md
@@ -136,8 +136,9 @@ For more keys and more detail on the keys below, see
   `cloudMachineNamer: brooklyn.location.cloud.names.CustomMachineNamer`.
   {% include java_link.html class_name="CustomMachineNamer" 
package_path="brooklyn/location/cloud/names" project_subpath="core" %}
   will use the entity's name or following a template you supply.
-  For all names, a random suffix will be appended to help guarantee uniqueness;
-  this can be removed by setting `vmNameSaltLength: 0`.
+  On many clouds, a random suffix will be appended to help guarantee 
uniqueness;
+  this can be removed by setting `vmNameSaltLength: 0` (selected clouds only).
+  <!-- TODO jclouds softlayer includes a 3-char hex suffix -->
   
 - A DNS domain name where this host should be placed can be specified with 
`domainName`
   (in selected clouds only)

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/5d767b69/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
diff --git 
a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
 
b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
index c74cfe2..4cef9d0 100644
--- 
a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
+++ 
b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
@@ -600,7 +600,9 @@ public class JcloudsLocation extends 
AbstractCloudMachineProvisioningLocation im
                 }
 
                 templateTimestamp = Duration.of(provisioningStopwatch);
-                // "Name" sets jclouds hostname
+                // "Name" metadata seems to set the display name; at least in 
AWS
+                // TODO it would be nice if this salt comes from the 
location's ID (but we don't know that yet as the ssh machine location isn't 
created yet)
+                // TODO in softlayer we want to control the suffix of the 
hostname which is 3 random hex digits
                 template.getOptions().getUserMetadata().put("Name", 
cloudMachineNamer.generateNewMachineUniqueNameFromGroupId(setup, groupId));
                 
                 if 
(setup.get(JcloudsLocationConfig.INCLUDE_BROOKLYN_USER_METADATA)) {
@@ -1068,7 +1070,7 @@ public class JcloudsLocation extends 
AbstractCloudMachineProvisioningLocation im
               .put(DOMAIN_NAME, new CustomizeTemplateOptions() {
                     public void apply(TemplateOptions t, ConfigBag props, 
Object v) {
                         if (t instanceof SoftLayerTemplateOptions) {
-                            
((SoftLayerTemplateOptions)t).domainName((String)v);
+                            
((SoftLayerTemplateOptions)t).domainName(TypeCoercions.coerce(v, String.class));
                         } else {
                             LOG.info("ignoring domain-name({}) in VM creation 
because not supported for cloud/type ({})", v, t);                            
                         }
@@ -1122,20 +1124,17 @@ public class JcloudsLocation extends 
AbstractCloudMachineProvisioningLocation im
         // these things are nice on softlayer
         if (template.getOptions() instanceof SoftLayerTemplateOptions) {
             SoftLayerTemplateOptions slT = 
((SoftLayerTemplateOptions)template.getOptions());
-            if (Strings.isEmpty(slT.getDomainName())) {
-                // set a quasi-sensible domain name if none was provided 
(better than the default, jclouds.org) 
-                slT.domainName("brooklyn.local");
+            if (Strings.isBlank(slT.getDomainName()) || 
"jclouds.org".equals(slT.getDomainName())) {
+                // set a quasi-sensible domain name if none was provided 
(better than the default, jclouds.org)
+                // NB: things like brooklyn.local are disallowed
+                slT.domainName("local.brooklyncentral.org");
             }
             // convert user metadata to tags because user metadata is 
otherwise ignored
             Map<String, String> md = slT.getUserMetadata();
             if (md!=null && !md.isEmpty()) {
                 Set<String> tags = MutableSet.copyOf(slT.getTags());
                 for (Map.Entry<String,String> entry: md.entrySet()) {
-                    if ("Name".equalsIgnoreCase(entry.getKey())) {
-                        // skip "Name" but use the other tags
-                    } else {
-                        
tags.add(AbstractCloudMachineNamer.sanitize(entry.getKey())+":"+AbstractCloudMachineNamer.sanitize(entry.getValue()));
-                    }
+                    
tags.add(AbstractCloudMachineNamer.sanitize(entry.getKey())+":"+AbstractCloudMachineNamer.sanitize(entry.getValue()));
                 }
                 slT.tags(tags);
             }

Reply via email to