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/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 { diff --git a/spec/changelog.yml b/spec/changelog.yml index e953eb5da..f170e2799 100644 --- a/spec/changelog.yml +++ b/spec/changelog.yml @@ -4,9 +4,12 @@ ## - version: 3.4.0-next changes: - - description: Add support for content packages. - type: enhancement - link: https://github.com/elastic/package-spec/pull/777 + - 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/804 - 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/good_v3-services-from-logs-abc-1.json b/test/packages/good_v3/kibana/entity_definition/good_v3-services-from-logs-abc-1.json new file mode 100644 index 000000000..9145748e3 --- /dev/null +++ b/test/packages/good_v3/kibana/entity_definition/good_v3-services-from-logs-abc-1.json @@ -0,0 +1,22 @@ +{ + "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", + "settings": { + "frequency": "2m" + } + }, + "version": "1.0.0" + } +} diff --git a/test/packages/good_v3/manifest.yml b/test/packages/good_v3/manifest.yml index 30392c9e2..3c780bd2f 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