diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/8.8/index.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/8.8/index.ts index fb90230f64f6f..3f6d2df5192fe 100644 --- a/x-pack/plugins/alerting/server/saved_objects/migrations/8.8/index.ts +++ b/x-pack/plugins/alerting/server/saved_objects/migrations/8.8/index.ts @@ -8,7 +8,7 @@ import { SavedObjectUnsanitizedDoc } from '@kbn/core-saved-objects-server'; import { EncryptedSavedObjectsPluginSetup } from '@kbn/encrypted-saved-objects-plugin/server'; import { v4 as uuidv4 } from 'uuid'; -import { createEsoMigration, pipeMigrations } from '../utils'; +import { createEsoMigration, isDetectionEngineAADRuleType, pipeMigrations } from '../utils'; import { RawRule } from '../../../types'; function addRevision(doc: SavedObjectUnsanitizedDoc): SavedObjectUnsanitizedDoc { @@ -16,7 +16,7 @@ function addRevision(doc: SavedObjectUnsanitizedDoc): SavedObjectUnsani ...doc, attributes: { ...doc.attributes, - revision: 0, + revision: isDetectionEngineAADRuleType(doc) ? (doc.attributes.params.version as number) : 0, }, }; } diff --git a/x-pack/plugins/alerting/server/saved_objects/migrations/index.test.ts b/x-pack/plugins/alerting/server/saved_objects/migrations/index.test.ts index aba9b085f70dc..2cd4eb0d05216 100644 --- a/x-pack/plugins/alerting/server/saved_objects/migrations/index.test.ts +++ b/x-pack/plugins/alerting/server/saved_objects/migrations/index.test.ts @@ -2660,6 +2660,14 @@ describe('successful migrations', () => { const migratedAlert880 = migration880(rule, migrationContext); expect(migratedAlert880.attributes.revision).toEqual(0); }); + + test('migrates security rule version to revision', () => { + const migration880 = getMigrations(encryptedSavedObjectsSetup, {}, isPreconfigured)['8.8.0']; + + const rule = getMockData({ alertTypeId: ruleTypeMappings.eql, params: { version: 2 } }); + const migratedAlert880 = migration880(rule, migrationContext); + expect(migratedAlert880.attributes.revision).toEqual(2); + }); }); describe('Metrics Inventory Threshold rule', () => { diff --git a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/crud/update_rules.ts b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/crud/update_rules.ts index 625204efbe4f6..d949fd63136ea 100644 --- a/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/crud/update_rules.ts +++ b/x-pack/plugins/security_solution/server/lib/detection_engine/rule_management/logic/crud/update_rules.ts @@ -66,12 +66,7 @@ export const updateRules = async ({ references: ruleUpdate.references ?? [], namespace: ruleUpdate.namespace, note: ruleUpdate.note, - // Always use the version from the request if specified. If it isn't specified, leave immutable rules alone and - // increment the version of mutable rules by 1. - version: - ruleUpdate.version ?? existingRule.params.immutable - ? existingRule.params.version - : existingRule.params.version + 1, + version: ruleUpdate.version ?? existingRule.params.version, exceptionsList: ruleUpdate.exceptions_list ?? [], ...typeSpecificParams, }, diff --git a/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/patch_rules.ts b/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/patch_rules.ts index e8df71ca61a4c..f38a02bdce930 100644 --- a/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/patch_rules.ts +++ b/x-pack/test/detection_engine_api_integration/security_and_spaces/group10/patch_rules.ts @@ -70,10 +70,6 @@ export default ({ getService }: FtrProviderContext) => { .expect(200); const outputRule = getSimpleMlRuleOutput(); - outputRule.version = 2; - // TODO: Followup to #147398 - // NOTE: Once we remove `version` increment, revision will not be updated as `machine_learning_job_id` value doesn't actually change - outputRule.revision = 1; const bodyToCompare = removeServerGeneratedProperties(body); expect(bodyToCompare).to.eql(outputRule); });