From e1e96c0bb3f20cd1d5c4d260ff49929a5f2dae8e Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Thu, 27 Oct 2011 11:39:21 -0700 Subject: [PATCH] NaaS: Add ServiceProviders Added PortForwardingServiceProvider, StaticNatServiceProvider, rename PasswordServiceProvider to UserDataServiceProvider(may rename to a better name later). Add related function for service providers. --- .../element/FirewallServiceProvider.java | 2 +- .../element/LoadBalancingServiceProvider.java | 4 +- .../PortForwardingServiceProvider.java | 18 +++++ ...der.java => SourceNatServiceProvider.java} | 2 +- ...der.java => StaticNatServiceProvider.java} | 2 +- ...ider.java => UserDataServiceProvider.java} | 2 +- .../src/com/cloud/network/NetworkManager.java | 4 +- .../com/cloud/network/NetworkManagerImpl.java | 66 +++++++++++-------- .../cloud/network/element/DhcpElement.java | 2 +- .../element/ElasticLoadBalancerElement.java | 3 +- .../F5ExternalLoadBalancerElement.java | 3 +- .../JuniperSRXExternalFirewallElement.java | 14 +++- .../NetscalerExternalLoadBalancerElement.java | 3 +- .../network/element/VirtualRouterElement.java | 44 ++++++++++++- .../src/com/cloud/vm/UserVmManagerImpl.java | 6 +- 15 files changed, 130 insertions(+), 45 deletions(-) create mode 100644 api/src/com/cloud/network/element/PortForwardingServiceProvider.java rename api/src/com/cloud/network/element/{SourceNATServiceProvider.java => SourceNatServiceProvider.java} (88%) rename api/src/com/cloud/network/element/{StaticNATServiceProvider.java => StaticNatServiceProvider.java} (88%) rename api/src/com/cloud/network/element/{PasswordServiceProvider.java => UserDataServiceProvider.java} (85%) diff --git a/api/src/com/cloud/network/element/FirewallServiceProvider.java b/api/src/com/cloud/network/element/FirewallServiceProvider.java index 51818c5bdbb..6f65a0a6928 100644 --- a/api/src/com/cloud/network/element/FirewallServiceProvider.java +++ b/api/src/com/cloud/network/element/FirewallServiceProvider.java @@ -14,5 +14,5 @@ public interface FirewallServiceProvider extends NetworkElement { * @return * @throws ResourceUnavailableException */ - boolean applyRules(Network network, List rules) throws ResourceUnavailableException; + boolean applyFWRules(Network network, List rules) throws ResourceUnavailableException; } diff --git a/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java b/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java index 5bc81d39895..32b9b4776e9 100644 --- a/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java +++ b/api/src/com/cloud/network/element/LoadBalancingServiceProvider.java @@ -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 rules) throws ResourceUnavailableException; + boolean applyLBRules(Network network, List rules) throws ResourceUnavailableException; } diff --git a/api/src/com/cloud/network/element/PortForwardingServiceProvider.java b/api/src/com/cloud/network/element/PortForwardingServiceProvider.java new file mode 100644 index 00000000000..bdd6bc01da4 --- /dev/null +++ b/api/src/com/cloud/network/element/PortForwardingServiceProvider.java @@ -0,0 +1,18 @@ +package com.cloud.network.element; + +import java.util.List; + +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.Network; +import com.cloud.network.rules.PortForwardingRule; + +public interface PortForwardingServiceProvider extends NetworkElement { + /** + * Apply rules + * @param network + * @param rules + * @return + * @throws ResourceUnavailableException + */ + boolean applyPFRules(Network network, List rules) throws ResourceUnavailableException; +} diff --git a/api/src/com/cloud/network/element/SourceNATServiceProvider.java b/api/src/com/cloud/network/element/SourceNatServiceProvider.java similarity index 88% rename from api/src/com/cloud/network/element/SourceNATServiceProvider.java rename to api/src/com/cloud/network/element/SourceNatServiceProvider.java index 1f395953d0b..707937fb234 100644 --- a/api/src/com/cloud/network/element/SourceNATServiceProvider.java +++ b/api/src/com/cloud/network/element/SourceNatServiceProvider.java @@ -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 diff --git a/api/src/com/cloud/network/element/StaticNATServiceProvider.java b/api/src/com/cloud/network/element/StaticNatServiceProvider.java similarity index 88% rename from api/src/com/cloud/network/element/StaticNATServiceProvider.java rename to api/src/com/cloud/network/element/StaticNatServiceProvider.java index a134be39d91..c73ce2b77c5 100644 --- a/api/src/com/cloud/network/element/StaticNATServiceProvider.java +++ b/api/src/com/cloud/network/element/StaticNatServiceProvider.java @@ -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 diff --git a/api/src/com/cloud/network/element/PasswordServiceProvider.java b/api/src/com/cloud/network/element/UserDataServiceProvider.java similarity index 85% rename from api/src/com/cloud/network/element/PasswordServiceProvider.java rename to api/src/com/cloud/network/element/UserDataServiceProvider.java index f933aa9202f..179cd8fa2f8 100644 --- a/api/src/com/cloud/network/element/PasswordServiceProvider.java +++ b/api/src/com/cloud/network/element/UserDataServiceProvider.java @@ -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 vm) throws ResourceUnavailableException; } diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 99dd28c75de..fc0e50b83d3 100644 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -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 getPasswordResetElements(); + List getPasswordResetElements(); @Deprecated boolean zoneIsConfiguredForExternalNetworking(long zoneId); diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index bad8ae2010c..a5fa4245b30 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -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 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)rules); + break; + case PortForwarding: + if (!(ne instanceof PortForwardingServiceProvider)) { + continue; + } + handled = ((PortForwardingServiceProvider)ne).applyPFRules(network, (List)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 getPasswordResetElements() { - List elements = new ArrayList(); + public List getPasswordResetElements() { + List elements = new ArrayList(); 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) { diff --git a/server/src/com/cloud/network/element/DhcpElement.java b/server/src/com/cloud/network/element/DhcpElement.java index 4ab7aaa10ae..cdb64ffd4ef 100644 --- a/server/src/com/cloud/network/element/DhcpElement.java +++ b/server/src/com/cloud/network/element/DhcpElement.java @@ -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> capabilities = setCapabilities(); diff --git a/server/src/com/cloud/network/element/ElasticLoadBalancerElement.java b/server/src/com/cloud/network/element/ElasticLoadBalancerElement.java index 212e346b33d..e5bf52c0bc0 100644 --- a/server/src/com/cloud/network/element/ElasticLoadBalancerElement.java +++ b/server/src/com/cloud/network/element/ElasticLoadBalancerElement.java @@ -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 rules) throws ResourceUnavailableException { + public boolean applyLBRules(Network network, List rules) throws ResourceUnavailableException { if (!canHandle(network)) { return false; } diff --git a/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index db8339306f9..7b52c7e8898 100644 --- a/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/server/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -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 rules) throws ResourceUnavailableException { + public boolean applyLBRules(Network config, List rules) throws ResourceUnavailableException { if (!canHandle(config)) { return false; } diff --git a/server/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/server/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 88530899fe7..7f2a24ccb45 100644 --- a/server/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/server/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -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 rules) throws ResourceUnavailableException { + public boolean applyFWRules(Network config, List 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 rules) throws ResourceUnavailableException { + if (!canHandle(network)) { + return false; + } + + return _externalNetworkManager.applyFirewallRules(network, rules); + } } diff --git a/server/src/com/cloud/network/element/NetscalerExternalLoadBalancerElement.java b/server/src/com/cloud/network/element/NetscalerExternalLoadBalancerElement.java index 07cb5c082de..51d4aa201b7 100644 --- a/server/src/com/cloud/network/element/NetscalerExternalLoadBalancerElement.java +++ b/server/src/com/cloud/network/element/NetscalerExternalLoadBalancerElement.java @@ -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 rules) throws ResourceUnavailableException { + public boolean applyLBRules(Network config, List rules) throws ResourceUnavailableException { if (!canHandle(config)) { return false; } diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 5bbcffd8745..a0c067e6107 100644 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -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> capabilities = setCapabilities(); @@ -173,7 +175,7 @@ public class VirtualRouterElement extends DhcpElement implements VirtualRouterEl // } @Override - public boolean applyRules(Network config, List rules) throws ResourceUnavailableException { + public boolean applyFWRules(Network config, List 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 rules) throws ResourceUnavailableException { + if (canHandle(network.getType(), network.getNetworkOfferingId())) { + List 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 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 rules) throws ResourceUnavailableException { + if (canHandle(network.getType(), network.getNetworkOfferingId())) { + List 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; + } + } } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 13da1a6ae10..e75b760df97 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -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 vmProfile = new VirtualMachineProfileImpl(vmInstance); vmProfile.setParameter(VirtualMachineProfile.Param.VmPassword, password); - List elements = _networkMgr.getPasswordResetElements(); + List elements = _networkMgr.getPasswordResetElements(); boolean result = true; - for (PasswordServiceProvider element : elements) { + for (UserDataServiceProvider element : elements) { if (!element.savePassword(defaultNetwork, defaultNicProfile, vmProfile)) { result = false; }