@Override public String getName() { return String.format("after-attach-nic-%s-on-vm-%s", nicInventory.getUuid(), nicInventory.getVmInstanceUuid()); } });
public static boolean isDefaultNic(VmNicInventory nic, VmInstanceInventory vm) { if (nic.getVmInstanceUuid() == null || vm.getDefaultL3NetworkUuid() == null || !nic.getVmInstanceUuid().equals(vm.getUuid())) { return false; } for (UsedIpInventory ip : nic.getUsedIps()) { if (ip.getL3NetworkUuid().equals(vm.getDefaultL3NetworkUuid())) { return true; } } return false; }
private List<String> getCleanTrafficIp(VmNicInventory nic) { boolean isUserVm = Q.New(VmInstanceVO.class) .eq(VmInstanceVO_.uuid, nic.getVmInstanceUuid()).select(VmInstanceVO_.type) .findValue().equals(VmInstanceConstant.USER_VM_TYPE); if (!isUserVm) { return null; } String tagValue = VmSystemTags.CLEAN_TRAFFIC.getTokenByResourceUuid(nic.getVmInstanceUuid(), VmSystemTags.CLEAN_TRAFFIC_TOKEN); if (Boolean.valueOf(tagValue) || (tagValue == null && VmGlobalConfig.VM_CLEAN_TRAFFIC.value(Boolean.class))) { return VmNicHelper.getIpAddresses(nic); } return null; }
@Override public void afterAttachNic(VmNicInventory nic, Completion completion) { if (!isVirtualRouterDnsBackend(nic)) { completion.success(); return; } ApplyDnsForVirtualRouter(nic.getVmInstanceUuid(), null, completion); }
@Override public void beforeDetachNicRollback(VmNicInventory nic, NoErrorCompletion completion) { if (!isVirtualRouterDnsBackend(nic)) { completion.done(); return; } ApplyDnsForVirtualRouter(nic.getVmInstanceUuid(), null, new Completion(completion) { @Override public void success() { completion.done(); } @Override public void fail(ErrorCode errorCode) { completion.done(); } }); }
@Override public void beforeDetachNic(VmNicInventory nic, Completion completion) { if (!isVirtualRouterDnsBackend(nic)) { completion.success(); return; } ApplyDnsForVirtualRouter(nic.getVmInstanceUuid(), nic.getL3NetworkUuid(), completion); }
public void deleteSecondaryNetworksByVmNic(VmNicInventory nic) { String vmUuid = nic.getVmInstanceUuid(); if (vmUuid == null) { return; } String l3Uuid = nic.getL3NetworkUuid(); Map<String, List<String>> secondaryNetworksMap = getSecondaryNetworksByVmUuid(vmUuid); for (Map.Entry<String, List<String>> e : secondaryNetworksMap.entrySet()) { String primaryL3 = e.getKey(); List<String> secondaryNetworksList = e.getValue(); if (primaryL3.equals(l3Uuid) || secondaryNetworksList.contains(l3Uuid)) { /* delete old systemTags */ for (String uuid : secondaryNetworksList) { VmSystemTags.DUAL_STACK_NIC.delete(vmUuid, TagUtils.tagPatternToSqlPattern(VmSystemTags.DUAL_STACK_NIC.instantiateTag( map(e(VmSystemTags.DUAL_STACK_NIC_PRIMARY_L3_TOKEN, primaryL3), e(VmSystemTags.DUAL_STACK_NIC_SECONDARY_L3_TOKEN, uuid))))); } return; } } } }
@Override public void afterAttachNicRollback(VmNicInventory nic, NoErrorCompletion completion) { if (!isVirtualRouterDnsBackend(nic)) { completion.done(); return; } ApplyDnsForVirtualRouter(nic.getVmInstanceUuid(), nic.getL3NetworkUuid(), new Completion(completion) { @Override public void success() { completion.done(); } @Override public void fail(ErrorCode errorCode) { completion.done(); } }); }
@Override public void success() { logger.debug(String.format("successfully released eip[uuid:%s, ip:%s] for vm[uuid:%s, nic uuid:%s]", struct.getEip().getUuid(), struct.getVip().getIp(), struct.getNic().getVmInstanceUuid(), struct.getNic().getUuid())); releaseNetworkService(it, providerType, detachInDb, completion); }
@Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } VirtualRouterAsyncHttpCallReply re = reply.castReply(); CreateVipRsp ret = re.toResponse(CreateVipRsp.class); if (!ret.isSuccess()) { ErrorCode err = operr("failed to sync vips[ips: %s] on virtual router[uuid:%s]" + " for attaching nic[uuid: %s, ip: %s], because %s", vips.stream().map(v -> v.getIp()).collect(Collectors.toList()), nic.getVmInstanceUuid(), nic.getUuid(), nic.getIp(), ret.getError()); completion.fail(err); } else { completion.success(); } } });
private List<Tuple> findEipOnVmNic(VmNicInventory nic) throws OperationFailureException { List<Tuple> eips = findEipTuplesOnVmNic(nic); if (eips == null || eips.isEmpty()) { return new ArrayList<>(); } List<VirtualRouterEipRefVO> refs = new ArrayList<VirtualRouterEipRefVO>(); for (Tuple eipTuple : eips) { /* eip can be bound to only 1 router */ VirtualRouterEipRefVO oldRef = Q.New(VirtualRouterEipRefVO.class). eq(VirtualRouterEipRefVO_.eipUuid, eipTuple.get(5, String.class)) .notEq(VirtualRouterEipRefVO_.virtualRouterVmUuid, nic.getVmInstanceUuid()).find(); if (oldRef != null) { throw new OperationFailureException(operr("Eip [uuid:%s] already bound to router [uuid:%s]", oldRef.getEipUuid(), oldRef.getVirtualRouterVmUuid())); } if (!Q.New(VirtualRouterEipRefVO.class) .eq(VirtualRouterEipRefVO_.eipUuid, eipTuple.get(5, String.class)) .eq(VirtualRouterEipRefVO_.virtualRouterVmUuid, nic.getVmInstanceUuid()) .isExists()) { VirtualRouterEipRefVO ref = new VirtualRouterEipRefVO(); ref.setEipUuid(eipTuple.get(5, String.class)); ref.setVirtualRouterVmUuid(nic.getVmInstanceUuid()); refs.add(ref); } } if (!refs.isEmpty()) { dbf.persistCollection(refs); } return eips; }
@Override public void run(final FlowTrigger trigger, final Map data) { final VmNicInventory nic = (VmNicInventory) data.get(VmInstanceConstant.Params.VmNicInventory.toString()); if (nic.getVmInstanceUuid() == null) { trigger.next(); return; } VmInstanceVO vmVo = dbf.findByUuid(nic.getVmInstanceUuid(), VmInstanceVO.class); VmNicInventory vmNic = VmNicInventory.valueOf(dbf.findByUuid(nic.getUuid(), VmNicVO.class)); /* if this is default nic and vm default l3 is different from nic l3 */ if (vmVo.getDefaultL3NetworkUuid() == null || VmNicHelper.isDefaultNic(nic, VmInstanceInventory.valueOf(vmVo))) { String primaryL3 = VmNicHelper.getPrimaryL3Uuid(vmNic); if (vmVo.getDefaultL3NetworkUuid() == null || !vmVo.getDefaultL3NetworkUuid().equals(primaryL3)) { vmVo.setDefaultL3NetworkUuid(primaryL3); dbf.updateAndRefresh(vmVo); } } trigger.next(); } }
@Override public void run(MessageReply reply) { if (!reply.isSuccess()) { completion.fail(reply.getError()); return; } VirtualRouterAsyncHttpCallReply re = reply.castReply(); VirtualRouterCommands.ConfigureNicFirewallDefaultActionRsp rsp = re.toResponse(VirtualRouterCommands.ConfigureNicFirewallDefaultActionRsp.class); if (rsp.isSuccess()) { logger.debug(String.format("successfully change nic[ip:%s, mac:%s] firewall default action of virtual router vm[uuid:%s]", nic.getIp(), nic.getMac(), nic.getVmInstanceUuid())); completion.success(); } else { ErrorCode err = operr("failed to change nic[ip:%s, mac:%s] firewall default action of virtual router vm[uuid:%s], because %s", nic.getIp(), nic.getMac(), nic.getVmInstanceUuid(), rsp.getError()); completion.fail(err); } } });
public void deleteSecondaryNetworksByVmNic(VmNicInventory nic, String l3Uuid) { String vmUuid = nic.getVmInstanceUuid(); if (vmUuid == null) { return;
data.put(Param.VR_NIC, nicInventory); ApplianceVmVO appvm = Q.New(ApplianceVmVO.class) .eq(ApplianceVmVO_.uuid, nicInventory.getVmInstanceUuid()).find(); if (appvm.getStatus().equals(ApplianceVmStatus.Disconnected)) { logger.debug(String.format("appliance vm[uuid: %s] current status is [%s], skip before detach nic", chain.setName(String.format("release-services-before-detach-nic-%s-from-virtualrouter-%s", nicInventory.getUuid(), nicInventory.getVmInstanceUuid())); chain.setData(data); chain.insert(new virtualRouterReleaseServicesbeforeDetachNicFlow());
@Transactional(readOnly = true) private NicTO completeNicInfo(VmNicInventory nic) { /* all l3 networks of the nic has same l2 network */ L2NetworkInventory l2inv = getL2NetworkTypeFromL3NetworkUuid(nic.getL3NetworkUuid()); KVMCompleteNicInformationExtensionPoint extp = factory.getCompleteNicInfoExtension(L2NetworkType.valueOf(l2inv.getType())); NicTO to = extp.completeNicInformation(l2inv, nic); if (to.getUseVirtio() == null) { SimpleQuery<VmInstanceVO> q = dbf.createQuery(VmInstanceVO.class); q.select(VmInstanceVO_.platform); q.add(VmInstanceVO_.uuid, Op.EQ, nic.getVmInstanceUuid()); String platform = q.findValue(); to.setUseVirtio(ImagePlatform.valueOf(platform).isParaVirtualization()); to.setIps(getCleanTrafficIp(nic)); } return to; }
@Override public void success() { List<Tuple> eips = findEipTuplesOnVmNic(nic);; if (eips == null || eips.isEmpty()) { completion.success(); } else { for (Tuple eipTuple : eips) { VirtualRouterEipRefVO ref = Q.New(VirtualRouterEipRefVO.class) .eq(VirtualRouterEipRefVO_.eipUuid, eipTuple.get(5, String.class)) .eq(VirtualRouterEipRefVO_.virtualRouterVmUuid, nic.getVmInstanceUuid()) .find(); if (ref != null) { dbf.remove(ref); UpdateQuery q = UpdateQuery.New(EipVO.class); q.condAnd(EipVO_.uuid, Op.EQ, eipTuple.get(5, String.class)); q.set(EipVO_.vmNicUuid, null); q.set(EipVO_.guestIp, null); q.update(); } } completion.success(); } }
private void attachNic(final VmAttachNicOnHypervisorMsg msg, final NoErrorCompletion completion) { checkStateAndStatus(); NicTO to = completeNicInfo(msg.getNicInventory()); final VmAttachNicOnHypervisorReply reply = new VmAttachNicOnHypervisorReply(); AttachNicCommand cmd = new AttachNicCommand(); cmd.setVmUuid(msg.getNicInventory().getVmInstanceUuid()); cmd.setNic(to); KVMHostInventory inv = (KVMHostInventory) getSelfInventory(); for (KvmPreAttachNicExtensionPoint ext : pluginRgty.getExtensionList(KvmPreAttachNicExtensionPoint.class)) { ext.preAttachNicExtensionPoint(inv, cmd); } new Http<>(attachNicPath, cmd, AttachNicResponse.class).call(new ReturnValueCompletion<AttachNicResponse>(msg, completion) { @Override public void success(AttachNicResponse ret) { if (!ret.isSuccess()) { reply.setError(operr("failed to attach nic[uuid:%s, vm:%s] on kvm host[uuid:%s, ip:%s]," + "because %s", msg.getNicInventory().getUuid(), msg.getNicInventory().getVmInstanceUuid(), self.getUuid(), self.getManagementIp(), ret.getError())); } bus.reply(msg, reply); completion.done(); } @Override public void fail(ErrorCode errorCode) { reply.setError(errorCode); bus.reply(msg, reply); completion.done(); } }); }
@Override protected void scripts() { String acntUuid = Account.getAccountUuidOfResource(spec.getVmInventory().getUuid()); spec.getDestNics().forEach(nic -> { VmNicVO nvo = new VmNicVO(); nvo.setUuid(nic.getUuid()); nvo.setDeviceId(nic.getDeviceId()); nvo.setIp(nic.getIp()); nvo.setL3NetworkUuid(nic.getL3NetworkUuid()); nvo.setMac(nic.getMac()); nvo.setHypervisorType(nic.getHypervisorType()); nvo.setUsedIpUuid(nic.getUsedIpUuid()); nvo.setGateway(nic.getGateway()); nvo.setNetmask(nic.getNetmask()); nvo.setVmInstanceUuid(nic.getVmInstanceUuid()); nvo.setMetaData(nic.getMetaData()); nvo.setInternalName(nic.getInternalName()); nvo.setAccountUuid(acntUuid); nvo.setIpVersion(nic.getIpVersion()); persist(nvo); if (nic.getUsedIpUuid() != null) { SQL.New(UsedIpVO.class).eq(UsedIpVO_.uuid, nic.getUsedIpUuid()).set(UsedIpVO_.vmNicUuid, nvo.getUuid()).update(); } }); ApplianceVmVO apvm = findByUuid(spec.getVmInventory().getUuid(), ApplianceVmVO.class); apvm.setManagementNetworkUuid(mgmtNic.getL3NetworkUuid()); merge(apvm); } }.execute();
private EipTO eipStructToEipTO(EipStruct struct) { EipTO to = new EipTO(); to.eipUuid = struct.getEip().getUuid(); to.vmUuid = struct.getNic().getVmInstanceUuid(); to.nicUuid = struct.getNic().getUuid(); to.nicName = struct.getNic().getInternalName();