diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/helpers/v2/ConfigurationReferencesResolver.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/helpers/v2/ConfigurationReferencesResolver.java index 381a952c86..3c0dc364b7 100644 --- a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/helpers/v2/ConfigurationReferencesResolver.java +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/helpers/v2/ConfigurationReferencesResolver.java @@ -11,6 +11,7 @@ import java.util.stream.Collectors; import org.cloudfoundry.multiapps.common.ContentException; +import org.cloudfoundry.multiapps.common.util.MiscUtil; import org.cloudfoundry.multiapps.controller.core.Messages; import org.cloudfoundry.multiapps.controller.core.helpers.expander.PropertiesExpander; import org.cloudfoundry.multiapps.controller.core.model.ResolvedConfigurationReference; @@ -121,7 +122,12 @@ protected List expandRequiredDependencyIfNecessary(Propertie } if (!permitsMultipleResources(dependency)) { - makeSureIsResolvedToSingleResource(dependency.getName(), resolvedReference.getResolvedResources()); + if (dependencyOwner instanceof Resource) { + Resource resource = MiscUtil.cast(dependencyOwner); + makeSureIsResolvedToSingleResource(dependency.getName(), resolvedReference.getResolvedResources(), resource.isOptional()); + } else { + makeSureIsResolvedToSingleResource(dependency.getName(), resolvedReference.getResolvedResources(), false); + } return Collections.singletonList(dependency); } @@ -139,7 +145,11 @@ protected List expandRequiredDependencyIfNecessary(Propertie return expandedDependencies; } - protected void makeSureIsResolvedToSingleResource(String resolvedResourceName, List resultingResources) { + protected void makeSureIsResolvedToSingleResource(String resolvedResourceName, List resultingResources, + boolean isResourceOptional) { + if (isResourceOptional) { + return; + } if (resultingResources.size() > 1) { throw new ContentException(format(Messages.MULTIPLE_CONFIGURATION_ENTRIES_WERE_FOUND, resolvedResourceName)); } else if (resultingResources.isEmpty()) { diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/helpers/v3/ConfigurationReferencesResolver.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/helpers/v3/ConfigurationReferencesResolver.java index 072b34c204..ccc2981c75 100644 --- a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/helpers/v3/ConfigurationReferencesResolver.java +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/helpers/v3/ConfigurationReferencesResolver.java @@ -7,6 +7,7 @@ import java.util.Set; import java.util.stream.Collectors; +import org.cloudfoundry.multiapps.common.util.MiscUtil; import org.cloudfoundry.multiapps.controller.core.helpers.expander.PropertiesExpander; import org.cloudfoundry.multiapps.controller.core.helpers.v2.ConfigurationFilterParser; import org.cloudfoundry.multiapps.controller.core.model.ResolvedConfigurationReference; @@ -71,7 +72,12 @@ protected List expandRequiredDependencyIfNecessary(Propertie } if (!permitsMultipleResources(dependency)) { - makeSureIsResolvedToSingleResource(dependency.getName(), resolvedReference.getResolvedResources()); + if (dependencyOwner instanceof Resource) { + Resource resource = MiscUtil.cast(dependencyOwner); + makeSureIsResolvedToSingleResource(dependency.getName(), resolvedReference.getResolvedResources(), resource.isOptional()); + } else { + makeSureIsResolvedToSingleResource(dependency.getName(), resolvedReference.getResolvedResources(), false); + } return Collections.singletonList(dependency); }