It is not possible to import a template from OVA file if it has disks. Steps to Reproduce: 1. Create a VM and attach a disk to it 2. Create a template from the VM 3. Export the template as OVA 4. Import the OVA template file Actual results: The operation fails Expected results: The template should be created Additional info: The exception in the engine.log is: ERROR [org.ovirt.engine.core.bll.exportimport.ImportVmTemplateFromOvaCommand] (EE-ManagedThreadFactory-engine-Thread-4072) [2c9a4d8a-ec84-4f5d-9781-aca861e7aaa0] Exception: java.lang.RuntimeException at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.ResourceManager.createCommand(ResourceManager.java:355) at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.ResourceManager.runVdsCommand(ResourceManager.java:395) at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.ResourceManager$Proxy$_$$_WeldSubclass.runVdsCommand$$super(Unknown Source) at jdk.internal.reflect.GeneratedMethodAccessor69.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.jboss.weld.core.5.Final//org.jboss.weld.interceptor.proxy.TerminalAroundInvokeInvocationContext.proceedInternal(TerminalAroundInvokeInvocationContext.java:51) at org.jboss.weld.core.5.Final//org.jboss.weld.interceptor.proxy.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:78) at org.ovirt.engine.core.common//org.ovirt.engine.core.common.di.interceptor.LoggingInterceptor.apply(LoggingInterceptor.java:12) at jdk.internal.reflect.GeneratedMethodAccessor57.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.jboss.weld.core.5.Final//org.jboss.weld.interceptor.reader.SimpleInterceptorInvocation$SimpleMethodInvocation.invoke(SimpleInterceptorInvocation.java:73) at org.jboss.weld.core.5.Final//org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeAroundInvoke(InterceptorMethodHandler.java:84) at org.jboss.weld.core.5.Final//org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:72) at org.jboss.weld.core.5.Final//org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:56) at org.jboss.weld.core.5.Final//org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:79) at org.jboss.weld.core.5.Final//org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:68) at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.ResourceManager$Proxy$_$$_WeldSubclass.runVdsCommand(Unknown Source) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.VDSBrokerFrontendImpl.runVdsCommand(VDSBrokerFrontendImpl.java:33) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.storage.disk.image.ImagesHandler.prepareImage(ImagesHandler.java:992) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.storage.disk.image.ImagesHandler.getQemuImageInfoFromVdsm(ImagesHandler.java:843) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.exportimport.ImportVmTemplateCommand.getQemuImageInfo(ImportVmTemplateCommand.java:795) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.exportimport.ImportVmTemplateCommand.updateDiskSizeByQcowImageInfo(ImportVmTemplateCommand.java:785) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.exportimport.ImportVmTemplateCommand.initImportClonedTemplateDisks(ImportVmTemplateCommand.java:372) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.exportimport.ImportVmTemplateCommand.lambda$executeCommand$1(ImportVmTemplateCommand.java:461) at org.ovirt.engine.core.utils//org.ovirt.engine.core.utils.transaction.TransactionSupport.executeInNewTransaction(TransactionSupport.java:202) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.exportimport.ImportVmTemplateCommand.executeCommand(ImportVmTemplateCommand.java:459) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.CommandBase.executeWithoutTransaction(CommandBase.java:1168) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.CommandBase.executeActionInTransactionScope(CommandBase.java:1326) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.CommandBase.runInTransaction(CommandBase.java:2005) at org.ovirt.engine.core.utils//org.ovirt.engine.core.utils.transaction.TransactionSupport.executeInSuppressed(TransactionSupport.java:164) at org.ovirt.engine.core.utils//org.ovirt.engine.core.utils.transaction.TransactionSupport.executeInScope(TransactionSupport.java:103) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.CommandBase.execute(CommandBase.java:1386) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.CommandBase.executeAction(CommandBase.java:420) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.PrevalidatingMultipleActionsRunner.executeValidatedCommand(PrevalidatingMultipleActionsRunner.java:204) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.PrevalidatingMultipleActionsRunner.runCommands(PrevalidatingMultipleActionsRunner.java:176) at deployment.engine.ear.bll.jar//org.ovirt.engine.core.bll.PrevalidatingMultipleActionsRunner.lambda$invokeCommands$3(PrevalidatingMultipleActionsRunner.java:182) at org.ovirt.engine.core.utils//org.ovirt.engine.core.utils.threadpool.ThreadPoolUtil$InternalWrapperRunnable.run(ThreadPoolUtil.java:96) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) at org.glassfish.javax.enterprise.concurrent//org.glassfish.enterprise.concurrent.ManagedThreadFactoryImpl$ManagedThread.run(ManagedThreadFactoryImpl.java:250) at org.jboss.as.ee.1.Final//org.jboss.as.ee.concurrent.service.ElytronManagedThreadFactory$ElytronManagedThread.run(ElytronManagedThreadFactory.java:78) Caused by: java.lang.NullPointerException at java.base/java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936) at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.ResourceManager.getVdsManager(ResourceManager.java:226) at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.ResourceManager$Proxy$_$$_WeldSubclass.getVdsManager(Unknown Source) at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.ResourceManager.getVdsManager(ResourceManager.java:222) at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.ResourceManager$Proxy$_$$_WeldSubclass.getVdsManager(Unknown Source) at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.vdsbroker.VdsBrokerCommand.initializeVdsBroker(VdsBrokerCommand.java:65) at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.vdsbroker.VdsBrokerCommand.<init>(VdsBrokerCommand.java:46) at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.vdsbroker.ImageActionsVDSCommandBase.<init>(ImageActionsVDSCommandBase.java:10) at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.vdsbroker.PrepareImageVDSCommand.<init>(PrepareImageVDSCommand.java:9) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.ResourceManager.instantiateInjectedCommand(ResourceManager.java:365) at deployment.engine.ear//org.ovirt.engine.core.vdsbroker.ResourceManager.createCommand(ResourceManager.java:349) ... 45 more
I looked at the issue and it seems that it might have been introduced by this commit: https://github.com/oVirt/ovirt-engine/commit/797da354117b4d5bf3d83524d2275c5d01fdfe7e#diff-97a4ba06e96e5776340cd0d0ab200822 The newly added code expects the DiskImage to have storagePoolId set, but it was not for the OVA import. ImportVmTemplateFromOvaCommand overrides validateSourceStorageDomain method and does not set the storagePoolId. I tried to set the correct storagePoolId to the disk images but it started to fail with another NullPointerException in PrepareImageVDSCommand -> JsonRpcVdsServer.prepareImage. The PrepareImageReturn expected the response to contain "info" but it contained "status" saying: Storage domain does not exist: (u'00000000-0000-0000-0000-000000000000',). I do not know the logic behind the code so I would appreciate help from the storage team with this. What should be the "correct" storage domain here? Or could you take over the issue and investigate?
Daniel, you are the author of the patch from comment #1, can you please assist Lucia?
Might be fixed in latest OVA bugs. I tried the steps in comment #0 and it works. Closing as works for me.