Skip to content

Commit dc90d0b

Browse files
authored
NSX: fix LB member addition and deletion and add defensive checks (#8167)
1 parent d0fe7b2 commit dc90d0b

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

api/src/main/java/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
import com.cloud.exception.ResourceUnavailableException;
4141
import com.cloud.user.Account;
4242

43+
import java.util.Objects;
44+
4345
@APICommand(name = "createVlanIpRange", description = "Creates a VLAN IP range.", responseObject = VlanIpRangeResponse.class,
4446
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
4547
public class CreateVlanIpRangeCmd extends BaseCmd {
@@ -158,11 +160,11 @@ public String getStartIp() {
158160
}
159161

160162
public boolean isForNsx() {
161-
return forNsx;
163+
return !Objects.isNull(forNsx) && forNsx;
162164
}
163165

164166
public String getVlan() {
165-
if ((vlan == null || vlan.isEmpty()) && !forNsx) {
167+
if ((vlan == null || vlan.isEmpty()) && !isForNsx()) {
166168
vlan = "untagged";
167169
}
168170
return vlan;

plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxApiClient.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -461,30 +461,43 @@ public void createPortForwardingRule(String ruleName, String tier1GatewayName, S
461461
}
462462
}
463463

464-
public void createNsxLbServerPool(List<NsxLoadBalancerMember> memberList, String tier1GatewayName, String lbServerPoolName, String algorithm) {
464+
List<LBPoolMember> getLbPoolMembers(List<NsxLoadBalancerMember> memberList, String tier1GatewayName) {
465+
List<LBPoolMember> members = new ArrayList<>();
465466
for (NsxLoadBalancerMember member : memberList) {
466467
try {
467468
String serverPoolMemberName = getServerPoolMemberName(tier1GatewayName, member.getVmId());
468-
LbPools lbPools = (LbPools) nsxService.apply(LbPools.class);
469469
LBPoolMember lbPoolMember = new LBPoolMember.Builder()
470470
.setDisplayName(serverPoolMemberName)
471471
.setIpAddress(member.getVmIp())
472472
.setPort(String.valueOf(member.getPort()))
473473
.build();
474-
LBPool lbPool = new LBPool.Builder()
475-
.setId(lbServerPoolName)
476-
.setDisplayName(lbServerPoolName)
477-
.setAlgorithm(getLoadBalancerAlgorithm(algorithm))
478-
.setMembers(List.of(lbPoolMember))
479-
.build();
480-
lbPools.patch(lbServerPoolName, lbPool);
474+
members.add(lbPoolMember);
481475
} catch (Error error) {
482476
ApiError ae = error.getData()._convertTo(ApiError.class);
483-
String msg = String.format("Failed to create NSX LB server pool, due to: %s", ae.getErrorMessage());
477+
String msg = String.format("Failed to create NSX LB pool members, due to: %s", ae.getErrorMessage());
484478
LOGGER.error(msg);
485479
throw new CloudRuntimeException(msg);
486480
}
487481
}
482+
return members;
483+
}
484+
public void createNsxLbServerPool(List<NsxLoadBalancerMember> memberList, String tier1GatewayName, String lbServerPoolName, String algorithm) {
485+
try {
486+
List<LBPoolMember> members = getLbPoolMembers(memberList, tier1GatewayName);
487+
LbPools lbPools = (LbPools) nsxService.apply(LbPools.class);
488+
LBPool lbPool = new LBPool.Builder()
489+
.setId(lbServerPoolName)
490+
.setDisplayName(lbServerPoolName)
491+
.setAlgorithm(getLoadBalancerAlgorithm(algorithm))
492+
.setMembers(members)
493+
.build();
494+
lbPools.patch(lbServerPoolName, lbPool);
495+
} catch (Error error) {
496+
ApiError ae = error.getData()._convertTo(ApiError.class);
497+
String msg = String.format("Failed to create NSX LB server pool, due to: %s", ae.getErrorMessage());
498+
LOGGER.error(msg);
499+
throw new CloudRuntimeException(msg);
500+
}
488501
}
489502

490503
public void createNsxLoadBalancer(String tier1GatewayName, long lbId) {

plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxElement.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ public class NsxElement extends AdapterBase implements DhcpServiceProvider, Dns
131131
DomainDao domainDao;
132132
@Inject
133133
protected VpcOfferingServiceMapDao vpcOfferingServiceMapDao;
134+
@Inject
134135
IPAddressDao ipAddressDao;
135136
@Inject
136137
VMInstanceDao vmInstanceDao;

0 commit comments

Comments
 (0)