Skip to content

Commit

Permalink
core: import template - update disks size by qemu-img info
Browse files Browse the repository at this point in the history
When importing a VM template, query the 'virtual size' of each
image using 'qemu-img info' and update the DB, as the size is
saved in the OVF in GiB (rounded up).

Change-Id: Ia39ce808576af2ad912fb10a2432147f8482f37b
Bug-Url: https://bugzilla.redhat.com/1711691
Signed-off-by: Daniel Erez <derez@redhat.com>
  • Loading branch information
danielerez authored and tnisan committed Jul 9, 2019
1 parent 9832998 commit 797da35
Showing 1 changed file with 25 additions and 7 deletions.
Expand Up @@ -136,6 +136,7 @@ public class ImportVmTemplateCommand<T extends ImportVmTemplateParameters> exten
private StorageDomain sourceDomain;
private Guid sourceDomainId = Guid.Empty;
private Guid sourceTemplateId;
private Map<Guid, QemuImageInfo> diskImageInfoMap = new HashMap<>();

public ImportVmTemplateCommand(T parameters, CommandContext commandContext) {
super(parameters, commandContext);
Expand Down Expand Up @@ -367,6 +368,8 @@ private void initImportClonedTemplate() {

private void initImportClonedTemplateDisks() {
for (DiskImage image : getImages()) {
// Update the virtual size with value queried from 'qemu-img info'
updateDiskSizeByQcowImageInfo(image);
if (getParameters().isImportAsNewEntity()) {
generateNewDiskId(image);
updateManagedDeviceMap(image, getVmTemplate().getManagedDeviceMap());
Expand Down Expand Up @@ -771,19 +774,34 @@ protected void initQcowVersionForDisks(Guid imageGroupId) {

protected void setQcowCompat(DiskImage diskImage) {
diskImage.setQcowCompat(QcowCompat.QCOW2_V2);
QemuImageInfo qemuImageInfo =
imagesHandler.getQemuImageInfoFromVdsm(diskImage.getStoragePoolId(),
diskImage.getStorageIds().get(0),
diskImage.getId(),
diskImage.getImageId(),
null,
true);
QemuImageInfo qemuImageInfo = getQemuImageInfo(diskImage, diskImage.getStorageIds().get(0));
if (qemuImageInfo != null) {
diskImage.setQcowCompat(qemuImageInfo.getQcowCompat());
}
imageDao.update(diskImage.getImage());
}

protected void updateDiskSizeByQcowImageInfo(DiskImage diskImage) {
QemuImageInfo qemuImageInfo = getQemuImageInfo(diskImage, getParameters().getSourceDomainId());
if (qemuImageInfo != null) {
diskImage.setSize(qemuImageInfo.getSize());
}
imageDao.update(diskImage.getImage());
}

private QemuImageInfo getQemuImageInfo(DiskImage diskImage, Guid storageId) {
if (!diskImageInfoMap.containsKey(diskImage.getId())) {
diskImageInfoMap.put(diskImage.getId(),
imagesHandler.getQemuImageInfoFromVdsm(diskImage.getStoragePoolId(),
storageId,
diskImage.getId(),
diskImage.getImageId(),
null,
true));
}
return diskImageInfoMap.get(diskImage.getId());
}

/**
* Updating managed device map of VM, with the new disk {@link Guid}s.<br/>
* The update of managedDeviceMap is based on the newDiskIdForDisk map,
Expand Down

0 comments on commit 797da35

Please sign in to comment.