This is an automated email from the ASF dual-hosted git repository.
pdallig pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zeppelin.git
The following commit(s) were added to refs/heads/master by this push:
new ed251f4b48 better pod name (#4348)
ed251f4b48 is described below
commit ed251f4b48215f372f437f4490d7f07680793b7b
Author: Philipp Dallig <[email protected]>
AuthorDate: Fri May 13 13:19:50 2022 +0200
better pod name (#4348)
---
.../launcher/K8sRemoteInterpreterProcess.java | 3 +-
.../zeppelin/interpreter/launcher/K8sUtils.java | 37 +++++++++++++++++++++-
.../interpreter/launcher/K8sUtilsTest.java | 19 ++++++++++-
3 files changed, 55 insertions(+), 4 deletions(-)
diff --git
a/zeppelin-plugins/launcher/k8s-standard/src/main/java/org/apache/zeppelin/interpreter/launcher/K8sRemoteInterpreterProcess.java
b/zeppelin-plugins/launcher/k8s-standard/src/main/java/org/apache/zeppelin/interpreter/launcher/K8sRemoteInterpreterProcess.java
index 26f27fc3cf..a39b0bbb61 100644
---
a/zeppelin-plugins/launcher/k8s-standard/src/main/java/org/apache/zeppelin/interpreter/launcher/K8sRemoteInterpreterProcess.java
+++
b/zeppelin-plugins/launcher/k8s-standard/src/main/java/org/apache/zeppelin/interpreter/launcher/K8sRemoteInterpreterProcess.java
@@ -117,8 +117,7 @@ public class K8sRemoteInterpreterProcess extends
RemoteInterpreterManagedProcess
this.properties = properties;
this.portForward = portForward;
this.sparkImage = sparkImage;
- this.podName = interpreterGroupName.toLowerCase() + "-"
- + RandomStringUtils.randomAlphabetic(6).toLowerCase();
+ this.podName = K8sUtils.generateK8sName(interpreterGroupId, true);
this.timeoutDuringPending = timeoutDuringPending;
}
diff --git
a/zeppelin-plugins/launcher/k8s-standard/src/main/java/org/apache/zeppelin/interpreter/launcher/K8sUtils.java
b/zeppelin-plugins/launcher/k8s-standard/src/main/java/org/apache/zeppelin/interpreter/launcher/K8sUtils.java
index 6c155dee37..01cdf91619 100644
---
a/zeppelin-plugins/launcher/k8s-standard/src/main/java/org/apache/zeppelin/interpreter/launcher/K8sUtils.java
+++
b/zeppelin-plugins/launcher/k8s-standard/src/main/java/org/apache/zeppelin/interpreter/launcher/K8sUtils.java
@@ -27,10 +27,12 @@ import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import io.fabric8.kubernetes.client.Config;
+import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.zeppelin.conf.ZeppelinConfiguration;
+import io.fabric8.kubernetes.client.Config;
+
public class K8sUtils {
private static final long K = 1024;
@@ -139,4 +141,37 @@ public class K8sUtils {
byte[] encoded = Files.readAllBytes(Paths.get(path));
return new String(encoded, encoding);
}
+
+ private static final String ZEPPELIN = "zeppelin";
+ /**
+ * Generates a name for a Kubernetes object
+ *
+ * See
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/ for
allowed names
+ *
+ * @param baseName parts of the name can be removed and some parts can be
added to generate a permitted Kubernetes name
+ * @param randomSuffix flag to add a random suffix
+ * @return a validate Kubernetes name
+ */
+ public static String generateK8sName(String baseName, boolean randomSuffix) {
+ String result = ZEPPELIN;
+ if (StringUtils.isNotBlank(baseName)) {
+ // all to lowerCase
+ result = baseName.toLowerCase();
+ // Remove all disallowed values
+ result = result.replaceAll("[^a-z0-9\\.-]", "");
+ // Remove all multiple dots
+ result = result.replaceAll("\\.+", ".");
+ if (result.isEmpty() || !Character.isLetterOrDigit(result.charAt(0))) {
+ result = ZEPPELIN + result;
+ }
+ // 253 - 7 (suffix) = 246
+ if (result.length() > 246 - ZEPPELIN.length()) {
+ result = result.substring(0, 246 - ZEPPELIN.length());
+ }
+ if (!Character.isLetterOrDigit(result.charAt(result.length() - 1))) {
+ result = result + ZEPPELIN;
+ }
+ }
+ return randomSuffix ? result + "-" +
RandomStringUtils.randomAlphabetic(6).toLowerCase() : result;
+ }
}
diff --git
a/zeppelin-plugins/launcher/k8s-standard/src/test/java/org/apache/zeppelin/interpreter/launcher/K8sUtilsTest.java
b/zeppelin-plugins/launcher/k8s-standard/src/test/java/org/apache/zeppelin/interpreter/launcher/K8sUtilsTest.java
index 1815a1f459..0d495e9bdc 100644
---
a/zeppelin-plugins/launcher/k8s-standard/src/test/java/org/apache/zeppelin/interpreter/launcher/K8sUtilsTest.java
+++
b/zeppelin-plugins/launcher/k8s-standard/src/test/java/org/apache/zeppelin/interpreter/launcher/K8sUtilsTest.java
@@ -18,8 +18,9 @@
package org.apache.zeppelin.interpreter.launcher;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import org.apache.commons.lang3.RandomStringUtils;
import org.junit.Test;
public class K8sUtilsTest {
@@ -45,4 +46,20 @@ public class K8sUtilsTest {
public void testExceptionNoValidNumber() {
K8sUtils.calculateMemoryWithDefaultOverhead("NoValidNumber10000000Tb");
}
+
+ @Test
+ public void testGenerateK8sName() {
+ assertEquals("zeppelin", K8sUtils.generateK8sName("", false));
+ assertEquals("zeppelin", K8sUtils.generateK8sName(null, false));
+ assertEquals("test", K8sUtils.generateK8sName("test", false));
+ assertEquals("test", K8sUtils.generateK8sName("!test", false));
+ assertEquals("zeppelin", K8sUtils.generateK8sName("!", false));
+ assertEquals("zeppelin.test", K8sUtils.generateK8sName(".test", false));
+ assertEquals("zeppelin.test", K8sUtils.generateK8sName("...test", false));
+ assertEquals("zeppelin.test.zeppelin", K8sUtils.generateK8sName(".test.",
false));
+ assertEquals("zeppelin.test.zeppelin",
K8sUtils.generateK8sName("...test....", false));
+ assertEquals("test", K8sUtils.generateK8sName("Test", false));
+
+ assertEquals(253 - "zeppelin".length() ,
K8sUtils.generateK8sName(RandomStringUtils.randomAlphabetic(260),
true).length());
+ }
}