From d3f74b804f37e31f6ed0af790dcfde059e2a4332 Mon Sep 17 00:00:00 2001 From: Rohan Kumar Date: Fri, 29 Dec 2023 00:46:01 +0530 Subject: [PATCH] fix (jkube-kit/resource/helm) : Helm `values.yaml` sorted alphabetically Signed-off-by: Rohan Kumar --- CHANGELOG.md | 1 + .../jkube/kit/resource/helm/HelmService.java | 3 ++- .../kit/resource/helm/HelmServiceTest.java | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 626d6fcce4..8c3576efdb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ Usage: * Fix #2257: Provide guidance when the final project packaged file is not found in Quarkus projeicts * Fix #1690: Base images based on ubi9 * Fix #2070: build goals/tasks log warning if user forgets to run package/build goal/task +* Fix #2389: Helm `values.yaml` sorted alphabetically * Fix #2390: support for all missing Chart.yaml fields * Fix #2444: Add support for Spring Boot application properties placeholders * Fix #2456: Add utility class to decompress archive files diff --git a/jkube-kit/resource/helm/src/main/java/org/eclipse/jkube/kit/resource/helm/HelmService.java b/jkube-kit/resource/helm/src/main/java/org/eclipse/jkube/kit/resource/helm/HelmService.java index 7606de43c4..856f8967c2 100644 --- a/jkube-kit/resource/helm/src/main/java/org/eclipse/jkube/kit/resource/helm/HelmService.java +++ b/jkube-kit/resource/helm/src/main/java/org/eclipse/jkube/kit/resource/helm/HelmService.java @@ -22,6 +22,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.TreeMap; import java.util.function.Consumer; import java.util.function.UnaryOperator; import java.util.regex.Pattern; @@ -330,7 +331,7 @@ 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); + ResourceUtil.save(new File(outputDir, VALUES_FILENAME), new TreeMap<>(mergedValues), ResourceFileType.yaml); } private static List collectParameters(HelmConfig helmConfig) { diff --git a/jkube-kit/resource/helm/src/test/java/org/eclipse/jkube/kit/resource/helm/HelmServiceTest.java b/jkube-kit/resource/helm/src/test/java/org/eclipse/jkube/kit/resource/helm/HelmServiceTest.java index 5aa9b5075a..6fe5d3e844 100644 --- a/jkube-kit/resource/helm/src/test/java/org/eclipse/jkube/kit/resource/helm/HelmServiceTest.java +++ b/jkube-kit/resource/helm/src/test/java/org/eclipse/jkube/kit/resource/helm/HelmServiceTest.java @@ -213,6 +213,25 @@ void generateHelmCharts_withValidValuesYamlFragment_usesMergedValues() throws Ex ); } + @Test + @SuppressWarnings("unchecked") + void generateHelmCharts_whenInvoked_thenGeneratedValuesYamlInAlphabeticalOrder() throws IOException { + // Given + resourceServiceConfig = ResourceServiceConfig.builder().resourceDirs(Collections.singletonList( + new File(Objects.requireNonNull(getClass().getResource("/valid-helm-fragments")).getFile()))) + .build(); + helmConfig.types(Collections.singletonList(HelmType.KUBERNETES)); + + // When + new HelmService(jKubeConfiguration, resourceServiceConfig, new KitLogger.SilentLogger()) + .generateHelmCharts(helmConfig.build()); + + // Then + final Map savedValues = Serialization.unmarshal(helmOutputDirectory.resolve("kubernetes").resolve("values.yaml").toFile(), Map.class); + assertThat(savedValues.keySet()) + .containsExactly("image", "ingress", "replaceableProperty", "replicaCount", "service", "serviceAccount"); + } + @Test void createChartYamlWithDependencies() throws Exception { // Given