feat(vm/tab-advanced): move in/out of a resource set (#2601)
Fixes #1913
This commit is contained in:
parent
2b5f7dc8de
commit
83a3754fe5
@ -868,6 +868,8 @@ const messages = {
|
|||||||
unknownOsKernel: 'Unknown',
|
unknownOsKernel: 'Unknown',
|
||||||
unknownOriginalTemplate: 'Unknown',
|
unknownOriginalTemplate: 'Unknown',
|
||||||
vmLimitsLabel: 'VM limits',
|
vmLimitsLabel: 'VM limits',
|
||||||
|
resourceSet: 'Resource set',
|
||||||
|
resourceSetNone: 'None',
|
||||||
vmCpuLimitsLabel: 'CPU limits',
|
vmCpuLimitsLabel: 'CPU limits',
|
||||||
vmCpuTopology: 'Topology',
|
vmCpuTopology: 'Topology',
|
||||||
vmChooseCoresPerSocket: 'Default behavior',
|
vmChooseCoresPerSocket: 'Default behavior',
|
||||||
|
@ -113,7 +113,10 @@ const xoItemToRender = {
|
|||||||
),
|
),
|
||||||
resourceSet: resourceSet => (
|
resourceSet: resourceSet => (
|
||||||
<span>
|
<span>
|
||||||
|
<strong>
|
||||||
<Icon icon='resource-set' /> {resourceSet.name}
|
<Icon icon='resource-set' /> {resourceSet.name}
|
||||||
|
</strong>{' '}
|
||||||
|
({resourceSet.id})
|
||||||
</span>
|
</span>
|
||||||
),
|
),
|
||||||
sshKey: key => (
|
sshKey: key => (
|
||||||
|
@ -12,10 +12,11 @@ import Tooltip from 'tooltip'
|
|||||||
import { Toggle } from 'form'
|
import { Toggle } from 'form'
|
||||||
import { Number, Size, Text, XoSelect } from 'editable'
|
import { Number, Size, Text, XoSelect } from 'editable'
|
||||||
import { Container, Row, Col } from 'grid'
|
import { Container, Row, Col } from 'grid'
|
||||||
import { SelectVgpuType } from 'select-objects'
|
import { SelectResourceSet, SelectVgpuType } from 'select-objects'
|
||||||
import { confirm } from 'modal'
|
import { confirm } from 'modal'
|
||||||
import { every, includes, isEmpty, map, uniq } from 'lodash'
|
import { assign, every, find, includes, isEmpty, map, uniq } from 'lodash'
|
||||||
import {
|
import {
|
||||||
|
addSubscriptions,
|
||||||
connectStore,
|
connectStore,
|
||||||
formatSize,
|
formatSize,
|
||||||
getCoresPerSocketPossibilities,
|
getCoresPerSocketPossibilities,
|
||||||
@ -34,12 +35,13 @@ import {
|
|||||||
restartVm,
|
restartVm,
|
||||||
resumeVm,
|
resumeVm,
|
||||||
stopVm,
|
stopVm,
|
||||||
|
subscribeResourceSets,
|
||||||
suspendVm,
|
suspendVm,
|
||||||
XEN_DEFAULT_CPU_CAP,
|
XEN_DEFAULT_CPU_CAP,
|
||||||
XEN_DEFAULT_CPU_WEIGHT,
|
XEN_DEFAULT_CPU_WEIGHT,
|
||||||
XEN_VIDEORAM_VALUES,
|
XEN_VIDEORAM_VALUES,
|
||||||
} from 'xo'
|
} from 'xo'
|
||||||
import { createGetObjectsOfType, createSelector } from 'selectors'
|
import { createGetObjectsOfType, createSelector, isAdmin } from 'selectors'
|
||||||
|
|
||||||
const forceReboot = vm => restartVm(vm, true)
|
const forceReboot = vm => restartVm(vm, true)
|
||||||
const forceShutdown = vm => stopVm(vm, true)
|
const forceShutdown = vm => stopVm(vm, true)
|
||||||
@ -102,6 +104,24 @@ class AffinityHost extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@addSubscriptions({
|
||||||
|
resourceSets: subscribeResourceSets,
|
||||||
|
})
|
||||||
|
class ResourceSetItem extends Component {
|
||||||
|
_getResourceSet = createSelector(
|
||||||
|
() => this.props.resourceSets,
|
||||||
|
() => this.props.id,
|
||||||
|
(resourceSets, id) =>
|
||||||
|
assign(find(resourceSets, { id }), { type: 'resourceSet' })
|
||||||
|
)
|
||||||
|
|
||||||
|
render () {
|
||||||
|
return this.props.resourceSets === undefined
|
||||||
|
? null
|
||||||
|
: renderXoItem(this._getResourceSet())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class NewVgpu extends Component {
|
class NewVgpu extends Component {
|
||||||
get value () {
|
get value () {
|
||||||
return this.state
|
return this.state
|
||||||
@ -266,10 +286,11 @@ export default connectStore(() => {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
gpuGroup: getGpuGroup,
|
gpuGroup: getGpuGroup,
|
||||||
|
isAdmin,
|
||||||
vgpus: getVgpus,
|
vgpus: getVgpus,
|
||||||
vgpuTypes: getVgpuTypes,
|
vgpuTypes: getVgpuTypes,
|
||||||
}
|
}
|
||||||
})(({ container, gpuGroup, vgpus, vgpuTypes, vm }) => (
|
})(({ container, gpuGroup, isAdmin, vgpus, vgpuTypes, vm }) => (
|
||||||
<Container>
|
<Container>
|
||||||
<Row>
|
<Row>
|
||||||
<Col className='text-xs-right'>
|
<Col className='text-xs-right'>
|
||||||
@ -574,6 +595,26 @@ export default connectStore(() => {
|
|||||||
: _('unknownOriginalTemplate')}
|
: _('unknownOriginalTemplate')}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>{_('resourceSet')}</th>
|
||||||
|
<td>
|
||||||
|
{isAdmin ? (
|
||||||
|
<SelectResourceSet
|
||||||
|
onChange={resourceSet =>
|
||||||
|
editVm(vm, {
|
||||||
|
resourceSet:
|
||||||
|
resourceSet != null ? resourceSet.id : resourceSet,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
value={vm.resourceSet}
|
||||||
|
/>
|
||||||
|
) : vm.resourceSet !== undefined ? (
|
||||||
|
<ResourceSetItem id={vm.resourceSet} />
|
||||||
|
) : (
|
||||||
|
_('resourceSetNone')
|
||||||
|
)}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</Col>
|
</Col>
|
||||||
|
Loading…
Reference in New Issue
Block a user