Skip to content

Commit

Permalink
Initial definition of content packages
Browse files Browse the repository at this point in the history
  • Loading branch information
jsoriano committed Jul 19, 2024
1 parent 7aa4539 commit 6114b36
Show file tree
Hide file tree
Showing 14 changed files with 207 additions and 15 deletions.
12 changes: 11 additions & 1 deletion code/go/internal/loader/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@
package loader

import (
"errors"
"fmt"
"io/fs"
"os"

"github.com/Masterminds/semver/v3"

Expand All @@ -18,5 +21,12 @@ import (
func LoadSpec(fsys fs.FS, version semver.Version, pkgType string) (spectypes.ItemSpec, error) {
fileSpecLoader := yamlschema.NewFileSchemaLoader()
loader := specschema.NewFolderSpecLoader(fsys, fileSpecLoader, version)
return loader.Load(pkgType)
spec, err := loader.Load(pkgType)
if errors.Is(err, os.ErrNotExist) {
return nil, fmt.Errorf("package type %q not supported (%w)", pkgType, err)
}
if err != nil {
return nil, err
}
return spec, nil
}
1 change: 1 addition & 0 deletions code/go/internal/spec_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ func TestLoadAllBundledVersions(t *testing.T) {
require.NoError(t, err)

for _, version := range versions {
testForVersionType(t, version, "content")
testForVersionType(t, version, "input")
testForVersionType(t, version, "integration")
}
Expand Down
1 change: 1 addition & 0 deletions code/go/pkg/validator/validator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ func TestValidateFile(t *testing.T) {
"good_v2": {},
"good_v3": {},
"good_input": {},
"good_content": {},
"deploy_custom_agent": {},
"deploy_custom_agent_multi_services": {},
"deploy_docker": {},
Expand Down
10 changes: 10 additions & 0 deletions spec/changelog.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,21 @@
## This file documents changes in the package specification. It is NOT a package specification file.
## Newer entries go at the bottom of each in-development version.
##
- version: 3.4.0-next
changes:
- description: Add support for content packages.
type: enhancement
link: https://github.com/elastic/package-spec/pull/777
- version: 3.3.0-next
changes:
- description: Add support for `slo` assets.
type: enhancement
link: https://github.com/elastic/package-spec/pull/767
- version: 3.2.2-next
changes:
- description: Improved error message for unsupported package types
type: enhancement
link: https://github.com/elastic/package-spec/pull/777
- version: 3.2.1
changes:
- description: Improve error information for missing dataset field in manifest.
Expand Down
70 changes: 70 additions & 0 deletions spec/content/manifest.spec.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
##
## Describes the specification for the input package's main manifest.yml file
##
spec:
# Everything under here follows JSON schema (https://json-schema.org/), written as YAML for readability
type: object
additionalProperties: false
definitions:
interested_on:
description: >
Description of the data this package can be used with. It can be used to discover
the package from elements in the existing data.
type: object
additionalProperties: false
properties:
fields:
description: Description of the fields this package can be used with.
type: array
items:
type: object
properties:
name:
description: Name of the field.
type: string
properties:
format_version:
description: The version of the package specification format used by this package.
$ref: "../integration/manifest.spec.yml#/definitions/version"
name:
description: The name of the package.
type: string
pattern: '^[a-z0-9_]+$'
examples:
- apache
title:
$ref: "../integration/manifest.spec.yml#/definitions/title"
description:
$ref: "../integration/manifest.spec.yml#/definitions/description"
version:
description: The version of the package.
$ref: "../integration/manifest.spec.yml#/definitions/version"
source:
$ref: "../integration/manifest.spec.yml#/definitions/source"
type:
description: The type of package.
type: string
enum:
- content
examples:
- content
categories:
$ref: "../integration/manifest.spec.yml#/definitions/categories"
conditions:
$ref: "../integration/manifest.spec.yml#/definitions/conditions"
interested_on:
$ref: "#/definitions/interested_on"
icons:
$ref: "../integration/manifest.spec.yml#/definitions/icons"
screenshots:
$ref: "../integration/manifest.spec.yml#/definitions/screenshots"
owner:
$ref: "../integration/manifest.spec.yml#/definitions/owner"
required:
- format_version
- name
- title
- description
- version
- type
- owner
60 changes: 60 additions & 0 deletions spec/content/spec.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
##
## Entrypoint of "content packages" specification.
## The specification is considered "beta" at the moment, so it may change until we release it as GA.
##
## Describes the folders and files that make up a package.
##
spec:
additionalContents: false
totalContentsLimit: 65535
totalSizeLimit: 50MB
sizeLimit: 30MB
configurationSizeLimit: 5MB
relativePathSizeLimit: 3MB
fieldsPerDataStreamLimit: 2048
contents:
- description: The main package manifest file
type: file
contentMediaType: "application/x-yaml"
sizeLimit: 5MB
name: "manifest.yml"
required: true
$ref: "./manifest.spec.yml"
- description: The package's CHANGELOG file
type: file
contentMediaType: "application/x-yaml"
name: "changelog.yml"
required: true
$ref: "../integration/changelog.spec.yml"
- description: The package's license file
type: file
contentMediaType: "text/plain"
name: "LICENSE.txt"
required: false
- description: Folder containing documentation for the package
type: folder
name: docs
required: true
$ref: "../integration/docs/spec.yml"
- description: Folder containing images for the package
type: folder
name: img
required: false
$ref: "../integration/img/spec.yml"
- description: Folder containing Kibana assets provided by the package
type: folder
name: kibana
required: false
$ref: "../integration/kibana/spec.yml"
- description: Configuration file to process the results returned from the package validation. This file is just for package validation and it should be ignored when installing or using the package.
type: file
contentMediaType: "application/x-yaml"
name: "validation.yml"
required: false
$ref: "../integration/validation.spec.yml"

versions:
- before: 3.4.0
patch:
- op: remove
path: "/contents" # Package type not available before this version.
1 change: 0 additions & 1 deletion spec/input/spec.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
##
## Entrypoint of "input packages" specification.
## The specification is considered "beta" at the moment, so it may change until we release it as GA.
##
## Describes the folders and files that make up a package.
##
Expand Down
26 changes: 13 additions & 13 deletions spec/integration/docs/spec.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
spec:
additionalContents: false
contents:
- description: Main README file
type: file
contentMediaType: "text/markdown"
name: "README.md"
required: true
- description: Other README files (can be used by policy templates)
type: file
contentMediaType: "text/markdown"
pattern: '^.+.md'
required: false
spec:
additionalContents: false
contents:
- description: Main README file
type: file
contentMediaType: "text/markdown"
name: "README.md"
required: true
- description: Other README files (can be used by policy templates)
type: file
contentMediaType: "text/markdown"
pattern: '^.+.md'
required: false
2 changes: 2 additions & 0 deletions spec/integration/img/spec.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
spec:
additionalContents: true # TODO: Add definition for this dir?
5 changes: 5 additions & 0 deletions test/packages/good_content/changelog.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
- version: 0.1.0
changes:
- description: Initial release
type: enhancement
link: https://github.com/elastic/package-spec/pull/777
1 change: 1 addition & 0 deletions test/packages/good_content/docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Reference package of content type
Binary file added test/packages/good_content/img/kibana-system.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions test/packages/good_content/img/system.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
32 changes: 32 additions & 0 deletions test/packages/good_content/manifest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
format_version: 3.4.0
name: good_content
title: Good content package
description: >
This package is a dummy example for packages with the content type.
These packages contain resources that are useful with data ingested by other integrations.
They are not used to configure data sources.
version: 0.1.0
type: content
source:
license: "Apache-2.0"
conditions:
kibana:
version: '^8.16.0' #TBD
elastic:
subscription: 'basic'
interested_on:
fields:
- name: process.pid
screenshots:
- src: /img/kibana-system.png
title: kibana system
size: 1220x852
type: image/png
icons:
- src: /img/system.svg
title: system
size: 1000x1000
type: image/svg+xml
owner:
github: elastic/ecosystem
type: elastic

0 comments on commit 6114b36

Please sign in to comment.