@Override public String getHostUuid() { return vmSpec.getDestHost().getUuid(); }
@Override public String getHostUuid() { return vmSpec.getDestHost().getUuid(); }
@Override public void run(FlowTrigger trigger, Map data) { check(l2, spec.getDestHost().getUuid(), new Completion(trigger) { @Override public void success() { trigger.next(); } @Override public void fail(ErrorCode errorCode) { logger.debug(String.format("check l2 vxlan failed for %s", errorCode.toString())); trigger.fail(errorCode); } }); } }).then(new NoRollbackFlow() {
@Override public void run(FlowTrigger trigger, Map data) { realize(l2, spec.getDestHost().getUuid(), new Completion(trigger) { @Override public void success() { trigger.next(); } @Override public void fail(ErrorCode errorCode) { logger.debug(String.format("realize l2 vxlan failed for %s", errorCode.toString())); trigger.fail(errorCode); } }); } }).done(new FlowDoneHandler(completion) {
@Override public void applyDhcpService(List<DhcpStruct> dhcpStructList, VmInstanceSpec spec, final Completion completion) { if (dhcpStructList.isEmpty()) { completion.success(); return; } applyDhcpToHosts(toDhcpInfo(dhcpStructList), spec.getDestHost().getUuid(), false, completion); }
private ErrorCode checkIfSpecifyPrimaryStorage(VmInstanceSpec spec){ if(spec.getRequiredPrimaryStorageUuidForRootVolume() == null){ ErrorCode errorCode = operr("The cluster[uuid=%s] mounts multiple primary storage[LocalStorage, other non-LocalStorage primary storage], You must specify the primary storage where the root disk is located", spec.getDestHost().getClusterUuid()); return errorCode; } if(spec.getDataDiskOfferings() != null && !spec.getDataDiskOfferings().isEmpty() && spec.getRequiredPrimaryStorageUuidForDataVolume() == null){ ErrorCode errorCode = operr("The cluster[uuid=%s] mounts multiple primary storage[LocalStorage, other non-LocalStorage primary storage], You must specify the primary storage where the data disk is located", spec.getDestHost().getClusterUuid()); return errorCode; } return null; }
public void setParametersFromVmSpec(VmInstanceSpec vmSpec) { vmUuid = vmSpec.getVmInventory().getUuid(); vmNics = vmSpec.getDestNics(); hostUuid = vmSpec.getDestHost().getUuid(); }
@Override public void run(MessageReply reply) { if (!reply.isSuccess()) { logger.warn(String.format("failed to roll back vm[uuid:%s, name:%s] on host[uuid:%s, ip:%s], %s", spec.getVmInventory().getUuid(), spec.getVmInventory().getName(), spec.getDestHost().getUuid(), spec.getDestHost().getName(), reply.getError())); } trigger.rollback(); } });
@Override public void releaseDhcpService(List<DhcpStruct> dhcpStructsList, final VmInstanceSpec spec, final NoErrorCompletion completion) { if (dhcpStructsList.isEmpty()) { completion.done(); return; } releaseDhcpService(toDhcpInfo(dhcpStructsList), spec.getVmInventory().getUuid(), spec.getDestHost().getUuid(), completion); }
@Override public void run(FlowTrigger trigger, Map data) { VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); changeVmStateInDb(struct.getStrategy() == VmCreationStrategy.InstantStart ? VmInstanceStateEvent.running : VmInstanceStateEvent.paused, ()-> { self.setLastHostUuid(spec.getDestHost().getUuid()); self.setHostUuid(spec.getDestHost().getUuid()); self.setClusterUuid(spec.getDestHost().getClusterUuid()); self.setZoneUuid(spec.getDestHost().getZoneUuid()); self.setHypervisorType(spec.getDestHost().getHypervisorType()); self.setRootVolumeUuid(spec.getDestRootVolume().getUuid()); }); logger.debug(String.format("vm[uuid:%s] is started ..", self.getUuid())); VmInstanceInventory inv = VmInstanceInventory.valueOf(self); extEmitter.afterStartNewCreatedVm(inv); trigger.next(); } });
@Override public void run(MessageReply reply) { if (!reply.isSuccess()) { logger.warn(String.format("failed to stop vm[uuid:%s] on host[uuid:%s], %s", spec.getVmInventory().getUuid(), spec.getDestHost().getUuid(), reply.getError())); } chain.rollback(); } });
@Override public void run(final FlowTrigger chain, final Map data) { final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); fireExtensions(spec); StartVmOnHypervisorMsg msg = new StartVmOnHypervisorMsg(); msg.setVmSpec(spec); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, spec.getDestHost().getUuid()); bus.send(msg, new CloudBusCallBack(chain) { @Override public void run(MessageReply reply) { if (reply.isSuccess()) { data.put(VmStartOnHypervisorFlow.class.getName(), true); chain.next(); } else { chain.fail(reply.getError()); } } }); }
@Override public void rollback(FlowRollback chain, Map data) { if (data.containsKey(SUCCESS)) { final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); ReturnHostCapacityMsg msg = new ReturnHostCapacityMsg(); msg.setHostUuid(spec.getDestHost().getUuid()); msg.setCpuCapacity(spec.getVmInventory().getCpuNum()); msg.setMemoryCapacity(spec.getVmInventory().getMemorySize()); bus.makeLocalServiceId(msg, HostAllocatorConstant.SERVICE_ID); bus.send(msg); } chain.rollback(); } }
@Override public void run(MessageReply reply) { if (!reply.isSuccess()) { complete.fail(reply.getError()); return; } CreateVritualRouterBootstrapIsoRsp rsp = ((KVMHostAsyncHttpCallReply)reply).toResponse(CreateVritualRouterBootstrapIsoRsp.class); if (!rsp.isSuccess()) { ErrorCode err = operr("failed to create VirtualRouterBootstrapIso[%s] on kvm host[uuid:%s, ip:%s] for virtual router[uuid:%s], because %s", iso.getIsoPath(), vrSpec.getDestHost().getUuid(), vrSpec.getDestHost().getManagementIp(), iso.getVirtualRouterUuid(), rsp.getError()); complete.fail(err); return; } complete.success(); } });
@Override public void run(final FlowTrigger trigger, Map data) { final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); final String isoUuid = (String) data.get(VmInstanceConstant.Params.DetachingIsoUuid.toString()); DetachIsoOnHypervisorMsg msg = new DetachIsoOnHypervisorMsg(); msg.setHostUuid(spec.getDestHost().getUuid()); msg.setVmInstanceUuid(spec.getVmInventory().getUuid()); msg.setIsoUuid(isoUuid); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, msg.getHostUuid()); bus.send(msg, new CloudBusCallBack(trigger) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { trigger.fail(reply.getError()); return; } trigger.next(); } }); } }
@Override public void run(FlowTrigger trigger, Map data) { final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); boolean migrateFromDest = false; if (spec.getMessage() instanceof MigrateVmMessage) { migrateFromDest = ((MigrateVmMessage)spec.getMessage()).isMigrateFromDestination(); } final boolean fromDest = migrateFromDest; final HostInventory destHost = spec.getDestHost(); for (VmInstanceMigrateExtensionPoint ext : pluginRgty.getExtensionList(VmInstanceMigrateExtensionPoint.class)) { ext.preMigrateVm(spec.getVmInventory(), destHost.getUuid()); } CollectionUtils.safeForEach(pluginRgty.getExtensionList(VmInstanceMigrateExtensionPoint.class), new ForEachFunction<VmInstanceMigrateExtensionPoint>() { @Override public void run(VmInstanceMigrateExtensionPoint ext) { ext.beforeMigrateVm(spec.getVmInventory(), destHost.getUuid()); } }); trigger.next(); }
@Override public void handle(final Map data) { VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); HostInventory host = spec.getDestHost(); self = changeVmStateInDb(VmInstanceStateEvent.running, ()-> { self.setZoneUuid(host.getZoneUuid()); self.setClusterUuid(host.getClusterUuid()); self.setLastHostUuid(lastHostUuid); self.setHostUuid(host.getUuid()); }); VmInstanceInventory vm = VmInstanceInventory.valueOf(self); extEmitter.afterMigrateVm(vm, vm.getLastHostUuid()); completion.success(); } }).error(new FlowErrorHandler(completion) {
@Override public void rollback(FlowRollback chain, Map data) { final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); HostInventory host = spec.getDestHost(); if (host != null) { ReturnHostCapacityMsg msg = new ReturnHostCapacityMsg(); msg.setCpuCapacity(spec.getVmInventory().getCpuNum()); msg.setMemoryCapacity(spec.getVmInventory().getMemorySize()); msg.setHostUuid(host.getUuid()); msg.setServiceId(bus.makeLocalServiceId(HostAllocatorConstant.SERVICE_ID)); bus.send(msg); } chain.rollback(); } }
@Override public void handle(final ErrorCode errCode, Map data) { extEmitter.failedToMigrateVm(VmInstanceInventory.valueOf(self), spec.getDestHost().getUuid(), errCode); if (HostErrors.FAILED_TO_MIGRATE_VM_ON_HYPERVISOR.isEqual(errCode.getCode())) { checkState(originalCopy.getHostUuid(), new NoErrorCompletion(completion) { @Override public void done() { completion.fail(errCode); } }); } else { self.setState(originState); self = dbf.updateAndRefresh(self); completion.fail(errCode); } } }).start();
@Override public void rollback(FlowRollback chain, Map data) { final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); if (data.containsKey(SUCCESS)) { VmInstanceVO vm = dbf.findByUuid(spec.getVmInventory().getUuid(), VmInstanceVO.class); vm.setHostUuid(null); dbf.update(vm); HostInventory host = spec.getDestHost(); ReturnHostCapacityMsg msg = new ReturnHostCapacityMsg(); msg.setCpuCapacity(spec.getVmInventory().getCpuNum()); msg.setMemoryCapacity(spec.getVmInventory().getMemorySize()); msg.setHostUuid(host.getUuid()); msg.setServiceId(bus.makeLocalServiceId(HostAllocatorConstant.SERVICE_ID)); bus.send(msg); } chain.rollback(); }