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..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 @@ -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 resourceName, String serviceInstanceName) { + Resource resource = Resource.createV3(); + resource.setName(resourceName); + + Map params = new HashMap<>(); + if (serviceInstanceName != null) { + params.put(SupportedParameters.SERVICE_NAME, serviceInstanceName); + } + 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 4cfea644df..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,8 +132,10 @@ private List getExistingServiceGuids(ProcessContext context) { } private Optional resolveServiceGuid(CloudControllerClient client, Resource resource) { + String serviceInstanceName = NameUtil.getServiceInstanceNameOrDefault(resource); + try { - CloudServiceInstance instance = client.getServiceInstance(resource.getName()); + CloudServiceInstance instance = client.getServiceInstance(serviceInstanceName); return Optional.of(instance.getGuid() .toString()); } catch (CloudOperationException e) {