CLOUDSTACK-4824:

Add support for adding zone details
Signed off by : nitin mehta<nitin.mehta@citrix.com>
This commit is contained in:
Nitin Mehta 2013-10-07 15:48:43 -07:00
parent 4f932d048e
commit 6e80bb001c
6 changed files with 83 additions and 7 deletions

View File

@ -40,7 +40,8 @@ public interface ResourceTag extends ControlledEntity, Identity, InternalIdentit
NetworkACL,
StaticRoute,
VMSnapshot,
RemoteAccessVpn
RemoteAccessVpn,
Zone
}
/**

View File

@ -16,6 +16,7 @@
// under the License.
package com.cloud.dc.dao;
import java.util.List;
import java.util.Map;
import com.cloud.dc.DcDetailVO;
@ -29,4 +30,8 @@ public interface DcDetailsDao extends GenericDao<DcDetailVO, Long> {
DcDetailVO findDetail(long dcId, String name);
void deleteDetails(long dcId);
void removeDetails(Long id, String key);
List<DcDetailVO> findDetailsList(long dcId);
}

View File

@ -22,6 +22,7 @@ import java.util.Map;
import javax.ejb.Local;
import com.cloud.vm.UserVmDetailVO;
import org.apache.cloudstack.framework.config.ConfigKey;
import org.apache.cloudstack.framework.config.ConfigKey.Scope;
import org.apache.cloudstack.framework.config.ScopedConfigStorage;
@ -69,7 +70,17 @@ public class DcDetailsDaoImpl extends GenericDaoBase<DcDetailVO, Long> implement
}
return details;
}
@Override
public List<DcDetailVO> findDetailsList(long dcId) {
SearchCriteria<DcDetailVO> sc = DcSearch.create();
sc.setParameters("dcId", dcId);
List<DcDetailVO> results = search(sc, null);
return results;
}
@Override
public void deleteDetails(long dcId) {
SearchCriteria<DcDetailVO> sc = DcSearch.create();
@ -81,6 +92,18 @@ public class DcDetailsDaoImpl extends GenericDaoBase<DcDetailVO, Long> implement
}
}
@Override
public void removeDetails(Long id, String key) {
if(key != null){
DcDetailVO detail = findDetail(id, key);
if(detail != null){
remove(detail.getId());
}
}else {
deleteDetails(id);
}
}
@Override
public void persist(long dcId, Map<String, String> details) {
Transaction txn = Transaction.currentTxn();

View File

@ -27,6 +27,8 @@ import java.util.Set;
import javax.ejb.Local;
import javax.inject.Inject;
import com.cloud.dc.DcDetailVO;
import com.cloud.dc.dao.DcDetailsDao;
import com.cloud.vm.UserVmDetailVO;
import com.cloud.vm.dao.UserVmDetailsDao;
import org.apache.log4j.Logger;
@ -326,6 +328,9 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
@Inject
private DedicatedResourceDao _dedicatedDao;
@Inject
DcDetailsDao _dcDetailsDao;
@Inject
DomainManager _domainMgr;
@ -3271,7 +3276,31 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
return nicDetailResponseList;
} else {
} else if (resourceType == ResourceTag.TaggedResourceType.Zone){
List<DcDetailVO> dcDetailList;
if (key == null) {
dcDetailList = _dcDetailsDao.findDetailsList(id);
} else {
DcDetailVO nicDetail = _dcDetailsDao.findDetail(id, key);
dcDetailList = new LinkedList<DcDetailVO>();
dcDetailList.add(nicDetail);
}
List<ResourceDetailResponse> dcDetailResponseList = new ArrayList<ResourceDetailResponse>();
for (DcDetailVO dcDetail : dcDetailList) {
ResourceDetailResponse dcDetailResponse = new ResourceDetailResponse();
// String uuid = ApiDBUtils.findN
dcDetailResponse.setName(dcDetail.getName());
dcDetailResponse.setValue(dcDetail.getValue());
dcDetailResponse.setResourceType(ResourceTag.TaggedResourceType.Nic.toString());
dcDetailResponse.setObjectName("zonedetail");
dcDetailResponseList.add(dcDetailResponse);
}
return dcDetailResponseList;
}else {
List<UserVmDetailVO> userVmDetailList;
if (key == null) {
@ -3282,17 +3311,17 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
userVmDetailList.add(nicDetail);
}
List<ResourceDetailResponse> nicDetailResponseList = new ArrayList<ResourceDetailResponse>();
List<ResourceDetailResponse> userVmDetailResponseList = new ArrayList<ResourceDetailResponse>();
for (UserVmDetailVO nicDetail : userVmDetailList) {
ResourceDetailResponse userVmDetailResponse = new ResourceDetailResponse();
userVmDetailResponse.setName(nicDetail.getName());
userVmDetailResponse.setValue(nicDetail.getValue());
userVmDetailResponse.setResourceType(ResourceTag.TaggedResourceType.Nic.toString());
userVmDetailResponse.setObjectName("uservmdetail");
nicDetailResponseList.add(userVmDetailResponse);
userVmDetailResponseList.add(userVmDetailResponse);
}
return nicDetailResponseList;
return userVmDetailResponseList;
}
}

View File

@ -23,6 +23,9 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
import com.cloud.dc.DcDetailVO;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.dc.dao.DcDetailsDao;
import com.cloud.server.ResourceMetaDataService;
import com.cloud.storage.VolumeDetailVO;
import com.cloud.storage.dao.VolumeDetailsDao;
@ -95,6 +98,8 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource
@Inject
NetworkDao _networkDao;
@Inject
DataCenterDao _dataCenterDao;
@Inject
LoadBalancerDao _lbDao;
@Inject
PortForwardingRulesDao _pfDao;
@ -123,6 +128,8 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource
@Inject
NicDao _nicDao;
@Inject
DcDetailsDao _dcDetailsDao;
@Inject
TaggedResourceService _taggedResourceMgr;
@Inject
UserVmDetailsDao _userVmDetail;
@ -148,6 +155,7 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource
_daoMap.put(TaggedResourceType.StaticRoute, _staticRouteDao);
_daoMap.put(TaggedResourceType.VMSnapshot, _vmSnapshotDao);
_daoMap.put(TaggedResourceType.RemoteAccessVpn, _vpnDao);
_daoMap.put(TaggedResourceType.Zone, _dataCenterDao);
return true;
}
@ -208,6 +216,9 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource
}else if (resourceType == TaggedResourceType.UserVm){
UserVmDetailVO userVmDetail = new UserVmDetailVO(id, key, value);
_userVmDetailDao.persist(userVmDetail);
} else if (resourceType == TaggedResourceType.Zone){
DcDetailVO dataCenterDetail = new DcDetailVO(id, key, value);
_dcDetailsDao.persist(dataCenterDetail);
} else {
throw new InvalidParameterValueException("The resource type " + resourceType + " is not supported by the API yet");
}
@ -233,7 +244,10 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource
_nicDetailDao.removeDetails(id, key);
} else if(resourceType == TaggedResourceType.UserVm){
_userVmDetailDao.removeDetails(id, key);
} else {
} else if (resourceType == TaggedResourceType.Zone){
_dcDetailsDao.removeDetails(id, key);
}
else{
throw new InvalidParameterValueException("The resource type " + resourceType + " is not supported by the API yet");
}

View File

@ -25,6 +25,7 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.vm.dao.NicDao;
import com.cloud.network.vpc.NetworkACLItemDao;
@ -125,6 +126,8 @@ public class TaggedResourceManagerImpl extends ManagerBase implements TaggedReso
NicDao _nicDao;
@Inject
NetworkACLItemDao _networkACLItemDao;
@Inject
DataCenterDao _dataCenterDao;
@Override
@ -147,6 +150,7 @@ public class TaggedResourceManagerImpl extends ManagerBase implements TaggedReso
_daoMap.put(TaggedResourceType.StaticRoute, _staticRouteDao);
_daoMap.put(TaggedResourceType.VMSnapshot, _vmSnapshotDao);
_daoMap.put(TaggedResourceType.RemoteAccessVpn, _vpnDao);
_daoMap.put(TaggedResourceType.Zone, _dataCenterDao);
return true;
}