Skip to content
Prev Previous commit
Next Next commit
refactor code to reduce complexity
  • Loading branch information
Pearl1594 committed Dec 28, 2023
commit 0ce60d6b53c9e298033eafa635b894386be3ea8f
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
package org.apache.cloudstack.resource;

import com.cloud.network.dao.NetworkVO;
import com.cloud.network.vpc.VpcVO;

import java.util.Objects;

public class NsxOpObject {
VpcVO vpcVO;
NetworkVO networkVO;
long accountId;
long domainId;
long zoneId;

public VpcVO getVpcVO() {
return vpcVO;
}

public void setVpcVO(VpcVO vpcVO) {
this.vpcVO = vpcVO;
}

public NetworkVO getNetworkVO() {
return networkVO;
}

public void setNetworkVO(NetworkVO networkVO) {
this.networkVO = networkVO;
}

public long getAccountId() {
return accountId;
}

public void setAccountId(long accountId) {
this.accountId = accountId;
}

public long getDomainId() {
return domainId;
}

public void setDomainId(long domainId) {
this.domainId = domainId;
}

public long getZoneId() {
return zoneId;
}

public void setZoneId(long zoneId) {
this.zoneId = zoneId;
}

public String getNetworkResourceName() {
return Objects.nonNull(vpcVO) ? vpcVO.getName() : networkVO.getName();
}

public boolean isVpcResource() {
return Objects.nonNull(vpcVO);
}

public long getNetworkResourceId() {
return Objects.nonNull(vpcVO) ? vpcVO.getId() : networkVO.getId();
}

public static final class Builder {
VpcVO vpcVO;
NetworkVO networkVO;
long accountId;
long domainId;
long zoneId;

public Builder() {
// Default constructor
}

public Builder vpcVO(VpcVO vpcVO) {
this.vpcVO = vpcVO;
return this;
}

public Builder networkVO(NetworkVO networkVO) {
this.networkVO = networkVO;
return this;
}

public Builder domainId(long domainId) {
this.domainId = domainId;
return this;
}

public Builder accountId(long accountId) {
this.accountId = accountId;
return this;
}

public Builder zoneId(long zoneId) {
this.zoneId = zoneId;
return this;
}

public NsxOpObject build() {
NsxOpObject object = new NsxOpObject();
object.setVpcVO(this.vpcVO);
object.setNetworkVO(this.networkVO);
object.setDomainId(this.domainId);
object.setAccountId(this.accountId);
object.setZoneId(this.zoneId);
return object;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@
import org.apache.cloudstack.StartupNsxCommand;
import org.apache.cloudstack.resource.NsxLoadBalancerMember;
import org.apache.cloudstack.resource.NsxNetworkRule;
import org.apache.cloudstack.resource.NsxOpObject;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;

Expand Down Expand Up @@ -510,26 +511,18 @@ public boolean applyPFRules(Network network, List<PortForwardingRule> rules) thr
if (vm == null || networkModel.getNicInNetwork(vm.getId(), network.getId()) == null) {
continue;
}
Pair<VpcVO, NetworkVO> vpcOrNetwork = getVpcOrNetwork(network.getVpcId(), network.getId());
VpcVO vpc = vpcOrNetwork.first();
NetworkVO networkVO = vpcOrNetwork.second();
Long networkResourceId = Objects.nonNull(vpc) ? vpc.getId() : networkVO.getId();
String networkResourceName = Objects.nonNull(vpc) ? vpc.getName() : networkVO.getName();
boolean isVpcResource = Objects.nonNull(vpc);
long domainId = Objects.nonNull(vpc) ? vpc.getDomainId() : networkVO.getDomainId();
long accountId = Objects.nonNull(vpc) ? vpc.getAccountId() : networkVO.getAccountId();
long zoneId = Objects.nonNull(vpc) ? vpc.getZoneId() : networkVO.getDataCenterId();
NsxOpObject nsxObject = getNsxOpObject(network);
String publicPort = getPublicPortRange(rule);

String privatePort = getPrivatePFPortRange(rule);

NsxNetworkRule networkRule = new NsxNetworkRule.Builder()
.setDomainId(domainId)
.setAccountId(accountId)
.setZoneId(zoneId)
.setNetworkResourceId(networkResourceId)
.setNetworkResourceName(networkResourceName)
.setVpcResource(isVpcResource)
.setDomainId(nsxObject.getDomainId())
.setAccountId(nsxObject.getAccountId())
.setZoneId(nsxObject.getZoneId())
.setNetworkResourceId(nsxObject.getNetworkResourceId())
.setNetworkResourceName(nsxObject.getNetworkResourceName())
.setVpcResource(nsxObject.isVpcResource())
.setVmId(vm.getId())
.setVmIp(vm.getPrivateIpAddress())
.setPublicIp(publicIp.getAddress().addr())
Expand Down Expand Up @@ -588,6 +581,35 @@ private static String getPrivatePortRangeForACLRule(NetworkACLItem rule) {
String.valueOf(rule.getSourcePortStart()).concat("-").concat(String.valueOf(rule.getSourcePortEnd()));
}

private long getResourceId(String resource, VpcVO vpc, NetworkVO network) {
switch (resource) {
case "domain":
return Objects.nonNull(vpc) ? vpc.getDomainId() : network.getDomainId();
case "account":
return Objects.nonNull(vpc) ? vpc.getAccountId() : network.getAccountId();
case "zone":
return Objects.nonNull(vpc) ? vpc.getZoneId() : network.getDataCenterId();
}
return 0;
}

private NsxOpObject getNsxOpObject(Network network) {
Pair<VpcVO, NetworkVO> vpcOrNetwork = getVpcOrNetwork(network.getVpcId(), network.getId());
VpcVO vpc = vpcOrNetwork.first();
NetworkVO networkVO = vpcOrNetwork.second();
long domainId = getResourceId("domain", vpc, networkVO);
long accountId = getResourceId("account", vpc, networkVO);
long zoneId = getResourceId("zone", vpc, networkVO);

return new NsxOpObject.Builder()
.vpcVO(vpc)
.networkVO(networkVO)
.domainId(domainId)
.accountId(accountId)
.zoneId(zoneId)
.build();
}

@Override
public boolean applyLBRules(Network network, List<LoadBalancingRule> rules) throws ResourceUnavailableException {
for (LoadBalancingRule loadBalancingRule : rules) {
Expand All @@ -596,24 +618,16 @@ public boolean applyLBRules(Network network, List<LoadBalancingRule> rules) thro
}
IPAddressVO publicIp = ipAddressDao.findByIpAndDcId(network.getDataCenterId(),
loadBalancingRule.getSourceIp().addr());
NsxOpObject nsxObject = getNsxOpObject(network);

Pair<VpcVO, NetworkVO> vpcOrNetwork = getVpcOrNetwork(network.getVpcId(), network.getId());
VpcVO vpc = vpcOrNetwork.first();
NetworkVO networkVO = vpcOrNetwork.second();
Long networkResourceId = Objects.nonNull(vpc) ? vpc.getId() : networkVO.getId();
String networkResourceName = Objects.nonNull(vpc) ? vpc.getName() : networkVO.getName();
boolean isVpcResource = Objects.nonNull(vpc);
long domainId = Objects.nonNull(vpc) ? vpc.getDomainId() : networkVO.getDomainId();
long accountId = Objects.nonNull(vpc) ? vpc.getAccountId() : networkVO.getAccountId();
long zoneId = Objects.nonNull(vpc) ? vpc.getZoneId() : networkVO.getDataCenterId();
List<NsxLoadBalancerMember> lbMembers = getLoadBalancerMembers(loadBalancingRule);
NsxNetworkRule networkRule = new NsxNetworkRule.Builder()
.setDomainId(domainId)
.setAccountId(accountId)
.setZoneId(zoneId)
.setNetworkResourceId(networkResourceId)
.setNetworkResourceName(networkResourceName)
.setVpcResource(isVpcResource)
.setDomainId(nsxObject.getDomainId())
.setAccountId(nsxObject.getAccountId())
.setZoneId(nsxObject.getZoneId())
.setNetworkResourceId(nsxObject.getNetworkResourceId())
.setNetworkResourceName(nsxObject.getNetworkResourceName())
.setVpcResource(nsxObject.isVpcResource())
.setMemberList(lbMembers)
.setPublicIp(publicIp.getAddress().addr())
.setPublicPort(String.valueOf(loadBalancingRule.getSourcePortStart()))
Expand Down