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 <philipp.dal...@gmail.com>
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());
+  }
 }

Reply via email to