diff --git a/packages/kbn-check-saved-objects-cli/current_fields.json b/packages/kbn-check-saved-objects-cli/current_fields.json index c7f4ddc956026..cbb4617b71d03 100644 --- a/packages/kbn-check-saved-objects-cli/current_fields.json +++ b/packages/kbn-check-saved-objects-cli/current_fields.json @@ -86,6 +86,11 @@ "updatedAt", "updatedBy" ], + "alerting_rule_template": [ + "name", + "ruleTypeId", + "tags" + ], "api_key_pending_invalidation": [ "apiKeyId", "createdAt" diff --git a/packages/kbn-check-saved-objects-cli/current_mappings.json b/packages/kbn-check-saved-objects-cli/current_mappings.json index 3029f54f11c4a..ccf9571637f35 100644 --- a/packages/kbn-check-saved-objects-cli/current_mappings.json +++ b/packages/kbn-check-saved-objects-cli/current_mappings.json @@ -289,6 +289,26 @@ } } }, + "alerting_rule_template": { + "dynamic": false, + "properties": { + "name": { + "fields": { + "keyword": { + "normalizer": "lowercase", + "type": "keyword" + } + }, + "type": "text" + }, + "ruleTypeId": { + "type": "keyword" + }, + "tags": { + "type": "keyword" + } + } + }, "api_key_pending_invalidation": { "properties": { "apiKeyId": { diff --git a/src/core/packages/saved-objects/server-internal/src/object_types/index.ts b/src/core/packages/saved-objects/server-internal/src/object_types/index.ts index 1e7f1aef4002f..a710eb103adb0 100644 --- a/src/core/packages/saved-objects/server-internal/src/object_types/index.ts +++ b/src/core/packages/saved-objects/server-internal/src/object_types/index.ts @@ -11,4 +11,4 @@ export { registerCoreObjectTypes } from './registration'; // set minimum number of registered saved objects to ensure no object types are removed after 8.8 // declared in internal implementation explicitly to prevent unintended changes. -export const SAVED_OBJECT_TYPES_COUNT = 135 as const; +export const SAVED_OBJECT_TYPES_COUNT = 136 as const; diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index dd56b8fd93927..28845862ea661 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -65,6 +65,7 @@ describe('checking migration metadata changes on all registered SO types', () => "action_task_params": "cd91a48515202852ebf1fed0d999cd96f6b2823e", "ad_hoc_run_params": "690b8991f48c73a04e6a8cf41fd4967a42f8e552", "alert": "581f322afd6784aebdb80f872b825a928533d364", + "alerting_rule_template": "409b303ab6441623caabedd9118922670e431dd9", "api_key_pending_invalidation": "cef0693ec88475a0e1f43614cfa6ca43c24d0338", "apm-custom-dashboards": "9b08d5d5222131c6981a70144b1d61648757a613", "apm-indices": "b844821e9675768b1cb78f6d91ff336ed09d4739", @@ -284,6 +285,11 @@ describe('checking migration metadata changes on all registered SO types', () => "alert|warning: This type uses 'migrations:' WRAPPER functions that prevent detecting changes in the implementation.", "alert|warning: The SO type owner should ensure these transform functions DO NOT mutate after they are defined.", "==============================================================================================================", + "alerting_rule_template|global: a8ee387a4bc794ff6450017a92742b39b79e0446", + "alerting_rule_template|mappings: 6556e5b0800a79f7a18c17736ac3e795f262c23b", + "alerting_rule_template|schemas: da39a3ee5e6b4b0d3255bfef95601890afd80709", + "alerting_rule_template|10.1.0: f68ee2bf06bce643c5d9ff273d105cee963d5d8c", + "=======================================================================", "api_key_pending_invalidation|global: 95b04002ba51622fd4512312dc80f09c2176999c", "api_key_pending_invalidation|mappings: 6690f4f2a071feda5eec8353cdb23c0f1624910a", "api_key_pending_invalidation|schemas: da39a3ee5e6b4b0d3255bfef95601890afd80709", @@ -1222,6 +1228,7 @@ describe('checking migration metadata changes on all registered SO types', () => "action_task_params": "10.2.0", "ad_hoc_run_params": "10.2.0", "alert": "10.6.0", + "alerting_rule_template": "10.1.0", "api_key_pending_invalidation": "10.1.0", "apm-custom-dashboards": "10.1.0", "apm-indices": "10.1.0", @@ -1367,6 +1374,7 @@ describe('checking migration metadata changes on all registered SO types', () => "action_task_params": "10.2.0", "ad_hoc_run_params": "10.2.0", "alert": "10.6.0", + "alerting_rule_template": "10.1.0", "api_key_pending_invalidation": "10.1.0", "apm-custom-dashboards": "10.1.0", "apm-indices": "10.1.0", diff --git a/src/core/server/integration_tests/saved_objects/registration/type_registrations.test.ts b/src/core/server/integration_tests/saved_objects/registration/type_registrations.test.ts index ecde144e9883d..301064ca10094 100644 --- a/src/core/server/integration_tests/saved_objects/registration/type_registrations.test.ts +++ b/src/core/server/integration_tests/saved_objects/registration/type_registrations.test.ts @@ -16,6 +16,7 @@ const previouslyRegisteredTypes = [ 'action_task_params', 'ad_hoc_run_params', 'alert', + 'alerting_rule_template', 'api_key_pending_invalidation', 'apm-custom-dashboards', 'apm-indices', diff --git a/x-pack/platform/plugins/shared/alerting/server/saved_objects/index.ts b/x-pack/platform/plugins/shared/alerting/server/saved_objects/index.ts index 4bf7fc09dd040..178ab89ce16ef 100644 --- a/x-pack/platform/plugins/shared/alerting/server/saved_objects/index.ts +++ b/x-pack/platform/plugins/shared/alerting/server/saved_objects/index.ts @@ -16,10 +16,11 @@ import type { MigrateFunctionsObject } from '@kbn/kibana-utils-plugin/common'; import { ALERTING_CASES_SAVED_OBJECT_INDEX } from '@kbn/core-saved-objects-server'; import { alertMappings } from '../../common/saved_objects/rules/mappings'; import { rulesSettingsMappings } from './rules_settings_mappings'; +import { ruleTemplateMappings } from './rule_template_mappings'; import { maintenanceWindowMappings } from './maintenance_window_mapping'; import { getMigrations } from './migrations'; import { transformRulesForExport } from './transform_rule_for_export'; -import type { RawRule } from '../types'; +import type { RawRule, RawRuleTemplate } from '../types'; import { getImportWarnings } from './get_import_warnings'; import { isRuleExportable } from './is_rule_exportable'; import type { RuleTypeRegistry } from '../rule_type_registry'; @@ -33,10 +34,12 @@ import { apiKeyPendingInvalidationModelVersions, maintenanceWindowModelVersions, ruleModelVersions, + ruleTemplateModelVersions, rulesSettingsModelVersions, } from './model_versions'; export const RULE_SAVED_OBJECT_TYPE = 'alert'; +export const RULE_TEMPLATE_SAVED_OBJECT_TYPE = 'alerting_rule_template'; export const AD_HOC_RUN_SAVED_OBJECT_TYPE = 'ad_hoc_run_params'; export const API_KEY_PENDING_INVALIDATION_TYPE = 'api_key_pending_invalidation'; @@ -211,6 +214,21 @@ export function setupSavedObjects( modelVersions: adHocRunParamsModelVersions, }); + savedObjects.registerType({ + name: RULE_TEMPLATE_SAVED_OBJECT_TYPE, + indexPattern: ALERTING_CASES_SAVED_OBJECT_INDEX, + hidden: true, + namespaceType: 'multiple-isolated', + management: { + importableAndExportable: true, + getTitle(ruleTemplateSavedObject: SavedObject) { + return `${ruleTemplateSavedObject.attributes.name}`; + }, + }, + mappings: ruleTemplateMappings, + modelVersions: ruleTemplateModelVersions, + }); + // Encrypted attributes encryptedSavedObjects.registerType({ type: RULE_SAVED_OBJECT_TYPE, diff --git a/x-pack/platform/plugins/shared/alerting/server/saved_objects/model_versions/index.ts b/x-pack/platform/plugins/shared/alerting/server/saved_objects/model_versions/index.ts index 5c9a33b3b1714..ea329155ddacc 100644 --- a/x-pack/platform/plugins/shared/alerting/server/saved_objects/model_versions/index.ts +++ b/x-pack/platform/plugins/shared/alerting/server/saved_objects/model_versions/index.ts @@ -9,4 +9,5 @@ export { adHocRunParamsModelVersions } from './ad_hoc_run_params_model_versions' export { apiKeyPendingInvalidationModelVersions } from './api_key_pending_invalidation_model_versions'; export { maintenanceWindowModelVersions } from './maintenance_window_model_versions'; export { ruleModelVersions } from './rule_model_versions'; +export { ruleTemplateModelVersions } from './rule_template_model_versions'; export { rulesSettingsModelVersions } from './rules_settings_model_versions'; diff --git a/x-pack/platform/plugins/shared/alerting/server/saved_objects/model_versions/rule_template_model_versions.ts b/x-pack/platform/plugins/shared/alerting/server/saved_objects/model_versions/rule_template_model_versions.ts new file mode 100644 index 0000000000000..892be2131eb3a --- /dev/null +++ b/x-pack/platform/plugins/shared/alerting/server/saved_objects/model_versions/rule_template_model_versions.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { SavedObjectsModelVersionMap } from '@kbn/core-saved-objects-server'; +import { rawRuleTemplateSchemaV1 } from '../schemas/raw_rule_template'; + +export const ruleTemplateModelVersions: SavedObjectsModelVersionMap = { + '1': { + changes: [], + schemas: { + forwardCompatibility: rawRuleTemplateSchemaV1.extends({}, { unknowns: 'ignore' }), + create: rawRuleTemplateSchemaV1, + }, + }, +}; diff --git a/x-pack/platform/plugins/shared/alerting/server/saved_objects/rule_template_mappings.ts b/x-pack/platform/plugins/shared/alerting/server/saved_objects/rule_template_mappings.ts new file mode 100644 index 0000000000000..a4f80b1b37735 --- /dev/null +++ b/x-pack/platform/plugins/shared/alerting/server/saved_objects/rule_template_mappings.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { SavedObjectsTypeMappingDefinition } from '@kbn/core/server'; + +export const ruleTemplateMappings: SavedObjectsTypeMappingDefinition = { + dynamic: false, + properties: { + name: { + type: 'text', + fields: { + keyword: { + type: 'keyword', + normalizer: 'lowercase', + }, + }, + }, + ruleTypeId: { + type: 'keyword', + }, + tags: { + type: 'keyword', + }, + }, +}; diff --git a/x-pack/platform/plugins/shared/alerting/server/saved_objects/schemas/raw_rule_template/index.ts b/x-pack/platform/plugins/shared/alerting/server/saved_objects/schemas/raw_rule_template/index.ts new file mode 100644 index 0000000000000..430b882f20221 --- /dev/null +++ b/x-pack/platform/plugins/shared/alerting/server/saved_objects/schemas/raw_rule_template/index.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { TypeOf } from '@kbn/config-schema'; + +import { rawRuleTemplateSchema } from './v1'; + +export { rawRuleTemplateSchema as rawRuleTemplateSchemaV1 }; +export type RawRuleTemplate = TypeOf; diff --git a/x-pack/platform/plugins/shared/alerting/server/saved_objects/schemas/raw_rule_template/v1.ts b/x-pack/platform/plugins/shared/alerting/server/saved_objects/schemas/raw_rule_template/v1.ts new file mode 100644 index 0000000000000..566910107542e --- /dev/null +++ b/x-pack/platform/plugins/shared/alerting/server/saved_objects/schemas/raw_rule_template/v1.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; + +import { rawRuleSchema } from '../raw_rule/v6'; + +export const rawRuleTemplateSchema = schema.object({ + name: rawRuleSchema.getPropSchemas().name, + tags: rawRuleSchema.getPropSchemas().tags, + ruleTypeId: rawRuleSchema.getPropSchemas().alertTypeId, + schedule: rawRuleSchema.getPropSchemas().schedule, + flapping: rawRuleSchema.getPropSchemas().flapping, + alertDelay: rawRuleSchema.getPropSchemas().alertDelay, + params: rawRuleSchema.getPropSchemas().params, +}); diff --git a/x-pack/platform/plugins/shared/alerting/server/types.ts b/x-pack/platform/plugins/shared/alerting/server/types.ts index d32e1aab4ed53..d68d9d69173c8 100644 --- a/x-pack/platform/plugins/shared/alerting/server/types.ts +++ b/x-pack/platform/plugins/shared/alerting/server/types.ts @@ -460,4 +460,6 @@ export type { RawRuleMonitoring, } from './saved_objects/schemas/raw_rule'; +export type { RawRuleTemplate } from './saved_objects/schemas/raw_rule_template'; + export type { DataStreamAdapter } from './alerts_service/lib/data_stream_adapter';