Search in sources :

Example 26 with TemplateObjectTO

use of org.apache.cloudstack.storage.to.TemplateObjectTO in project cloudstack by apache.

the class NfsSecondaryStorageResourceTest method testCleanupStagingNfs.

@Test
public void testCleanupStagingNfs() throws Exception {
    NfsSecondaryStorageResource spyResource = spy(resource);
    RuntimeException exception = new RuntimeException();
    doThrow(exception).when(spyResource).execute(any(DeleteCommand.class));
    TemplateObjectTO mockTemplate = Mockito.mock(TemplateObjectTO.class);
    TestAppender.TestAppenderBuilder appenderBuilder = new TestAppender.TestAppenderBuilder();
    appenderBuilder.addExpectedPattern(Level.DEBUG, "Failed to clean up staging area:");
    TestAppender testLogAppender = appenderBuilder.build();
    TestAppender.safeAddAppender(NfsSecondaryStorageResource.s_logger, testLogAppender);
    spyResource.cleanupStagingNfs(mockTemplate);
    testLogAppender.assertMessagesLogged();
}
Also used : DeleteCommand(org.apache.cloudstack.storage.command.DeleteCommand) TestAppender(com.cloud.test.TestAppender) TemplateObjectTO(org.apache.cloudstack.storage.to.TemplateObjectTO) Test(org.junit.Test) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest)

Example 27 with TemplateObjectTO

use of org.apache.cloudstack.storage.to.TemplateObjectTO in project cloudstack by apache.

the class TemplateObject method processEvent.

@Override
public void processEvent(ObjectInDataStoreStateMachine.Event event, Answer answer) {
    try {
        if (getDataStore().getRole() == DataStoreRole.Primary) {
            if (answer instanceof CopyCmdAnswer) {
                CopyCmdAnswer cpyAnswer = (CopyCmdAnswer) answer;
                TemplateObjectTO newTemplate = (TemplateObjectTO) cpyAnswer.getNewData();
                VMTemplateStoragePoolVO templatePoolRef = templatePoolDao.findByPoolTemplate(getDataStore().getId(), getId());
                templatePoolRef.setDownloadPercent(100);
                setTemplateSizeIfNeeded(newTemplate, templatePoolRef);
                templatePoolRef.setDownloadState(Status.DOWNLOADED);
                setDownloadPathIfNeeded(newTemplate, templatePoolRef);
                setInstallPathIfNeeded(newTemplate, templatePoolRef);
                templatePoolDao.update(templatePoolRef.getId(), templatePoolRef);
            }
        } else if (getDataStore().getRole() == DataStoreRole.Image || getDataStore().getRole() == DataStoreRole.ImageCache) {
            if (answer instanceof CopyCmdAnswer) {
                CopyCmdAnswer cpyAnswer = (CopyCmdAnswer) answer;
                TemplateObjectTO newTemplate = (TemplateObjectTO) cpyAnswer.getNewData();
                TemplateDataStoreVO templateStoreRef = templateStoreDao.findByStoreTemplate(getDataStore().getId(), getId());
                templateStoreRef.setInstallPath(newTemplate.getPath());
                templateStoreRef.setDownloadPercent(100);
                templateStoreRef.setDownloadState(Status.DOWNLOADED);
                templateStoreRef.setSize(newTemplate.getSize());
                if (newTemplate.getPhysicalSize() != null) {
                    templateStoreRef.setPhysicalSize(newTemplate.getPhysicalSize());
                }
                templateStoreDao.update(templateStoreRef.getId(), templateStoreRef);
                if (getDataStore().getRole() == DataStoreRole.Image) {
                    VMTemplateVO templateVO = imageDao.findById(getId());
                    if (newTemplate.getFormat() != null) {
                        templateVO.setFormat(newTemplate.getFormat());
                    }
                    if (newTemplate.getName() != null) {
                        // For template created from snapshot, template name is determine by resource code.
                        templateVO.setUniqueName(newTemplate.getName());
                    }
                    if (newTemplate.getHypervisorType() != null) {
                        templateVO.setHypervisorType(newTemplate.getHypervisorType());
                    }
                    templateVO.setSize(newTemplate.getSize());
                    imageDao.update(templateVO.getId(), templateVO);
                }
            }
        }
        objectInStoreMgr.update(this, event);
    } catch (NoTransitionException e) {
        s_logger.debug("failed to update state", e);
        throw new CloudRuntimeException("Failed to update state" + e.toString());
    } catch (Exception ex) {
        s_logger.debug("failed to process event and answer", ex);
        objectInStoreMgr.delete(this);
        throw new CloudRuntimeException("Failed to process event", ex);
    } finally {
        // in case of OperationFailed, expunge the entry
        if (event == ObjectInDataStoreStateMachine.Event.OperationFailed) {
            objectInStoreMgr.deleteIfNotReady(this);
        }
    }
}
Also used : VMTemplateStoragePoolVO(com.cloud.storage.VMTemplateStoragePoolVO) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) NoTransitionException(com.cloud.utils.fsm.NoTransitionException) VMTemplateVO(com.cloud.storage.VMTemplateVO) TemplateObjectTO(org.apache.cloudstack.storage.to.TemplateObjectTO) TemplateDataStoreVO(org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO) CopyCmdAnswer(org.apache.cloudstack.storage.command.CopyCmdAnswer) NoTransitionException(com.cloud.utils.fsm.NoTransitionException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) ConcurrentOperationException(com.cloud.exception.ConcurrentOperationException)

Example 28 with TemplateObjectTO

use of org.apache.cloudstack.storage.to.TemplateObjectTO in project cloudstack by apache.

the class TemplateServiceImpl method handleTemplateSync.

@Override
public void handleTemplateSync(DataStore store) {
    if (store == null) {
        s_logger.warn("Huh? image store is null");
        return;
    }
    long storeId = store.getId();
    // add lock to make template sync for a data store only be done once
    String lockString = "templatesync.storeId:" + storeId;
    GlobalLock syncLock = GlobalLock.getInternLock(lockString);
    try {
        if (syncLock.lock(3)) {
            try {
                Long zoneId = store.getScope().getScopeId();
                Map<String, TemplateProp> templateInfos = listTemplate(store);
                if (templateInfos == null) {
                    return;
                }
                Set<VMTemplateVO> toBeDownloaded = new HashSet<VMTemplateVO>();
                List<VMTemplateVO> allTemplates = null;
                if (zoneId == null) {
                    // region wide store
                    allTemplates = _templateDao.listByState(VirtualMachineTemplate.State.Active, VirtualMachineTemplate.State.NotUploaded, VirtualMachineTemplate.State.UploadInProgress);
                } else {
                    // zone wide store
                    allTemplates = _templateDao.listInZoneByState(zoneId, VirtualMachineTemplate.State.Active, VirtualMachineTemplate.State.NotUploaded, VirtualMachineTemplate.State.UploadInProgress);
                }
                List<VMTemplateVO> rtngTmplts = _templateDao.listAllSystemVMTemplates();
                List<VMTemplateVO> defaultBuiltin = _templateDao.listDefaultBuiltinTemplates();
                if (rtngTmplts != null) {
                    for (VMTemplateVO rtngTmplt : rtngTmplts) {
                        if (!allTemplates.contains(rtngTmplt)) {
                            allTemplates.add(rtngTmplt);
                        }
                    }
                }
                if (defaultBuiltin != null) {
                    for (VMTemplateVO builtinTmplt : defaultBuiltin) {
                        if (!allTemplates.contains(builtinTmplt)) {
                            allTemplates.add(builtinTmplt);
                        }
                    }
                }
                toBeDownloaded.addAll(allTemplates);
                final StateMachine2<VirtualMachineTemplate.State, VirtualMachineTemplate.Event, VirtualMachineTemplate> stateMachine = VirtualMachineTemplate.State.getStateMachine();
                for (VMTemplateVO tmplt : allTemplates) {
                    String uniqueName = tmplt.getUniqueName();
                    TemplateDataStoreVO tmpltStore = _vmTemplateStoreDao.findByStoreTemplate(storeId, tmplt.getId());
                    if (templateInfos.containsKey(uniqueName)) {
                        TemplateProp tmpltInfo = templateInfos.remove(uniqueName);
                        toBeDownloaded.remove(tmplt);
                        if (tmpltStore != null) {
                            s_logger.info("Template Sync found " + uniqueName + " already in the image store");
                            if (tmpltStore.getDownloadState() != Status.DOWNLOADED) {
                                tmpltStore.setErrorString("");
                            }
                            if (tmpltInfo.isCorrupted()) {
                                tmpltStore.setDownloadState(Status.DOWNLOAD_ERROR);
                                String msg = "Template " + tmplt.getName() + ":" + tmplt.getId() + " is corrupted on secondary storage " + tmpltStore.getId();
                                tmpltStore.setErrorString(msg);
                                s_logger.info(msg);
                                _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_UPLOAD_FAILED, zoneId, null, msg, msg);
                                if (tmplt.getState() == VirtualMachineTemplate.State.NotUploaded || tmplt.getState() == VirtualMachineTemplate.State.UploadInProgress) {
                                    s_logger.info("Template Sync found " + uniqueName + " on image store " + storeId + " uploaded using SSVM as corrupted, marking it as failed");
                                    tmpltStore.setState(State.Failed);
                                    try {
                                        stateMachine.transitTo(tmplt, VirtualMachineTemplate.Event.OperationFailed, null, _templateDao);
                                    } catch (NoTransitionException e) {
                                        s_logger.error("Unexpected state transition exception for template " + tmplt.getName() + ". Details: " + e.getMessage());
                                    }
                                } else if (tmplt.getUrl() == null) {
                                    msg = "Private template (" + tmplt + ") with install path " + tmpltInfo.getInstallPath() + " is corrupted, please check in image store: " + tmpltStore.getDataStoreId();
                                    s_logger.warn(msg);
                                } else {
                                    s_logger.info("Removing template_store_ref entry for corrupted template " + tmplt.getName());
                                    _vmTemplateStoreDao.remove(tmpltStore.getId());
                                    toBeDownloaded.add(tmplt);
                                }
                            } else {
                                if (tmpltStore.getDownloadState() != Status.DOWNLOADED) {
                                    String etype = EventTypes.EVENT_TEMPLATE_CREATE;
                                    if (tmplt.getFormat() == ImageFormat.ISO) {
                                        etype = EventTypes.EVENT_ISO_CREATE;
                                    }
                                    if (zoneId != null) {
                                        UsageEventUtils.publishUsageEvent(etype, tmplt.getAccountId(), zoneId, tmplt.getId(), tmplt.getName(), null, null, tmpltInfo.getPhysicalSize(), tmpltInfo.getSize(), VirtualMachineTemplate.class.getName(), tmplt.getUuid());
                                    }
                                }
                                tmpltStore.setDownloadPercent(100);
                                tmpltStore.setDownloadState(Status.DOWNLOADED);
                                tmpltStore.setState(ObjectInDataStoreStateMachine.State.Ready);
                                tmpltStore.setInstallPath(tmpltInfo.getInstallPath());
                                tmpltStore.setSize(tmpltInfo.getSize());
                                tmpltStore.setPhysicalSize(tmpltInfo.getPhysicalSize());
                                tmpltStore.setLastUpdated(new Date());
                                // update size in vm_template table
                                VMTemplateVO tmlpt = _templateDao.findById(tmplt.getId());
                                tmlpt.setSize(tmpltInfo.getSize());
                                _templateDao.update(tmplt.getId(), tmlpt);
                                if (tmplt.getState() == VirtualMachineTemplate.State.NotUploaded || tmplt.getState() == VirtualMachineTemplate.State.UploadInProgress) {
                                    try {
                                        stateMachine.transitTo(tmplt, VirtualMachineTemplate.Event.OperationSucceeded, null, _templateDao);
                                    } catch (NoTransitionException e) {
                                        s_logger.error("Unexpected state transition exception for template " + tmplt.getName() + ". Details: " + e.getMessage());
                                    }
                                }
                                // which already got checked and incremented during createTemplate API call.
                                if (tmpltInfo.getSize() > 0 && tmplt.getAccountId() != Account.ACCOUNT_ID_SYSTEM && tmplt.getUrl() != null) {
                                    long accountId = tmplt.getAccountId();
                                    try {
                                        _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(accountId), com.cloud.configuration.Resource.ResourceType.secondary_storage, tmpltInfo.getSize() - UriUtils.getRemoteSize(tmplt.getUrl()));
                                    } catch (ResourceAllocationException e) {
                                        s_logger.warn(e.getMessage());
                                        _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_RESOURCE_LIMIT_EXCEEDED, zoneId, null, e.getMessage(), e.getMessage());
                                    } finally {
                                        _resourceLimitMgr.recalculateResourceCount(accountId, _accountMgr.getAccount(accountId).getDomainId(), com.cloud.configuration.Resource.ResourceType.secondary_storage.getOrdinal());
                                    }
                                }
                            }
                            _vmTemplateStoreDao.update(tmpltStore.getId(), tmpltStore);
                        } else {
                            tmpltStore = new TemplateDataStoreVO(storeId, tmplt.getId(), new Date(), 100, Status.DOWNLOADED, null, null, null, tmpltInfo.getInstallPath(), tmplt.getUrl());
                            tmpltStore.setSize(tmpltInfo.getSize());
                            tmpltStore.setPhysicalSize(tmpltInfo.getPhysicalSize());
                            tmpltStore.setDataStoreRole(store.getRole());
                            _vmTemplateStoreDao.persist(tmpltStore);
                            // update size in vm_template table
                            VMTemplateVO tmlpt = _templateDao.findById(tmplt.getId());
                            tmlpt.setSize(tmpltInfo.getSize());
                            _templateDao.update(tmplt.getId(), tmlpt);
                            associateTemplateToZone(tmplt.getId(), zoneId);
                            String etype = EventTypes.EVENT_TEMPLATE_CREATE;
                            if (tmplt.getFormat() == ImageFormat.ISO) {
                                etype = EventTypes.EVENT_ISO_CREATE;
                            }
                            UsageEventUtils.publishUsageEvent(etype, tmplt.getAccountId(), zoneId, tmplt.getId(), tmplt.getName(), null, null, tmpltInfo.getPhysicalSize(), tmpltInfo.getSize(), VirtualMachineTemplate.class.getName(), tmplt.getUuid());
                        }
                    } else if (tmplt.getState() == VirtualMachineTemplate.State.NotUploaded || tmplt.getState() == VirtualMachineTemplate.State.UploadInProgress) {
                        s_logger.info("Template Sync did not find " + uniqueName + " on image store " + storeId + " uploaded using SSVM, marking it as failed");
                        toBeDownloaded.remove(tmplt);
                        tmpltStore.setDownloadState(Status.DOWNLOAD_ERROR);
                        String msg = "Template " + tmplt.getName() + ":" + tmplt.getId() + " is corrupted on secondary storage " + tmpltStore.getId();
                        tmpltStore.setErrorString(msg);
                        tmpltStore.setState(State.Failed);
                        _vmTemplateStoreDao.update(tmpltStore.getId(), tmpltStore);
                        try {
                            stateMachine.transitTo(tmplt, VirtualMachineTemplate.Event.OperationFailed, null, _templateDao);
                        } catch (NoTransitionException e) {
                            s_logger.error("Unexpected state transition exception for template " + tmplt.getName() + ". Details: " + e.getMessage());
                        }
                    } else {
                        s_logger.info("Template Sync did not find " + uniqueName + " on image store " + storeId + ", may request download based on available hypervisor types");
                        if (tmpltStore != null) {
                            if (_storeMgr.isRegionStore(store) && tmpltStore.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED && tmpltStore.getState() == State.Ready && tmpltStore.getInstallPath() == null) {
                                s_logger.info("Keep fake entry in template store table for migration of previous NFS to object store");
                            } else {
                                s_logger.info("Removing leftover template " + uniqueName + " entry from template store table");
                                // remove those leftover entries
                                _vmTemplateStoreDao.remove(tmpltStore.getId());
                            }
                        }
                    }
                }
                if (toBeDownloaded.size() > 0) {
                    /* Only download templates whose hypervirsor type is in the zone */
                    List<HypervisorType> availHypers = _clusterDao.getAvailableHypervisorInZone(zoneId);
                    if (availHypers.isEmpty()) {
                        /*
                             * This is for cloudzone, local secondary storage resource
                             * started before cluster created
                             */
                        availHypers.add(HypervisorType.KVM);
                    }
                    /* Baremetal need not to download any template */
                    availHypers.remove(HypervisorType.BareMetal);
                    // bug 9809: resume ISO
                    availHypers.add(HypervisorType.None);
                    // download.
                    for (VMTemplateVO tmplt : toBeDownloaded) {
                        if (tmplt.getUrl() == null) {
                            // If url is null, skip downloading
                            s_logger.info("Skip downloading template " + tmplt.getUniqueName() + " since no url is specified.");
                            continue;
                        }
                        // if this is private template, skip sync to a new image store
                        if (!tmplt.isPublicTemplate() && !tmplt.isFeatured() && tmplt.getTemplateType() != TemplateType.SYSTEM) {
                            s_logger.info("Skip sync downloading private template " + tmplt.getUniqueName() + " to a new image store");
                            continue;
                        }
                        // means that this is a duplicate entry from migration of previous NFS to staging.
                        if (_storeMgr.isRegionStore(store)) {
                            TemplateDataStoreVO tmpltStore = _vmTemplateStoreDao.findByStoreTemplate(storeId, tmplt.getId());
                            if (tmpltStore != null && tmpltStore.getDownloadState() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED && tmpltStore.getState() == State.Ready && tmpltStore.getInstallPath() == null) {
                                s_logger.info("Skip sync template for migration of previous NFS to object store");
                                continue;
                            }
                        }
                        if (availHypers.contains(tmplt.getHypervisorType())) {
                            s_logger.info("Downloading template " + tmplt.getUniqueName() + " to image store " + store.getName());
                            associateTemplateToZone(tmplt.getId(), zoneId);
                            TemplateInfo tmpl = _templateFactory.getTemplate(tmplt.getId(), store);
                            TemplateOpContext<TemplateApiResult> context = new TemplateOpContext<>(null, (TemplateObject) tmpl, null);
                            AsyncCallbackDispatcher<TemplateServiceImpl, TemplateApiResult> caller = AsyncCallbackDispatcher.create(this);
                            caller.setCallback(caller.getTarget().createTemplateAsyncCallBack(null, null));
                            caller.setContext(context);
                            createTemplateAsync(tmpl, store, caller);
                        } else {
                            s_logger.info("Skip downloading template " + tmplt.getUniqueName() + " since current data center does not have hypervisor " + tmplt.getHypervisorType().toString());
                        }
                    }
                }
                for (String uniqueName : templateInfos.keySet()) {
                    TemplateProp tInfo = templateInfos.get(uniqueName);
                    if (_tmpltMgr.templateIsDeleteable(tInfo.getId())) {
                        // we cannot directly call deleteTemplateSync here to reuse delete logic since in this case db does not have this template at all.
                        TemplateObjectTO tmplTO = new TemplateObjectTO();
                        tmplTO.setDataStore(store.getTO());
                        tmplTO.setPath(tInfo.getInstallPath());
                        tmplTO.setId(tInfo.getId());
                        DeleteCommand dtCommand = new DeleteCommand(tmplTO);
                        EndPoint ep = _epSelector.select(store);
                        Answer answer = null;
                        if (ep == null) {
                            String errMsg = "No remote endpoint to send command, check if host or ssvm is down?";
                            s_logger.error(errMsg);
                            answer = new Answer(dtCommand, false, errMsg);
                        } else {
                            answer = ep.sendMessage(dtCommand);
                        }
                        if (answer == null || !answer.getResult()) {
                            s_logger.info("Failed to deleted template at store: " + store.getName());
                        } else {
                            String description = "Deleted template " + tInfo.getTemplateName() + " on secondary storage " + storeId;
                            s_logger.info(description);
                        }
                    }
                }
            } finally {
                syncLock.unlock();
            }
        } else {
            s_logger.info("Couldn't get global lock on " + lockString + ", another thread may be doing template sync on data store " + storeId + " now.");
        }
    } finally {
        syncLock.releaseRef();
    }
}
Also used : TemplateProp(com.cloud.storage.template.TemplateProp) VMTemplateVO(com.cloud.storage.VMTemplateVO) EndPoint(org.apache.cloudstack.engine.subsystem.api.storage.EndPoint) GlobalLock(com.cloud.utils.db.GlobalLock) DeleteCommand(org.apache.cloudstack.storage.command.DeleteCommand) ResourceAllocationException(com.cloud.exception.ResourceAllocationException) HashSet(java.util.HashSet) VirtualMachineTemplate(com.cloud.template.VirtualMachineTemplate) TemplateDataStoreVO(org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO) Date(java.util.Date) HypervisorType(com.cloud.hypervisor.Hypervisor.HypervisorType) Answer(com.cloud.agent.api.Answer) ListTemplateAnswer(com.cloud.agent.api.storage.ListTemplateAnswer) TemplateInfo(org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo) State(org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State) NoTransitionException(com.cloud.utils.fsm.NoTransitionException) Event(org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event) TemplateObjectTO(org.apache.cloudstack.storage.to.TemplateObjectTO)

Example 29 with TemplateObjectTO

use of org.apache.cloudstack.storage.to.TemplateObjectTO in project cloudstack by apache.

the class VolumeTestVmware method setUp.

@Test(priority = -1)
public void setUp() {
    ComponentContext.initComponentsLifeCycle();
    host = hostDao.findByGuid(this.getHostGuid());
    if (host != null) {
        dcId = host.getDataCenterId();
        clusterId = host.getClusterId();
        podId = host.getPodId();
        imageStore = this.imageStoreDao.findByName(imageStoreName);
    } else {
        // create data center
        DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true, true, null, null);
        dc = dcDao.persist(dc);
        dcId = dc.getId();
        // create pod
        HostPodVO pod = new HostPodVO(UUID.randomUUID().toString(), dc.getId(), this.getHostGateway(), this.getHostCidr(), 8, "test");
        pod = podDao.persist(pod);
        podId = pod.getId();
        // create xen cluster
        ClusterVO cluster = new ClusterVO(dc.getId(), pod.getId(), "devcloud cluster");
        cluster.setHypervisorType(HypervisorType.VMware.toString());
        cluster.setClusterType(ClusterType.ExternalManaged);
        cluster.setManagedState(ManagedState.Managed);
        cluster = clusterDao.persist(cluster);
        clusterId = cluster.getId();
        // setup vcenter
        ClusterDetailsVO clusterDetailVO = new ClusterDetailsVO(cluster.getId(), "url", null);
        this.clusterDetailsDao.persist(clusterDetailVO);
        clusterDetailVO = new ClusterDetailsVO(cluster.getId(), "username", null);
        this.clusterDetailsDao.persist(clusterDetailVO);
        clusterDetailVO = new ClusterDetailsVO(cluster.getId(), "password", null);
        this.clusterDetailsDao.persist(clusterDetailVO);
        // create xen host
        host = new HostVO(this.getHostGuid());
        host.setName("devcloud vmware host");
        host.setType(Host.Type.Routing);
        host.setPrivateIpAddress(this.getHostIp());
        host.setDataCenterId(dc.getId());
        host.setVersion("6.0.1");
        host.setAvailable(true);
        host.setSetup(true);
        host.setPodId(podId);
        host.setLastPinged(0);
        host.setResourceState(ResourceState.Enabled);
        host.setHypervisorType(HypervisorType.VMware);
        host.setClusterId(cluster.getId());
        host = hostDao.persist(host);
        imageStore = new ImageStoreVO();
        imageStore.setName(imageStoreName);
        imageStore.setDataCenterId(dcId);
        imageStore.setProviderName("CloudStack ImageStore Provider");
        imageStore.setRole(DataStoreRole.Image);
        imageStore.setUrl(this.getSecondaryStorage());
        imageStore.setUuid(UUID.randomUUID().toString());
        imageStore.setProtocol("nfs");
        imageStore = imageStoreDao.persist(imageStore);
    }
    image = new VMTemplateVO();
    image.setTemplateType(TemplateType.USER);
    image.setUrl(this.getTemplateUrl());
    image.setUniqueName(UUID.randomUUID().toString());
    image.setName(UUID.randomUUID().toString());
    image.setPublicTemplate(true);
    image.setFeatured(true);
    image.setRequiresHvm(true);
    image.setBits(64);
    image.setFormat(Storage.ImageFormat.VHD);
    image.setEnablePassword(true);
    image.setEnableSshKey(true);
    image.setGuestOSId(1);
    image.setBootable(true);
    image.setPrepopulate(true);
    image.setCrossZones(true);
    image.setExtractable(true);
    image = imageDataDao.persist(image);
    /*
         * TemplateDataStoreVO templateStore = new TemplateDataStoreVO();
         *
         * templateStore.setDataStoreId(imageStore.getId());
         * templateStore.setDownloadPercent(100);
         * templateStore.setDownloadState(Status.DOWNLOADED);
         * templateStore.setDownloadUrl(imageStore.getUrl());
         * templateStore.setInstallPath(this.getImageInstallPath());
         * templateStore.setTemplateId(image.getId());
         * templateStoreDao.persist(templateStore);
         */
    DataStore store = this.dataStoreMgr.getDataStore(imageStore.getId(), DataStoreRole.Image);
    TemplateInfo template = templateFactory.getTemplate(image.getId(), DataStoreRole.Image);
    DataObject templateOnStore = store.create(template);
    TemplateObjectTO to = new TemplateObjectTO();
    to.setPath(this.getImageInstallPath());
    CopyCmdAnswer answer = new CopyCmdAnswer(to);
    templateOnStore.processEvent(Event.CreateOnlyRequested);
    templateOnStore.processEvent(Event.OperationSuccessed, answer);
}
Also used : DataCenterVO(com.cloud.dc.DataCenterVO) TemplateInfo(org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo) ClusterVO(com.cloud.dc.ClusterVO) DataObject(org.apache.cloudstack.engine.subsystem.api.storage.DataObject) DataStore(org.apache.cloudstack.engine.subsystem.api.storage.DataStore) VMTemplateVO(com.cloud.storage.VMTemplateVO) ImageStoreVO(org.apache.cloudstack.storage.datastore.db.ImageStoreVO) TemplateObjectTO(org.apache.cloudstack.storage.to.TemplateObjectTO) HostPodVO(com.cloud.dc.HostPodVO) ClusterDetailsVO(com.cloud.dc.ClusterDetailsVO) HostVO(com.cloud.host.HostVO) CopyCmdAnswer(org.apache.cloudstack.storage.command.CopyCmdAnswer) Test(org.testng.annotations.Test)

Example 30 with TemplateObjectTO

use of org.apache.cloudstack.storage.to.TemplateObjectTO in project cloudstack by apache.

the class KVMStorageProcessor method dettachIso.

@Override
public Answer dettachIso(final DettachCommand cmd) {
    final DiskTO disk = cmd.getDisk();
    final TemplateObjectTO isoTO = (TemplateObjectTO) disk.getData();
    final DataStoreTO store = isoTO.getDataStore();
    if (!(store instanceof NfsTO)) {
        return new AttachAnswer("unsupported protocol");
    }
    final NfsTO nfsStore = (NfsTO) store;
    try {
        final Connect conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
        attachOrDetachISO(conn, cmd.getVmName(), nfsStore.getUrl() + File.separator + isoTO.getPath(), false);
    } catch (final LibvirtException e) {
        return new Answer(cmd, false, e.toString());
    } catch (final URISyntaxException e) {
        return new Answer(cmd, false, e.toString());
    } catch (final InternalErrorException e) {
        return new Answer(cmd, false, e.toString());
    }
    return new Answer(cmd);
}
Also used : CreateObjectAnswer(org.apache.cloudstack.storage.command.CreateObjectAnswer) ResignatureAnswer(org.apache.cloudstack.storage.command.ResignatureAnswer) Answer(com.cloud.agent.api.Answer) PrimaryStorageDownloadAnswer(com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer) DettachAnswer(org.apache.cloudstack.storage.command.DettachAnswer) SnapshotAndCopyAnswer(org.apache.cloudstack.storage.command.SnapshotAndCopyAnswer) CopyCmdAnswer(org.apache.cloudstack.storage.command.CopyCmdAnswer) AttachAnswer(org.apache.cloudstack.storage.command.AttachAnswer) PrimaryDataStoreTO(org.apache.cloudstack.storage.to.PrimaryDataStoreTO) DataStoreTO(com.cloud.agent.api.to.DataStoreTO) LibvirtException(org.libvirt.LibvirtException) Connect(org.libvirt.Connect) TemplateObjectTO(org.apache.cloudstack.storage.to.TemplateObjectTO) URISyntaxException(java.net.URISyntaxException) InternalErrorException(com.cloud.exception.InternalErrorException) NfsTO(com.cloud.agent.api.to.NfsTO) DiskTO(com.cloud.agent.api.to.DiskTO) AttachAnswer(org.apache.cloudstack.storage.command.AttachAnswer)

Aggregations

TemplateObjectTO (org.apache.cloudstack.storage.to.TemplateObjectTO)57 CopyCmdAnswer (org.apache.cloudstack.storage.command.CopyCmdAnswer)40 NfsTO (com.cloud.agent.api.to.NfsTO)34 DataStoreTO (com.cloud.agent.api.to.DataStoreTO)28 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)26 DataTO (com.cloud.agent.api.to.DataTO)22 VolumeObjectTO (org.apache.cloudstack.storage.to.VolumeObjectTO)20 InternalErrorException (com.cloud.exception.InternalErrorException)19 PrimaryDataStoreTO (org.apache.cloudstack.storage.to.PrimaryDataStoreTO)19 DiskTO (com.cloud.agent.api.to.DiskTO)13 XmlRpcException (org.apache.xmlrpc.XmlRpcException)12 XenAPIException (com.xensource.xenapi.Types.XenAPIException)11 SnapshotObjectTO (org.apache.cloudstack.storage.to.SnapshotObjectTO)11 Answer (com.cloud.agent.api.Answer)10 VDI (com.xensource.xenapi.VDI)10 Connection (com.xensource.xenapi.Connection)9 SR (com.xensource.xenapi.SR)9 URI (java.net.URI)9 ConfigurationException (javax.naming.ConfigurationException)9 IOException (java.io.IOException)8