From 5575d45e1ab4874d6cd7e17c026259df15855c8b Mon Sep 17 00:00:00 2001 From: Charles Ilieff Date: Thu, 9 Jul 2026 10:35:40 +0200 Subject: [PATCH 1/2] feat(dedicated-server): adopt plannedChange apiv6 route behind feature flag Gate the new /dedicated/server/:serviceName/plannedChange apiv6 route (DC360, INTERNAL rollout) behind the dedicated-server:plannedChange feature flag, falling back to the legacy /plannedIntervention route when the flag is off. When the flag is on, upgradeTask reads task.changeUuid and calls /plannedChange/:changeUuid; otherwise it reads task.plannedInterventionId and calls /plannedIntervention/:interventionId. PlannedChange exposes the same wantedStartDate the UpgradeTask.scheduledTimeSlot getter reads, so the model is unchanged. Applied identically to the server dashboard and the cluster-node dashboard resolvers; flag id added to both features batches. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../nodes/node/dashboard/dashboard.routing.js | 20 ++++++++++++------- .../clusters/nodes/node/node.routing.js | 1 + .../server/dashboard/dashboard.routing.js | 20 ++++++++++++------- .../servers/server/server.routing.js | 1 + 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/dashboard/dashboard.routing.js b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/dashboard/dashboard.routing.js index b0f03803a11e..4559527c7cb6 100644 --- a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/dashboard/dashboard.routing.js +++ b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/dashboard/dashboard.routing.js @@ -351,7 +351,7 @@ export default /* @ngInject */ ($stateProvider) => { .catch(() => false); }, - upgradeTask: /* @ngInject */ ($http, $q, serverName) => + upgradeTask: /* @ngInject */ ($http, $q, serverName, features) => $http .get( `/dedicated/server/${serverName}/task?function=hardware_update&status=todo`, @@ -361,15 +361,21 @@ export default /* @ngInject */ ($stateProvider) => { ? $http .get(`/dedicated/server/${serverName}/task/${taskIds[0]}`) .then(({ data: task }) => { - return (task.plannedInterventionId + const usePlannedChange = features.isFeatureAvailable( + 'dedicated-server:plannedChange', + ); + const route = usePlannedChange + ? 'plannedChange' + : 'plannedIntervention'; + const linkageId = usePlannedChange + ? task.changeUuid + : task.plannedInterventionId; + return (linkageId ? $http .get( - `/dedicated/server/${serverName}/plannedIntervention/${task.plannedInterventionId}`, - ) - .then( - ({ data: plannedIntervention }) => - plannedIntervention, + `/dedicated/server/${serverName}/${route}/${linkageId}`, ) + .then(({ data }) => data) : $q.when(null) ).then((plannedIntervention) => { return new UpgradeTask({ diff --git a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/node.routing.js b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/node.routing.js index 1cbfcba8537d..f3bbcd63bfac 100644 --- a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/node.routing.js +++ b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/node.routing.js @@ -30,6 +30,7 @@ export default /* @ngInject */ ($stateProvider) => { 'dedicated-server:changeOwner', 'dedicated-server:dns', 'dedicated-server:upgradeWithTicket', + 'dedicated-server:plannedChange', ]), ola: /* @ngInject */ ( $stateParams, diff --git a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/dashboard/dashboard.routing.js b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/dashboard/dashboard.routing.js index fbbdece0bc9e..65482c92acb2 100644 --- a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/dashboard/dashboard.routing.js +++ b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/dashboard/dashboard.routing.js @@ -330,7 +330,7 @@ export default /* @ngInject */ ($stateProvider) => { .catch(() => false); }, - upgradeTask: /* @ngInject */ ($http, $q, serverName) => + upgradeTask: /* @ngInject */ ($http, $q, serverName, features) => $http .get( `/dedicated/server/${serverName}/task?function=hardware_update&status=todo`, @@ -340,15 +340,21 @@ export default /* @ngInject */ ($stateProvider) => { ? $http .get(`/dedicated/server/${serverName}/task/${taskIds[0]}`) .then(({ data: task }) => { - return (task.plannedInterventionId + const usePlannedChange = features.isFeatureAvailable( + 'dedicated-server:plannedChange', + ); + const route = usePlannedChange + ? 'plannedChange' + : 'plannedIntervention'; + const linkageId = usePlannedChange + ? task.changeUuid + : task.plannedInterventionId; + return (linkageId ? $http .get( - `/dedicated/server/${serverName}/plannedIntervention/${task.plannedInterventionId}`, - ) - .then( - ({ data: plannedIntervention }) => - plannedIntervention, + `/dedicated/server/${serverName}/${route}/${linkageId}`, ) + .then(({ data }) => data) : $q.when(null) ).then((plannedIntervention) => { return new UpgradeTask({ diff --git a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/server.routing.js b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/server.routing.js index e74bf1125521..47670e049a3e 100644 --- a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/server.routing.js +++ b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/server.routing.js @@ -29,6 +29,7 @@ export default /* @ngInject */ ($stateProvider) => { 'dedicated-server:upgradeWithTicket', 'dedicated-server:rbx1-eol-banner', 'dedicated-server:backupAgent', + 'dedicated-server:plannedChange', ]), ola: /* @ngInject */ ( $stateParams, From 8856b465e60a1d61b8a6bf1eebac51531a7e07fd Mon Sep 17 00:00:00 2001 From: soufien mhelhali Date: Wed, 15 Jul 2026 06:42:47 +0200 Subject: [PATCH 2/2] feat(dedicated): remove FeatureAvailability ref: #PUBM-54260 Signed-off-by: soufien mhelhali --- .../clusters/nodes/node/dashboard/dashboard.routing.js | 6 +++--- .../dedicated-server/clusters/nodes/node/node.routing.js | 1 - .../servers/server/dashboard/dashboard.routing.js | 6 +++--- .../dedicated-server/servers/server/server.routing.js | 1 - 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/dashboard/dashboard.routing.js b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/dashboard/dashboard.routing.js index 4559527c7cb6..67d095505e69 100644 --- a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/dashboard/dashboard.routing.js +++ b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/dashboard/dashboard.routing.js @@ -351,7 +351,7 @@ export default /* @ngInject */ ($stateProvider) => { .catch(() => false); }, - upgradeTask: /* @ngInject */ ($http, $q, serverName, features) => + upgradeTask: /* @ngInject */ ($http, $q, serverName) => $http .get( `/dedicated/server/${serverName}/task?function=hardware_update&status=todo`, @@ -361,8 +361,8 @@ export default /* @ngInject */ ($stateProvider) => { ? $http .get(`/dedicated/server/${serverName}/task/${taskIds[0]}`) .then(({ data: task }) => { - const usePlannedChange = features.isFeatureAvailable( - 'dedicated-server:plannedChange', + const usePlannedChange = !!( + task.changeUuid && task.changeUuid !== null ); const route = usePlannedChange ? 'plannedChange' diff --git a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/node.routing.js b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/node.routing.js index f3bbcd63bfac..1cbfcba8537d 100644 --- a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/node.routing.js +++ b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/clusters/nodes/node/node.routing.js @@ -30,7 +30,6 @@ export default /* @ngInject */ ($stateProvider) => { 'dedicated-server:changeOwner', 'dedicated-server:dns', 'dedicated-server:upgradeWithTicket', - 'dedicated-server:plannedChange', ]), ola: /* @ngInject */ ( $stateParams, diff --git a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/dashboard/dashboard.routing.js b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/dashboard/dashboard.routing.js index 65482c92acb2..66d9c0d13550 100644 --- a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/dashboard/dashboard.routing.js +++ b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/dashboard/dashboard.routing.js @@ -330,7 +330,7 @@ export default /* @ngInject */ ($stateProvider) => { .catch(() => false); }, - upgradeTask: /* @ngInject */ ($http, $q, serverName, features) => + upgradeTask: /* @ngInject */ ($http, $q, serverName) => $http .get( `/dedicated/server/${serverName}/task?function=hardware_update&status=todo`, @@ -340,8 +340,8 @@ export default /* @ngInject */ ($stateProvider) => { ? $http .get(`/dedicated/server/${serverName}/task/${taskIds[0]}`) .then(({ data: task }) => { - const usePlannedChange = features.isFeatureAvailable( - 'dedicated-server:plannedChange', + const usePlannedChange = !!( + task.changeUuid && task.changeUuid !== null ); const route = usePlannedChange ? 'plannedChange' diff --git a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/server.routing.js b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/server.routing.js index 47670e049a3e..e74bf1125521 100644 --- a/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/server.routing.js +++ b/packages/manager/apps/dedicated/client/app/dedicated/dedicated-server/servers/server/server.routing.js @@ -29,7 +29,6 @@ export default /* @ngInject */ ($stateProvider) => { 'dedicated-server:upgradeWithTicket', 'dedicated-server:rbx1-eol-banner', 'dedicated-server:backupAgent', - 'dedicated-server:plannedChange', ]), ola: /* @ngInject */ ( $stateParams,