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 = {
|
||||
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 Tooltip from 'tooltip'
|
||||
import { alert } from 'modal'
|
||||
import { connectStore } from './utils'
|
||||
import { SelectVdi } from './select-objects'
|
||||
import { isAdmin } from 'selectors'
|
||||
import { SelectVdi, SelectResourceSetsVdi } from './select-objects'
|
||||
import { addSubscriptions, connectStore, resolveResourceSet } from './utils'
|
||||
import { ejectCd, insertCd, subscribeResourceSets } from './xo'
|
||||
import {
|
||||
createGetObjectsOfType,
|
||||
createFinder,
|
||||
createGetObject,
|
||||
createSelector,
|
||||
} from './selectors'
|
||||
import { ejectCd, insertCd } from './xo'
|
||||
|
||||
@propTypes({
|
||||
vm: propTypes.object.isRequired,
|
||||
})
|
||||
@addSubscriptions({
|
||||
resourceSets: subscribeResourceSets,
|
||||
})
|
||||
@connectStore(() => {
|
||||
const getCdDrive = createFinder(
|
||||
createGetObjectsOfType('VBD').pick((_, { vm }) => vm.$VBDs),
|
||||
@ -35,6 +39,7 @@ import { ejectCd, insertCd } from './xo'
|
||||
|
||||
return {
|
||||
cdDrive: getCdDrive,
|
||||
isAdmin,
|
||||
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 => {
|
||||
const { vm } = this.props
|
||||
|
||||
@ -70,13 +86,17 @@ export default class IsoDevice extends Component {
|
||||
_showWarning = () => alert(_('cdDriveNotInstalled'), _('cdDriveInstallation'))
|
||||
|
||||
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 (
|
||||
<div className='input-group'>
|
||||
<SelectVdi
|
||||
srPredicate={this._getPredicate()}
|
||||
<SelectVdi_
|
||||
onChange={this._handleInsert}
|
||||
resourceSet={useResourceSet ? resourceSet : undefined}
|
||||
srPredicate={this._getPredicate()}
|
||||
value={mountedIso}
|
||||
/>
|
||||
<span className='input-group-btn'>
|
||||
|
Loading…
Reference in New Issue
Block a user