in internal/fields/dynamictemplate.go [121:204]
func parseDynamicTemplates(rawDynamicTemplates []map[string]any) ([]dynamicTemplate, error) {
dynamicTemplates := []dynamicTemplate{}
for _, template := range rawDynamicTemplates {
if len(template) != 1 {
return nil, fmt.Errorf("unexpected number of dynamic template definitions found")
}
// there is just one dynamic template per object
templateName := ""
var rawContents any
for key, value := range template {
templateName = key
rawContents = value
}
if shouldSkipDynamicTemplate(templateName) {
continue
}
aDynamicTemplate := dynamicTemplate{
name: templateName,
}
contents, ok := rawContents.(map[string]any)
if !ok {
return nil, fmt.Errorf("unexpected dynamic template format found for %q", templateName)
}
isRuntime := false
for setting, value := range contents {
switch setting {
case "mapping":
aDynamicTemplate.mapping = value
case "runtime":
isRuntime = true
case "match_pattern":
s, ok := value.(string)
if !ok {
return nil, fmt.Errorf("invalid type for \"match_pattern\": %T", value)
}
aDynamicTemplate.matchPattern = s
case "match":
values, err := parseDynamicTemplateParameter(value)
if err != nil {
logger.Warnf("failed to check match setting: %s", err)
return nil, fmt.Errorf("failed to check match setting: %w", err)
}
aDynamicTemplate.match = values
case "unmatch":
values, err := parseDynamicTemplateParameter(value)
if err != nil {
return nil, fmt.Errorf("failed to check unmatch setting: %w", err)
}
aDynamicTemplate.unmatch = values
case "path_match":
values, err := parseDynamicTemplateParameter(value)
if err != nil {
return nil, fmt.Errorf("failed to check path_match setting: %w", err)
}
aDynamicTemplate.pathMatch = values
case "path_unmatch":
values, err := parseDynamicTemplateParameter(value)
if err != nil {
return nil, fmt.Errorf("failed to check path_unmatch setting: %w", err)
}
aDynamicTemplate.unpathMatch = values
case "match_mapping_type", "unmatch_mapping_type":
// Do nothing
// These parameters require to check the original type (before the document is ingested)
// but the dynamic template just contains the type from the `mapping` field
default:
return nil, fmt.Errorf("unexpected setting found in dynamic template")
}
}
if isRuntime {
continue
}
dynamicTemplates = append(dynamicTemplates, aDynamicTemplate)
}
return dynamicTemplates, nil
}