diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java
index 01c3d811de9..c9ad97d9e9f 100755
--- a/api/src/com/cloud/api/ApiConstants.java
+++ b/api/src/com/cloud/api/ApiConstants.java
@@ -287,5 +287,6 @@ public class ApiConstants {
public static final String XEN_NETWORK_LABEL = "xennetworklabel";
public static final String KVM_NETWORK_LABEL = "kvmnetworklabel";
public static final String VMWARE_NETWORK_LABEL = "vmwarenetworklabel";
+ public static final String NETWORK_SERVICE_PROVIDER_ID = "nspid";
}
diff --git a/api/src/com/cloud/api/commands/CreateDhcpElementCmd.java b/api/src/com/cloud/api/commands/CreateDhcpElementCmd.java
new file mode 100644
index 00000000000..0caf2fec1fe
--- /dev/null
+++ b/api/src/com/cloud/api/commands/CreateDhcpElementCmd.java
@@ -0,0 +1,112 @@
+/**
+ * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved.
+ *
+ * This software is licensed under the GNU General Public License v3 or later.
+ *
+ * It is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package com.cloud.api.commands;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.api.ApiConstants;
+import com.cloud.api.BaseAsyncCreateCmd;
+import com.cloud.api.BaseCmd;
+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.network.VirtualRouterElements;
+import com.cloud.network.element.DhcpElementService;
+import com.cloud.event.EventTypes;
+import com.cloud.exception.ResourceAllocationException;
+import com.cloud.user.Account;
+import com.cloud.user.UserContext;
+
+@Implementation(responseObject=SuccessResponse.class, description="Create a dhcp element.")
+public class CreateDhcpElementCmd extends BaseAsyncCreateCmd {
+ public static final Logger s_logger = Logger.getLogger(CreateDhcpElementCmd.class.getName());
+ private static final String s_name = "createdhcpelementresponse";
+
+ @PlugService
+ private DhcpElementService _service;
+
+ /////////////////////////////////////////////////////
+ //////////////// API parameters /////////////////////
+ /////////////////////////////////////////////////////
+
+ @Parameter(name=ApiConstants.NETWORK_SERVICE_PROVIDER_ID, type=CommandType.LONG, required=true, description="the network service provider ID of the dhcp element")
+ private Long nspId;
+
+ /////////////////////////////////////////////////////
+ /////////////////// Accessors ///////////////////////
+ /////////////////////////////////////////////////////
+
+ public void setNspId(Long nspId) {
+ this.nspId = nspId;
+ }
+
+ public Long getNspId() {
+ return nspId;
+ }
+
+ /////////////////////////////////////////////////////
+ /////////////// API Implementation///////////////////
+ /////////////////////////////////////////////////////
+
+ @Override
+ public String getCommandName() {
+ return s_name;
+ }
+
+ @Override
+ public long getEntityOwnerId() {
+ return Account.ACCOUNT_ID_SYSTEM;
+ }
+
+ @Override
+ public void execute(){
+ UserContext.current().setEventDetails("DHCP element Id: "+getEntityId());
+ VirtualRouterElements result = _service.getCreatedElement(getEntityId());
+ if (result != null) {
+ SuccessResponse response = new SuccessResponse();
+ 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");
+ }
+ }
+
+ @Override
+ public void create() throws ResourceAllocationException {
+ VirtualRouterElements result = _service.addElement(getNspId());
+ if (result != null) {
+ setEntityId(result.getId());
+ } else {
+ throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network");
+ }
+ }
+
+ @Override
+ public String getEventType() {
+ return EventTypes.EVENT_SERVICE_PROVIDER_CREATE;
+ }
+
+ @Override
+ public String getEventDescription() {
+ return "Adding physical network ServiceProvider Dhcp server: " + getEntityId();
+ }
+}
diff --git a/api/src/com/cloud/api/commands/CreateRedundantVirtualRouterElementCmd.java b/api/src/com/cloud/api/commands/CreateRedundantVirtualRouterElementCmd.java
new file mode 100644
index 00000000000..da94deae1df
--- /dev/null
+++ b/api/src/com/cloud/api/commands/CreateRedundantVirtualRouterElementCmd.java
@@ -0,0 +1,112 @@
+/**
+ * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved.
+ *
+ * This software is licensed under the GNU General Public License v3 or later.
+ *
+ * It is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package com.cloud.api.commands;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.api.ApiConstants;
+import com.cloud.api.BaseAsyncCreateCmd;
+import com.cloud.api.BaseCmd;
+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.network.VirtualRouterElements;
+import com.cloud.network.element.RedundantVirtualRouterElementService;
+import com.cloud.event.EventTypes;
+import com.cloud.exception.ResourceAllocationException;
+import com.cloud.user.Account;
+import com.cloud.user.UserContext;
+
+@Implementation(responseObject=SuccessResponse.class, description="Create a redundant virtual router element.")
+public class CreateRedundantVirtualRouterElementCmd extends BaseAsyncCreateCmd {
+ public static final Logger s_logger = Logger.getLogger(CreateVirtualRouterElementCmd.class.getName());
+ private static final String s_name = "createredundantvirtualrouterelementresponse";
+
+ @PlugService
+ private RedundantVirtualRouterElementService _service;
+
+ /////////////////////////////////////////////////////
+ //////////////// API parameters /////////////////////
+ /////////////////////////////////////////////////////
+
+ @Parameter(name=ApiConstants.NETWORK_SERVICE_PROVIDER_ID, type=CommandType.LONG, required=true, description="the network service provider ID of the redundant virtual router element")
+ private Long nspId;
+
+ /////////////////////////////////////////////////////
+ /////////////////// Accessors ///////////////////////
+ /////////////////////////////////////////////////////
+
+ public void setNspId(Long nspId) {
+ this.nspId = nspId;
+ }
+
+ public Long getNspId() {
+ return nspId;
+ }
+
+ /////////////////////////////////////////////////////
+ /////////////// API Implementation///////////////////
+ /////////////////////////////////////////////////////
+
+ @Override
+ public String getCommandName() {
+ return s_name;
+ }
+
+ @Override
+ public long getEntityOwnerId() {
+ return Account.ACCOUNT_ID_SYSTEM;
+ }
+
+ @Override
+ public void execute(){
+ UserContext.current().setEventDetails("Redundant Virtual Router Element Id: "+getEntityId());
+ VirtualRouterElements result = _service.getCreatedElement(getEntityId());
+ if (result != null) {
+ SuccessResponse response = new SuccessResponse();
+ 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");
+ }
+ }
+
+ @Override
+ public void create() throws ResourceAllocationException {
+ VirtualRouterElements result = _service.addElement(getNspId());
+ if (result != null) {
+ setEntityId(result.getId());
+ } else {
+ throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network");
+ }
+ }
+
+ @Override
+ public String getEventType() {
+ return EventTypes.EVENT_SERVICE_PROVIDER_CREATE;
+ }
+
+ @Override
+ public String getEventDescription() {
+ return "Adding physical network ServiceProvider redundant virtual router: " + getEntityId();
+ }
+}
diff --git a/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java b/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java
new file mode 100644
index 00000000000..fce54ffbb96
--- /dev/null
+++ b/api/src/com/cloud/api/commands/CreateVirtualRouterElementCmd.java
@@ -0,0 +1,112 @@
+/**
+ * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved.
+ *
+ * This software is licensed under the GNU General Public License v3 or later.
+ *
+ * It is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package com.cloud.api.commands;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.api.ApiConstants;
+import com.cloud.api.BaseAsyncCreateCmd;
+import com.cloud.api.BaseCmd;
+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.network.VirtualRouterElements;
+import com.cloud.network.element.VirtualRouterElementService;
+import com.cloud.event.EventTypes;
+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.")
+public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd {
+ public static final Logger s_logger = Logger.getLogger(CreateVirtualRouterElementCmd.class.getName());
+ private static final String s_name = "createvirtualrouterelementresponse";
+
+ @PlugService
+ private VirtualRouterElementService _service;
+
+ /////////////////////////////////////////////////////
+ //////////////// API parameters /////////////////////
+ /////////////////////////////////////////////////////
+
+ @Parameter(name=ApiConstants.NETWORK_SERVICE_PROVIDER_ID, type=CommandType.LONG, required=true, description="the network service provider ID of the virtual router element")
+ private Long nspId;
+
+ /////////////////////////////////////////////////////
+ /////////////////// Accessors ///////////////////////
+ /////////////////////////////////////////////////////
+
+ public void setNspId(Long nspId) {
+ this.nspId = nspId;
+ }
+
+ public Long getNspId() {
+ return nspId;
+ }
+
+ /////////////////////////////////////////////////////
+ /////////////// API Implementation///////////////////
+ /////////////////////////////////////////////////////
+
+ @Override
+ public String getCommandName() {
+ return s_name;
+ }
+
+ @Override
+ public long getEntityOwnerId() {
+ return Account.ACCOUNT_ID_SYSTEM;
+ }
+
+ @Override
+ public void execute(){
+ UserContext.current().setEventDetails("Virtual router element Id: "+getEntityId());
+ VirtualRouterElements result = _service.getCreatedElement(getEntityId());
+ if (result != null) {
+ SuccessResponse response = new SuccessResponse();
+ 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");
+ }
+ }
+
+ @Override
+ public void create() throws ResourceAllocationException {
+ VirtualRouterElements result = _service.addElement(getNspId());
+ if (result != null) {
+ setEntityId(result.getId());
+ } else {
+ throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network");
+ }
+ }
+
+ @Override
+ public String getEventType() {
+ return EventTypes.EVENT_SERVICE_PROVIDER_CREATE;
+ }
+
+ @Override
+ public String getEventDescription() {
+ return "Adding physical network ServiceProvider Virtual Router: " + getEntityId();
+ }
+}
diff --git a/server/src/com/cloud/network/element/VirtualRouterElements.java b/api/src/com/cloud/network/VirtualRouterElements.java
similarity index 90%
rename from server/src/com/cloud/network/element/VirtualRouterElements.java
rename to api/src/com/cloud/network/VirtualRouterElements.java
index 3cb21796808..1247817cf53 100644
--- a/server/src/com/cloud/network/element/VirtualRouterElements.java
+++ b/api/src/com/cloud/network/VirtualRouterElements.java
@@ -16,7 +16,7 @@
*
*/
-package com.cloud.network.element;
+package com.cloud.network;
public interface VirtualRouterElements {
public enum VirtualRouterElementsType {
@@ -25,4 +25,7 @@ public interface VirtualRouterElements {
RedundantVirtualRouterElement,
}
public VirtualRouterElementsType getType();
+ public long getId();
+ public boolean isEnabled();
+ public long getNspId();
}
diff --git a/api/src/com/cloud/network/element/DhcpElementService.java b/api/src/com/cloud/network/element/DhcpElementService.java
index ca8cc1dafdc..97386ac555f 100644
--- a/api/src/com/cloud/network/element/DhcpElementService.java
+++ b/api/src/com/cloud/network/element/DhcpElementService.java
@@ -1,11 +1,13 @@
package com.cloud.network.element;
import com.cloud.api.commands.ConfigureDhcpElementCmd;
+import com.cloud.network.VirtualRouterElements;
import com.cloud.utils.component.PluggableService;
public interface DhcpElementService extends PluggableService{
boolean configure(ConfigureDhcpElementCmd cmd);
- boolean addElement(Long nspId);
+ VirtualRouterElements addElement(Long nspId);
Long getIdByNspId(Long nspId);
boolean isReady(long nspId);
+ VirtualRouterElements getCreatedElement(long id);
}
diff --git a/client/tomcatconf/virtualrouter_commands.properties.in b/client/tomcatconf/virtualrouter_commands.properties.in
index 7fc0cdcd809..e88194910b5 100644
--- a/client/tomcatconf/virtualrouter_commands.properties.in
+++ b/client/tomcatconf/virtualrouter_commands.properties.in
@@ -2,6 +2,9 @@
### Please standardize naming conventions to camel-case (even for acronyms).
#### router commands
+createVirtualRouterElement=com.cloud.api.commands.CreateVirtualRouterElementCmd;7
+createDhcpElement=com.cloud.api.commands.CreateDhcpElementCmd;7
+createRedundantVirtualRouterElement=com.cloud.api.commands.CreateRedundantVirtualRouterElementCmd;7
configureDhcpElement=com.cloud.api.commands.ConfigureDhcpElementCmd;7
configureVirtualRouterElement=com.cloud.api.commands.ConfigureVirtualRouterElementCmd;7
configureRedundantVirtualRouterElement=com.cloud.api.commands.ConfigureRedundantVirtualRouterElementCmd;7
diff --git a/server/src/com/cloud/network/dao/VirtualRouterElementsDao.java b/server/src/com/cloud/network/dao/VirtualRouterElementsDao.java
index 13d0695d542..548fb92fa34 100644
--- a/server/src/com/cloud/network/dao/VirtualRouterElementsDao.java
+++ b/server/src/com/cloud/network/dao/VirtualRouterElementsDao.java
@@ -18,7 +18,7 @@
package com.cloud.network.dao;
import com.cloud.network.element.VirtualRouterElementsVO;
-import com.cloud.network.element.VirtualRouterElements.VirtualRouterElementsType;
+import com.cloud.network.VirtualRouterElements.VirtualRouterElementsType;
import com.cloud.utils.db.GenericDao;
public interface VirtualRouterElementsDao extends GenericDao {
diff --git a/server/src/com/cloud/network/dao/VirtualRouterElementsDaoImpl.java b/server/src/com/cloud/network/dao/VirtualRouterElementsDaoImpl.java
index b9d3a92de50..e10d5d08e3b 100644
--- a/server/src/com/cloud/network/dao/VirtualRouterElementsDaoImpl.java
+++ b/server/src/com/cloud/network/dao/VirtualRouterElementsDaoImpl.java
@@ -20,7 +20,7 @@ package com.cloud.network.dao;
import javax.ejb.Local;
import com.cloud.network.element.VirtualRouterElementsVO;
-import com.cloud.network.element.VirtualRouterElements.VirtualRouterElementsType;
+import com.cloud.network.VirtualRouterElements.VirtualRouterElementsType;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
diff --git a/server/src/com/cloud/network/element/DhcpElement.java b/server/src/com/cloud/network/element/DhcpElement.java
index 5dcdf8b274b..fcdea8f36f4 100644
--- a/server/src/com/cloud/network/element/DhcpElement.java
+++ b/server/src/com/cloud/network/element/DhcpElement.java
@@ -36,6 +36,7 @@ import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.host.dao.HostDao;
import com.cloud.network.Network;
+import com.cloud.network.VirtualRouterElements;
import com.cloud.network.Network.Capability;
import com.cloud.network.Network.GuestType;
import com.cloud.network.Network.Provider;
@@ -45,7 +46,7 @@ import com.cloud.network.Networks.TrafficType;
import com.cloud.network.PhysicalNetworkServiceProvider;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.VirtualRouterElementsDao;
-import com.cloud.network.element.VirtualRouterElements.VirtualRouterElementsType;
+import com.cloud.network.VirtualRouterElements.VirtualRouterElementsType;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.network.router.VirtualRouter;
import com.cloud.network.router.VirtualRouter.Role;
@@ -218,7 +219,7 @@ public class DhcpElement extends AdapterBase implements DhcpElementService, User
s_logger.trace("Can't find element with network service provider ID " + cmd.getNspId());
return false;
}
- element.setIsReady(cmd.getEnabled());
+ element.setEnabled(cmd.getEnabled());
_vrElementsDao.persist(element);
@@ -226,14 +227,19 @@ public class DhcpElement extends AdapterBase implements DhcpElementService, User
}
@Override
- public boolean addElement(Long nspId) {
+ public VirtualRouterElements addElement(Long nspId) {
long serviceOfferingId = _routerMgr.getDefaultVirtualRouterServiceOfferingId();
if (serviceOfferingId == 0) {
- return false;
+ return null;
}
- VirtualRouterElementsVO element = new VirtualRouterElementsVO(nspId, null, VirtualRouterElementsType.DhcpElement);
+ VirtualRouterElementsVO element = _vrElementsDao.findByNspIdAndType(nspId, VirtualRouterElementsType.DhcpElement);
+ if (element != null) {
+ s_logger.trace("There is already a dhcp element with service provider id " + nspId);
+ return null;
+ }
+ element = new VirtualRouterElementsVO(nspId, null, VirtualRouterElementsType.DhcpElement);
_vrElementsDao.persist(element);
- return true;
+ return element;
}
@Override
@@ -248,7 +254,12 @@ public class DhcpElement extends AdapterBase implements DhcpElementService, User
if (element == null) {
return false;
}
- return element.getIsReady();
+ return element.isEnabled();
+ }
+
+ @Override
+ public VirtualRouterElements getCreatedElement(long id) {
+ return _vrElementsDao.findById(id);
}
@Override
diff --git a/server/src/com/cloud/network/element/RedundantVirtualRouterElement.java b/server/src/com/cloud/network/element/RedundantVirtualRouterElement.java
index 4573415ad89..efb40ba4158 100644
--- a/server/src/com/cloud/network/element/RedundantVirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/RedundantVirtualRouterElement.java
@@ -14,12 +14,12 @@ import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.Network;
+import com.cloud.network.VirtualRouterElements;
import com.cloud.network.Network.Provider;
import com.cloud.network.Network.Service;
-import com.cloud.network.Network.GuestType;
import com.cloud.network.NetworkManager;
import com.cloud.network.dao.VirtualRouterElementsDao;
-import com.cloud.network.element.VirtualRouterElements.VirtualRouterElementsType;
+import com.cloud.network.VirtualRouterElements.VirtualRouterElementsType;
import com.cloud.network.router.VirtualRouter;
import com.cloud.offering.NetworkOffering;
import com.cloud.uservm.UserVm;
@@ -88,16 +88,37 @@ public class RedundantVirtualRouterElement extends VirtualRouterElement implemen
s_logger.trace("Can't find element with UUID " + cmd.getNspId());
return false;
}
- element.setIsReady(cmd.getEnabled());
+ element.setEnabled(cmd.getEnabled());
_vrElementsDao.persist(element);
return true;
}
@Override
- public boolean addElement(Long nspId) {
- VirtualRouterElementsVO element = new VirtualRouterElementsVO(nspId, null, VirtualRouterElementsType.RedundantVirtualRouterElement);
+ public VirtualRouterElements addElement(Long nspId) {
+ VirtualRouterElementsVO element = _vrElementsDao.findByNspIdAndType(nspId, VirtualRouterElementsType.RedundantVirtualRouterElement);
+ if (element != null) {
+ s_logger.trace("There is already a redundant virtual router element with service provider id " + nspId);
+ return null;
+ }
+ element = new VirtualRouterElementsVO(nspId, null, VirtualRouterElementsType.RedundantVirtualRouterElement);
_vrElementsDao.persist(element);
- return true;
+ return element;
}
+
+ @Override
+ public boolean isReady(long nspId) {
+ VirtualRouterElementsVO element = _vrElementsDao.findByNspIdAndType(nspId, VirtualRouterElementsType.RedundantVirtualRouterElement);
+ if (element == null) {
+ return false;
+ }
+ return element.isEnabled();
+ }
+
+ @Override
+ public Long getIdByNspId(Long nspId) {
+ VirtualRouterElementsVO vr = _vrElementsDao.findByNspIdAndType(nspId, VirtualRouterElementsType.RedundantVirtualRouterElement);
+ return vr.getId();
+ }
+
}
diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java
index dd0d1c9333a..d8616ff91fb 100644
--- a/server/src/com/cloud/network/element/VirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VirtualRouterElement.java
@@ -43,11 +43,12 @@ import com.cloud.network.NetworkManager;
import com.cloud.network.PhysicalNetworkServiceProvider;
import com.cloud.network.PublicIpAddress;
import com.cloud.network.RemoteAccessVpn;
+import com.cloud.network.VirtualRouterElements;
import com.cloud.network.VpnUser;
import com.cloud.network.dao.LoadBalancerDao;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.VirtualRouterElementsDao;
-import com.cloud.network.element.VirtualRouterElements.VirtualRouterElementsType;
+import com.cloud.network.VirtualRouterElements.VirtualRouterElementsType;
import com.cloud.network.lb.LoadBalancingRule;
import com.cloud.network.lb.LoadBalancingRulesManager;
import com.cloud.network.router.VirtualNetworkApplianceManager;
@@ -408,17 +409,22 @@ public class VirtualRouterElement extends DhcpElement implements VirtualRouterEl
return false;
}
- element.setIsReady(cmd.getEnabled());
+ element.setEnabled(cmd.getEnabled());
_vrElementsDao.persist(element);
return true;
}
@Override
- public boolean addElement(Long nspId) {
- VirtualRouterElementsVO element = new VirtualRouterElementsVO(nspId, null, VirtualRouterElementsType.VirtualRouterElement);
+ public VirtualRouterElements addElement(Long nspId) {
+ VirtualRouterElementsVO element = _vrElementsDao.findByNspIdAndType(nspId, VirtualRouterElementsType.VirtualRouterElement);
+ if (element != null) {
+ s_logger.trace("There is already a virtual router element with service provider id " + nspId);
+ return null;
+ }
+ element = new VirtualRouterElementsVO(nspId, null, VirtualRouterElementsType.VirtualRouterElement);
_vrElementsDao.persist(element);
- return true;
+ return element;
}
@Override
@@ -446,7 +452,7 @@ public class VirtualRouterElement extends DhcpElement implements VirtualRouterEl
if (element == null) {
return false;
}
- return element.getIsReady();
+ return element.isEnabled();
}
@Override
diff --git a/server/src/com/cloud/network/element/VirtualRouterElementsVO.java b/server/src/com/cloud/network/element/VirtualRouterElementsVO.java
index fc0655342f3..d386f3cea0f 100644
--- a/server/src/com/cloud/network/element/VirtualRouterElementsVO.java
+++ b/server/src/com/cloud/network/element/VirtualRouterElementsVO.java
@@ -28,6 +28,7 @@ import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
+import com.cloud.network.VirtualRouterElements;
import com.cloud.utils.db.GenericDao;
@Entity
@@ -42,8 +43,8 @@ public class VirtualRouterElementsVO implements VirtualRouterElements {
@Enumerated(EnumType.STRING)
private VirtualRouterElementsType type;
- @Column(name="ready")
- private boolean isReady;
+ @Column(name="enabled")
+ private boolean enabled;
@Column(name="nsp_id")
private long nspId;
@@ -63,6 +64,7 @@ public class VirtualRouterElementsVO implements VirtualRouterElements {
this.type = type;
}
+ @Override
public long getNspId() {
return nspId;
}
@@ -71,6 +73,7 @@ public class VirtualRouterElementsVO implements VirtualRouterElements {
return uuid;
}
+ @Override
public long getId() {
return id;
}
@@ -88,12 +91,13 @@ public class VirtualRouterElementsVO implements VirtualRouterElements {
this.removed = removed;
}
- public void setIsReady(boolean isReady) {
- this.isReady = isReady;
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
}
- public boolean getIsReady() {
- return isReady;
+ @Override
+ public boolean isEnabled() {
+ return this.enabled;
}
public void setId(long id) {
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index 170c438f3a1..382613b2ddf 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -1805,11 +1805,11 @@ CREATE TABLE `cloud`.`physical_network_external_devices` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `cloud`.`virtual_router_elements` (
- `id` bigint unsigned NOT NULL auto_increment,
- `nsp_id` bigint unsigned NOT NULL,
+ `id` bigint unsigned NOT NULL auto_increment COMMENT 'id',
+ `nsp_id` bigint unsigned NOT NULL COMMENT 'Network Service Provider ID',
`uuid` varchar(255) UNIQUE,
- `type` varchar(255) NOT NULL,
- `ready` int(1) NOT NULL,
+ `type` varchar(255) NOT NULL COMMENT 'DHCP element, or Virtual router, or redundant virtual router',
+ `enabled` int(1) NOT NULL COMMENT 'Enabled or disabled',
`removed` datetime COMMENT 'date removed if not null',
PRIMARY KEY (`id`),
CONSTRAINT `fk_virtual_router_elements__nsp_id` FOREIGN KEY (`nsp_id`) REFERENCES `physical_network_service_providers` (`id`) ON DELETE CASCADE