mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
[EC2 Query API] DescribeAddresses fails with Null Pointer Exception.
https://reviews.apache.org/r/8492/ As a part of EC2 Query API support, resolve the NPE obtained when DescribeAddresses is called In EC2Engine modify DescribeAddresses implementation to be consistent with the other Describe* API implementation
This commit is contained in:
parent
de517d95b0
commit
d738c81a46
@ -63,22 +63,21 @@ public class EC2AddressFilterSet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public EC2DescribeAddressesResponse evaluate( List<EC2Address> addresses) throws ParseException {
|
public EC2DescribeAddressesResponse evaluate( EC2DescribeAddressesResponse response) throws ParseException {
|
||||||
EC2DescribeAddressesResponse resultList = new EC2DescribeAddressesResponse();
|
EC2DescribeAddressesResponse resultList = new EC2DescribeAddressesResponse();
|
||||||
|
|
||||||
boolean matched;
|
boolean matched;
|
||||||
|
|
||||||
|
EC2Address[] addresses = response.getAddressSet();
|
||||||
EC2Filter[] filterSet = getFilterSet();
|
EC2Filter[] filterSet = getFilterSet();
|
||||||
for ( EC2Address address : addresses ) {
|
for ( EC2Address address : addresses ) {
|
||||||
matched = true;
|
matched = true;
|
||||||
if (filterSet != null) {
|
for (EC2Filter filter : filterSet) {
|
||||||
for (EC2Filter filter : filterSet) {
|
if (!filterMatched(address, filter)) {
|
||||||
if (!filterMatched(address, filter)) {
|
matched = false;
|
||||||
matched = false;
|
break;
|
||||||
break;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
if (matched == true)
|
if (matched == true)
|
||||||
resultList.addAddress(address);
|
resultList.addAddress(address);
|
||||||
|
|
||||||
|
|||||||
@ -812,24 +812,13 @@ public class EC2Engine {
|
|||||||
*/
|
*/
|
||||||
public EC2DescribeAddressesResponse describeAddresses( EC2DescribeAddresses request ) {
|
public EC2DescribeAddressesResponse describeAddresses( EC2DescribeAddresses request ) {
|
||||||
try {
|
try {
|
||||||
List<CloudStackIpAddress> addrList = getApi().listPublicIpAddresses(null, null, null, null, null, null, null, null, null);
|
EC2DescribeAddressesResponse response = listAddresses(request.getPublicIpsSet());
|
||||||
|
EC2AddressFilterSet afs = request.getFilterSet();
|
||||||
|
|
||||||
EC2AddressFilterSet filterSet = request.getFilterSet();
|
if (afs ==null)
|
||||||
List<EC2Address> addressList = new ArrayList<EC2Address>();
|
return response;
|
||||||
if (addrList != null && addrList.size() > 0) {
|
else
|
||||||
for (CloudStackIpAddress addr: addrList) {
|
return afs.evaluate(response);
|
||||||
// remember, if no filters are set, request.inPublicIpSet always returns true
|
|
||||||
if (request.inPublicIpSet(addr.getIpAddress())) {
|
|
||||||
EC2Address ec2Address = new EC2Address();
|
|
||||||
ec2Address.setIpAddress(addr.getIpAddress());
|
|
||||||
if (addr.getVirtualMachineId() != null)
|
|
||||||
ec2Address.setAssociatedInstanceId(addr.getVirtualMachineId().toString());
|
|
||||||
addressList.add(ec2Address);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return filterSet.evaluate(addressList);
|
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
logger.error("EC2 DescribeAddresses - ", e);
|
logger.error("EC2 DescribeAddresses - ", e);
|
||||||
throw new EC2ServiceException(ServerError.InternalError, e.getMessage());
|
throw new EC2ServiceException(ServerError.InternalError, e.getMessage());
|
||||||
@ -2079,6 +2068,39 @@ public class EC2Engine {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private EC2DescribeAddressesResponse listAddresses(String[] addressNames) throws Exception {
|
||||||
|
try {
|
||||||
|
EC2DescribeAddressesResponse addressSet = new EC2DescribeAddressesResponse();
|
||||||
|
|
||||||
|
List<CloudStackIpAddress> addresses = getApi().listPublicIpAddresses(null, null, null, null, null, null, null, null, null);
|
||||||
|
if (addresses != null && addresses.size() > 0) {
|
||||||
|
for (CloudStackIpAddress address : addresses) {
|
||||||
|
boolean matched = false;
|
||||||
|
if ( addressNames.length > 0) {
|
||||||
|
for (String addressName : addressNames) {
|
||||||
|
if (address.getIpAddress().equalsIgnoreCase(addressName)) {
|
||||||
|
matched = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else matched = true;
|
||||||
|
|
||||||
|
if (!matched) continue ;
|
||||||
|
|
||||||
|
EC2Address ec2Address = new EC2Address();
|
||||||
|
ec2Address.setIpAddress(address.getIpAddress());
|
||||||
|
if (address.getVirtualMachineId() != null)
|
||||||
|
ec2Address.setAssociatedInstanceId(address.getVirtualMachineId().toString());
|
||||||
|
addressSet.addAddress(ec2Address);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return addressSet;
|
||||||
|
} catch(Exception e) {
|
||||||
|
logger.error( "List Addresses - ", e);
|
||||||
|
throw new EC2ServiceException(ServerError.InternalError, e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert ingress rule to EC2IpPermission records
|
* Convert ingress rule to EC2IpPermission records
|
||||||
*
|
*
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user