/** * Returns Qualified name for the specified Kubernetes Resource * * @param entity Kubernetes resource * @return */ public static String getQualifiedName(HasMetadata entity) { if (entity != null) { return "" + getNamespace(entity) + "/" + getName(entity); } else { return null; } }
/** * Validates labels/annotations of Kubernetes resources * * @param map Label/Annotation of resource * @return */ public static boolean isValidLabelOrAnnotation(Map<String, String> map) { for(Map.Entry<String, String> entry : map.entrySet()) { if(!(isValidName(entry.getKey()) && isValidName(entry.getValue()))) { return false; } } return true; } }
/** * Returns true if this entity has a valid non blank resourceVersion in its metadata */ public static boolean hasResourceVersion(HasMetadata entity) { return getResourceVersion(entity) != null; }
@Test public void testNames() { assertTrue(KubernetesResourceUtil.isValidName(KubernetesResourceUtil.getName(configMap1))); assertFalse(KubernetesResourceUtil.isValidName("test.invalid.name")); assertTrue(KubernetesResourceUtil.isValidLabelOrAnnotation(KubernetesResourceUtil.getOrCreateAnnotations(configMap1))); assertFalse(KubernetesResourceUtil.isValidLabelOrAnnotation(Collections.singletonMap("NoUppercaseOrSpecialCharsLike=Equals", "bar"))); assertTrue(KubernetesResourceUtil.isValidName(KubernetesResourceUtil.sanitizeName("test.invalid.name"))); assertTrue(KubernetesResourceUtil.isValidName(KubernetesResourceUtil.sanitizeName("90notcool-n@me"))); } }
@Test public void testNullSafeOperationsForNamespace() { String namespace = KubernetesResourceUtil.getNamespace(configMap1); assertNotNull(namespace); assertEquals("ns1", namespace); assertEquals("ns1/configmap1", KubernetesResourceUtil.getQualifiedName(configMap1)); }
/** * Returns name of the resource from it's Metadata * * @param entity Kubernetes resource * @return */ public static String getName(HasMetadata entity) { if (entity != null) { return getName(entity.getMetadata()); } else { return null; } }
/** * Getting namespace from Kubernetes Resource * * @param entity Kubernetes Resource * @return */ public static String getNamespace(HasMetadata entity) { if (entity != null) { return getNamespace(entity.getMetadata()); } else { return null; } }
/** * Null safe get for fetching annotations from MetaData of Kubernetes Resource * * @param entity Kubernetes resource * @return */ public static Map<String, String> getOrCreateAnnotations(HasMetadata entity) { ObjectMeta metadata = getOrCreateMetadata(entity); Map<String, String> answer = metadata.getAnnotations(); if (answer == null) { // use linked so the annotations can be in the FIFO order answer = new LinkedHashMap<>(); metadata.setAnnotations(answer); } return answer; }
/** * Returns name of the resource from it's Metadata * * @param entity MetaData of kubernetes resource * @return */ public static String getName(ObjectMeta entity) { if (entity != null) { return Utils.coalesce(entity.getName(), getAdditionalPropertyText(entity.getAdditionalProperties(), "id"), entity.getUid()); } else { return null; } }
@Test public void testNullSafeOperationsForLabels() { Map<String, String> labels = KubernetesResourceUtil.getOrCreateLabels(configMap1); assertNotNull(labels); assertEquals(Collections.singletonMap("foo-label", "bar-label"), labels); }
@Test public void testNullSafeOperationsForAnnotations() { Map<String, String> annos = KubernetesResourceUtil.getOrCreateAnnotations(configMap1); assertNotNull(annos); assertEquals(Collections.singletonMap("foo", "bar"), annos); }
@Test public void testNullSafeOperationsForName() { String resourceName = KubernetesResourceUtil.getName(configMap1); assertNotNull(resourceName); assertEquals("configmap1", resourceName); }
/** * Null safe get method for getting Labels of a Kubernetes Resource * * @param entity Kubernetes Resource * @return */ public static Map<String, String> getOrCreateLabels(HasMetadata entity) { ObjectMeta metadata = getOrCreateMetadata(entity); Map<String, String> answer = metadata.getLabels(); if (answer == null) { // use linked so the annotations can be in the FIFO order answer = new LinkedHashMap<>(); metadata.setLabels(answer); } return answer; }