private void handle(final AttachIsoOnHypervisorMsg msg) { inQueue().asyncBackup(msg) .name(String.format("attach-iso-%s-on-host-%s", msg.getIsoSpec().getImageUuid(), self.getUuid())) .run(chain -> attachIso(msg, new NoErrorCompletion(msg, chain) { @Override public void done() { chain.next(); } })); }
private void handle(final AttachVolumeToVmOnHypervisorMsg msg) { inQueue().name(String.format("attach-volume-on-kvm-%s", self.getUuid())) .asyncBackup(msg) .run(chain -> attachVolume(msg, new NoErrorCompletion(chain) { @Override public void done() { chain.next(); } })); }
private void migrateVm(final MigrateVmOnHypervisorMsg msg, final NoErrorCompletion completion) { checkStatus(); List<MigrateStruct> lst = new ArrayList<>(); MigrateStruct s = buildMigrateStuct(msg); lst.add(s); final MigrateVmOnHypervisorReply reply = new MigrateVmOnHypervisorReply(); migrateVm(lst.iterator(), new Completion(msg, completion) { @Override public void success() { bus.reply(msg, reply); completion.done(); } @Override public void fail(ErrorCode errorCode) { reply.setError(errorCode); bus.reply(msg, reply); completion.done(); } }); }
private void handle(final CheckNetworkPhysicalInterfaceMsg msg) { inQueue().name(String.format("check-network-physical-interface-on-host-%s", self.getUuid())) .asyncBackup(msg) .run(chain -> checkPhysicalInterface(msg, new NoErrorCompletion(chain) { @Override public void done() { chain.next(); } })); }
private void startVm(final VmInstanceSpec spec, final NeedReplyMessage msg, final NoErrorCompletion completion) { checkStateAndStatus(); final StartVmCmd cmd = new StartVmCmd(); cmd.setAdditionalQmp(VmGlobalConfig.ADDITIONAL_QMP.value(Boolean.class)); cmd.setApplianceVm(spec.getVmInventory().getType().equals("ApplianceVm")); cmd.setSystemSerialNumber(makeAndSaveVmSystemSerialNumber(spec.getVmInventory().getUuid())); rootVolume.setInstallPath(spec.getDestRootVolume().getInstallPath()); rootVolume.setDeviceId(spec.getDestRootVolume().getDeviceId()); rootVolume.setDeviceType(getVolumeTOType(spec.getDestRootVolume())); rootVolume.setVolumeUuid(spec.getDestRootVolume().getUuid()); rootVolume.setUseVirtio(virtio); rootVolume.setUseVirtioSCSI(KVMSystemTags.VOLUME_VIRTIO_SCSI.hasTag(spec.getDestRootVolume().getUuid())); rootVolume.setWwn(setVolumeWwn(spec.getDestRootVolume().getUuid())); rootVolume.setCacheMode(KVMGlobalConfig.LIBVIRT_CACHE_MODE.value()); v.setInstallPath(data.getInstallPath()); v.setDeviceId(data.getDeviceId()); v.setDeviceType(getVolumeTOType(data)); v.setVolumeUuid(data.getUuid()); v.setWwn(setVolumeWwn(data.getUuid())); v.setShareable(data.isShareable()); v.setCacheMode(KVMGlobalConfig.LIBVIRT_CACHE_MODE.value()); NicTO to = completeNicInfo(nic); nics.add(to); cmd.setBootDev(toKvmBootDev(spec.getBootOrders()));
if (CoreGlobalProperty.UNIT_TEST_ON) { if (info.isNewAdded()) { createHostVersionSystemTags("zstack", "kvmSimulator", tester.get(ZTester.KVM_HostVersion, "0.1", String.class)); if (null == KVMSystemTags.LIBVIRT_VERSION.getTokenByResourceUuid(self.getUuid(), KVMSystemTags.LIBVIRT_VERSION_TOKEN)) { createTagWithoutNonValue(KVMSystemTags.LIBVIRT_VERSION, KVMSystemTags.LIBVIRT_VERSION_TOKEN, tester.get(ZTester.KVM_LibvirtVersion, "1.2.9", String.class), true); createTagWithoutNonValue(KVMSystemTags.QEMU_IMG_VERSION, KVMSystemTags.QEMU_IMG_VERSION_TOKEN, tester.get(ZTester.KVM_QemuImageVersion, "2.0.0", String.class), true); createTagWithoutNonValue(KVMSystemTags.CPU_MODEL_NAME, KVMSystemTags.CPU_MODEL_NAME_TOKEN, tester.get(ZTester.KVM_CpuModelName, "Broadwell", String.class), true); if (!checkQemuLibvirtVersionOfHost()) { complete.fail(operr("host [uuid:%s] cannot be added to cluster [uuid:%s] because qemu/libvirt version does not match", self.getUuid(), self.getClusterUuid())); .getTokenByResourceUuid(self.getClusterUuid(), KVMSystemTags.CHECK_CLUSTER_CPU_MODEL_TOKEN) .equals("true") && !checkCpuModelOfHost()) { complete.fail(operr("host [uuid:%s] cannot be added to cluster [uuid:%s] because cpu model name does not match", self.getUuid(), self.getClusterUuid())); if (KVMGlobalConfig.CHECK_HOST_CPU_MODEL_NAME.value(Boolean.class) && !checkCpuModelOfHost()) { complete.fail(operr("host [uuid:%s] cannot be added to cluster [uuid:%s] because cpu model name does not match", self.getUuid(), self.getClusterUuid())); continueConnect(info.isNewAdded(), complete); } else { FlowChain chain = FlowChainBuilder.newShareFlowChain();
private void executeSyncHttpCall(KVMHostSyncHttpCallMsg msg, NoErrorCompletion completion) { if (!msg.isNoStatusCheck()) { checkStatus(); } String url = buildUrl(msg.getPath()); MessageCommandRecorder.record(msg.getCommandClassName()); Map<String, String> headers = new HashMap<>(); headers.put(Constants.AGENT_HTTP_HEADER_RESOURCE_UUID, self.getUuid()); LinkedHashMap rsp = restf.syncJsonPost(url, msg.getCommand(), headers, LinkedHashMap.class); KVMHostSyncHttpCallReply reply = new KVMHostSyncHttpCallReply(); reply.setResponse(rsp); bus.reply(msg, reply); completion.done(); }
@Override public Host getHost(HostVO vo) { KVMHostVO kvo = dbf.findByUuid(vo.getUuid(), KVMHostVO.class); KVMHostContext context = getHostContext(vo.getUuid()); if (context == null) { context = createHostContext(kvo); } return new KVMHost(kvo, context); }
private void executeAsyncHttpCall(final KVMHostAsyncHttpCallMsg msg, final NoErrorCompletion completion) { if (!msg.isNoStatusCheck()) { checkStatus(); } String url = buildUrl(msg.getPath()); MessageCommandRecorder.record(msg.getCommandClassName()); new Http<>(url, msg.getCommand(), LinkedHashMap.class) .call(new ReturnValueCompletion<LinkedHashMap>(msg, completion) { @Override public void success(LinkedHashMap ret) { KVMHostAsyncHttpCallReply reply = new KVMHostAsyncHttpCallReply(); reply.setResponse(ret); bus.reply(msg, reply); completion.done(); } @Override public void fail(ErrorCode err) { KVMHostAsyncHttpCallReply reply = new KVMHostAsyncHttpCallReply(); if (err.isError(SysErrors.HTTP_ERROR, SysErrors.IO_ERROR)) { reply.setError(err(HostErrors.OPERATION_FAILURE_GC_ELIGIBLE, err, "cannot do the operation on the KVM host")); } else { reply.setError(err); } bus.reply(msg, reply); completion.done(); } }); }