public void send(final Object cmd, final String path, final KvmCommandFailureChecker checker, final SteppingSendCallback<KvmResponseWrapper> completion) { List<KVMHostAsyncHttpCallMsg> msgs = hostUuids.stream().map(huuid -> { KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setCommand(cmd); msg.setHostUuid(huuid); msg.setPath(path); msg.setNoStatusCheck(noStatusCheck); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, huuid); return msg; }).collect(Collectors.toList()); bus.send(msgs, msgs.size(), new CloudBusSteppingCallback(completion) { @Override public void run(NeedReplyMessage msg, MessageReply reply) { KVMHostAsyncHttpCallMsg kmsg = (KVMHostAsyncHttpCallMsg) msg; completion.hostUuid = kmsg.getHostUuid(); if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } KVMHostAsyncHttpCallReply ar = reply.castReply(); KvmResponseWrapper w = new KvmResponseWrapper(ar.getResponse()); ErrorCode err = checker.getError(w); if (err != null) { completion.fail(err); return; } completion.success(w); } }); }
@Override public void cleanUpUnusedRuleOnHost(String hostUuid, final Completion completion) { KVMAgentCommands.CleanupUnusedRulesOnHostCmd cmd = new KVMAgentCommands.CleanupUnusedRulesOnHostCmd(); KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setHostUuid(hostUuid); msg.setCommand(cmd); msg.setPath(SECURITY_GROUP_CLEANUP_UNUSED_RULE_ON_HOST_PATH); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, hostUuid); bus.send(msg, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } KVMHostAsyncHttpCallReply hreply = reply.castReply(); CleanupUnusedRulesOnHostResponse rsp = hreply.toResponse(CleanupUnusedRulesOnHostResponse.class); if (!rsp.isSuccess()) { completion.fail(operr("operation error, because:%s", rsp.getError())); return; } completion.success(); } }); }
@Override public KVMHostAsyncHttpCallMsg call(String arg) { GetPhysicalCapacityCmd cmd = new GetPhysicalCapacityCmd(); cmd.uuid = self.getUuid(); cmd.setHostUuid(arg); cmd.storagePath = self.getUrl(); KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setHostUuid(arg); msg.setCommand(cmd); msg.setPath(GET_PHYSICAL_CAPACITY_PATH); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, arg); return msg; } });
@Override public KVMHostAsyncHttpCallMsg call(String arg) { InitCmd cmd = new InitCmd(); cmd.uuid = self.getUuid(); cmd.path = self.getUrl(); cmd.hostUuid = arg; KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setCommand(cmd); msg.setPath(INIT_PATH); msg.setHostUuid(arg); msg.setNoStatusCheck(noCheckStatus); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, arg); return msg; } });
@Override public void checkDefaultRules(String hostUuid, Completion completion) { CheckDefaultSecurityGroupCmd cmd = new CheckDefaultSecurityGroupCmd(); KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setHostUuid(hostUuid); msg.setPath(SECURITY_GROUP_CHECK_DEFAULT_RULES_ON_HOST_PATH); msg.setCommand(cmd); msg.setNoStatusCheck(true); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, hostUuid); bus.send(msg, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } KVMHostAsyncHttpCallReply hreply = reply.castReply(); CheckDefaultSecurityGroupResponse rsp = hreply.toResponse(CheckDefaultSecurityGroupResponse.class); if (!rsp.isSuccess()) { ErrorCode err = operr("failed to check default rules of security group on kvm host[uuid:%s], because %s", hostUuid, rsp.getError()); completion.fail(err); return; } String info = String.format("successfully applied rules of security group rules to kvm host[uuid:%s]", hostUuid); logger.debug(info); completion.success(); } }); }
@Override public void updateGroupMembers(SecurityGroupMembersTO gto, String hostUuid, Completion completion) { KVMAgentCommands.UpdateGroupMemberCmd cmd = new KVMAgentCommands.UpdateGroupMemberCmd(); cmd.setUpdateGroupTOs(asList(gto)); KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setHostUuid(hostUuid); msg.setCommand(cmd); msg.setPath(SECURITY_GROUP_UPDATE_GROUP_MEMBER); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, hostUuid); bus.send(msg, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } KVMHostAsyncHttpCallReply hreply = reply.castReply(); KVMAgentCommands.UpdateGroupMemberResponse rsp = hreply.toResponse(KVMAgentCommands.UpdateGroupMemberResponse.class); if (!rsp.isSuccess()) { completion.fail(operr("operation error, because:%s", rsp.getError())); return; } completion.success(); } }); }
msg.setHostUuid(hto.getHostUuid()); msg.setPath(SECURITY_GROUP_APPLY_RULE_PATH); msg.setCommand(cmd); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, hto.getHostUuid()); bus.send(msg, new CloudBusCallBack(complete) {
private <T extends NfsPrimaryStorageAgentResponse> void asyncHttpCall(String path, final String hostUuid, NfsPrimaryStorageAgentCommand cmd, boolean noCheckStatus, final Class<T> rspType, PrimaryStorageInventory inv, final ReturnValueCompletion<T> completion) { cmd.setUuid(inv.getUuid()); KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setHostUuid(hostUuid); msg.setPath(path); msg.setNoStatusCheck(noCheckStatus); msg.setCommand(cmd); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, hostUuid); bus.send(msg, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } KVMHostAsyncHttpCallReply r = reply.castReply(); final T rsp = r.toResponse(rspType); if (!rsp.isSuccess()) { completion.fail(operr("operation error, because:%s", rsp.getError())); return; } updatePrimaryStorageCapacity(inv.getUuid(), rsp); completion.success(rsp); } }); }
msg.setHostUuid(hto.getHostUuid()); msg.setPath(SECURITY_GROUP_REFRESH_RULE_ON_HOST_PATH); msg.setCommand(cmd); msg.setNoStatusCheck(true); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, hto.getHostUuid());
protected <T extends AgentResponse> void httpCall(String path, final String hostUuid, AgentCommand cmd, boolean noCheckStatus, final Class<T> rspType, final ReturnValueCompletion<T> completion) { cmd.uuid = self.getUuid(); cmd.storagePath = self.getUrl(); KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setHostUuid(hostUuid); msg.setPath(path); msg.setNoStatusCheck(noCheckStatus); msg.setCommand(cmd); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, hostUuid); bus.send(msg, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } KVMHostAsyncHttpCallReply r = reply.castReply(); T rsp = r.toResponse(rspType); if (!rsp.isSuccess()) { completion.fail(operr("operation error, because:%s", rsp.getError())); return; } if (rsp.getTotalCapacity() != null && rsp.getAvailableCapacity() != null) { new LocalStorageCapacityUpdater().updatePhysicalCapacityByKvmAgentResponse(self.getUuid(), hostUuid, rsp); } completion.success(rsp); } }); }
@Override public void list(PrimaryStorageInventory pinv, String path, ReturnValueCompletion<List<String>> completion) { HostInventory host = nfsFactory.getConnectedHostForOperation(pinv).get(0); ListDirectionCmd cmd = new ListDirectionCmd(); cmd.setPath(path); cmd.setUuid(pinv.getUuid()); KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setCommand(cmd); msg.setPath(LIST_PATH); msg.setHostUuid(host.getUuid()); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, host.getUuid()); bus.send(msg, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } ListDirectionResponse rsp = ((KVMHostAsyncHttpCallReply) reply).toResponse(ListDirectionResponse.class); if (!rsp.isSuccess()) { logger.warn(String.format("failed to list path[%s] on nfs primary storage[uuid:%s], %s, will clean up", path, pinv.getUuid(), rsp.getError())); completion.fail(operr("%s", rsp.getError())); } else { completion.success(rsp.getPaths()); } } }); }
private <T extends AgentResponse> void callKvmHost(final String hostUuid, final String psUuid, String path, AgentCommand cmd, final Class<T> rspType, final ReturnValueCompletion<T> completion) { cmd.storagePath = Q.New(PrimaryStorageVO.class). eq(PrimaryStorageVO_.uuid, psUuid). select(PrimaryStorageVO_.url). findValue(); KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setCommand(cmd); msg.setPath(path); msg.setHostUuid(hostUuid); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, hostUuid); bus.send(msg, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } KVMHostAsyncHttpCallReply r = reply.castReply(); T rsp = r.toResponse(rspType); if (!rsp.isSuccess()) { completion.fail(operr("operation error, because:%s", rsp.getError())); return; } if (rsp.getTotalCapacity() != null && rsp.getAvailableCapacity() != null) { new LocalStorageCapacityUpdater().updatePhysicalCapacityByKvmAgentResponse(psUuid, hostUuid, rsp); } completion.success(rsp); } }); }
private void delete(final PrimaryStorageInventory pinv, final String installPath, boolean isFolder, final Completion completion) { HostInventory host = nfsFactory.getConnectedHostForOperation(pinv).get(0); DeleteCmd cmd = new DeleteCmd(); cmd.setFolder(isFolder); cmd.setInstallPath(installPath); cmd.setUuid(pinv.getUuid()); KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setCommand(cmd); msg.setPath(DELETE_PATH); msg.setHostUuid(host.getUuid()); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, host.getUuid()); bus.send(msg, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } DeleteResponse rsp = ((KVMHostAsyncHttpCallReply) reply).toResponse(DeleteResponse.class); if (!rsp.isSuccess()) { logger.warn(String.format("failed to delete bits[%s] on nfs primary storage[uuid:%s], %s, will clean up", installPath, pinv.getUuid(), rsp.getError())); } else { nfsMgr.reportCapacityIfNeeded(pinv.getUuid(), rsp); } completion.success(); } }); }
@Override public void applyEip(EipStruct struct, final Completion completion) { ApplyEipCmd cmd = new ApplyEipCmd(); cmd.eip = eipStructToEipTO(struct); String hostUuid = getHostUuidByVmUuid(cmd.eip.vmUuid); KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setCommand(cmd); msg.setHostUuid(hostUuid); msg.setPath(APPLY_EIP_PATH); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, msg.getHostUuid()); bus.send(msg, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } KVMHostAsyncHttpCallReply ar = reply.castReply(); AgentRsp rsp = ar.toResponse(AgentRsp.class); if (!rsp.success) { completion.fail(operr("operation error, because:%s", rsp.error)); return; } for (AfterApplyFlatEipExtensionPoint ext : pluginRgty.getExtensionList(AfterApplyFlatEipExtensionPoint.class)) { ext.AfterApplyFlatEip(asList(struct.getVip().getUuid()), hostUuid); } completion.success(); } }); }
msg.setCommand(cmd); msg.setHostUuid(spec.getDestHost().getUuid()); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, spec.getDestHost().getUuid());
msg.setCommand(cmd); msg.setPath(VirtualRouterConstant.VR_KVM_DELETE_BOOTSTRAP_ISO_PATH); msg.setHostUuid(hostUuid);
@Override public void checkIsBitsExisting(final PrimaryStorageInventory inv, final String installPath, final ReturnValueCompletion<Boolean> completion) { HostInventory host = nfsFactory.getConnectedHostForOperation(inv).get(0); CheckIsBitsExistingCmd cmd = new CheckIsBitsExistingCmd(); cmd.setUuid(inv.getUuid()); cmd.setInstallPath(installPath); KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setCommand(cmd); msg.setPath(CHECK_BITS_PATH); msg.setHostUuid(host.getUuid()); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, host.getUuid()); bus.send(msg, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } CheckIsBitsExistingRsp rsp = ((KVMHostAsyncHttpCallReply) reply).toResponse(CheckIsBitsExistingRsp.class); if (!rsp.isSuccess()) { completion.fail(operr("failed to check existence of %s on nfs primary storage[uuid:%s], %s", installPath, inv.getUuid(), rsp.getError())); return; } nfsMgr.reportCapacityIfNeeded(inv.getUuid(), rsp); completion.success(rsp.isExisting()); } }); }
@Override public void revertVolumeFromSnapshot(VolumeSnapshotInventory sinv, VolumeInventory vol, HostInventory host, ReturnValueCompletion<RevertVolumeFromSnapshotOnPrimaryStorageReply> completion) { RevertVolumeFromSnapshotCmd cmd = new RevertVolumeFromSnapshotCmd(); cmd.setSnapshotInstallPath(sinv.getPrimaryStorageInstallPath()); cmd.setUuid(sinv.getPrimaryStorageUuid()); KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setCommand(cmd); msg.setPath(REVERT_VOLUME_FROM_SNAPSHOT_PATH); msg.setHostUuid(host.getUuid()); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, host.getUuid()); bus.send(msg, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } RevertVolumeFromSnapshotResponse rsp = ((KVMHostAsyncHttpCallReply) reply).toResponse(RevertVolumeFromSnapshotResponse.class); if (!rsp.isSuccess()) { completion.fail(operr("failed to revert volume[uuid:%s] to snapshot[uuid:%s] on kvm host[uuid:%s, ip:%s], %s", vol.getUuid(), sinv.getUuid(), host.getUuid(), host.getManagementIp(), rsp.getError())); return; } RevertVolumeFromSnapshotOnPrimaryStorageReply r = new RevertVolumeFromSnapshotOnPrimaryStorageReply(); r.setNewVolumeInstallPath(rsp.getNewVolumeInstallPath()); r.setSize(rsp.getSize()); completion.success(r); } }); }
@Override public void preMigrateVm(VmInstanceInventory inv, String destHostUuid) { if (!needLink(inv)) { return; } FusionstorQueryCmd cmd = new FusionstorQueryCmd(); cmd.query = "query"; KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setCommand(cmd); msg.setPath(KVM_FUSIONSTOR_QUERY_PATH); msg.setHostUuid(destHostUuid); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, destHostUuid); MessageReply reply = bus.call(msg); if (!reply.isSuccess()) { throw new OperationFailureException(reply.getError()); } KVMHostAsyncHttpCallReply r = reply.castReply(); FusionstorQueryRsp rsp = r.toResponse(FusionstorQueryRsp.class); if (!rsp.isSuccess()) { throw new OperationFailureException(operr(rsp.getError())); } return; }
@Override public void resetRootVolumeFromImage(final VolumeInventory vol, final HostInventory host, final ReturnValueCompletion<String> completion) { ReInitImageCmd cmd = new ReInitImageCmd(); PrimaryStorageInventory psInv = PrimaryStorageInventory.valueOf(dbf.findByUuid(vol.getPrimaryStorageUuid(), PrimaryStorageVO.class)); cmd.setImagePath(NfsPrimaryStorageKvmHelper.makeCachedImageInstallUrlFromImageUuidForTemplate(psInv, vol.getRootImageUuid())); cmd.setVolumePath(NfsPrimaryStorageKvmHelper.makeRootVolumeInstallUrl(psInv, vol)); cmd.setUuid(vol.getPrimaryStorageUuid()); KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg(); msg.setCommand(cmd); msg.setPath(REINIT_IMAGE_PATH); msg.setHostUuid(host.getUuid()); bus.makeTargetServiceIdByResourceUuid(msg, HostConstant.SERVICE_ID, host.getUuid()); bus.send(msg, new CloudBusCallBack(completion) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } ReInitImageRsp rsp = ((KVMHostAsyncHttpCallReply) reply).toResponse(ReInitImageRsp.class); if (!rsp.isSuccess()) { completion.fail(operr("failed to revert volume[uuid:%s] to image[uuid:%s] on kvm host[uuid:%s, ip:%s], %s", vol.getUuid(), vol.getRootImageUuid(), host.getUuid(), host.getManagementIp(), rsp.getError())); return; } completion.success(rsp.getNewVolumeInstallPath()); } }); }