fix(xo-web/jobs/vm.revert): use the snapshot's id instead of the vm's id (#2685)
Fixes #2498
This commit is contained in:
parent
c62cab39f1
commit
60085798f2
@ -1058,12 +1058,12 @@ export function revert ({ snapshot, snapshotBefore }) {
|
||||
}
|
||||
|
||||
revert.params = {
|
||||
id: { type: 'string' },
|
||||
snapshot: { type: 'string' },
|
||||
snapshotBefore: { type: 'boolean', optional: true },
|
||||
}
|
||||
|
||||
revert.resolve = {
|
||||
snapshot: ['id', 'VM-snapshot', 'administrate'],
|
||||
snapshot: ['snapshot', 'VM-snapshot', 'administrate'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
@ -207,6 +207,7 @@ const messages = {
|
||||
selectSshKey: 'Select SSH key(s)…',
|
||||
selectSrs: 'Select SR(s)…',
|
||||
selectVms: 'Select VM(s)…',
|
||||
selectVmSnapshots: 'Select snapshot(s)…',
|
||||
selectVmTemplates: 'Select VM template(s)…',
|
||||
selectTags: 'Select tag(s)…',
|
||||
selectVdis: 'Select disk(s)…',
|
||||
|
@ -420,6 +420,27 @@ export const SelectVm = makeStoreSelect(
|
||||
|
||||
// ===================================================================
|
||||
|
||||
export const SelectVmSnapshot = makeStoreSelect(
|
||||
() => {
|
||||
const getSnapshotsByVms = createGetObjectsOfType('VM-snapshot')
|
||||
.filter(getPredicate)
|
||||
.sort()
|
||||
.groupBy('$snapshot_of')
|
||||
|
||||
const getVms = createGetObjectsOfType('VM')
|
||||
.pick(createSelector(getSnapshotsByVms, keys))
|
||||
.sort()
|
||||
|
||||
return {
|
||||
xoObjects: getSnapshotsByVms,
|
||||
xoContainers: getVms,
|
||||
}
|
||||
},
|
||||
{ placeholder: _('selectVmSnapshots') }
|
||||
)
|
||||
|
||||
// ===================================================================
|
||||
|
||||
export const SelectHostVm = makeStoreSelect(
|
||||
() => {
|
||||
const getHosts = createGetObjectsOfType('host')
|
||||
|
@ -5,9 +5,11 @@ import XoHostInput from './xo-host-input'
|
||||
import XoPoolInput from './xo-pool-input'
|
||||
import XoRemoteInput from './xo-remote-input'
|
||||
import XoRoleInput from './xo-role-input'
|
||||
import xoSnapshotInput from './xo-snapshot-input'
|
||||
import XoSrInput from './xo-sr-input'
|
||||
import XoSubjectInput from './xo-subject-input'
|
||||
import XoTagInput from './xo-tag-input'
|
||||
import XoVdiInput from './xo-vdi-input'
|
||||
import XoVmInput from './xo-vm-input'
|
||||
import { getType, getXoType } from '../json-schema-input/helpers'
|
||||
|
||||
@ -18,9 +20,11 @@ const XO_TYPE_TO_COMPONENT = {
|
||||
pool: XoPoolInput,
|
||||
remote: XoRemoteInput,
|
||||
role: XoRoleInput,
|
||||
snapshot: xoSnapshotInput,
|
||||
sr: XoSrInput,
|
||||
subject: XoSubjectInput,
|
||||
tag: XoTagInput,
|
||||
vdi: XoVdiInput,
|
||||
vm: XoVmInput,
|
||||
xoobject: XoHighLevelObjectInput,
|
||||
}
|
||||
|
@ -0,0 +1,27 @@
|
||||
import React from 'react'
|
||||
|
||||
import XoAbstractInput from './xo-abstract-input'
|
||||
import { PrimitiveInputWrapper } from '../json-schema-input/helpers'
|
||||
import { SelectVmSnapshot } from '../select-objects'
|
||||
|
||||
// ===================================================================
|
||||
|
||||
export default class snapshotInput extends XoAbstractInput {
|
||||
render () {
|
||||
const { props } = this
|
||||
|
||||
return (
|
||||
<PrimitiveInputWrapper {...props}>
|
||||
<SelectVmSnapshot
|
||||
disabled={props.disabled}
|
||||
hasSelectAll
|
||||
multi={props.multi}
|
||||
onChange={this._onChange}
|
||||
ref='input'
|
||||
required={props.required}
|
||||
value={props.value}
|
||||
/>
|
||||
</PrimitiveInputWrapper>
|
||||
)
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
import React from 'react'
|
||||
import { SelectVdi } from 'select-objects'
|
||||
|
||||
import XoAbstractInput from './xo-abstract-input'
|
||||
import { PrimitiveInputWrapper } from '../json-schema-input/helpers'
|
||||
|
||||
// ===================================================================
|
||||
|
||||
export default class VdiInput extends XoAbstractInput {
|
||||
render () {
|
||||
const { props } = this
|
||||
|
||||
return (
|
||||
<PrimitiveInputWrapper {...props}>
|
||||
<SelectVdi
|
||||
disabled={props.disabled}
|
||||
hasSelectAll
|
||||
multi={props.multi}
|
||||
onChange={this._onChange}
|
||||
ref='input'
|
||||
required={props.required}
|
||||
value={props.value}
|
||||
/>
|
||||
</PrimitiveInputWrapper>
|
||||
)
|
||||
}
|
||||
}
|
@ -1118,12 +1118,13 @@ export const importDeltaBackup = ({ remote, file, sr, mapVdisSrs }) =>
|
||||
)
|
||||
|
||||
import RevertSnapshotModalBody from './revert-snapshot-modal' // eslint-disable-line import/first
|
||||
export const revertSnapshot = vm =>
|
||||
export const revertSnapshot = snapshot =>
|
||||
confirm({
|
||||
title: _('revertVmModalTitle'),
|
||||
body: <RevertSnapshotModalBody />,
|
||||
}).then(
|
||||
snapshotBefore => _call('vm.revert', { id: resolveId(vm), snapshotBefore }),
|
||||
snapshotBefore =>
|
||||
_call('vm.revert', { snapshot: resolveId(snapshot), snapshotBefore }),
|
||||
noop
|
||||
)
|
||||
|
||||
|
@ -186,9 +186,12 @@ export default class Jobs extends Component {
|
||||
const titles = {
|
||||
Host: 'Host(s)',
|
||||
Pool: 'Pool(s)',
|
||||
Remote: 'Remote(s)',
|
||||
Role: 'Role(s)',
|
||||
Snapshot: 'Snapshot(s)',
|
||||
Sr: 'Storage(s)',
|
||||
Subject: 'Subject(s)',
|
||||
Vdi: 'Vdi(s)',
|
||||
Vm: 'VM(s)',
|
||||
XoObject: 'Object(s)',
|
||||
}
|
||||
@ -220,13 +223,25 @@ export default class Jobs extends Component {
|
||||
modifyProperty(property, 'Sr')
|
||||
} else if (
|
||||
includes(
|
||||
['host', 'host_id', 'target_host_id', 'targetHost'],
|
||||
[
|
||||
'affinityHost',
|
||||
'host',
|
||||
'host_id',
|
||||
'target_host_id',
|
||||
'targetHost',
|
||||
],
|
||||
key
|
||||
)
|
||||
) {
|
||||
modifyProperty(property, 'Host')
|
||||
} else if (includes(['vm'], key)) {
|
||||
modifyProperty(property, 'Vm')
|
||||
} else if (includes(['snapshot'], key)) {
|
||||
modifyProperty(property, 'Snapshot')
|
||||
} else if (includes(['remote', 'remoteId'], key)) {
|
||||
modifyProperty(property, 'Remote')
|
||||
} else if (includes(['vdi'], key)) {
|
||||
modifyProperty(property, 'Vdi')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user