From fddd604457c98a197bd8b2f3cbb3167dde2a9b3d Mon Sep 17 00:00:00 2001 From: Jurrie Overgoor <1213142+Jurrie@users.noreply.github.com> Date: Wed, 21 Feb 2024 11:48:35 +0100 Subject: [PATCH] fix: do not order all Yaml maps by keys, only the Helm values file (#2702) --- .../kit/build/api/auth/AuthConfigTest.java | 2 +- .../kit/build/api/auth/RegistryAuthTest.java | 2 +- .../jkube/kit/common/util/Serialization.java | 1 - .../jkube/kit/resource/helm/HelmService.java | 20 ++++++++++++++++++- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/auth/AuthConfigTest.java b/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/auth/AuthConfigTest.java index e671bf8c81..04ea49cc97 100644 --- a/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/auth/AuthConfigTest.java +++ b/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/auth/AuthConfigTest.java @@ -36,7 +36,7 @@ void simpleConstructor() { // Since Base64.decodeBase64 handles URL-safe encoding, must explicitly check // the correct characters are used assertThat(config.toHeaderValue(new KitLogger.SilentLogger())) - .isEqualTo("eyJlbWFpbCI6InJvbGFuZEBqb2xva2lhLm9yZyIsInBhc3N3b3JkIjoiIz5zZWNyZXRzPz8iLCJ1c2VybmFtZSI6InJvbGFuZCJ9"); + .isEqualTo("eyJ1c2VybmFtZSI6InJvbGFuZCIsInBhc3N3b3JkIjoiIz5zZWNyZXRzPz8iLCJlbWFpbCI6InJvbGFuZEBqb2xva2lhLm9yZyJ9"); String header = new String(Base64.getDecoder().decode(config.toHeaderValue(new KitLogger.SilentLogger()))); diff --git a/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/auth/RegistryAuthTest.java b/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/auth/RegistryAuthTest.java index c9281e33eb..45d1716a8a 100644 --- a/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/auth/RegistryAuthTest.java +++ b/jkube-kit/build/api/src/test/java/org/eclipse/jkube/kit/build/api/auth/RegistryAuthTest.java @@ -50,7 +50,7 @@ private void check(RegistryAuth config) { // Since Base64.decodeBase64 handles URL-safe encoding, must explicitly check // the correct characters are used assertThat(config.toHeaderValue()) - .isEqualTo("eyJlbWFpbCI6InJvbGFuZEBqb2xva2lhLm9yZyIsInBhc3N3b3JkIjoiIz5zZWNyZXRzPz8iLCJ1c2VybmFtZSI6InJvbGFuZCJ9"); + .isEqualTo("eyJ1c2VybmFtZSI6InJvbGFuZCIsInBhc3N3b3JkIjoiIz5zZWNyZXRzPz8iLCJlbWFpbCI6InJvbGFuZEBqb2xva2lhLm9yZyJ9"); String header = new String(Base64.getDecoder().decode(config.toHeaderValue())); diff --git a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/Serialization.java b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/Serialization.java index f934119487..9394a8236f 100644 --- a/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/Serialization.java +++ b/jkube-kit/common/src/main/java/org/eclipse/jkube/kit/common/util/Serialization.java @@ -42,7 +42,6 @@ public class Serialization { static { for (ObjectMapper mapper : new ObjectMapper[]{JSON_MAPPER, YAML_MAPPER}) { mapper.enable(SerializationFeature.INDENT_OUTPUT) - .enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS) .disable(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS) .disable(SerializationFeature.WRITE_NULL_MAP_VALUES); } diff --git a/jkube-kit/helm/src/main/java/org/eclipse/jkube/kit/resource/helm/HelmService.java b/jkube-kit/helm/src/main/java/org/eclipse/jkube/kit/resource/helm/HelmService.java index c3fbacfc1d..634d4ab1c6 100644 --- a/jkube-kit/helm/src/main/java/org/eclipse/jkube/kit/resource/helm/HelmService.java +++ b/jkube-kit/helm/src/main/java/org/eclipse/jkube/kit/resource/helm/HelmService.java @@ -25,6 +25,8 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.SortedMap; +import java.util.TreeMap; import java.util.function.Consumer; import java.util.function.UnaryOperator; import java.util.regex.Pattern; @@ -368,7 +370,23 @@ private void createValuesYaml(List helmParameters, File outputDir .collect(Collectors.toMap(HelmParameter::getName, HelmParameter::getValue)); final Map valuesFromFragment = readFragment(VALUES_FRAGMENT_PATTERN, Map.class); final Map mergedValues = Serialization.merge(getNestedMap(valuesFromParameters), valuesFromFragment); - ResourceUtil.save(new File(outputDir, VALUES_FILENAME), mergedValues, ResourceFileType.yaml); + final Map sortedValues = sortValuesYaml(mergedValues); + ResourceUtil.save(new File(outputDir, VALUES_FILENAME), sortedValues, ResourceFileType.yaml); + } + + private static SortedMap sortValuesYaml(final Map input) { + return (SortedMap) sortValuesYamlRecursive(input); + } + + private static Object sortValuesYamlRecursive(final Object input) { + if (input instanceof Map) { + final Map inputMap = (Map) input; + final SortedMap result = new TreeMap<>(); + inputMap.entrySet().stream().forEach(entry -> result.put(entry.getKey(), sortValuesYamlRecursive(entry.getValue()))); + return result; + } else { + return input; + } } private static List collectParameters(HelmConfig helmConfig) {