mirror of https://github.com/apache/cloudstack.git
NSX: fix LB member addition and deletion and add defensive checks (#8167)
This commit is contained in:
parent
d0fe7b269f
commit
dc90d0b9dd
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -131,6 +131,7 @@ public class NsxElement extends AdapterBase implements DhcpServiceProvider, Dns
|
|||
DomainDao domainDao;
|
||||
@Inject
|
||||
protected VpcOfferingServiceMapDao vpcOfferingServiceMapDao;
|
||||
@Inject
|
||||
IPAddressDao ipAddressDao;
|
||||
@Inject
|
||||
VMInstanceDao vmInstanceDao;
|
||||
|
|
|
|||
Loading…
Reference in New Issue