Skip to content

Commit

Permalink
feat(dedicated.pcc): add Managed VCD migration
Browse files Browse the repository at this point in the history
resolves: MANAGER-14400

Signed-off-by: David Arsène <david.arsene.ext@ovhcloud.com>
  • Loading branch information
darsene committed Jun 21, 2024
1 parent 7ee4fb6 commit 4df0244
Show file tree
Hide file tree
Showing 20 changed files with 161 additions and 57 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ export default {
setMessage: '<',
trackingPrefix: '<',
dedicatedCloudDescription: '<',
managedVCDAvailability: '<',
},
template,
};
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@
data-on-terminate="$ctrl.onTerminate()"
></ovh-manager-pcc-dashboard-service-management>
<ovh-manager-pcc-dashboard-vmware-cloud-director
data-ng-if="$ctrl.dedicatedCloudDescription.canMigrateToVCD"
data-ng-if="$ctrl.managedVCDAvailability"
data-go-to-vcd-order="$ctrl.goToVcdOrder"
data-product-id="$ctrl.productId"
></ovh-manager-pcc-dashboard-vmware-cloud-director>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,24 @@
export default class {
/* @ngInject */
constructor($translate, DedicatedCloud, coreURLBuilder) {
constructor($translate, DedicatedCloud) {
this.$translate = $translate;
this.DedicatedCloud = DedicatedCloud;
this.coreURLBuilder = coreURLBuilder;
}

$onInit() {
this.isSubscribed = false;
this.guideLink = this.DedicatedCloud.getVCDGuideLink();
this.messageLink = this.coreURLBuilder.buildURL(
'dedicated',
'#/useraccount/emails',
);
this.checkSubscription();
this.checkMigration();
}

checkSubscription() {
checkMigration() {
this.loading = true;
return this.DedicatedCloud.hasSubscribedVCDOffer(this.productId)
.then((isSubscribed) => {
this.isSubscribed = isSubscribed;
this.subscriptionLabel = this.$translate.instant(
isSubscribed
? 'dedicatedCloud_vmware_cloud_director_subscribed'
: 'dedicatedCloud_vmware_cloud_director_not_subscribed',
{
link: this.guideLink,
},
return this.DedicatedCloud.getManagedVCDMigrationState(this.productId)
.then((state) => {
this.vcdMigrationState = state;
this.migrationTitle = this.$translate.instant(
this.vcdMigrationState.isDone
? 'dedicatedCloud_vmware_cloud_director_migration'
: 'dedicatedCloud_vmware_cloud_director_validate_migration',
);
})
.finally(() => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
<div class="row text-center" data-ng-if="$ctrl.loading">
<oui-spinner data-size="s"></oui-spinner>
</div>
<div class="oui-tile mt-3" data-ng-if="!$ctrl.loading">
<div
class="oui-tile mt-3"
data-ng-if="!$ctrl.loading && $ctrl.vcdMigrationState.isAllowed"
>
<h4 class="oui-tile__title oui-heading_4">
<span
data-translate="dedicatedCloud_vmware_cloud_director_title"
Expand All @@ -13,51 +16,53 @@ <h4 class="oui-tile__title oui-heading_4">
</span>
</h4>

<oui-tile-definition
data-term="{{:: 'dedicatedCloud_vmware_cloud_director_subscription' | translate }}"
>
<oui-tile-description>
<p data-ng-bind-html=":: $ctrl.subscriptionLabel"></p>
<oui-tile-definition data-term="{{:: $ctrl.migrationTitle }}">
<oui-tile-description data-ng-if=":: $ctrl.vcdMigrationState.isDone">
<span
data-ng-if="$ctrl.isSubscribed"
class="oui-badge oui-badge_success"
data-translate="dedicatedCloud_vmware_cloud_director_subscribed_status"
data-translate="dedicatedCloud_vmware_cloud_director_migration_confirmed"
>
</span>
<p
class="pt-1"
data-translate="dedicatedCloud_vmware_cloud_director_migration_confirmed_detail"
></p>
</oui-tile-description>

<oui-action-menu
data-compact
data-placement="end"
data-ng-if=":: !$ctrl.isSubscribed"
>
<oui-action-menu-item data-on-click="$ctrl.goToVcdOrder()">
<oui-tile-description data-ng-if=":: !$ctrl.vcdMigrationState.isDone">
<p
data-translate="dedicatedCloud_vmware_cloud_director_validate_migration_detail"
></p>
<oui-button
data-variant="primary"
data-on-click="$ctrl.goToVcdOrder()"
>
<span
data-translate="dedicatedCloud_vmware_cloud_director_order"
data-translate="dedicatedCloud_vmware_cloud_director_validate"
></span>
</oui-action-menu-item>
</oui-action-menu>
</oui-button>
</oui-tile-description>
</oui-tile-definition>

<oui-tile-definition
data-term="{{:: 'dedicatedCloud_vmware_cloud_director_useful_links' | translate }}"
>
<oui-tile-description>
<oui-tile-description data-ng-if=":: $ctrl.vcdMigrationState.isDone">
<a
data-ng-href="{{ :: $ctrl.messageLink}}"
data-ng-href="{{ :: $ctrl.guideLink}}"
target="_blank"
rel="nooponer"
>
<span
data-translate="dedicatedCloud_vmware_cloud_director_announcement_message"
data-translate="dedicatedCloud_vmware_cloud_director_migration_documentation"
>
</span>
<i
class="pl-1 oui-icon oui-icon-external-link"
aria-hidden="true"
></i>
</a>
<br />
</oui-tile-description>
<oui-tile-description data-ng-if=":: !$ctrl.vcdMigrationState.isDone">
<a
data-ng-href="{{ :: $ctrl.guideLink}}"
target="_blank"
Expand All @@ -72,6 +77,22 @@ <h4 class="oui-tile__title oui-heading_4">
aria-hidden="true"
></i>
</a>
<br />
<a
data-ng-href="{{ :: $ctrl.guideLink}}"
target="_blank"
rel="nooponer"
>
<span
data-translate="dedicatedCloud_vmware_cloud_director_offer_terms_and_conditions"
>
</span>
<i
class="pl-1 oui-icon oui-icon-external-link"
aria-hidden="true"
></i>
</a>
<br />
</oui-tile-description>
</oui-tile-definition>
</div>
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
{
"dedicatedCloud_vmware_cloud_director_title": "Migration vers VCD",
"dedicatedCloud_vmware_cloud_director_title": "Migration vers l'offre Managed VCD",
"dedicatedCloud_vmware_cloud_director_offer_detail": "Descriptif de l'offre VCD",
"dedicatedCloud_vmware_cloud_director_offer_terms_and_conditions": "Conditions particulières du service",
"dedicatedCloud_vmware_cloud_director_new": "New",
"dedicatedCloud_vmware_cloud_director_subscription": "Souscription",
"dedicatedCloud_vmware_cloud_director_announcement_message": "Message d'annonce",
"dedicatedCloud_vmware_cloud_director_migration": "Migration",
"dedicatedCloud_vmware_cloud_director_migration_confirmed": "Migration confirmée",
"dedicatedCloud_vmware_cloud_director_migration_conf": "Migration confirmée",
"dedicatedCloud_vmware_cloud_director_validate_migration": "Valider la migration",
"dedicatedCloud_vmware_cloud_director_migration_documentation": "Doc process de migration",
"dedicatedCloud_vmware_cloud_director_useful_links": "Liens utiles",
"dedicatedCloud_vmware_cloud_director_subscribed_status": "Souscrit",
"dedicatedCloud_vmware_cloud_director_subscribed": "Vous avez souscrit à la migration vers l'offre <a href=\"{{link}}\" target=\"_blank\" rel=\"noopener\">VMware Cloud Director (VCD)</a>",
"dedicatedCloud_vmware_cloud_director_not_subscribed": "Souscription à la migration vers l'offre <a href=\"{{link}}\" target=\"_blank\" rel=\"noopener\">VMware Cloud Director (VCD)</a> avant le 30 avril 2024 inclus.",
"dedicatedCloud_vmware_cloud_director_order": "Souscrire à l'offre VCD"
"dedicatedCloud_vmware_cloud_director_validate_migration_detail": "Validez la migration de votre service vers l'offre Managed VCD on OVHcloud et acceptez les conditions particulières du service.",
"dedicatedCloud_vmware_cloud_director_migration_confirmed_detail": "La migration de votre service vers l'offre Managed VCD est bien prise en compte. Nos équipes reviendront vers vous concernant la planification et les modalités de l'opération.",
"dedicatedCloud_vmware_cloud_director_validate": "Valider"
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
</div>
</div>

<ovh-manager-pcc-managed-vcd-migration-banner />

<oui-header-tabs>
<oui-header-tabs-item data-state="{{:: $ctrl.dashboardState }}"
><span data-translate="dedicatedCloud_tab_dashboard"></span
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@ export const UNAVAILABLE_PCC_CODE = [400, 404];

export const VCD_PLAN_CODE = 'pcc-option-to-vcd-migration';

export const MANAGED_VCD_MIGRATION_STATUS = {
TO_MIGRATE: 'TO_MIGRATE',
MIGRATED: 'MIGRATED',
NOT_ALLOWED: 'NOT_ALLOWED',
};

export const MANAGED_VCD_MIGRATION_STATE = {
0: MANAGED_VCD_MIGRATION_STATUS.NOT_ALLOWED,
1: MANAGED_VCD_MIGRATION_STATUS.TO_MIGRATE,
2: MANAGED_VCD_MIGRATION_STATUS.MIGRATED,
};

export const VCD_GUIDE_LINKS = {
FR: 'https://www.ovhcloud.com/fr/lp/vmware-vcd-evolution/',
DEFAULT: 'https://www.ovhcloud.com/en/lp/vmware-vcd-evolution/',
Expand All @@ -23,4 +35,6 @@ export default {
VCD_PLAN_CODE,
VCD_GUIDE_LINKS,
VCD_SERVICE_PACK_PRICING_MODE,
MANAGED_VCD_MIGRATION_STATUS,
MANAGED_VCD_MIGRATION_STATE,
};
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
</div>
</div>

<ovh-manager-pcc-managed-vcd-migration-banner />

<oui-header-tabs>
<oui-header-tabs-item data-state="{{:: $ctrl.pccDashboardState }}"
><span data-translate="dedicatedCloud_tab_dashboard"></span
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import {
} from './dedicatedCloud.constant';

import { VM_ENCRYPTION_KMS } from './security/dedicatedCloud-security.constants';
import VCDMigrationState from './vcdMigrationState.class';

const moduleName = 'ovhManagerPccService';

Expand Down Expand Up @@ -1721,12 +1722,12 @@ class DedicatedCloudService {
);
}

hasSubscribedVCDOffer(serviceName) {
getManagedVCDMigrationState(serviceName) {
return this.$http
.get('/services', {
params: { resourceName: `${serviceName}/option/tovcdmigration` },
})
.then(({ data }) => data?.length > 0);
.then(({ data }) => new VCDMigrationState(data?.length));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import drpService from './datacenter/drp/dedicatedCloud-datacenter-drp.service';
import dedicatedCloudservice from './dedicatedCloud.service';
import ServicePackService from './service-pack/service-pack.service';
import OptionsService from './dashboard/tiles/options/options.service';
import ManagedVcdMigrationBanner from './vmware-cloud-director/migration-banner';

const moduleName = 'ovhManagerPcc';

Expand All @@ -19,6 +20,7 @@ angular
ngOvhFeatureFlipping,
OptionsService,
ServicePackService,
ManagedVcdMigrationBanner,
])
.component('ovhManagerPcc', component)
.run(/* @ngTranslationsInject:json ./translations */);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import {
MANAGED_VCD_MIGRATION_STATE,
MANAGED_VCD_MIGRATION_STATUS,
} from './dedicatedCloud.constant';

export default class VCDMigrationState {
constructor(value) {
this.state = MANAGED_VCD_MIGRATION_STATE[Math.min(value ?? 0, 2)];
}

get isDone() {
return this.state === MANAGED_VCD_MIGRATION_STATUS.MIGRATED;
}

get isAllowed() {
return this.state !== MANAGED_VCD_MIGRATION_STATUS.NOT_ALLOWED;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import controller from './controller';
import template from './template.html';

export default {
controller,
template,
name: 'ovhManagerPccManagedVcdMigrationBanner',
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export default class ManagedVcdMigrationBannerCtrl {
$onInit() {
this.pendingMigration = true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import component from './component';

const moduleName = 'ovhManagerPccDashboardManagedVcdMigrationBanner';

angular
.module(moduleName, ['oui', 'pascalprecht.translate'])
.component(component.name, component)
.run(/* @ngTranslationsInject:json ./translations */);

export default moduleName;
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<oui-message
class="pt-2"
data-type="warning"
data-ng-if="$ctrl.pendingMigration"
>
<span
data-translate="dedicatedCloud_managed_vcd_migration_pending_warning"
></span>
</oui-message>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"dedicatedCloud_managed_vcd_migration_pending_warning": "Attention migration en cours : les modifications de votre service ne seront pas prises en compte"
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ export default /* @ngInject */ ($stateProvider) =>
redirectTo: (transition) =>
transition
.injector()
.getAsync('dedicatedCloudDescription')
.then((dedicatedCloudDescription) =>
!dedicatedCloudDescription.canMigrateToVCD
.getAsync('managedVCDAvailability')
.then((managedVCDAvailability) =>
!managedVCDAvailability
? { state: 'app.dedicatedCloud.details.dashboard' }
: false,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,13 @@ export default /* @ngInject */ ($stateProvider) => {
DedicatedCloud,
) => DedicatedCloud.getDescription($stateParams.productId),

managedVCDAvailability: /* @ngInject */ (ovhFeatureFlipping) =>
ovhFeatureFlipping
.checkFeatureAvailability('hpc-vmware-managed-vcd')
.then((featureAvailability) =>
featureAvailability.isFeatureAvailable('hpc-vmware-managed-vcd'),
),

dedicatedCloudServiceInfos: /* @ngInject */ (
$stateParams,
OvhApiDedicatedCloud,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ export default /* @ngInject */ ($stateProvider) =>
redirectTo: (transition) =>
transition
.injector()
.getAsync('dedicatedCloudDescription')
.then((dedicatedCloudDescription) =>
!dedicatedCloudDescription.canMigrateToVCD
.getAsync('managedVCDAvailability')
.then((managedVCDAvailability) =>
!managedVCDAvailability
? { state: 'app.managedBaremetal.details.dashboard' }
: false,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,13 @@ export default /* @ngInject */ ($stateProvider) => {
DedicatedCloud,
) => DedicatedCloud.getDescription($stateParams.productId),

managedVCDAvailability: /* @ngInject */ (ovhFeatureFlipping) =>
ovhFeatureFlipping
.checkFeatureAvailability('hpc-vmware-managed-vcd')
.then((featureAvailability) =>
featureAvailability.isFeatureAvailable('hpc-vmware-managed-vcd'),
),

dedicatedCloudServiceInfos: /* @ngInject */ (
$stateParams,
OvhApiDedicatedCloud,
Expand Down

0 comments on commit 4df0244

Please sign in to comment.