diff --git a/code/go/pkg/validator/validator_test.go b/code/go/pkg/validator/validator_test.go index c5e9f229..09eaba4d 100644 --- a/code/go/pkg/validator/validator_test.go +++ b/code/go/pkg/validator/validator_test.go @@ -43,6 +43,7 @@ func TestValidateFile(t *testing.T) { "ignored_malformed": {}, "custom_ilm_policy": {}, "profiling_symbolizer": {}, + "disabled_object_3_0_2": {}, "bad_additional_content": { "bad-bad", []string{ @@ -139,6 +140,8 @@ func TestValidateFile(t *testing.T) { `field "my_custom_date" of type keyword can't set date_format. date_format is allowed for date field type only`, `field 2: object_type is required`, `field 3.type: 3.type must be one of the following: "group", "nested"`, + `field 4.enabled: 4.enabled does not match: false`, + `field 5.enabled: 5.enabled does not match: true`, }, }, "deploy_custom_agent_invalid_property": { diff --git a/spec/changelog.yml b/spec/changelog.yml index 85bc90a9..3e8c302c 100644 --- a/spec/changelog.yml +++ b/spec/changelog.yml @@ -7,6 +7,9 @@ - description: Prepare for next version type: enhancement link: https://github.com/elastic/package-spec/pull/671 + - description: Do not require an object_type on objects with `enabled` set to `false` + type: bugfix + link: https://github.com/elastic/package-spec/issues/675 - version: 3.0.2 changes: - description: Add parquet files in terraform service deployer diff --git a/spec/integration/data_stream/fields/fields.spec.yml b/spec/integration/data_stream/fields/fields.spec.yml index 72159f44..b67f3f16 100644 --- a/spec/integration/data_stream/fields/fields.spec.yml +++ b/spec/integration/data_stream/fields/fields.spec.yml @@ -534,8 +534,20 @@ spec: required: - type then: - required: - - object_type + oneOf: + - required: + - object_type + properties: + enabled: + const: true + - properties: + enabled: + const: false + required: + - enabled + not: + required: + - object_type - if: properties: fields: @@ -554,6 +566,14 @@ spec: # JSON patches for newer versions should be placed on top versions: + - before: 3.0.3 + patch: + - op: remove + path: "/items/allOf/6/then/oneOf" + - op: add + path: "/items/allOf/6/then/required" + value: + - object_type - before: 3.0.0 patch: - op: remove diff --git a/test/packages/bad_fields/data_stream/foo/fields/fields.yml b/test/packages/bad_fields/data_stream/foo/fields/fields.yml index 69b9c7a4..b2a2daee 100644 --- a/test/packages/bad_fields/data_stream/foo/fields/fields.yml +++ b/test/packages/bad_fields/data_stream/foo/fields/fields.yml @@ -12,3 +12,10 @@ fields: - name: foo type: keyword +- name: enabled_object_without_object_type + type: object + enabled: true +- name: disabled_object_with_object_type + type: object + object_type: keyword + enabled: false diff --git a/test/packages/bad_fields/manifest.yml b/test/packages/bad_fields/manifest.yml index 030c2e1a..06636663 100644 --- a/test/packages/bad_fields/manifest.yml +++ b/test/packages/bad_fields/manifest.yml @@ -1,4 +1,4 @@ -format_version: 3.0.0 +format_version: 3.0.3 name: bad_fields title: "Bad Fields" version: 0.0.1 diff --git a/test/packages/disabled_object_3_0_2/LICENSE.txt b/test/packages/disabled_object_3_0_2/LICENSE.txt new file mode 100644 index 00000000..809108b8 --- /dev/null +++ b/test/packages/disabled_object_3_0_2/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/disabled_object_3_0_2/changelog.yml b/test/packages/disabled_object_3_0_2/changelog.yml new file mode 100644 index 00000000..bb0320a5 --- /dev/null +++ b/test/packages/disabled_object_3_0_2/changelog.yml @@ -0,0 +1,6 @@ +# newer versions go on top +- version: "0.0.1" + 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/disabled_object_3_0_2/data_stream/objects/agent/stream/stream.yml.hbs b/test/packages/disabled_object_3_0_2/data_stream/objects/agent/stream/stream.yml.hbs new file mode 100644 index 00000000..5845510d --- /dev/null +++ b/test/packages/disabled_object_3_0_2/data_stream/objects/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/disabled_object_3_0_2/data_stream/objects/elasticsearch/ingest_pipeline/default.yml b/test/packages/disabled_object_3_0_2/data_stream/objects/elasticsearch/ingest_pipeline/default.yml new file mode 100644 index 00000000..1a308fde --- /dev/null +++ b/test/packages/disabled_object_3_0_2/data_stream/objects/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/disabled_object_3_0_2/data_stream/objects/fields/base-fields.yml b/test/packages/disabled_object_3_0_2/data_stream/objects/fields/base-fields.yml new file mode 100644 index 00000000..7c798f45 --- /dev/null +++ b/test/packages/disabled_object_3_0_2/data_stream/objects/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/disabled_object_3_0_2/data_stream/objects/fields/fields.yml b/test/packages/disabled_object_3_0_2/data_stream/objects/fields/fields.yml new file mode 100644 index 00000000..b523e755 --- /dev/null +++ b/test/packages/disabled_object_3_0_2/data_stream/objects/fields/fields.yml @@ -0,0 +1,4 @@ +- name: user_provided_metadata + type: object + object_type: keyword # This should not be allowed, but was in 3.0.2. + enabled: false diff --git a/test/packages/disabled_object_3_0_2/data_stream/objects/manifest.yml b/test/packages/disabled_object_3_0_2/data_stream/objects/manifest.yml new file mode 100644 index 00000000..b53a87a1 --- /dev/null +++ b/test/packages/disabled_object_3_0_2/data_stream/objects/manifest.yml @@ -0,0 +1,13 @@ +title: "Data stream with some objects" +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/disabled_object_3_0_2/docs/README.md b/test/packages/disabled_object_3_0_2/docs/README.md new file mode 100644 index 00000000..12318cae --- /dev/null +++ b/test/packages/disabled_object_3_0_2/docs/README.md @@ -0,0 +1,84 @@ + + + +# Disabled Object in 3.0.2 + + + +## 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/disabled_object_3_0_2/img/sample-logo.svg b/test/packages/disabled_object_3_0_2/img/sample-logo.svg new file mode 100644 index 00000000..6268dd88 --- /dev/null +++ b/test/packages/disabled_object_3_0_2/img/sample-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/packages/disabled_object_3_0_2/img/sample-screenshot.png b/test/packages/disabled_object_3_0_2/img/sample-screenshot.png new file mode 100644 index 00000000..d7a56a3e Binary files /dev/null and b/test/packages/disabled_object_3_0_2/img/sample-screenshot.png differ diff --git a/test/packages/disabled_object_3_0_2/manifest.yml b/test/packages/disabled_object_3_0_2/manifest.yml new file mode 100644 index 00000000..dbe80109 --- /dev/null +++ b/test/packages/disabled_object_3_0_2/manifest.yml @@ -0,0 +1,36 @@ +format_version: 3.0.2 +name: disabled_object_3_0_2 +title: "Disabled Object in 3.0.2" +version: 0.0.1 +source: + license: "Elastic-2.0" +description: "This is a package to test a corner case that we disallowed in 3.0.3, where an object could have enabled false and an object_type" +type: integration +categories: + - custom +conditions: + kibana: + version: "^8.10.1" + 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 diff --git a/test/packages/good_v3/elasticsearch/transform/metadata_united/fields/fields.yml b/test/packages/good_v3/elasticsearch/transform/metadata_united/fields/fields.yml index c54d2ff3..32b4c99b 100644 --- a/test/packages/good_v3/elasticsearch/transform/metadata_united/fields/fields.yml +++ b/test/packages/good_v3/elasticsearch/transform/metadata_united/fields/fields.yml @@ -356,5 +356,8 @@ type: date - name: user_provided_metadata type: object - object_type: keyword enabled: false + - name: other_provided_metadata + type: object + object_type: keyword + enabled: true diff --git a/test/packages/good_v3/manifest.yml b/test/packages/good_v3/manifest.yml index 1e33ff45..cab49370 100644 --- a/test/packages/good_v3/manifest.yml +++ b/test/packages/good_v3/manifest.yml @@ -1,4 +1,4 @@ -format_version: 3.0.2 +format_version: 3.0.3 name: good_v3 title: Good package description: This package is good for format version 3