NSX: fix LB member addition and deletion and add defensive checks (#8167)

This commit is contained in:
Pearl Dsilva 2023-10-31 20:35:02 -04:00 committed by GitHub
parent d0fe7b269f
commit dc90d0b9dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 12 deletions

View File

@ -40,6 +40,8 @@ import com.cloud.exception.ResourceAllocationException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.user.Account;
import java.util.Objects;
@APICommand(name = "createVlanIpRange", description = "Creates a VLAN IP range.", responseObject = VlanIpRangeResponse.class,
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
public class CreateVlanIpRangeCmd extends BaseCmd {
@ -158,11 +160,11 @@ public class CreateVlanIpRangeCmd extends BaseCmd {
}
public boolean isForNsx() {
return forNsx;
return !Objects.isNull(forNsx) && forNsx;
}
public String getVlan() {
if ((vlan == null || vlan.isEmpty()) && !forNsx) {
if ((vlan == null || vlan.isEmpty()) && !isForNsx()) {
vlan = "untagged";
}
return vlan;

View File

@ -461,30 +461,43 @@ public class NsxApiClient {
}
}
public void createNsxLbServerPool(List<NsxLoadBalancerMember> memberList, String tier1GatewayName, String lbServerPoolName, String algorithm) {
List<LBPoolMember> getLbPoolMembers(List<NsxLoadBalancerMember> memberList, String tier1GatewayName) {
List<LBPoolMember> members = new ArrayList<>();
for (NsxLoadBalancerMember member : memberList) {
try {
String serverPoolMemberName = getServerPoolMemberName(tier1GatewayName, member.getVmId());
LbPools lbPools = (LbPools) nsxService.apply(LbPools.class);
LBPoolMember lbPoolMember = new LBPoolMember.Builder()
.setDisplayName(serverPoolMemberName)
.setIpAddress(member.getVmIp())
.setPort(String.valueOf(member.getPort()))
.build();
LBPool lbPool = new LBPool.Builder()
.setId(lbServerPoolName)
.setDisplayName(lbServerPoolName)
.setAlgorithm(getLoadBalancerAlgorithm(algorithm))
.setMembers(List.of(lbPoolMember))
.build();
lbPools.patch(lbServerPoolName, lbPool);
members.add(lbPoolMember);
} catch (Error error) {
ApiError ae = error.getData()._convertTo(ApiError.class);
String msg = String.format("Failed to create NSX LB server pool, due to: %s", ae.getErrorMessage());
String msg = String.format("Failed to create NSX LB pool members, due to: %s", ae.getErrorMessage());
LOGGER.error(msg);
throw new CloudRuntimeException(msg);
}
}
return members;
}
public void createNsxLbServerPool(List<NsxLoadBalancerMember> memberList, String tier1GatewayName, String lbServerPoolName, String algorithm) {
try {
List<LBPoolMember> members = getLbPoolMembers(memberList, tier1GatewayName);
LbPools lbPools = (LbPools) nsxService.apply(LbPools.class);
LBPool lbPool = new LBPool.Builder()
.setId(lbServerPoolName)
.setDisplayName(lbServerPoolName)
.setAlgorithm(getLoadBalancerAlgorithm(algorithm))
.setMembers(members)
.build();
lbPools.patch(lbServerPoolName, lbPool);
} catch (Error error) {
ApiError ae = error.getData()._convertTo(ApiError.class);
String msg = String.format("Failed to create NSX LB server pool, due to: %s", ae.getErrorMessage());
LOGGER.error(msg);
throw new CloudRuntimeException(msg);
}
}
public void createNsxLoadBalancer(String tier1GatewayName, long lbId) {

View File

@ -131,6 +131,7 @@ public class NsxElement extends AdapterBase implements DhcpServiceProvider, Dns
DomainDao domainDao;
@Inject
protected VpcOfferingServiceMapDao vpcOfferingServiceMapDao;
@Inject
IPAddressDao ipAddressDao;
@Inject
VMInstanceDao vmInstanceDao;