fix(xo-web/vtpm): fix various an error has occured (#7122)

Introduced by 8834af65f7
Introduced by 1a1dd0531d

Fix `an error has occurred` in the VM advanced tab and on the VM creation form
if the user does not have pool permission.
This commit is contained in:
Mathieu 2023-10-24 14:26:36 +00:00 committed by GitHub
parent 680f1e2f07
commit 77d9798319
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 9 deletions

View File

@ -1667,14 +1667,22 @@ export const migrateVms = vms =>
)
}, noop)
export const createVm = args => _call('vm.create', args)
export const createVm = async args => {
try {
return await _call('vm.create', args)
} catch (err) {
handlePoolDoesNotSupportVtpmError(err)
throw error
}
}
export const createVms = (args, nameLabels, cloudConfigs) =>
confirm({
export const createVms = async (args, nameLabels, cloudConfigs) => {
await confirm({
title: _('newVmCreateVms'),
body: _('newVmCreateVmsConfirm', { nbVms: nameLabels.length }),
}).then(() =>
Promise.all(
})
try {
return await Promise.all(
map(
nameLabels,
(
@ -1688,7 +1696,11 @@ export const createVms = (args, nameLabels, cloudConfigs) =>
})
)
)
)
} catch (error) {
handlePoolDoesNotSupportVtpmError(error)
throw error
}
}
export const getCloudInitConfig = template => _call('vm.getCloudInitConfig', { template })
@ -2156,8 +2168,26 @@ export const deleteAclRule = ({ protocol = undefined, port = undefined, ipRange
})
// VTPM -----------------------------------------------------------
const handlePoolDoesNotSupportVtpmError = err => {
if (
incorrectState.is(err, {
property: 'restrictions.restrict_vtpm',
expected: 'false',
})
) {
console.error(err)
throw new Error('This pool does not support VTPM')
}
}
export const createVtpm = vm => _call('vtpm.create', { id: resolveId(vm) })
export const createVtpm = async vm => {
try {
return await _call('vtpm.create', { id: resolveId(vm) })
} catch (err) {
handlePoolDoesNotSupportVtpmError(err)
throw err
}
}
export const deleteVtpm = vtpm => _call('vtpm.destroy', { id: resolveId(vtpm) })
// Network -----------------------------------------------------------

View File

@ -1576,7 +1576,7 @@ export default class NewVm extends BaseComponent {
</label>
) : null
const isVtpmSupported = pool.vtpmSupported
const isVtpmSupported = pool?.vtpmSupported ?? true
return (
<Section icon='new-vm-advanced' title='newVmAdvancedPanel' done={this._isAdvancedDone()}>

View File

@ -457,7 +457,7 @@ export default class TabAdvanced extends Component {
() => this.props.vm,
() => this.props.pool,
(vm, pool) => {
if (!pool.vtpmSupported) {
if (pool?.vtpmSupported === false) {
return _('vtpmNotSupported')
}
if (vm.boot.firmware !== 'uefi') {