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',
deleteVmModalMessage:
'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',
migrateVmSelectHost: 'Select a destination host:',
migrateVmSelectMigrationNetwork: 'Select a migration network:',

View File

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