Network: Add Service providers

In the past, the NetworkElement would cover almost all the functionality that
e.g.  virtual router can cover: firewall, source NAT, static NAT, password,
VPN... So anyone want to implement the NetworkElement would have to implement
these service's specific methods, even it wouldn't support it. Also, if we want
to find a e.g. FirewallServiceProvider, we have to proceed all the current
network service providers, to call a method to know if it support such service.
That's neither elegant nor scaling way to do it.

As the first step, this patch separates each ServiceProvider from NetworkElement
(there are some interface already out of NetworkElement, so this patch slightly
modifies them too), and only the class would implement the correlated interface, would
have the ability to do these services.
This commit is contained in:
Sheng Yang 2011-10-07 18:07:35 -07:00
parent 43bebcd050
commit 0121c0516d
22 changed files with 204 additions and 257 deletions

View File

@ -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();
}

View File

@ -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;
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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();
}

View File

@ -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 <http://www.gnu.org/licenses/>.
*
*/
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;
}

View File

@ -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 <http://www.gnu.org/licenses/>.
*
*/
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;
}

View File

@ -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);

View File

@ -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<RemoteAccessVpnElement> elements = new ArrayList<RemoteAccessVpnElement>();
public List<? extends RemoteAccessVPNServiceProvider> getRemoteAccessVpnElements() {
List<RemoteAccessVPNServiceProvider> elements = new ArrayList<RemoteAccessVPNServiceProvider>();
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<PasswordResetElement> elements = new ArrayList<PasswordResetElement>();
public List<? extends PasswordServiceProvider> getPasswordResetElements() {
List<PasswordServiceProvider> elements = new ArrayList<PasswordServiceProvider>();
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) {

View File

@ -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;
}
}

View File

@ -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<Service, Map<Capability, String>> 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);

View File

@ -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<Service, Map<Capability, String>> 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;
}
}

View File

@ -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<Service, Map<Capability, String>> 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;
}
}

View File

@ -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<Service, Map<Capability, String>> 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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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<Service, Map<Capability, String>> 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;
}
}

View File

@ -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 {

View File

@ -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<VMInstanceVO> vmProfile = new VirtualMachineProfileImpl<VMInstanceVO>(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;
}