diff --git a/code/go/pkg/validator/validator_test.go b/code/go/pkg/validator/validator_test.go index d661f42ce..f1b9b1be9 100644 --- a/code/go/pkg/validator/validator_test.go +++ b/code/go/pkg/validator/validator_test.go @@ -660,6 +660,25 @@ func TestValidateRoutingRules(t *testing.T) { } } +func TestValidateForbiddenDataStreamName(t *testing.T) { + testPackagesPath := path.Join("..", "..", "..", "..", "test", "packages") + pkgPath := path.Join(testPackagesPath, "bad_data_stream_name") + err := ValidateFromPath(pkgPath) + require.Error(t, err) + + expectedErrorMessages := []string{ + fmt.Sprintf(`item [integration] is not allowed in folder [%s]`, path.Join(pkgPath, "data_stream")), + } + errs, ok := err.(specerrors.ValidationErrors) + require.True(t, ok) + assert.Len(t, errs, len(expectedErrorMessages)) + + for _, foundError := range errs { + assert.Contains(t, expectedErrorMessages, foundError.Error()) + } + +} + func requireErrorMessage(t *testing.T, pkgName string, invalidItemsPerFolder map[string][]string, expectedErrorMessage string) { pkgRootPath := filepath.Join("..", "..", "..", "..", "test", "packages", pkgName) diff --git a/spec/changelog.yml b/spec/changelog.yml index e198c2be1..f9f6d889b 100644 --- a/spec/changelog.yml +++ b/spec/changelog.yml @@ -12,6 +12,9 @@ - description: Prepare for next version type: enhancement link: https://github.com/elastic/package-spec/pull/697 + - description: Disallow to use 'integration' as data stream name + type: breaking-change + link: https://github.com/elastic/package-spec/pull/704 - version: 3.0.4 changes: - description: Fix validation of empty arrays in YAML files diff --git a/spec/integration/data_stream/spec.yml b/spec/integration/data_stream/spec.yml index 61cc84106..cd0c7a023 100644 --- a/spec/integration/data_stream/spec.yml +++ b/spec/integration/data_stream/spec.yml @@ -5,6 +5,9 @@ spec: - description: Folder containing a single data stream definition type: folder pattern: '^([a-z0-9]{2}|[a-z0-9][a-z0-9_]+[a-z0-9])$' + forbiddenPatterns: + # Avoid collision with ingest pipeline created by fleet, see https://github.com/elastic/package-spec/issues/699 + - '^integration$' required: true additionalContents: false contents: diff --git a/test/packages/bad_data_stream_name/LICENSE.txt b/test/packages/bad_data_stream_name/LICENSE.txt new file mode 100644 index 000000000..809108b85 --- /dev/null +++ b/test/packages/bad_data_stream_name/LICENSE.txt @@ -0,0 +1,93 @@ +Elastic License 2.0 + +URL: https://www.elastic.co/licensing/elastic-license + +## Acceptance + +By using the software, you agree to all of the terms and conditions below. + +## Copyright License + +The licensor grants you a non-exclusive, royalty-free, worldwide, +non-sublicensable, non-transferable license to use, copy, distribute, make +available, and prepare derivative works of the software, in each case subject to +the limitations and conditions below. + +## Limitations + +You may not provide the software to third parties as a hosted or managed +service, where the service provides users with access to any substantial set of +the features or functionality of the software. + +You may not move, change, disable, or circumvent the license key functionality +in the software, and you may not remove or obscure any functionality in the +software that is protected by the license key. + +You may not alter, remove, or obscure any licensing, copyright, or other notices +of the licensor in the software. Any use of the licensor’s trademarks is subject +to applicable law. + +## Patents + +The licensor grants you a license, under any patent claims the licensor can +license, or becomes able to license, to make, have made, use, sell, offer for +sale, import and have imported the software, in each case subject to the +limitations and conditions in this license. This license does not cover any +patent claims that you cause to be infringed by modifications or additions to +the software. If you or your company make any written claim that the software +infringes or contributes to infringement of any patent, your patent license for +the software granted under these terms ends immediately. If your company makes +such a claim, your patent license ends immediately for work on behalf of your +company. + +## Notices + +You must ensure that anyone who gets a copy of any part of the software from you +also gets a copy of these terms. + +If you modify the software, you must include in any modified copies of the +software prominent notices stating that you have modified the software. + +## No Other Rights + +These terms do not imply any licenses other than those expressly granted in +these terms. + +## Termination + +If you use the software in violation of these terms, such use is not licensed, +and your licenses will automatically terminate. If the licensor provides you +with a notice of your violation, and you cease all violation of this license no +later than 30 days after you receive that notice, your licenses will be +reinstated retroactively. However, if you violate these terms after such +reinstatement, any additional violation of these terms will cause your licenses +to terminate automatically and permanently. + +## No Liability + +*As far as the law allows, the software comes as is, without any warranty or +condition, and the licensor will not be liable to you for any damages arising +out of these terms or the use or nature of the software, under any kind of +legal claim.* + +## Definitions + +The **licensor** is the entity offering these terms, and the **software** is the +software the licensor makes available under these terms, including any portion +of it. + +**you** refers to the individual or entity agreeing to these terms. + +**your company** is any legal entity, sole proprietorship, or other kind of +organization that you work for, plus all organizations that have control over, +are under the control of, or are under common control with that +organization. **control** means ownership of substantially all the assets of an +entity, or the power to direct its management and policies by vote, contract, or +otherwise. Control can be direct or indirect. + +**your licenses** are all the licenses granted to you for the software under +these terms. + +**use** means anything you do with the software requiring one of your licenses. + +**trademark** means trademarks, service marks, and similar rights. diff --git a/test/packages/bad_data_stream_name/changelog.yml b/test/packages/bad_data_stream_name/changelog.yml new file mode 100644 index 000000000..07249aada --- /dev/null +++ b/test/packages/bad_data_stream_name/changelog.yml @@ -0,0 +1,6 @@ +# newer versions go on top +- version: "1.0.0" + 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/test/packages/bad_data_stream_name/data_stream/integration/agent/stream/stream.yml.hbs b/test/packages/bad_data_stream_name/data_stream/integration/agent/stream/stream.yml.hbs new file mode 100644 index 000000000..5845510de --- /dev/null +++ b/test/packages/bad_data_stream_name/data_stream/integration/agent/stream/stream.yml.hbs @@ -0,0 +1,7 @@ +paths: +{{#each paths as |path i|}} + - {{path}} +{{/each}} +exclude_files: [".gz$"] +processors: + - add_locale: ~ diff --git a/test/packages/bad_data_stream_name/data_stream/integration/elasticsearch/ingest_pipeline/default.yml b/test/packages/bad_data_stream_name/data_stream/integration/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 000000000..1a308fded --- /dev/null +++ b/test/packages/bad_data_stream_name/data_stream/integration/elasticsearch/ingest_pipeline/default.yml @@ -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/test/packages/bad_data_stream_name/data_stream/integration/fields/base-fields.yml b/test/packages/bad_data_stream_name/data_stream/integration/fields/base-fields.yml new file mode 100644 index 000000000..7c798f453 --- /dev/null +++ b/test/packages/bad_data_stream_name/data_stream/integration/fields/base-fields.yml @@ -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. diff --git a/test/packages/bad_data_stream_name/data_stream/integration/manifest.yml b/test/packages/bad_data_stream_name/data_stream/integration/manifest.yml new file mode 100644 index 000000000..8234459e5 --- /dev/null +++ b/test/packages/bad_data_stream_name/data_stream/integration/manifest.yml @@ -0,0 +1,13 @@ +title: "Data stream with forbidden name" +type: logs +streams: + - input: logfile + title: Sample logs + description: Collect sample logs + vars: + - name: paths + type: text + title: Paths + multi: true + default: + - /var/log/*.log diff --git a/test/packages/bad_data_stream_name/docs/README.md b/test/packages/bad_data_stream_name/docs/README.md new file mode 100644 index 000000000..790a86b25 --- /dev/null +++ b/test/packages/bad_data_stream_name/docs/README.md @@ -0,0 +1,84 @@ + + + +# Bad Data Stream Name + + + +## Data streams + + + + + + + + + + + +## Requirements + +You need Elasticsearch for storing and searching your data and Kibana for visualizing and managing it. +You can use our hosted Elasticsearch Service on Elastic Cloud, which is recommended, or self-manage the Elastic Stack on your own hardware. + + + +## Setup + + + +For step-by-step instructions on how to set up an integration, see the +[Getting started](https://www.elastic.co/guide/en/welcome-to-elastic/current/getting-started-observability.html) guide. + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/packages/bad_data_stream_name/img/sample-logo.svg b/test/packages/bad_data_stream_name/img/sample-logo.svg new file mode 100644 index 000000000..6268dd88f --- /dev/null +++ b/test/packages/bad_data_stream_name/img/sample-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/packages/bad_data_stream_name/img/sample-screenshot.png b/test/packages/bad_data_stream_name/img/sample-screenshot.png new file mode 100644 index 000000000..d7a56a3ec Binary files /dev/null and b/test/packages/bad_data_stream_name/img/sample-screenshot.png differ diff --git a/test/packages/bad_data_stream_name/manifest.yml b/test/packages/bad_data_stream_name/manifest.yml new file mode 100644 index 000000000..337f789d9 --- /dev/null +++ b/test/packages/bad_data_stream_name/manifest.yml @@ -0,0 +1,36 @@ +format_version: 3.0.4 +name: bad_data_stream_name +title: "Bad Data Stream Name" +version: 1.0.0 +source: + license: "Elastic-2.0" +description: "This package has a forbidden data stream name." +type: integration +categories: + - custom +conditions: + kibana: + version: "^8.11.4" + elastic: + subscription: "basic" +screenshots: + - src: /img/sample-screenshot.png + title: Sample screenshot + size: 600x600 + type: image/png +icons: + - src: /img/sample-logo.svg + title: Sample logo + size: 32x32 + type: image/svg+xml +policy_templates: + - name: sample + title: Sample logs + description: Collect sample logs + inputs: + - type: logfile + title: Collect sample logs from instances + description: Collecting sample logs +owner: + github: elastic/ecosystem + type: elastic