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 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 ipAddress) throws ResourceUnavailableException; - - /** - * Apply rules - * @param network - * @param rules - * @return - * @throws ResourceUnavailableException - */ - boolean applyRules(Network network, List 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 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 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 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 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 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 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 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 rules, boolean continueOnError) throws ResourceUnavailableException; - List getRemoteAccessVpnElements(); + List getRemoteAccessVpnElements(); PublicIpAddress getPublicIpAddress(long ipAddressId); @@ -186,7 +186,7 @@ public interface NetworkManager extends NetworkService { Nic getDefaultNic(long vmId); - List getPasswordResetElements(); + List 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 getRemoteAccessVpnElements() { - List elements = new ArrayList(); + public List 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 getPasswordResetElements() { - List elements = new ArrayList(); + public List 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 ipAddress) throws ResourceUnavailableException { - return true; - } - - @Override - public boolean applyRules(Network network, List rules) throws ResourceUnavailableException { - return true; - } - - @Override - public boolean applyStaticNats(Network config, List 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 rules) throws ResourceUnavailableException { - return false; - } - - @Override - public boolean applyIps(Network network, List ipAddress) throws ResourceUnavailableException { - return false; - } - - @Override - public boolean applyStaticNats(Network config, List 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 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 rules) throws ResourceUnavailableException { - return false; - } - - @Override - public boolean applyIps(Network network, List 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 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 ipAddress) throws ResourceUnavailableException { - return true; - } - @Override public boolean applyRules(Network network, List 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 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 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 ipAddress) throws ResourceUnavailableException { - return true; - } - - @Override - public boolean applyRules(Network network, List rules) throws ResourceUnavailableException { - return true; - } - - @Override - public boolean applyStaticNats(Network config, List 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 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 ipAddress) throws ResourceUnavailableException { - return true; - } - @Override public boolean applyRules(Network config, List 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 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 ipAddress) throws ResourceUnavailableException { - return true; - } - @Override public boolean applyRules(Network config, List 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 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 ipAddress) - throws ResourceUnavailableException { - return true; - } - - @Override - public boolean applyRules(Network network, - List 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 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 elements = _networkMgr.getRemoteAccessVpnElements(); + List 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 elements = _networkMgr.getRemoteAccessVpnElements(); + List 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 elements = _networkMgr.getRemoteAccessVpnElements(); + List 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 elements = _networkMgr.getPasswordResetElements(); + List elements = _networkMgr.getPasswordResetElements(); boolean result = true; - for (PasswordResetElement element : elements) { + for (PasswordServiceProvider element : elements) { if (!element.savePassword(defaultNetwork, defaultNicProfile, vmProfile)) { result = false; }