Skip to content

Commit 05e15f0

Browse files
Cyrille Bourgoisjleveugle
authored andcommitted
feat: attach private network on instance
1 parent bc33f58 commit 05e15f0

File tree

12 files changed

+248
-14
lines changed

12 files changed

+248
-14
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import controller from './attach-private-network.controller';
2+
import template from './attach-private-network.html';
3+
4+
export default {
5+
controller,
6+
template,
7+
bindings: {
8+
projectId: '<',
9+
instance: '<',
10+
privateNetworks: '<',
11+
goBack: '<',
12+
},
13+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import get from 'lodash/get';
2+
3+
export default class PciInstanceAttachPrivateNetworkController {
4+
/* @ngInject */
5+
constructor(
6+
$translate,
7+
CucCloudMessage,
8+
PciProjectsProjectInstanceService,
9+
) {
10+
this.$translate = $translate;
11+
this.CucCloudMessage = CucCloudMessage;
12+
this.PciProjectsProjectInstanceService = PciProjectsProjectInstanceService;
13+
}
14+
15+
$onInit() {
16+
this.selectedPrivateNetworks = [];
17+
this.isLoading = false;
18+
}
19+
20+
attachPrivateNetworks(privateNetworks) {
21+
this.isLoading = true;
22+
23+
return this.PciProjectsProjectInstanceService
24+
.attachPrivateNetworks(this.projectId, this.instance, privateNetworks)
25+
.then(() => {
26+
let message;
27+
if (privateNetworks.length > 1) {
28+
message = this.$translate.instant(
29+
'pci_projects_project_instances_instance_attach-private-network_success_multiple_message',
30+
{
31+
instance: this.instance.name,
32+
},
33+
);
34+
} else {
35+
message = this.$translate.instant(
36+
'pci_projects_project_instances_instance_attach-private-network_success_message',
37+
{
38+
network: privateNetworks[0].name,
39+
instance: this.instance.name,
40+
},
41+
);
42+
}
43+
44+
this.CucCloudMessage.success(
45+
message,
46+
'pci.projects.project.instances.instance',
47+
);
48+
})
49+
.catch((err) => {
50+
this.CucCloudMessage.error(
51+
this.$translate.instant(
52+
'pci_projects_project_instances_instance_attach-private-network_error_attach',
53+
{
54+
message: get(err, 'data.message', null),
55+
},
56+
'pci.projects.project.instances.instance',
57+
),
58+
);
59+
})
60+
.finally(() => {
61+
this.isLoading = false;
62+
return this.goBack();
63+
});
64+
}
65+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<oui-modal
2+
data-heading="{{:: 'pci_projects_project_instances_instance_attach-private-network_title' | translate}}"
3+
data-primary-action="$ctrl.attachPrivateNetworks($ctrl.selectedPrivateNetworks)"
4+
data-primary-label="{{:: 'pci_projects_project_instances_instance_attach-private-network_submit_label' | translate }}"
5+
data-primary-disabled="$ctrl.isLoading || $ctrl.selectedPrivateNetworks.length === 0"
6+
data-secondary-action="$ctrl.goBack()"
7+
data-secondary-label="{{:: 'pci_projects_project_instances_instance_attach-private-network_cancel_label' | translate }}"
8+
data-on-dismiss="$ctrl.goBack()"
9+
data-loading="$ctrl.isLoading">
10+
11+
<cui-message-container data-messages="$ctrl.messages"></cui-message-container>
12+
13+
<div data-ng-if="$ctrl.privateNetworks.length === 0">
14+
<oui-message data-type="warning">
15+
<span data-translate="pci_projects_project_instances_instance_attach-private-network_error_no_compatible_network"></span>
16+
</oui-message>
17+
</div>
18+
<div data-ng-if="$ctrl.privateNetworks.length > 0">
19+
<oui-select
20+
data-name="selectedPrivateNetworks"
21+
data-model="$ctrl.selectedPrivateNetworks"
22+
data-placeholder="{{ :: 'pci_projects_project_instances_instance_attach-private-network_network_placeholder' | translate }}"
23+
data-items="$ctrl.privateNetworks"
24+
data-match="name"
25+
data-searchable
26+
data-multiple
27+
data-disabled="$ctrl.isLoading">
28+
</oui-select>
29+
</div>
30+
</oui-modal>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import angular from 'angular';
2+
import '@ovh-ux/ng-translate-async-loader';
3+
import '@uirouter/angularjs';
4+
import 'angular-translate';
5+
import 'ovh-ui-angular';
6+
import 'ovh-api-services';
7+
8+
import component from './attach-private-network.component';
9+
import routing from './attach-private-network.routing';
10+
11+
const moduleName = 'ovhManagerPciInstancesInstanceAttachPrivateNetwork';
12+
13+
angular
14+
.module(moduleName, [
15+
'ui.router',
16+
'oui',
17+
'ovh-api-services',
18+
'ngTranslateAsyncLoader',
19+
'pascalprecht.translate',
20+
])
21+
.config(routing)
22+
.component('pciInstancesInstanceAttachPrivateNetwork', component)
23+
24+
.run(/* @ngTranslationsInject:json ./translations */);
25+
26+
export default moduleName;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
export default /* @ngInject */($stateProvider) => {
2+
$stateProvider
3+
.state('pci.projects.project.instances.instance.attachPrivateNetwork', {
4+
url: '/network/private/attach',
5+
views: {
6+
modal: {
7+
component: 'pciInstancesInstanceAttachPrivateNetwork',
8+
},
9+
},
10+
layout: 'modal',
11+
resolve: {
12+
goBack: /* @ngInject */ ($rootScope, $state, projectId, instance) => () => $state.go('pci.projects.project.instances.instance', {
13+
projectId,
14+
instanceId: instance.id,
15+
}),
16+
privateNetworks: /* @ngInject */ (
17+
PciProjectsProjectInstanceService,
18+
instance,
19+
projectId,
20+
) => PciProjectsProjectInstanceService.getCompatiblesPrivateNetworks(projectId, instance),
21+
},
22+
});
23+
};
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import angular from 'angular';
2+
import '@uirouter/angularjs';
3+
import 'oclazyload';
4+
5+
const moduleName = 'ovhManagerPciInstancesInstanceAttachPrivateNetworkLazyLoading';
6+
7+
angular
8+
.module(moduleName, [
9+
'ui.router',
10+
'oc.lazyLoad',
11+
])
12+
.config(/* @ngInject */($stateProvider) => {
13+
$stateProvider.state('pci.projects.project.instances.instance.attachPrivateNetwork.**', {
14+
url: '/network/private/attach',
15+
lazyLoad: ($transition$) => {
16+
const $ocLazyLoad = $transition$.injector().get('$ocLazyLoad');
17+
18+
return import('./attach-private-network.module')
19+
.then(mod => $ocLazyLoad.inject(mod.default || mod));
20+
},
21+
});
22+
});
23+
24+
export default moduleName;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"pci_projects_project_instances_instance_attach-private-network_title": "Attacher un ou des réseaux privés à votre instance",
3+
"pci_projects_project_instances_instance_attach-private-network_submit_label": "Attacher",
4+
"pci_projects_project_instances_instance_attach-private-network_cancel_label": "Annuler",
5+
"pci_projects_project_instances_instance_attach-private-network_network_placeholder": "Rechercher",
6+
"pci_projects_project_instances_instance_attach-private-network_error_no_compatible_network": "Vous ne possédez actuellement aucun réseau privé compatible auquel attacher cette instance.",
7+
"pci_projects_project_instances_instance_attach-private-network_success_message": "Le réseau privé {{ network }} a été attaché à l'instance {{ instance }}.",
8+
"pci_projects_project_instances_instance_attach-private-network_success_multiple_message": "Les réseaux privés ont été attachés à l'instance {{ instance }}.",
9+
"pci_projects_project_instances_instance_attach-private-network_error_attach": "Une erreur est survenue lors de la mise à jour de l'instance : {{ message }}"
10+
11+
}

packages/manager/modules/pci/src/projects/project/instances/instance/instance.component.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ export default {
99
instanceId: '<',
1010
instance: '<',
1111
instancePrice: '<',
12-
privateNetworks: '<',
1312

1413
instanceLink: '<',
1514
consoleLink: '<',
@@ -29,6 +28,6 @@ export default {
2928
attachVolume: '<',
3029

3130
gotToNetworks: '<',
32-
attachNetwork: '<',
31+
attachPrivateNetwork: '<',
3332
},
3433
};

packages/manager/modules/pci/src/projects/project/instances/instance/instance.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,20 +191,20 @@
191191
<oui-tile-definition
192192
data-term="{{:: 'pci_projects_project_instances_instance_private_networks_label' | translate }}">
193193
<oui-tile-description
194-
data-ng-if="$ctrl.privateNetworks.length === 0">
194+
data-ng-if="$ctrl.instance.privateNetworks.length === 0">
195195
<span>-</span>
196196
</oui-tile-description>
197197
<oui-tile-description
198-
data-ng-if="$ctrl.privateNetworks.length > 0"
199-
data-ng-repeat="network in $ctrl.privateNetworks track by network.id">
198+
data-ng-if="$ctrl.instance.privateNetworks.length > 0"
199+
data-ng-repeat="network in $ctrl.instance.privateNetworks track by network.id">
200200
<span data-ng-bind="network.name"></span>
201201
</oui-tile-description>
202202
<oui-action-menu data-compact data-align="end">
203203
<oui-action-menu-item text="{{:: 'pci_projects_project_instances_instance_private_networks_action_manage_label' | translate }}"
204204
data-on-click="$ctrl.gotToNetworks()">
205205
</oui-action-menu-item>
206206
<oui-action-menu-item text="{{:: 'pci_projects_project_instances_instance_private_networks_action_attach_label' | translate }}"
207-
data-on-click="$ctrl.onClickNetworkAttach({ instance: $ctrl.instance })">
207+
data-on-click="$ctrl.attachPrivateNetwork()">
208208
</oui-action-menu-item>
209209
</oui-action-menu>
210210
</oui-tile-definition>

packages/manager/modules/pci/src/projects/project/instances/instance/instance.module.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import '@ovh-ux/ng-translate-async-loader';
44
import 'angular-translate';
55

66
import activeMonthlyBilling from './active-monthly-billing';
7+
import attachPrivateNetwork from './attach-private-network';
78
import attachVolume from './attach-volume';
89
import backup from './backup';
910
import deleteInstance from './delete';
@@ -27,6 +28,7 @@ angular
2728
'ngTranslateAsyncLoader',
2829
'pascalprecht.translate',
2930
activeMonthlyBilling,
31+
attachPrivateNetwork,
3032
attachVolume,
3133
backup,
3234
deleteInstance,

0 commit comments

Comments
 (0)