Skip to content

Commit 598fa79

Browse files
committed
NSX: fix LB member addition and deletion and add defensive checks
1 parent 20cb9f5 commit 598fa79

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
@@ -457,30 +457,43 @@ public void createPortForwardingRule(String ruleName, String tier1GatewayName, S
457457
}
458458
}
459459

460-
public void createNsxLbServerPool(List<NsxLoadBalancerMember> memberList, String tier1GatewayName, String lbServerPoolName, String algorithm) {
460+
List<LBPoolMember> getLbPoolMembers(List<NsxLoadBalancerMember> memberList, String tier1GatewayName) {
461+
List<LBPoolMember> members = new ArrayList<>();
461462
for (NsxLoadBalancerMember member : memberList) {
462463
try {
463464
String serverPoolMemberName = getServerPoolMemberName(tier1GatewayName, member.getVmId());
464-
LbPools lbPools = (LbPools) nsxService.apply(LbPools.class);
465465
LBPoolMember lbPoolMember = new LBPoolMember.Builder()
466466
.setDisplayName(serverPoolMemberName)
467467
.setIpAddress(member.getVmIp())
468468
.setPort(String.valueOf(member.getPort()))
469469
.build();
470-
LBPool lbPool = new LBPool.Builder()
471-
.setId(lbServerPoolName)
472-
.setDisplayName(lbServerPoolName)
473-
.setAlgorithm(getLoadBalancerAlgorithm(algorithm))
474-
.setMembers(List.of(lbPoolMember))
475-
.build();
476-
lbPools.patch(lbServerPoolName, lbPool);
470+
members.add(lbPoolMember);
477471
} catch (Error error) {
478472
ApiError ae = error.getData()._convertTo(ApiError.class);
479-
String msg = String.format("Failed to create NSX LB server pool, due to: %s", ae.getErrorMessage());
473+
String msg = String.format("Failed to create NSX LB pool members, due to: %s", ae.getErrorMessage());
480474
LOGGER.error(msg);
481475
throw new CloudRuntimeException(msg);
482476
}
483477
}
478+
return members;
479+
}
480+
public void createNsxLbServerPool(List<NsxLoadBalancerMember> memberList, String tier1GatewayName, String lbServerPoolName, String algorithm) {
481+
try {
482+
List<LBPoolMember> members = getLbPoolMembers(memberList, tier1GatewayName);
483+
LbPools lbPools = (LbPools) nsxService.apply(LbPools.class);
484+
LBPool lbPool = new LBPool.Builder()
485+
.setId(lbServerPoolName)
486+
.setDisplayName(lbServerPoolName)
487+
.setAlgorithm(getLoadBalancerAlgorithm(algorithm))
488+
.setMembers(members)
489+
.build();
490+
lbPools.patch(lbServerPoolName, lbPool);
491+
} catch (Error error) {
492+
ApiError ae = error.getData()._convertTo(ApiError.class);
493+
String msg = String.format("Failed to create NSX LB server pool, due to: %s", ae.getErrorMessage());
494+
LOGGER.error(msg);
495+
throw new CloudRuntimeException(msg);
496+
}
484497
}
485498

486499
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)