fix(vdi.set): cannot exceed the limited size defined in the resourceSet (#571)
If this VDI is attached to a single VM in a resource set, check user and limits. Fixes vatesfr/xo-web#2198
This commit is contained in:
parent
58ec9f4676
commit
6089ebae2a
@ -3,7 +3,7 @@
|
|||||||
{coroutine: $coroutine} = require 'bluebird'
|
{coroutine: $coroutine} = require 'bluebird'
|
||||||
|
|
||||||
{format} = require 'json-rpc-peer'
|
{format} = require 'json-rpc-peer'
|
||||||
{invalidParameters} = require 'xo-common/api-errors'
|
{invalidParameters, unauthorized} = require 'xo-common/api-errors'
|
||||||
{isArray: $isArray, parseSize} = require '../utils'
|
{isArray: $isArray, parseSize} = require '../utils'
|
||||||
{JsonRpcError} = require 'json-rpc-peer'
|
{JsonRpcError} = require 'json-rpc-peer'
|
||||||
|
|
||||||
@ -30,8 +30,7 @@ exports.delete = delete_
|
|||||||
set = $coroutine (params) ->
|
set = $coroutine (params) ->
|
||||||
{vdi} = params
|
{vdi} = params
|
||||||
xapi = @getXapi vdi
|
xapi = @getXapi vdi
|
||||||
|
ref = vdi._xapiRef
|
||||||
{_xapiRef: ref} = vdi
|
|
||||||
|
|
||||||
# Size.
|
# Size.
|
||||||
if 'size' of params
|
if 'size' of params
|
||||||
@ -41,6 +40,22 @@ set = $coroutine (params) ->
|
|||||||
throw invalidParameters(
|
throw invalidParameters(
|
||||||
"cannot set new size (#{size}) below the current size (#{vdi.size})"
|
"cannot set new size (#{size}) below the current size (#{vdi.size})"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
vbds = vdi.$VBDs
|
||||||
|
if (
|
||||||
|
vbds.length == 1 &&
|
||||||
|
(resourceSetId = xapi.xo.getData(@getObject(vbds[0], 'VBD'), 'resourceSet')) != undefined
|
||||||
|
)
|
||||||
|
if @user.permission != 'admin'
|
||||||
|
yield @checkResourceSetConstraints(resourceSetId, @user.id)
|
||||||
|
|
||||||
|
yield @allocateLimitsInResourceSet({ disk: size - vdi.size }, resourceSetId)
|
||||||
|
else if !(
|
||||||
|
@user.permission == 'admin' ||
|
||||||
|
yield @hasPermissions(@user.id, [ [ vdi.$SR, 'operate' ] ])
|
||||||
|
)
|
||||||
|
throw unauthorized()
|
||||||
|
|
||||||
yield xapi.resizeVdi(ref, size)
|
yield xapi.resizeVdi(ref, size)
|
||||||
|
|
||||||
# Other fields.
|
# Other fields.
|
||||||
|
Loading…
Reference in New Issue
Block a user