fix(xo-web/VM): allow self-service user to insert CD (#2647)
Fixes #2503
This commit is contained in:
parent
01a5963947
commit
a02d393457
@ -411,7 +411,9 @@ insertCd.params = {
|
|||||||
|
|
||||||
insertCd.resolve = {
|
insertCd.resolve = {
|
||||||
vm: ['id', 'VM', 'operate'],
|
vm: ['id', 'VM', 'operate'],
|
||||||
vdi: ['cd_id', 'VDI', 'view'],
|
// Not compatible with resource sets.
|
||||||
|
// FIXME: find a workaround.
|
||||||
|
vdi: ['cd_id', 'VDI', ''],
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
|
@ -7,19 +7,23 @@ import Icon from 'icon'
|
|||||||
import propTypes from './prop-types-decorator'
|
import propTypes from './prop-types-decorator'
|
||||||
import Tooltip from 'tooltip'
|
import Tooltip from 'tooltip'
|
||||||
import { alert } from 'modal'
|
import { alert } from 'modal'
|
||||||
import { connectStore } from './utils'
|
import { isAdmin } from 'selectors'
|
||||||
import { SelectVdi } from './select-objects'
|
import { SelectVdi, SelectResourceSetsVdi } from './select-objects'
|
||||||
|
import { addSubscriptions, connectStore, resolveResourceSet } from './utils'
|
||||||
|
import { ejectCd, insertCd, subscribeResourceSets } from './xo'
|
||||||
import {
|
import {
|
||||||
createGetObjectsOfType,
|
createGetObjectsOfType,
|
||||||
createFinder,
|
createFinder,
|
||||||
createGetObject,
|
createGetObject,
|
||||||
createSelector,
|
createSelector,
|
||||||
} from './selectors'
|
} from './selectors'
|
||||||
import { ejectCd, insertCd } from './xo'
|
|
||||||
|
|
||||||
@propTypes({
|
@propTypes({
|
||||||
vm: propTypes.object.isRequired,
|
vm: propTypes.object.isRequired,
|
||||||
})
|
})
|
||||||
|
@addSubscriptions({
|
||||||
|
resourceSets: subscribeResourceSets,
|
||||||
|
})
|
||||||
@connectStore(() => {
|
@connectStore(() => {
|
||||||
const getCdDrive = createFinder(
|
const getCdDrive = createFinder(
|
||||||
createGetObjectsOfType('VBD').pick((_, { vm }) => vm.$VBDs),
|
createGetObjectsOfType('VBD').pick((_, { vm }) => vm.$VBDs),
|
||||||
@ -35,6 +39,7 @@ import { ejectCd, insertCd } from './xo'
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
cdDrive: getCdDrive,
|
cdDrive: getCdDrive,
|
||||||
|
isAdmin,
|
||||||
mountedIso: getMountedIso,
|
mountedIso: getMountedIso,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -55,6 +60,17 @@ export default class IsoDevice extends Component {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
_getResolvedResourceSet = createSelector(
|
||||||
|
createFinder(
|
||||||
|
() => this.props.resourceSets,
|
||||||
|
createSelector(
|
||||||
|
() => this.props.vm.resourceSet,
|
||||||
|
id => resourceSet => resourceSet.id === id
|
||||||
|
)
|
||||||
|
),
|
||||||
|
resolveResourceSet
|
||||||
|
)
|
||||||
|
|
||||||
_handleInsert = iso => {
|
_handleInsert = iso => {
|
||||||
const { vm } = this.props
|
const { vm } = this.props
|
||||||
|
|
||||||
@ -70,13 +86,17 @@ export default class IsoDevice extends Component {
|
|||||||
_showWarning = () => alert(_('cdDriveNotInstalled'), _('cdDriveInstallation'))
|
_showWarning = () => alert(_('cdDriveNotInstalled'), _('cdDriveInstallation'))
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { cdDrive, mountedIso } = this.props
|
const { cdDrive, isAdmin, mountedIso } = this.props
|
||||||
|
const resourceSet = this._getResolvedResourceSet()
|
||||||
|
const useResourceSet = !(isAdmin || resourceSet === undefined)
|
||||||
|
const SelectVdi_ = useResourceSet ? SelectResourceSetsVdi : SelectVdi
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='input-group'>
|
<div className='input-group'>
|
||||||
<SelectVdi
|
<SelectVdi_
|
||||||
srPredicate={this._getPredicate()}
|
|
||||||
onChange={this._handleInsert}
|
onChange={this._handleInsert}
|
||||||
|
resourceSet={useResourceSet ? resourceSet : undefined}
|
||||||
|
srPredicate={this._getPredicate()}
|
||||||
value={mountedIso}
|
value={mountedIso}
|
||||||
/>
|
/>
|
||||||
<span className='input-group-btn'>
|
<span className='input-group-btn'>
|
||||||
|
Loading…
Reference in New Issue
Block a user