[ZDT] set switchToModelVersionAt to 8.10.0 for all types (#158267)

## Summary

Sets `switchToModelVersionAt` to `8.10.0` for all registered SO types,
forcing them to switch to the model version API once `main` is on
version `8.10.0` (~end of june)
This commit is contained in:
Pierre Gayvallet 2023-05-24 03:11:28 -04:00 committed by GitHub
parent 7bbdab0653
commit acdadf2b46
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 246 additions and 102 deletions

View file

@ -44,6 +44,7 @@ export type {
export { parseObjectKey, getObjectKey, getIndexForType } from './src/utils';
export {
modelVersionVirtualMajor,
globalSwitchToModelVersionAt,
assertValidModelVersion,
isVirtualModelVersion,
virtualVersionToModelVersion,

View file

@ -10,3 +10,8 @@
* The major version that is used to represent model versions.
*/
export const modelVersionVirtualMajor = 10;
/**
* The stack version where all types will be forced to switch to using the model version system.
*/
export const globalSwitchToModelVersionAt = '8.10.0';

View file

@ -6,7 +6,7 @@
* Side Public License, v 1.
*/
export { modelVersionVirtualMajor } from './constants';
export { modelVersionVirtualMajor, globalSwitchToModelVersionAt } from './constants';
export {
assertValidModelVersion,
isVirtualModelVersion,

View file

@ -0,0 +1,61 @@
/*
* 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 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
import type { SavedObjectsType } from '@kbn/core-saved-objects-server';
import { globalSwitchToModelVersionAt } from '@kbn/core-saved-objects-base-server-internal';
import { applyTypeDefaults } from './apply_type_defaults';
const createType = (parts: Partial<SavedObjectsType> = {}): SavedObjectsType => ({
name: 'test',
namespaceType: 'single',
hidden: false,
mappings: { properties: {} },
...parts,
});
describe('applyTypeDefaults', () => {
describe('switchToModelVersionAt', () => {
it(`keeps the type's switchToModelVersionAt if lesser than the global version`, () => {
const type = createType({
switchToModelVersionAt: '8.4.0',
});
const result = applyTypeDefaults(type);
expect(result.switchToModelVersionAt).toEqual('8.4.0');
});
it(`sets switchToModelVersionAt to the global version if unspecified`, () => {
const type = createType({
switchToModelVersionAt: undefined,
});
const result = applyTypeDefaults(type);
expect(result.switchToModelVersionAt).toEqual(globalSwitchToModelVersionAt);
});
it(`throws if switchToModelVersionAt is invalid`, () => {
const type = createType({
switchToModelVersionAt: 'foobar',
});
expect(() => applyTypeDefaults(type)).toThrowErrorMatchingInlineSnapshot(
`"Type test: invalid switchToModelVersionAt provided: foobar"`
);
});
it(`throws if type version is greater than the global version`, () => {
const type = createType({
switchToModelVersionAt: '9.2.0',
});
expect(() => applyTypeDefaults(type)).toThrowErrorMatchingInlineSnapshot(
`"Type test: provided switchToModelVersionAt (9.2.0) is higher than maximum (8.10.0)"`
);
});
});
});

View file

@ -0,0 +1,37 @@
/*
* 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 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
import Semver from 'semver';
import type { SavedObjectsType } from '@kbn/core-saved-objects-server';
import { globalSwitchToModelVersionAt } from '@kbn/core-saved-objects-base-server-internal';
/**
* Apply global defaults to the provided SO type.
*/
export const applyTypeDefaults = (type: SavedObjectsType): SavedObjectsType => {
let switchToModelVersionAt = type.switchToModelVersionAt;
if (switchToModelVersionAt) {
if (!Semver.valid(switchToModelVersionAt)) {
throw new Error(
`Type ${type.name}: invalid switchToModelVersionAt provided: ${switchToModelVersionAt}`
);
}
if (Semver.gt(switchToModelVersionAt, globalSwitchToModelVersionAt)) {
throw new Error(
`Type ${type.name}: provided switchToModelVersionAt (${switchToModelVersionAt}) is higher than maximum (${globalSwitchToModelVersionAt})`
);
}
} else {
switchToModelVersionAt = globalSwitchToModelVersionAt;
}
return {
...type,
switchToModelVersionAt,
};
};

View file

@ -50,3 +50,12 @@ export const registerRoutesMock = jest.fn();
jest.doMock('./routes', () => ({
registerRoutes: registerRoutesMock,
}));
export const applyTypeDefaultsMock = jest.fn();
jest.doMock('./apply_type_defaults', () => {
const actual = jest.requireActual('./apply_type_defaults');
return {
...actual,
applyTypeDefaults: applyTypeDefaultsMock,
};
});

View file

@ -16,6 +16,7 @@ import {
migratorInstanceMock,
registerRoutesMock,
typeRegistryInstanceMock,
applyTypeDefaultsMock,
} from './saved_objects_service.test.mocks';
import { BehaviorSubject, firstValueFrom } from 'rxjs';
import { skip } from 'rxjs/operators';
@ -69,6 +70,7 @@ describe('SavedObjectsService', () => {
beforeEach(() => {
deprecationsSetup = createDeprecationRegistryProviderMock();
applyTypeDefaultsMock.mockReset().mockImplementation((type: unknown) => type);
});
const createCoreContext = ({
@ -330,22 +332,50 @@ describe('SavedObjectsService', () => {
});
describe('#registerType', () => {
it('registers the type to the internal typeRegistry', async () => {
it('calls `applyTypeDefaults` with the correct parameters', async () => {
// we mocked registerCoreObjectTypes above, so this test case only reflects direct calls to the registerType method
const coreContext = createCoreContext();
const soService = new SavedObjectsService(coreContext);
const setup = await soService.setup(createSetupDeps());
const type = {
const inputType = {
name: 'someType',
hidden: false,
namespaceType: 'single' as 'single',
mappings: { properties: {} },
};
setup.registerType(type);
applyTypeDefaultsMock.mockReturnValue(inputType);
setup.registerType(inputType);
expect(applyTypeDefaultsMock).toHaveBeenCalledTimes(1);
expect(applyTypeDefaultsMock).toHaveBeenCalledWith(inputType);
});
it('registers the type returned by `applyTypeDefaults` to the internal typeRegistry', async () => {
// we mocked registerCoreObjectTypes above, so this test case only reflects direct calls to the registerType method
const coreContext = createCoreContext();
const soService = new SavedObjectsService(coreContext);
const setup = await soService.setup(createSetupDeps());
const inputType = {
name: 'someType',
hidden: false,
namespaceType: 'single' as 'single',
mappings: { properties: {} },
};
const returnedType = {
...inputType,
switchToModelVersionAt: '9.9.9',
};
applyTypeDefaultsMock.mockReturnValue(returnedType);
setup.registerType(inputType);
expect(typeRegistryInstanceMock.registerType).toHaveBeenCalledTimes(1);
expect(typeRegistryInstanceMock.registerType).toHaveBeenCalledWith(type);
expect(typeRegistryInstanceMock.registerType).toHaveBeenCalledWith(returnedType);
});
});

View file

@ -57,6 +57,7 @@ import { registerRoutes } from './routes';
import { calculateStatus$ } from './status';
import { registerCoreObjectTypes } from './object_types';
import { getSavedObjectsDeprecationsProvider } from './deprecations';
import { applyTypeDefaults } from './apply_type_defaults';
/**
* @internal
@ -194,7 +195,7 @@ export class SavedObjectsService
if (this.started) {
throw new Error('cannot call `registerType` after service startup.');
}
this.typeRegistry.registerType(type);
this.typeRegistry.registerType(applyTypeDefaults(type));
},
getTypeRegistry: () => this.typeRegistry,
getDefaultIndex: () => MAIN_SAVED_OBJECT_INDEX,

View file

@ -55,104 +55,104 @@ describe('checking migration metadata changes on all registered SO types', () =>
expect(hashMap).toMatchInlineSnapshot(`
Object {
"action": "12c6b25ef1fffb36d8de893318f8a2bc5d6a46a6",
"action_task_params": "c725c37de66135934150465f9b1e76fe349e8a23",
"alert": "0cd1f1921014004a9ff5c0a9333ca9bde14bf748",
"api_key_pending_invalidation": "16e7bcf8e78764102d7f525542d5b616809a21ee",
"apm-indices": "d19dd7fb51f2d2cbc1f8769481721e0953f9a6d2",
"apm-server-schema": "1d42f17eff9ec6c16d3a9324d9539e2d123d0a9a",
"apm-service-group": "2801c50332e3bf5726c923966c1f19f886e7d389",
"apm-telemetry": "712138c3d5e36d865e67c7fc0171c8a779446e58",
"app_search_telemetry": "9269643c9a5894998b44883f7f7d07a453fd6a95",
"application_usage_daily": "9867f6e1355124f822beab051e0fbac4cc117eac",
"application_usage_totals": "9469a48ab887761a73ee3719b8d401ac627f1eb1",
"canvas-element": "ec334dd45d14291db4d74197e0e42dfe06526868",
"canvas-workpad": "ab0525bd5aa4dbad2d6fdb30e6a51bb475254751",
"canvas-workpad-template": "c54f2a188a1d0bf18a6cebd9d6f28a7337d41bbf",
"cases": "1e86563e8364c69f86b77cb6f2933408dd5b827a",
"cases-comments": "69257ec55e8380fdb2ecbddc83e7c26d2ce2a351",
"cases-configure": "66d4c64d83b464f5166005b8ffa03b721fcaaf8b",
"cases-connector-mappings": "877bb4d52e9821e330622bd75fba799490ec6952",
"cases-telemetry": "fdeddcef28c75d8c66422475a829e75d37f0b668",
"cases-user-actions": "8ad74294b71edffa58fad7a40eea2388209477c9",
"config": "f553a2951fcc93ae94148691abc01f764ce29ec9",
"config-global": "d9791e8f73edee884630e1cb6e4954ae513ce75e",
"connector_token": "aff1aa0ebc0a6b44b570057972af25178b0bca42",
"action": "cc93fe2c0c76e57c2568c63170e05daea897c136",
"action_task_params": "96e27e7f4e8273ffcd87060221e2b75e81912dd5",
"alert": "dc710bc17dfc98a9a703d388569abccce5f8bf07",
"api_key_pending_invalidation": "1399e87ca37b3d3a65d269c924eda70726cfe886",
"apm-indices": "9b550bac232e057ec25585e5cb0b5fa08b88f7dc",
"apm-server-schema": "0012e7afc8dcaf7e0180443a3f105ed461c610a2",
"apm-service-group": "ef3128df3fc95612f141198ae9ef922b5cb6cd04",
"apm-telemetry": "ff679c0ecceff161fd16189150dca256d0904055",
"app_search_telemetry": "36234f19573ad397ac30197c45ac219921cc3106",
"application_usage_daily": "20142d23fe5d05ba22b4bc46614d99883bc488f0",
"application_usage_totals": "a29ab014edc20382b9ce22ede221b18cee5d93a6",
"canvas-element": "b39dfe54b9ff3ecc4c6bc5bed6a14b0a0fe83644",
"canvas-workpad": "4df66cf25eba8e7e25c061a1b2a5aadbb1f436e9",
"canvas-workpad-template": "52a35f737b579a570510fca361fddd158d2a92ad",
"cases": "3d968144040b829dddb8826bad90f9f0ab57a403",
"cases-comments": "ded400d82c5ea26959c2ee8e54896981d499a226",
"cases-configure": "44ed7b8e0f44df39516b8870589b89e32224d2bf",
"cases-connector-mappings": "f9d1ac57e484e69506c36a8051e4d61f4a8cfd25",
"cases-telemetry": "f219eb7e26772884342487fc9602cfea07b3cedc",
"cases-user-actions": "483f10db9b3bd1617948d7032a98b7791bf87414",
"config": "179b3e2bc672626aafce3cf92093a113f456af38",
"config-global": "8e8a134a2952df700d7d4ec51abb794bbd4cf6da",
"connector_token": "5a9ac29fe9c740eb114e9c40517245c71706b005",
"core-usage-stats": "b3c04da317c957741ebcdedfea4524049fdc79ff",
"csp-rule-template": "099c229bf97578d9ca72b3a672d397559b84ee0b",
"dashboard": "71e3f8dfcffeb5fbd410dec81ce46f5691763c43",
"endpoint:user-artifact-manifest": "8ad9bd235dcfdc18b567aef0dc36ac686193dc89",
"enterprise_search_telemetry": "4b41830e3b28a16eb92dee0736b44ae6276ced9b",
"epm-packages": "8755f947a00613f994b1bc5d5580e104043e27f6",
"epm-packages-assets": "00c8b5e5bf059627ffc9fbde920e1ac75926c5f6",
"event_loop_delays_daily": "ef49e7f15649b551b458c7ea170f3ed17f89abd0",
"exception-list": "38181294f64fc406c15f20d85ca306c8a4feb3c0",
"exception-list-agnostic": "d527ce9d12b134cb163150057b87529043a8ec77",
"file": "487a562dd895407307980cc4404ca08e87e8999d",
"file-upload-usage-collection-telemetry": "c6fcb9a7efcf19b2bb66ca6e005bfee8961f6073",
"fileShare": "f07d346acbb724eacf139a0fb781c38dc5280115",
"fleet-fleet-server-host": "67180a54a689111fb46403c3603c9b3a329c698d",
"fleet-message-signing-keys": "0c6da6a680807e568540b2aa263ae52331ba66db",
"fleet-preconfiguration-deletion-record": "3afad160748b430427086985a3445fd8697566d5",
"fleet-proxy": "94d0a902a0fd22578d7d3a20873b95d902e25245",
"fleet-uninstall-tokens": "404109e8624f6585e4837a2d01f6e405e0c36d9d",
"graph-workspace": "565642a208fe7413b487aea979b5b153e4e74abe",
"guided-onboarding-guide-state": "3257825ae840309cb676d64b347107db7b76f30a",
"guided-onboarding-plugin-state": "2d3ef3069ca8e981cafe8647c0c4a4c20739db10",
"index-pattern": "cd51191712081278c2af83d16552c3438ef83353",
"infrastructure-monitoring-log-view": "8040108f02ef27419cff79077384379709d44bbc",
"infrastructure-ui-source": "2311f7d0abe2a713aa71e30ee24f78828d4acfc1",
"ingest-agent-policies": "d9906923f595f6f3163672351ed3a46472eb280e",
"ingest-download-sources": "95a15b6589ef46e75aca8f7e534c493f99cc3ccd",
"ingest-outputs": "3025d8c0cc110748bd8012b9bf49af2d7e6a7bf5",
"ingest-package-policies": "b0b652adb1b26d056d8ed3c0303d0ad85c2c1ae9",
"ingest_manager_settings": "fb75bff08a8de3435b23664b1191f9244a255701",
"inventory-view": "6d47ef0b38166ecbd1c2fc7394599a4500db1ae4",
"kql-telemetry": "92d6357aa3ce28727492f86a54783f802dc38893",
"csp-rule-template": "2a9d5f6481d8ca81d6e5ab0a7cc4ba0b59a93420",
"dashboard": "cf7c9c2334decab716fe519780cb4dc52967a91d",
"endpoint:user-artifact-manifest": "1c3533161811a58772e30cdc77bac4631da3ef2b",
"enterprise_search_telemetry": "9ac912e1417fc8681e0cd383775382117c9e3d3d",
"epm-packages": "2449bb565f987eff70b1b39578bb17e90c404c6e",
"epm-packages-assets": "7a3e58efd9a14191d0d1a00b8aaed30a145fd0b1",
"event_loop_delays_daily": "01b967e8e043801357503de09199dfa3853bab88",
"exception-list": "4aebc4e61fb5d608cae48eaeb0977e8db21c61a4",
"exception-list-agnostic": "6d3262d58eee28ac381ec9654f93126a58be6f5d",
"file": "6b65ae5899b60ebe08656fd163ea532e557d3c98",
"file-upload-usage-collection-telemetry": "06e0a8c04f991e744e09d03ab2bd7f86b2088200",
"fileShare": "5be52de1747d249a221b5241af2838264e19aaa1",
"fleet-fleet-server-host": "b04898fcde07f4ce86e844c8fe2f4b23b77ef60a",
"fleet-message-signing-keys": "93421f43fed2526b59092a4e3c65d64bc2266c0f",
"fleet-preconfiguration-deletion-record": "c52ea1e13c919afe8a5e8e3adbb7080980ecc08e",
"fleet-proxy": "6cb688f0d2dd856400c1dbc998b28704ff70363d",
"fleet-uninstall-tokens": "d25a8aedb522d2b839ab0950160777528122070f",
"graph-workspace": "5cc6bb1455b078fd848c37324672163f09b5e376",
"guided-onboarding-guide-state": "d338972ed887ac480c09a1a7fbf582d6a3827c91",
"guided-onboarding-plugin-state": "bc109e5ef46ca594fdc179eda15f3095ca0a37a4",
"index-pattern": "997108a9ea1e8076e22231e1c95517cdb192b9c5",
"infrastructure-monitoring-log-view": "5f86709d3c27aed7a8379153b08ee5d3d90d77f5",
"infrastructure-ui-source": "113182d6895764378dfe7fa9fa027244f3a457c4",
"ingest-agent-policies": "8a91f7b9507605222901543167f48c313591daec",
"ingest-download-sources": "d7edc5e588d9afa61c4b831604582891c54ef1c7",
"ingest-outputs": "3f1e998887d48a706333b67885d1ad8f3217cd90",
"ingest-package-policies": "7d0e8d288e193e0a8a153bb420c6056bc862c4c3",
"ingest_manager_settings": "418311b03c8eda53f5d2ea6f54c1356afaa65511",
"inventory-view": "b8683c8e352a286b4aca1ab21003115a4800af83",
"kql-telemetry": "93c1d16c1a0dfca9c8842062cf5ef8f62ae401ad",
"legacy-url-alias": "9b8cca3fbb2da46fd12823d3cd38fdf1c9f24bc8",
"lens": "2f6a8231591e3d62a83506b19e165774d74588ea",
"lens-ui-telemetry": "d6c4e330d170eefc6214dbf77a53de913fa3eebc",
"maintenance-window": "a9777f4e71381c56b4422bf8d30f626bde301c79",
"map": "7902b2e2a550e0b73fd5aa6c4e2ba3a4e6558877",
"metrics-explorer-view": "713dbf1ab5e067791d19170f715eb82cf07ebbcc",
"ml-job": "12e21f1b1adfcc1052dc0b10c7459de875653b94",
"ml-module": "c88b6a012cfb7b7adb7629b1edeab6b83f1fd048",
"ml-trained-model": "49a1685d79990ad05ea1d1d30e28456fe002f3b9",
"monitoring-telemetry": "24f7393dfacb6c7b0f7ad7d242171a1c29feaa48",
"osquery-manager-usage-metric": "23a8f08a98dd0f58ab4e559daa35b06edc40ed4f",
"osquery-pack": "edd84b2c59ef36214ece0676706da8f22175c660",
"osquery-pack-asset": "18e08979d46ee7e5538f54c080aec4d8c58516ca",
"osquery-saved-query": "f5e4e303f65c7607248ea8b2672f1ee30e4fb15e",
"query": "cfc049e1f0574fb4fdb2d653d7c10bdc970a2610",
"rules-settings": "eb8d40b7d60aeffe66831f7d5d83de28d85776d8",
"sample-data-telemetry": "c38daf1a49ed24f2a4fb091e6e1e833fccf19935",
"search": "ed3a9b1681b57d69560909d51933fdf17576ea68",
"search-session": "fae0dfc63274d6a3b90ca583802c48cab8760637",
"search-telemetry": "1bbaf2db531b97fa04399440fa52d46e86d54dd8",
"security-rule": "151108f4906744a137ddc89f5988310c5b9ba8b6",
"security-solution-signals-migration": "0be3bed0f2ff4fe460493751b8be610a785c5c98",
"siem-detection-engine-rule-actions": "123c130dc38120a470d8db9fed9a4cebd2046445",
"siem-ui-timeline": "e9d6b3a9fd7af6dc502293c21cbdb309409f3996",
"siem-ui-timeline-note": "13c9d4c142f96624a93a623c6d7cba7e1ae9b5a6",
"siem-ui-timeline-pinned-event": "96a43d59b9e2fc11f12255a0cb47ef0a3d83af4c",
"slo": "aefffabdb35d15a6c388634af2cee1fa59ede83c",
"space": "168a35eab6fc40eceacc4731c8b8d8af114e27c4",
"spaces-usage-stats": "084bd0f080f94fb5735d7f3cf12f13ec92f36bad",
"synthetics-monitor": "fa988678e5d6791c75515fa1acdbbb3b2d1f916d",
"synthetics-param": "9776c9b571d35f0d0397e8915e035ea1dc026db7",
"synthetics-privates-locations": "7d032fc788905e32152029ae7ab3d6038c48ae44",
"tag": "87f21f07df9cc37001b15a26e413c18f50d1fbfe",
"task": "533ee80c50c47f0505846bfac73fc10962c5bc45",
"telemetry": "3b3b89cf411a2a2e60487cef6ccdbc5df691aeb9",
"ui-metric": "410a8ad28e0f44b161c960ff0ce950c712b17c52",
"upgrade-assistant-ml-upgrade-operation": "d8816e5ce32649e7a3a43e2c406c632319ff84bb",
"upgrade-assistant-reindex-operation": "09ac8ed9c9acf7e8ece8eafe47d7019ea1472144",
"uptime-dynamic-settings": "9a63ce80904a04be114749e426882dc3ff011137",
"uptime-synthetics-api-key": "599319bedbfa287e8761e1ba49d536417a33fa13",
"url": "816fa15bfe460ce39108ed8095e60fdbfcc40f11",
"usage-counters": "f478b2668be350f5bdc08d9e1cf6fbce0e079f61",
"visualization": "cee4d02c56af349054642c6744bf9c471c1ad941",
"workplace_search_telemetry": "10e278fe9ae1396bfc36ae574bc387d7e696d43f",
"lens": "fd6a7938f41888e5ee499fcc5e749489981393aa",
"lens-ui-telemetry": "8c47a9e393861f76e268345ecbadfc8a5fb1e0bd",
"maintenance-window": "d893544460abad56ff7a0e25b78f78776dfe10d1",
"map": "76c71023bd198fb6b1163b31bafd926fe2ceb9da",
"metrics-explorer-view": "98cf395d0e87b89ab63f173eae16735584a8ff42",
"ml-job": "150e1ab260e87f9963cc99e013304b9c54703dab",
"ml-module": "2225cbb4bd508ea5f69db4b848be9d8a74b60198",
"ml-trained-model": "482195cefd6b04920e539d34d7356d22cb68e4f3",
"monitoring-telemetry": "5d91bf75787d9d4dd2fae954d0b3f76d33d2e559",
"osquery-manager-usage-metric": "983bcbc3b7dda0aad29b20907db233abba709bcc",
"osquery-pack": "6ab4358ca4304a12dcfc1777c8135b75cffb4397",
"osquery-pack-asset": "b14101d3172c4b60eb5404696881ce5275c84152",
"osquery-saved-query": "44f1161e165defe3f9b6ad643c68c542a765fcdb",
"query": "8db5d48c62d75681d80d82a42b5642f60d068202",
"rules-settings": "892a2918ebaeba809a612b8d97cec0b07c800b5f",
"sample-data-telemetry": "37441b12f5b0159c2d6d5138a494c9f440e950b5",
"search": "8d5184dd5b986d57250b6ffd9ae48a1925e4c7a3",
"search-session": "b2fcd840e12a45039ada50b1355faeafa39876d1",
"search-telemetry": "b568601618744720b5662946d3103e3fb75fe8ee",
"security-rule": "07abb4d7e707d91675ec0495c73816394c7b521f",
"security-solution-signals-migration": "9d99715fe5246f19de2273ba77debd2446c36bb1",
"siem-detection-engine-rule-actions": "54f08e23887b20da7c805fab7c60bc67c428aff9",
"siem-ui-timeline": "670a02b3c2a399bca781ff1e4781793b208b471a",
"siem-ui-timeline-note": "0a32fb776907f596bedca292b8c646496ae9c57b",
"siem-ui-timeline-pinned-event": "082daa3ce647b33873f6abccf340bdfa32057c8d",
"slo": "4415e0ae7af10b79a207843acee454a931a01386",
"space": "8de4ec513e9bbc6b2f1d635161d850be7747d38e",
"spaces-usage-stats": "3abca98713c52af8b30300e386c7779b3025a20e",
"synthetics-monitor": "ca7c0710c0607e44b2c52e5a41086b8b4a214f63",
"synthetics-param": "3ebb744e5571de678b1312d5c418c8188002cf5e",
"synthetics-privates-locations": "9cfbd6d1d2e2c559bf96dd6fbc27ff0c47719dd3",
"tag": "e2544392fe6563e215bb677abc8b01c2601ef2dc",
"task": "04f30bd7bae923f3a53c31ab3b9745a93872fc02",
"telemetry": "7b00bcf1c7b4f6db1192bb7405a6a63e78b699fd",
"ui-metric": "d227284528fd19904e9d972aea0a13716fc5fe24",
"upgrade-assistant-ml-upgrade-operation": "421f52731cb24e242d70672ba4725e169277efb3",
"upgrade-assistant-reindex-operation": "01f3c3e051659ace56492a73928987e717537a93",
"uptime-dynamic-settings": "a9e9c42d8c1b6643946f32558478b274de0f89e0",
"uptime-synthetics-api-key": "7ae976a461248f9dbd8442af14a179bdbc229eca",
"url": "c923a4a5002a09c0080c9095e958f07d518e6704",
"usage-counters": "48782b3bcb6b5a23ba6f2bfe3a380d835e68890a",
"visualization": "93a3e73994ad836fe2b1dccbe208238f41f63da0",
"workplace_search_telemetry": "52b32b47ee576f554ac77cb1d5896dfbcfe9a1fb",
}
`);
});