Skip to content

Commit 3f61f8c

Browse files
committed
fix WoT tm validation "dynamic" config Helm template
* some errors were undetected * also improve parsing of validationContext, making the 3 parts of it optional in code
1 parent 1046f0f commit 3f61f8c

File tree

3 files changed

+57
-38
lines changed

3 files changed

+57
-38
lines changed

deployment/helm/ditto/Chart.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ description: |
1616
A digital twin is a virtual, cloud based, representation of his real world counterpart
1717
(real world “Things”, e.g. devices like sensors, smart heating, connected cars, smart grids, EV charging stations etc).
1818
type: application
19-
version: 3.6.0 # chart version is effectively set by release-job
20-
appVersion: 3.5.12
19+
version: 3.6.1 # chart version is effectively set by release-job
20+
appVersion: 3.6.0
2121
keywords:
2222
- iot-chart
2323
- digital-twin

deployment/helm/ditto/templates/things-deployment.yaml

+27-13
Original file line numberDiff line numberDiff line change
@@ -163,35 +163,49 @@ spec:
163163
{{- end }}
164164
'-Dditto.things.wot.to-thing-description.json-template={{ .Values.things.config.wot.tdJsonTemplate | replace "\n" "" | replace "\\\"" "\"" }}'
165165
{{- range $dynConfIdx, $dynamicWotTmValidationConfig := .Values.things.config.wot.tmValidation.dynamicConfig }}
166-
{{- if or (gt (len $dynamicWotTmValidationConfig.validationContext.dittoHeadersPatterns) 0) (gt (len $dynamicWotTmValidationConfig.validationContext.thingDefinitionPatterns) 0) (gt (len $dynamicWotTmValidationConfig.validationContext.featureDefinitionPatterns) 0) }}
167-
{{- range $dhpIdx, $dittoHeadersPatterns := $dynamicWotTmValidationConfig.validationContext.dittoHeadersPatterns }}
168-
{{- range $dhpKey, $dhpVal := $dittoHeadersPatterns }}
166+
{{- if $dynamicWotTmValidationConfig.validationContext.dittoHeadersPatterns }}
167+
{{- if gt (len $dynamicWotTmValidationConfig.validationContext.dittoHeadersPatterns) 0 }}
168+
{{- range $dhpIdx, $dittoHeadersPatterns := $dynamicWotTmValidationConfig.validationContext.dittoHeadersPatterns }}
169+
{{- range $dhpKey, $dhpVal := $dittoHeadersPatterns }}
169170
"{{ printf "%s%d%s%d%s%s=%v" "-Dditto.things.wot.tm-model-validation.dynamic-configuration." $dynConfIdx ".validation-context.ditto-headers-patterns." $dhpIdx "." $dhpKey $dhpVal }}"
171+
{{- end }}
172+
{{- end }}
173+
{{- end }}
170174
{{- end }}
171-
{{- end }}
172-
{{- range $tdpIdx, $thingDefinitionPattern := $dynamicWotTmValidationConfig.validationContext.thingDefinitionPatterns }}
175+
{{- if $dynamicWotTmValidationConfig.validationContext.thingDefinitionPatterns }}
176+
{{- if gt (len $dynamicWotTmValidationConfig.validationContext.thingDefinitionPatterns) 0 }}
177+
{{- range $tdpIdx, $thingDefinitionPattern := $dynamicWotTmValidationConfig.validationContext.thingDefinitionPatterns }}
173178
"{{ printf "%s%d%s%d=%v" "-Dditto.things.wot.tm-model-validation.dynamic-configuration." $dynConfIdx ".validation-context.thing-definition-patterns." $tdpIdx $thingDefinitionPattern }}"
179+
{{- end }}
180+
{{- end }}
174181
{{- end }}
175-
{{- range $fdpIdx, $featureDefinitionPattern := $dynamicWotTmValidationConfig.validationContext.featureDefinitionPatterns }}
182+
{{- if $dynamicWotTmValidationConfig.validationContext.featureDefinitionPatterns }}
183+
{{- if gt (len $dynamicWotTmValidationConfig.validationContext.featureDefinitionPatterns) 0 }}
184+
{{- range $fdpIdx, $featureDefinitionPattern := $dynamicWotTmValidationConfig.validationContext.featureDefinitionPatterns }}
176185
"{{ printf "%s%d%s%d=%v" "-Dditto.things.wot.tm-model-validation.dynamic-configuration." $dynConfIdx ".validation-context.feature-definition-patterns." $fdpIdx $featureDefinitionPattern }}"
186+
{{- end }}
187+
{{- end }}
177188
{{- end }}
178189
{{- range $configOverridesKey, $configOverridesValue := $dynamicWotTmValidationConfig.configOverrides }}
179190
{{- if or (eq (kindOf $configOverridesValue) "map") (eq (kindOf $configOverridesValue) "slice") }}
180-
{{- range $nested1ConfigOverridesKey, $nested1ConfigOverridesValue := $configOverridesValue }}
181-
{{- if or (eq (kindOf $nested1ConfigOverridesValue) "map") (eq (kindOf $nested1ConfigOverridesValue) "slice") }}
182-
{{- range $nested2ConfigOverridesKey, $nested2ConfigOverridesValue := $nested1ConfigOverridesValue }}
191+
{{- range $nested1ConfigOverridesKey, $nested1ConfigOverridesValue := $configOverridesValue }}
192+
{{- if or (eq (kindOf $nested1ConfigOverridesValue) "map") (eq (kindOf $nested1ConfigOverridesValue) "slice") }}
193+
{{- range $nested2ConfigOverridesKey, $nested2ConfigOverridesValue := $nested1ConfigOverridesValue }}
194+
{{- if not (kindIs "invalid" $nested2ConfigOverridesValue) }}
183195
"{{ printf "%s%d%s%s%s%s%s%s=%v" "-Dditto.things.wot.tm-model-validation.dynamic-configuration." $dynConfIdx ".config-overrides." $configOverridesKey "." $nested1ConfigOverridesKey "." $nested2ConfigOverridesKey $nested2ConfigOverridesValue }}"
184-
{{- end }}
185-
{{- else }}
196+
{{- end }}
197+
{{- end }}
198+
{{- else }}
199+
{{- if not (kindIs "invalid" $nested1ConfigOverridesValue) }}
186200
"{{ printf "%s%d%s%s%s%s=%v" "-Dditto.things.wot.tm-model-validation.dynamic-configuration." $dynConfIdx ".config-overrides." $configOverridesKey "." $nested1ConfigOverridesKey $nested1ConfigOverridesValue }}"
201+
{{- end }}
202+
{{- end }}
187203
{{- end }}
188-
{{- end }}
189204
{{- else }}
190205
"{{ printf "%s%d%s%s=%v" "-Dditto.things.wot.tm-model-validation.dynamic-configuration." $dynConfIdx ".config-overrides." $configOverridesKey $configOverridesValue }}"
191206
{{- end }}
192207
{{- end }}
193208
{{- end }}
194-
{{- end }}
195209
{{ join " " .Values.things.systemProps }}
196210
- name: MONGO_DB_SSL_ENABLED
197211
value: "{{ printf "%t" .Values.dbconfig.things.ssl }}"

wot/api/src/main/java/org/eclipse/ditto/wot/api/config/InternalDynamicTmValidationConfiguration.java

+28-23
Original file line numberDiff line numberDiff line change
@@ -43,29 +43,33 @@ final class InternalDynamicTmValidationConfiguration {
4343

4444
InternalDynamicTmValidationConfiguration(final Config config) {
4545
final Config validationContext = config.getConfig(CONFIG_KEY_VALIDATION_CONTEXT);
46-
final List<Map<String, Pattern>> parsedDittoHeadersPatterns = validationContext
47-
.getConfigList(CONFIG_KEY_DITTO_HEADERS_PATTERNS)
48-
.stream()
49-
.map(c -> c.entrySet()
50-
.stream()
51-
.map(e -> new AbstractMap.SimpleEntry<>(
52-
e.getKey(),
53-
Pattern.compile(e.getValue().unwrapped().toString())
46+
47+
final List<Map<String, Pattern>> parsedDittoHeadersPatterns =
48+
validationContext.hasPath(CONFIG_KEY_DITTO_HEADERS_PATTERNS) ?
49+
validationContext.getConfigList(CONFIG_KEY_DITTO_HEADERS_PATTERNS)
50+
.stream()
51+
.map(c -> c.entrySet()
52+
.stream()
53+
.map(e -> new AbstractMap.SimpleEntry<>(
54+
e.getKey(),
55+
Pattern.compile(e.getValue().unwrapped().toString())
56+
)
57+
)
58+
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))
5459
)
55-
)
56-
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))
57-
)
58-
.toList();
59-
final List<Pattern> thingDefinitionPatterns = validationContext
60-
.getStringList(CONFIG_KEY_THING_DEFINITION_PATTERNS)
61-
.stream()
62-
.map(Pattern::compile)
63-
.toList();
64-
final List<Pattern> featureDefinitionPatterns = validationContext
65-
.getStringList(CONFIG_KEY_FEATURE_DEFINITION_PATTERNS)
66-
.stream()
67-
.map(Pattern::compile)
68-
.toList();
60+
.toList() : List.of();
61+
final List<Pattern> thingDefinitionPatterns =
62+
validationContext.hasPath(CONFIG_KEY_THING_DEFINITION_PATTERNS) ?
63+
validationContext.getStringList(CONFIG_KEY_THING_DEFINITION_PATTERNS)
64+
.stream()
65+
.map(Pattern::compile)
66+
.toList() : List.of();
67+
final List<Pattern> featureDefinitionPatterns =
68+
validationContext.hasPath(CONFIG_KEY_FEATURE_DEFINITION_PATTERNS) ?
69+
validationContext.getStringList(CONFIG_KEY_FEATURE_DEFINITION_PATTERNS)
70+
.stream()
71+
.map(Pattern::compile)
72+
.toList() : List.of();
6973

7074
dynamicValidationContextConfiguration = new DynamicValidationContextConfiguration(
7175
parsedDittoHeadersPatterns,
@@ -102,7 +106,8 @@ Optional<Config> calculateDynamicTmValidationConfigOverrides(
102106
// OR
103107
.anyMatch(pattern -> pattern.matcher(validationContext.featureDefinition().toString())
104108
.matches());
105-
if (!dynamicValidationContextConfiguration.featureDefinitionPatterns().isEmpty() && !featureDefinitionMatches) {
109+
if (!dynamicValidationContextConfiguration.featureDefinitionPatterns().isEmpty() &&
110+
!featureDefinitionMatches) {
106111
return Optional.empty();
107112
}
108113

0 commit comments

Comments
 (0)