From 07a446f749450d155ef196df9f4830ca0e3ae53d Mon Sep 17 00:00:00 2001 From: klacabane Date: Fri, 20 Sep 2024 18:17:02 +0200 Subject: [PATCH 1/4] entity definition --- README.md | 1 + spec/changelog.yml | 3 +++ spec/integration/kibana/spec.yml | 13 +++++++++++ .../kibana/entity_definition/services.json | 22 +++++++++++++++++++ test/packages/good_v3/manifest.yml | 2 +- 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 test/packages/good_v3/kibana/entity_definition/services.json diff --git a/README.md b/README.md index ae8ece287..378ef2554 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,7 @@ For a quick overview, these are the assets typically found in an Elastic Package * Security rules * CSP (cloud security posture) rule templates * SLOs + * Entity definitions * Other * fields.yml diff --git a/spec/changelog.yml b/spec/changelog.yml index b7efde27f..47b4bf788 100644 --- a/spec/changelog.yml +++ b/spec/changelog.yml @@ -7,6 +7,9 @@ - description: Add support for content packages. type: enhancement link: https://github.com/elastic/package-spec/pull/777 + - description: Add support for `entity definition` assets. + type: enhancement + link: https://github.com/elastic/package-spec/pull/777 - version: 3.3.0-next changes: - description: Add support for `slo` assets. diff --git a/spec/integration/kibana/spec.yml b/spec/integration/kibana/spec.yml index 2bded0cc6..3f8cf2929 100644 --- a/spec/integration/kibana/spec.yml +++ b/spec/integration/kibana/spec.yml @@ -136,7 +136,20 @@ spec: pattern: '^{PACKAGE_NAME}-.+\.json$' forbiddenPatterns: - '^.+-(ecs|ECS)\.json$' # ECS suffix is forbidden + - description: Folder containing Kibana Entity definition assets + type: folder + name: entity_definition + required: false + contents: + - description: An Entity Definition asset file + type: file + contentMediaType: "application/json" + pattern: '^{PACKAGE_NAME}-.+\.json$' versions: + - before: 3.4.0 + patch: + - op: remove + path: "/contents/14" # remove Entity definition definitions - before: 3.3.0 patch: - op: remove diff --git a/test/packages/good_v3/kibana/entity_definition/services.json b/test/packages/good_v3/kibana/entity_definition/services.json new file mode 100644 index 000000000..0d88a979b --- /dev/null +++ b/test/packages/good_v3/kibana/entity_definition/services.json @@ -0,0 +1,22 @@ +{ + "id": "services", + "type": "entity-definition", + "start": true, + "definition": { + "id": "services-from-logs", + "name": "Extract services from logs", + "managed": true, + "type": "service", + "indexPatterns": ["logs-*"], + "identityFields": ["service.name"], + "displayNameTemplate": "{{service.name}}", + "metadata": [ + "data_stream.type" + ], + "history": { + "timestampField": "@timestamp", + "interval": "1m" + }, + "version": "1.0.0" + } +} diff --git a/test/packages/good_v3/manifest.yml b/test/packages/good_v3/manifest.yml index 91323ef5a..30447ba54 100644 --- a/test/packages/good_v3/manifest.yml +++ b/test/packages/good_v3/manifest.yml @@ -1,4 +1,4 @@ -format_version: 3.3.0 +format_version: 3.4.0 name: good_v3 title: Good package description: This package is good for format version 3 From e5527ab03e85873c9ed2e27a42030cef297c7f99 Mon Sep 17 00:00:00 2001 From: klacabane Date: Fri, 20 Sep 2024 18:20:53 +0200 Subject: [PATCH 2/4] fix test filename --- .../{services.json => good_v3-services-from-logs-abc-1.json} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename test/packages/good_v3/kibana/entity_definition/{services.json => good_v3-services-from-logs-abc-1.json} (85%) diff --git a/test/packages/good_v3/kibana/entity_definition/services.json b/test/packages/good_v3/kibana/entity_definition/good_v3-services-from-logs-abc-1.json similarity index 85% rename from test/packages/good_v3/kibana/entity_definition/services.json rename to test/packages/good_v3/kibana/entity_definition/good_v3-services-from-logs-abc-1.json index 0d88a979b..8f0faa3bb 100644 --- a/test/packages/good_v3/kibana/entity_definition/services.json +++ b/test/packages/good_v3/kibana/entity_definition/good_v3-services-from-logs-abc-1.json @@ -1,9 +1,9 @@ { - "id": "services", + "id": "good_v3-services-from-logs-abc-1", "type": "entity-definition", "start": true, "definition": { - "id": "services-from-logs", + "id": "services_from_logs", "name": "Extract services from logs", "managed": true, "type": "service", From 5f45c3c6994c6cc5924298235ea204d675cea8b4 Mon Sep 17 00:00:00 2001 From: klacabane Date: Tue, 24 Sep 2024 07:36:25 +0200 Subject: [PATCH 3/4] update static entity definition --- .../good_v3-services-from-logs-abc-1.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/packages/good_v3/kibana/entity_definition/good_v3-services-from-logs-abc-1.json b/test/packages/good_v3/kibana/entity_definition/good_v3-services-from-logs-abc-1.json index 8f0faa3bb..9145748e3 100644 --- a/test/packages/good_v3/kibana/entity_definition/good_v3-services-from-logs-abc-1.json +++ b/test/packages/good_v3/kibana/entity_definition/good_v3-services-from-logs-abc-1.json @@ -1,7 +1,4 @@ { - "id": "good_v3-services-from-logs-abc-1", - "type": "entity-definition", - "start": true, "definition": { "id": "services_from_logs", "name": "Extract services from logs", @@ -15,7 +12,10 @@ ], "history": { "timestampField": "@timestamp", - "interval": "1m" + "interval": "1m", + "settings": { + "frequency": "2m" + } }, "version": "1.0.0" } From 7237869a42e30d94fb9e85846aa75c992a1e1473 Mon Sep 17 00:00:00 2001 From: klacabane Date: Tue, 24 Sep 2024 11:22:03 +0200 Subject: [PATCH 4/4] ignore entity definition for saved object tests --- .../validator/semantic/validate_kibana_matching_object_ids.go | 3 +++ .../semantic/validate_kibana_no_dangling_object_ids.go | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/code/go/internal/validator/semantic/validate_kibana_matching_object_ids.go b/code/go/internal/validator/semantic/validate_kibana_matching_object_ids.go index 5a0d5344a..3c8babd52 100644 --- a/code/go/internal/validator/semantic/validate_kibana_matching_object_ids.go +++ b/code/go/internal/validator/semantic/validate_kibana_matching_object_ids.go @@ -29,6 +29,9 @@ func ValidateKibanaObjectIDs(fsys fspath.FS) specerrors.ValidationErrors { for _, objectFile := range objectFiles { filePath := objectFile.Path() + if strings.Contains(filePath, "kibana/entity_definition/") { + continue + } objectID, err := objectFile.Values("$.id") if err != nil { diff --git a/code/go/internal/validator/semantic/validate_kibana_no_dangling_object_ids.go b/code/go/internal/validator/semantic/validate_kibana_no_dangling_object_ids.go index 6cb61b03b..e2e6e33bf 100644 --- a/code/go/internal/validator/semantic/validate_kibana_no_dangling_object_ids.go +++ b/code/go/internal/validator/semantic/validate_kibana_no_dangling_object_ids.go @@ -8,6 +8,7 @@ import ( "fmt" "path" "slices" + "strings" "github.com/elastic/package-spec/v3/code/go/internal/fspath" "github.com/elastic/package-spec/v3/code/go/internal/pkgpath" @@ -43,6 +44,9 @@ func ValidateKibanaNoDanglingObjectIDs(fsys fspath.FS) specerrors.ValidationErro } for _, objectFile := range objectFiles { filePath := objectFile.Path() + if strings.Contains(filePath, "kibana/entity_definition/") { + continue + } currentReference, err := getCurrentObjectReference(objectFile, fsys.Path(filePath)) if err != nil {