From 67a9c59918b149a86fa8b3443f6c967ebe1ae099 Mon Sep 17 00:00:00 2001 From: stiv03 Date: Mon, 17 Nov 2025 16:17:52 +0200 Subject: [PATCH 1/3] Fix existing service instance not found by resource name --- .../controller/process/steps/DetectDeployedMtaStep.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/DetectDeployedMtaStep.java b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/DetectDeployedMtaStep.java index 4cfea644df..ca59ff2cae 100644 --- a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/DetectDeployedMtaStep.java +++ b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/DetectDeployedMtaStep.java @@ -132,8 +132,14 @@ private List getExistingServiceGuids(ProcessContext context) { } private Optional resolveServiceGuid(CloudControllerClient client, Resource resource) { + String serviceInstanceName = NameUtil.getServiceName(resource); + + if (serviceInstanceName == null || serviceInstanceName.isBlank()) { + serviceInstanceName = resource.getName(); + } + try { - CloudServiceInstance instance = client.getServiceInstance(resource.getName()); + CloudServiceInstance instance = client.getServiceInstance(serviceInstanceName); return Optional.of(instance.getGuid() .toString()); } catch (CloudOperationException e) { From cc41a21367940c3c935fc5f5935ea17886fffdd7 Mon Sep 17 00:00:00 2001 From: stiv03 Date: Tue, 18 Nov 2025 10:07:51 +0200 Subject: [PATCH 2/3] Add test for getting service instance name or resource name --- .../controller/core/util/NameUtil.java | 12 ++++- .../controller/core/util/NameUtilTest.java | 49 +++++++++++++++++-- .../process/steps/DetectDeployedMtaStep.java | 8 +-- 3 files changed, 59 insertions(+), 10 deletions(-) diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/util/NameUtil.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/util/NameUtil.java index 675f4603e9..2441ef044d 100644 --- a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/util/NameUtil.java +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/util/NameUtil.java @@ -73,7 +73,8 @@ public static String computeNamespacedNameWithLength(String name, String namespa private static String getNameWithNamespaceSuffix(String name, String namespace, int maxLength) { String namespaceSuffix = getNamespaceSuffix(namespace); - String shortenedName = getNameWithProperLength(name, calculateNameLengthWithoutNamespaceAndBlueGreenSuffix(namespaceSuffix, maxLength)); + String shortenedName = getNameWithProperLength(name, + calculateNameLengthWithoutNamespaceAndBlueGreenSuffix(namespaceSuffix, maxLength)); return correctNameSuffix(shortenedName, name, namespaceSuffix); } @@ -120,6 +121,7 @@ public static String computeUserNamespaceWithSystemNamespace(String systemNamesp } return systemNamespace; } + private static String getShortenedName(String name, int maxLength) { String nameHashCode = getHashCodeAsHexString(name); if (maxLength < nameHashCode.length()) { @@ -157,6 +159,14 @@ public static String getServiceName(Resource resource) { .get(SupportedParameters.SERVICE_NAME); } + public static String getServiceInstanceNameOrDefault(Resource resource) { + String serviceInstanceName = getServiceName(resource); + if (serviceInstanceName == null || serviceInstanceName.isBlank()) { + return resource.getName(); + } + return serviceInstanceName; + } + public static class NameRequirements { public static final String XS_APP_NAME_PATTERN = "(?!sap_system)[a-zA-Z0-9\\._\\-\\\\/]{1,240}"; diff --git a/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/util/NameUtilTest.java b/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/util/NameUtilTest.java index db4c1f3731..b3b0d9cc4f 100644 --- a/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/util/NameUtilTest.java +++ b/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/util/NameUtilTest.java @@ -1,16 +1,20 @@ package org.cloudfoundry.multiapps.controller.core.util; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - +import java.util.HashMap; +import java.util.Map; import java.util.stream.Stream; +import org.cloudfoundry.multiapps.controller.core.model.SupportedParameters; import org.cloudfoundry.multiapps.controller.core.util.NameUtil.NameRequirements; +import org.cloudfoundry.multiapps.mta.model.Resource; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + class NameUtilTest { static Stream testGetNameWithProperLength() { @@ -94,4 +98,43 @@ void testComputeNamespacedNameWithLength(String name, String namespace, boolean NameUtil.computeNamespacedNameWithLength(name, namespace, applyNamespace, applyNamespaceAsSuffix, maxLength)); } + @Test + void testGetServiceInstanceNameOrDefault_UsesServiceNameParameter() { + Resource resource = createResource("resource-name", "service-name-from-param"); + + String serviceInstanceName = NameUtil.getServiceInstanceNameOrDefault(resource); + + assertEquals("service-name-from-param", serviceInstanceName); + } + + @Test + void testGetServiceInstanceNameOrDefault_FallsBackToResourceNameWhenServiceNameMissing() { + Resource resource = createResource("resource-name-1", null); + + String serviceInstanceName = NameUtil.getServiceInstanceNameOrDefault(resource); + + assertEquals("resource-name-1", serviceInstanceName); + } + + @Test + void testGetServiceInstanceNameOrDefault_FallsBackToResourceNameWhenServiceNameBlank() { + Resource resource = createResource("resource-name-2", " "); + + String serviceInstanceName = NameUtil.getServiceInstanceNameOrDefault(resource); + + assertEquals("resource-name-2", serviceInstanceName); + } + + private Resource createResource(String name, String paramValue) { + Resource resource = Resource.createV3(); + resource.setName(name); + + Map params = new HashMap<>(); + if (paramValue != null) { + params.put(SupportedParameters.SERVICE_NAME, paramValue); + } + resource.setParameters(params); + + return resource; + } } diff --git a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/DetectDeployedMtaStep.java b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/DetectDeployedMtaStep.java index ca59ff2cae..204b1359c8 100644 --- a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/DetectDeployedMtaStep.java +++ b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/DetectDeployedMtaStep.java @@ -132,12 +132,8 @@ private List getExistingServiceGuids(ProcessContext context) { } private Optional resolveServiceGuid(CloudControllerClient client, Resource resource) { - String serviceInstanceName = NameUtil.getServiceName(resource); - - if (serviceInstanceName == null || serviceInstanceName.isBlank()) { - serviceInstanceName = resource.getName(); - } - + String serviceInstanceName = NameUtil.getServiceInstanceNameOrDefault(resource); + try { CloudServiceInstance instance = client.getServiceInstance(serviceInstanceName); return Optional.of(instance.getGuid() From a38bc5736520a61f8b8561b4a7e666a29112c1ce Mon Sep 17 00:00:00 2001 From: stiv03 Date: Tue, 18 Nov 2025 12:39:20 +0200 Subject: [PATCH 3/3] fix comment --- .../multiapps/controller/core/util/NameUtilTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/util/NameUtilTest.java b/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/util/NameUtilTest.java index b3b0d9cc4f..264f2c56a8 100644 --- a/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/util/NameUtilTest.java +++ b/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/util/NameUtilTest.java @@ -125,13 +125,13 @@ void testGetServiceInstanceNameOrDefault_FallsBackToResourceNameWhenServiceNameB assertEquals("resource-name-2", serviceInstanceName); } - private Resource createResource(String name, String paramValue) { + private Resource createResource(String resourceName, String serviceInstanceName) { Resource resource = Resource.createV3(); - resource.setName(name); + resource.setName(resourceName); Map params = new HashMap<>(); - if (paramValue != null) { - params.put(SupportedParameters.SERVICE_NAME, paramValue); + if (serviceInstanceName != null) { + params.put(SupportedParameters.SERVICE_NAME, serviceInstanceName); } resource.setParameters(params);