mirror of https://github.com/apache/cloudstack.git
bug 11289: return only Free ip addresses as available Ips as a part of listAccounts
status 11289: resolved fixed
This commit is contained in:
parent
1642afacc6
commit
38b25f3466
|
|
@ -18,13 +18,11 @@
|
|||
|
||||
package com.cloud.api;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.Hashtable;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.cloud.api.ApiConstants.VMDetails;
|
||||
import com.cloud.async.AsyncJobManager;
|
||||
import com.cloud.async.AsyncJobVO;
|
||||
import com.cloud.capacity.CapacityVO;
|
||||
|
|
@ -721,4 +719,8 @@ public class ApiDBUtils {
|
|||
|
||||
return new Pair<Long, Boolean>(map.getDomainId(), subdomainAccess);
|
||||
}
|
||||
|
||||
public static long countFreePublicIps() {
|
||||
return _ipAddressDao.countFreeIPs();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -272,7 +272,18 @@ public class ApiResponseHelper implements ResponseGenerator {
|
|||
Long ipLimit = ApiDBUtils.findCorrectResourceLimit(ResourceType.public_ip, account.getId());
|
||||
String ipLimitDisplay = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit);
|
||||
Long ipTotal = ApiDBUtils.getResourceCount(ResourceType.public_ip, account.getId());
|
||||
String ipAvail = (accountIsAdmin || ipLimit == -1) ? "Unlimited" : String.valueOf(ipLimit - ipTotal);
|
||||
|
||||
Long ips = ipLimit - ipTotal;
|
||||
//check how many free ips are left, and if it's less than max allowed number of ips from account - use this value
|
||||
Long ipsLeft = ApiDBUtils.countFreePublicIps();
|
||||
boolean unlimited = true;
|
||||
if (ips.longValue() > ipsLeft.longValue()) {
|
||||
ips = ipsLeft;
|
||||
unlimited = false;
|
||||
}
|
||||
|
||||
String ipAvail = ((accountIsAdmin || ipLimit == -1) && unlimited) ? "Unlimited" : String.valueOf(ips);
|
||||
|
||||
accountResponse.setIpLimit(ipLimitDisplay);
|
||||
accountResponse.setIpTotal(ipTotal);
|
||||
accountResponse.setIpAvailable(ipAvail);
|
||||
|
|
|
|||
|
|
@ -57,4 +57,5 @@ public interface IPAddressDao extends GenericDao<IPAddressVO, Long> {
|
|||
|
||||
List<IPAddressVO> listByPhysicalNetworkId(long physicalNetworkId);
|
||||
|
||||
long countFreeIPs();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ import javax.ejb.Local;
|
|||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.dc.VlanVO;
|
||||
import com.cloud.dc.Vlan.VlanType;
|
||||
import com.cloud.dc.VlanVO;
|
||||
import com.cloud.dc.dao.VlanDaoImpl;
|
||||
import com.cloud.network.IPAddressVO;
|
||||
import com.cloud.network.IpAddress.State;
|
||||
|
|
@ -40,9 +40,9 @@ import com.cloud.utils.db.GenericSearchBuilder;
|
|||
import com.cloud.utils.db.JoinBuilder;
|
||||
import com.cloud.utils.db.SearchBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.db.SearchCriteria.Func;
|
||||
import com.cloud.utils.db.SearchCriteria.Op;
|
||||
import com.cloud.utils.db.Transaction;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.net.Ip;
|
||||
|
||||
|
|
@ -58,6 +58,7 @@ public class IPAddressDaoImpl extends GenericDaoBase<IPAddressVO, Long> implemen
|
|||
protected final GenericSearchBuilder<IPAddressVO, Integer> AllIpCountForDashboard;
|
||||
protected final GenericSearchBuilder<IPAddressVO, Long> AllocatedIpCountForAccount;
|
||||
protected final VlanDaoImpl _vlanDao = ComponentLocator.inject(VlanDaoImpl.class);
|
||||
protected GenericSearchBuilder<IPAddressVO, Long> CountFreePublicIps;
|
||||
|
||||
|
||||
// make it public for JUnit test
|
||||
|
|
@ -113,6 +114,14 @@ public class IPAddressDaoImpl extends GenericDaoBase<IPAddressVO, Long> implemen
|
|||
AllocatedIpCountForAccount.and("allocated", AllocatedIpCountForAccount.entity().getAllocatedTime(), Op.NNULL);
|
||||
AllocatedIpCountForAccount.and("network", AllocatedIpCountForAccount.entity().getAssociatedWithNetworkId(), Op.NNULL);
|
||||
AllocatedIpCountForAccount.done();
|
||||
|
||||
CountFreePublicIps = createSearchBuilder(Long.class);
|
||||
CountFreePublicIps.select(null, Func.COUNT, null);
|
||||
CountFreePublicIps.and("state", CountFreePublicIps.entity().getState(), SearchCriteria.Op.EQ);
|
||||
SearchBuilder<VlanVO> join = _vlanDao.createSearchBuilder();
|
||||
join.and("vlanType", join.entity().getVlanType(), Op.EQ);
|
||||
CountFreePublicIps.join("vlans", join, CountFreePublicIps.entity().getVlanId(), join.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
CountFreePublicIps.done();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -309,5 +318,13 @@ public class IPAddressDaoImpl extends GenericDaoBase<IPAddressVO, Long> implemen
|
|||
SearchCriteria<IPAddressVO> sc = AllFieldsSearch.create();
|
||||
sc.setParameters("physicalNetworkId", physicalNetworkId);
|
||||
return listBy(sc);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public long countFreeIPs() {
|
||||
SearchCriteria<Long> sc = CountFreePublicIps.create();
|
||||
sc.setParameters("state", State.Free);
|
||||
sc.setJoinParameters("vlans", "vlanType", VlanType.VirtualNetwork);
|
||||
return customSearch(sc, null).get(0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import javax.ejb.Local;
|
|||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.projects.Project;
|
||||
import com.cloud.projects.ProjectInvitationVO;
|
||||
import com.cloud.projects.ProjectVO;
|
||||
import com.cloud.utils.db.DB;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
|
|
|
|||
Loading…
Reference in New Issue