mirror of https://github.com/apache/cloudstack.git
NaaS: Add ServiceProviders
Added PortForwardingServiceProvider, StaticNatServiceProvider, rename PasswordServiceProvider to UserDataServiceProvider(may rename to a better name later). Add related function for service providers.
This commit is contained in:
parent
b369e45c78
commit
e1e96c0bb3
|
|
@ -14,5 +14,5 @@ public interface FirewallServiceProvider extends NetworkElement {
|
|||
* @return
|
||||
* @throws ResourceUnavailableException
|
||||
*/
|
||||
boolean applyRules(Network network, List<? extends FirewallRule> rules) throws ResourceUnavailableException;
|
||||
boolean applyFWRules(Network network, List<? extends FirewallRule> rules) throws ResourceUnavailableException;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import java.util.List;
|
|||
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.network.lb.LoadBalancingRule;
|
||||
|
||||
public interface LoadBalancingServiceProvider extends NetworkElement {
|
||||
/**
|
||||
|
|
@ -14,5 +14,5 @@ public interface LoadBalancingServiceProvider extends NetworkElement {
|
|||
* @return
|
||||
* @throws ResourceUnavailableException
|
||||
*/
|
||||
boolean applyRules(Network network, List<? extends FirewallRule> rules) throws ResourceUnavailableException;
|
||||
boolean applyLBRules(Network network, List<LoadBalancingRule> rules) throws ResourceUnavailableException;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
package com.cloud.network.element;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.network.rules.PortForwardingRule;
|
||||
|
||||
public interface PortForwardingServiceProvider extends NetworkElement {
|
||||
/**
|
||||
* Apply rules
|
||||
* @param network
|
||||
* @param rules
|
||||
* @return
|
||||
* @throws ResourceUnavailableException
|
||||
*/
|
||||
boolean applyPFRules(Network network, List<PortForwardingRule> rules) throws ResourceUnavailableException;
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@ import com.cloud.exception.ResourceUnavailableException;
|
|||
import com.cloud.network.Network;
|
||||
import com.cloud.network.PublicIpAddress;
|
||||
|
||||
public interface SourceNATServiceProvider extends NetworkElement {
|
||||
public interface SourceNatServiceProvider extends NetworkElement {
|
||||
/**
|
||||
* Apply ip addresses to this network
|
||||
* @param network
|
||||
|
|
@ -6,7 +6,7 @@ import com.cloud.exception.ResourceUnavailableException;
|
|||
import com.cloud.network.Network;
|
||||
import com.cloud.network.rules.StaticNat;
|
||||
|
||||
public interface StaticNATServiceProvider extends NetworkElement {
|
||||
public interface StaticNatServiceProvider extends NetworkElement {
|
||||
/**
|
||||
* Creates static nat rule (public IP to private IP mapping) on the network element
|
||||
* @param config
|
||||
|
|
@ -6,6 +6,6 @@ import com.cloud.vm.NicProfile;
|
|||
import com.cloud.vm.VirtualMachine;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
|
||||
public interface PasswordServiceProvider extends NetworkElement {
|
||||
public interface UserDataServiceProvider extends NetworkElement {
|
||||
boolean savePassword(Network network, NicProfile nic, VirtualMachineProfile<? extends VirtualMachine> vm) throws ResourceUnavailableException;
|
||||
}
|
||||
|
|
@ -33,7 +33,7 @@ import com.cloud.network.Network.Provider;
|
|||
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.UserDataServiceProvider;
|
||||
import com.cloud.network.element.RemoteAccessVPNServiceProvider;
|
||||
import com.cloud.network.guru.NetworkGuru;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
|
|
@ -182,7 +182,7 @@ public interface NetworkManager extends NetworkService {
|
|||
|
||||
Nic getDefaultNic(long vmId);
|
||||
|
||||
List<? extends PasswordServiceProvider> getPasswordResetElements();
|
||||
List<? extends UserDataServiceProvider> getPasswordResetElements();
|
||||
|
||||
@Deprecated
|
||||
boolean zoneIsConfiguredForExternalNetworking(long zoneId);
|
||||
|
|
|
|||
|
|
@ -106,10 +106,11 @@ import com.cloud.network.dao.PhysicalNetworkServiceProviderVO;
|
|||
import com.cloud.network.element.FirewallServiceProvider;
|
||||
import com.cloud.network.element.LoadBalancingServiceProvider;
|
||||
import com.cloud.network.element.NetworkElement;
|
||||
import com.cloud.network.element.PasswordServiceProvider;
|
||||
import com.cloud.network.element.PortForwardingServiceProvider;
|
||||
import com.cloud.network.element.StaticNatServiceProvider;
|
||||
import com.cloud.network.element.UserDataServiceProvider;
|
||||
import com.cloud.network.element.RemoteAccessVPNServiceProvider;
|
||||
import com.cloud.network.element.SourceNATServiceProvider;
|
||||
import com.cloud.network.element.StaticNATServiceProvider;
|
||||
import com.cloud.network.element.SourceNatServiceProvider;
|
||||
import com.cloud.network.guru.NetworkGuru;
|
||||
import com.cloud.network.lb.LoadBalancingRule;
|
||||
import com.cloud.network.lb.LoadBalancingRule.LbDestination;
|
||||
|
|
@ -119,6 +120,7 @@ import com.cloud.network.rules.FirewallRule;
|
|||
import com.cloud.network.rules.FirewallRule.Purpose;
|
||||
import com.cloud.network.rules.FirewallRuleVO;
|
||||
import com.cloud.network.rules.PortForwardingRuleVO;
|
||||
import com.cloud.network.rules.PortForwardingRule;
|
||||
import com.cloud.network.rules.RulesManager;
|
||||
import com.cloud.network.rules.StaticNat;
|
||||
import com.cloud.network.rules.StaticNatRule;
|
||||
|
|
@ -550,10 +552,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
int found = 0;
|
||||
for (NetworkElement element : _networkElements) {
|
||||
try {
|
||||
if (!(element instanceof SourceNATServiceProvider)) {
|
||||
if (!(element instanceof SourceNatServiceProvider)) {
|
||||
continue;
|
||||
}
|
||||
SourceNATServiceProvider e = (SourceNATServiceProvider)element;
|
||||
SourceNatServiceProvider e = (SourceNatServiceProvider)element;
|
||||
found ++;
|
||||
s_logger.trace("Asking " + element + " to apply ip associations");
|
||||
e.applyIps(network, publicIps);
|
||||
|
|
@ -2336,6 +2338,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
}
|
||||
|
||||
@Override
|
||||
/* The rules here is only the same kind of rule, e.g. all load balancing rules or all port forwarding rules */
|
||||
public boolean applyRules(List<? extends FirewallRule> rules, boolean continueOnError) throws ResourceUnavailableException {
|
||||
if (rules == null || rules.size() == 0) {
|
||||
s_logger.debug("There are no rules to forward to the network elements");
|
||||
|
|
@ -2344,22 +2347,36 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
|
||||
boolean success = true;
|
||||
Network network = _networksDao.findById(rules.get(0).getNetworkId());
|
||||
int found = 0;
|
||||
Purpose purpose = rules.get(0).getPurpose();
|
||||
for (NetworkElement ne : _networkElements) {
|
||||
try {
|
||||
if (!(ne instanceof FirewallServiceProvider) && !(ne instanceof LoadBalancingServiceProvider)) {
|
||||
continue;
|
||||
}
|
||||
found ++;
|
||||
boolean handled;
|
||||
if (ne instanceof FirewallServiceProvider) {
|
||||
FirewallServiceProvider e = (FirewallServiceProvider)ne;
|
||||
handled = e.applyRules(network, rules);
|
||||
} else {
|
||||
LoadBalancingServiceProvider e = (LoadBalancingServiceProvider) ne;
|
||||
handled = e.applyRules(network, rules);
|
||||
switch (purpose) {
|
||||
case LoadBalancing:
|
||||
if (!(ne instanceof LoadBalancingServiceProvider)) {
|
||||
continue;
|
||||
}
|
||||
handled = ((LoadBalancingServiceProvider)ne).applyLBRules(network, (List<LoadBalancingRule>)rules);
|
||||
break;
|
||||
case PortForwarding:
|
||||
if (!(ne instanceof PortForwardingServiceProvider)) {
|
||||
continue;
|
||||
}
|
||||
handled = ((PortForwardingServiceProvider)ne).applyPFRules(network, (List<PortForwardingRule>)rules);
|
||||
break;
|
||||
case StaticNat:
|
||||
/* It's firewall rule for static nat, not static nat rule */
|
||||
/* Fall through */
|
||||
case Firewall:
|
||||
if (!(ne instanceof FirewallServiceProvider)) {
|
||||
continue;
|
||||
}
|
||||
handled = ((FirewallServiceProvider)ne).applyFWRules(network, rules);
|
||||
break;
|
||||
default:
|
||||
s_logger.debug("Unable to handle network rules for purpose: " + purpose.toString());
|
||||
handled = false;
|
||||
}
|
||||
|
||||
s_logger.debug("Network Rules for network " + network.getId() + " were " + (handled ? "" : " not") + " handled by " + ne.getName());
|
||||
} catch (ResourceUnavailableException e) {
|
||||
if (!continueOnError) {
|
||||
|
|
@ -2857,11 +2874,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<? extends PasswordServiceProvider> getPasswordResetElements() {
|
||||
List<PasswordServiceProvider> elements = new ArrayList<PasswordServiceProvider>();
|
||||
public List<? extends UserDataServiceProvider> getPasswordResetElements() {
|
||||
List<UserDataServiceProvider> elements = new ArrayList<UserDataServiceProvider>();
|
||||
for (NetworkElement element : _networkElements) {
|
||||
if (element instanceof PasswordServiceProvider) {
|
||||
PasswordServiceProvider e = (PasswordServiceProvider)element;
|
||||
if (element instanceof UserDataServiceProvider) {
|
||||
UserDataServiceProvider e = (UserDataServiceProvider)element;
|
||||
elements.add(e);
|
||||
}
|
||||
}
|
||||
|
|
@ -3329,15 +3346,12 @@ 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 {
|
||||
if (!(ne instanceof StaticNATServiceProvider)) {
|
||||
if (!(ne instanceof StaticNatServiceProvider)) {
|
||||
continue;
|
||||
}
|
||||
StaticNATServiceProvider e = (StaticNATServiceProvider)ne;
|
||||
found ++;
|
||||
boolean handled = e.applyStaticNats(network, staticNats);
|
||||
boolean handled = ((StaticNatServiceProvider)ne).applyStaticNats(network, staticNats);
|
||||
s_logger.debug("Static Nat for network " + network.getId() + " were " + (handled ? "" : " not") + " handled by " + ne.getName());
|
||||
} catch (ResourceUnavailableException e) {
|
||||
if (!continueOnError) {
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ import com.cloud.vm.dao.UserVmDao;
|
|||
|
||||
|
||||
@Local(value=NetworkElement.class)
|
||||
public class DhcpElement extends AdapterBase implements DhcpElementService, PasswordServiceProvider {
|
||||
public class DhcpElement extends AdapterBase implements DhcpElementService, UserDataServiceProvider {
|
||||
private static final Logger s_logger = Logger.getLogger(DhcpElement.class);
|
||||
|
||||
private static final Map<Service, Map<Capability, String>> capabilities = setCapabilities();
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ import com.cloud.network.NetworkManager;
|
|||
import com.cloud.network.Networks.TrafficType;
|
||||
import com.cloud.network.dao.NetworkDao;
|
||||
import com.cloud.network.lb.ElasticLoadBalancerManager;
|
||||
import com.cloud.network.lb.LoadBalancingRule;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
import com.cloud.offerings.dao.NetworkOfferingDao;
|
||||
|
|
@ -128,7 +129,7 @@ public class ElasticLoadBalancerElement extends AdapterBase implements LoadBalan
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean applyRules(Network network, List<? extends FirewallRule> rules) throws ResourceUnavailableException {
|
||||
public boolean applyLBRules(Network network, List<LoadBalancingRule> rules) throws ResourceUnavailableException {
|
||||
if (!canHandle(network)) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ import com.cloud.network.Network.Provider;
|
|||
import com.cloud.network.Network.Service;
|
||||
import com.cloud.network.NetworkManager;
|
||||
import com.cloud.network.Networks.TrafficType;
|
||||
import com.cloud.network.lb.LoadBalancingRule;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
|
||||
|
|
@ -107,7 +108,7 @@ public class F5ExternalLoadBalancerElement extends AdapterBase implements LoadBa
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean applyRules(Network config, List<? extends FirewallRule> rules) throws ResourceUnavailableException {
|
||||
public boolean applyLBRules(Network config, List<LoadBalancingRule> rules) throws ResourceUnavailableException {
|
||||
if (!canHandle(config)) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,6 +47,8 @@ import com.cloud.network.RemoteAccessVpn;
|
|||
import com.cloud.network.VpnUser;
|
||||
import com.cloud.network.dao.NetworkDao;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.network.rules.PortForwardingRule;
|
||||
import com.cloud.network.rules.StaticNat;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
import com.cloud.offerings.NetworkOfferingVO;
|
||||
import com.cloud.offerings.dao.NetworkOfferingDao;
|
||||
|
|
@ -58,7 +60,7 @@ import com.cloud.vm.VirtualMachine;
|
|||
import com.cloud.vm.VirtualMachineProfile;
|
||||
|
||||
@Local(value=NetworkElement.class)
|
||||
public class JuniperSRXExternalFirewallElement extends AdapterBase implements SourceNATServiceProvider, FirewallServiceProvider, RemoteAccessVPNServiceProvider {
|
||||
public class JuniperSRXExternalFirewallElement extends AdapterBase implements SourceNatServiceProvider, FirewallServiceProvider, PortForwardingServiceProvider, RemoteAccessVPNServiceProvider {
|
||||
|
||||
private static final Logger s_logger = Logger.getLogger(JuniperSRXExternalFirewallElement.class);
|
||||
|
||||
|
|
@ -142,7 +144,7 @@ public class JuniperSRXExternalFirewallElement extends AdapterBase implements So
|
|||
|
||||
|
||||
@Override
|
||||
public boolean applyRules(Network config, List<? extends FirewallRule> rules) throws ResourceUnavailableException {
|
||||
public boolean applyFWRules(Network config, List<? extends FirewallRule> rules) throws ResourceUnavailableException {
|
||||
if (!canHandle(config)) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -231,6 +233,14 @@ public class JuniperSRXExternalFirewallElement extends AdapterBase implements So
|
|||
return capabilities;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applyPFRules(Network network, List<PortForwardingRule> rules) throws ResourceUnavailableException {
|
||||
if (!canHandle(network)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return _externalNetworkManager.applyFirewallRules(network, rules);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ import com.cloud.network.Network.Provider;
|
|||
import com.cloud.network.Network.Service;
|
||||
import com.cloud.network.NetworkManager;
|
||||
import com.cloud.network.Networks.TrafficType;
|
||||
import com.cloud.network.lb.LoadBalancingRule;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
|
||||
|
|
@ -106,7 +107,7 @@ public class NetscalerExternalLoadBalancerElement extends AdapterBase implements
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean applyRules(Network config, List<? extends FirewallRule> rules) throws ResourceUnavailableException {
|
||||
public boolean applyLBRules(Network config, List<LoadBalancingRule> rules) throws ResourceUnavailableException {
|
||||
if (!canHandle(config)) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,11 +47,13 @@ import com.cloud.network.dao.LoadBalancerDao;
|
|||
import com.cloud.network.dao.NetworkDao;
|
||||
import com.cloud.network.dao.VirtualRouterElementsDao;
|
||||
import com.cloud.network.element.VirtualRouterElements.VirtualRouterElementsType;
|
||||
import com.cloud.network.lb.LoadBalancingRule;
|
||||
import com.cloud.network.lb.LoadBalancingRulesManager;
|
||||
import com.cloud.network.router.VirtualNetworkApplianceManager;
|
||||
import com.cloud.network.router.VirtualRouter;
|
||||
import com.cloud.network.router.VirtualRouter.Role;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.network.rules.PortForwardingRule;
|
||||
import com.cloud.network.rules.RulesManager;
|
||||
import com.cloud.network.rules.StaticNat;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
|
|
@ -70,7 +72,7 @@ import com.cloud.vm.dao.UserVmDao;
|
|||
|
||||
|
||||
@Local(value=NetworkElement.class)
|
||||
public class VirtualRouterElement extends DhcpElement implements VirtualRouterElementService, SourceNATServiceProvider, FirewallServiceProvider, LoadBalancingServiceProvider, StaticNATServiceProvider, RemoteAccessVPNServiceProvider {
|
||||
public class VirtualRouterElement extends DhcpElement implements VirtualRouterElementService, SourceNatServiceProvider, StaticNatServiceProvider, FirewallServiceProvider, LoadBalancingServiceProvider, PortForwardingServiceProvider, RemoteAccessVPNServiceProvider {
|
||||
private static final Logger s_logger = Logger.getLogger(VirtualRouterElement.class);
|
||||
|
||||
private static final Map<Service, Map<Capability, String>> capabilities = setCapabilities();
|
||||
|
|
@ -173,7 +175,7 @@ public class VirtualRouterElement extends DhcpElement implements VirtualRouterEl
|
|||
// }
|
||||
|
||||
@Override
|
||||
public boolean applyRules(Network config, List<? extends FirewallRule> rules) throws ResourceUnavailableException {
|
||||
public boolean applyFWRules(Network config, List<? extends FirewallRule> rules) throws ResourceUnavailableException {
|
||||
|
||||
DataCenter dc = _configMgr.getZone(config.getDataCenterId());
|
||||
if (canHandle(config.getType(), config.getNetworkOfferingId())) {
|
||||
|
|
@ -193,6 +195,25 @@ public class VirtualRouterElement extends DhcpElement implements VirtualRouterEl
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applyLBRules(Network network, List<LoadBalancingRule> rules) throws ResourceUnavailableException {
|
||||
if (canHandle(network.getType(), network.getNetworkOfferingId())) {
|
||||
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.DHCP_FIREWALL_LB_PASSWD_USERDATA);
|
||||
if (routers == null || routers.isEmpty()) {
|
||||
s_logger.debug("Virtual router elemnt doesn't need to apply firewall rules on the backend; virtual router doesn't exist in the network " + network.getId());
|
||||
return true;
|
||||
}
|
||||
|
||||
if(!_routerMgr.applyFirewallRules(network, rules, routers)){
|
||||
throw new CloudRuntimeException("Failed to apply firewall rules in network " + network.getId());
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String[] applyVpnUsers(RemoteAccessVpn vpn, List<? extends VpnUser> users) throws ResourceUnavailableException{
|
||||
|
|
@ -403,4 +424,23 @@ public class VirtualRouterElement extends DhcpElement implements VirtualRouterEl
|
|||
_vrElementsDao.persist(element);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean applyPFRules(Network network, List<PortForwardingRule> rules) throws ResourceUnavailableException {
|
||||
if (canHandle(network.getType(), network.getNetworkOfferingId())) {
|
||||
List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.DHCP_FIREWALL_LB_PASSWD_USERDATA);
|
||||
if (routers == null || routers.isEmpty()) {
|
||||
s_logger.debug("Virtual router elemnt doesn't need to apply firewall rules on the backend; virtual router doesn't exist in the network " + network.getId());
|
||||
return true;
|
||||
}
|
||||
|
||||
if(!_routerMgr.applyFirewallRules(network, rules, routers)){
|
||||
throw new CloudRuntimeException("Failed to apply firewall rules in network " + network.getId());
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,7 +128,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.element.UserDataServiceProvider;
|
||||
import com.cloud.network.lb.LoadBalancingRulesManager;
|
||||
import com.cloud.network.router.VirtualNetworkApplianceManager;
|
||||
import com.cloud.network.rules.FirewallManager;
|
||||
|
|
@ -428,10 +428,10 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
|||
VirtualMachineProfile<VMInstanceVO> vmProfile = new VirtualMachineProfileImpl<VMInstanceVO>(vmInstance);
|
||||
vmProfile.setParameter(VirtualMachineProfile.Param.VmPassword, password);
|
||||
|
||||
List<? extends PasswordServiceProvider> elements = _networkMgr.getPasswordResetElements();
|
||||
List<? extends UserDataServiceProvider> elements = _networkMgr.getPasswordResetElements();
|
||||
|
||||
boolean result = true;
|
||||
for (PasswordServiceProvider element : elements) {
|
||||
for (UserDataServiceProvider element : elements) {
|
||||
if (!element.savePassword(defaultNetwork, defaultNicProfile, vmProfile)) {
|
||||
result = false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue