NaaS: Add response for VirtualRouterProvider

This commit is contained in:
Sheng Yang 2011-11-09 17:11:09 -08:00
parent 53a636518f
commit 5c1773dd26
12 changed files with 261 additions and 30 deletions

View File

@ -297,5 +297,6 @@ public class ApiConstants {
public static final String CAN_ENABLE_INDIVIDUAL_SERVICE = "canenableindividualservice";
public static final String SUPPORTED_SERVICES = "supportedservices";
public static final String SOURCE_NAT_ENABLED = "sourcenatenabled";
public static final String NSP_ID= "nspid";
}

View File

@ -65,6 +65,7 @@ import com.cloud.api.response.TemplateResponse;
import com.cloud.api.response.TrafficTypeResponse;
import com.cloud.api.response.UserResponse;
import com.cloud.api.response.UserVmResponse;
import com.cloud.api.response.VirtualRouterProviderResponse;
import com.cloud.api.response.VlanIpRangeResponse;
import com.cloud.api.response.VolumeResponse;
import com.cloud.api.response.VpnUsersResponse;
@ -89,6 +90,7 @@ import com.cloud.network.PhysicalNetwork;
import com.cloud.network.PhysicalNetworkServiceProvider;
import com.cloud.network.PhysicalNetworkTrafficType;
import com.cloud.network.RemoteAccessVpn;
import com.cloud.network.VirtualRouterProvider;
import com.cloud.network.VpnUser;
import com.cloud.network.router.VirtualRouter;
import com.cloud.network.rules.FirewallRule;
@ -251,5 +253,7 @@ public interface ResponseGenerator {
ProviderResponse createNetworkServiceProviderResponse(PhysicalNetworkServiceProvider result);
TrafficTypeResponse createTrafficTypeResponse(PhysicalNetworkTrafficType result);
VirtualRouterProviderResponse createVirtualRouterProviderResponse(VirtualRouterProvider result);
}

View File

@ -27,7 +27,8 @@ import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.PlugService;
import com.cloud.api.ServerApiException;
import com.cloud.api.response.SuccessResponse;
import com.cloud.api.response.VirtualRouterProviderResponse;
import com.cloud.network.VirtualRouterProvider;
import com.cloud.network.element.VirtualRouterElementService;
import com.cloud.async.AsyncJob;
import com.cloud.event.EventTypes;
@ -37,7 +38,7 @@ import com.cloud.exception.ResourceUnavailableException;
import com.cloud.user.Account;
import com.cloud.user.UserContext;
@Implementation(responseObject=SuccessResponse.class, description="Configures a virtual router element.")
@Implementation(responseObject=VirtualRouterProviderResponse.class, description="Configures a virtual router element.")
public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd {
public static final Logger s_logger = Logger.getLogger(ConfigureVirtualRouterElementCmd.class.getName());
private static final String s_name = "configurevirtualrouterelementresponse";
@ -49,8 +50,8 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd {
//////////////// API parameters /////////////////////
/////////////////////////////////////////////////////
@Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the network service provider ID of the virtual router element")
private Long nspId;
@Parameter(name=ApiConstants.ID, type=CommandType.LONG, required=true, description="the ID of the virtual router provider")
private Long id;
@Parameter(name=ApiConstants.ENABLED, type=CommandType.BOOLEAN, required=true, description="Enabled/Disabled the service provider")
private Boolean enabled;
@ -59,12 +60,12 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd {
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
public void setNspId(Long nspId) {
this.nspId = nspId;
public void setId(Long id) {
this.id = id;
}
public Long getNspId() {
return nspId;
public Long getId() {
return id;
}
public void setEnabled(Boolean enabled) {
@ -100,7 +101,7 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd {
@Override
public String getEventDescription() {
return "configuring virtual router element: " + _service.getIdByNspId(nspId);
return "configuring virtual router provider: " + id;
}
public AsyncJob.Type getInstanceType() {
@ -108,20 +109,19 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd {
}
public Long getInstanceId() {
return _service.getIdByNspId(getNspId());
return id;
}
@Override
public void execute() throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{
UserContext.current().setEventDetails("Virtual router element: " + _service.getIdByNspId(nspId));
Boolean result = _service.configure(this);
if (result){
SuccessResponse response = new SuccessResponse();
response.setResponseName(getCommandName());
response.setSuccess(result);
this.setResponseObject(response);
UserContext.current().setEventDetails("Virtual router element: " + id);
VirtualRouterProvider result = _service.configure(this);
if (result != null){
VirtualRouterProviderResponse routerResponse = _responseGenerator.createVirtualRouterProviderResponse(result);
routerResponse.setResponseName(getCommandName());
this.setResponseObject(routerResponse);
} else {
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to configure the virtual router element");
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to configure the virtual router provider");
}
}
}

View File

@ -27,7 +27,7 @@ import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.PlugService;
import com.cloud.api.ServerApiException;
import com.cloud.api.response.SuccessResponse;
import com.cloud.api.response.VirtualRouterProviderResponse;
import com.cloud.network.VirtualRouterProvider;
import com.cloud.network.element.VirtualRouterElementService;
import com.cloud.event.EventTypes;
@ -35,7 +35,7 @@ import com.cloud.exception.ResourceAllocationException;
import com.cloud.user.Account;
import com.cloud.user.UserContext;
@Implementation(responseObject=SuccessResponse.class, description="Create a virtual router element.")
@Implementation(responseObject=VirtualRouterProviderResponse.class, description="Create a virtual router element.")
public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd {
public static final Logger s_logger = Logger.getLogger(CreateVirtualRouterElementCmd.class.getName());
private static final String s_name = "createvirtualrouterelementresponse";
@ -81,9 +81,8 @@ public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd {
UserContext.current().setEventDetails("Virtual router element Id: "+getEntityId());
VirtualRouterProvider result = _service.getCreatedElement(getEntityId());
if (result != null) {
SuccessResponse response = new SuccessResponse();
VirtualRouterProviderResponse response = _responseGenerator.createVirtualRouterProviderResponse(result);
response.setResponseName(getCommandName());
response.setSuccess(true);
this.setResponseObject(response);
}else {
throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network");

View File

@ -0,0 +1,79 @@
package com.cloud.api.commands;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import com.cloud.api.ApiConstants;
import com.cloud.api.BaseListCmd;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.PlugService;
import com.cloud.api.ServerApiException;
import com.cloud.api.response.ListResponse;
import com.cloud.api.response.VirtualRouterProviderResponse;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.ResourceAllocationException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.VirtualRouterProvider;
import com.cloud.network.element.VirtualRouterElementService;
@Implementation(description="Lists all available virtual router elements.", responseObject=VirtualRouterProviderResponse.class)
public class ListVirtualRouterElementsCmd extends BaseListCmd {
public static final Logger s_logger = Logger.getLogger(ListNetworkOfferingsCmd.class.getName());
private static final String _name = "listvirtualrouterelementsresponse";
@PlugService
private VirtualRouterElementService _service;
/////////////////////////////////////////////////////
//////////////// API parameters /////////////////////
/////////////////////////////////////////////////////
@Parameter(name=ApiConstants.ID, type=CommandType.LONG, description="list virtual router elements by id")
private Long id;
@Parameter(name=ApiConstants.ENABLED, type=CommandType.BOOLEAN, description="list network offerings by enabled state")
private Boolean enabled;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
public Boolean getEnabled() {
return enabled;
}
@Override
public String getCommandName() {
return _name;
}
@Override
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException {
List<? extends VirtualRouterProvider> providers = _service.searchForVirtualRouterElement(this);
ListResponse<VirtualRouterProviderResponse> response = new ListResponse<VirtualRouterProviderResponse>();
List<VirtualRouterProviderResponse> providerResponses = new ArrayList<VirtualRouterProviderResponse>();
for (VirtualRouterProvider provider : providers) {
VirtualRouterProviderResponse providerResponse = _responseGenerator.createVirtualRouterProviderResponse(provider);
providerResponses.add(providerResponse);
}
response.setResponses(providerResponses);
response.setResponseName(getCommandName());
this.setResponseObject(response);
}
}

View File

@ -0,0 +1,81 @@
package com.cloud.api.response;
import com.cloud.api.ApiConstants;
import com.cloud.serializer.Param;
import com.google.gson.annotations.SerializedName;
public class VirtualRouterProviderResponse extends BaseResponse implements ControlledEntityResponse {
@SerializedName(ApiConstants.ID) @Param(description="the id of the router")
private Long id;
@SerializedName(ApiConstants.NSP_ID) @Param(description="the physical network service provider id of the provider")
private Long nspId;
@SerializedName(ApiConstants.ENABLED) @Param(description="Enabled/Disabled the service provider")
private Boolean enabled;
@SerializedName(ApiConstants.ACCOUNT) @Param(description="the account associated with the provider")
private String accountName;
@SerializedName(ApiConstants.PROJECT_ID) @Param(description="the project id of the ipaddress")
private Long projectId;
@SerializedName(ApiConstants.PROJECT) @Param(description="the project name of the address")
private String projectName;
@SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain ID associated with the provider")
private Long domainId;
@SerializedName(ApiConstants.DOMAIN) @Param(description="the domain associated with the provider")
private String domainName;
@Override
public void setAccountName(String accountName) {
this.accountName = accountName;
}
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
@Override
public void setDomainId(Long domainId) {
this.domainId = domainId;
}
@Override
public void setDomainName(String domainName) {
this.domainName = domainName;
}
@Override
public void setProjectId(Long projectId) {
this.projectId = projectId;
}
@Override
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public void setNspId(Long nspId) {
this.nspId = nspId;
}
public Long getNspId() {
return nspId;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
public Boolean getEnabled() {
return enabled;
}
}

View File

@ -1,12 +1,15 @@
package com.cloud.network.element;
import java.util.List;
import com.cloud.api.commands.ConfigureVirtualRouterElementCmd;
import com.cloud.api.commands.ListVirtualRouterElementsCmd;
import com.cloud.network.VirtualRouterProvider;
import com.cloud.utils.component.PluggableService;
public interface VirtualRouterElementService extends PluggableService{
boolean configure(ConfigureVirtualRouterElementCmd cmd);
VirtualRouterProvider configure(ConfigureVirtualRouterElementCmd cmd);
VirtualRouterProvider addElement(Long nspId);
Long getIdByNspId(Long nspId);
VirtualRouterProvider getCreatedElement(long id);
List<? extends VirtualRouterProvider> searchForVirtualRouterElement(ListVirtualRouterElementsCmd cmd);
}

View File

@ -4,3 +4,4 @@
#### router commands
createVirtualRouterElement=com.cloud.api.commands.CreateVirtualRouterElementCmd;7
configureVirtualRouterElement=com.cloud.api.commands.ConfigureVirtualRouterElementCmd;7
listVirtualRouterElements=com.cloud.api.commands.ListVirtualRouterElementsCmd;7

View File

@ -85,6 +85,7 @@ import com.cloud.api.response.TemplateResponse;
import com.cloud.api.response.TrafficTypeResponse;
import com.cloud.api.response.UserResponse;
import com.cloud.api.response.UserVmResponse;
import com.cloud.api.response.VirtualRouterProviderResponse;
import com.cloud.api.response.VlanIpRangeResponse;
import com.cloud.api.response.VolumeResponse;
import com.cloud.api.response.VpnUsersResponse;
@ -126,6 +127,7 @@ import com.cloud.network.PhysicalNetwork;
import com.cloud.network.PhysicalNetworkServiceProvider;
import com.cloud.network.PhysicalNetworkTrafficType;
import com.cloud.network.RemoteAccessVpn;
import com.cloud.network.VirtualRouterProvider;
import com.cloud.network.VpnUser;
import com.cloud.network.router.VirtualRouter;
import com.cloud.network.rules.FirewallRule;
@ -2632,4 +2634,13 @@ public class ApiResponseHelper implements ResponseGenerator {
response.setObjectName("traffictype");
return response;
}
@Override
public VirtualRouterProviderResponse createVirtualRouterProviderResponse(VirtualRouterProvider result) {
VirtualRouterProviderResponse response = new VirtualRouterProviderResponse();
response.setId(result.getId());
response.setNspId(result.getNspId());
response.setEnabled(result.isEnabled());
return response;
}
}

View File

@ -17,10 +17,16 @@
*/
package com.cloud.network.dao;
import java.util.List;
import com.cloud.network.VirtualRouterProvider;
import com.cloud.network.element.VirtualRouterProviderVO;
import com.cloud.network.VirtualRouterProvider.VirtualRouterProviderType;
import com.cloud.utils.db.GenericDao;
public interface VirtualRouterProviderDao extends GenericDao<VirtualRouterProviderVO, Long> {
public VirtualRouterProviderVO findByNspIdAndType(long nspId, VirtualRouterProviderType type);
public List<VirtualRouterProviderVO> listByEnabledAndType(boolean enabled, VirtualRouterProviderType type);
public VirtualRouterProviderVO findByIdAndEnabledAndType(long id, boolean enabled, VirtualRouterProviderType type);
public List<VirtualRouterProviderVO> listByType(VirtualRouterProviderType type);
}

View File

@ -17,6 +17,8 @@
*/
package com.cloud.network.dao;
import java.util.List;
import javax.ejb.Local;
import com.cloud.network.element.VirtualRouterProviderVO;
@ -33,9 +35,11 @@ public class VirtualRouterProviderDaoImpl extends GenericDaoBase<VirtualRouterPr
public VirtualRouterProviderDaoImpl() {
super();
AllFieldsSearch = createSearchBuilder();
AllFieldsSearch.and("id", AllFieldsSearch.entity().getId(), SearchCriteria.Op.EQ);
AllFieldsSearch.and("nsp_id", AllFieldsSearch.entity().getNspId(), SearchCriteria.Op.EQ);
AllFieldsSearch.and("uuid", AllFieldsSearch.entity().getUuid(), SearchCriteria.Op.EQ);
AllFieldsSearch.and("type", AllFieldsSearch.entity().getType(), SearchCriteria.Op.EQ);
AllFieldsSearch.and("enabled", AllFieldsSearch.entity().isEnabled(), SearchCriteria.Op.EQ);
AllFieldsSearch.done();
}
@ -46,4 +50,28 @@ public class VirtualRouterProviderDaoImpl extends GenericDaoBase<VirtualRouterPr
sc.setParameters("type", type);
return findOneBy(sc);
}
@Override
public List<VirtualRouterProviderVO> listByEnabledAndType(boolean enabled, VirtualRouterProviderType type) {
SearchCriteria<VirtualRouterProviderVO> sc = AllFieldsSearch.create();
sc.setParameters("enabled", enabled);
sc.setParameters("type", type);
return listBy(sc);
}
@Override
public VirtualRouterProviderVO findByIdAndEnabledAndType(long id, boolean enabled, VirtualRouterProviderType type) {
SearchCriteria<VirtualRouterProviderVO> sc = AllFieldsSearch.create();
sc.setParameters("id", id);
sc.setParameters("enabled", enabled);
sc.setParameters("type", type);
return findOneBy(sc);
}
@Override
public List<VirtualRouterProviderVO> listByType(VirtualRouterProviderType type) {
SearchCriteria<VirtualRouterProviderVO> sc = AllFieldsSearch.create();
sc.setParameters("type", type);
return listBy(sc);
}
}

View File

@ -17,6 +17,7 @@
*/
package com.cloud.network.element;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -26,6 +27,7 @@ import javax.ejb.Local;
import org.apache.log4j.Logger;
import com.cloud.api.commands.ConfigureVirtualRouterElementCmd;
import com.cloud.api.commands.ListVirtualRouterElementsCmd;
import com.cloud.configuration.ConfigurationManager;
import com.cloud.configuration.dao.ConfigurationDao;
import com.cloud.dc.DataCenter;
@ -381,17 +383,17 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
}
@Override
public boolean configure(ConfigureVirtualRouterElementCmd cmd) {
VirtualRouterProviderVO element = _vrProviderDao.findByNspIdAndType(cmd.getNspId(), VirtualRouterProviderType.VirtualRouter);
public VirtualRouterProvider configure(ConfigureVirtualRouterElementCmd cmd) {
VirtualRouterProviderVO element = _vrProviderDao.findById(cmd.getId());
if (element == null) {
s_logger.trace("Can't find element with network service provider id " + cmd.getNspId());
return false;
s_logger.trace("Can't find element with network service provider id " + cmd.getId());
return null;
}
element.setEnabled(cmd.getEnabled());
_vrProviderDao.persist(element);
return true;
return element;
}
@Override
@ -456,7 +458,6 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
return true;
}
@Override
public Long getIdByNspId(Long nspId) {
VirtualRouterProviderVO vr = _vrProviderDao.findByNspIdAndType(nspId, VirtualRouterProviderType.VirtualRouter);
return vr.getId();
@ -568,4 +569,21 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl
}
return false;
}
@Override
public List<? extends VirtualRouterProvider> searchForVirtualRouterElement(ListVirtualRouterElementsCmd cmd) {
if (cmd.getEnabled() == null && cmd.getId() == null) {
return _vrProviderDao.listByType(VirtualRouterProviderType.VirtualRouter);
}
if (cmd.getId() == null) {
return _vrProviderDao.listByEnabledAndType(cmd.getEnabled(), VirtualRouterProviderType.VirtualRouter);
}
//Search by Id
List<VirtualRouterProviderVO> list = new ArrayList<VirtualRouterProviderVO>();
VirtualRouterProviderVO provider = _vrProviderDao.findById(cmd.getId());
if (provider != null) {
list.add(provider);
}
return list;
}
}