Repository: brooklyn-server Updated Branches: refs/heads/master db7418c6e -> 494ae6fe1
Fix Azure VM names Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/b969a305 Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/b969a305 Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/b969a305 Branch: refs/heads/master Commit: b969a3052e7d964e2c3c97dc1d93e0d8d83864f1 Parents: 2bdbf14 Author: Duncan Godwin <duncan.god...@cloudsoftcorp.com> Authored: Tue Jan 17 14:54:28 2017 +0000 Committer: Duncan Godwin <duncan.god...@cloudsoftcorp.com> Committed: Tue Jan 17 14:54:28 2017 +0000 ---------------------------------------------------------------------- .../location/cloud/CloudLocationConfig.java | 3 +++ .../cloud/names/BasicCloudMachineNamer.java | 9 ++++++--- .../location/jclouds/JcloudsMachineNamer.java | 13 +++++++++++++ .../brooklyn/util/text/StringShortener.java | 19 ++++++++++++++++++- .../brooklyn/util/text/StringShortenerTest.java | 20 ++++++++++++++++++++ 5 files changed, 60 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b969a305/core/src/main/java/org/apache/brooklyn/core/location/cloud/CloudLocationConfig.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/location/cloud/CloudLocationConfig.java b/core/src/main/java/org/apache/brooklyn/core/location/cloud/CloudLocationConfig.java index bd3add8..b355f60 100644 --- a/core/src/main/java/org/apache/brooklyn/core/location/cloud/CloudLocationConfig.java +++ b/core/src/main/java/org/apache/brooklyn/core/location/cloud/CloudLocationConfig.java @@ -74,6 +74,9 @@ public interface CloudLocationConfig { public static final ConfigKey<Integer> VM_NAME_MAX_LENGTH = ConfigKeys.newIntegerConfigKey( "vmNameMaxLength", "Maximum length of VM name", 60); + public static final ConfigKey<String> VM_NAME_DISALLOWED_PATTERN = ConfigKeys.newStringConfigKey( + "vmNameAllowedChars", "The character pattern to remove from a VM name", "[^a-zA-Z0-9\\-_]"); + public static final ConfigKey<Integer> VM_NAME_SALT_LENGTH = ConfigKeys.newIntegerConfigKey( "vmNameSaltLength", "Number of characters to use for a random identifier inserted in hostname " + "to uniquely identify machines", 4); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b969a305/core/src/main/java/org/apache/brooklyn/core/location/cloud/names/BasicCloudMachineNamer.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/location/cloud/names/BasicCloudMachineNamer.java b/core/src/main/java/org/apache/brooklyn/core/location/cloud/names/BasicCloudMachineNamer.java index 38ecbe5..4fb28af 100644 --- a/core/src/main/java/org/apache/brooklyn/core/location/cloud/names/BasicCloudMachineNamer.java +++ b/core/src/main/java/org/apache/brooklyn/core/location/cloud/names/BasicCloudMachineNamer.java @@ -36,8 +36,11 @@ public class BasicCloudMachineNamer extends AbstractCloudMachineNamer { Object context = setup.peek(CloudLocationConfig.CALLER_CONTEXT); Entity entity = null; if (context instanceof Entity) entity = (Entity) context; - - StringShortener shortener = Strings.shortener().separator("-"); + + StringShortener shortener = Strings.shortener(); + shortener.setDisalowedCharacters(setup.get(CloudLocationConfig.VM_NAME_DISALLOWED_PATTERN)); + + shortener.separator("-"); shortener.append("system", "brooklyn"); /* timeStamp replaces the previously used randId. @@ -88,7 +91,7 @@ public class BasicCloudMachineNamer extends AbstractCloudMachineNamer { .canRemove("user") .canTruncate("appId", 2) .canRemove("appId"); - + String s = shortener.getStringOfMaxLength(len); return sanitize(s).toLowerCase(); } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b969a305/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsMachineNamer.java ---------------------------------------------------------------------- diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsMachineNamer.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsMachineNamer.java index 90e6629..0828d5f 100644 --- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsMachineNamer.java +++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsMachineNamer.java @@ -18,6 +18,7 @@ */ package org.apache.brooklyn.location.jclouds; +import org.apache.brooklyn.core.location.cloud.CloudLocationConfig; import org.apache.brooklyn.core.location.cloud.names.BasicCloudMachineNamer; import org.apache.brooklyn.util.core.config.ConfigBag; @@ -41,4 +42,16 @@ public class JcloudsMachineNamer extends BasicCloudMachineNamer { return null; } + protected String generateNewIdOfLength(ConfigBag setup, int len) { + + // if it's azurecompute-arm it needs a different VM_NAME_ALLOWED_PATTERN + String pattern = setup.get(CloudLocationConfig.VM_NAME_DISALLOWED_PATTERN); + if ((pattern == null || pattern == CloudLocationConfig.VM_NAME_DISALLOWED_PATTERN.getDefaultValue()) && + "azurecompute-arm".equals(setup.peek(JcloudsLocationConfig.CLOUD_PROVIDER))) { + setup.put(CloudLocationConfig.VM_NAME_DISALLOWED_PATTERN, "[^a-zA-Z0-9]"); + } + + return super.generateNewIdOfLength(setup, len); + } + } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b969a305/utils/common/src/main/java/org/apache/brooklyn/util/text/StringShortener.java ---------------------------------------------------------------------- diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/text/StringShortener.java b/utils/common/src/main/java/org/apache/brooklyn/util/text/StringShortener.java index bcf88a3..7c7772b 100644 --- a/utils/common/src/main/java/org/apache/brooklyn/util/text/StringShortener.java +++ b/utils/common/src/main/java/org/apache/brooklyn/util/text/StringShortener.java @@ -28,6 +28,7 @@ public class StringShortener { protected Map<String,String> wordsByIdInOrder = new LinkedHashMap<String,String>(); protected String separator = null; + protected String disalowedCharacters; protected interface ShorteningRule { /** returns the new list, with the relevant items in the list replaced */ @@ -55,6 +56,21 @@ public class StringShortener { return length; } } + + protected String removeDisalowedCharacters(String input){ + if (disalowedCharacters != null) input = input.replaceAll(disalowedCharacters, ""); + return input; + } + + + public String getDisalowedCharacters() { + return disalowedCharacters; + } + + public StringShortener setDisalowedCharacters(String disalowedCharacters) { + this.disalowedCharacters = disalowedCharacters; + return this; + } protected class RemovalRule implements ShorteningRule { public RemovalRule(String id) { @@ -78,11 +94,12 @@ public class StringShortener { public StringShortener separator(String separator) { - this.separator = separator; + this.separator = removeDisalowedCharacters(separator); return this; } public StringShortener append(String id, String text) { + text = removeDisalowedCharacters(text); String old = wordsByIdInOrder.put(id, text); if (old!=null) { throw new IllegalStateException("Cannot append with id '"+id+"' when id already present"); http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/b969a305/utils/common/src/test/java/org/apache/brooklyn/util/text/StringShortenerTest.java ---------------------------------------------------------------------- diff --git a/utils/common/src/test/java/org/apache/brooklyn/util/text/StringShortenerTest.java b/utils/common/src/test/java/org/apache/brooklyn/util/text/StringShortenerTest.java index 90b0cad..034be8b 100644 --- a/utils/common/src/test/java/org/apache/brooklyn/util/text/StringShortenerTest.java +++ b/utils/common/src/test/java/org/apache/brooklyn/util/text/StringShortenerTest.java @@ -44,6 +44,26 @@ public class StringShortenerTest { } @Test + public void testDisalowedCharactersShortener() { + StringShortener ss = new StringShortener() + .setDisalowedCharacters("[^a-zA-Z0-9]") + .separator("-") + .append("1", "he-llo") + .append("2", "_new") + .append("3", "w.o.r.l.d") + .canRemove("2") + .canTruncate("1", 2) + .canTruncate("3", 2); + + Assert.assertEquals(ss.getStringOfMaxLength(12), "helloworld"); + Assert.assertEquals(ss.getStringOfMaxLength(9), "hellworld"); + Assert.assertEquals(ss.getStringOfMaxLength(6), "heworl"); + Assert.assertEquals(ss.getStringOfMaxLength(5), "hewor"); + Assert.assertEquals(ss.getStringOfMaxLength(4), "hewo"); + Assert.assertEquals(ss.getStringOfMaxLength(0), ""); + } + + @Test public void testEdgeCases() { StringShortener ss = new StringShortener(); ss.separator(null);