From 13a4d23c457deeeb3e7000734f29762f984f28d3 Mon Sep 17 00:00:00 2001 From: Jaime Soriano Pastor Date: Thu, 8 Sep 2022 16:19:14 +0200 Subject: [PATCH] Allow to override ECS fields type from keyword to constant_keyword --- internal/fields/dependency_manager.go | 7 +++++- internal/fields/dependency_manager_test.go | 26 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/internal/fields/dependency_manager.go b/internal/fields/dependency_manager.go index 16a945200e..10a199fea1 100644 --- a/internal/fields/dependency_manager.go +++ b/internal/fields/dependency_manager.go @@ -160,9 +160,14 @@ func (dm *DependencyManager) injectFieldsWithRoot(root string, defs []common.Map // Allow overrides of everything, except the imported type, for consistency. transformed.DeepUpdate(def) - transformed["type"] = imported.Type transformed.Delete("external") + // Allow to override the type only from keyword to constant_keyword, + // to support the case of setting the value already in the mappings. + if ttype, _ := transformed["type"].(string); ttype != "constant_keyword" || imported.Type != "keyword" { + transformed["type"] = imported.Type + } + def = transformed changed = true } else { diff --git a/internal/fields/dependency_manager_test.go b/internal/fields/dependency_manager_test.go index 80cf913924..5b6755a336 100644 --- a/internal/fields/dependency_manager_test.go +++ b/internal/fields/dependency_manager_test.go @@ -57,6 +57,27 @@ func TestDependencyManagerInjectExternalFields(t *testing.T) { changed: true, valid: true, }, + { + title: "keyword to constant_keyword override", + defs: []common.MapStr{ + { + "name": "event.dataset", + "type": "constant_keyword", + "external": "test", + "value": "nginx.access", + }, + }, + result: []common.MapStr{ + { + "name": "event.dataset", + "type": "constant_keyword", + "description": "Dataset that collected this event", + "value": "nginx.access", + }, + }, + changed: true, + valid: true, + }, { title: "external dimension", defs: []common.MapStr{ @@ -362,6 +383,11 @@ func TestDependencyManagerInjectExternalFields(t *testing.T) { Description: "Data stream dataset.", Type: "constant_keyword", }, + { + Name: "event.dataset", + Description: "Dataset that collected this event", + Type: "keyword", + }, { Name: "process.command_line", Description: "Full command line that started the process.",