diff --git a/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java b/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java
new file mode 100644
index 00000000000..5bc81d39895
--- /dev/null
+++ b/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java
@@ -0,0 +1,18 @@
+package com.cloud.network.element;
+
+import java.util.List;
+
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.Network;
+import com.cloud.network.rules.FirewallRule;
+
+public interface LoadBalancingServiceProvider extends NetworkElement {
+ /**
+ * Apply rules
+ * @param network
+ * @param rules
+ * @return
+ * @throws ResourceUnavailableException
+ */
+ boolean applyRules(Network network, List extends FirewallRule> rules) throws ResourceUnavailableException;
+}
diff --git a/client/tomcatconf/components-premium.xml.in b/client/tomcatconf/components-premium.xml.in
index cc032d99ed7..7306853c636 100755
--- a/client/tomcatconf/components-premium.xml.in
+++ b/client/tomcatconf/components-premium.xml.in
@@ -20,7 +20,7 @@
-
+
diff --git a/server/src/com/cloud/api/commands/AddExternalFirewallCmd.java b/server/src/com/cloud/api/commands/AddExternalFirewallCmd.java
index 3ecfbce1b72..bec96596d27 100644
--- a/server/src/com/cloud/api/commands/AddExternalFirewallCmd.java
+++ b/server/src/com/cloud/api/commands/AddExternalFirewallCmd.java
@@ -26,9 +26,10 @@ import com.cloud.api.BaseCmd;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.ServerApiException;
+import com.cloud.api.BaseCmd.CommandType;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.host.Host;
-import com.cloud.network.ExternalNetworkManager;
+import com.cloud.network.ExternalNetworkDeviceManager;
import com.cloud.server.ManagementService;
import com.cloud.server.api.response.ExternalFirewallResponse;
import com.cloud.user.Account;
@@ -46,7 +47,10 @@ public class AddExternalFirewallCmd extends BaseCmd {
@Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required = true, description="Zone in which to add the external firewall appliance.")
private Long zoneId;
-
+
+ @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, required = false, description="Pyshical network in the zone to which external firewall appliance will be added.")
+ private Long networkId;
+
@Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the external firewall appliance.")
private String url;
@@ -56,7 +60,7 @@ public class AddExternalFirewallCmd extends BaseCmd {
@Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required = true, description="Password of the external firewall appliance.")
private String password;
- @Parameter(name=ApiConstants.EXTERNAL_FIREWALL_TYPE, type=CommandType.STRING, description="External firewall type. Now supports JuniperSRX.")
+ @Parameter(name=ApiConstants.NETWORK_DEVICE_TYPE, type=CommandType.STRING, required = false, description="External firewall type. Now supports JuniperSRXFirewall.")
private String type;
///////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
@@ -65,7 +69,11 @@ public class AddExternalFirewallCmd extends BaseCmd {
public Long getZoneId() {
return zoneId;
}
-
+
+ public Long getNetworkId() {
+ return networkId;
+ }
+
public String getUrl() {
return url;
}
@@ -78,7 +86,7 @@ public class AddExternalFirewallCmd extends BaseCmd {
return password;
}
- public String getType() {
+ public String getDeviceType() {
return type;
}
@@ -99,8 +107,8 @@ public class AddExternalFirewallCmd extends BaseCmd {
@Override
public void execute(){
try {
- ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name);
- ExternalNetworkManager externalNetworkMgr = locator.getManager(ExternalNetworkManager.class);
+ ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name);
+ ExternalNetworkDeviceManager externalNetworkMgr = locator.getManager(ExternalNetworkDeviceManager.class);
Host externalFirewall = externalNetworkMgr.addExternalFirewall(this);
ExternalFirewallResponse response = externalNetworkMgr.createExternalFirewallResponse(externalFirewall);
response.setObjectName("externalfirewall");
diff --git a/server/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java b/server/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java
index 5ec3ace41e7..7fae6e9ab88 100644
--- a/server/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java
+++ b/server/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java
@@ -28,7 +28,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.ServerApiException;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.host.Host;
-import com.cloud.network.ExternalNetworkManager;
+import com.cloud.network.ExternalNetworkDeviceManager;
import com.cloud.server.ManagementService;
import com.cloud.server.api.response.ExternalLoadBalancerResponse;
import com.cloud.user.Account;
@@ -46,6 +46,9 @@ public class AddExternalLoadBalancerCmd extends BaseCmd {
@Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required = true, description="Zone in which to add the external load balancer appliance.")
private Long zoneId;
+
+ @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, required = false, description="Pyshical network in the zone to which external load balancer appliance will be added.")
+ private Long networkId;
@Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the external load balancer appliance.")
private String url;
@@ -56,7 +59,7 @@ public class AddExternalLoadBalancerCmd extends BaseCmd {
@Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required = true, description="Password of the external load balancer appliance.")
private String password;
- @Parameter(name=ApiConstants.EXTERNAL_LB_TYPE, type=CommandType.STRING, description="External load balancer type. Now supports F5BigIP.")
+ @Parameter(name=ApiConstants.NETWORK_DEVICE_TYPE, type=CommandType.STRING, required = false, description="External load balancer type. Now supports NetscalerLoadBalancer, F5BigIpLoadBalancer.")
private String type;
///////////////////////////////////////////////////
@@ -67,6 +70,10 @@ public class AddExternalLoadBalancerCmd extends BaseCmd {
return zoneId;
}
+ public Long getNetworkId() {
+ return networkId;
+ }
+
public String getUrl() {
return url;
}
@@ -79,7 +86,7 @@ public class AddExternalLoadBalancerCmd extends BaseCmd {
return password;
}
- public String getType() {
+ public String getDeviceType() {
return type;
}
@@ -101,7 +108,7 @@ public class AddExternalLoadBalancerCmd extends BaseCmd {
public void execute(){
try {
ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name);
- ExternalNetworkManager externalNetworkMgr = locator.getManager(ExternalNetworkManager.class);
+ ExternalNetworkDeviceManager externalNetworkMgr = locator.getManager(ExternalNetworkDeviceManager.class);
Host externalLoadBalancer = externalNetworkMgr.addExternalLoadBalancer(this);
ExternalLoadBalancerResponse response = externalNetworkMgr.createExternalLoadBalancerResponse(externalLoadBalancer);
response.setObjectName("externalloadbalancer");
diff --git a/server/src/com/cloud/api/commands/AddNetworkDeviceCmd.java b/server/src/com/cloud/api/commands/AddNetworkDeviceCmd.java
index 77b0f3ea4e3..24ec2d79cd1 100644
--- a/server/src/com/cloud/api/commands/AddNetworkDeviceCmd.java
+++ b/server/src/com/cloud/api/commands/AddNetworkDeviceCmd.java
@@ -30,7 +30,7 @@ public class AddNetworkDeviceCmd extends BaseCmd {
// ////////////// API parameters /////////////////////
// ///////////////////////////////////////////////////
- @Parameter(name = ApiConstants.NETWORK_DEVICE_TYPE, type = CommandType.STRING, description = "Network device type, now supports ExternalDhcp, ExternalFirewall, ExternalLoadBalancer, PxeServer")
+ @Parameter(name = ApiConstants.NETWORK_DEVICE_TYPE, type = CommandType.STRING, description = "Network device type, now supports ExternalDhcp, PxeServer, NetscalerLoadBalancer, F5BigIpLoadBalancer, JuniperSRXFirewall")
private String type;
@Parameter(name = ApiConstants.NETWORK_DEVICE_PARAMETER_LIST, type = CommandType.MAP, description = "parameters for network device")
diff --git a/server/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java b/server/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java
index 330870d7841..882ae6b4587 100644
--- a/server/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java
+++ b/server/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java
@@ -28,7 +28,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.ServerApiException;
import com.cloud.api.response.SuccessResponse;
import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.network.ExternalNetworkManager;
+import com.cloud.network.ExternalNetworkDeviceManager;
import com.cloud.server.ManagementService;
import com.cloud.user.Account;
import com.cloud.utils.component.ComponentLocator;
@@ -71,7 +71,7 @@ public class DeleteExternalFirewallCmd extends BaseCmd {
public void execute(){
try {
ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name);
- ExternalNetworkManager externalNetworkMgr = locator.getManager(ExternalNetworkManager.class);
+ ExternalNetworkDeviceManager externalNetworkMgr = locator.getManager(ExternalNetworkDeviceManager.class);
boolean result = externalNetworkMgr.deleteExternalFirewall(this);
if (result) {
SuccessResponse response = new SuccessResponse(getCommandName());
diff --git a/server/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java b/server/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java
index 6e751f6d3aa..50d63053059 100644
--- a/server/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java
+++ b/server/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java
@@ -28,7 +28,7 @@ import com.cloud.api.Parameter;
import com.cloud.api.ServerApiException;
import com.cloud.api.response.SuccessResponse;
import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.network.ExternalNetworkManager;
+import com.cloud.network.ExternalNetworkDeviceManager;
import com.cloud.server.ManagementService;
import com.cloud.user.Account;
import com.cloud.utils.component.ComponentLocator;
@@ -71,7 +71,7 @@ public class DeleteExternalLoadBalancerCmd extends BaseCmd {
public void execute(){
try {
ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name);
- ExternalNetworkManager externalNetworkMgr = locator.getManager(ExternalNetworkManager.class);
+ ExternalNetworkDeviceManager externalNetworkMgr = locator.getManager(ExternalNetworkDeviceManager.class);
boolean result = externalNetworkMgr.deleteExternalLoadBalancer(this);
if (result) {
SuccessResponse response = new SuccessResponse(getCommandName());
diff --git a/server/src/com/cloud/api/commands/ListExternalFirewallsCmd.java b/server/src/com/cloud/api/commands/ListExternalFirewallsCmd.java
index dfa20209f5d..ada40918c0c 100644
--- a/server/src/com/cloud/api/commands/ListExternalFirewallsCmd.java
+++ b/server/src/com/cloud/api/commands/ListExternalFirewallsCmd.java
@@ -28,9 +28,10 @@ import com.cloud.api.ApiConstants;
import com.cloud.api.BaseListCmd;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
+import com.cloud.api.BaseCmd.CommandType;
import com.cloud.api.response.ListResponse;
import com.cloud.host.Host;
-import com.cloud.network.ExternalNetworkManager;
+import com.cloud.network.ExternalNetworkDeviceManager;
import com.cloud.server.ManagementService;
import com.cloud.server.api.response.ExternalFirewallResponse;
import com.cloud.utils.component.ComponentLocator;
@@ -47,6 +48,11 @@ public class ListExternalFirewallsCmd extends BaseListCmd {
@Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, required = true, description="zone Id")
private long zoneId;
+ @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="Pyshical network in the zone from which which external load balancer appliance will be listed.")
+ private Long networkId;
+
+ @Parameter(name=ApiConstants.NETWORK_DEVICE_TYPE, type=CommandType.STRING, description="External firewall type. Now supports only JuniperSRXFirewall.")
+ private String type;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
@@ -56,6 +62,14 @@ public class ListExternalFirewallsCmd extends BaseListCmd {
return zoneId;
}
+ public Long getNetworkId() {
+ return networkId;
+ }
+
+ public String getDeviceType() {
+ return type;
+ }
+
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
@@ -68,7 +82,7 @@ public class ListExternalFirewallsCmd extends BaseListCmd {
@Override
public void execute(){
ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name);
- ExternalNetworkManager externalNetworkMgr = locator.getManager(ExternalNetworkManager.class);
+ ExternalNetworkDeviceManager externalNetworkMgr = locator.getManager(ExternalNetworkDeviceManager.class);
List extends Host> externalFirewalls = externalNetworkMgr.listExternalFirewalls(this);
ListResponse listResponse = new ListResponse();
diff --git a/server/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java b/server/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java
index 069f61deddc..d25ba9d7d43 100644
--- a/server/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java
+++ b/server/src/com/cloud/api/commands/ListExternalLoadBalancersCmd.java
@@ -28,10 +28,11 @@ import com.cloud.api.ApiConstants;
import com.cloud.api.BaseListCmd;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
+import com.cloud.api.BaseCmd.CommandType;
import com.cloud.api.response.HostResponse;
import com.cloud.api.response.ListResponse;
import com.cloud.host.Host;
-import com.cloud.network.ExternalNetworkManager;
+import com.cloud.network.ExternalNetworkDeviceManager;
import com.cloud.server.ManagementService;
import com.cloud.server.api.response.ExternalLoadBalancerResponse;
import com.cloud.utils.component.ComponentLocator;
@@ -48,6 +49,11 @@ public class ListExternalLoadBalancersCmd extends BaseListCmd {
@Parameter(name=ApiConstants.ZONE_ID, type=CommandType.LONG, description="zone Id")
private long zoneId;
+ @Parameter(name=ApiConstants.NETWORK_ID, type=CommandType.LONG, description="Pyshical network in the zone from which which external load balancer appliance will be listed.")
+ private Long networkId;
+
+ @Parameter(name=ApiConstants.NETWORK_DEVICE_TYPE, type=CommandType.STRING, description="External load balancer type. Now supports NetscalerLoadBalancer, F5BigIpLoadBalancer.")
+ private String type;
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
@@ -57,6 +63,14 @@ public class ListExternalLoadBalancersCmd extends BaseListCmd {
return zoneId;
}
+ public Long getNetworkId() {
+ return networkId;
+ }
+
+ public String getDeviceType() {
+ return type;
+ }
+
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
/////////////////////////////////////////////////////
@@ -69,7 +83,7 @@ public class ListExternalLoadBalancersCmd extends BaseListCmd {
@Override
public void execute(){
ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name);
- ExternalNetworkManager externalNetworkMgr = locator.getManager(ExternalNetworkManager.class);
+ ExternalNetworkDeviceManager externalNetworkMgr = locator.getManager(ExternalNetworkDeviceManager.class);
List extends Host> externalLoadBalancers = externalNetworkMgr.listExternalLoadBalancers(this);
ListResponse listResponse = new ListResponse();
diff --git a/server/src/com/cloud/api/commands/ListNetworkDeviceCmd.java b/server/src/com/cloud/api/commands/ListNetworkDeviceCmd.java
index 0d8b9b35b1a..57fdcc72ee9 100644
--- a/server/src/com/cloud/api/commands/ListNetworkDeviceCmd.java
+++ b/server/src/com/cloud/api/commands/ListNetworkDeviceCmd.java
@@ -34,7 +34,7 @@ public class ListNetworkDeviceCmd extends BaseListCmd {
//////////////// API parameters /////////////////////
/////////////////////////////////////////////////////
- @Parameter(name = ApiConstants.NETWORK_DEVICE_TYPE, type = CommandType.STRING, description = "Network device type, now supports ExternalDhcp, ExternalFirewall, ExternalLoadBalancer, PxeServer")
+ @Parameter(name = ApiConstants.NETWORK_DEVICE_TYPE, type = CommandType.STRING, description = "Network device type, now supports ExternalDhcp, PxeServer, NetscalerLoadBalancer, F5BigIpLoadBalancer, JuniperSRXFirewall")
private String type;
@Parameter(name = ApiConstants.NETWORK_DEVICE_PARAMETER_LIST, type = CommandType.MAP, description = "parameters for network device")
diff --git a/server/src/com/cloud/configuration/PremiumComponentLibrary.java b/server/src/com/cloud/configuration/PremiumComponentLibrary.java
index 4462fa174b8..a0a758952fe 100755
--- a/server/src/com/cloud/configuration/PremiumComponentLibrary.java
+++ b/server/src/com/cloud/configuration/PremiumComponentLibrary.java
@@ -34,7 +34,7 @@ import com.cloud.netapp.NetappManagerImpl;
import com.cloud.netapp.dao.LunDaoImpl;
import com.cloud.netapp.dao.PoolDaoImpl;
import com.cloud.netapp.dao.VolumeDaoImpl;
-import com.cloud.network.ExternalNetworkManagerImpl;
+import com.cloud.network.ExternalNetworkDeviceManagerImpl;
import com.cloud.network.NetworkDeviceManagerImpl;
import com.cloud.network.NetworkUsageManagerImpl;
import com.cloud.secstorage.CommandExecLogDaoImpl;
@@ -66,7 +66,7 @@ public class PremiumComponentLibrary extends DefaultComponentLibrary {
addManager("HA Manager", HighAvailabilityManagerExtImpl.class);
addManager("VMWareManager", VmwareManagerImpl.class);
- addManager("ExternalNetworkManager", ExternalNetworkManagerImpl.class);
+ addManager("ExternalNetworkManager", ExternalNetworkDeviceManagerImpl.class);
addManager("BareMetalVmManager", BareMetalVmManagerImpl.class);
addManager("ExternalDhcpManager", ExternalDhcpManagerImpl.class);
addManager("PxeServerManager", PxeServerManagerImpl.class);
diff --git a/server/src/com/cloud/network/ExternalNetworkManager.java b/server/src/com/cloud/network/ExternalNetworkDeviceManager.java
similarity index 79%
rename from server/src/com/cloud/network/ExternalNetworkManager.java
rename to server/src/com/cloud/network/ExternalNetworkDeviceManager.java
index bdf2f6c5ddb..262f3c6c6f4 100644
--- a/server/src/com/cloud/network/ExternalNetworkManager.java
+++ b/server/src/com/cloud/network/ExternalNetworkDeviceManager.java
@@ -20,6 +20,7 @@
package com.cloud.network;
import java.util.List;
+import java.util.Map;
import com.cloud.api.commands.AddExternalFirewallCmd;
import com.cloud.api.commands.AddExternalLoadBalancerCmd;
@@ -30,38 +31,29 @@ import com.cloud.api.commands.ListExternalLoadBalancersCmd;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.host.Host;
import com.cloud.host.HostVO;
+import com.cloud.network.NetworkDeviceManager.NetworkDeviceType;
import com.cloud.network.rules.FirewallRule;
import com.cloud.offering.NetworkOffering;
import com.cloud.server.api.response.ExternalFirewallResponse;
import com.cloud.server.api.response.ExternalLoadBalancerResponse;
import com.cloud.utils.component.Manager;
-public interface ExternalNetworkManager extends Manager {
-
- public static class ExternalNetworkDeviceType {
- private String _name;
-
- public static final ExternalNetworkDeviceType F5BigIP = new ExternalNetworkDeviceType("F5BigIP");
- public static final ExternalNetworkDeviceType JuniperSRX = new ExternalNetworkDeviceType("JuniperSRX");
- public static final ExternalNetworkDeviceType NetscalerMPX = new ExternalNetworkDeviceType("NetscalerMPX");
-
- public ExternalNetworkDeviceType(String name) {
- _name = name;
- }
-
- public String getName() {
- return _name;
- }
- }
+public interface ExternalNetworkDeviceManager extends Manager {
// External Firewall methods
public Host addExternalFirewall(AddExternalFirewallCmd cmd);
-
+
+ public Host addExternalFirewall(Long zoneId, Long physicalNetworkId, String deviceType, Map deviceParamList);
+
public boolean deleteExternalFirewall(DeleteExternalFirewallCmd cmd);
- public List listExternalFirewalls(ListExternalFirewallsCmd cmd);
+ public boolean deleteExternalFirewall(Long hostId);
+ public List listExternalFirewalls(ListExternalFirewallsCmd cmd);
+
+ public List listExternalFirewalls(Long zoneId, Long networkId, String deviceType);
+
public ExternalFirewallResponse createExternalFirewallResponse(Host externalFirewall);
public boolean manageGuestNetworkWithExternalFirewall(boolean add, Network network, NetworkOffering offering) throws ResourceUnavailableException;
@@ -78,9 +70,15 @@ public interface ExternalNetworkManager extends Manager {
public Host addExternalLoadBalancer(AddExternalLoadBalancerCmd cmd);
+ public Host addExternalLoadBalancer(Long zoneId, Long physicalNetworkId, String deviceType, Map deviceParamList);
+
public boolean deleteExternalLoadBalancer(DeleteExternalLoadBalancerCmd cmd);
+
+ public boolean deleteExternalLoadBalancer(Long hostId);
- public List listExternalLoadBalancers(ListExternalLoadBalancersCmd cmd);
+ public List listExternalLoadBalancers(ListExternalLoadBalancersCmd cmd);
+
+ public List listExternalLoadBalancers(Long zoneId, Long networkId, String deviceType);
public ExternalLoadBalancerResponse createExternalLoadBalancerResponse(Host externalLoadBalancer);
diff --git a/server/src/com/cloud/network/ExternalNetworkManagerImpl.java b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java
similarity index 92%
rename from server/src/com/cloud/network/ExternalNetworkManagerImpl.java
rename to server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java
index 058b698b156..83bfa1d1359 100644
--- a/server/src/com/cloud/network/ExternalNetworkManagerImpl.java
+++ b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java
@@ -48,6 +48,7 @@ import com.cloud.agent.api.to.IpAddressTO;
import com.cloud.agent.api.to.LoadBalancerTO;
import com.cloud.agent.api.to.PortForwardingRuleTO;
import com.cloud.agent.api.to.StaticNatRuleTO;
+import com.cloud.api.ApiConstants;
import com.cloud.api.commands.AddExternalFirewallCmd;
import com.cloud.api.commands.AddExternalLoadBalancerCmd;
import com.cloud.api.commands.DeleteExternalFirewallCmd;
@@ -71,6 +72,7 @@ import com.cloud.host.Host;
import com.cloud.host.HostVO;
import com.cloud.host.dao.HostDao;
import com.cloud.host.dao.HostDetailsDao;
+import com.cloud.network.NetworkDeviceManager.NetworkDeviceType;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.dao.IPAddressDao;
import com.cloud.network.dao.InlineLoadBalancerNicMapDao;
@@ -121,8 +123,8 @@ import com.cloud.vm.NicVO;
import com.cloud.vm.dao.DomainRouterDao;
import com.cloud.vm.dao.NicDao;
-@Local(value = {ExternalNetworkManager.class})
-public class ExternalNetworkManagerImpl implements ExternalNetworkManager {
+@Local(value = {ExternalNetworkDeviceManager.class})
+public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceManager {
public enum ExternalNetworkResourceName {
JuniperSrx,
F5BigIp,
@@ -153,7 +155,7 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager {
ScheduledExecutorService _executor;
int _externalNetworkStatsInterval;
- private static final org.apache.log4j.Logger s_logger = Logger.getLogger(ExternalNetworkManagerImpl.class);
+ private static final org.apache.log4j.Logger s_logger = Logger.getLogger(ExternalNetworkDeviceManagerImpl.class);
protected String _name;
@Override
@@ -205,10 +207,24 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager {
@Override
public Host addExternalLoadBalancer(AddExternalLoadBalancerCmd cmd) {
- long zoneId = cmd.getZoneId();
+ Long zoneId = cmd.getZoneId();
+ Long networkId = cmd.getNetworkId();
+ String deviceType = cmd.getDeviceType();
+ Map deviceParams = new HashMap();
+ deviceParams.put(ApiConstants.USERNAME, cmd.getUsername());
+ deviceParams.put(ApiConstants.PASSWORD, cmd.getPassword());
+ deviceParams.put(ApiConstants.URL, cmd.getUrl());
+ return addExternalLoadBalancer(zoneId, networkId, deviceType, deviceParams);
+ }
+
+ @Override
+ public Host addExternalLoadBalancer(Long zoneId, Long networkId, String deviceType, Map deviceParamList) {
+
ServerResource resource =null;
String guid;
- String deviceType;
+ String url = (String) deviceParamList.get(ApiConstants.URL);
+ String username = (String) deviceParamList.get(ApiConstants.USERNAME);
+ String password = (String) deviceParamList.get(ApiConstants.PASSWORD);
DataCenterVO zone = _dcDao.findById(zoneId);
String zoneName;
@@ -225,15 +241,14 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager {
URI uri;
try {
- uri = new URI(cmd.getUrl());
+ uri = new URI(url);
} catch (Exception e) {
s_logger.debug(e);
throw new InvalidParameterValueException(e.getMessage());
}
String ipAddress = uri.getHost();
- String username = cmd.getUsername();
- String password = cmd.getPassword();
+
Map params = new HashMap();
UrlUtil.parseQueryParameters(uri.getQuery(), true, params);
String publicInterface = params.get("publicinterface");
@@ -253,15 +268,14 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager {
numRetries = "1";
}
- deviceType = cmd.getType();
if (deviceType ==null) {
- deviceType = ExternalNetworkDeviceType.NetscalerMPX.getName(); //TODO: default it to NetscalerMPX for now, till UI support Netscaler & F5
+ deviceType = NetworkDeviceType.NetscalerLoadBalancer.getName(); //TODO: default it to Netscaler LB for now, till UI support Netscaler & F5
}
- if (deviceType.equalsIgnoreCase(ExternalNetworkDeviceType.F5BigIP.getName())) {
+ if (deviceType.equalsIgnoreCase(NetworkDeviceType.F5BigIpLoadBalancer.getName())) {
resource = new F5BigIpResource();
guid = getExternalNetworkResourceGuid(zoneId, ExternalNetworkResourceName.F5BigIp, ipAddress);
- } else if (deviceType.equalsIgnoreCase(ExternalNetworkDeviceType.NetscalerMPX.getName())) {
+ } else if (deviceType.equalsIgnoreCase(NetworkDeviceType.NetscalerLoadBalancer.getName())) {
resource = new NetscalerMPXResource();
guid = getExternalNetworkResourceGuid(zoneId, ExternalNetworkResourceName.NetscalerMPX, ipAddress);
} else {
@@ -289,9 +303,9 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager {
Host host = _agentMgr.addHost(zoneId, resource, Host.Type.ExternalLoadBalancer, hostDetails);
if (host != null) {
- if (deviceType.equalsIgnoreCase(ExternalNetworkDeviceType.F5BigIP.getName())) {
+ if (deviceType.equalsIgnoreCase(NetworkDeviceType.F5BigIpLoadBalancer.getName())) {
zone.setLoadBalancerProvider(Network.Provider.F5BigIp.getName());
- } else if (deviceType.equalsIgnoreCase(ExternalNetworkDeviceType.NetscalerMPX.getName())) {
+ } else if (deviceType.equalsIgnoreCase(NetworkDeviceType.NetscalerLoadBalancer.getName())) {
zone.setLoadBalancerProvider(Network.Provider.NetscalerMPX.getName());
}
_dcDao.update(zone.getId(), zone);
@@ -303,7 +317,11 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager {
@Override
public boolean deleteExternalLoadBalancer(DeleteExternalLoadBalancerCmd cmd) {
- long hostId = cmd.getId();
+ return deleteExternalLoadBalancer(cmd.getId());
+ }
+
+ @Override
+ public boolean deleteExternalLoadBalancer(Long hostId) {
User caller = _accountMgr.getActiveUser(UserContext.current().getCallerUserId());
HostVO externalLoadBalancer = _hostDao.findById(hostId);
if (externalLoadBalancer == null) {
@@ -331,9 +349,21 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager {
}
@Override
- public List listExternalLoadBalancers(ListExternalLoadBalancersCmd cmd) {
- long zoneId = cmd.getZoneId();
- return _hostDao.listByTypeDataCenter(Host.Type.ExternalLoadBalancer, zoneId);
+ public List listExternalLoadBalancers(ListExternalLoadBalancersCmd cmd) {
+ List lbHosts = new ArrayList();
+ if (NetworkDeviceType.NetscalerLoadBalancer.getName().equalsIgnoreCase(cmd.getDeviceType())) {
+ lbHosts.addAll(listExternalLoadBalancers(cmd.getZoneId(), cmd.getNetworkId(), NetworkDeviceType.NetscalerLoadBalancer.getName()));
+ } else if (NetworkDeviceType.F5BigIpLoadBalancer.getName().equalsIgnoreCase(cmd.getDeviceType())) {
+ lbHosts.addAll(listExternalLoadBalancers(cmd.getZoneId(), cmd.getNetworkId(), NetworkDeviceType.F5BigIpLoadBalancer.getName()));
+ }
+ return lbHosts;
+ }
+
+ @Override
+ public List listExternalLoadBalancers(Long zoneId, Long networkId, String type) {
+ List lbHosts = new ArrayList();
+ lbHosts.addAll(_hostDao.listByTypeDataCenter(Host.Type.ExternalLoadBalancer, zoneId));
+ return lbHosts;
}
@Override
@@ -524,10 +554,24 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager {
@Override
public Host addExternalFirewall(AddExternalFirewallCmd cmd) {
- long zoneId = cmd.getZoneId();
- String deviceType;
+ Long zoneId = cmd.getZoneId();
+ Long networkId = cmd.getNetworkId();
+ String deviceType = cmd.getDeviceType();
+ Map deviceParams = new HashMap();
+ deviceParams.put(ApiConstants.USERNAME, cmd.getUsername());
+ deviceParams.put(ApiConstants.URL, cmd.getUrl());
+ deviceParams.put(ApiConstants.PASSWORD, cmd.getPassword());
+ return addExternalFirewall(zoneId, networkId, deviceType, deviceParams);
+ }
+
+ @Override
+ public Host addExternalFirewall(Long zoneId, Long networkId, String deviceType, Map deviceParamList) {
DataCenterVO zone = _dcDao.findById(zoneId);
+ String url = (String) deviceParamList.get(ApiConstants.URL);
+ String username = (String) deviceParamList.get(ApiConstants.USERNAME);
+ String password = (String) deviceParamList.get(ApiConstants.PASSWORD);
+
String zoneName;
if (zone == null) {
throw new InvalidParameterValueException("Could not find zone with ID: " + zoneId);
@@ -542,15 +586,13 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager {
URI uri;
try {
- uri = new URI(cmd.getUrl());
+ uri = new URI(url);
} catch (Exception e) {
s_logger.debug(e);
throw new InvalidParameterValueException(e.getMessage());
}
String ipAddress = uri.getHost();
- String username = cmd.getUsername();
- String password = cmd.getPassword();
Map params = new HashMap();
UrlUtil.parseQueryParameters(uri.getQuery(), true, params);
String publicInterface = params.get("publicinterface");
@@ -597,11 +639,10 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager {
timeout = "300";
}
- deviceType = cmd.getType();
if (deviceType ==null) {
- deviceType = ExternalNetworkDeviceType.JuniperSRX.getName(); //default it to Juniper for now
+ deviceType = NetworkDeviceType.JuniperSRXFirewall.getName(); //default it to Juniper for now
}
- if (deviceType.equalsIgnoreCase(ExternalNetworkDeviceType.JuniperSRX.getName())) {
+ if (deviceType.equalsIgnoreCase(NetworkDeviceType.JuniperSRXFirewall.getName())) {
resource = new JuniperSrxResource();
guid = getExternalNetworkResourceGuid(zoneId, ExternalNetworkResourceName.JuniperSrx, ipAddress);
} else {
@@ -663,7 +704,11 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager {
@Override
public boolean deleteExternalFirewall(DeleteExternalFirewallCmd cmd) {
- long hostId = cmd.getId();
+ return deleteExternalFirewall(cmd.getId());
+ }
+
+ @Override
+ public boolean deleteExternalFirewall(Long hostId) {
User caller = _accountMgr.getActiveUser(UserContext.current().getCallerUserId());
HostVO externalFirewall = _hostDao.findById(hostId);
if (externalFirewall == null) {
@@ -708,11 +753,22 @@ public class ExternalNetworkManagerImpl implements ExternalNetworkManager {
}
@Override
- public List listExternalFirewalls(ListExternalFirewallsCmd cmd) {
- long zoneId = cmd.getZoneId();
- return _hostDao.listByTypeDataCenter(Host.Type.ExternalFirewall, zoneId);
+ public List listExternalFirewalls(ListExternalFirewallsCmd cmd) {
+ List firewallHosts = new ArrayList();
+ if (NetworkDeviceType.JuniperSRXFirewall.getName().equalsIgnoreCase(cmd.getDeviceType())) {
+ firewallHosts.addAll(listExternalFirewalls(cmd.getZoneId(), cmd.getNetworkId(), NetworkDeviceType.JuniperSRXFirewall.getName()));
+ }
+ return firewallHosts;
+
}
+ @Override
+ public List listExternalFirewalls(Long zoneId, Long networkId, String type) {
+ List firewallHosts = new ArrayList();
+ firewallHosts.addAll(_hostDao.listByTypeDataCenter(Host.Type.ExternalFirewall, zoneId));
+ return firewallHosts;
+ }
+
@Override
public ExternalFirewallResponse createExternalFirewallResponse(Host externalFirewall) {
Map fwDetails = _detailsDao.findDetails(externalFirewall.getId());
diff --git a/server/src/com/cloud/network/NetworkDeviceManager.java b/server/src/com/cloud/network/NetworkDeviceManager.java
index 666bc10b1d4..0920d4d5881 100644
--- a/server/src/com/cloud/network/NetworkDeviceManager.java
+++ b/server/src/com/cloud/network/NetworkDeviceManager.java
@@ -15,6 +15,9 @@ public interface NetworkDeviceManager extends Manager {
public static final NetworkDeviceType ExternalDhcp = new NetworkDeviceType("ExternalDhcp");
public static final NetworkDeviceType PxeServer = new NetworkDeviceType("PxeServer");
+ public static final NetworkDeviceType NetscalerLoadBalancer = new NetworkDeviceType("NetscalerLoadBalancer");
+ public static final NetworkDeviceType F5BigIpLoadBalancer = new NetworkDeviceType("F5BigIpLoadBalancer");
+ public static final NetworkDeviceType JuniperSRXFirewall = new NetworkDeviceType("JuniperSRXFirewall");
public NetworkDeviceType(String name) {
_name = name;
@@ -24,12 +27,12 @@ public interface NetworkDeviceManager extends Manager {
return _name;
}
}
-
+
public Host addNetworkDevice(AddNetworkDeviceCmd cmd);
public NetworkDeviceResponse getApiResponse(Host device);
- public List listNetworkDevice(ListNetworkDeviceCmd cmd);
+ public List listNetworkDevice(ListNetworkDeviceCmd cmd);
public boolean deleteNetworkDevice(DeleteNetworkDeviceCmd cmd);
}
diff --git a/server/src/com/cloud/network/NetworkDeviceManagerImpl.java b/server/src/com/cloud/network/NetworkDeviceManagerImpl.java
index 222c6f2f3a6..6a9ae8acf64 100644
--- a/server/src/com/cloud/network/NetworkDeviceManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkDeviceManagerImpl.java
@@ -24,6 +24,7 @@ import com.cloud.baremetal.PxeServerProfile;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.host.Host;
import com.cloud.host.HostVO;
+import com.cloud.host.Host.Type;
import com.cloud.host.dao.HostDao;
import com.cloud.server.api.response.NetworkDeviceResponse;
import com.cloud.server.api.response.NwDeviceDhcpResponse;
@@ -38,7 +39,7 @@ public class NetworkDeviceManagerImpl implements NetworkDeviceManager {
@Inject ExternalDhcpManager _dhcpMgr;
@Inject PxeServerManager _pxeMgr;
@Inject HostDao _hostDao;
-
+ @Inject ExternalNetworkDeviceManager _externalNetworkDeviceMgr;
@Override
public boolean configure(String name, Map params) throws ConfigurationException {
_name = name;
@@ -93,7 +94,16 @@ public class NetworkDeviceManagerImpl implements NetworkDeviceManager {
PxeServerProfile profile = new PxeServerProfile(zoneId, podId, url, username, password, type, pingStorageServerIp, pingDir, tftpDir,
pingCifsUsername, pingCifsPassword);
return _pxeMgr.addPxeServer(profile);
-
+ } else if (cmd.getType().equalsIgnoreCase(NetworkDeviceType.JuniperSRXFirewall.getName())) {
+ Long zoneId = Long.parseLong((String) params.get(ApiConstants.ZONE_ID));
+ Long networkId = (params.get(ApiConstants.NETWORK_ID)==null)?Long.parseLong((String)params.get(ApiConstants.NETWORK_ID)):null;
+ return _externalNetworkDeviceMgr.addExternalFirewall(zoneId, networkId, NetworkDeviceType.JuniperSRXFirewall.getName(), cmd.getParamList());
+ } else if (cmd.getType().equalsIgnoreCase(NetworkDeviceType.NetscalerLoadBalancer.getName())) {
+ Long zoneId = Long.parseLong((String) params.get(ApiConstants.ZONE_ID));
+ return _externalNetworkDeviceMgr.addExternalLoadBalancer(zoneId, null, NetworkDeviceType.NetscalerLoadBalancer.getName(), cmd.getParamList());
+ } else if (cmd.getType().equalsIgnoreCase(NetworkDeviceType.F5BigIpLoadBalancer.getName())) {
+ Long zoneId = Long.parseLong((String) params.get(ApiConstants.ZONE_ID));
+ return _externalNetworkDeviceMgr.addExternalLoadBalancer(zoneId, null, NetworkDeviceType.F5BigIpLoadBalancer.getName(), cmd.getParamList());
} else {
throw new CloudRuntimeException("Unsupported network device type:" + cmd.getType());
}
@@ -169,15 +179,31 @@ public class NetworkDeviceManagerImpl implements NetworkDeviceManager {
Long zoneId = Long.parseLong((String) params.get(ApiConstants.ZONE_ID));
Long podId = Long.parseLong((String)params.get(ApiConstants.POD_ID));
res = listNetworkDevice(zoneId, podId, Host.Type.PxeServer);
+ } else if (NetworkDeviceType.F5BigIpLoadBalancer.getName().equalsIgnoreCase(cmd.getType())) {
+ Long zoneId = Long.parseLong((String) params.get(ApiConstants.ZONE_ID));
+ Long networkId = Long.parseLong((String) params.get(ApiConstants.NETWORK_ID));
+ return _externalNetworkDeviceMgr.listExternalLoadBalancers(zoneId, networkId, NetworkDeviceType.F5BigIpLoadBalancer.getName());
+ } else if (NetworkDeviceType.NetscalerLoadBalancer.getName().equalsIgnoreCase(cmd.getType())) {
+ Long zoneId = Long.parseLong((String) params.get(ApiConstants.ZONE_ID));
+ Long networkId = Long.parseLong((String) params.get(ApiConstants.NETWORK_ID));
+ return _externalNetworkDeviceMgr.listExternalLoadBalancers(zoneId, networkId, NetworkDeviceType.NetscalerLoadBalancer.getName());
+ } else if (NetworkDeviceType.JuniperSRXFirewall.getName().equalsIgnoreCase(cmd.getType())) {
+ Long zoneId = Long.parseLong((String) params.get(ApiConstants.ZONE_ID));
+ Long networkId = Long.parseLong((String) params.get(ApiConstants.NETWORK_ID));
+ return _externalNetworkDeviceMgr.listExternalFirewalls(zoneId, networkId, NetworkDeviceType.JuniperSRXFirewall.getName());
} else if (cmd.getType() == null){
Long zoneId = Long.parseLong((String) params.get(ApiConstants.ZONE_ID));
Long podId = Long.parseLong((String)params.get(ApiConstants.POD_ID));
List res1 = listNetworkDevice(zoneId, podId, Host.Type.PxeServer);
List res2 = listNetworkDevice(zoneId, podId, Host.Type.ExternalDhcp);
- List res3 = new ArrayList();
- res3.addAll(res1);
- res3.addAll(res2);
- res = res3;
+ List res3 = listNetworkDevice(zoneId, podId, Host.Type.ExternalLoadBalancer);
+ List res4 = listNetworkDevice(zoneId, podId, Host.Type.ExternalFirewall);
+ List deviceAll = new ArrayList();
+ deviceAll.addAll(res1);
+ deviceAll.addAll(res2);
+ deviceAll.addAll(res3);
+ deviceAll.addAll(res4);
+ res = deviceAll;
} else {
throw new CloudRuntimeException("Unknown network device type:" + cmd.getType());
}
@@ -187,7 +213,12 @@ public class NetworkDeviceManagerImpl implements NetworkDeviceManager {
@Override
public boolean deleteNetworkDevice(DeleteNetworkDeviceCmd cmd) {
- // TODO Auto-generated method stub
- return true;
+ HostVO device = _hostDao.findById(cmd.getId());
+ if (device.getType() == Type.ExternalLoadBalancer) {
+ return _externalNetworkDeviceMgr.deleteExternalLoadBalancer(cmd.getId());
+ } else if (device.getType() == Type.ExternalLoadBalancer) {
+ return _externalNetworkDeviceMgr.deleteExternalFirewall(cmd.getId());
+ }
+ return true;
}
-}
+}
\ No newline at end of file
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index a7cfb6488db..b136f50d1d7 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -106,6 +106,7 @@ import com.cloud.network.dao.PhysicalNetworkDao;
import com.cloud.network.dao.PhysicalNetworkServiceProviderDao;
import com.cloud.network.dao.PhysicalNetworkServiceProviderVO;
import com.cloud.network.element.FirewallServiceProvider;
+import com.cloud.network.element.LoadBalancingServiceProvider;
import com.cloud.network.element.NetworkElement;
import com.cloud.network.element.PasswordServiceProvider;
import com.cloud.network.element.RemoteAccessVPNServiceProvider;
@@ -2369,12 +2370,19 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
int found = 0;
for (NetworkElement ne : _networkElements) {
try {
- if (!(ne instanceof FirewallServiceProvider)) {
+ if (!(ne instanceof FirewallServiceProvider) && !(ne instanceof LoadBalancingServiceProvider)) {
continue;
}
- FirewallServiceProvider e = (FirewallServiceProvider)ne;
found ++;
- boolean handled = e.applyRules(network, rules);
+ boolean handled;
+ if (ne instanceof FirewallServiceProvider) {
+ FirewallServiceProvider e = (FirewallServiceProvider)ne;
+ handled = e.applyRules(network, rules);
+ } else {
+ LoadBalancingServiceProvider e = (LoadBalancingServiceProvider) ne;
+ handled = e.applyRules(network, rules);
+ }
+
s_logger.debug("Network Rules for network " + network.getId() + " were " + (handled ? "" : " not") + " handled by " + ne.getName());
} catch (ResourceUnavailableException e) {
if (!continueOnError) {
diff --git a/server/src/com/cloud/network/element/ElasticLoadBalancerElement.java b/server/src/com/cloud/network/element/ElasticLoadBalancerElement.java
index 3da9c705c62..2f9dc6812ee 100644
--- a/server/src/com/cloud/network/element/ElasticLoadBalancerElement.java
+++ b/server/src/com/cloud/network/element/ElasticLoadBalancerElement.java
@@ -52,7 +52,7 @@ import com.cloud.vm.VirtualMachineProfile;
@Local(value=NetworkElement.class)
-public class ElasticLoadBalancerElement extends AdapterBase implements FirewallServiceProvider {
+public class ElasticLoadBalancerElement extends AdapterBase implements LoadBalancingServiceProvider {
private static final Logger s_logger = Logger.getLogger(ElasticLoadBalancerElement.class);
private static final Map> capabilities = setCapabilities();
@Inject NetworkManager _networkManager;
diff --git a/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
index e2dc5dc2f0f..4208556386e 100644
--- a/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
+++ b/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
@@ -34,7 +34,7 @@ import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.InsufficientNetworkCapacityException;
import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.ExternalNetworkManager;
+import com.cloud.network.ExternalNetworkDeviceManager;
import com.cloud.network.Network;
import com.cloud.network.Network.Capability;
import com.cloud.network.Network.Provider;
@@ -53,12 +53,12 @@ import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
@Local(value=NetworkElement.class)
-public class F5ExternalLoadBalancerElement extends AdapterBase implements FirewallServiceProvider {
+public class F5ExternalLoadBalancerElement extends AdapterBase implements LoadBalancingServiceProvider {
private static final Logger s_logger = Logger.getLogger(F5ExternalLoadBalancerElement.class);
@Inject NetworkManager _networkManager;
- @Inject ExternalNetworkManager _externalNetworkManager;
+ @Inject ExternalNetworkDeviceManager _externalNetworkManager;
@Inject ConfigurationManager _configMgr;
private boolean canHandle(Network config) {
diff --git a/server/src/com/cloud/network/element/ExternalFirewallElement.java b/server/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java
similarity index 96%
rename from server/src/com/cloud/network/element/ExternalFirewallElement.java
rename to server/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java
index f8aa16c6068..537454c26fa 100644
--- a/server/src/com/cloud/network/element/ExternalFirewallElement.java
+++ b/server/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java
@@ -36,7 +36,7 @@ import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.InsufficientNetworkCapacityException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.host.dao.HostDao;
-import com.cloud.network.ExternalNetworkManager;
+import com.cloud.network.ExternalNetworkDeviceManager;
import com.cloud.network.Network;
import com.cloud.network.Network.Capability;
import com.cloud.network.Network.Provider;
@@ -59,14 +59,14 @@ import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
@Local(value=NetworkElement.class)
-public class ExternalFirewallElement extends AdapterBase implements SourceNATServiceProvider, FirewallServiceProvider, RemoteAccessVPNServiceProvider {
+public class JuniperSRXExternalFirewallElement extends AdapterBase implements SourceNATServiceProvider, FirewallServiceProvider, RemoteAccessVPNServiceProvider {
- private static final Logger s_logger = Logger.getLogger(ExternalFirewallElement.class);
+ private static final Logger s_logger = Logger.getLogger(JuniperSRXExternalFirewallElement.class);
private static final Map> capabilities = setCapabilities();
@Inject NetworkManager _networkManager;
- @Inject ExternalNetworkManager _externalNetworkManager;
+ @Inject ExternalNetworkDeviceManager _externalNetworkManager;
@Inject HostDao _hostDao;
@Inject ConfigurationManager _configMgr;
@Inject NetworkOfferingDao _networkOfferingDao;
diff --git a/server/src/com/cloud/network/element/NetscalerExternalLoadBalancerElement.java b/server/src/com/cloud/network/element/NetscalerExternalLoadBalancerElement.java
index 2a177f7054b..e1393694428 100644
--- a/server/src/com/cloud/network/element/NetscalerExternalLoadBalancerElement.java
+++ b/server/src/com/cloud/network/element/NetscalerExternalLoadBalancerElement.java
@@ -34,7 +34,7 @@ import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.InsufficientCapacityException;
import com.cloud.exception.InsufficientNetworkCapacityException;
import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.ExternalNetworkManager;
+import com.cloud.network.ExternalNetworkDeviceManager;
import com.cloud.network.Network;
import com.cloud.network.Network.Capability;
import com.cloud.network.Network.Provider;
@@ -53,12 +53,12 @@ import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
@Local(value=NetworkElement.class)
-public class NetscalerExternalLoadBalancerElement extends AdapterBase implements FirewallServiceProvider {
+public class NetscalerExternalLoadBalancerElement extends AdapterBase implements LoadBalancingServiceProvider {
private static final Logger s_logger = Logger.getLogger(NetscalerExternalLoadBalancerElement.class);
@Inject NetworkManager _networkManager;
- @Inject ExternalNetworkManager _externalNetworkManager;
+ @Inject ExternalNetworkDeviceManager _externalNetworkManager;
@Inject ConfigurationManager _configMgr;
private boolean canHandle(Network config) {
diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java
index 7ee1841a9b7..782e856e921 100644
--- a/server/src/com/cloud/network/element/VirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VirtualRouterElement.java
@@ -73,7 +73,7 @@ import com.cloud.vm.dao.UserVmDao;
@Local(value=NetworkElement.class)
-public class VirtualRouterElement extends DhcpElement implements VirtualRouterElementService, SourceNATServiceProvider, FirewallServiceProvider, StaticNATServiceProvider, RemoteAccessVPNServiceProvider {
+public class VirtualRouterElement extends DhcpElement implements VirtualRouterElementService, SourceNATServiceProvider, FirewallServiceProvider, LoadBalancingServiceProvider, StaticNATServiceProvider, RemoteAccessVPNServiceProvider {
private static final Logger s_logger = Logger.getLogger(VirtualRouterElement.class);
private static final Map> capabilities = setCapabilities();
diff --git a/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java b/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java
index 2130c22f562..9d811ea05c1 100644
--- a/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java
+++ b/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java
@@ -33,7 +33,7 @@ import com.cloud.event.EventUtils;
import com.cloud.event.EventVO;
import com.cloud.exception.InsufficientAddressCapacityException;
import com.cloud.exception.InsufficientVirtualNetworkCapcityException;
-import com.cloud.network.ExternalNetworkManager;
+import com.cloud.network.ExternalNetworkDeviceManager;
import com.cloud.network.Network;
import com.cloud.network.Network.State;
import com.cloud.network.NetworkManager;
@@ -64,7 +64,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru {
@Inject
NetworkManager _networkMgr;
@Inject
- ExternalNetworkManager _externalNetworkMgr;
+ ExternalNetworkDeviceManager _externalNetworkMgr;
@Inject
NetworkDao _networkDao;
@Inject