vm.create(): handle limits on template disks.

This commit is contained in:
Julien Fontanet 2016-02-23 17:53:41 +01:00
parent 651a27b558
commit 5175d06e37

View File

@ -92,13 +92,26 @@ create = $coroutine ({
} }
) )
xapiExistingVdis = existingDisks and map(existingDisks, (vdi) => xapi = @getXapi(template)
diskSizesByDevice = {}
forEach(xapi.getObject(template._xapiId).$VBDs, (vbd) =>
if (
vbd.type is 'Disk' and
(vdi = vbd.$VDI)
)
diskSizesByDevice[vbd.device] = +vdi.virtual_size
return
)
xapiExistingVdis = existingDisks and map(existingDisks, (vdi, device) =>
sr = @getObject(vdi.$SR) sr = @getObject(vdi.$SR)
# FIXME: handle existing VDIs when not resized. if vdi.size?
if vdi.size
size = parseSize(vdi.size) size = parseSize(vdi.size)
limits.disk += size diskSizesByDevice[device] = size
objectIds.push(sr.id) objectIds.push(sr.id)
@ -109,6 +122,8 @@ create = $coroutine ({
} }
) )
forEach(diskSizesByDevice, (size) => limits.disk += size)
xapiVifs = VIFs and map(VIFs, (vif) => xapiVifs = VIFs and map(VIFs, (vif) =>
network = @getObject(vif.network) network = @getObject(vif.network)
@ -126,7 +141,6 @@ create = $coroutine ({
else unless user.permission is 'admin' else unless user.permission is 'admin'
throw new Unauthorized() throw new Unauthorized()
xapi = @getXapi(template)
xapiVm = yield xapi.createVm(template._xapiId, { xapiVm = yield xapi.createVm(template._xapiId, {
installRepository: installation && installation.repository, installRepository: installation && installation.repository,
nameDescription: name_description, nameDescription: name_description,
@ -141,7 +155,7 @@ create = $coroutine ({
if resourceSet if resourceSet
@addAcl(user.id, vm.id, 'admin').catch(noop) @addAcl(user.id, vm.id, 'admin').catch(noop)
xapi.xo.setData(xapiVm.$id, 'resourceSet', resourceSet).catch(noop) yield xapi.xo.setData(xapiVm.$id, 'resourceSet', resourceSet).catch(noop)
return vm.id return vm.id