Fixes: https://tracker.ceph.com/issues/41687
Signed-off-by: Ricardo Marques <rimarques@suse.com>
(cherry picked from commit
299fc757e0bb8127b8cfb24ba752d8096f84ef72)
Conflicts:
src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-clients/cephfs-clients.component.ts
src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/hosts.component.ts
src/pybind/mgr/dashboard/frontend/src/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component.html
src/pybind/mgr/dashboard/frontend/src/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component.scss
Conflicts caused by "Master" using Bootstrap 4, but "Nautilus" using Bootstap 3.
this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
initialState: {
- itemDescription: this.i18n('iSCSI'),
+ itemDescription: this.i18n('iSCSI target'),
+ itemNames: [target_iqn],
submitActionObservable: () =>
this.taskWrapper.wrapTaskAroundCall({
task: new FinishedTask('iscsi/target/delete', {
this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
initialState: {
itemDescription: this.i18n('mirror peer'),
+ itemNames: [`${poolName} (${peerUUID})`],
submitActionObservable: () =>
new Observable((observer: Subscriber<any>) => {
this.taskWrapper
this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
initialState: {
itemDescription: 'RBD',
+ itemNames: [`${poolName}/${imageName}`],
submitActionObservable: () =>
this.taskWrapper.wrapTaskAroundCall({
task: new FinishedTask('rbd/delete', {
this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
initialState: {
itemDescription: this.i18n('RBD snapshot'),
+ itemNames: [snapshotName],
submitAction: () => this._asyncTask('deleteSnapshot', 'rbd/snap/delete', snapshotName)
}
});
this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
initialState: {
itemDescription: 'RBD',
+ itemNames: [`${poolName}/${imageName}`],
bodyTemplate: this.deleteTpl,
bodyContext: { $implicit: expiresAt },
submitActionObservable: () =>
this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
initialState: {
itemDescription: i18nSilence,
+ itemNames: [id],
actionDescription: this.actionLabels.EXPIRE,
submitActionObservable: () =>
new Observable((observer: Subscriber<any>) => {
this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
initialState: {
- itemDescription: this.i18n('NFS'),
+ itemDescription: this.i18n('NFS export'),
+ itemNames: [`${cluster_id}:${export_id}`],
submitActionObservable: () =>
this.taskWrapper.wrapTaskAroundCall({
task: new FinishedTask('nfs/delete', {
this.modalService.show(CriticalConfirmationModalComponent, {
initialState: {
itemDescription: this.i18n('erasure code profile'),
+ itemNames: [name],
submitActionObservable: () =>
this.taskWrapper.wrapTaskAroundCall({
task: new FinishedTask('ecp/delete', { name: name }),
this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
initialState: {
itemDescription: 'Pool',
+ itemNames: [name],
submitActionObservable: () =>
this.taskWrapper.wrapTaskAroundCall({
task: new FinishedTask(`${BASE_URL}/${URLVerbs.DELETE}`, { pool_name: name }),
itemDescription: this.selection.hasSingleSelection
? this.i18n('bucket')
: this.i18n('buckets'),
+ itemNames: this.selection.selected.map((bucket: any) => bucket['bid']),
submitActionObservable: () => {
return new Observable((observer: Subscriber<any>) => {
// Delete all selected data table rows.
this.bsModalService.show(CriticalConfirmationModalComponent, {
initialState: {
itemDescription: this.selection.hasSingleSelection ? this.i18n('user') : this.i18n('users'),
+ itemNames: this.selection.selected.map((user: any) => user['uid']),
submitActionObservable: (): Observable<any> => {
return new Observable((observer: Subscriber<any>) => {
// Delete all selected data table rows.
this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
initialState: {
itemDescription: 'Role',
+ itemNames: [name],
submitAction: () => this.deleteRole(name)
}
});
this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
initialState: {
itemDescription: 'User',
+ itemNames: [username],
submitAction: () => this.deleteUser(username)
}
});
<div class="modal-body">
<ng-container *ngTemplateOutlet="bodyTemplate; context: bodyContext"></ng-container>
<div class="question">
- <p i18n>Are you sure that you want to {{ actionDescription | lowercase }} the selected {{ itemDescription }}?</p>
+ <span *ngIf="itemNames; else noNames">
+ <p *ngIf="itemNames.length === 1; else manyNames"
+ i18n>Are you sure that you want to {{ actionDescription | lowercase }} <strong>{{ itemNames[0] }}</strong>?</p>
+ <ng-template #manyNames>
+ <p i18n>Are you sure that you want to {{ actionDescription | lowercase }} the selected items?</p>
+ <ul>
+ <li *ngFor="let itemName of itemNames"><strong>{{ itemName }}</strong></li>
+ </ul>
+ </ng-template >
+ </span>
+ <ng-template #noNames>
+ <p i18n>Are you sure that you want to {{ actionDescription | lowercase }} the selected {{ itemDescription }}?</p>
+ </ng-template>
<div class="form-group"
[ngClass]="{'has-error': deletionForm.showError('confirmation', formDir)}">
<div class="checkbox checkbox-primary">
.modal-body .question {
- font-weight: bold;
margin-top: 1em;
}
+.modal-body label {
+ font-weight: bold;
+}
.modal-body .question .checkbox {
padding-top: 7px;
}
submitAction: Function;
deletionForm: CdFormGroup;
itemDescription: 'entry';
+ itemNames: string[];
actionDescription = 'delete';
constructor(public modalRef: BsModalRef) {}