diff --git a/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/index.js b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/index.js
new file mode 100644
index 000000000000..f8b1df181590
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/index.js
@@ -0,0 +1,15 @@
+import angular from 'angular';
+
+import 'angular-translate';
+import '@ovh-ux/ui-kit';
+
+import component from './dedicatedCloud-datacenter-network.component';
+
+const moduleName = 'ovhManagerDedicatedCloudDatacenterNetworkComponent';
+
+angular
+ .module(moduleName, ['oui', 'pascalprecht.translate'])
+ .component('ovhManagerDedicatedCloudDatacenterNetwork', component)
+ .run(/* @ngTranslationsInject:json ./translations */);
+
+export default moduleName;
diff --git a/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.component.js b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.component.js
new file mode 100644
index 000000000000..96b83bd6d7d4
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.component.js
@@ -0,0 +1,10 @@
+import controller from './dedicatedCloud-datacenter-network-onboarding.controller';
+import template from './dedicatedCloud-datacenter-network-onboarding.html';
+
+export default {
+ bindings: {
+ network: '<',
+ },
+ controller,
+ template,
+};
diff --git a/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.controller.js b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.controller.js
new file mode 100644
index 000000000000..3a8783fa7f1e
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.controller.js
@@ -0,0 +1,7 @@
+export default class {
+ /* @ngInject */
+ constructor($state, $translate) {
+ this.$state = $state;
+ this.$translate = $translate;
+ }
+}
diff --git a/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.html b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.html
new file mode 100644
index 000000000000..3581d7e244f4
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.html
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/index.js b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/index.js
new file mode 100644
index 000000000000..e054582a2845
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/index.js
@@ -0,0 +1,16 @@
+import angular from 'angular';
+
+import 'angular-translate';
+import '@ovh-ux/ui-kit';
+
+import component from './dedicatedCloud-datacenter-network-onboarding.component';
+
+const moduleName =
+ 'ovhManagerDedicatedCloudDatacenterNetworkOnboardingComponent';
+
+angular
+ .module(moduleName, ['oui', 'pascalprecht.translate'])
+ .component('ovhManagerDedicatedCloudDatacenterNetworkOnboarding', component)
+ .run(/* @ngTranslationsInject:json ./translations */);
+
+export default moduleName;
diff --git a/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/translations/Messages_fr_FR.json b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/translations/Messages_fr_FR.json
new file mode 100644
index 000000000000..2115398e8bae
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/network/onboarding/translations/Messages_fr_FR.json
@@ -0,0 +1,14 @@
+{
+ "dedicatedCloud_datacenter_network_onboarding_description1": "En activant cette option, vous pourrez redimensionner, ajouter ou supprimer des NSX Edges selon vos besoins.",
+ "dedicatedCloud_datacenter_network_onboarding_description2": "Cette option fonctionne sur un modèle de facturation à la consommation : toute modification de la configuration standard des NSX Edges entraînera des frais supplémentaires.",
+ "dedicatedCloud_datacenter_network_onboarding_cta_start": "Commencer",
+ "dedicatedCloud_datacenter_network_onboarding_cta_more": "En savoir plus",
+ "dedicatedCloud_datacenter_network_onboarding_doc_category_tutorial": "Tutoriel",
+ "dedicatedCloud_datacenter_network_onboarding_doc_category_faq": "FAQ",
+ "dedicatedCloud_datacenter_network_onboarding_doc1_title": "Premier pas avec NSX",
+ "dedicatedCloud_datacenter_network_onboarding_doc1_description": "Découvrez NSX, la solution de gestion de réseau Software-Defined Networking (SDN) fournie par VMware.",
+ "dedicatedCloud_datacenter_network_onboarding_doc2_title": "Comment activer NSX-T sur la solution VMware on OVHcloud",
+ "dedicatedCloud_datacenter_network_onboarding_doc2_description": "Découvrez comment attribuer des droits à un utilisateur et aux datacenters pour NSX-T",
+ "dedicatedCloud_datacenter_network_onboarding_doc3_title": "NSX - FAQ",
+ "dedicatedCloud_datacenter_network_onboarding_doc3_description": "Retrouvez les réponses aux questions les plus fréquentes sur l'utilisation de NSX au sein de l'écosystème Hosted Private Cloud."
+}
diff --git a/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/translations/Messages_fr_FR.json b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/translations/Messages_fr_FR.json
index 8ac313d933f2..72fa52689c0d 100644
--- a/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/translations/Messages_fr_FR.json
+++ b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/datacenter/translations/Messages_fr_FR.json
@@ -6,6 +6,7 @@
"dedicatedCloud_tab_datastore": "Datastores",
"dedicatedCloud_tab_backup": "Backup",
"dedicatedCloud_tab_drp": "Plan de reprise d’activité (PRA)",
+ "dedicatedCloud_tab_network": "Network",
"dedicatedCloud_datacenter_EOL_title": "Date de fin de vie de Dedicated Cloud : 30 Septembre 2022",
"dedicatedCloud_datacenter_EOL_part_1": "Nous vous avons informé en Octobre 2021 que nos offres Dedicated Cloud arrivaient en fin de vie et seront définitivement arrêtées le 30 Septembre 2022. Cette étape est importante pour vos plateformes VMware afin d’améliorer la qualité de service, les performances et la sécurité de vos clusters. En effet, le matériel des offres « Dedicated Cloud » utilisé, antérieur à 2018, ne nous permet plus d’assurer le meilleur niveau de service et l’intégration avec les nouvelles architectures modernes de VMware.",
"dedicatedCloud_datacenter_EOL_part_2": "Suite à nos précédentes communications, de nombreux clients ont entamé cette planification et migration et nous vous invitons donc à faire de même afin d'éviter cette date butoir du 30 Septembre 2022."
diff --git a/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/dedicatedCloud.service.js b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/dedicatedCloud.service.js
index 1297a33f0d9d..29a3e53df49e 100644
--- a/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/dedicatedCloud.service.js
+++ b/packages/manager/apps/dedicated/client/app/components/dedicated-cloud/dedicatedCloud.service.js
@@ -1715,6 +1715,12 @@ class DedicatedCloudService {
.get(`/dedicatedCloud/${serviceName}/location`)
.then(({ data }) => data);
}
+
+ getDatacenterOptions(serviceId) {
+ return this.$http
+ .get(`/services/${serviceId}/options`)
+ .then(({ data }) => data);
+ }
}
angular.module(moduleName, []).service('DedicatedCloud', DedicatedCloudService);
diff --git a/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/dedicatedCloud-datacenter.constants.js b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/dedicatedCloud-datacenter.constants.js
new file mode 100644
index 000000000000..3299c526bbec
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/dedicatedCloud-datacenter.constants.js
@@ -0,0 +1,10 @@
+export const NSX_COMPATIBLE_COMMERCIAL_RANGE = [
+ 'NSX',
+ 'NSX-T',
+ 'SDDC 2016',
+ 'SDDC 2018',
+];
+
+export default {
+ NSX_COMPATIBLE_COMMERCIAL_RANGE,
+};
diff --git a/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/dedicatedCloud-datacenter.module.js b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/dedicatedCloud-datacenter.module.js
index 500982ad1a32..94fd0e2dd3bb 100644
--- a/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/dedicatedCloud-datacenter.module.js
+++ b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/dedicatedCloud-datacenter.module.js
@@ -6,6 +6,7 @@ import datacenterComponent from '../../components/dedicated-cloud/datacenter';
import datastore from './datastore';
import drp from './drp';
import host from './host';
+import network from './network';
import routing from './dedicatedCloud-datacenter.routing';
const moduleName = 'ovhManagerDedicatedCloudDatacenter';
@@ -18,6 +19,7 @@ angular
datastore,
drp,
host,
+ network,
])
.config(routing);
diff --git a/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/dedicatedCloud-datacenter.routing.js b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/dedicatedCloud-datacenter.routing.js
index 4d4257617a22..c06a2baa372e 100644
--- a/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/dedicatedCloud-datacenter.routing.js
+++ b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/dedicatedCloud-datacenter.routing.js
@@ -1,3 +1,5 @@
+import { NSX_COMPATIBLE_COMMERCIAL_RANGE } from './dedicatedCloud-datacenter.constants';
+
export default /* @ngInject */ ($stateProvider) => {
$stateProvider.state('app.dedicatedCloud.details.datacenter.details', {
url: '/:datacenterId',
@@ -28,6 +30,29 @@ export default /* @ngInject */ ($stateProvider) => {
id: datacenterId,
},
})),
+ datacenterWithInfoProxy: /* @ngInject */ (
+ datacenter,
+ DedicatedCloud,
+ datacenterId,
+ productId,
+ ) => {
+ return DedicatedCloud.getDatacenterInfoProxy(
+ productId,
+ datacenterId,
+ ).then((datacenterInfoProxy) => ({
+ model: {
+ ...datacenterInfoProxy,
+ ...datacenter.model,
+ },
+ }));
+ },
+ isNsxCompatible: /* @ngInject */ (datacenterWithInfoProxy) => {
+ const vdcRange = datacenterWithInfoProxy.model.commercialRangeName;
+ return NSX_COMPATIBLE_COMMERCIAL_RANGE.some(
+ (range) =>
+ range === vdcRange || range.toLocaleLowerCase() === vdcRange,
+ );
+ },
deleteDatacenter: /* @ngInject */ ($state) => () =>
$state.go(
'app.dedicatedCloud.details.datacenter.details.dashboard.delete',
@@ -39,6 +64,8 @@ export default /* @ngInject */ ($stateProvider) => {
'app.dedicatedCloud.details.datacenter.details.datastores',
drpState: () => 'app.dedicatedCloud.details.datacenter.details.drp',
hostsState: () => 'app.dedicatedCloud.details.datacenter.details.hosts',
+ networkState: () =>
+ 'app.dedicatedCloud.details.datacenter.details.network',
goToHosts: /* @ngInject */ ($state) => () =>
$state.go('app.dedicatedCloud.details.datacenter.details.hosts'),
goToDatastores: /* @ngInject */ ($state) => () =>
@@ -47,6 +74,8 @@ export default /* @ngInject */ ($stateProvider) => {
$state.go('app.dedicatedCloud.details.datacenter.details.backup'),
goToDrp: /* @ngInject */ ($state) => () =>
$state.go('app.dedicatedCloud.details.datacenter.details.drp'),
+ goToNetwork: /* @ngInject */ ($state) => () =>
+ $state.go('app.dedicatedCloud.details.datacenter.details.network'),
goToDrpSummary: /* @ngInject */ ($state, currentDrp) => () =>
$state.go('app.dedicatedCloud.details.datacenter.details.drp.summary', {
drpInformations: currentDrp,
diff --git a/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/host/index copy.js b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/host/index copy.js
new file mode 100644
index 000000000000..413f05378900
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/host/index copy.js
@@ -0,0 +1,21 @@
+import angular from 'angular';
+import '@uirouter/angularjs';
+import 'oclazyload';
+
+const moduleName = 'ovhManagerDedicatedCloudDatacenterLazyloading';
+
+angular.module(moduleName, ['ui.router', 'oc.lazyLoad']).config(
+ /* @ngInject */ ($stateProvider) => {
+ $stateProvider.state('app.dedicatedCloud.details.datacenter.details.**', {
+ url: '/:datacenterId',
+ lazyLoad: ($transition$) => {
+ const $ocLazyLoad = $transition$.injector().get('$ocLazyLoad');
+ return import('./dedicatedCloud-datacenter.module').then((mod) =>
+ $ocLazyLoad.inject(mod.default || mod),
+ );
+ },
+ });
+ },
+);
+
+export default moduleName;
diff --git a/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/dedicatedCloud-datacenter-network.module.js b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/dedicatedCloud-datacenter-network.module.js
new file mode 100644
index 000000000000..0ef63fe79877
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/dedicatedCloud-datacenter-network.module.js
@@ -0,0 +1,13 @@
+import angular from 'angular';
+
+import networkComponent from '../../../components/dedicated-cloud/datacenter/network';
+import routing from './dedicatedCloud-datacenter-network.routing';
+
+const moduleName = 'ovhManagerDedicatedCloudDatacenterNetworkModule';
+
+angular
+ .module(moduleName, [networkComponent])
+ .config(routing)
+ .run(/* @ngTranslationsInject:json ./translations */);
+
+export default moduleName;
diff --git a/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/dedicatedCloud-datacenter-network.routing.js b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/dedicatedCloud-datacenter-network.routing.js
new file mode 100644
index 000000000000..8b672502d0c2
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/dedicatedCloud-datacenter-network.routing.js
@@ -0,0 +1,27 @@
+export default /* @ngInject */ ($stateProvider) => {
+ $stateProvider.state(
+ 'app.dedicatedCloud.details.datacenter.details.network',
+ {
+ url: '/network',
+ views: {
+ pccDatacenterView: 'ovhManagerDedicatedCloudDatacenterNetwork',
+ },
+ redirectTo: (transition) =>
+ transition
+ .injector()
+ .getAsync('resources')
+ .then((resources) =>
+ resources.length === 0
+ ? {
+ state:
+ 'app.dedicatedCloud.details.datacenter.details.network.onboarding',
+ }
+ : false,
+ ),
+ resolve: {
+ resources: /* @ngInject */ ($http) =>
+ $http.get('/dedicatedCloud').then(({ data }) => data),
+ },
+ },
+ );
+};
diff --git a/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/index.js b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/index.js
new file mode 100644
index 000000000000..bbd8bc1c01d4
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/index.js
@@ -0,0 +1,24 @@
+import angular from 'angular';
+import '@uirouter/angularjs';
+import 'oclazyload';
+
+const moduleName = 'ovhManagerDedicatedCloudDatacenterNetworkLazyloading';
+
+angular.module(moduleName, ['ui.router', 'oc.lazyLoad']).config(
+ /* @ngInject */ ($stateProvider) => {
+ $stateProvider.state(
+ 'app.dedicatedCloud.details.datacenter.details.network.**',
+ {
+ url: '/network',
+ lazyLoad: ($transition$) => {
+ const $ocLazyLoad = $transition$.injector().get('$ocLazyLoad');
+ return import(
+ './dedicatedCloud-datacenter-network.module'
+ ).then((mod) => $ocLazyLoad.inject(mod.default || mod));
+ },
+ },
+ );
+ },
+);
+
+export default moduleName;
diff --git a/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.module.js b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.module.js
new file mode 100644
index 000000000000..ca48c8b6b8ee
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.module.js
@@ -0,0 +1,13 @@
+import angular from 'angular';
+
+import networkOnboardingComponent from '../../../../components/dedicated-cloud/datacenter/network/onboarding';
+import routing from './dedicatedCloud-datacenter-network-onboarding.routing';
+
+const moduleName = 'ovhManagerDedicatedCloudDatacenterNetworkOnboardingModule';
+
+angular
+ .module(moduleName, [networkOnboardingComponent])
+ .config(routing)
+ .run(/* @ngTranslationsInject:json ./translations */);
+
+export default moduleName;
diff --git a/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.routing.js b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.routing.js
new file mode 100644
index 000000000000..f39854a91c71
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/onboarding/dedicatedCloud-datacenter-network-onboarding.routing.js
@@ -0,0 +1,28 @@
+export default /* @ngInject */ ($stateProvider) => {
+ $stateProvider.state(
+ 'app.dedicatedCloud.details.datacenter.details.network.onboarding',
+ {
+ url: '/onboarding',
+ views: {
+ pccDatacenterView:
+ 'ovhManagerDedicatedCloudDatacenterNetworkOnboarding',
+ },
+ redirectTo: (transition) =>
+ transition
+ .injector()
+ .getAsync('resources')
+ .then((resources) =>
+ resources.length === 0
+ ? {
+ state:
+ 'app.dedicatedCloud.details.datacenter.details.network',
+ }
+ : false,
+ ),
+ resolve: {
+ resources: /* @ngInject */ ($http) =>
+ $http.get('/dedicatedCloud').then(({ data }) => data),
+ },
+ },
+ );
+};
diff --git a/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/onboarding/index.js b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/onboarding/index.js
new file mode 100644
index 000000000000..09be487572f0
--- /dev/null
+++ b/packages/manager/apps/dedicated/client/app/dedicatedCloud/datacenter/network/onboarding/index.js
@@ -0,0 +1,25 @@
+import angular from 'angular';
+import '@uirouter/angularjs';
+import 'oclazyload';
+
+const moduleName =
+ 'ovhManagerDedicatedCloudDatacenterNetworkOnboardingLazyloading';
+
+angular.module(moduleName, ['ui.router', 'oc.lazyLoad']).config(
+ /* @ngInject */ ($stateProvider) => {
+ $stateProvider.state(
+ 'app.dedicatedCloud.details.datacenter.details.network.onboarding.**',
+ {
+ url: '/network',
+ lazyLoad: ($transition$) => {
+ const $ocLazyLoad = $transition$.injector().get('$ocLazyLoad');
+ return import(
+ './dedicatedCloud-datacenter-network-onboarding.module'
+ ).then((mod) => $ocLazyLoad.inject(mod.default || mod));
+ },
+ },
+ );
+ },
+);
+
+export default moduleName;