feat(vm/tab-advanced): move in/out of a resource set (#2601)

Fixes #1913
This commit is contained in:
badrAZ 2018-01-31 18:39:12 +01:00 committed by Julien Fontanet
parent 2b5f7dc8de
commit 83a3754fe5
3 changed files with 51 additions and 5 deletions

View File

@ -868,6 +868,8 @@ const messages = {
unknownOsKernel: 'Unknown',
unknownOriginalTemplate: 'Unknown',
vmLimitsLabel: 'VM limits',
resourceSet: 'Resource set',
resourceSetNone: 'None',
vmCpuLimitsLabel: 'CPU limits',
vmCpuTopology: 'Topology',
vmChooseCoresPerSocket: 'Default behavior',

View File

@ -113,7 +113,10 @@ const xoItemToRender = {
),
resourceSet: resourceSet => (
<span>
<Icon icon='resource-set' /> {resourceSet.name}
<strong>
<Icon icon='resource-set' /> {resourceSet.name}
</strong>{' '}
({resourceSet.id})
</span>
),
sshKey: key => (

View File

@ -12,10 +12,11 @@ import Tooltip from 'tooltip'
import { Toggle } from 'form'
import { Number, Size, Text, XoSelect } from 'editable'
import { Container, Row, Col } from 'grid'
import { SelectVgpuType } from 'select-objects'
import { SelectResourceSet, SelectVgpuType } from 'select-objects'
import { confirm } from 'modal'
import { every, includes, isEmpty, map, uniq } from 'lodash'
import { assign, every, find, includes, isEmpty, map, uniq } from 'lodash'
import {
addSubscriptions,
connectStore,
formatSize,
getCoresPerSocketPossibilities,
@ -34,12 +35,13 @@ import {
restartVm,
resumeVm,
stopVm,
subscribeResourceSets,
suspendVm,
XEN_DEFAULT_CPU_CAP,
XEN_DEFAULT_CPU_WEIGHT,
XEN_VIDEORAM_VALUES,
} from 'xo'
import { createGetObjectsOfType, createSelector } from 'selectors'
import { createGetObjectsOfType, createSelector, isAdmin } from 'selectors'
const forceReboot = vm => restartVm(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 {
get value () {
return this.state
@ -266,10 +286,11 @@ export default connectStore(() => {
return {
gpuGroup: getGpuGroup,
isAdmin,
vgpus: getVgpus,
vgpuTypes: getVgpuTypes,
}
})(({ container, gpuGroup, vgpus, vgpuTypes, vm }) => (
})(({ container, gpuGroup, isAdmin, vgpus, vgpuTypes, vm }) => (
<Container>
<Row>
<Col className='text-xs-right'>
@ -574,6 +595,26 @@ export default connectStore(() => {
: _('unknownOriginalTemplate')}
</td>
</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>
</table>
</Col>