|
25 | 25 | import javax.inject.Inject; |
26 | 26 | import javax.naming.ConfigurationException; |
27 | 27 |
|
28 | | -import com.cloud.configuration.Resource; |
29 | | -import com.cloud.event.EventTypes; |
30 | | -import com.cloud.event.UsageEventUtils; |
31 | | -import com.cloud.user.ResourceLimitService; |
32 | | -import org.apache.log4j.Logger; |
33 | | -import org.springframework.stereotype.Component; |
34 | 28 | import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; |
35 | 29 | import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; |
36 | 30 | import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint; |
37 | 31 | import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector; |
38 | 32 | import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State; |
| 33 | +import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory; |
| 34 | +import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; |
| 35 | +import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService; |
39 | 36 | import org.apache.cloudstack.framework.config.ConfigKey; |
40 | 37 | import org.apache.cloudstack.framework.config.Configurable; |
41 | 38 | import org.apache.cloudstack.managed.context.ManagedContextRunnable; |
|
48 | 45 | import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao; |
49 | 46 | import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO; |
50 | 47 | import org.apache.cloudstack.utils.identity.ManagementServerNode; |
| 48 | +import org.apache.log4j.Logger; |
| 49 | +import org.springframework.stereotype.Component; |
51 | 50 |
|
52 | 51 | import com.cloud.agent.Listener; |
53 | 52 | import com.cloud.agent.api.AgentControlAnswer; |
|
56 | 55 | import com.cloud.agent.api.Command; |
57 | 56 | import com.cloud.agent.api.StartupCommand; |
58 | 57 | import com.cloud.alert.AlertManager; |
| 58 | +import com.cloud.configuration.Resource; |
| 59 | +import com.cloud.event.EventTypes; |
| 60 | +import com.cloud.event.UsageEventUtils; |
59 | 61 | import com.cloud.exception.ConnectionException; |
60 | 62 | import com.cloud.host.Host; |
61 | 63 | import com.cloud.host.Status; |
|
65 | 67 | import com.cloud.storage.dao.VMTemplateZoneDao; |
66 | 68 | import com.cloud.storage.dao.VolumeDao; |
67 | 69 | import com.cloud.template.VirtualMachineTemplate; |
| 70 | +import com.cloud.user.ResourceLimitService; |
68 | 71 | import com.cloud.utils.component.ManagerBase; |
69 | 72 | import com.cloud.utils.concurrency.NamedThreadFactory; |
70 | 73 | import com.cloud.utils.db.Transaction; |
@@ -102,6 +105,12 @@ public class ImageStoreUploadMonitorImpl extends ManagerBase implements ImageSto |
102 | 105 | private AlertManager _alertMgr; |
103 | 106 | @Inject |
104 | 107 | private VMTemplateZoneDao _vmTemplateZoneDao; |
| 108 | + @Inject |
| 109 | + private DataStoreManager dataStoreManager; |
| 110 | + @Inject |
| 111 | + private TemplateDataFactory templateFactory; |
| 112 | + @Inject |
| 113 | + private TemplateService templateService; |
105 | 114 |
|
106 | 115 | private long _nodeId; |
107 | 116 | private ScheduledExecutorService _executor = null; |
@@ -395,6 +404,20 @@ public void doInTransactionWithoutResult(TransactionStatus status) { |
395 | 404 | VMTemplateVO templateUpdate = _templateDao.createForUpdate(); |
396 | 405 | templateUpdate.setSize(answer.getVirtualSize()); |
397 | 406 | _templateDao.update(tmpTemplate.getId(), templateUpdate); |
| 407 | + // For multi-disk OVA, check and create data disk templates |
| 408 | + if (tmpTemplate.getFormat().equals(Storage.ImageFormat.OVA)) { |
| 409 | + final DataStore store = dataStoreManager.getDataStore(templateDataStore.getDataStoreId(), templateDataStore.getDataStoreRole()); |
| 410 | + final TemplateInfo templateInfo = templateFactory.getTemplate(tmpTemplate.getId(), store); |
| 411 | + if (!templateService.createOvaDataDiskTemplates(templateInfo)) { |
| 412 | + tmpTemplateDataStore.setDownloadState(VMTemplateStorageResourceAssoc.Status.ABANDONED); |
| 413 | + tmpTemplateDataStore.setState(State.Failed); |
| 414 | + stateMachine.transitTo(tmpTemplate, VirtualMachineTemplate.Event.OperationFailed, null, _templateDao); |
| 415 | + msg = "Multi-disk OVA template " + tmpTemplate.getUuid() + " failed to process data disks"; |
| 416 | + s_logger.error(msg); |
| 417 | + sendAlert = true; |
| 418 | + break; |
| 419 | + } |
| 420 | + } |
398 | 421 | stateMachine.transitTo(tmpTemplate, VirtualMachineTemplate.Event.OperationSucceeded, null, _templateDao); |
399 | 422 | _resourceLimitMgr.incrementResourceCount(template.getAccountId(), Resource.ResourceType.secondary_storage, answer.getVirtualSize()); |
400 | 423 | //publish usage event |
|
0 commit comments