feat: can force delete a VM if operation is blocked (#2598)

Fixes #2525
This commit is contained in:
Pierre Donias 2018-01-30 10:48:04 +01:00 committed by Julien Fontanet
parent 5ecc31b977
commit f94212729a
2 changed files with 25 additions and 20 deletions

View File

@ -1199,6 +1199,9 @@ const messages = {
deleteVmModalTitle: 'Delete VM', deleteVmModalTitle: 'Delete VM',
deleteVmModalMessage: deleteVmModalMessage:
'Are you sure you want to delete this VM? ALL VM DISKS WILL BE REMOVED', 'Are you sure you want to delete this VM? ALL VM DISKS WILL BE REMOVED',
deleteVmBlockedModalTitle: 'Blocked operation',
deleteVmBlockedModalMessage:
'Removing the VM is a blocked operation. Would you like to remove it anyway?',
migrateVmModalTitle: 'Migrate VM', migrateVmModalTitle: 'Migrate VM',
migrateVmSelectHost: 'Select a destination host:', migrateVmSelectHost: 'Select a destination host:',
migrateVmSelectMigrationNetwork: 'Select a migration network:', migrateVmSelectMigrationNetwork: 'Select a migration network:',

View File

@ -944,11 +944,7 @@ export const deleteTemplates = templates =>
body: _('templateDeleteModalBody', { templates: templates.length }), body: _('templateDeleteModalBody', { templates: templates.length }),
}).then( }).then(
() => () =>
Promise.all( Promise.all(map(resolveIds(templates), id => _call('vm.delete', { id }))),
map(resolveIds(templates), id =>
_call('vm.delete', { id, delete_disks: true })
)
),
noop noop
) )
@ -964,10 +960,7 @@ export const deleteSnapshot = vm =>
confirm({ confirm({
title: _('deleteSnapshotModalTitle'), title: _('deleteSnapshotModalTitle'),
body: _('deleteSnapshotModalMessage'), body: _('deleteSnapshotModalMessage'),
}).then( }).then(() => _call('vm.delete', { id: resolveId(vm) }), noop)
() => _call('vm.delete', { id: resolveId(vm), delete_disks: true }),
noop
)
export const deleteSnapshots = vms => export const deleteSnapshots = vms =>
confirm({ confirm({
@ -975,11 +968,7 @@ export const deleteSnapshots = vms =>
body: _('deleteSnapshotsModalMessage', { nVms: vms.length }), body: _('deleteSnapshotsModalMessage', { nVms: vms.length }),
}).then( }).then(
() => () =>
Promise.all( Promise.all(map(vms, vm => _call('vm.delete', { id: resolveId(vm) }))),
map(vms, vm =>
_call('vm.delete', { id: resolveId(vm), delete_disks: true })
)
),
noop noop
) )
@ -1053,14 +1042,25 @@ export const createVms = (args, nameLabels) =>
export const getCloudInitConfig = template => export const getCloudInitConfig = template =>
_call('vm.getCloudInitConfig', { template }) _call('vm.getCloudInitConfig', { template })
export const deleteVm = vm => export const deleteVm = (vm, retryWithForce = true) =>
confirm({ confirm({
title: _('deleteVmModalTitle'), title: _('deleteVmModalTitle'),
body: _('deleteVmModalMessage'), body: _('deleteVmModalMessage'),
}).then( })
() => _call('vm.delete', { id: resolveId(vm), delete_disks: true }), .then(() => _call('vm.delete', { id: resolveId(vm) }), noop)
noop .catch(error => {
) if (forbiddenOperation.is(error) || !retryWithForce) {
throw error
}
return confirm({
title: _('deleteVmBlockedModalTitle'),
body: _('deleteVmBlockedModalMessage'),
}).then(
() => _call('vm.delete', { id: resolveId(vm), force: true }),
noop
)
})
export const deleteVms = vms => export const deleteVms = vms =>
confirm({ confirm({
@ -1072,7 +1072,9 @@ export const deleteVms = vms =>
}, },
}).then( }).then(
() => () =>
map(vms, vmId => _call('vm.delete', { id: vmId, delete_disks: true })), Promise.all(
map(vms, vmId => _call('vm.delete', { id: resolveId(vmId) }))
),
noop noop
) )