public static VipTO valueOf(VipInventory inv, String ownerMac) { VipTO to = new VipTO(); to.setIp(inv.getIp()); to.setNetmask(inv.getNetmask()); to.setGateway(inv.getGateway()); to.setOwnerEthernetMac(ownerMac); to.setVipUuid(inv.getUuid()); return to; }
public static List<VipInventory> valueOf(Collection<VipVO> vos) { List<VipInventory> invs = new ArrayList<VipInventory>(vos.size()); for (VipVO vo : vos) { invs.add(VipInventory.valueOf(vo)); } return invs; }
private String getOwnerMac(VirtualRouterVmInventory vr, VipInventory vip) { for (VmNicInventory nic : vr.getVmNics()) { if (nic.getL3NetworkUuid().equals(vip.getL3NetworkUuid())) { return nic.getMac(); } } throw new CloudRuntimeException(String.format("virtual router vm[uuid:%s] has no nic on l3Network[uuid:%s] for vip[uuid:%s, ip:%s]", vr.getUuid(), vip.getL3NetworkUuid(), vip.getUuid(), vip.getIp())); }
@Override public String call(VipInventory arg) { return arg.getUuid(); } });
final VipInventory vip = VipInventory.valueOf(dbf.findByUuid(struct.getLb().getVipUuid(), VipVO.class)); VipUseForList useForList = new VipUseForList(vip.getUseFor()); if (!useForList.isIncluded(LoadBalancerConstants.LB_NETWORK_SERVICE_TYPE_STRING)) { logger.warn(String.format("the vip[uuid:%s, name:%s, ip:%s, useFor: %s] is not for load balancer", vip.getUuid(), vip.getName(), vip.getIp(), vip.getUseFor()));
@Override public String toString() { StringBuilder sb = new StringBuilder("port forwarding rule:"); sb.append(String.format("\n[uuid:%s, vip:%s]", rule.getUuid(), vip.getIp())); sb.append(String.format("\n[vip start port:%s, vip end port:%s, allowed CIDR:%s]", rule.getVipPortStart(), rule.getVipPortEnd(), rule.getAllowedCidr())); sb.append(String.format("\n[guest start port:%s, guest end port:%s, guest ip:%s]", rule.getPrivatePortStart(), rule.getPrivatePortEnd(), guestIp)); sb.append(String.format("\n[vm nic uuid:%s]", rule.getVmNicUuid())); return sb.toString(); } }
if (vip.getPeerL3NetworkUuids() != null && !vip.getPeerL3NetworkUuids().isEmpty()) { getTypeOfNetworkServiceProviderForService(vip.getPeerL3NetworkUuids().get(0), EipConstant.EIP_TYPE); String vrUuid = Q.New(VirtualRouterVipVO.class).select(VirtualRouterVipVO_.virtualRouterVmUuid).eq(VirtualRouterVipVO_.uuid, vip.getUuid()).findValue(); if (vrUuid == null) { vrUuid = getVipPeerL3NetworkAttachedVirtualRouter(vip); List<String> vrAttachedGuestL3 = Q.New(VmNicVO.class).select(VmNicVO_.l3NetworkUuid).eq(VmNicVO_.vmInstanceUuid, vrUuid).eq(VmNicVO_.metaData, GUEST_NIC_MASK).listValues(); logger.debug(String.format("there is virtual router[uuid:%s] associate with vip[uuid:%s], will return candidates from vr guest l3 networks[%s]", vrUuid, vip.getUuid(), vrAttachedGuestL3)); Set<VmNicInventory> r = candidates.stream() .filter(nic -> vrAttachedGuestL3.contains(nic.getL3NetworkUuid())) vip.getUuid(), vip.getPeerL3NetworkUuids())); Set<VmNicInventory> r = candidates.stream() .filter(nic -> vip.getPeerL3NetworkUuids().contains(nic.getL3NetworkUuid())) .collect(Collectors.toSet()); } else if (vipForVirtualRouter != null && vipForVirtualRouter == false) { logger.debug(String.format("remove all vmnics in virtual router network since vip[uuid:%s] has used in network which is not %s or %s", vip.getUuid(), VYOS_ROUTER_PROVIDER_TYPE, VIRTUAL_ROUTER_PROVIDER_TYPE)); candidates.removeAll(vmNicInVirtualRouter); return candidates; " and l3.uuid = nic.l3NetworkUuid" + " and l3.system = :isSystem") .param("l3NetworkUuid", vip.getL3NetworkUuid()) .param("isSystem", false)
final VipInventory vipInventory = VipInventory.valueOf(vipvo); ModifyVipAttributesStruct struct = new ModifyVipAttributesStruct(); struct.setUseFor(EipConstant.EIP_NETWORK_SERVICE_TYPE); Vip vip = new Vip(vipInventory.getUuid()); vip.setStruct(struct); vip.acquire(new Completion(msg) { ModifyVipAttributesStruct struct = new ModifyVipAttributesStruct(); struct.setUseFor(EipConstant.EIP_NETWORK_SERVICE_TYPE); Vip vip = new Vip(vipInventory.getUuid()); vip.setStruct(struct); vip.acquire(new Completion(msg) {
@Override public void run(final FlowTrigger trigger, final Map data) { final PortForwardingRuleTO to = (PortForwardingRuleTO) data.get(VirtualRouterConstant.VR_PORT_FORWARDING_RULE); final VirtualRouterVmInventory vr = (VirtualRouterVmInventory) data.get(VirtualRouterConstant.VR_RESULT_VM); final VipInventory vip = (VipInventory) data.get(VirtualRouterConstant.VR_VIP); final ApplianceVmFirewallRuleInventory rule = new ApplianceVmFirewallRuleInventory(); rule.setDestIp(vip.getIp()); rule.setProtocol(to.getProtocolType().toLowerCase()); rule.setEndPort(to.getPrivatePortEnd()); rule.setStartPort(to.getPrivatePortStart()); rule.setAllowCidr(to.getAllowedCidr()); apvmf.openFirewall(vr.getUuid(), vip.getL3NetworkUuid(), Arrays.asList(rule), new Completion(trigger) { @Override public void success() { logger.debug(String.format("successfully open firewall on virtual route[uuid:%s, name:%s] for port forwarding, firewall rule: %s", vr.getUuid(), vr.getName(), JSONObjectUtil.toJsonString(rule))); data.put(SUCCESS, rule); trigger.next(); } @Override public void fail(ErrorCode errorCode) { trigger.fail(errorCode); } }); }
@Override public void rollback(final FlowRollback trigger, Map data) { final ApplianceVmFirewallRuleInventory rule = (ApplianceVmFirewallRuleInventory) data.get(SUCCESS); if (rule == null) { trigger.rollback(); return; } final VirtualRouterVmInventory vr = (VirtualRouterVmInventory) data.get(VirtualRouterConstant.VR_RESULT_VM); final VipInventory vip = (VipInventory) data.get(VirtualRouterConstant.VR_VIP); apvmf.removeFirewall(vr.getUuid(), vip.getL3NetworkUuid(), Arrays.asList(rule), new Completion(trigger) { @Override public void success() { logger.debug(String.format("successfully rollback firewall on virtual route[uuid:%s, name:%s] for port forwarding, firewall rule: %s", vr.getUuid(), vr.getName(), JSONObjectUtil.toJsonString(rule))); trigger.rollback(); } @Override public void fail(ErrorCode errorCode) { logger.warn(String.format("failed to rollback firewall on virtual route[uuid:%s, name:%s] for port forwarding, firewall rule: %s", vr.getUuid(), vr.getName(), JSONObjectUtil.toJsonString(rule))); trigger.rollback(); } }); } }
@Transactional(readOnly = true) private List<VmNicInventory> getAttachableVmNicForEip(VipInventory vip) { String providerType = vip.getServiceProvider(); List<String> peerL3NetworkUuids = vip.getPeerL3NetworkUuids(); String zoneUuid = Q.New(L3NetworkVO.class) .select(L3NetworkVO_.zoneUuid) .eq(L3NetworkVO_.uuid, vip.getL3NetworkUuid()) .findValue(); L3NetworkVO l3Vo = Q.New(L3NetworkVO.class).eq(L3NetworkVO_.uuid, vip.getL3NetworkUuid()).find(); List<String> clusterUuids = Q.New(L2NetworkClusterRefVO.class).eq(L2NetworkClusterRefVO_.l2NetworkUuid, l3Vo.getL2NetworkUuid()) .select(L2NetworkClusterRefVO_.clusterUuid).listValues(); .param("nsType", EipConstant.EIP_NETWORK_SERVICE_TYPE) .param("npType", providerType) .param("vipL3NetworkUuid", vip.getL3NetworkUuid()) .param("clusterUuids", clusterUuids) .param("ipVersion", l3Vo.getIpVersion()) .param("zoneUuid", zoneUuid) .param("nsType", EipConstant.EIP_NETWORK_SERVICE_TYPE) .param("vipL3NetworkUuid", vip.getL3NetworkUuid()) .param("clusterUuids", clusterUuids) .param("ipVersion", l3Vo.getIpVersion()) .param("pubL3", vip.getL3NetworkUuid()).list(); vmInPublicL3s = vmInPublicL3s.stream().distinct().filter(Objects::nonNull).collect(Collectors.toList());
@Override public void run(final FlowTrigger trigger, Map data) { VipInventory vip = (VipInventory) data.get(VipConstant.Params.VIP.toString()); VipReleaseExtensionPoint ext = vipMgr.getVipReleaseExtensionPoint(vip.getUseFor()); ext.releaseServicesOnVip(vip, new Completion(trigger) { @Override public void success() { trigger.next(); } @Override public void fail(ErrorCode errorCode) { trigger.fail(errorCode); } }); } }
private String getVipPeerL3NetworkAttachedVirtualRouter(VipInventory vip) { for (String l3Uuid : vip.getPeerL3NetworkUuids()) { String vrUuid = Q.New(VmNicVO.class).select(VmNicVO_.vmInstanceUuid).eq(VmNicVO_.l3NetworkUuid, l3Uuid).eq(VmNicVO_.metaData, GUEST_NIC_MASK).findValue(); if (vrUuid != null) { return vrUuid; } } return null; }
@Override public void releaseServicesOnVip(VipInventory vip, final Completion completion) { SimpleQuery<LoadBalancerVO> q = dbf.createQuery(LoadBalancerVO.class); q.add(LoadBalancerVO_.vipUuid, Op.EQ, vip.getUuid()); List<LoadBalancerVO> rules = q.list(); releaseServicesOnVip(rules.iterator(), completion); } }
private void addAppliedStruct() { List<EipStruct> s = applieds.computeIfAbsent(providerType, k -> new ArrayList<EipStruct>()); s.add(struct); logger.debug(String.format("successfully applied eip[uuid:%s, ip:%s] for vm nic[uuid:%s]", struct.getEip().getUuid(), struct.getVip().getIp(), struct.getNic().getUuid())); }
@Override public void run(final FlowTrigger trigger, Map data) { asf.openFirewall(vr.getUuid(), struct.getVip().getL3NetworkUuid(), getFirewallRules(struct), new Completion(trigger) { @Override public void success() { trigger.next(); } @Override public void fail(ErrorCode errorCode) { trigger.fail(errorCode); } }); }