Skip to content

Commit 4881703

Browse files
committed
Add warning for unsupported parameters
1 parent f81be7e commit 4881703

File tree

11 files changed

+734
-46
lines changed

11 files changed

+734
-46
lines changed

multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/model/SupportedParameters.java

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ public class SupportedParameters {
3838
public static final String APPLY_NAMESPACE_SERVICES = "service-names";
3939
public static final String APPLY_NAMESPACE_ROUTES = "app-routes";
4040

41+
public static final String DEPLOY_MODE = "deploy_mode";
42+
43+
public static final String PATH = "path";
44+
4145
// Module / module type parameters:
4246
public static final String APP_NAME = "app-name";
4347
public static final String DEFAULT_APP_NAME = "default-app-name";
@@ -99,7 +103,8 @@ public class SupportedParameters {
99103
public static final String DOCKER = "docker";
100104
public static final String TIMESTAMP = "timestamp";
101105
public static final String ENABLE_PARALLEL_SERVICE_BINDINGS = "enable-parallel-service-bindings";
102-
106+
public static final String TCP_ROUTES = "tcp";
107+
public static final String TCPS_ROUTES = "tcps";
103108
public static final String EXECUTE_APP = "execute-app";
104109
public static final String SUCCESS_MARKER = "success-marker";
105110
public static final String FAILURE_MARKER = "failure-marker";
@@ -117,6 +122,8 @@ public class SupportedParameters {
117122
public static final String SERVICE_BROKER_PASSWORD = "service-broker-password";
118123
public static final String SERVICE_BROKER_URL = "service-broker-url";
119124
public static final String SERVICE_BROKER_SPACE_SCOPED = "service-broker-space-scoped";
125+
public static final String MODULE_CONFIG = "config";
126+
public static final String HOOK_REQUIRES = "requires";
120127

121128
// Required dependency parameters:
122129
public static final String SERVICE_BINDING_CONFIG = "config";
@@ -171,6 +178,42 @@ public class SupportedParameters {
171178
@Deprecated
172179
public static final String DEPRECATED_CONFIG_MTA_PROVIDES_DEPENDENCY = "mta-provides-dependency";
173180

181+
public static final Set<String> MODULE_PARAMETERS = Set.of(APP_NAME, APPLY_NAMESPACE, BUILDPACK, BUILDPACKS, COMMAND,
182+
CREATE_SERVICE_BROKER, DEFAULT_APP_NAME, DEFAULT_HOST, DEFAULT_INSTANCES,
183+
DEFAULT_LIVE_APP_NAME, DEFAULT_LIVE_DOMAIN, DEFAULT_LIVE_HOST,
184+
DEFAULT_LIVE_URI, DEFAULT_LIVE_URL, DEFAULT_URI, DEFAULT_URL,
185+
DEPENDENCY_TYPE, DISK_QUOTA, DOCKER, DOMAIN, DOMAINS, DEFAULT_DOMAIN,
186+
ENABLE_SSH, ENABLE_PARALLEL_SERVICE_BINDINGS, HEALTH_CHECK_HTTP_ENDPOINT,
187+
HEALTH_CHECK_TIMEOUT, HEALTH_CHECK_INVOCATION_TIMEOUT, HEALTH_CHECK_TYPE,
188+
HOST, HOSTS, IDLE_DOMAIN, IDLE_DOMAINS, IDLE_HOST, IDLE_HOSTS, IDLE_ROUTES,
189+
INSTANCES, KEEP_EXISTING_APPLICATION_ATTRIBUTES_UPDATE_STRATEGY,
190+
KEEP_EXISTING_ROUTES, MEMORY, NO_ROUTE, NO_START, RESTART_ON_ENV_CHANGE,
191+
ROUTES, ROUTE_PATH, SERVICE_BROKER_NAME, SERVICE_BROKER_PASSWORD,
192+
SERVICE_BROKER_SPACE_SCOPED, SERVICE_BROKER_URL, SERVICE_BROKER_USERNAME,
193+
STACK, STAGE_TIMEOUT, START_TIMEOUT, TASK_EXECUTION_TIMEOUT, TASKS,
194+
TCP_ROUTES, TCPS_ROUTES, TIMESTAMP, UPLOAD_TIMEOUT, ROUTE, EXECUTE_APP,
195+
SUCCESS_MARKER, FAILURE_MARKER, STOP_APP, CHECK_DEPLOY_ID,
196+
REGISTER_SERVICE_URL, REGISTER_SERVICE_URL_SERVICE_NAME,
197+
REGISTER_SERVICE_URL_SERVICE_URL, MODULE_CONFIG, MANAGED, PATH);
198+
199+
public static final Set<String> RESOURCE_PARAMETERS = Set.of(APPLY_NAMESPACE, SERVICE_CONFIG, SYSLOG_DRAIN_URL, DEFAULT_CONTAINER_NAME,
200+
DEFAULT_SERVICE_NAME, DEFAULT_XS_APP_NAME, SERVICE, SERVICE_KEYS,
201+
SERVICE_KEY_NAME, SERVICE_NAME, SERVICE_PLAN, SERVICE_TAGS, SERVICE_BROKER,
202+
SKIP_SERVICE_UPDATES, TYPE, PROVIDER_ID, PROVIDER_NID, TARGET,
203+
SERVICE_CONFIG_PATH, FILTER, MANAGED, VERSION, PATH, MEMORY);
204+
public static final Set<String> UNIVERSAL_REFERENCE_PARAMETERS = Set.of(XS_TYPE, USER, SPACE_GUID, SPACE_NAME, PROTOCOL,
205+
ORGANIZATION_GUID, ORGANIZATION_NAME, MTA_VERSION, MTA_ID,
206+
GENERATED_USER, GENERATED_PASSWORD, DEPLOY_SERVICE_URL,
207+
DEFAULT_DOMAIN, AUTHORIZATION_URL);
208+
public static final Set<String> GLOBAL_PARAMETERS = Set.of(KEEP_EXISTING_ROUTES, APPS_UPLOAD_TIMEOUT, APPS_TASK_EXECUTION_TIMEOUT,
209+
APPS_START_TIMEOUT, APPS_STAGE_TIMEOUT, APPLY_NAMESPACE,
210+
ENABLE_PARALLEL_DEPLOYMENTS, DEPLOY_MODE);
211+
212+
public static final Set<String> DEPENDENCY_PARAMETERS = Set.of(BINDING_NAME, ENV_VAR_NAME, VISIBILITY, USE_LIVE_ROUTES,
213+
SERVICE_BINDING_CONFIG);
214+
215+
public static final Set<String> MODULE_HOOK_PARAMETERS = Set.of(NAME, COMMAND, MEMORY, DISK_QUOTA, HOOK_REQUIRES);
216+
174217
public static final Set<String> CONFIGURATION_REFERENCE_PARAMETERS = Set.of(PROVIDER_NID, PROVIDER_ID, TARGET, VERSION,
175218
DEPRECATED_CONFIG_MTA_ID, DEPRECATED_CONFIG_MTA_VERSION,
176219
DEPRECATED_CONFIG_MTA_PROVIDES_DEPENDENCY, NAMESPACE);

multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/Messages.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,8 @@ public class Messages {
258258
public static final String SERVICE_KEY_0_IS_ALREADY_DELETED = "Service key \"{0}\" is already deleted";
259259
public static final String FILE_WITH_ID_0_OPERATION_OWNERSHIP_CHANGED_FROM_0_TO_1 = "File with id \"{0}\" operation ownership was changed from \"{1}\" to \"{2}\" and won't be deleted";
260260

261+
public static final String PARAMETERS_0_ARE_NOT_SUPPORTED_OR_REFERENCED_BY_ANY_OTHER_ENTITIES = "Parameter(s) \"{0}\" are not supported in the specified scope, or referenced by any other entities. These parameters will not be processed and can be lost after the operation completes.";
262+
261263
// INFO log messages
262264
public static final String ACQUIRING_LOCK = "Process \"{0}\" attempting to acquire lock for operation on MTA \"{1}\"";
263265
public static final String ACQUIRED_LOCK = "Process \"{0}\" acquired lock for operation on MTA \"{1}\"";

multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/CollectSystemParametersStep.java

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
package org.cloudfoundry.multiapps.controller.process.steps;
22

3-
import java.net.URL;
4-
import java.text.MessageFormat;
5-
import java.util.function.Supplier;
6-
3+
import com.sap.cloudfoundry.client.facade.CloudControllerClient;
4+
import com.sap.cloudfoundry.client.facade.CloudCredentials;
5+
import com.sap.cloudfoundry.client.facade.CloudOperationException;
6+
import com.sap.cloudfoundry.client.facade.util.AuthorizationEndpointGetter;
77
import jakarta.inject.Inject;
88
import jakarta.inject.Named;
9-
109
import org.cloudfoundry.multiapps.common.ContentException;
1110
import org.cloudfoundry.multiapps.controller.core.cf.clients.WebClientFactory;
1211
import org.cloudfoundry.multiapps.controller.core.helpers.CredentialsGenerator;
@@ -27,10 +26,9 @@
2726
import org.springframework.context.annotation.Scope;
2827
import org.springframework.http.HttpStatus;
2928

30-
import com.sap.cloudfoundry.client.facade.CloudControllerClient;
31-
import com.sap.cloudfoundry.client.facade.CloudCredentials;
32-
import com.sap.cloudfoundry.client.facade.CloudOperationException;
33-
import com.sap.cloudfoundry.client.facade.util.AuthorizationEndpointGetter;
29+
import java.net.URL;
30+
import java.text.MessageFormat;
31+
import java.util.function.Supplier;
3432

3533
@Named("collectSystemParametersStep")
3634
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
@@ -44,7 +42,7 @@ public class CollectSystemParametersStep extends SyncFlowableStep {
4442
private TokenService tokenService;
4543
@Inject
4644
private WebClientFactory webClientFactory;
47-
45+
4846
@Override
4947
protected StepPhase executeStep(ProcessContext context) {
5048
return executeStepInternal(context, false);
@@ -61,7 +59,6 @@ protected StepPhase executeStepInternal(ProcessContext context, boolean reserveT
6159
SystemParameters systemParameters = createSystemParameters(context, defaultDomainName, reserveTemporaryRoutes, descriptor);
6260
systemParameters.injectInto(descriptor);
6361
getStepLogger().debug(Messages.DESCRIPTOR_WITH_SYSTEM_PARAMETERS, SecureSerialization.toJson(descriptor));
64-
6562
determineIsVersionAccepted(context, descriptor);
6663

6764
context.setVariable(Variables.DEPLOYMENT_DESCRIPTOR_WITH_SYSTEM_PARAMETERS, descriptor);
@@ -124,11 +121,10 @@ private SystemParameters createSystemParameters(ProcessContext context, String d
124121
.timestamp(timestamp)
125122
.mtaId(descriptor.getId())
126123
.mtaVersion(descriptor.getVersion())
127-
.hostValidator(new HostValidator(namespace,
128-
applyNamespaceGlobalLevel,
129-
applyNamespaceProcessVariable,
130-
applyNamespaceAsSuffixGlobalLevel,
131-
applyNamespaceAsSuffixProcessVariable))
124+
.hostValidator(
125+
new HostValidator(namespace, applyNamespaceGlobalLevel, applyNamespaceProcessVariable,
126+
applyNamespaceAsSuffixGlobalLevel,
127+
applyNamespaceAsSuffixProcessVariable))
132128
.build();
133129
}
134130

@@ -150,8 +146,8 @@ private void determineIsVersionAccepted(ProcessContext context, DeploymentDescri
150146
if (deploymentType == DeploymentType.REDEPLOYMENT) {
151147
throw new ContentException(Messages.SAME_VERSION_ALREADY_DEPLOYED);
152148
}
153-
throw new IllegalStateException(MessageFormat.format(Messages.VERSION_RULE_DOES_NOT_ALLOW_DEPLOYMENT_TYPE, versionRule,
154-
deploymentType));
149+
throw new IllegalStateException(
150+
MessageFormat.format(Messages.VERSION_RULE_DOES_NOT_ALLOW_DEPLOYMENT_TYPE, versionRule, deploymentType));
155151
}
156152

157153
private DeploymentType getDeploymentType(DeployedMta deployedMta, Version newMtaVersion) {

multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/MergeDescriptorsStep.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,31 @@
11
package org.cloudfoundry.multiapps.controller.process.steps;
22

3-
import java.util.List;
4-
import java.util.Objects;
5-
3+
import jakarta.inject.Inject;
4+
import jakarta.inject.Named;
65
import org.cloudfoundry.multiapps.controller.core.cf.CloudHandlerFactory;
76
import org.cloudfoundry.multiapps.controller.core.helpers.MtaDescriptorMerger;
87
import org.cloudfoundry.multiapps.controller.persistence.dto.BackupDescriptor;
98
import org.cloudfoundry.multiapps.controller.persistence.dto.ImmutableBackupDescriptor;
109
import org.cloudfoundry.multiapps.controller.persistence.services.DescriptorBackupService;
1110
import org.cloudfoundry.multiapps.controller.process.Messages;
1211
import org.cloudfoundry.multiapps.controller.process.util.NamespaceGlobalParameters;
12+
import org.cloudfoundry.multiapps.controller.process.util.SupportedParametersChecker;
1313
import org.cloudfoundry.multiapps.controller.process.variables.Variables;
1414
import org.cloudfoundry.multiapps.mta.model.DeploymentDescriptor;
1515
import org.cloudfoundry.multiapps.mta.model.ExtensionDescriptor;
1616
import org.cloudfoundry.multiapps.mta.model.Platform;
1717
import org.springframework.beans.factory.config.BeanDefinition;
1818
import org.springframework.context.annotation.Scope;
1919

20-
import jakarta.inject.Inject;
21-
import jakarta.inject.Named;
20+
import java.text.MessageFormat;
21+
import java.util.List;
22+
import java.util.Objects;
2223

2324
@Named("mergeDescriptorsStep")
2425
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
2526
public class MergeDescriptorsStep extends SyncFlowableStep {
26-
27+
@Inject
28+
private SupportedParametersChecker supportedParametersChecker;
2729
@Inject
2830
private DescriptorBackupService descriptorBackupService;
2931

@@ -42,11 +44,21 @@ protected StepPhase executeStep(ProcessContext context) {
4244
extensionDescriptors);
4345
context.setVariable(Variables.DEPLOYMENT_DESCRIPTOR, descriptor);
4446

47+
warnForUnknownParameters(descriptor);
48+
4549
backupDeploymentDescriptor(context, descriptor);
4650
getStepLogger().debug(Messages.DESCRIPTORS_MERGED);
4751
return StepPhase.DONE;
4852
}
4953

54+
private void warnForUnknownParameters(DeploymentDescriptor descriptor) {
55+
List<String> unknownParameters = supportedParametersChecker.getUnknownParameters(descriptor);
56+
if (!unknownParameters.isEmpty()) {
57+
getStepLogger().warn(
58+
MessageFormat.format(Messages.PARAMETERS_0_ARE_NOT_SUPPORTED_OR_REFERENCED_BY_ANY_OTHER_ENTITIES, unknownParameters));
59+
}
60+
}
61+
5062
private void backupDeploymentDescriptor(ProcessContext context, DeploymentDescriptor descriptor) {
5163
boolean shouldBackupPreviousVersion = context.getVariable(Variables.SHOULD_BACKUP_PREVIOUS_VERSION);
5264
if (!shouldBackupPreviousVersion) {
@@ -78,8 +90,8 @@ private void backupDeploymentDescriptor(ProcessContext context, DeploymentDescri
7890
private void checkForUnsupportedParameters(ProcessContext context, DeploymentDescriptor descriptor,
7991
boolean shouldBackupPreviousVersion) {
8092
NamespaceGlobalParameters namespaceGlobalParameters = new NamespaceGlobalParameters(descriptor);
81-
if (shouldBackupPreviousVersion && (Objects.requireNonNullElse(context.getVariable(Variables.APPLY_NAMESPACE_AS_SUFFIX), false)
82-
|| namespaceGlobalParameters.getApplyNamespaceAsSuffix())) {
93+
if (shouldBackupPreviousVersion && (Objects.requireNonNullElse(context.getVariable(Variables.APPLY_NAMESPACE_AS_SUFFIX),
94+
false) || namespaceGlobalParameters.getApplyNamespaceAsSuffix())) {
8395
throw new UnsupportedOperationException(Messages.BACKUP_PREVIOUS_VERSION_FLAG_AND_APPLY_NAMESPACE_AS_SUFFIX_NOT_SUPPORTED);
8496
}
8597
}

multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/util/ModuleHooksAggregator.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
1-
21
package org.cloudfoundry.multiapps.controller.process.util;
32

4-
import java.util.Collections;
5-
import java.util.List;
6-
import java.util.Map;
7-
import java.util.stream.Collectors;
8-
93
import org.cloudfoundry.multiapps.controller.core.model.HookPhase;
104
import org.cloudfoundry.multiapps.controller.process.steps.StepsUtil;
115
import org.cloudfoundry.multiapps.mta.model.Hook;
126
import org.cloudfoundry.multiapps.mta.model.Module;
137
import org.flowable.engine.delegate.DelegateExecution;
148

15-
public class ModuleHooksAggregator {
9+
import java.util.Collections;
10+
import java.util.List;
11+
import java.util.Map;
12+
import java.util.stream.Collectors;
1613

17-
private static final int MAJOR_SCHEMA_VERSION_THREE = 3;
14+
public class ModuleHooksAggregator {
1815

1916
private final DelegateExecution execution;
2017
private final Module moduleToDeploy;
@@ -41,8 +38,8 @@ private List<Hook> collectHooksWithPhase(Module moduleToDeploy, List<HookPhase>
4138
.collect(Collectors.toList());
4239
}
4340

44-
private List<Hook> getModuleHooks(Module moduleToDeploy) {
45-
return moduleToDeploy.getMajorSchemaVersion() < MAJOR_SCHEMA_VERSION_THREE ? Collections.emptyList() : moduleToDeploy.getHooks();
41+
private List<Hook> getModuleHooks(Module module) {
42+
return (List<Hook>) SchemaVersionUtils.getEntityData(module, Module::getMajorSchemaVersion, Module::getHooks);
4643
}
4744

4845
private boolean shouldCollectHook(List<String> hookPhases, List<HookPhase> hookTypeForCurrentStepPhase) {
@@ -65,8 +62,8 @@ private List<Hook> getHooksForExecution(Map<String, List<String>> alreadyExecute
6562

6663
private boolean shouldExecuteHook(Map<String, List<String>> alreadyExecutedHooks, List<HookPhase> hookPhasesForCurrentStepPhase,
6764
Hook hook) {
68-
return !alreadyExecutedHooks.containsKey(hook.getName())
69-
|| !hasAllPhasesExecuted(alreadyExecutedHooks, hook, hookPhasesForCurrentStepPhase);
65+
return !alreadyExecutedHooks.containsKey(hook.getName()) || !hasAllPhasesExecuted(alreadyExecutedHooks, hook,
66+
hookPhasesForCurrentStepPhase);
7067
}
7168

7269
private boolean hasAllPhasesExecuted(Map<String, List<String>> alreadyExecutedHooks, Hook hookToBeExecuted,

0 commit comments

Comments
 (0)