@Override public void run(final FlowTrigger trigger, Map data) { final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); List<ApplianceVmFirewallRuleInventory> rules = (List<ApplianceVmFirewallRuleInventory>) data.get(ApplianceVmConstant.Params.applianceVmFirewallRules.toString()); if (rules.isEmpty()) { trigger.next(); return; } boolean isReconnect = Boolean.valueOf((String) data.get(Params.isReconnect.toString())); Map<String, List<ApplianceVmFirewallRuleInventory>> networkFirewallRules = normalize(rules); if (isReconnect) { setFirewall((String) data.get(Params.applianceVmUuid.toString()), networkFirewallRules.entrySet().iterator(), trigger); } else { setFirewall(spec.getVmInventory().getUuid(), networkFirewallRules.entrySet().iterator(), trigger); } } }
@Override public void run(final FlowTrigger chain, final Map data) { taskProgress("start on the hypervisor"); final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); fireExtensions(spec); CreateVmOnHypervisorMsg msg = new CreateVmOnHypervisorMsg(); 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(SUCCESS, true); chain.next(); } else { chain.fail(reply.getError()); } } }); }
@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 run(final FlowTrigger chain, Map data){ final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); PauseVmOnHypervisorMsg msg = new PauseVmOnHypervisorMsg(); msg.setVmInventory(spec.getVmInventory()); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID,spec.getVmInventory().getHostUuid()); bus.send(msg, new CloudBusCallBack(chain) { @Override public void run(MessageReply reply) { if (reply.isSuccess()) { chain.next(); return; } chain.fail(reply.getError()); } }); } }
@Override public void run(FlowTrigger chain, Map data) { VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); if (spec.getVmInventory().getHostUuid() == null) { // the vm failed because no host available at that time or the vm is stopped // no need to return host chain.next(); return; } ReturnHostCapacityMsg msg = new ReturnHostCapacityMsg(); msg.setHostUuid(spec.getVmInventory().getHostUuid()); msg.setCpuCapacity(spec.getVmInventory().getCpuNum()); msg.setMemoryCapacity(spec.getVmInventory().getMemorySize()); msg.setServiceId(bus.makeLocalServiceId(HostAllocatorConstant.SERVICE_ID)); bus.send(msg); chain.next(); } }
@Override public void run(final FlowTrigger chain, Map data){ final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); ResumeVmOnHypervisorMsg msg = new ResumeVmOnHypervisorMsg(); msg.setVmInventory(spec.getVmInventory()); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID,spec.getVmInventory().getHostUuid()); bus.send(msg, new CloudBusCallBack(chain) { @Override public void run(MessageReply reply) { if (reply.isSuccess()) { chain.next(); return; } chain.fail(reply.getError()); } }); } }
@Override public void run(MessageReply reply) { if (reply.isSuccess()) { AllocateIpReply areply = reply.castReply(); UsedIpInventory ipInventory = areply.getIpInventory(); for (VmNicExtensionPoint ext : pluginRgty.getExtensionList(VmNicExtensionPoint.class)) { ext.afterAddIpAddress(vmNicVO.getUuid(), ipInventory.getUuid()); } data.put(VmInstanceConstant.Params.UsedIPInventory.toString(), ipInventory); VmNicInventory nicInv = VmNicInventory.valueOf(dbf.findByUuid(nic.getUuid(), VmNicVO.class)); new DualStackNicSecondaryNetworksOperator().createSecondaryNetworksByVmNic(nicInv, l3.getUuid()); trigger.next(); } else { trigger.fail(reply.getError()); } } });
@Override public void rollback(FlowRollback chain, Map data) { final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); for (VolumeSpec vspec : spec.getVolumeSpecs()) { if (vspec.isVolumeCreated()) { // don't return capacity as it has been returned when the volume is deleted continue; } IncreasePrimaryStorageCapacityMsg msg = new IncreasePrimaryStorageCapacityMsg(); msg.setDiskSize(vspec.getSize()); msg.setPrimaryStorageUuid(vspec.getPrimaryStorageInventory().getUuid()); bus.makeTargetServiceIdByResourceUuid(msg, PrimaryStorageConstant.SERVICE_ID, vspec.getPrimaryStorageInventory().getUuid()); bus.send(msg); } chain.rollback(); } }
@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 rollback(FlowRollback chain, Map data) { final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); for (VolumeSpec vspec : spec.getVolumeSpecs()) { if (vspec.isVolumeCreated()) { // don't return capacity as it has been returned when the volume is deleted continue; } IncreasePrimaryStorageCapacityMsg msg = new IncreasePrimaryStorageCapacityMsg(); msg.setDiskSize(vspec.getSize()); msg.setPrimaryStorageUuid(vspec.getPrimaryStorageInventory().getUuid()); bus.makeTargetServiceIdByResourceUuid(msg, PrimaryStorageConstant.SERVICE_ID, vspec.getPrimaryStorageInventory().getUuid()); bus.send(msg); } chain.rollback(); } }
@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(); }
@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 handle(Map data) { // new IsoOperator().attachIsoToVm(self.getUuid(), isoUuid); final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); final VmInstanceSpec.IsoSpec isoSpec = spec.getDestIsoList().stream() .filter(s -> s.getImageUuid().equals(isoUuid)) .findAny() .get(); targetVmCdRomVO.setIsoUuid(isoUuid); targetVmCdRomVO.setIsoInstallPath(isoSpec.getInstallPath()); dbf.update(targetVmCdRomVO); new IsoOperator().syncVmIsoSystemTag(self.getUuid()); 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 rollback(FlowRollback trigger, Map data) { Long size = (Long) data.get(LocalStorageAllocateCapacityForAttachingVolumeFlow.class); if (size != null) { PrimaryStorageInventory pri = (PrimaryStorageInventory) data.get( VmInstanceConstant.Params.DestPrimaryStorageInventoryForAttachingVolume.toString()); IncreasePrimaryStorageCapacityMsg imsg = new IncreasePrimaryStorageCapacityMsg(); imsg.setPrimaryStorageUuid(pri.getUuid()); imsg.setDiskSize(size); bus.makeTargetServiceIdByResourceUuid(imsg, PrimaryStorageConstant.SERVICE_ID, pri.getUuid()); bus.send(imsg); } trigger.rollback(); } }
@Override public void run(FlowTrigger chain, Map ctx) { List<VmAttachVolumeExtensionPoint> exts = pluginRegistry.getExtensionList( VmAttachVolumeExtensionPoint.class); final VolumeInventory volume = (VolumeInventory) ctx.get(VmInstanceConstant.Params.AttachingVolumeInventory.toString()); final VmInstanceSpec spec = (VmInstanceSpec) ctx.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); CollectionUtils.safeForEach(exts, new ForEachFunction<VmAttachVolumeExtensionPoint>() { @Override public void run(VmAttachVolumeExtensionPoint arg) { arg.afterInstantiateVolume(spec.getVmInventory(), volume); } }); chain.next(); }
@Override public Flow marshalTheNextFlow(String previousFlowClassName, String nextFlowClassName, FlowChain chain, Map data) { Flow nflow = null; for (MarshalVmOperationFlowExtensionPoint mext : pluginRgty.getExtensionList(MarshalVmOperationFlowExtensionPoint.class)) { VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); nflow = mext.marshalVmOperationFlow(previousFlowClassName, nextFlowClassName, chain, spec); if (nflow != null) { logger.debug(String.format("a VM[uuid: %s, operation: %s] operation flow[%s] is changed to the flow[%s] by %s", self.getUuid(), spec.getCurrentVmOperation(), nextFlowClassName, nflow.getClass(), mext.getClass())); break; } } return nflow; } });
@Override public void rollback(FlowRollback chain, Map data) { Long size = (Long) data.get(VmAllocatePrimaryStorageForAttachingDiskFlow.class); if (size != null) { PrimaryStorageInventory pri = (PrimaryStorageInventory) data.get(VmInstanceConstant.Params.DestPrimaryStorageInventoryForAttachingVolume.toString()); IncreasePrimaryStorageCapacityMsg imsg = new IncreasePrimaryStorageCapacityMsg(); imsg.setPrimaryStorageUuid(pri.getUuid()); imsg.setDiskSize(size); bus.makeTargetServiceIdByResourceUuid(imsg, PrimaryStorageConstant.SERVICE_ID, pri.getUuid()); bus.send(imsg); } chain.rollback(); } }
@Override public void run(FlowTrigger trigger, Map data) { VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString()); if (spec.getVmInventory().getDefaultL3NetworkUuid() != null) { trigger.next(); return; } L3NetworkInventory l3 = VmNicSpec.getL3NetworkInventoryOfSpec(spec.getL3Networks()).get(0); VmInstanceVO vm = dbf.findByUuid(spec.getVmInventory().getUuid(), VmInstanceVO.class); vm.setDefaultL3NetworkUuid(l3.getUuid()); dbf.update(vm); data.put(VmSetDefaultL3NetworkOnAttachingFlow.class, true); trigger.next(); }
@Override public void run(final FlowTrigger trigger, final Map data) { final L3NetworkInventory l3 = (L3NetworkInventory) data.get(VmInstanceConstant.Params.L3NetworkInventory.toString()); final VmInstanceInventory vm = (VmInstanceInventory) data.get(VmInstanceConstant.Params.vmInventory.toString()); /* vmnic is not bound to vm instance */ if (vm == null) { trigger.next(); return; } for (VmPreAttachL3NetworkExtensionPoint ext : pluginRgty.getExtensionList(VmPreAttachL3NetworkExtensionPoint.class)) { ext.vmPreAttachL3Network(vm, l3); } trigger.next(); }