From b2e0414665e5501f95a74675c4da4071b112987f Mon Sep 17 00:00:00 2001 From: Sachin Ramesh Date: Wed, 2 Apr 2025 10:15:49 +0530 Subject: [PATCH] feat(netapp): modify efs snapshot reserve space ref: #MANAGER-17425 Signed-off-by: Sachin Ramesh --- .../netapp/src/dashboard/volumes/component.js | 1 + .../edit-reserve-space/component.js | 12 +++++ .../components/edit-reserve-space/constant.js | 8 +++ .../edit-reserve-space/controller.js | 54 +++++++++++++++++++ .../components/edit-reserve-space/index.js | 13 +++++ .../components/edit-reserve-space/service.js | 21 ++++++++ .../edit-reserve-space/template.html | 30 +++++++++++ .../translations/Messages_fr_FR.json | 9 ++++ .../dashboard/volumes/dashboard/component.js | 2 + .../dashboard/edit-reserve-space/index.js | 26 +++++++++ .../dashboard/edit-reserve-space/module.js | 20 +++++++ .../dashboard/edit-reserve-space/routing.js | 24 +++++++++ .../src/dashboard/volumes/dashboard/module.js | 2 + .../dashboard/volumes/dashboard/routing.js | 20 +++++++ .../dashboard/volumes/dashboard/template.html | 14 +++++ .../translations/Messages_fr_FR.json | 1 + .../volumes/edit-reserve-space/index.js | 22 ++++++++ .../volumes/edit-reserve-space/module.js | 21 ++++++++ .../volumes/edit-reserve-space/routing.js | 21 ++++++++ .../netapp/src/dashboard/volumes/module.js | 2 + .../netapp/src/dashboard/volumes/routing.js | 8 +++ .../src/dashboard/volumes/template.html | 5 ++ .../volumes/translations/Messages_fr_FR.json | 1 + 23 files changed, 337 insertions(+) create mode 100644 packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/component.js create mode 100644 packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/constant.js create mode 100644 packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/controller.js create mode 100644 packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/index.js create mode 100644 packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/service.js create mode 100644 packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/template.html create mode 100644 packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/translations/Messages_fr_FR.json create mode 100644 packages/manager/modules/netapp/src/dashboard/volumes/dashboard/edit-reserve-space/index.js create mode 100644 packages/manager/modules/netapp/src/dashboard/volumes/dashboard/edit-reserve-space/module.js create mode 100644 packages/manager/modules/netapp/src/dashboard/volumes/dashboard/edit-reserve-space/routing.js create mode 100644 packages/manager/modules/netapp/src/dashboard/volumes/edit-reserve-space/index.js create mode 100644 packages/manager/modules/netapp/src/dashboard/volumes/edit-reserve-space/module.js create mode 100644 packages/manager/modules/netapp/src/dashboard/volumes/edit-reserve-space/routing.js diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/component.js b/packages/manager/modules/netapp/src/dashboard/volumes/component.js index 976f5ba3d0bc..21c1644b7321 100644 --- a/packages/manager/modules/netapp/src/dashboard/volumes/component.js +++ b/packages/manager/modules/netapp/src/dashboard/volumes/component.js @@ -19,6 +19,7 @@ export default { canEditVolumes: '<', isDashboardAvailable: '<', trackClick: '<', + goToEditVolumeReserveSpace: '<', totalVolumesStorage: '<', }, template, diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/component.js b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/component.js new file mode 100644 index 000000000000..64df37739eaf --- /dev/null +++ b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/component.js @@ -0,0 +1,12 @@ +import template from './template.html'; +import controller from './controller'; + +export default { + bindings: { + storage: '<', + volume: '<', + goBack: '<', + }, + template, + controller, +}; diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/constant.js b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/constant.js new file mode 100644 index 000000000000..d73140f30369 --- /dev/null +++ b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/constant.js @@ -0,0 +1,8 @@ +export const BOUNDARIES = { + MIN_SPACE_PERCENT: 5, + MAX_SPACE_PERCENT: 100, +}; + +export default { + BOUNDARIES, +}; diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/controller.js b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/controller.js new file mode 100644 index 000000000000..a02120076040 --- /dev/null +++ b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/controller.js @@ -0,0 +1,54 @@ +import { BOUNDARIES } from './constant'; + +export default class VolumeEditReserveSpaceCtrl { + /* @ngInject */ + constructor($translate, EditReserveSpaceService) { + this.$translate = $translate; + this.EditReserveSpaceService = EditReserveSpaceService; + } + + $onInit() { + this.isLoading = true; + this.errorMessage = null; + this.model = { + percent: BOUNDARIES.MIN_SPACE_PERCENT, + }; + + this.boundaries = BOUNDARIES; + this.EditReserveSpaceService.getSnapshotReserveSpace( + this.storage.id, + this.volume, + ).then((data) => { + this.model.percent = data.percent; + this.isLoading = false; + }); + } + + cancel() { + this.goBack(); + } + + modifySnapshotReserveSpace() { + this.EditReserveSpaceService.modifySnapshotReserveSpace( + this.storage.id, + this.volume, + this.model.percent, + ) + .then(() => { + this.goBack( + this.$translate.instant('netapp_volumes_edit_reserve_space_success', { + volumeName: this.volume.name || this.volume.id, + }), + ); + }) + .catch((error) => { + this.errorMessage = this.$translate.instant( + 'netapp_volumes_edit_reserve_space_error', + { + message: error?.data?.message || error.message, + requestId: error.headers('X-Ovh-Queryid'), + }, + ); + }); + } +} diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/index.js b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/index.js new file mode 100644 index 000000000000..185f3728bd6f --- /dev/null +++ b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/index.js @@ -0,0 +1,13 @@ +import angular from 'angular'; +import component from './component'; +import service from './service'; + +const moduleName = 'ovhManagerNetAppVolumesEditReserveSpaceModule'; + +angular + .module(moduleName, ['oui', 'pascalprecht.translate']) + .service('EditReserveSpaceService', service) + .component('ovhManagerNetAppVolumesEditReserveSpaceComponent', component) + .run(/* @ngTranslationsInject:json ./translations */); + +export default moduleName; diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/service.js b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/service.js new file mode 100644 index 000000000000..d97cac4877eb --- /dev/null +++ b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/service.js @@ -0,0 +1,21 @@ +export default class NetAppDashboardEditReserveSpaceService { + /* @ngInject */ + constructor($http) { + this.$http = $http; + } + + modifySnapshotReserveSpace(serviceName, volume, newPercent) { + return this.$http.put( + `/storage/netapp/${serviceName}/share/${volume.id}/snapshotReserve`, + { + percent: newPercent, + }, + ); + } + + getSnapshotReserveSpace(serviceName, volume) { + return this.$http + .get(`/storage/netapp/${serviceName}/share/${volume.id}/snapshotReserve`) + .then(({ data }) => data); + } +} diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/template.html b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/template.html new file mode 100644 index 000000000000..cf8511719927 --- /dev/null +++ b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/template.html @@ -0,0 +1,30 @@ + + + + +
+ + + + +
+
diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/translations/Messages_fr_FR.json b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/translations/Messages_fr_FR.json new file mode 100644 index 000000000000..e2b7e81d42d3 --- /dev/null +++ b/packages/manager/modules/netapp/src/dashboard/volumes/components/edit-reserve-space/translations/Messages_fr_FR.json @@ -0,0 +1,9 @@ +{ + "netapp_volumes_edit_reserve_space_title": "Modifier la réserve des snapshots", + "netapp_volumes_edit_reserve_space_submit": "Modifier l'espace", + "netapp_volumes_edit_reserve_space_cancel": "Annuler", + "netapp_volumes_edit_reserve_space_label": "Espace réservé", + "netapp_volumes_edit_reserve_space_rules": "Taille autorisée : min {{min}}%, max {{max}}%", + "netapp_volumes_edit_reserve_space_success": "L'espace réservé pour les snapshots sera modifiée dans quelques instants", + "netapp_volumes_edit_reserve_space_error": "Une erreur est survenue
{{message}}
request_id: {{requestId}}" +} diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/component.js b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/component.js index 7082e2444f85..c4146c9795e5 100644 --- a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/component.js +++ b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/component.js @@ -12,6 +12,8 @@ export default { updateVolume: '<', goToVolumeDashboard: '<', goToEditVolumeSize: '<', + goToEditVolumeReserveSpace: '<', + volumeReserveSpacePercentage: '<', }, controller, template, diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/edit-reserve-space/index.js b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/edit-reserve-space/index.js new file mode 100644 index 000000000000..8516e88f32b9 --- /dev/null +++ b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/edit-reserve-space/index.js @@ -0,0 +1,26 @@ +import angular from 'angular'; +import '@uirouter/angularjs'; +import 'oclazyload'; + +const moduleName = + 'ovhManagerNetAppVolumesDashboardEditReserveSpaceLazyLoading'; + +angular.module(moduleName, ['ui.router', 'oc.lazyLoad']).config( + /* @ngInject */ ($stateProvider) => { + $stateProvider.state( + 'netapp.dashboard.volumes.dashboard.edit-reserve-space.**', + { + url: '/edit-reserve-space', + lazyLoad: ($transition$) => { + const $ocLazyLoad = $transition$.injector().get('$ocLazyLoad'); + + return import('./module').then((mod) => + $ocLazyLoad.inject(mod.default || mod), + ); + }, + }, + ); + }, +); + +export default moduleName; diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/edit-reserve-space/module.js b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/edit-reserve-space/module.js new file mode 100644 index 000000000000..73717da12cd8 --- /dev/null +++ b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/edit-reserve-space/module.js @@ -0,0 +1,20 @@ +import angular from 'angular'; +import '@ovh-ux/manager-core'; +import '@uirouter/angularjs'; +import 'angular-translate'; +import routing from './routing'; +import editReserveSpace from '../../components/edit-reserve-space'; + +const moduleName = 'ovhManagerNetAppVolumesDashboardEditReserveSpace'; + +angular + .module(moduleName, [ + 'ovhManagerCore', + 'pascalprecht.translate', + 'ui.router', + editReserveSpace, + ]) + .config(routing) + .run(/* @ngTranslationsInject:json ./translations */); + +export default moduleName; diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/edit-reserve-space/routing.js b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/edit-reserve-space/routing.js new file mode 100644 index 000000000000..8b0c6b0fd69b --- /dev/null +++ b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/edit-reserve-space/routing.js @@ -0,0 +1,24 @@ +export default /* @ngInject */ ($stateProvider) => { + $stateProvider.state( + 'netapp.dashboard.volumes.dashboard.edit-reserve-space', + { + url: '/edit-reserve-space', + views: { + modal: { + component: 'ovhManagerNetAppVolumesEditReserveSpaceComponent', + }, + }, + layout: 'modal', + resolve: { + breadcrumb: () => null, + volumeId: /* @ngInject */ ($transition$) => + $transition$.params().volumeId, + volume: /* @ngInject */ (volumes, volumeId) => + volumes.find(({ id }) => id === volumeId), + goBack: /* @ngInject */ (goToVolumeDetails, volume) => (message) => { + goToVolumeDetails(volume, message); + }, + }, + }, + ); +}; diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/module.js b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/module.js index 540410e9dffc..d755d09ab6d6 100644 --- a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/module.js +++ b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/module.js @@ -11,6 +11,7 @@ import routing from './routing'; import aclModule from './acl'; import snapshotsModule from './snapshots'; import editSize from './edit-size'; +import editReserveSpace from './edit-reserve-space'; const moduleName = 'ovhManagerNetAppVolumesDashboard'; @@ -23,6 +24,7 @@ angular aclModule, snapshotsModule, editSize, + editReserveSpace, ]) .config(routing) .component('ovhManagerNetAppVolumesDashboard', component) diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/routing.js b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/routing.js index bca5e43938a1..fc3a03ccdd9f 100644 --- a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/routing.js +++ b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/routing.js @@ -87,6 +87,26 @@ export default /* @ngInject */ ($stateProvider) => { volumeId, }); }, + volumeReserveSpacePercentage: /* @ngInject */ ( + $http, + serviceName, + volumeId, + ) => + $http + .get( + `/storage/netapp/${serviceName}/share/${volumeId}/snapshotReserve`, + ) + .then(({ data }) => data?.percent || 5) + .catch(() => null), + goToEditVolumeReserveSpace: /* @ngInject */ ( + $state, + serviceName, + volumeId, + ) => () => + $state.go('netapp.dashboard.volumes.dashboard.edit-reserve-space', { + serviceName, + volumeId, + }), breadcrumb: /* @ngInject */ (volumeId) => volumeId, }, }); diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/template.html b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/template.html index d9b0132b895b..6f2ed7b773db 100644 --- a/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/template.html +++ b/packages/manager/modules/netapp/src/dashboard/volumes/dashboard/template.html @@ -78,6 +78,20 @@ + + + + + + + { + $stateProvider.state('netapp.dashboard.volumes.edit-reserve-space.**', { + url: '/edit-reserve-space', + lazyLoad: ($transition$) => { + const $ocLazyLoad = $transition$.injector().get('$ocLazyLoad'); + + return import('./module').then((mod) => + $ocLazyLoad.inject(mod.default || mod), + ); + }, + }); + }, +); + +export default moduleName; diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/edit-reserve-space/module.js b/packages/manager/modules/netapp/src/dashboard/volumes/edit-reserve-space/module.js new file mode 100644 index 000000000000..9b9b3069a4cb --- /dev/null +++ b/packages/manager/modules/netapp/src/dashboard/volumes/edit-reserve-space/module.js @@ -0,0 +1,21 @@ +import angular from 'angular'; +import '@ovh-ux/manager-core'; +import '@uirouter/angularjs'; +import 'angular-translate'; +import editSize from '../components/edit-reserve-space'; + +import routing from './routing'; + +const moduleName = 'ovhManagerNetAppVolumesEditReserveSpace'; + +angular + .module(moduleName, [ + 'ovhManagerCore', + 'pascalprecht.translate', + 'ui.router', + editSize, + ]) + .config(routing) + .run(/* @ngTranslationsInject:json ./translations */); + +export default moduleName; diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/edit-reserve-space/routing.js b/packages/manager/modules/netapp/src/dashboard/volumes/edit-reserve-space/routing.js new file mode 100644 index 000000000000..e853a1b61c68 --- /dev/null +++ b/packages/manager/modules/netapp/src/dashboard/volumes/edit-reserve-space/routing.js @@ -0,0 +1,21 @@ +export default /* @ngInject */ ($stateProvider) => { + $stateProvider.state('netapp.dashboard.volumes.edit-reserve-space', { + url: '/edit-reserve-space?volumeId', + views: { + modal: { + component: 'ovhManagerNetAppVolumesEditReserveSpaceComponent', + }, + }, + layout: 'modal', + resolve: { + breadcrumb: () => null, + volumeId: /* @ngInject */ ($transition$) => + $transition$.params().volumeId, + volume: /* @ngInject */ (volumes, volumeId) => + volumes.find(({ id }) => id === volumeId), + goBack: /* @ngInject */ (goToVolumes) => (message) => { + goToVolumes(message); + }, + }, + }); +}; diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/module.js b/packages/manager/modules/netapp/src/dashboard/volumes/module.js index 52a707bf6a77..1652ddefc8cc 100644 --- a/packages/manager/modules/netapp/src/dashboard/volumes/module.js +++ b/packages/manager/modules/netapp/src/dashboard/volumes/module.js @@ -11,6 +11,7 @@ import create from './create'; import deleteModule from './delete'; import dashboard from './dashboard'; import editSize from './edit-size'; +import editReserveSpace from './edit-reserve-space'; const moduleName = 'ovhManagerNetAppVolumes'; @@ -24,6 +25,7 @@ angular deleteModule, dashboard, editSize, + editReserveSpace, ]) .config(routing) .component('ovhManagerNetAppVolumes', component) diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/routing.js b/packages/manager/modules/netapp/src/dashboard/volumes/routing.js index fe209942a463..5c50d34a6953 100644 --- a/packages/manager/modules/netapp/src/dashboard/volumes/routing.js +++ b/packages/manager/modules/netapp/src/dashboard/volumes/routing.js @@ -138,6 +138,14 @@ export default /* @ngInject */ ($stateProvider) => { volumeId: volume.id, }); }, + goToEditVolumeReserveSpace: /* @ngInject */ ($state, serviceName) => ( + volume, + ) => { + return $state.go('netapp.dashboard.volumes.edit-reserve-space', { + serviceName, + volumeId: volume.id, + }); + }, goToDeleteVolume: /* @ngInject */ ($state, serviceName, trackClick) => ( volume, ) => { diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/template.html b/packages/manager/modules/netapp/src/dashboard/volumes/template.html index 6d1caaef75b5..8079fc8b2549 100644 --- a/packages/manager/modules/netapp/src/dashboard/volumes/template.html +++ b/packages/manager/modules/netapp/src/dashboard/volumes/template.html @@ -111,6 +111,11 @@ + + + diff --git a/packages/manager/modules/netapp/src/dashboard/volumes/translations/Messages_fr_FR.json b/packages/manager/modules/netapp/src/dashboard/volumes/translations/Messages_fr_FR.json index d30cf96c2656..f4493eb9a649 100644 --- a/packages/manager/modules/netapp/src/dashboard/volumes/translations/Messages_fr_FR.json +++ b/packages/manager/modules/netapp/src/dashboard/volumes/translations/Messages_fr_FR.json @@ -42,5 +42,6 @@ "netapp_volumes_manage_acl": "Gérer IP Access (ACL)", "netapp_volumes_delete_volume": "Supprimer le volume", "netapp_volumes_edit_volume_size": "Modifier la taille", + "netapp_volumes_edit_reserve_space": "Modifier l'espace réservé des snapshots", "netapp_volumes_mount_path_not_configurated": "Non configuré" }