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)
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 = {
@ -375,6 +375,11 @@ delete_.params = {
optional: true,
type: 'boolean',
},
force: {
optional: true,
type: 'boolean',
},
}
delete_.resolve = {
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}`)
const { $ref } = vm
@ -661,6 +661,12 @@ export default class Xapi extends XapiBase {
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
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(
this.getObject(vmId),
deleteDisks
deleteDisks,
force
)
}