diff --git a/cmd/create_data_stream.go b/cmd/create_data_stream.go
index 14e9fd6a8b..b9cf1f2540 100644
--- a/cmd/create_data_stream.go
+++ b/cmd/create_data_stream.go
@@ -40,6 +40,15 @@ func createDataStreamCommandAction(cmd *cobra.Command, args []string) error {
return errors.New("package root not found, you can only create new data stream in the package context")
}
+ manifest, err := packages.ReadPackageManifestFromPackageRoot(packageRoot)
+ if err != nil {
+ return fmt.Errorf("reading package manifest failed (path: %s): %w", packageRoot, err)
+ }
+
+ if manifest.Type == "input" {
+ return fmt.Errorf("data-streams are not supported in input packages")
+ }
+
qs := []*survey.Question{
{
Name: "name",
diff --git a/cmd/create_package.go b/cmd/create_package.go
index 14cda0d34d..9e1c446114 100644
--- a/cmd/create_package.go
+++ b/cmd/create_package.go
@@ -28,6 +28,7 @@ const (
type newPackageAnswers struct {
Name string
+ Type string
Version string
SourceLicense string `survey:"source_license"`
Title string
@@ -36,12 +37,31 @@ type newPackageAnswers struct {
KibanaVersion string `survey:"kibana_version"`
ElasticSubscription string `survey:"elastic_subscription"`
GithubOwner string `survey:"github_owner"`
+ DataStreamType string `survey:"datastream_type"`
}
func createPackageCommandAction(cmd *cobra.Command, args []string) error {
cmd.Println("Create a new package")
qs := []*survey.Question{
+ {
+ Name: "type",
+ Prompt: &survey.Select{
+ Message: "Package type:",
+ Options: []string{"input", "integration"},
+ Default: "integration",
+ },
+ Validate: survey.Required,
+ },
+ }
+
+ var answers newPackageAnswers
+ err := survey.Ask(qs, &answers)
+ if err != nil {
+ return fmt.Errorf("prompt failed: %w", err)
+ }
+
+ qs = []*survey.Question{
{
Name: "name",
Prompt: &survey.Input{
@@ -132,8 +152,23 @@ func createPackageCommandAction(cmd *cobra.Command, args []string) error {
},
}
- var answers newPackageAnswers
- err := survey.Ask(qs, &answers)
+ if answers.Type == "input" {
+ inputQs := []*survey.Question{
+ {
+ Name: "datastream_type",
+ Prompt: &survey.Select{
+ Message: "Input Data Stream type:",
+ Options: []string{"logs", "metrics"},
+ Default: "logs",
+ },
+ Validate: survey.Required,
+ },
+ }
+
+ qs = append(qs, inputQs...)
+ }
+
+ err = survey.Ask(qs, &answers)
if err != nil {
return fmt.Errorf("prompt failed: %w", err)
}
@@ -153,11 +188,16 @@ func createPackageDescriptorFromAnswers(answers newPackageAnswers) archetype.Pac
if answers.SourceLicense != noLicenseValue {
sourceLicense = answers.SourceLicense
}
+
+ inputDataStreamType := ""
+ if answers.Type == "input" {
+ inputDataStreamType = answers.DataStreamType
+ }
return archetype.PackageDescriptor{
Manifest: packages.PackageManifest{
Name: answers.Name,
Title: answers.Title,
- Type: "integration",
+ Type: answers.Type,
Version: answers.Version,
Source: packages.Source{
License: sourceLicense,
@@ -177,5 +217,6 @@ func createPackageDescriptorFromAnswers(answers newPackageAnswers) archetype.Pac
Description: answers.Description,
Categories: answers.Categories,
},
+ InputDataStreamType: inputDataStreamType,
}
}
diff --git a/internal/packages/archetype/_static/dataStream-agent-stream.yml.tmpl b/internal/packages/archetype/_static/dataStream-agent-stream.yml.tmpl
new file mode 100644
index 0000000000..d9b7e4bca6
--- /dev/null
+++ b/internal/packages/archetype/_static/dataStream-agent-stream.yml.tmpl
@@ -0,0 +1,14 @@
+{{if eq .Manifest.Type "logs"}}paths:
+{{ "{{#each paths as |path i|}}" }}
+ - {{ "{{path}}" }}
+{{ "{{/each}}" }}
+exclude_files: [".gz$"]
+processors:
+ - add_locale: ~
+{{else}}metricsets: ["sample_metricset"]
+hosts:
+{{ "{{#each hosts}}" }}
+ - {{ "{{this}}" }}
+{{ "{{/each}}" }}
+period: {{ "{{period}}" }}
+{{end}}
\ No newline at end of file
diff --git a/internal/packages/archetype/_static/dataStream-elasticsearch-ingest-pipeline.yml.tmpl b/internal/packages/archetype/_static/dataStream-elasticsearch-ingest-pipeline.yml.tmpl
new file mode 100644
index 0000000000..aa171955c2
--- /dev/null
+++ b/internal/packages/archetype/_static/dataStream-elasticsearch-ingest-pipeline.yml.tmpl
@@ -0,0 +1,10 @@
+---
+description: Pipeline for processing sample logs
+processors:
+- set:
+ field: sample_field
+ value: "1"
+on_failure:
+- set:
+ field: error.message
+ value: {{ "'{{ _ingest.on_failure_message }}'" }}
diff --git a/internal/packages/archetype/data_stream_manifest.go b/internal/packages/archetype/_static/dataStream-manifest.yml.tmpl
similarity index 69%
rename from internal/packages/archetype/data_stream_manifest.go
rename to internal/packages/archetype/_static/dataStream-manifest.yml.tmpl
index ef132f7fe8..5a06851854 100644
--- a/internal/packages/archetype/data_stream_manifest.go
+++ b/internal/packages/archetype/_static/dataStream-manifest.yml.tmpl
@@ -1,10 +1,4 @@
-// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
-// or more contributor license agreements. Licensed under the Elastic License;
-// you may not use this file except in compliance with the Elastic License.
-
-package archetype
-
-const dataStreamManifestTemplate = `title: "{{.Manifest.Title}}"
+title: "{{.Manifest.Title}}"
type: {{.Manifest.Type}}
streams:{{if eq .Manifest.Type "logs" }}
- input: logfile
@@ -35,5 +29,4 @@ elasticsearch:
index_mode: {{ .Manifest.Elasticsearch.IndexMode }}
{{- end}}
{{- end}}
-{{- end}}
-`
+{{- end}}
\ No newline at end of file
diff --git a/internal/packages/archetype/_static/fields-base.yml.tmpl b/internal/packages/archetype/_static/fields-base.yml.tmpl
new file mode 100644
index 0000000000..4da5428ca9
--- /dev/null
+++ b/internal/packages/archetype/_static/fields-base.yml.tmpl
@@ -0,0 +1,12 @@
+- name: data_stream.type
+ type: constant_keyword
+ description: Data stream type.
+- name: data_stream.dataset
+ type: constant_keyword
+ description: Data stream dataset.
+- name: data_stream.namespace
+ type: constant_keyword
+ description: Data stream namespace.
+- name: '@timestamp'
+ type: date
+ description: Event timestamp.
\ No newline at end of file
diff --git a/internal/packages/archetype/_static/input-package-agent-config.yml.tmpl b/internal/packages/archetype/_static/input-package-agent-config.yml.tmpl
new file mode 100644
index 0000000000..c523a35c1a
--- /dev/null
+++ b/internal/packages/archetype/_static/input-package-agent-config.yml.tmpl
@@ -0,0 +1,16 @@
+data_stream:
+ dataset: {{ "{{data_stream.dataset}}" }}
+{{if eq .InputDataStreamType "logs"}}paths:
+{{ "{{#each paths as |path i|}}" }}
+ - {{"{{path}}"}}
+{{ "{{/each}}" }}
+exclude_files: [".gz$"]
+processors:
+ - add_locale: ~
+{{else}}metricsets: ["sample_metricset"]
+hosts:
+{{ "{{#each hosts}}" }}
+ - {{ "{{this}}" }}
+{{ "{{/each}}" }}
+period: {{ "{{period}}" }}
+{{end}}
diff --git a/internal/packages/archetype/_static/package-changelog.yml.tmpl b/internal/packages/archetype/_static/package-changelog.yml.tmpl
new file mode 100644
index 0000000000..3873ceddb1
--- /dev/null
+++ b/internal/packages/archetype/_static/package-changelog.yml.tmpl
@@ -0,0 +1,6 @@
+# newer versions go on top
+- version: "{{.Manifest.Version}}"
+ changes:
+ - description: Initial draft of the package
+ type: enhancement
+ link: https://github.com/elastic/integrations/pull/1 # FIXME Replace with the real PR link
\ No newline at end of file
diff --git a/internal/packages/archetype/package_docs_readme.go b/internal/packages/archetype/_static/package-docs-readme.md.tmpl
similarity index 76%
rename from internal/packages/archetype/package_docs_readme.go
rename to internal/packages/archetype/_static/package-docs-readme.md.tmpl
index be899a989a..003c89f703 100644
--- a/internal/packages/archetype/package_docs_readme.go
+++ b/internal/packages/archetype/_static/package-docs-readme.md.tmpl
@@ -1,10 +1,4 @@
-// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
-// or more contributor license agreements. Licensed under the Elastic License;
-// you may not use this file except in compliance with the Elastic License.
-
-package archetype
-
-const packageDocsReadme = `
+
# {{.Manifest.Title}}
@@ -57,12 +51,12 @@ For step-by-step instructions on how to set up an integration, see the
+The `{data stream name}` data stream provides events from {source} of the following types: {list types}. -->
@@ -76,15 +70,15 @@ An example event for ` + "`{data stream name}`" + ` looks as following:
+The `{data stream name}` data stream provides events from {source} of the following types: {list types}. -->
`
+{insert table} -->
diff --git a/internal/packages/archetype/package_manifest.go b/internal/packages/archetype/_static/package-manifest.yml.tmpl
similarity index 51%
rename from internal/packages/archetype/package_manifest.go
rename to internal/packages/archetype/_static/package-manifest.yml.tmpl
index 2095a8d09a..a786f6c538 100644
--- a/internal/packages/archetype/package_manifest.go
+++ b/internal/packages/archetype/_static/package-manifest.yml.tmpl
@@ -1,10 +1,4 @@
-// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
-// or more contributor license agreements. Licensed under the Elastic License;
-// you may not use this file except in compliance with the Elastic License.
-
-package archetype
-
-const packageManifestTemplate = `format_version: 2.8.0
+format_version: 2.10.0
name: {{.Manifest.Name}}
title: "{{.Manifest.Title}}"
version: {{.Manifest.Version}}
@@ -31,6 +25,7 @@ icons:
size: 32x32
type: image/svg+xml
policy_templates:
+{{- if eq .Manifest.Type "integration" }}
- name: sample
title: Sample logs
description: Collect sample logs
@@ -38,6 +33,42 @@ policy_templates:
- type: logfile
title: Collect sample logs from instances
description: Collecting sample logs
+{{ else -}}
+{{ if eq .InputDataStreamType "logs"}}
+ - name: sample
+ type: logs
+ title: Sample logs
+ description: Collect sample logs
+ input: logfile
+ template_path: input.yml.hbs
+ vars:
+ - name: paths
+ type: text
+ title: Paths
+ multi: true
+ default:
+ - /var/log/*.log
+{{ else }}
+ - name: sample
+ type: metrics
+ title: Sample metrics
+ description: Collect sample metrics
+ input: sample/metrics
+ template_path: input.yml.hbs
+ vars:
+ - name: period
+ type: text
+ title: Period
+ default: 10s
+ - name: hosts
+ type: text
+ title: Hosts
+ multi: true
+ required: true
+ show_user: true
+ default:
+ - localhost
+{{ end }}
+{{ end -}}
owner:
- github: {{.Manifest.Owner.Github}}
-`
+ github: {{.Manifest.Owner.Github}}
\ No newline at end of file
diff --git a/internal/packages/archetype/_static/sampleIcon.svg b/internal/packages/archetype/_static/sampleIcon.svg
new file mode 100644
index 0000000000..6268dd88f3
--- /dev/null
+++ b/internal/packages/archetype/_static/sampleIcon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/internal/packages/archetype/package_imgs.go b/internal/packages/archetype/_static/sampleScreenshot.png.b64
similarity index 90%
rename from internal/packages/archetype/package_imgs.go
rename to internal/packages/archetype/_static/sampleScreenshot.png.b64
index 1c4218cd53..169f71b283 100644
--- a/internal/packages/archetype/package_imgs.go
+++ b/internal/packages/archetype/_static/sampleScreenshot.png.b64
@@ -1,210 +1 @@
-// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
-// or more contributor license agreements. Licensed under the Elastic License;
-// you may not use this file except in compliance with the Elastic License.
-
-package archetype
-
-import (
- "strings"
-)
-
-var packageImgSampleIcon = []byte(``)
-
-// Screenshot: big Elastic logo (600x600 PNG)
-var packageImgSampleScreenshot = strings.ReplaceAll(`iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAYAAAC+ZpjcAAAACXBIWXMAAAsSAAALEgHS3X78AAAgAElEQVR4nO3de5BVZ5nv8RdoLuHSbAgQwrUDuQJKk1FhxIRONDpq
-LjgyVePUMYClE/8wAzkzseqcGQdykvFURWeEZP5xxgkQp45TJ3GERB3HlKbbGCcknqTbkAsqlybcAiRNN5dAA+HUs/tdzabTl7XXet613rXW91O1C6NxX9Zuev/28z7v
-8w46f/68AQAAgJ7BXEsAAABdBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABl
-BCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABl
-BCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABl
-BCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABl
-BCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlNVxQABhQvTGmZP+lOnvrTUPFf3fUGNPcx7/XbP93
-sdveAOTIoPPnz/N+Aii6Bhug6nv8OT/h69Jk/wwCWOMAQQ2ApwhYAIqkzoaoytvMjLz+FlvparbBq7IKBsAzBCwAedZgb/X2z7E5e62tFYGrkUoX4A8CFoA8aai4LSng
-O9teEbYIXECKCFgAsqzOBqqlOa1QxSWBa7O9NbKkCCSHgAUga+psoFqRQhN61m2pCFyELcAhAhaALCBU6SNsAQ4RsAD4bIUNVnfwLjm1qSJsAVBAwALgG9nxt9oGK3qq
-kiW7EjfaG8NPgRgIWAB8scLeirj7z0ebbNBqLPqFAKIgYAFIU8lWq1ZkaOBn0ciA03U2bAEIiYAFIA11NlStZhkwM1orghZN8cAACFgAkiTBaq0xZjlXPbPabdBaR9AC
-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
-7DLiUvsnPVsXa7cT9TfbPwlVADKJgAWkq94GreBWxL6tJhumGjlwGUBeELAAv1QGrvocVriCClUzgQpAnhGwAL+VKkJXvT2geH5G3rNWG6Qqbyz5ASgEAhaQTfUV/Vym
-4s+kp8u32GnpzT3+pDIFoNAIWEA+1dmbqaiC9SYIaoG+gtHuiupTEKgAAH0gYAEAACgbzAUFAADQRcACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsAC
-AABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsAC
-AABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsAC
-AABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsAC
-AABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsAC
-AABQRsACAADQZIz5/xqLeaCkczTBAAAAAElFTkSuQmCC`, "\n", "")
+iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAYAAAC+ZpjcAAAACXBIWXMAAAsSAAALEgHS3X78AAAgAElEQVR4nO3de5BVZ5nv8RdoLuHSbAgQwrUDuQJKk1FhxIRONDpqLjgyVePUMYClE/8wAzkzseqcGQdykvFURWeEZP5xxgkQp45TJ3GERB3HlKbbGCcknqTbkAsqlybcAiRNN5dAA+HUs/tdzabTl7XXet613rXW91O1C6NxX9Zuev/28z7v8w46f/68AQAAgJ7BXEsAAABdBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlBCwAAABlNVxQABhQvTGmZP+lOnvrTUPFf3fUGNPcx7/XbP93sdveAOTIoPPnz/N+Aii6Bhug6nv8OT/h69Jk/wwCWOMAQQ2ApwhYAIqkzoaoytvMjLz+FlvparbBq7IKBsAzBCwAedZgb/X2z7E5e62tFYGrkUoX4A8CFoA8aai4LSngO9teEbYIXECKCFgAsqzOBqqlOa1QxSWBa7O9NbKkCCSHgAUga+psoFqRQhN61m2pCFyELcAhAhaALCBU6SNsAQ4RsAD4bIUNVnfwLjm1qSJsAVBAwALgG9nxt9oGK3qqkiW7EjfaG8NPgRgIWAB8scLeirj7z0ebbNBqLPqFAKIgYAF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Jjsa9dhiqVJ5SnIqelhYbrBqL9sIBuEPAAi5osEHLiwGlcI4DmgE4M5hLC3RrtFPgV9oDfJFP7XZ3YB3hCoArVLCAvnlxriFU3WffUyaxA3CKgAX0L2iEX5HFHYcoa7fnBq6lgR1AUghYQHgr7Ic0QSsb2m21iooVgMQRsIDqrbC3JVw7L7XaULWRYAUgLQQsILoGG7SWcw290GRDFY3rAFJHwALiK9mgtZrlw8S120C1jv4qAD4hYAG6gqrWUnYfOrXFNq5TrQLgJQIW4EbJhqylRZ0Q70CLDVSbqVYB8B0BC3CPsBUdoQpAJhGwgGSV7DLiUvsnPVsXa7cT9TfbPwlVADKJgAWkq94GreBWxL6tJhumGjlwGUBeELAAv1QGrvocVriCClUzgQpAnhGwAL+VKkJXvT2geH5G3rNWG6Qqbyz5ASgEAhaQTfUV/Vym4s+kp8u32GnpzT3+pDIFoNAIWEA+1dmbqaiC9SYIaoG+gtHuiupTEKgAAH0gYAEAACgbzAUFAADQRcACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAABQRsACAADQZIz5/xqLeaCkczTBAAAAAElFTkSuQmCC
\ No newline at end of file
diff --git a/internal/packages/archetype/data_stream.go b/internal/packages/archetype/data_stream.go
index 8b36ff0295..b6b6c9434b 100644
--- a/internal/packages/archetype/data_stream.go
+++ b/internal/packages/archetype/data_stream.go
@@ -35,7 +35,7 @@ func CreateDataStream(dataStreamDescriptor DataStreamDescriptor) error {
}
logger.Debugf("Write base fields")
- err = renderResourceFile(dataStreamFieldsBaseTemplate, &dataStreamDescriptor, filepath.Join(dataStreamDir, "fields", "base-fields.yml"))
+ err = renderResourceFile(fieldsBaseTemplate, &dataStreamDescriptor, filepath.Join(dataStreamDir, "fields", "base-fields.yml"))
if err != nil {
return fmt.Errorf("can't render base fields: %w", err)
}
@@ -43,7 +43,7 @@ func CreateDataStream(dataStreamDescriptor DataStreamDescriptor) error {
logger.Debugf("Write agent stream")
err = renderResourceFile(dataStreamAgentStreamTemplate, &dataStreamDescriptor, filepath.Join(dataStreamDir, "agent", "stream", "stream.yml.hbs"))
if err != nil {
- return fmt.Errorf("can't render base fields: %w", err)
+ return fmt.Errorf("can't render agent stream: %w", err)
}
if dataStreamDescriptor.Manifest.Type == "logs" {
@@ -57,7 +57,7 @@ func CreateDataStream(dataStreamDescriptor DataStreamDescriptor) error {
logger.Debugf("Format the entire package")
err = formatter.Format(dataStreamDescriptor.PackageRoot, false)
if err != nil {
- return fmt.Errorf("can't format the new package: %w", err)
+ return fmt.Errorf("can't format the new data stream: %w", err)
}
fmt.Printf("New data stream has been created: %s\n", dataStreamDescriptor.Manifest.Name)
diff --git a/internal/packages/archetype/data_stream_agent_stream.go b/internal/packages/archetype/data_stream_agent_stream.go
deleted file mode 100644
index 69a80c0eaa..0000000000
--- a/internal/packages/archetype/data_stream_agent_stream.go
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
-// or more contributor license agreements. Licensed under the Elastic License;
-// you may not use this file except in compliance with the Elastic License.
-
-package archetype
-
-const dataStreamAgentStreamTemplate = `{{if eq .Manifest.Type "logs"}}paths:
-` + "{{`{{#each paths as |path i|}}`}}" + `
- - ` + "{{`{{path}}`}}" + `
-` + "{{`{{/each}}`}}" + `
-exclude_files: [".gz$"]
-processors:
- - add_locale: ~
-{{else}}metricsets: ["sample_metricset"]
-hosts:
-` + "{{`{{#each hosts}}`}}" + `
- - ` + "{{`{{this}}`}}" + `
-` + "{{`{{/each}}`}}" + `
-period: ` + "{{`{{period}}`}}" + `
-{{end}}`
diff --git a/internal/packages/archetype/data_stream_elasticsearch_ingest_pipeline.go b/internal/packages/archetype/data_stream_elasticsearch_ingest_pipeline.go
deleted file mode 100644
index 3904446b12..0000000000
--- a/internal/packages/archetype/data_stream_elasticsearch_ingest_pipeline.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
-// or more contributor license agreements. Licensed under the Elastic License;
-// you may not use this file except in compliance with the Elastic License.
-
-package archetype
-
-const dataStreamElasticsearchIngestPipelineTemplate = `---
-description: Pipeline for processing sample logs
-processors:
-- set:
- field: sample_field
- value: "1"
-on_failure:
-- set:
- field: error.message
- value: '` + "{{`{{ _ingest.on_failure_message }}`}}'"
diff --git a/internal/packages/archetype/data_stream_fields_base.go b/internal/packages/archetype/data_stream_fields_base.go
deleted file mode 100644
index 7db40ba25c..0000000000
--- a/internal/packages/archetype/data_stream_fields_base.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
-// or more contributor license agreements. Licensed under the Elastic License;
-// you may not use this file except in compliance with the Elastic License.
-
-package archetype
-
-const dataStreamFieldsBaseTemplate = `- name: data_stream.type
- type: constant_keyword
- description: Data stream type.
-- name: data_stream.dataset
- type: constant_keyword
- description: Data stream dataset.
-- name: data_stream.namespace
- type: constant_keyword
- description: Data stream namespace.
-- name: '@timestamp'
- type: date
- description: Event timestamp.
-`
diff --git a/internal/packages/archetype/data_stream_test.go b/internal/packages/archetype/data_stream_test.go
index b6dde6618c..fa27a8d70d 100644
--- a/internal/packages/archetype/data_stream_test.go
+++ b/internal/packages/archetype/data_stream_test.go
@@ -16,7 +16,7 @@ import (
func TestDataStream(t *testing.T) {
t.Run("valid-logs", func(t *testing.T) {
- pd := createPackageDescriptorForTest()
+ pd := createPackageDescriptorForTest("integration")
dd := createDataStreamDescriptorForTest()
dd.Manifest.Type = "logs"
@@ -24,7 +24,7 @@ func TestDataStream(t *testing.T) {
require.NoError(t, err)
})
t.Run("valid-metrics", func(t *testing.T) {
- pd := createPackageDescriptorForTest()
+ pd := createPackageDescriptorForTest("integration")
dd := createDataStreamDescriptorForTest()
dd.Manifest.Type = "metrics"
@@ -32,7 +32,7 @@ func TestDataStream(t *testing.T) {
require.NoError(t, err)
})
t.Run("missing-type", func(t *testing.T) {
- pd := createPackageDescriptorForTest()
+ pd := createPackageDescriptorForTest("integration")
dd := createDataStreamDescriptorForTest()
dd.Manifest.Type = ""
diff --git a/internal/packages/archetype/package.go b/internal/packages/archetype/package.go
index 9fae2255d7..d79c848333 100644
--- a/internal/packages/archetype/package.go
+++ b/internal/packages/archetype/package.go
@@ -18,6 +18,8 @@ import (
// PackageDescriptor defines configurable properties of the package archetype
type PackageDescriptor struct {
Manifest packages.PackageManifest
+
+ InputDataStreamType string
}
// CreatePackage function bootstraps the new package based on the provided descriptor.
@@ -70,6 +72,22 @@ func CreatePackage(packageDescriptor PackageDescriptor) error {
return fmt.Errorf("can't render sample screenshot: %w", err)
}
+ if packageDescriptor.Manifest.Type == "input" {
+ logger.Debugf("Write base fields")
+ err = renderResourceFile(fieldsBaseTemplate, &packageDescriptor, filepath.Join(baseDir, "fields", "base-fields.yml"))
+ if err != nil {
+ return fmt.Errorf("can't render base fields: %w", err)
+ }
+
+ // agent input configuration
+ logger.Debugf("Write agent input configuration")
+ err = renderResourceFile(inputAgentConfigTemplate, &packageDescriptor, filepath.Join(baseDir, "agent", "input", "input.yml.hbs"))
+ if err != nil {
+ return fmt.Errorf("can't render agent stream: %w", err)
+ }
+
+ }
+
logger.Debugf("Format the entire package")
err = formatter.Format(baseDir, false)
if err != nil {
diff --git a/internal/packages/archetype/package_changelog.go b/internal/packages/archetype/package_changelog.go
deleted file mode 100644
index ab849de83b..0000000000
--- a/internal/packages/archetype/package_changelog.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
-// or more contributor license agreements. Licensed under the Elastic License;
-// you may not use this file except in compliance with the Elastic License.
-
-package archetype
-
-const packageChangelogTemplate = `# newer versions go on top
-- version: "{{.Manifest.Version}}"
- changes:
- - description: Initial draft of the package
- type: enhancement
- link: https://github.com/elastic/integrations/pull/1 # FIXME Replace with the real PR link
-`
diff --git a/internal/packages/archetype/package_test.go b/internal/packages/archetype/package_test.go
index 4d5c6b4a7f..67cdcbddb8 100644
--- a/internal/packages/archetype/package_test.go
+++ b/internal/packages/archetype/package_test.go
@@ -19,15 +19,21 @@ import (
func TestPackage(t *testing.T) {
t.Run("valid", func(t *testing.T) {
- pd := createPackageDescriptorForTest()
+ pd := createPackageDescriptorForTest("integration")
err := createAndCheckPackage(t, pd)
require.NoError(t, err)
})
t.Run("missing-version", func(t *testing.T) {
- pd := createPackageDescriptorForTest()
+ pd := createPackageDescriptorForTest("integration")
pd.Manifest.Version = ""
+ err := createAndCheckPackage(t, pd)
+ require.Error(t, err)
+ })
+ t.Run("input-pacakge", func(t *testing.T) {
+ pd := createPackageDescriptorForTest("input")
+
err := createAndCheckPackage(t, pd)
require.Error(t, err)
})
@@ -53,12 +59,16 @@ func createAndCheckPackage(t require.TestingT, pd PackageDescriptor) error {
return err
}
-func createPackageDescriptorForTest() PackageDescriptor {
+func createPackageDescriptorForTest(packageType string) PackageDescriptor {
+ inputDataStreamType := ""
+ if packageType == "input" {
+ inputDataStreamType = "logs"
+ }
return PackageDescriptor{
Manifest: packages.PackageManifest{
Name: "go_unit_test_package",
Title: "Go Unit Test Package",
- Type: "integration",
+ Type: packageType,
Version: "1.2.3",
Conditions: packages.Conditions{
Kibana: packages.KibanaConditions{
@@ -75,6 +85,7 @@ func createPackageDescriptorForTest() PackageDescriptor {
License: "basic",
Categories: []string{"aws", "custom"},
},
+ InputDataStreamType: inputDataStreamType,
}
}
diff --git a/internal/packages/archetype/resources.go b/internal/packages/archetype/resources.go
new file mode 100644
index 0000000000..fa380dff4e
--- /dev/null
+++ b/internal/packages/archetype/resources.go
@@ -0,0 +1,47 @@
+// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+// or more contributor license agreements. Licensed under the Elastic License;
+// you may not use this file except in compliance with the Elastic License.
+
+package archetype
+
+import _ "embed"
+
+// Common Package Templates
+
+//go:embed _static/package-manifest.yml.tmpl
+var packageManifestTemplate string
+
+//go:embed _static/package-changelog.yml.tmpl
+var packageChangelogTemplate string
+
+//go:embed _static/package-docs-readme.md.tmpl
+var packageDocsReadme string
+
+//go:embed _static/fields-base.yml.tmpl
+var fieldsBaseTemplate string
+
+// Images (logo and screenshot)
+
+//go:embed _static/sampleIcon.svg
+var packageImgSampleIcon []byte
+
+// Screenshot: big Elastic logo (600x600 PNG)
+
+//go:embed _static/sampleScreenshot.png.b64
+var packageImgSampleScreenshot string
+
+// Input Package templates
+
+//go:embed _static/input-package-agent-config.yml.tmpl
+var inputAgentConfigTemplate string
+
+// Data Stream templates
+
+//go:embed _static/dataStream-agent-stream.yml.tmpl
+var dataStreamAgentStreamTemplate string
+
+//go:embed _static/dataStream-elasticsearch-ingest-pipeline.yml.tmpl
+var dataStreamElasticsearchIngestPipelineTemplate string
+
+//go:embed _static/dataStream-manifest.yml.tmpl
+var dataStreamManifestTemplate string