mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Provisioning Service: register Pod, Cluster, Deregister Zone/Pod/Cluster and unit tests
This commit is contained in:
parent
1eb64e6181
commit
3ff3a47e36
@ -18,8 +18,26 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.cloudstack.engine.datacenter.entity.api;
|
package org.apache.cloudstack.engine.datacenter.entity.api;
|
||||||
|
|
||||||
import com.cloud.org.Cluster;
|
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||||
|
import com.cloud.org.Cluster.ClusterType;
|
||||||
|
import com.cloud.org.Grouping.AllocationState;
|
||||||
|
import com.cloud.org.Managed.ManagedState;
|
||||||
|
|
||||||
|
public interface ClusterEntity extends DataCenterResourceEntity, OrganizationScope {
|
||||||
|
|
||||||
|
String getName();
|
||||||
|
|
||||||
|
long getDataCenterId();
|
||||||
|
|
||||||
|
long getPodId();
|
||||||
|
|
||||||
|
HypervisorType getHypervisorType();
|
||||||
|
|
||||||
|
ClusterType getClusterType();
|
||||||
|
|
||||||
|
AllocationState getAllocationState();
|
||||||
|
|
||||||
|
ManagedState getManagedState();
|
||||||
|
|
||||||
public interface ClusterEntity extends DataCenterResourceEntity, Cluster, OrganizationScope {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,9 +22,24 @@ import java.util.List;
|
|||||||
|
|
||||||
import com.cloud.dc.Pod;
|
import com.cloud.dc.Pod;
|
||||||
import com.cloud.org.Cluster;
|
import com.cloud.org.Cluster;
|
||||||
|
import com.cloud.org.Grouping.AllocationState;
|
||||||
|
|
||||||
public interface PodEntity extends DataCenterResourceEntity, Pod {
|
public interface PodEntity extends DataCenterResourceEntity {
|
||||||
|
|
||||||
List<Cluster> listClusters();
|
List<Cluster> listClusters();
|
||||||
|
|
||||||
|
String getCidrAddress();
|
||||||
|
|
||||||
|
int getCidrSize();
|
||||||
|
|
||||||
|
String getGateway();
|
||||||
|
|
||||||
|
long getDataCenterId();
|
||||||
|
|
||||||
|
String getName();
|
||||||
|
|
||||||
|
AllocationState getAllocationState();
|
||||||
|
|
||||||
|
boolean getExternalDhcp();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,7 +41,7 @@ public interface ZoneEntity extends DataCenterResourceEntity {
|
|||||||
@Url(clazz=ProvisioningService.class, method="getPod", name="id", type=List.class)
|
@Url(clazz=ProvisioningService.class, method="getPod", name="id", type=List.class)
|
||||||
List<String> listPodIds();
|
List<String> listPodIds();
|
||||||
|
|
||||||
@Override
|
|
||||||
@Path("/enable")
|
String getName();
|
||||||
boolean enable();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -92,4 +92,5 @@ public interface CloudStackEntity {
|
|||||||
* @return list of actions that can be performed on the object in its current state
|
* @return list of actions that can be performed on the object in its current state
|
||||||
*/
|
*/
|
||||||
List<Method> getApplicableActions();
|
List<Method> getApplicableActions();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.cloudstack.engine.rest.service.api;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.Path;
|
||||||
|
import javax.ws.rs.PathParam;
|
||||||
|
import javax.ws.rs.Produces;
|
||||||
|
import javax.ws.rs.core.Context;
|
||||||
|
import javax.ws.rs.core.UriBuilder;
|
||||||
|
import javax.ws.rs.core.UriInfo;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.PodEntity;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.ZoneEntity;
|
||||||
|
import org.apache.cloudstack.engine.rest.datacenter.entity.api.PodRestTO;
|
||||||
|
import org.apache.cloudstack.engine.rest.datacenter.entity.api.ZoneRestTO;
|
||||||
|
import org.apache.cloudstack.engine.service.api.ProvisioningService;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
|
||||||
|
@Service("provisioningRestService")
|
||||||
|
@Path("/provisioning")
|
||||||
|
@Produces({"application/xml", "application/json"})
|
||||||
|
@Component
|
||||||
|
public class ProvisioningRestService {
|
||||||
|
@Inject
|
||||||
|
ProvisioningService _provisioningService;
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/{zoneid}")
|
||||||
|
public ZoneRestTO getZone(@Context UriInfo ui, @PathParam("zoneid") String id) {
|
||||||
|
UriBuilder ub = ui.getAbsolutePathBuilder().path(this.getClass(), "getZone");
|
||||||
|
ZoneEntity entity = _provisioningService.getZone(id);
|
||||||
|
return new ZoneRestTO(ui, entity, ub.build(entity.getUuid()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/zones")
|
||||||
|
public ZoneRestTO[] listZones(@Context UriInfo ui) {
|
||||||
|
List<ZoneEntity> zones = _provisioningService.listZones();
|
||||||
|
ZoneRestTO[] tos = new ZoneRestTO[zones.size()];
|
||||||
|
UriBuilder ub = ui.getAbsolutePathBuilder().path(this.getClass(), "getZone");
|
||||||
|
Iterator<ZoneEntity> it = zones.iterator();
|
||||||
|
for (int i = 0; i < tos.length; i++) {
|
||||||
|
ZoneEntity entity = it.next();
|
||||||
|
tos[i] = new ZoneRestTO(ui, entity, ub.build(entity.getUuid()));
|
||||||
|
}
|
||||||
|
return tos;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("/zone/{zoneid}/pods")
|
||||||
|
public PodRestTO[] listPods(@PathParam("zoneid") String zoneId) {
|
||||||
|
List<PodEntity> pods = _provisioningService.listPods();
|
||||||
|
PodRestTO[] tos = new PodRestTO[pods.size()];
|
||||||
|
Iterator<PodEntity> it = pods.iterator();
|
||||||
|
for (int i = 0; i < tos.length; i++) {
|
||||||
|
PodEntity pod = it.next();
|
||||||
|
tos[i] = new PodRestTO(pod);
|
||||||
|
}
|
||||||
|
return tos;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -42,22 +42,22 @@ public interface ProvisioningService {
|
|||||||
StorageEntity registerStorage(String name, List<String> tags, Map<String, String> details);
|
StorageEntity registerStorage(String name, List<String> tags, Map<String, String> details);
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
ZoneEntity registerZone(String zoneUuid, String owner, List<String> tags, Map<String, String> details);
|
ZoneEntity registerZone(String zoneUuid, String name, String owner, List<String> tags, Map<String, String> details);
|
||||||
|
|
||||||
@POST
|
@POST
|
||||||
PodEntity registerPod(String name, Long zoneId, String gateway, String cidr, String startIp, String endIp, List<String> tags, Map<String, String> details);
|
PodEntity registerPod(String podUuid, String name, String owner, String zoneUuid, List<String> tags, Map<String, String> details);
|
||||||
|
|
||||||
ClusterEntity registerCluster(String name, List<String> tags, Map<String, String> details);
|
ClusterEntity registerCluster(String clusterUuid, String name, String owner, List<String> tags, Map<String, String> details);
|
||||||
|
|
||||||
String registerHost(String name, List<String> tags, Map<String, String> details);
|
String registerHost(String name, List<String> tags, Map<String, String> details);
|
||||||
|
|
||||||
void deregisterStorage(String uuid);
|
void deregisterStorage(String uuid);
|
||||||
|
|
||||||
void deregisterZone();
|
void deregisterZone(String uuid);
|
||||||
|
|
||||||
void deregisterPod();
|
void deregisterPod(String uuid);
|
||||||
|
|
||||||
void deregisterCluster();
|
void deregisterCluster(String uuid);
|
||||||
|
|
||||||
void deregisterHost();
|
void deregisterHost();
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,193 @@
|
|||||||
|
|
||||||
|
package org.apache.cloudstack.engine.datacenter.entity.api;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.ClusterVO;
|
||||||
|
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||||
|
import com.cloud.org.Cluster.ClusterType;
|
||||||
|
import com.cloud.org.Grouping.AllocationState;
|
||||||
|
import com.cloud.org.Managed.ManagedState;
|
||||||
|
import com.cloud.utils.fsm.NoTransitionException;
|
||||||
|
|
||||||
|
|
||||||
|
public class ClusterEntityImpl implements ClusterEntity {
|
||||||
|
|
||||||
|
|
||||||
|
private DataCenterResourceManager manager;
|
||||||
|
|
||||||
|
private ClusterVO clusterVO;
|
||||||
|
|
||||||
|
|
||||||
|
public ClusterEntityImpl(String clusterId, DataCenterResourceManager manager) {
|
||||||
|
this.manager = manager;
|
||||||
|
this.clusterVO = this.manager.loadCluster(clusterId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean enable() {
|
||||||
|
try {
|
||||||
|
manager.changeState(this, Event.EnableRequest);
|
||||||
|
} catch (NoTransitionException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean disable() {
|
||||||
|
try {
|
||||||
|
manager.changeState(this, Event.DisableRequest);
|
||||||
|
} catch (NoTransitionException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean deactivate() {
|
||||||
|
try {
|
||||||
|
manager.changeState(this, Event.DeactivateRequest);
|
||||||
|
} catch (NoTransitionException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean reactivate() {
|
||||||
|
try {
|
||||||
|
manager.changeState(this, Event.ActivatedRequest);
|
||||||
|
} catch (NoTransitionException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public State getState() {
|
||||||
|
return clusterVO.getState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void persist() {
|
||||||
|
manager.saveCluster(clusterVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUuid() {
|
||||||
|
return clusterVO.getUuid();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getId() {
|
||||||
|
return clusterVO.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCurrentState() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDesiredState() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Date getCreatedTime() {
|
||||||
|
return clusterVO.getCreated();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Date getLastUpdatedTime() {
|
||||||
|
return clusterVO.getLastUpdated();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getOwner() {
|
||||||
|
return clusterVO.getOwner();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, String> getDetails() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addDetail(String name, String value) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delDetail(String name, String value) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateDetail(String name, String value) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Method> getApplicableActions() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return clusterVO.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getDataCenterId() {
|
||||||
|
return clusterVO.getDataCenterId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getPodId() {
|
||||||
|
return clusterVO.getPodId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HypervisorType getHypervisorType() {
|
||||||
|
return clusterVO.getHypervisorType();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ClusterType getClusterType() {
|
||||||
|
return clusterVO.getClusterType();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AllocationState getAllocationState() {
|
||||||
|
return clusterVO.getAllocationState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ManagedState getManagedState() {
|
||||||
|
return clusterVO.getManagedState();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOwner(String owner) {
|
||||||
|
clusterVO.setOwner(owner);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
clusterVO.setName(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -2,7 +2,9 @@ package org.apache.cloudstack.engine.datacenter.entity.api;
|
|||||||
|
|
||||||
|
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.ClusterVO;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.db.DataCenterVO;
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.DataCenterVO;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
|
||||||
|
|
||||||
import com.cloud.utils.fsm.NoTransitionException;
|
import com.cloud.utils.fsm.NoTransitionException;
|
||||||
|
|
||||||
@ -14,6 +16,14 @@ public interface DataCenterResourceManager {
|
|||||||
|
|
||||||
void saveDataCenter(DataCenterVO dc);
|
void saveDataCenter(DataCenterVO dc);
|
||||||
|
|
||||||
boolean changeState(ZoneEntity dc, Event event) throws NoTransitionException;
|
void savePod(HostPodVO dc);
|
||||||
|
|
||||||
|
void saveCluster(ClusterVO cluster);
|
||||||
|
|
||||||
|
boolean changeState(DataCenterResourceEntity entity, Event event) throws NoTransitionException;
|
||||||
|
|
||||||
|
HostPodVO loadPod(String uuid);
|
||||||
|
|
||||||
|
ClusterVO loadCluster(String uuid);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,24 +4,32 @@ import javax.inject.Inject;
|
|||||||
|
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.ClusterVO;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.db.DataCenterVO;
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.DataCenterVO;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.ClusterDao;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DataCenterDao;
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DataCenterDao;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.HostPodDao;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import com.cloud.dc.DataCenter;
|
|
||||||
import com.cloud.exception.InvalidParameterValueException;
|
import com.cloud.exception.InvalidParameterValueException;
|
||||||
import com.cloud.utils.Pair;
|
|
||||||
import com.cloud.utils.fsm.NoTransitionException;
|
import com.cloud.utils.fsm.NoTransitionException;
|
||||||
import com.cloud.utils.fsm.StateMachine2;
|
import com.cloud.utils.fsm.StateMachine2;
|
||||||
import com.cloud.vm.VirtualMachine;
|
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class DataCenterResourceManagerImpl implements DataCenterResourceManager {
|
public class DataCenterResourceManagerImpl implements DataCenterResourceManager {
|
||||||
|
|
||||||
// @Inject
|
@Inject
|
||||||
DataCenterDao _dataCenterDao;
|
DataCenterDao _dataCenterDao;
|
||||||
|
|
||||||
protected StateMachine2<State, Event, DataCenterResourceEntity> _stateMachine;
|
@Inject
|
||||||
|
HostPodDao _podDao;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ClusterDao _clusterDao;
|
||||||
|
|
||||||
|
protected StateMachine2<State, Event, DataCenterResourceEntity> _stateMachine = DataCenterResourceEntity.State.s_fsm;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DataCenterVO loadDataCenter(String dataCenterId) {
|
public DataCenterVO loadDataCenter(String dataCenterId) {
|
||||||
@ -39,8 +47,45 @@ public class DataCenterResourceManagerImpl implements DataCenterResourceManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean changeState(ZoneEntity entity, Event event) throws NoTransitionException {
|
public boolean changeState(DataCenterResourceEntity entity, Event event) throws NoTransitionException {
|
||||||
return _stateMachine.transitTo((DataCenterResourceEntity)entity, event, null, _dataCenterDao);
|
|
||||||
|
if(entity instanceof ZoneEntity){
|
||||||
|
return _stateMachine.transitTo((DataCenterResourceEntity)entity, event, null, _dataCenterDao);
|
||||||
|
}else if(entity instanceof PodEntity){
|
||||||
|
return _stateMachine.transitTo((DataCenterResourceEntity)entity, event, null, _podDao);
|
||||||
|
}else if(entity instanceof ClusterEntity){
|
||||||
|
return _stateMachine.transitTo((DataCenterResourceEntity)entity, event, null, _clusterDao);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HostPodVO loadPod(String uuid) {
|
||||||
|
HostPodVO pod = _podDao.findByUUID(uuid);
|
||||||
|
if(pod == null){
|
||||||
|
throw new InvalidParameterValueException("Pod does not exist");
|
||||||
|
}
|
||||||
|
return pod;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ClusterVO loadCluster(String uuid) {
|
||||||
|
ClusterVO cluster = _clusterDao.findByUUID(uuid);
|
||||||
|
if(cluster == null){
|
||||||
|
throw new InvalidParameterValueException("Pod does not exist");
|
||||||
|
}
|
||||||
|
return cluster;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void savePod(HostPodVO pod) {
|
||||||
|
_podDao.persist(pod);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveCluster(ClusterVO cluster) {
|
||||||
|
_clusterDao.persist(cluster);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,62 +23,84 @@ import java.util.Date;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
|
||||||
|
|
||||||
import com.cloud.org.Cluster;
|
import com.cloud.org.Cluster;
|
||||||
|
import com.cloud.org.Grouping.AllocationState;
|
||||||
|
import com.cloud.utils.fsm.NoTransitionException;
|
||||||
|
|
||||||
public class PodEntityImpl implements PodEntity {
|
public class PodEntityImpl implements PodEntity {
|
||||||
String _uuid;
|
|
||||||
String _name;
|
|
||||||
|
|
||||||
public PodEntityImpl(String uuid, String name) {
|
|
||||||
_uuid = uuid;
|
private DataCenterResourceManager manager;
|
||||||
_name = name;
|
|
||||||
|
private HostPodVO podVO;
|
||||||
|
|
||||||
|
public PodEntityImpl(String uuid, DataCenterResourceManager manager) {
|
||||||
|
this.manager = manager;
|
||||||
|
podVO = manager.loadPod(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean enable() {
|
public boolean enable() {
|
||||||
// TODO Auto-generated method stub
|
try {
|
||||||
return false;
|
manager.changeState(this, Event.EnableRequest);
|
||||||
|
} catch (NoTransitionException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean disable() {
|
public boolean disable() {
|
||||||
// TODO Auto-generated method stub
|
try {
|
||||||
return false;
|
manager.changeState(this, Event.DisableRequest);
|
||||||
|
} catch (NoTransitionException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean deactivate() {
|
public boolean deactivate() {
|
||||||
// TODO Auto-generated method stub
|
try {
|
||||||
return false;
|
manager.changeState(this, Event.DeactivateRequest);
|
||||||
|
} catch (NoTransitionException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean reactivate() {
|
public boolean reactivate() {
|
||||||
// TODO Auto-generated method stub
|
try {
|
||||||
return false;
|
manager.changeState(this, Event.ActivatedRequest);
|
||||||
|
} catch (NoTransitionException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public State getState() {
|
public State getState() {
|
||||||
// TODO Auto-generated method stub
|
return podVO.getState();
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getUuid() {
|
public String getUuid() {
|
||||||
return _uuid;
|
return podVO.getUuid();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getId() {
|
public long getId() {
|
||||||
// TODO Auto-generated method stub
|
return podVO.getId();
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCurrentState() {
|
public String getCurrentState() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -89,20 +111,17 @@ public class PodEntityImpl implements PodEntity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Date getCreatedTime() {
|
public Date getCreatedTime() {
|
||||||
// TODO Auto-generated method stub
|
return podVO.getCreated();
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Date getLastUpdatedTime() {
|
public Date getLastUpdatedTime() {
|
||||||
// TODO Auto-generated method stub
|
return podVO.getLastUpdated();
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getOwner() {
|
public String getOwner() {
|
||||||
// TODO Auto-generated method stub
|
return podVO.getOwner();
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -114,49 +133,37 @@ public class PodEntityImpl implements PodEntity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getCidrAddress() {
|
public String getCidrAddress() {
|
||||||
// TODO Auto-generated method stub
|
return podVO.getCidrAddress();
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCidrSize() {
|
public int getCidrSize() {
|
||||||
// TODO Auto-generated method stub
|
return podVO.getCidrSize();
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getGateway() {
|
public String getGateway() {
|
||||||
// TODO Auto-generated method stub
|
return podVO.getGateway();
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getDataCenterId() {
|
public long getDataCenterId() {
|
||||||
// TODO Auto-generated method stub
|
return podVO.getDataCenterId();
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getDescription() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return _name;
|
return podVO.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AllocationState getAllocationState() {
|
public AllocationState getAllocationState() {
|
||||||
// TODO Auto-generated method stub
|
return podVO.getAllocationState();
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean getExternalDhcp() {
|
public boolean getExternalDhcp() {
|
||||||
// TODO Auto-generated method stub
|
return podVO.getExternalDhcp();
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -167,13 +174,12 @@ public class PodEntityImpl implements PodEntity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void persist() {
|
public void persist() {
|
||||||
// TODO Auto-generated method stub
|
manager.savePod(podVO);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, String> getDetails() {
|
public Map<String, String> getDetails() {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,8 +197,15 @@ public class PodEntityImpl implements PodEntity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateDetail(String name, String value) {
|
public void updateDetail(String name, String value) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setOwner(String owner) {
|
||||||
|
podVO.setOwner(owner);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
podVO.setName(name);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,36 +23,26 @@ import java.util.ArrayList;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import javax.ws.rs.GET;
|
import javax.ws.rs.GET;
|
||||||
import javax.ws.rs.POST;
|
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
|
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.db.DataCenterVO;
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.DataCenterVO;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DataCenterDao;
|
|
||||||
import org.apache.cloudstack.engine.service.api.ProvisioningService;
|
|
||||||
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import com.cloud.utils.fsm.FiniteStateObject;
|
import com.cloud.utils.fsm.FiniteStateObject;
|
||||||
import com.cloud.utils.fsm.NoTransitionException;
|
import com.cloud.utils.fsm.NoTransitionException;
|
||||||
|
|
||||||
|
|
||||||
@Component
|
|
||||||
@Path("/zone/{id}")
|
@Path("/zone/{id}")
|
||||||
public class ZoneEntityImpl implements ZoneEntity, FiniteStateObject<DataCenterResourceEntity.State, DataCenterResourceEntity.State.Event> {
|
public class ZoneEntityImpl implements ZoneEntity, FiniteStateObject<DataCenterResourceEntity.State, DataCenterResourceEntity.State.Event> {
|
||||||
|
|
||||||
@Inject
|
|
||||||
DataCenterResourceManager manager;
|
|
||||||
|
|
||||||
|
|
||||||
|
private DataCenterResourceManager manager;
|
||||||
|
|
||||||
private DataCenterVO dataCenterVO;
|
private DataCenterVO dataCenterVO;
|
||||||
|
|
||||||
|
|
||||||
public ZoneEntityImpl(String dataCenterId) {
|
public ZoneEntityImpl(String dataCenterId, DataCenterResourceManager manager) {
|
||||||
this.dataCenterVO = manager.loadDataCenter(dataCenterId);
|
this.manager = manager;
|
||||||
|
this.dataCenterVO = this.manager.loadDataCenter(dataCenterId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -133,6 +123,7 @@ public class ZoneEntityImpl implements ZoneEntity, FiniteStateObject<DataCenterR
|
|||||||
return dataCenterVO.getOwner();
|
return dataCenterVO.getOwner();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setOwner(String owner) {
|
public void setOwner(String owner) {
|
||||||
dataCenterVO.setOwner(owner);
|
dataCenterVO.setOwner(owner);
|
||||||
}
|
}
|
||||||
@ -191,6 +182,10 @@ public class ZoneEntityImpl implements ZoneEntity, FiniteStateObject<DataCenterR
|
|||||||
manager.saveDataCenter(dataCenterVO);
|
manager.saveDataCenter(dataCenterVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return dataCenterVO.getName();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> listPodIds() {
|
public List<String> listPodIds() {
|
||||||
@ -199,4 +194,8 @@ public class ZoneEntityImpl implements ZoneEntity, FiniteStateObject<DataCenterR
|
|||||||
podIds.add("pod-uuid-2");
|
podIds.add("pod-uuid-2");
|
||||||
return podIds;
|
return podIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
dataCenterVO.setName(name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,235 @@
|
|||||||
|
// Copyright 2012 Citrix Systems, Inc. Licensed under the
|
||||||
|
// Apache License, Version 2.0 (the "License"); you may not use this
|
||||||
|
// file except in compliance with the License. Citrix Systems, Inc.
|
||||||
|
// reserves all rights not expressly granted by the License.
|
||||||
|
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Automatically generated by addcopyright.py at 04/03/2012
|
||||||
|
package org.apache.cloudstack.engine.datacenter.entity.api.db;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.EnumType;
|
||||||
|
import javax.persistence.Enumerated;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
import javax.persistence.Temporal;
|
||||||
|
import javax.persistence.TemporalType;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
|
||||||
|
|
||||||
|
import com.cloud.api.Identity;
|
||||||
|
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||||
|
import com.cloud.org.Cluster;
|
||||||
|
import com.cloud.org.Managed.ManagedState;
|
||||||
|
import com.cloud.org.Grouping;
|
||||||
|
import com.cloud.utils.NumbersUtil;
|
||||||
|
import com.cloud.utils.db.GenericDao;
|
||||||
|
import com.cloud.utils.db.StateMachine;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name="cluster")
|
||||||
|
public class ClusterVO implements Cluster, Identity {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
@Column(name="id")
|
||||||
|
long id;
|
||||||
|
|
||||||
|
@Column(name="name")
|
||||||
|
String name;
|
||||||
|
|
||||||
|
@Column(name="guid")
|
||||||
|
String guid;
|
||||||
|
|
||||||
|
@Column(name="data_center_id")
|
||||||
|
long dataCenterId;
|
||||||
|
|
||||||
|
@Column(name="pod_id")
|
||||||
|
long podId;
|
||||||
|
|
||||||
|
@Column(name="hypervisor_type")
|
||||||
|
String hypervisorType;
|
||||||
|
|
||||||
|
@Column(name="cluster_type")
|
||||||
|
@Enumerated(value=EnumType.STRING)
|
||||||
|
Cluster.ClusterType clusterType;
|
||||||
|
|
||||||
|
@Column(name="allocation_state")
|
||||||
|
@Enumerated(value=EnumType.STRING)
|
||||||
|
AllocationState allocationState;
|
||||||
|
|
||||||
|
@Column(name="managed_state")
|
||||||
|
@Enumerated(value=EnumType.STRING)
|
||||||
|
ManagedState managedState;
|
||||||
|
|
||||||
|
@Column(name=GenericDao.REMOVED_COLUMN)
|
||||||
|
private Date removed;
|
||||||
|
|
||||||
|
@Column(name="uuid")
|
||||||
|
String uuid;
|
||||||
|
|
||||||
|
//orchestration
|
||||||
|
|
||||||
|
@Column(name="owner")
|
||||||
|
private String owner = null;
|
||||||
|
|
||||||
|
@Column(name=GenericDao.CREATED_COLUMN)
|
||||||
|
protected Date created;
|
||||||
|
|
||||||
|
@Column(name="lastUpdated", updatable=true)
|
||||||
|
@Temporal(value=TemporalType.TIMESTAMP)
|
||||||
|
protected Date lastUpdated;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Note that state is intentionally missing the setter. Any updates to
|
||||||
|
* the state machine needs to go through the DAO object because someone
|
||||||
|
* else could be updating it as well.
|
||||||
|
*/
|
||||||
|
@Enumerated(value=EnumType.STRING)
|
||||||
|
@StateMachine(state=State.class, event=Event.class)
|
||||||
|
@Column(name="state", updatable=true, nullable=false, length=32)
|
||||||
|
protected State state = null;
|
||||||
|
|
||||||
|
|
||||||
|
public ClusterVO() {
|
||||||
|
clusterType = Cluster.ClusterType.CloudManaged;
|
||||||
|
allocationState = Grouping.AllocationState.Enabled;
|
||||||
|
|
||||||
|
this.uuid = UUID.randomUUID().toString();
|
||||||
|
this.state = State.Disabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ClusterVO(long dataCenterId, long podId, String name) {
|
||||||
|
this.dataCenterId = dataCenterId;
|
||||||
|
this.podId = podId;
|
||||||
|
this.name = name;
|
||||||
|
this.clusterType = Cluster.ClusterType.CloudManaged;
|
||||||
|
this.allocationState = Grouping.AllocationState.Enabled;
|
||||||
|
this.managedState = ManagedState.Managed;
|
||||||
|
this.uuid = UUID.randomUUID().toString();
|
||||||
|
this.state = State.Disabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getDataCenterId() {
|
||||||
|
return dataCenterId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getPodId() {
|
||||||
|
return podId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Cluster.ClusterType getClusterType() {
|
||||||
|
return clusterType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClusterType(Cluster.ClusterType clusterType) {
|
||||||
|
this.clusterType = clusterType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AllocationState getAllocationState() {
|
||||||
|
return allocationState;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAllocationState(AllocationState allocationState) {
|
||||||
|
this.allocationState = allocationState;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ManagedState getManagedState() {
|
||||||
|
return managedState;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setManagedState(ManagedState managedState) {
|
||||||
|
this.managedState = managedState;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ClusterVO(long clusterId) {
|
||||||
|
this.id = clusterId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return NumbersUtil.hash(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (!(obj instanceof ClusterVO)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
ClusterVO that = (ClusterVO)obj;
|
||||||
|
return this.id == that.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HypervisorType getHypervisorType() {
|
||||||
|
return HypervisorType.getType(hypervisorType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHypervisorType(String hy) {
|
||||||
|
hypervisorType = hy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGuid() {
|
||||||
|
return guid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGuid(String guid) {
|
||||||
|
this.guid = guid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getRemoved() {
|
||||||
|
return removed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUuid() {
|
||||||
|
return this.uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUuid(String uuid) {
|
||||||
|
this.uuid = uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOwner() {
|
||||||
|
return owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOwner(String owner) {
|
||||||
|
this.owner = owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getCreated() {
|
||||||
|
return created;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getLastUpdated() {
|
||||||
|
return lastUpdated;
|
||||||
|
}
|
||||||
|
|
||||||
|
public State getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -240,6 +240,7 @@ public class DataCenterVO implements DataCenter, Identity {
|
|||||||
this.zoneToken = zoneToken;
|
this.zoneToken = zoneToken;
|
||||||
this.domain = domainSuffix;
|
this.domain = domainSuffix;
|
||||||
this.uuid = UUID.randomUUID().toString();
|
this.uuid = UUID.randomUUID().toString();
|
||||||
|
this.state = State.Disabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -0,0 +1,241 @@
|
|||||||
|
// Copyright 2012 Citrix Systems, Inc. Licensed under the
|
||||||
|
// Apache License, Version 2.0 (the "License"); you may not use this
|
||||||
|
// file except in compliance with the License. Citrix Systems, Inc.
|
||||||
|
// reserves all rights not expressly granted by the License.
|
||||||
|
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Automatically generated by addcopyright.py at 04/03/2012
|
||||||
|
package org.apache.cloudstack.engine.datacenter.entity.api.db;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.EnumType;
|
||||||
|
import javax.persistence.Enumerated;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
import javax.persistence.Temporal;
|
||||||
|
import javax.persistence.TemporalType;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
|
||||||
|
|
||||||
|
import com.cloud.api.Identity;
|
||||||
|
import com.cloud.dc.Pod;
|
||||||
|
import com.cloud.org.Grouping;
|
||||||
|
import com.cloud.utils.NumbersUtil;
|
||||||
|
import com.cloud.utils.db.GenericDao;
|
||||||
|
import com.cloud.utils.db.StateMachine;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name = "host_pod_ref")
|
||||||
|
public class HostPodVO implements Pod, Identity {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
long id;
|
||||||
|
|
||||||
|
@Column(name = "name")
|
||||||
|
private String name = null;
|
||||||
|
|
||||||
|
@Column(name = "data_center_id")
|
||||||
|
private long dataCenterId;
|
||||||
|
|
||||||
|
@Column(name = "gateway")
|
||||||
|
private String gateway;
|
||||||
|
|
||||||
|
@Column(name = "cidr_address")
|
||||||
|
private String cidrAddress;
|
||||||
|
|
||||||
|
@Column(name = "cidr_size")
|
||||||
|
private int cidrSize;
|
||||||
|
|
||||||
|
@Column(name = "description")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@Column(name="allocation_state")
|
||||||
|
@Enumerated(value=EnumType.STRING)
|
||||||
|
AllocationState allocationState;
|
||||||
|
|
||||||
|
@Column(name = "external_dhcp")
|
||||||
|
private Boolean externalDhcp;
|
||||||
|
|
||||||
|
@Column(name=GenericDao.REMOVED_COLUMN)
|
||||||
|
private Date removed;
|
||||||
|
|
||||||
|
@Column(name = "uuid")
|
||||||
|
private String uuid;
|
||||||
|
|
||||||
|
//orchestration
|
||||||
|
@Column(name="owner")
|
||||||
|
private String owner = null;
|
||||||
|
|
||||||
|
@Column(name=GenericDao.CREATED_COLUMN)
|
||||||
|
protected Date created;
|
||||||
|
|
||||||
|
@Column(name="lastUpdated", updatable=true)
|
||||||
|
@Temporal(value=TemporalType.TIMESTAMP)
|
||||||
|
protected Date lastUpdated;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Note that state is intentionally missing the setter. Any updates to
|
||||||
|
* the state machine needs to go through the DAO object because someone
|
||||||
|
* else could be updating it as well.
|
||||||
|
*/
|
||||||
|
@Enumerated(value=EnumType.STRING)
|
||||||
|
@StateMachine(state=State.class, event=Event.class)
|
||||||
|
@Column(name="state", updatable=true, nullable=false, length=32)
|
||||||
|
protected State state = null;
|
||||||
|
|
||||||
|
public HostPodVO(String name, long dcId, String gateway, String cidrAddress, int cidrSize, String description) {
|
||||||
|
this.name = name;
|
||||||
|
this.dataCenterId = dcId;
|
||||||
|
this.gateway = gateway;
|
||||||
|
this.cidrAddress = cidrAddress;
|
||||||
|
this.cidrSize = cidrSize;
|
||||||
|
this.description = description;
|
||||||
|
this.allocationState = Grouping.AllocationState.Enabled;
|
||||||
|
this.externalDhcp = false;
|
||||||
|
this.uuid = UUID.randomUUID().toString();
|
||||||
|
this.state = State.Disabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* public HostPodVO(String name, long dcId) { this(null, name, dcId); }
|
||||||
|
*/
|
||||||
|
protected HostPodVO() {
|
||||||
|
this.uuid = UUID.randomUUID().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getDataCenterId() {
|
||||||
|
return dataCenterId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDataCenterId(long dataCenterId) {
|
||||||
|
this.dataCenterId = dataCenterId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCidrAddress() {
|
||||||
|
return cidrAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCidrAddress(String cidrAddress) {
|
||||||
|
this.cidrAddress = cidrAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCidrSize() {
|
||||||
|
return cidrSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCidrSize(int cidrSize) {
|
||||||
|
this.cidrSize = cidrSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getGateway() {
|
||||||
|
return gateway;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGateway(String gateway) {
|
||||||
|
this.gateway = gateway;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AllocationState getAllocationState() {
|
||||||
|
return allocationState;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAllocationState(AllocationState allocationState) {
|
||||||
|
this.allocationState = allocationState;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use for comparisons only.
|
||||||
|
public HostPodVO(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return NumbersUtil.hash(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getExternalDhcp() {
|
||||||
|
return externalDhcp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExternalDhcp(boolean use) {
|
||||||
|
externalDhcp = use;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (obj instanceof HostPodVO) {
|
||||||
|
return id == ((HostPodVO)obj).id;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getRemoved() {
|
||||||
|
return removed;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUuid() {
|
||||||
|
return this.uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUuid(String uuid) {
|
||||||
|
this.uuid = uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOwner() {
|
||||||
|
return owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOwner(String owner) {
|
||||||
|
this.owner = owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getCreated() {
|
||||||
|
return created;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getLastUpdated() {
|
||||||
|
return lastUpdated;
|
||||||
|
}
|
||||||
|
|
||||||
|
public State getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
// Copyright 2012 Citrix Systems, Inc. Licensed under the
|
||||||
|
// Apache License, Version 2.0 (the "License"); you may not use this
|
||||||
|
// file except in compliance with the License. Citrix Systems, Inc.
|
||||||
|
// reserves all rights not expressly granted by the License.
|
||||||
|
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Automatically generated by addcopyright.py at 04/03/2012
|
||||||
|
package org.apache.cloudstack.engine.datacenter.entity.api.db.dao;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.ClusterVO;
|
||||||
|
|
||||||
|
|
||||||
|
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||||
|
import com.cloud.utils.db.GenericDao;
|
||||||
|
import com.cloud.utils.fsm.StateDao;
|
||||||
|
|
||||||
|
public interface ClusterDao extends GenericDao<ClusterVO, Long>, StateDao<DataCenterResourceEntity.State, DataCenterResourceEntity.State.Event, DataCenterResourceEntity> {
|
||||||
|
List<ClusterVO> listByPodId(long podId);
|
||||||
|
ClusterVO findBy(String name, long podId);
|
||||||
|
List<ClusterVO> listByHyTypeWithoutGuid(String hyType);
|
||||||
|
List<ClusterVO> listByZoneId(long zoneId);
|
||||||
|
|
||||||
|
List<HypervisorType> getAvailableHypervisorInZone(Long zoneId);
|
||||||
|
List<ClusterVO> listByDcHyType(long dcId, String hyType);
|
||||||
|
Map<Long, List<Long>> getPodClusterIdMap(List<Long> clusterIds);
|
||||||
|
List<Long> listDisabledClusters(long zoneId, Long podId);
|
||||||
|
List<Long> listClustersWithDisabledPods(long zoneId);
|
||||||
|
ClusterVO findByUUID(String uuid);
|
||||||
|
}
|
||||||
@ -0,0 +1,295 @@
|
|||||||
|
// Copyright 2012 Citrix Systems, Inc. Licensed under the
|
||||||
|
// Apache License, Version 2.0 (the "License"); you may not use this
|
||||||
|
// file except in compliance with the License. Citrix Systems, Inc.
|
||||||
|
// reserves all rights not expressly granted by the License.
|
||||||
|
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Automatically generated by addcopyright.py at 04/03/2012
|
||||||
|
package org.apache.cloudstack.engine.datacenter.entity.api.db.dao;
|
||||||
|
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.ejb.Local;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.ClusterVO;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
|
||||||
|
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||||
|
import com.cloud.org.Grouping;
|
||||||
|
import com.cloud.utils.component.ComponentLocator;
|
||||||
|
import com.cloud.utils.db.GenericDaoBase;
|
||||||
|
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.UpdateBuilder;
|
||||||
|
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;
|
||||||
|
|
||||||
|
@Local(value=ClusterDao.class)
|
||||||
|
public class ClusterDaoImpl extends GenericDaoBase<ClusterVO, Long> implements ClusterDao {
|
||||||
|
private static final Logger s_logger = Logger.getLogger(ClusterDaoImpl.class);
|
||||||
|
|
||||||
|
protected final SearchBuilder<ClusterVO> PodSearch;
|
||||||
|
protected final SearchBuilder<ClusterVO> HyTypeWithoutGuidSearch;
|
||||||
|
protected final SearchBuilder<ClusterVO> AvailHyperSearch;
|
||||||
|
protected final SearchBuilder<ClusterVO> ZoneSearch;
|
||||||
|
protected final SearchBuilder<ClusterVO> ZoneHyTypeSearch;
|
||||||
|
protected SearchBuilder<ClusterVO> StateChangeSearch;
|
||||||
|
protected SearchBuilder<ClusterVO> UUIDSearch;
|
||||||
|
|
||||||
|
private static final String GET_POD_CLUSTER_MAP_PREFIX = "SELECT pod_id, id FROM cloud.cluster WHERE cluster.id IN( ";
|
||||||
|
private static final String GET_POD_CLUSTER_MAP_SUFFIX = " )";
|
||||||
|
|
||||||
|
protected final HostPodDaoImpl _hostPodDao = ComponentLocator.inject(HostPodDaoImpl.class);
|
||||||
|
|
||||||
|
protected ClusterDaoImpl() {
|
||||||
|
super();
|
||||||
|
|
||||||
|
HyTypeWithoutGuidSearch = createSearchBuilder();
|
||||||
|
HyTypeWithoutGuidSearch.and("hypervisorType", HyTypeWithoutGuidSearch.entity().getHypervisorType(), SearchCriteria.Op.EQ);
|
||||||
|
HyTypeWithoutGuidSearch.and("guid", HyTypeWithoutGuidSearch.entity().getGuid(), SearchCriteria.Op.NULL);
|
||||||
|
HyTypeWithoutGuidSearch.done();
|
||||||
|
|
||||||
|
ZoneHyTypeSearch = createSearchBuilder();
|
||||||
|
ZoneHyTypeSearch.and("hypervisorType", ZoneHyTypeSearch.entity().getHypervisorType(), SearchCriteria.Op.EQ);
|
||||||
|
ZoneHyTypeSearch.and("dataCenterId", ZoneHyTypeSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
|
||||||
|
ZoneHyTypeSearch.done();
|
||||||
|
|
||||||
|
PodSearch = createSearchBuilder();
|
||||||
|
PodSearch.and("pod", PodSearch.entity().getPodId(), SearchCriteria.Op.EQ);
|
||||||
|
PodSearch.and("name", PodSearch.entity().getName(), SearchCriteria.Op.EQ);
|
||||||
|
PodSearch.done();
|
||||||
|
|
||||||
|
ZoneSearch = createSearchBuilder();
|
||||||
|
ZoneSearch.and("dataCenterId", ZoneSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
|
||||||
|
ZoneSearch.groupBy(ZoneSearch.entity().getHypervisorType());
|
||||||
|
ZoneSearch.done();
|
||||||
|
|
||||||
|
AvailHyperSearch = createSearchBuilder();
|
||||||
|
AvailHyperSearch.and("zoneId", AvailHyperSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
|
||||||
|
AvailHyperSearch.select(null, Func.DISTINCT, AvailHyperSearch.entity().getHypervisorType());
|
||||||
|
AvailHyperSearch.done();
|
||||||
|
|
||||||
|
UUIDSearch = createSearchBuilder();
|
||||||
|
UUIDSearch.and("uuid", UUIDSearch.entity().getUuid(), SearchCriteria.Op.EQ);
|
||||||
|
UUIDSearch.done();
|
||||||
|
|
||||||
|
StateChangeSearch = createSearchBuilder();
|
||||||
|
StateChangeSearch.and("id", StateChangeSearch.entity().getId(), SearchCriteria.Op.EQ);
|
||||||
|
StateChangeSearch.and("state", StateChangeSearch.entity().getState(), SearchCriteria.Op.EQ);
|
||||||
|
StateChangeSearch.done();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ClusterVO> listByZoneId(long zoneId) {
|
||||||
|
SearchCriteria<ClusterVO> sc = ZoneSearch.create();
|
||||||
|
sc.setParameters("dataCenterId", zoneId);
|
||||||
|
return listBy(sc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ClusterVO> listByPodId(long podId) {
|
||||||
|
SearchCriteria<ClusterVO> sc = PodSearch.create();
|
||||||
|
sc.setParameters("pod", podId);
|
||||||
|
|
||||||
|
return listBy(sc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ClusterVO findBy(String name, long podId) {
|
||||||
|
SearchCriteria<ClusterVO> sc = PodSearch.create();
|
||||||
|
sc.setParameters("pod", podId);
|
||||||
|
sc.setParameters("name", name);
|
||||||
|
|
||||||
|
return findOneBy(sc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ClusterVO> listByHyTypeWithoutGuid(String hyType) {
|
||||||
|
SearchCriteria<ClusterVO> sc = HyTypeWithoutGuidSearch.create();
|
||||||
|
sc.setParameters("hypervisorType", hyType);
|
||||||
|
|
||||||
|
return listBy(sc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ClusterVO> listByDcHyType(long dcId, String hyType) {
|
||||||
|
SearchCriteria<ClusterVO> sc = ZoneHyTypeSearch.create();
|
||||||
|
sc.setParameters("dataCenterId", dcId);
|
||||||
|
sc.setParameters("hypervisorType", hyType);
|
||||||
|
return listBy(sc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<HypervisorType> getAvailableHypervisorInZone(Long zoneId) {
|
||||||
|
SearchCriteria<ClusterVO> sc = AvailHyperSearch.create();
|
||||||
|
if (zoneId != null) {
|
||||||
|
sc.setParameters("zoneId", zoneId);
|
||||||
|
}
|
||||||
|
List<ClusterVO> clusters = listBy(sc);
|
||||||
|
List<HypervisorType> hypers = new ArrayList<HypervisorType>(4);
|
||||||
|
for (ClusterVO cluster : clusters) {
|
||||||
|
hypers.add(cluster.getHypervisorType());
|
||||||
|
}
|
||||||
|
|
||||||
|
return hypers;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Long, List<Long>> getPodClusterIdMap(List<Long> clusterIds){
|
||||||
|
Transaction txn = Transaction.currentTxn();
|
||||||
|
PreparedStatement pstmt = null;
|
||||||
|
Map<Long, List<Long>> result = new HashMap<Long, List<Long>>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
StringBuilder sql = new StringBuilder(GET_POD_CLUSTER_MAP_PREFIX);
|
||||||
|
if (clusterIds.size() > 0) {
|
||||||
|
for (Long clusterId : clusterIds) {
|
||||||
|
sql.append(clusterId).append(",");
|
||||||
|
}
|
||||||
|
sql.delete(sql.length()-1, sql.length());
|
||||||
|
sql.append(GET_POD_CLUSTER_MAP_SUFFIX);
|
||||||
|
}
|
||||||
|
|
||||||
|
pstmt = txn.prepareAutoCloseStatement(sql.toString());
|
||||||
|
ResultSet rs = pstmt.executeQuery();
|
||||||
|
while (rs.next()) {
|
||||||
|
Long podId = rs.getLong(1);
|
||||||
|
Long clusterIdInPod = rs.getLong(2);
|
||||||
|
if(result.containsKey(podId)){
|
||||||
|
List<Long> clusterList = result.get(podId);
|
||||||
|
clusterList.add(clusterIdInPod);
|
||||||
|
result.put(podId, clusterList);
|
||||||
|
}else{
|
||||||
|
List<Long> clusterList = new ArrayList<Long>();
|
||||||
|
clusterList.add(clusterIdInPod);
|
||||||
|
result.put(podId, clusterList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new CloudRuntimeException("DB Exception on: " + GET_POD_CLUSTER_MAP_PREFIX, e);
|
||||||
|
} catch (Throwable e) {
|
||||||
|
throw new CloudRuntimeException("Caught: " + GET_POD_CLUSTER_MAP_PREFIX, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Long> listDisabledClusters(long zoneId, Long podId) {
|
||||||
|
GenericSearchBuilder<ClusterVO, Long> clusterIdSearch = createSearchBuilder(Long.class);
|
||||||
|
clusterIdSearch.selectField(clusterIdSearch.entity().getId());
|
||||||
|
clusterIdSearch.and("dataCenterId", clusterIdSearch.entity().getDataCenterId(), Op.EQ);
|
||||||
|
if(podId != null){
|
||||||
|
clusterIdSearch.and("podId", clusterIdSearch.entity().getPodId(), Op.EQ);
|
||||||
|
}
|
||||||
|
clusterIdSearch.and("allocationState", clusterIdSearch.entity().getAllocationState(), Op.EQ);
|
||||||
|
clusterIdSearch.done();
|
||||||
|
|
||||||
|
|
||||||
|
SearchCriteria<Long> sc = clusterIdSearch.create();
|
||||||
|
sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId);
|
||||||
|
if (podId != null) {
|
||||||
|
sc.addAnd("podId", SearchCriteria.Op.EQ, podId);
|
||||||
|
}
|
||||||
|
sc.addAnd("allocationState", SearchCriteria.Op.EQ, Grouping.AllocationState.Disabled);
|
||||||
|
return customSearch(sc, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Long> listClustersWithDisabledPods(long zoneId) {
|
||||||
|
|
||||||
|
GenericSearchBuilder<HostPodVO, Long> disabledPodIdSearch = _hostPodDao.createSearchBuilder(Long.class);
|
||||||
|
disabledPodIdSearch.selectField(disabledPodIdSearch.entity().getId());
|
||||||
|
disabledPodIdSearch.and("dataCenterId", disabledPodIdSearch.entity().getDataCenterId(), Op.EQ);
|
||||||
|
disabledPodIdSearch.and("allocationState", disabledPodIdSearch.entity().getAllocationState(), Op.EQ);
|
||||||
|
|
||||||
|
GenericSearchBuilder<ClusterVO, Long> clusterIdSearch = createSearchBuilder(Long.class);
|
||||||
|
clusterIdSearch.selectField(clusterIdSearch.entity().getId());
|
||||||
|
clusterIdSearch.join("disabledPodIdSearch", disabledPodIdSearch, clusterIdSearch.entity().getPodId(), disabledPodIdSearch.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||||
|
clusterIdSearch.done();
|
||||||
|
|
||||||
|
|
||||||
|
SearchCriteria<Long> sc = clusterIdSearch.create();
|
||||||
|
sc.setJoinParameters("disabledPodIdSearch", "dataCenterId", zoneId);
|
||||||
|
sc.setJoinParameters("disabledPodIdSearch", "allocationState", Grouping.AllocationState.Disabled);
|
||||||
|
|
||||||
|
return customSearch(sc, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean remove(Long id) {
|
||||||
|
Transaction txn = Transaction.currentTxn();
|
||||||
|
txn.start();
|
||||||
|
ClusterVO cluster = createForUpdate();
|
||||||
|
cluster.setName(null);
|
||||||
|
cluster.setGuid(null);
|
||||||
|
|
||||||
|
update(id, cluster);
|
||||||
|
|
||||||
|
boolean result = super.remove(id);
|
||||||
|
txn.commit();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ClusterVO findByUUID(String uuid) {
|
||||||
|
SearchCriteria<ClusterVO> sc = UUIDSearch.create();
|
||||||
|
sc.setParameters("uuid", uuid);
|
||||||
|
return findOneBy(sc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean updateState(State currentState, Event event, State nextState, DataCenterResourceEntity clusterEntity, Object data) {
|
||||||
|
|
||||||
|
ClusterVO vo = findById(clusterEntity.getId());
|
||||||
|
|
||||||
|
Date oldUpdatedTime = vo.getLastUpdated();
|
||||||
|
|
||||||
|
SearchCriteria<ClusterVO> sc = StateChangeSearch.create();
|
||||||
|
sc.setParameters("id", vo.getId());
|
||||||
|
sc.setParameters("state", currentState);
|
||||||
|
|
||||||
|
UpdateBuilder builder = getUpdateBuilder(vo);
|
||||||
|
builder.set(vo, "state", nextState);
|
||||||
|
builder.set(vo, "lastUpdated", new Date());
|
||||||
|
|
||||||
|
int rows = update((ClusterVO) vo, sc);
|
||||||
|
|
||||||
|
if (rows == 0 && s_logger.isDebugEnabled()) {
|
||||||
|
ClusterVO dbCluster = findByIdIncludingRemoved(vo.getId());
|
||||||
|
if (dbCluster != null) {
|
||||||
|
StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
|
||||||
|
str.append(": DB Data={id=").append(dbCluster.getId()).append("; state=").append(dbCluster.getState()).append(";updatedTime=")
|
||||||
|
.append(dbCluster.getLastUpdated());
|
||||||
|
str.append(": New Data={id=").append(vo.getId()).append("; state=").append(nextState).append("; event=").append(event).append("; updatedTime=").append(vo.getLastUpdated());
|
||||||
|
str.append(": stale Data={id=").append(vo.getId()).append("; state=").append(currentState).append("; event=").append(event).append("; updatedTime=").append(oldUpdatedTime);
|
||||||
|
} else {
|
||||||
|
s_logger.debug("Unable to update dataCenter: id=" + vo.getId() + ", as there is no such dataCenter exists in the database anymore");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rows > 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
// Copyright 2012 Citrix Systems, Inc. Licensed under the
|
||||||
|
// Apache License, Version 2.0 (the "License"); you may not use this
|
||||||
|
// file except in compliance with the License. Citrix Systems, Inc.
|
||||||
|
// reserves all rights not expressly granted by the License.
|
||||||
|
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Automatically generated by addcopyright.py at 04/03/2012
|
||||||
|
package org.apache.cloudstack.engine.datacenter.entity.api.db.dao;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
|
||||||
|
|
||||||
|
|
||||||
|
import com.cloud.utils.db.GenericDao;
|
||||||
|
import com.cloud.utils.fsm.StateDao;
|
||||||
|
|
||||||
|
public interface HostPodDao extends GenericDao<HostPodVO, Long>, StateDao<DataCenterResourceEntity.State, DataCenterResourceEntity.State.Event, DataCenterResourceEntity> {
|
||||||
|
public List<HostPodVO> listByDataCenterId(long id);
|
||||||
|
|
||||||
|
public HostPodVO findByName(String name, long dcId);
|
||||||
|
|
||||||
|
public HashMap<Long, List<Object>> getCurrentPodCidrSubnets(long zoneId, long podIdToSkip);
|
||||||
|
|
||||||
|
public List<Long> listDisabledPods(long zoneId);
|
||||||
|
|
||||||
|
public HostPodVO findByUUID(String uuid);
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,188 @@
|
|||||||
|
// Copyright 2012 Citrix Systems, Inc. Licensed under the
|
||||||
|
// Apache License, Version 2.0 (the "License"); you may not use this
|
||||||
|
// file except in compliance with the License. Citrix Systems, Inc.
|
||||||
|
// reserves all rights not expressly granted by the License.
|
||||||
|
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Automatically generated by addcopyright.py at 04/03/2012
|
||||||
|
package org.apache.cloudstack.engine.datacenter.entity.api.db.dao;
|
||||||
|
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.ejb.Local;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
|
||||||
|
import com.cloud.org.Grouping;
|
||||||
|
import com.cloud.utils.db.GenericDaoBase;
|
||||||
|
import com.cloud.utils.db.GenericSearchBuilder;
|
||||||
|
import com.cloud.utils.db.SearchBuilder;
|
||||||
|
import com.cloud.utils.db.SearchCriteria;
|
||||||
|
import com.cloud.utils.db.UpdateBuilder;
|
||||||
|
import com.cloud.utils.db.SearchCriteria.Op;
|
||||||
|
import com.cloud.utils.db.Transaction;
|
||||||
|
|
||||||
|
@Local(value={HostPodDao.class})
|
||||||
|
public class HostPodDaoImpl extends GenericDaoBase<HostPodVO, Long> implements HostPodDao {
|
||||||
|
private static final Logger s_logger = Logger.getLogger(HostPodDaoImpl.class);
|
||||||
|
|
||||||
|
protected SearchBuilder<HostPodVO> DataCenterAndNameSearch;
|
||||||
|
protected SearchBuilder<HostPodVO> DataCenterIdSearch;
|
||||||
|
protected SearchBuilder<HostPodVO> UUIDSearch;
|
||||||
|
protected SearchBuilder<HostPodVO> StateChangeSearch;
|
||||||
|
|
||||||
|
protected HostPodDaoImpl() {
|
||||||
|
DataCenterAndNameSearch = createSearchBuilder();
|
||||||
|
DataCenterAndNameSearch.and("dc", DataCenterAndNameSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
|
||||||
|
DataCenterAndNameSearch.and("name", DataCenterAndNameSearch.entity().getName(), SearchCriteria.Op.EQ);
|
||||||
|
DataCenterAndNameSearch.done();
|
||||||
|
|
||||||
|
DataCenterIdSearch = createSearchBuilder();
|
||||||
|
DataCenterIdSearch.and("dcId", DataCenterIdSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
|
||||||
|
DataCenterIdSearch.done();
|
||||||
|
|
||||||
|
|
||||||
|
UUIDSearch = createSearchBuilder();
|
||||||
|
UUIDSearch.and("uuid", UUIDSearch.entity().getUuid(), SearchCriteria.Op.EQ);
|
||||||
|
UUIDSearch.done();
|
||||||
|
|
||||||
|
StateChangeSearch = createSearchBuilder();
|
||||||
|
StateChangeSearch.and("id", StateChangeSearch.entity().getId(), SearchCriteria.Op.EQ);
|
||||||
|
StateChangeSearch.and("state", StateChangeSearch.entity().getState(), SearchCriteria.Op.EQ);
|
||||||
|
StateChangeSearch.done();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<HostPodVO> listByDataCenterId(long id) {
|
||||||
|
SearchCriteria<HostPodVO> sc = DataCenterIdSearch.create();
|
||||||
|
sc.setParameters("dcId", id);
|
||||||
|
|
||||||
|
return listBy(sc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HostPodVO findByName(String name, long dcId) {
|
||||||
|
SearchCriteria<HostPodVO> sc = DataCenterAndNameSearch.create();
|
||||||
|
sc.setParameters("dc", dcId);
|
||||||
|
sc.setParameters("name", name);
|
||||||
|
|
||||||
|
return findOneBy(sc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HashMap<Long, List<Object>> getCurrentPodCidrSubnets(long zoneId, long podIdToSkip) {
|
||||||
|
HashMap<Long, List<Object>> currentPodCidrSubnets = new HashMap<Long, List<Object>>();
|
||||||
|
|
||||||
|
String selectSql = "SELECT id, cidr_address, cidr_size FROM host_pod_ref WHERE data_center_id=" + zoneId +" and removed IS NULL";
|
||||||
|
Transaction txn = Transaction.currentTxn();
|
||||||
|
try {
|
||||||
|
PreparedStatement stmt = txn.prepareAutoCloseStatement(selectSql);
|
||||||
|
ResultSet rs = stmt.executeQuery();
|
||||||
|
while (rs.next()) {
|
||||||
|
Long podId = rs.getLong("id");
|
||||||
|
if (podId.longValue() == podIdToSkip) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String cidrAddress = rs.getString("cidr_address");
|
||||||
|
long cidrSize = rs.getLong("cidr_size");
|
||||||
|
List<Object> cidrPair = new ArrayList<Object>();
|
||||||
|
cidrPair.add(0, cidrAddress);
|
||||||
|
cidrPair.add(1, new Long(cidrSize));
|
||||||
|
currentPodCidrSubnets.put(podId, cidrPair);
|
||||||
|
}
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
s_logger.warn("DB exception " + ex.getMessage(), ex);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return currentPodCidrSubnets;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean remove(Long id) {
|
||||||
|
Transaction txn = Transaction.currentTxn();
|
||||||
|
txn.start();
|
||||||
|
HostPodVO pod = createForUpdate();
|
||||||
|
pod.setName(null);
|
||||||
|
|
||||||
|
update(id, pod);
|
||||||
|
|
||||||
|
boolean result = super.remove(id);
|
||||||
|
txn.commit();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Long> listDisabledPods(long zoneId) {
|
||||||
|
GenericSearchBuilder<HostPodVO, Long> podIdSearch = createSearchBuilder(Long.class);
|
||||||
|
podIdSearch.selectField(podIdSearch.entity().getId());
|
||||||
|
podIdSearch.and("dataCenterId", podIdSearch.entity().getDataCenterId(), Op.EQ);
|
||||||
|
podIdSearch.and("allocationState", podIdSearch.entity().getAllocationState(), Op.EQ);
|
||||||
|
podIdSearch.done();
|
||||||
|
|
||||||
|
|
||||||
|
SearchCriteria<Long> sc = podIdSearch.create();
|
||||||
|
sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId);
|
||||||
|
sc.addAnd("allocationState", SearchCriteria.Op.EQ, Grouping.AllocationState.Disabled);
|
||||||
|
return customSearch(sc, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HostPodVO findByUUID(String uuid) {
|
||||||
|
SearchCriteria<HostPodVO> sc = UUIDSearch.create();
|
||||||
|
sc.setParameters("uuid", uuid);
|
||||||
|
return findOneBy(sc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean updateState(State currentState, Event event, State nextState, DataCenterResourceEntity podEntity, Object data) {
|
||||||
|
|
||||||
|
HostPodVO vo = findById(podEntity.getId());
|
||||||
|
|
||||||
|
Date oldUpdatedTime = vo.getLastUpdated();
|
||||||
|
|
||||||
|
SearchCriteria<HostPodVO> sc = StateChangeSearch.create();
|
||||||
|
sc.setParameters("id", vo.getId());
|
||||||
|
sc.setParameters("state", currentState);
|
||||||
|
|
||||||
|
UpdateBuilder builder = getUpdateBuilder(vo);
|
||||||
|
builder.set(vo, "state", nextState);
|
||||||
|
builder.set(vo, "lastUpdated", new Date());
|
||||||
|
|
||||||
|
int rows = update((HostPodVO) vo, sc);
|
||||||
|
|
||||||
|
if (rows == 0 && s_logger.isDebugEnabled()) {
|
||||||
|
HostPodVO dbDC = findByIdIncludingRemoved(vo.getId());
|
||||||
|
if (dbDC != null) {
|
||||||
|
StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
|
||||||
|
str.append(": DB Data={id=").append(dbDC.getId()).append("; state=").append(dbDC.getState()).append(";updatedTime=")
|
||||||
|
.append(dbDC.getLastUpdated());
|
||||||
|
str.append(": New Data={id=").append(vo.getId()).append("; state=").append(nextState).append("; event=").append(event).append("; updatedTime=").append(vo.getLastUpdated());
|
||||||
|
str.append(": stale Data={id=").append(vo.getId()).append("; state=").append(currentState).append("; event=").append(event).append("; updatedTime=").append(oldUpdatedTime);
|
||||||
|
} else {
|
||||||
|
s_logger.debug("Unable to update dataCenter: id=" + vo.getId() + ", as there is no such dataCenter exists in the database anymore");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rows > 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -29,6 +29,7 @@ import javax.ws.rs.Path;
|
|||||||
import javax.ws.rs.Produces;
|
import javax.ws.rs.Produces;
|
||||||
|
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.ClusterEntity;
|
import org.apache.cloudstack.engine.datacenter.entity.api.ClusterEntity;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.ClusterEntityImpl;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceManager;
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceManager;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.PodEntity;
|
import org.apache.cloudstack.engine.datacenter.entity.api.PodEntity;
|
||||||
@ -50,6 +51,8 @@ import com.cloud.storage.StoragePool;
|
|||||||
@Path("/provisioning")
|
@Path("/provisioning")
|
||||||
public class ProvisioningServiceImpl implements ProvisioningService {
|
public class ProvisioningServiceImpl implements ProvisioningService {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
DataCenterResourceManager manager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StorageEntity registerStorage(String name, List<String> tags, Map<String, String> details) {
|
public StorageEntity registerStorage(String name, List<String> tags, Map<String, String> details) {
|
||||||
@ -58,27 +61,31 @@ public class ProvisioningServiceImpl implements ProvisioningService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ZoneEntity registerZone(String zoneUuid, String owner, List<String> tags, Map<String, String> details) {
|
public ZoneEntity registerZone(String zoneUuid, String name, String owner, List<String> tags, Map<String, String> details) {
|
||||||
|
ZoneEntityImpl zoneEntity = new ZoneEntityImpl(zoneUuid, manager);
|
||||||
ZoneEntityImpl zoneEntity = new ZoneEntityImpl(zoneUuid);
|
zoneEntity.setName(name);
|
||||||
zoneEntity.setOwner(owner);
|
zoneEntity.setOwner(owner);
|
||||||
zoneEntity.setDetails(details);
|
zoneEntity.setDetails(details);
|
||||||
zoneEntity.setState(State.Disabled);
|
|
||||||
zoneEntity.persist();
|
zoneEntity.persist();
|
||||||
|
|
||||||
return zoneEntity;
|
return zoneEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Override
|
@Override
|
||||||
// public PodEntity registerPod(String name, List<String> tags, Map<String, String> details) {
|
public PodEntity registerPod(String podUuid, String name, String owner, String zoneUuid, List<String> tags, Map<String, String> details) {
|
||||||
// // TODO Auto-generated method stub
|
PodEntityImpl podEntity = new PodEntityImpl(podUuid, manager);
|
||||||
// return null;
|
podEntity.setOwner(owner);
|
||||||
//}
|
podEntity.setName(name);
|
||||||
|
podEntity.persist();
|
||||||
|
return podEntity;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClusterEntity registerCluster(String name, List<String> tags, Map<String, String> details) {
|
public ClusterEntity registerCluster(String clusterUuid, String name, String owner, List<String> tags, Map<String, String> details) {
|
||||||
// TODO Auto-generated method stub
|
ClusterEntityImpl clusterEntity = new ClusterEntityImpl(clusterUuid, manager);
|
||||||
return null;
|
clusterEntity.setOwner(owner);
|
||||||
|
clusterEntity.setName(name);
|
||||||
|
clusterEntity.persist();
|
||||||
|
return clusterEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -94,20 +101,21 @@ public class ProvisioningServiceImpl implements ProvisioningService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deregisterZone() {
|
public void deregisterZone(String uuid) {
|
||||||
// TODO Auto-generated method stub
|
ZoneEntityImpl zoneEntity = new ZoneEntityImpl(uuid, manager);
|
||||||
|
zoneEntity.disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deregisterPod() {
|
public void deregisterPod(String uuid) {
|
||||||
// TODO Auto-generated method stub
|
PodEntityImpl podEntity = new PodEntityImpl(uuid, manager);
|
||||||
|
podEntity.disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deregisterCluster() {
|
public void deregisterCluster(String uuid) {
|
||||||
// TODO Auto-generated method stub
|
ClusterEntityImpl clusterEntity = new ClusterEntityImpl(uuid, manager);
|
||||||
|
clusterEntity.disable();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,16 +140,16 @@ public class ProvisioningServiceImpl implements ProvisioningService {
|
|||||||
@Override
|
@Override
|
||||||
public List<PodEntity> listPods() {
|
public List<PodEntity> listPods() {
|
||||||
List<PodEntity> pods = new ArrayList<PodEntity>();
|
List<PodEntity> pods = new ArrayList<PodEntity>();
|
||||||
pods.add(new PodEntityImpl("pod-uuid-1", "pod1"));
|
//pods.add(new PodEntityImpl("pod-uuid-1", "pod1"));
|
||||||
pods.add(new PodEntityImpl("pod-uuid-2", "pod2"));
|
//pods.add(new PodEntityImpl("pod-uuid-2", "pod2"));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ZoneEntity> listZones() {
|
public List<ZoneEntity> listZones() {
|
||||||
List<ZoneEntity> zones = new ArrayList<ZoneEntity>();
|
List<ZoneEntity> zones = new ArrayList<ZoneEntity>();
|
||||||
zones.add(new ZoneEntityImpl("zone-uuid-1"));
|
//zones.add(new ZoneEntityImpl("zone-uuid-1"));
|
||||||
zones.add(new ZoneEntityImpl("zone-uuid-2"));
|
//zones.add(new ZoneEntityImpl("zone-uuid-2"));
|
||||||
return zones;
|
return zones;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,18 +161,8 @@ public class ProvisioningServiceImpl implements ProvisioningService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ZoneEntity getZone(String uuid) {
|
public ZoneEntity getZone(String uuid) {
|
||||||
ZoneEntityImpl impl = new ZoneEntityImpl(uuid);
|
ZoneEntityImpl impl = new ZoneEntityImpl(uuid, manager);
|
||||||
return impl;
|
return impl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
|
|
||||||
public PodEntity registerPod(String arg0, Long arg1, String arg2,
|
|
||||||
String arg3, String arg4, String arg5, List<String> arg6,
|
|
||||||
Map<String, String> arg7) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
package org.apache.cloudstack.engine.provisioning.test;
|
package org.apache.cloudstack.engine.provisioning.test;
|
||||||
|
|
||||||
|
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.ClusterDao;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DataCenterDao;
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DataCenterDao;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.HostPodDao;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
|
||||||
@ -14,5 +16,15 @@ public class ChildTestConfiguration {
|
|||||||
public DataCenterDao dataCenterDao() {
|
public DataCenterDao dataCenterDao() {
|
||||||
return Mockito.mock(DataCenterDao.class);
|
return Mockito.mock(DataCenterDao.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public HostPodDao hostPodDao() {
|
||||||
|
return Mockito.mock(HostPodDao.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public ClusterDao clusterDao() {
|
||||||
|
return Mockito.mock(ClusterDao.class);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,13 +4,19 @@
|
|||||||
package org.apache.cloudstack.engine.provisioning.test;
|
package org.apache.cloudstack.engine.provisioning.test;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.ClusterEntity;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
|
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.PodEntity;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.ZoneEntity;
|
import org.apache.cloudstack.engine.datacenter.entity.api.ZoneEntity;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.ClusterDao;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DataCenterDao;
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DataCenterDao;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.HostPodDao;
|
||||||
import org.apache.cloudstack.engine.service.api.ProvisioningService;
|
import org.apache.cloudstack.engine.service.api.ProvisioningService;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@ -19,7 +25,10 @@ import org.mockito.Mockito;
|
|||||||
import org.springframework.test.context.ContextConfiguration;
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
|
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.ClusterVO;
|
||||||
import org.apache.cloudstack.engine.datacenter.entity.api.db.DataCenterVO;
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.DataCenterVO;
|
||||||
|
import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
|
||||||
|
|
||||||
import com.cloud.dc.DataCenter.NetworkType;
|
import com.cloud.dc.DataCenter.NetworkType;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
@ -34,27 +43,59 @@ public class ProvisioningTest extends TestCase {
|
|||||||
@Inject
|
@Inject
|
||||||
DataCenterDao dcDao;
|
DataCenterDao dcDao;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
HostPodDao _podDao;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ClusterDao _clusterDao;
|
||||||
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
|
|
||||||
DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24",
|
DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24",
|
||||||
null, null, NetworkType.Basic, null, null, true, true);
|
null, null, NetworkType.Basic, null, null, true, true);
|
||||||
|
Mockito.when(dcDao.findByUUID(Mockito.anyString())).thenReturn(dc);
|
||||||
Mockito.when(dcDao.findById(Mockito.anyLong())).thenReturn(dc);
|
Mockito.when(dcDao.persist((DataCenterVO) Mockito.anyObject())).thenReturn(dc);
|
||||||
Mockito.when(dcDao.persist((DataCenterVO) Mockito.anyObject())).thenReturn(dc);
|
|
||||||
|
HostPodVO pod = new HostPodVO("lab", 123, "10.0.0.1", "10.0.0.1", 24, "test");
|
||||||
|
Mockito.when(_podDao.findByUUID(Mockito.anyString())).thenReturn(pod);
|
||||||
|
Mockito.when(_podDao.persist((HostPodVO) Mockito.anyObject())).thenReturn(pod);
|
||||||
|
|
||||||
|
ClusterVO cluster = new ClusterVO();
|
||||||
|
Mockito.when(_clusterDao.findByUUID(Mockito.anyString())).thenReturn(cluster);
|
||||||
|
Mockito.when(_clusterDao.persist((ClusterVO) Mockito.anyObject())).thenReturn(cluster);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerAndEnableZone() {
|
private void registerAndEnableZone() {
|
||||||
ZoneEntity zone = service.registerZone("47547648", "owner", null, new HashMap<String, String>());
|
ZoneEntity zone = service.registerZone("47547648", "lab","owner", null, new HashMap<String, String>());
|
||||||
State state = zone.getState();
|
State state = zone.getState();
|
||||||
System.out.println("state:"+state);
|
System.out.println("state:"+state);
|
||||||
boolean result = zone.enable();
|
boolean result = zone.enable();
|
||||||
System.out.println("state:"+zone.getState());
|
System.out.println("result:"+result);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerAndEnablePod() {
|
||||||
|
PodEntity pod = service.registerPod("47547648", "lab","owner", "8709874074", null, new HashMap<String, String>());
|
||||||
|
State state = pod.getState();
|
||||||
|
System.out.println("state:"+state);
|
||||||
|
boolean result = pod.enable();
|
||||||
|
System.out.println("result:"+result);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void registerAndEnableCluster() {
|
||||||
|
ClusterEntity cluster = service.registerCluster("1265476542", "lab","owner", null, new HashMap<String, String>());
|
||||||
|
State state = cluster.getState();
|
||||||
|
System.out.println("state:"+state);
|
||||||
|
boolean result = cluster.enable();
|
||||||
|
System.out.println("result:"+result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testProvisioning() {
|
public void testProvisioning() {
|
||||||
registerAndEnableZone();
|
registerAndEnableZone();
|
||||||
|
registerAndEnablePod();
|
||||||
|
registerAndEnableCluster();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user