feat(vm/delete): force param to bypass blocked_operations (#648)

See vatesfr/xo-web#2525
This commit is contained in:
Pierre Donias 2018-01-30 10:19:26 +01:00 committed by Julien Fontanet
parent d627fad299
commit d52bed9618
2 changed files with 17 additions and 5 deletions

View File

@ -322,7 +322,7 @@ create.resolve = {
// ------------------------------------------------------------------- // -------------------------------------------------------------------
async function delete_ ({ vm, delete_disks: deleteDisks = false }) { async function delete_ ({ vm, delete_disks: deleteDisks = false, force }) {
const xapi = this.getXapi(vm) const xapi = this.getXapi(vm)
this.getAllAcls().then(acls => { this.getAllAcls().then(acls => {
@ -365,7 +365,7 @@ async function delete_ ({ vm, delete_disks: deleteDisks = false }) {
) )
} }
return xapi.deleteVm(vm._xapiId, deleteDisks) return xapi.deleteVm(vm._xapiId, deleteDisks, force)
} }
delete_.params = { delete_.params = {
@ -375,6 +375,11 @@ delete_.params = {
optional: true, optional: true,
type: 'boolean', type: 'boolean',
}, },
force: {
optional: true,
type: 'boolean',
},
} }
delete_.resolve = { delete_.resolve = {
vm: ['id', ['VM', 'VM-snapshot', 'VM-template'], 'administrate'], vm: ['id', ['VM', 'VM-snapshot', 'VM-template'], 'administrate'],

View File

@ -650,7 +650,7 @@ export default class Xapi extends XapiBase {
})) }))
} }
async _deleteVm (vm, deleteDisks = true) { async _deleteVm (vm, deleteDisks = true, force = false) {
debug(`Deleting VM ${vm.name_label}`) debug(`Deleting VM ${vm.name_label}`)
const { $ref } = vm const { $ref } = vm
@ -661,6 +661,12 @@ export default class Xapi extends XapiBase {
await this.call('VM.hard_shutdown', $ref) await this.call('VM.hard_shutdown', $ref)
} }
if (force) {
await this._updateObjectMapProperty(vm, 'blocked_operations', {
destroy: null,
})
}
// ensure the vm record is up-to-date // ensure the vm record is up-to-date
vm = await this.barrier('VM', $ref) vm = await this.barrier('VM', $ref)
@ -702,10 +708,11 @@ export default class Xapi extends XapiBase {
]) ])
} }
async deleteVm (vmId, deleteDisks) { async deleteVm (vmId, deleteDisks, force) {
return /* await */ this._deleteVm( return /* await */ this._deleteVm(
this.getObject(vmId), this.getObject(vmId),
deleteDisks deleteDisks,
force
) )
} }