Skip to content

Commit 73c58b5

Browse files
[ML] Making update space APIs public (#241109)
The `ml/saved_objects/update_jobs_spaces` and `ml/saved_objects/update_trained_models_spaces` APIs can be made public to allow users to change the spaces for a trained model or AD and DFA job. To avoid issues with rolling upgrades, this PR creates a new copy of each endpoint server side. The original internal endpoints can be remove once we're happy serverless users have all upgraded both server and client side.
1 parent 3c9fadb commit 73c58b5

File tree

6 files changed

+89
-12
lines changed

6 files changed

+89
-12
lines changed

x-pack/platform/plugins/shared/ml/public/application/services/ml_api_service/saved_objects.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const savedObjectsApiProvider = (httpService: HttpService) => ({
4242
) {
4343
const body = JSON.stringify({ jobType, jobIds, spacesToAdd, spacesToRemove });
4444
return httpService.http<SavedObjectResult>({
45-
path: `${ML_INTERNAL_BASE_PATH}/saved_objects/update_jobs_spaces`,
45+
path: `${ML_EXTERNAL_BASE_PATH}/saved_objects/update_jobs_spaces`,
4646
method: 'POST',
4747
body,
4848
version: '1',
@@ -110,7 +110,7 @@ export const savedObjectsApiProvider = (httpService: HttpService) => ({
110110
updateModelsSpaces(modelIds: string[], spacesToAdd: string[], spacesToRemove: string[]) {
111111
const body = JSON.stringify({ modelIds, spacesToAdd, spacesToRemove });
112112
return httpService.http<SavedObjectResult>({
113-
path: `${ML_INTERNAL_BASE_PATH}/saved_objects/update_trained_models_spaces`,
113+
path: `${ML_EXTERNAL_BASE_PATH}/saved_objects/update_trained_models_spaces`,
114114
method: 'POST',
115115
body,
116116
version: '1',

x-pack/platform/plugins/shared/ml/server/routes/saved_objects.ts

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,47 @@ export function savedObjectsRoutes(
232232
})
233233
);
234234

235+
router.versioned
236+
.post({
237+
path: `${ML_EXTERNAL_BASE_PATH}/saved_objects/update_jobs_spaces`,
238+
access: 'internal',
239+
security: {
240+
authz: {
241+
requiredPrivileges: ['ml:canCreateJob', 'ml:canCreateDataFrameAnalytics'],
242+
},
243+
},
244+
summary: 'Update what spaces jobs are assigned to',
245+
description: 'Update a list of jobs to add and/or remove them from given spaces.',
246+
})
247+
.addVersion(
248+
{
249+
version: '1',
250+
validate: {
251+
request: {
252+
body: updateJobsSpaces,
253+
},
254+
},
255+
},
256+
routeGuard.fullLicenseAPIGuard(async ({ request, response, mlSavedObjectService }) => {
257+
try {
258+
const { jobType, jobIds, spacesToAdd, spacesToRemove } = request.body;
259+
260+
const body = await mlSavedObjectService.updateJobsSpaces(
261+
jobType,
262+
jobIds,
263+
spacesToAdd,
264+
spacesToRemove
265+
);
266+
267+
return response.ok({
268+
body,
269+
});
270+
} catch (e) {
271+
return response.customError(wrapError(e));
272+
}
273+
})
274+
);
275+
235276
router.versioned
236277
.post({
237278
path: `${ML_INTERNAL_BASE_PATH}/saved_objects/update_trained_models_spaces`,
@@ -272,6 +313,46 @@ export function savedObjectsRoutes(
272313
})
273314
);
274315

316+
router.versioned
317+
.post({
318+
path: `${ML_EXTERNAL_BASE_PATH}/saved_objects/update_trained_models_spaces`,
319+
access: 'internal',
320+
security: {
321+
authz: {
322+
requiredPrivileges: ['ml:canCreateTrainedModels'],
323+
},
324+
},
325+
summary: 'Update what spaces trained models are assigned to',
326+
description: 'Update a list of trained models to add and/or remove them from given spaces.',
327+
})
328+
.addVersion(
329+
{
330+
version: '1',
331+
validate: {
332+
request: {
333+
body: updateTrainedModelsSpaces,
334+
},
335+
},
336+
},
337+
routeGuard.fullLicenseAPIGuard(async ({ request, response, mlSavedObjectService }) => {
338+
try {
339+
const { modelIds, spacesToAdd, spacesToRemove } = request.body;
340+
341+
const body = await mlSavedObjectService.updateTrainedModelsSpaces(
342+
modelIds,
343+
spacesToAdd,
344+
spacesToRemove
345+
);
346+
347+
return response.ok({
348+
body,
349+
});
350+
} catch (e) {
351+
return response.customError(wrapError(e));
352+
}
353+
})
354+
);
355+
275356
router.versioned
276357
.post({
277358
path: `${ML_INTERNAL_BASE_PATH}/saved_objects/remove_item_from_current_space`,

x-pack/platform/test/api_integration/apis/ml/saved_objects/update_jobs_spaces.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export default ({ getService }: FtrProviderContext) => {
3434
user: USER
3535
) {
3636
const { body, status } = await supertest
37-
.post(`/internal/ml/saved_objects/update_jobs_spaces`)
37+
.post(`/api/ml/saved_objects/update_jobs_spaces`)
3838
.auth(user, ml.securityCommon.getPasswordForUser(user))
3939
.set(getCommonRequestHeader('1'))
4040
.send(requestBody);

x-pack/platform/test/api_integration/apis/ml/saved_objects/update_trained_model_spaces.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export default ({ getService }: FtrProviderContext) => {
3030
user: USER
3131
) {
3232
const { body, status } = await supertest
33-
.post(`/internal/ml/saved_objects/update_trained_models_spaces`)
33+
.post(`/api/ml/saved_objects/update_trained_models_spaces`)
3434
.auth(user, ml.securityCommon.getPasswordForUser(user))
3535
.set(getCommonRequestHeader('1'))
3636
.send(requestBody);

x-pack/platform/test/api_integration/services/ml/api.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1411,7 +1411,7 @@ export function MachineLearningAPIProvider({ getService }: FtrProviderContext) {
14111411
space?: string
14121412
) {
14131413
const { body, status } = await kbnSupertest
1414-
.post(`${space ? `/s/${space}` : ''}/internal/ml/saved_objects/update_jobs_spaces`)
1414+
.post(`${space ? `/s/${space}` : ''}/api/ml/saved_objects/update_jobs_spaces`)
14151415
.set(getCommonRequestHeader('1'))
14161416
.send({ jobType, jobIds: [jobId], spacesToAdd, spacesToRemove });
14171417
this.assertResponseStatusCode(200, status, body);
@@ -1446,9 +1446,7 @@ export function MachineLearningAPIProvider({ getService }: FtrProviderContext) {
14461446
space?: string
14471447
) {
14481448
const { body, status } = await kbnSupertest
1449-
.post(
1450-
`${space ? `/s/${space}` : ''}/internal/ml/saved_objects/update_trained_models_spaces`
1451-
)
1449+
.post(`${space ? `/s/${space}` : ''}/api/ml/saved_objects/update_trained_models_spaces`)
14521450
.set(getCommonRequestHeader('1'))
14531451
.send({ modelIds: [modelId], spacesToAdd, spacesToRemove });
14541452
this.assertResponseStatusCode(200, status, body);

x-pack/platform/test/functional/services/ml/api.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1411,7 +1411,7 @@ export function MachineLearningAPIProvider({ getService }: FtrProviderContext) {
14111411
space?: string
14121412
) {
14131413
const { body, status } = await kbnSupertest
1414-
.post(`${space ? `/s/${space}` : ''}/internal/ml/saved_objects/update_jobs_spaces`)
1414+
.post(`${space ? `/s/${space}` : ''}/api/ml/saved_objects/update_jobs_spaces`)
14151415
.set(getCommonRequestHeader('1'))
14161416
.send({ jobType, jobIds: [jobId], spacesToAdd, spacesToRemove });
14171417
this.assertResponseStatusCode(200, status, body);
@@ -1446,9 +1446,7 @@ export function MachineLearningAPIProvider({ getService }: FtrProviderContext) {
14461446
space?: string
14471447
) {
14481448
const { body, status } = await kbnSupertest
1449-
.post(
1450-
`${space ? `/s/${space}` : ''}/internal/ml/saved_objects/update_trained_models_spaces`
1451-
)
1449+
.post(`${space ? `/s/${space}` : ''}/api/ml/saved_objects/update_trained_models_spaces`)
14521450
.set(getCommonRequestHeader('1'))
14531451
.send({ modelIds: [modelId], spacesToAdd, spacesToRemove });
14541452
this.assertResponseStatusCode(200, status, body);

0 commit comments

Comments
 (0)