diff --git a/api/src/com/cloud/network/element/FirewallServiceProvider.java b/api/src/com/cloud/network/element/FirewallServiceProvider.java
new file mode 100644
index 00000000000..9d00da94949
--- /dev/null
+++ b/api/src/com/cloud/network/element/FirewallServiceProvider.java
@@ -0,0 +1,19 @@
+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 FirewallServiceProvider extends NetworkElement {
+ /**
+ * Apply rules
+ * @param network
+ * @param rules
+ * @return
+ * @throws ResourceUnavailableException
+ */
+ boolean applyRules(Network network, List extends FirewallRule> rules) throws ResourceUnavailableException;
+ boolean isFirewallServiceProvider();
+}
diff --git a/api/src/com/cloud/network/element/NetworkElement.java b/api/src/com/cloud/network/element/NetworkElement.java
index bf9ca329b8e..8ff75971b09 100644
--- a/api/src/com/cloud/network/element/NetworkElement.java
+++ b/api/src/com/cloud/network/element/NetworkElement.java
@@ -21,7 +21,6 @@
*/
package com.cloud.network.element;
-import java.util.List;
import java.util.Map;
import com.cloud.deploy.DeployDestination;
@@ -33,9 +32,6 @@ import com.cloud.network.Network;
import com.cloud.network.Network.Capability;
import com.cloud.network.Network.Provider;
import com.cloud.network.Network.Service;
-import com.cloud.network.PublicIpAddress;
-import com.cloud.network.rules.FirewallRule;
-import com.cloud.network.rules.StaticNat;
import com.cloud.offering.NetworkOffering;
import com.cloud.utils.component.Adapter;
import com.cloud.vm.NicProfile;
@@ -115,33 +111,4 @@ public interface NetworkElement extends Adapter {
* @throws ConcurrentOperationException
*/
boolean destroy(Network network) throws ConcurrentOperationException, ResourceUnavailableException;
-
-
- /**
- * Apply ip addresses to this network
- * @param network
- * @param ipAddress
- * @return
- * @throws ResourceUnavailableException
- */
- boolean applyIps(Network network, List extends PublicIpAddress> ipAddress) throws ResourceUnavailableException;
-
- /**
- * Apply rules
- * @param network
- * @param rules
- * @return
- * @throws ResourceUnavailableException
- */
- boolean applyRules(Network network, List extends FirewallRule> rules) throws ResourceUnavailableException;
-
- /**
- * Creates static nat rule (public IP to private IP mapping) on the network element
- * @param config
- * @param rules
- * @return
- * @throws ResourceUnavailableException
- */
- boolean applyStaticNats(Network config, List extends StaticNat> rules) throws ResourceUnavailableException;
-
}
diff --git a/api/src/com/cloud/network/element/PasswordServiceProvider.java b/api/src/com/cloud/network/element/PasswordServiceProvider.java
new file mode 100644
index 00000000000..092c3590b72
--- /dev/null
+++ b/api/src/com/cloud/network/element/PasswordServiceProvider.java
@@ -0,0 +1,12 @@
+package com.cloud.network.element;
+
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.Network;
+import com.cloud.vm.NicProfile;
+import com.cloud.vm.VirtualMachine;
+import com.cloud.vm.VirtualMachineProfile;
+
+public interface PasswordServiceProvider extends NetworkElement {
+ boolean savePassword(Network network, NicProfile nic, VirtualMachineProfile extends VirtualMachine> vm) throws ResourceUnavailableException;
+ boolean isPasswordServiceProvider();
+}
diff --git a/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java b/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java
new file mode 100644
index 00000000000..31026bfbe5c
--- /dev/null
+++ b/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.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.RemoteAccessVpn;
+import com.cloud.network.VpnUser;
+
+public interface RemoteAccessVPNServiceProvider extends NetworkElement {
+ String[] applyVpnUsers(RemoteAccessVpn vpn, List extends VpnUser> users) throws ResourceUnavailableException;
+
+ boolean startVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException;
+
+ boolean stopVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException;
+
+ boolean isRemoteAccessVPNServiceProvider();
+}
diff --git a/api/src/com/cloud/network/element/SourceNATServiceProvider.java b/api/src/com/cloud/network/element/SourceNATServiceProvider.java
new file mode 100644
index 00000000000..2d1d9761de0
--- /dev/null
+++ b/api/src/com/cloud/network/element/SourceNATServiceProvider.java
@@ -0,0 +1,20 @@
+package com.cloud.network.element;
+
+import java.util.List;
+
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.Network;
+import com.cloud.network.PublicIpAddress;
+
+public interface SourceNATServiceProvider extends NetworkElement {
+ /**
+ * Apply ip addresses to this network
+ * @param network
+ * @param ipAddress
+ * @return
+ * @throws ResourceUnavailableException
+ */
+ boolean applyIps(Network network, List extends PublicIpAddress> ipAddress) throws ResourceUnavailableException;
+
+ boolean isSourceNATServiceProvider();
+}
diff --git a/api/src/com/cloud/network/element/StaticNATServiceProvider.java b/api/src/com/cloud/network/element/StaticNATServiceProvider.java
new file mode 100644
index 00000000000..91ea72406ad
--- /dev/null
+++ b/api/src/com/cloud/network/element/StaticNATServiceProvider.java
@@ -0,0 +1,20 @@
+package com.cloud.network.element;
+
+import java.util.List;
+
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.Network;
+import com.cloud.network.rules.StaticNat;
+
+public interface StaticNATServiceProvider extends NetworkElement {
+ /**
+ * Creates static nat rule (public IP to private IP mapping) on the network element
+ * @param config
+ * @param rules
+ * @return
+ * @throws ResourceUnavailableException
+ */
+ boolean applyStaticNats(Network config, List extends StaticNat> rules) throws ResourceUnavailableException;
+
+ boolean isStaticNATServiceProvider();
+}
diff --git a/api/src/com/cloud/network/vpn/PasswordResetElement.java b/api/src/com/cloud/network/vpn/PasswordResetElement.java
deleted file mode 100644
index ab362b451eb..00000000000
--- a/api/src/com/cloud/network/vpn/PasswordResetElement.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, 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.network.vpn;
-
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.Network;
-import com.cloud.vm.NicProfile;
-import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachineProfile;
-
-public interface PasswordResetElement {
-
- boolean savePassword(Network network, NicProfile nic, VirtualMachineProfile extends VirtualMachine> vm) throws ResourceUnavailableException;
-}
diff --git a/api/src/com/cloud/network/vpn/RemoteAccessVpnElement.java b/api/src/com/cloud/network/vpn/RemoteAccessVpnElement.java
deleted file mode 100644
index 0a1dfbfd379..00000000000
--- a/api/src/com/cloud/network/vpn/RemoteAccessVpnElement.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Copyright (C) 2010 Cloud.com, 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.network.vpn;
-
-import java.util.List;
-
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.Network;
-import com.cloud.network.RemoteAccessVpn;
-import com.cloud.network.VpnUser;
-import com.cloud.utils.component.Adapter;
-
-public interface RemoteAccessVpnElement extends Adapter {
- String[] applyVpnUsers(RemoteAccessVpn vpn, List extends VpnUser> users) throws ResourceUnavailableException;
-
- boolean startVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException;
-
- boolean stopVpn(Network network, RemoteAccessVpn vpn) throws ResourceUnavailableException;
-}
diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java
index 1fe3c6371f8..582b884f850 100644
--- a/server/src/com/cloud/network/NetworkManager.java
+++ b/server/src/com/cloud/network/NetworkManager.java
@@ -33,11 +33,11 @@ import com.cloud.network.Network.GuestIpType;
import com.cloud.network.Network.Service;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.addr.PublicIp;
+import com.cloud.network.element.PasswordServiceProvider;
+import com.cloud.network.element.RemoteAccessVPNServiceProvider;
import com.cloud.network.guru.NetworkGuru;
import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.StaticNat;
-import com.cloud.network.vpn.PasswordResetElement;
-import com.cloud.network.vpn.RemoteAccessVpnElement;
import com.cloud.offerings.NetworkOfferingVO;
import com.cloud.user.Account;
import com.cloud.user.AccountVO;
@@ -142,7 +142,7 @@ public interface NetworkManager extends NetworkService {
boolean applyRules(List extends FirewallRule> rules, boolean continueOnError) throws ResourceUnavailableException;
- List extends RemoteAccessVpnElement> getRemoteAccessVpnElements();
+ List extends RemoteAccessVPNServiceProvider> getRemoteAccessVpnElements();
PublicIpAddress getPublicIpAddress(long ipAddressId);
@@ -186,7 +186,7 @@ public interface NetworkManager extends NetworkService {
Nic getDefaultNic(long vmId);
- List extends PasswordResetElement> getPasswordResetElements();
+ List extends PasswordServiceProvider> getPasswordResetElements();
boolean zoneIsConfiguredForExternalNetworking(long zoneId);
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index 56808f7df76..acc8a091de0 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -97,7 +97,12 @@ import com.cloud.network.dao.FirewallRulesDao;
import com.cloud.network.dao.IPAddressDao;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.NetworkDomainDao;
+import com.cloud.network.element.FirewallServiceProvider;
import com.cloud.network.element.NetworkElement;
+import com.cloud.network.element.PasswordServiceProvider;
+import com.cloud.network.element.RemoteAccessVPNServiceProvider;
+import com.cloud.network.element.SourceNATServiceProvider;
+import com.cloud.network.element.StaticNATServiceProvider;
import com.cloud.network.guru.NetworkGuru;
import com.cloud.network.lb.LoadBalancingRulesManager;
import com.cloud.network.rules.FirewallManager;
@@ -106,8 +111,6 @@ import com.cloud.network.rules.FirewallRule.Purpose;
import com.cloud.network.rules.FirewallRuleVO;
import com.cloud.network.rules.RulesManager;
import com.cloud.network.rules.StaticNat;
-import com.cloud.network.vpn.PasswordResetElement;
-import com.cloud.network.vpn.RemoteAccessVpnElement;
import com.cloud.network.vpn.RemoteAccessVpnService;
import com.cloud.offering.NetworkOffering;
import com.cloud.offering.NetworkOffering.Availability;
@@ -493,10 +496,19 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
}
boolean success = true;
+ int found = 0;
for (NetworkElement element : _networkElements) {
try {
+ if (!(element instanceof SourceNATServiceProvider)) {
+ continue;
+ }
+ SourceNATServiceProvider e = (SourceNATServiceProvider)element;
+ if (!e.isSourceNATServiceProvider()) {
+ continue;
+ }
+ found ++;
s_logger.trace("Asking " + element + " to apply ip associations");
- element.applyIps(network, publicIps);
+ e.applyIps(network, publicIps);
} catch (ResourceUnavailableException e) {
success = false;
if (!continueOnError) {
@@ -1478,11 +1490,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
}
@Override
- public List extends RemoteAccessVpnElement> getRemoteAccessVpnElements() {
- List elements = new ArrayList();
+ public List extends RemoteAccessVPNServiceProvider> getRemoteAccessVpnElements() {
+ List elements = new ArrayList();
for (NetworkElement element : _networkElements) {
- if (element instanceof RemoteAccessVpnElement) {
- elements.add((RemoteAccessVpnElement) element);
+ if (element instanceof RemoteAccessVPNServiceProvider) {
+ RemoteAccessVPNServiceProvider e = (RemoteAccessVPNServiceProvider) element;
+ if (e.isRemoteAccessVPNServiceProvider()) {
+ elements.add(e);
+ }
}
}
@@ -2303,9 +2318,18 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
boolean success = true;
Network network = _networksDao.findById(rules.get(0).getNetworkId());
+ int found = 0;
for (NetworkElement ne : _networkElements) {
try {
- boolean handled = ne.applyRules(network, rules);
+ if (!(ne instanceof FirewallServiceProvider)) {
+ continue;
+ }
+ FirewallServiceProvider e = (FirewallServiceProvider)ne;
+ if (!e.isFirewallServiceProvider()) {
+ continue;
+ }
+ found ++;
+ boolean 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) {
@@ -2810,11 +2834,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
}
@Override
- public List extends PasswordResetElement> getPasswordResetElements() {
- List elements = new ArrayList();
+ public List extends PasswordServiceProvider> getPasswordResetElements() {
+ List elements = new ArrayList();
for (NetworkElement element : _networkElements) {
- if (element instanceof PasswordResetElement) {
- elements.add((PasswordResetElement) element);
+ if (element instanceof PasswordServiceProvider) {
+ PasswordServiceProvider e = (PasswordServiceProvider)element;
+ if (e.isPasswordServiceProvider()) {
+ elements.add(e);
+ }
}
}
return elements;
@@ -3267,9 +3294,18 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
boolean success = true;
Network network = _networksDao.findById(staticNats.get(0).getNetworkId());
+ int found = 0;
for (NetworkElement ne : _networkElements) {
try {
- boolean handled = ne.applyStaticNats(network, staticNats);
+ if (!(ne instanceof StaticNATServiceProvider)) {
+ continue;
+ }
+ StaticNATServiceProvider e = (StaticNATServiceProvider)ne;
+ if (!e.isStaticNATServiceProvider()) {
+ continue;
+ }
+ found ++;
+ boolean handled = e.applyStaticNats(network, staticNats);
s_logger.debug("Static Nat 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/BareMetalElement.java b/server/src/com/cloud/network/element/BareMetalElement.java
index fae74d8fbb3..9fc1d60e7a1 100644
--- a/server/src/com/cloud/network/element/BareMetalElement.java
+++ b/server/src/com/cloud/network/element/BareMetalElement.java
@@ -116,20 +116,4 @@ public class BareMetalElement extends AdapterBase implements NetworkElement {
public boolean destroy(Network network) throws ConcurrentOperationException, ResourceUnavailableException {
return true;
}
-
- @Override
- public boolean applyIps(Network network, List extends PublicIpAddress> ipAddress) throws ResourceUnavailableException {
- return true;
- }
-
- @Override
- public boolean applyRules(Network network, List extends FirewallRule> rules) throws ResourceUnavailableException {
- return true;
- }
-
- @Override
- public boolean applyStaticNats(Network config, List extends StaticNat> rules) throws ResourceUnavailableException {
- return false;
- }
-
}
diff --git a/server/src/com/cloud/network/element/CloudZonesNetworkElement.java b/server/src/com/cloud/network/element/CloudZonesNetworkElement.java
index 39259eec57d..f9d778b41eb 100644
--- a/server/src/com/cloud/network/element/CloudZonesNetworkElement.java
+++ b/server/src/com/cloud/network/element/CloudZonesNetworkElement.java
@@ -74,7 +74,6 @@ import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.network.router.VirtualRouter;
import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.StaticNat;
-import com.cloud.network.vpn.PasswordResetElement;
import com.cloud.offering.NetworkOffering;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.uservm.UserVm;
@@ -96,7 +95,7 @@ import com.cloud.vm.dao.UserVmDao;
@Local(value=NetworkElement.class)
-public class CloudZonesNetworkElement extends AdapterBase implements NetworkElement, PasswordResetElement{
+public class CloudZonesNetworkElement extends AdapterBase implements NetworkElement {
private static final Logger s_logger = Logger.getLogger(CloudZonesNetworkElement.class);
private static final Map> capabilities = setCapabilities();
@@ -194,22 +193,6 @@ public class CloudZonesNetworkElement extends AdapterBase implements NetworkElem
return false; //assume that the agent will remove userdata etc
}
- @Override
- public boolean applyRules(Network network, List extends FirewallRule> rules) throws ResourceUnavailableException {
- return false;
- }
-
- @Override
- public boolean applyIps(Network network, List extends PublicIpAddress> ipAddress) throws ResourceUnavailableException {
- return false;
- }
-
- @Override
- public boolean applyStaticNats(Network config, List extends StaticNat> rules) throws ResourceUnavailableException {
- return false;
- }
-
-
@Override
public Provider getProvider() {
return Provider.ExternalDhcpServer;
@@ -236,12 +219,6 @@ public class CloudZonesNetworkElement extends AdapterBase implements NetworkElem
}
- @Override
- public boolean savePassword(Network network, NicProfile nic, VirtualMachineProfile extends VirtualMachine> vm) throws ResourceUnavailableException{
- s_logger.trace("Cloudzones element doesn't handle saving passwords for " + network);
- return true;
- }
-
private VmDataCommand generateVmDataCommand( String vmPrivateIpAddress,
String userData, String serviceOffering, String zoneName, String guestIpAddress, String vmName, String vmInstanceName, long vmId, String publicKey) {
VmDataCommand cmd = new VmDataCommand(vmPrivateIpAddress, vmName);
diff --git a/server/src/com/cloud/network/element/DhcpElement.java b/server/src/com/cloud/network/element/DhcpElement.java
index 179f266ab1e..a8a51631f60 100644
--- a/server/src/com/cloud/network/element/DhcpElement.java
+++ b/server/src/com/cloud/network/element/DhcpElement.java
@@ -49,7 +49,6 @@ import com.cloud.network.router.VirtualRouter;
import com.cloud.network.router.VirtualRouter.Role;
import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.StaticNat;
-import com.cloud.network.vpn.PasswordResetElement;
import com.cloud.offering.NetworkOffering;
import com.cloud.org.Cluster;
import com.cloud.user.AccountManager;
@@ -68,7 +67,7 @@ import com.cloud.vm.dao.UserVmDao;
@Local(value=NetworkElement.class)
-public class DhcpElement extends AdapterBase implements NetworkElement, PasswordResetElement{
+public class DhcpElement extends AdapterBase implements PasswordServiceProvider {
private static final Logger s_logger = Logger.getLogger(DhcpElement.class);
private static final Map> capabilities = setCapabilities();
@@ -176,17 +175,6 @@ public class DhcpElement extends AdapterBase implements NetworkElement, Password
return result;
}
- @Override
- public boolean applyRules(Network network, List extends FirewallRule> rules) throws ResourceUnavailableException {
- return false;
- }
-
- @Override
- public boolean applyIps(Network network, List extends PublicIpAddress> ipAddress) throws ResourceUnavailableException {
- return false;
- }
-
-
@Override
public Provider getProvider() {
return Provider.DhcpServer;
@@ -268,9 +256,9 @@ public class DhcpElement extends AdapterBase implements NetworkElement, Password
return _routerMgr.savePasswordToRouter(network, nic, uservm, routers);
}
-
+
@Override
- public boolean applyStaticNats(Network config, List extends StaticNat> rules) throws ResourceUnavailableException {
- return false;
+ public boolean isPasswordServiceProvider() {
+ return true;
}
}
diff --git a/server/src/com/cloud/network/element/ElasticLoadBalancerElement.java b/server/src/com/cloud/network/element/ElasticLoadBalancerElement.java
index 535cea4fd9d..b814d959b8a 100644
--- a/server/src/com/cloud/network/element/ElasticLoadBalancerElement.java
+++ b/server/src/com/cloud/network/element/ElasticLoadBalancerElement.java
@@ -54,7 +54,7 @@ import com.cloud.vm.VirtualMachineProfile;
@Local(value=NetworkElement.class)
-public class ElasticLoadBalancerElement extends AdapterBase implements NetworkElement{
+public class ElasticLoadBalancerElement extends AdapterBase implements FirewallServiceProvider {
private static final Logger s_logger = Logger.getLogger(ElasticLoadBalancerElement.class);
private static final Map> capabilities = setCapabilities();
@Inject NetworkManager _networkManager;
@@ -135,11 +135,6 @@ public class ElasticLoadBalancerElement extends AdapterBase implements NetworkEl
return false;
}
- @Override
- public boolean applyIps(Network network, List extends PublicIpAddress> ipAddress) throws ResourceUnavailableException {
- return true;
- }
-
@Override
public boolean applyRules(Network network, List extends FirewallRule> rules) throws ResourceUnavailableException {
if (!canHandle(network)) {
@@ -167,9 +162,9 @@ public class ElasticLoadBalancerElement extends AdapterBase implements NetworkEl
}
return true;
}
-
+
@Override
- public boolean applyStaticNats(Network config, List extends StaticNat> rules) throws ResourceUnavailableException {
- return false;
+ public boolean isFirewallServiceProvider() {
+ return true;
}
}
diff --git a/server/src/com/cloud/network/element/ExternalDhcpElement.java b/server/src/com/cloud/network/element/ExternalDhcpElement.java
index e8c19817863..777f4af7b41 100644
--- a/server/src/com/cloud/network/element/ExternalDhcpElement.java
+++ b/server/src/com/cloud/network/element/ExternalDhcpElement.java
@@ -45,7 +45,6 @@ import com.cloud.network.Network.Service;
import com.cloud.network.Networks.TrafficType;
import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.StaticNat;
-import com.cloud.network.vpn.PasswordResetElement;
import com.cloud.offering.NetworkOffering;
import com.cloud.utils.component.AdapterBase;
import com.cloud.utils.component.Inject;
@@ -56,7 +55,7 @@ import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
@Local(value=NetworkElement.class)
-public class ExternalDhcpElement extends AdapterBase implements NetworkElement, PasswordResetElement {
+public class ExternalDhcpElement extends AdapterBase implements NetworkElement {
private static final Logger s_logger = Logger.getLogger(ExternalDhcpElement.class);
@Inject ExternalDhcpManager _dhcpMgr;
private boolean canHandle(GuestIpType ipType, DeployDestination dest, TrafficType trafficType) {
@@ -72,11 +71,6 @@ public class ExternalDhcpElement extends AdapterBase implements NetworkElement,
return false;
}
- @Override
- public boolean savePassword(Network network, NicProfile nic, VirtualMachineProfile extends VirtualMachine> vm) throws ResourceUnavailableException {
- return true;
- }
-
@Override
public Map> getCapabilities() {
return null;
@@ -129,20 +123,4 @@ public class ExternalDhcpElement extends AdapterBase implements NetworkElement,
public boolean destroy(Network network) throws ConcurrentOperationException, ResourceUnavailableException {
return true;
}
-
- @Override
- public boolean applyIps(Network network, List extends PublicIpAddress> ipAddress) throws ResourceUnavailableException {
- return true;
- }
-
- @Override
- public boolean applyRules(Network network, List extends FirewallRule> rules) throws ResourceUnavailableException {
- return true;
- }
-
- @Override
- public boolean applyStaticNats(Network config, List extends StaticNat> rules) throws ResourceUnavailableException {
- return false;
- }
-
}
diff --git a/server/src/com/cloud/network/element/ExternalFirewallElement.java b/server/src/com/cloud/network/element/ExternalFirewallElement.java
index 0d0db524b17..1a848b05aff 100644
--- a/server/src/com/cloud/network/element/ExternalFirewallElement.java
+++ b/server/src/com/cloud/network/element/ExternalFirewallElement.java
@@ -48,7 +48,6 @@ import com.cloud.network.VpnUser;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.StaticNat;
-import com.cloud.network.vpn.RemoteAccessVpnElement;
import com.cloud.offering.NetworkOffering;
import com.cloud.offerings.NetworkOfferingVO;
import com.cloud.offerings.dao.NetworkOfferingDao;
@@ -60,7 +59,7 @@ import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
@Local(value=NetworkElement.class)
-public class ExternalFirewallElement extends AdapterBase implements NetworkElement, RemoteAccessVpnElement {
+public class ExternalFirewallElement extends AdapterBase implements SourceNATServiceProvider, FirewallServiceProvider, RemoteAccessVPNServiceProvider {
private static final Logger s_logger = Logger.getLogger(ExternalFirewallElement.class);
@@ -239,8 +238,18 @@ public class ExternalFirewallElement extends AdapterBase implements NetworkEleme
}
@Override
- public boolean applyStaticNats(Network config, List extends StaticNat> rules) throws ResourceUnavailableException {
- return false;
+ public boolean isSourceNATServiceProvider() {
+ return true;
+ }
+
+ @Override
+ public boolean isFirewallServiceProvider() {
+ return true;
+ }
+
+ @Override
+ public boolean isRemoteAccessVPNServiceProvider() {
+ return true;
}
}
diff --git a/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
index 51ab184c9ef..af105990747 100644
--- a/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
+++ b/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java
@@ -53,7 +53,7 @@ import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
@Local(value=NetworkElement.class)
-public class F5ExternalLoadBalancerElement extends AdapterBase implements NetworkElement {
+public class F5ExternalLoadBalancerElement extends AdapterBase implements FirewallServiceProvider {
private static final Logger s_logger = Logger.getLogger(F5ExternalLoadBalancerElement.class);
@@ -106,11 +106,6 @@ public class F5ExternalLoadBalancerElement extends AdapterBase implements Networ
return true;
}
- @Override
- public boolean applyIps(Network network, List extends PublicIpAddress> ipAddress) throws ResourceUnavailableException {
- return true;
- }
-
@Override
public boolean applyRules(Network config, List extends FirewallRule> rules) throws ResourceUnavailableException {
if (!canHandle(config)) {
@@ -153,10 +148,9 @@ public class F5ExternalLoadBalancerElement extends AdapterBase implements Networ
public boolean restart(Network network, ReservationContext context, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{
return true;
}
-
+
@Override
- public boolean applyStaticNats(Network config, List extends StaticNat> rules) throws ResourceUnavailableException {
- return false;
+ public boolean isFirewallServiceProvider() {
+ return true;
}
-
}
diff --git a/server/src/com/cloud/network/element/NetscalerExternalLoadBalancerElement.java b/server/src/com/cloud/network/element/NetscalerExternalLoadBalancerElement.java
index 4fe36ae2d09..fed4aac022f 100644
--- a/server/src/com/cloud/network/element/NetscalerExternalLoadBalancerElement.java
+++ b/server/src/com/cloud/network/element/NetscalerExternalLoadBalancerElement.java
@@ -53,7 +53,7 @@ import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
@Local(value=NetworkElement.class)
-public class NetscalerExternalLoadBalancerElement extends AdapterBase implements NetworkElement {
+public class NetscalerExternalLoadBalancerElement extends AdapterBase implements FirewallServiceProvider {
private static final Logger s_logger = Logger.getLogger(NetscalerExternalLoadBalancerElement.class);
@@ -106,11 +106,6 @@ public class NetscalerExternalLoadBalancerElement extends AdapterBase implements
return true;
}
- @Override
- public boolean applyIps(Network network, List extends PublicIpAddress> ipAddress) throws ResourceUnavailableException {
- return true;
- }
-
@Override
public boolean applyRules(Network config, List extends FirewallRule> rules) throws ResourceUnavailableException {
if (!canHandle(config)) {
@@ -153,10 +148,9 @@ public class NetscalerExternalLoadBalancerElement extends AdapterBase implements
public boolean restart(Network network, ReservationContext context, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException{
return true;
}
-
+
@Override
- public boolean applyStaticNats(Network config, List extends StaticNat> rules) throws ResourceUnavailableException {
- return false;
+ public boolean isFirewallServiceProvider() {
+ return true;
}
-
}
diff --git a/server/src/com/cloud/network/element/OvsElement.java b/server/src/com/cloud/network/element/OvsElement.java
index 4dca5bf9234..1b928578533 100644
--- a/server/src/com/cloud/network/element/OvsElement.java
+++ b/server/src/com/cloud/network/element/OvsElement.java
@@ -52,20 +52,6 @@ public class OvsElement extends AdapterBase implements NetworkElement {
@Inject OvsNetworkManager _ovsVlanMgr;
@Inject OvsTunnelManager _ovsTunnelMgr;
- @Override
- public boolean applyIps(Network network,
- List extends PublicIpAddress> ipAddress)
- throws ResourceUnavailableException {
- return true;
- }
-
- @Override
- public boolean applyRules(Network network,
- List extends FirewallRule> rules)
- throws ResourceUnavailableException {
- return true;
- }
-
@Override
public boolean destroy(Network network)
throws ConcurrentOperationException, ResourceUnavailableException {
@@ -143,10 +129,4 @@ public class OvsElement extends AdapterBase implements NetworkElement {
throws ConcurrentOperationException, ResourceUnavailableException {
return true;
}
-
- @Override
- public boolean applyStaticNats(Network config, List extends StaticNat> rules) throws ResourceUnavailableException {
- return false;
- }
-
}
diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java
index eb77ad262b5..ef73c1bd5b8 100644
--- a/server/src/com/cloud/network/element/VirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VirtualRouterElement.java
@@ -51,7 +51,6 @@ import com.cloud.network.router.VirtualRouter.Role;
import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.RulesManager;
import com.cloud.network.rules.StaticNat;
-import com.cloud.network.vpn.RemoteAccessVpnElement;
import com.cloud.offering.NetworkOffering;
import com.cloud.offerings.NetworkOfferingVO;
import com.cloud.offerings.dao.NetworkOfferingDao;
@@ -71,7 +70,7 @@ import com.cloud.vm.dao.UserVmDao;
@Local(value=NetworkElement.class)
-public class VirtualRouterElement extends DhcpElement implements NetworkElement, RemoteAccessVpnElement {
+public class VirtualRouterElement extends DhcpElement implements SourceNATServiceProvider, FirewallServiceProvider, StaticNATServiceProvider, RemoteAccessVPNServiceProvider {
private static final Logger s_logger = Logger.getLogger(VirtualRouterElement.class);
private static final Map> capabilities = setCapabilities();
@@ -381,4 +380,24 @@ public class VirtualRouterElement extends DhcpElement implements NetworkElement,
return _routerMgr.savePasswordToRouter(network, nic, uservm, routers);
}
+
+ @Override
+ public boolean isSourceNATServiceProvider() {
+ return true;
+ }
+
+ @Override
+ public boolean isFirewallServiceProvider() {
+ return true;
+ }
+
+ @Override
+ public boolean isStaticNATServiceProvider() {
+ return true;
+ }
+
+ @Override
+ public boolean isRemoteAccessVPNServiceProvider() {
+ return true;
+ }
}
diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
index 2fee27513d3..bcfd0889587 100755
--- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
+++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java
@@ -50,6 +50,7 @@ import com.cloud.network.dao.FirewallRulesDao;
import com.cloud.network.dao.IPAddressDao;
import com.cloud.network.dao.RemoteAccessVpnDao;
import com.cloud.network.dao.VpnUserDao;
+import com.cloud.network.element.RemoteAccessVPNServiceProvider;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.network.rules.FirewallManager;
import com.cloud.network.rules.FirewallRule;
@@ -221,10 +222,10 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag
_remoteAccessVpnDao.update(vpn.getServerAddressId(), vpn);
- List extends RemoteAccessVpnElement> elements = _networkMgr.getRemoteAccessVpnElements();
+ List extends RemoteAccessVPNServiceProvider> elements = _networkMgr.getRemoteAccessVpnElements();
boolean success = false;
try {
- for (RemoteAccessVpnElement element : elements) {
+ for (RemoteAccessVPNServiceProvider element : elements) {
if (element.stopVpn(network, vpn)) {
success = true;
break;
@@ -349,7 +350,7 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag
Network network = _networkMgr.getNetwork(vpn.getNetworkId());
- List extends RemoteAccessVpnElement> elements = _networkMgr.getRemoteAccessVpnElements();
+ List extends RemoteAccessVPNServiceProvider > elements = _networkMgr.getRemoteAccessVpnElements();
boolean started = false;
try {
boolean firewallOpened = true;
@@ -358,7 +359,7 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag
}
if (firewallOpened) {
- for (RemoteAccessVpnElement element : elements) {
+ for (RemoteAccessVPNServiceProvider element : elements) {
if (element.startVpn(network, vpn)) {
started = true;
break;
@@ -395,12 +396,12 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag
}
}
- List extends RemoteAccessVpnElement> elements = _networkMgr.getRemoteAccessVpnElements();
+ List extends RemoteAccessVPNServiceProvider> elements = _networkMgr.getRemoteAccessVpnElements();
boolean success = true;
boolean[] finals = new boolean[users.size()];
- for (RemoteAccessVpnElement element : elements) {
+ for (RemoteAccessVPNServiceProvider element : elements) {
s_logger.debug("Applying vpn access to " + element.getName());
for (RemoteAccessVpnVO vpn : vpns) {
try {
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index 864ec1611c8..8880c8d2254 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -127,6 +127,7 @@ import com.cloud.network.dao.IPAddressDao;
import com.cloud.network.dao.LoadBalancerDao;
import com.cloud.network.dao.LoadBalancerVMMapDao;
import com.cloud.network.dao.NetworkDao;
+import com.cloud.network.element.PasswordServiceProvider;
import com.cloud.network.lb.LoadBalancingRulesManager;
import com.cloud.network.router.VirtualNetworkApplianceManager;
import com.cloud.network.rules.FirewallManager;
@@ -134,7 +135,6 @@ import com.cloud.network.rules.RulesManager;
import com.cloud.network.security.SecurityGroup;
import com.cloud.network.security.SecurityGroupManager;
import com.cloud.network.security.dao.SecurityGroupDao;
-import com.cloud.network.vpn.PasswordResetElement;
import com.cloud.offering.NetworkOffering;
import com.cloud.offering.NetworkOffering.Availability;
import com.cloud.offering.ServiceOffering;
@@ -424,10 +424,10 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
VirtualMachineProfile vmProfile = new VirtualMachineProfileImpl(vmInstance);
vmProfile.setParameter(VirtualMachineProfile.Param.VmPassword, password);
- List extends PasswordResetElement> elements = _networkMgr.getPasswordResetElements();
+ List extends PasswordServiceProvider> elements = _networkMgr.getPasswordResetElements();
boolean result = true;
- for (PasswordResetElement element : elements) {
+ for (PasswordServiceProvider element : elements) {
if (!element.savePassword(defaultNetwork, defaultNicProfile, vmProfile)) {
result = false;
}