diff --git a/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java b/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java
index 771b4ac2bbf..5c514c7569b 100644
--- a/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java
+++ b/api/src/com/cloud/api/commands/AssociateIPAddrCmd.java
@@ -42,6 +42,7 @@ import com.cloud.exception.ResourceAllocationException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.network.IpAddress;
import com.cloud.network.Network;
+import com.cloud.user.Account;
import com.cloud.user.UserContext;
@Implementation(description="Acquires and associates a public IP to an account.", responseObject=IPAddressResponse.class)
@@ -134,10 +135,16 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd {
}
@Override
- public long getEntityOwnerId() {
- //owner of the network should be the same as the owner of the ip
- Network network = _networkService.getNetwork(getNetworkId());
- return network.getAccountId();
+ public long getEntityOwnerId() {
+ Account caller = UserContext.current().getCaller();
+ if (accountName != null && domainId != null) {
+ Account account = _accountService.finalizeOwner(caller, accountName, domainId, projectId);
+ return account.getId();
+ } else {
+ Network network = _networkService.getNetwork(getNetworkId());
+ return network.getAccountId();
+ }
+
}
@Override
diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in
index 72135d947cd..4804a3b3359 100755
--- a/client/tomcatconf/components.xml.in
+++ b/client/tomcatconf/components.xml.in
@@ -133,9 +133,9 @@
-
-
-
+
+
+
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java
index ef97ed941d2..e60894c60a8 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -4044,10 +4044,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag
// static NAT rules can not programmed unless IP is associated with network service provider, so run IP association for
// the network so as to ensure IP is associated before applying rules (in add state)
applyIpAssociations(network, false, continueOnError, publicIps);
+
+ //get provider
+ String staticNatProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.StaticNat);
for (NetworkElement ne : _networkElements) {
try {
- if (!(ne instanceof StaticNatServiceProvider)) {
+ if (!(ne instanceof StaticNatServiceProvider && ne.getName().equalsIgnoreCase(staticNatProvider))) {
continue;
}
diff --git a/server/src/com/cloud/network/element/NetscalerElement.java b/server/src/com/cloud/network/element/NetscalerElement.java
index 6b2c0da573c..a395a6f0ff9 100644
--- a/server/src/com/cloud/network/element/NetscalerElement.java
+++ b/server/src/com/cloud/network/element/NetscalerElement.java
@@ -39,6 +39,8 @@ import com.cloud.api.commands.ListNetscalerLoadBalancerNetworksCmd;
import com.cloud.api.commands.ListNetscalerLoadBalancersCmd;
import com.cloud.api.response.NetscalerLoadBalancerResponse;
import com.cloud.configuration.ConfigurationManager;
+import com.cloud.dc.DataCenter;
+import com.cloud.dc.DataCenter.NetworkType;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.deploy.DeployDestination;
import com.cloud.exception.ConcurrentOperationException;
@@ -53,6 +55,7 @@ import com.cloud.host.dao.HostDetailsDao;
import com.cloud.network.ExternalLoadBalancerDeviceManager;
import com.cloud.network.ExternalLoadBalancerDeviceManagerImpl;
import com.cloud.network.ExternalLoadBalancerDeviceVO;
+import com.cloud.network.ExternalLoadBalancerDeviceVO.LBDeviceState;
import com.cloud.network.ExternalNetworkDeviceManager.NetworkDevice;
import com.cloud.network.Network;
import com.cloud.network.Network.Capability;
@@ -72,8 +75,10 @@ import com.cloud.network.dao.NetworkServiceMapDao;
import com.cloud.network.dao.PhysicalNetworkDao;
import com.cloud.network.lb.LoadBalancingRule;
import com.cloud.network.resource.NetscalerResource;
+import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.LbStickinessMethod;
import com.cloud.network.rules.LbStickinessMethod.StickinessMethodType;
+import com.cloud.network.rules.StaticNat;
import com.cloud.offering.NetworkOffering;
import com.cloud.resource.ServerResource;
import com.cloud.utils.component.Inject;
@@ -88,7 +93,7 @@ import com.cloud.vm.VirtualMachineProfile;
import com.google.gson.Gson;
@Local(value=NetworkElement.class)
-public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl implements LoadBalancingServiceProvider, NetscalerLoadBalancerElementService, ExternalLoadBalancerDeviceManager, IpDeployer {
+public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl implements LoadBalancingServiceProvider, NetscalerLoadBalancerElementService, ExternalLoadBalancerDeviceManager, IpDeployer, StaticNatServiceProvider, FirewallServiceProvider {
private static final Logger s_logger = Logger.getLogger(NetscalerElement.class);
@@ -106,8 +111,12 @@ public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl impl
@Inject HostDetailsDao _detailsDao;
private boolean canHandle(Network config) {
- if (config.getGuestType() != Network.GuestType.Isolated || config.getTrafficType() != TrafficType.Guest) {
- s_logger.trace("Not handling network with Type " + config.getGuestType() + " and traffic type " + config.getTrafficType());
+ DataCenter zone = _dcDao.findById(config.getDataCenterId());
+ boolean handleInAdvanceZone = (zone.getNetworkType() == NetworkType.Advanced && config.getGuestType() == Network.GuestType.Isolated && config.getTrafficType() == TrafficType.Guest);
+ boolean handleInBasicZone = (zone.getNetworkType() == NetworkType.Basic && config.getGuestType() == Network.GuestType.Shared && config.getTrafficType() == TrafficType.Guest);
+
+ if (!(handleInAdvanceZone || handleInBasicZone)) {
+ s_logger.trace("Not handling network with Type " + config.getGuestType() + " and traffic type " + config.getTrafficType() + " in zone of type " + zone.getNetworkType());
return false;
}
@@ -216,7 +225,14 @@ public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl impl
staticNatCapabilities.put(Capability.ElasticIp, "true");
capabilities.put(Service.StaticNat, staticNatCapabilities);
- capabilities.put(Service.Firewall, staticNatCapabilities);
+
+ //TODO - Murali, please put correct capabilities here
+ Map firewallCapabilities = new HashMap();
+ firewallCapabilities.put(Capability.TrafficStatistics, "per public ip");
+ firewallCapabilities.put(Capability.SupportedProtocols, "tcp,udp,icmp");
+ firewallCapabilities.put(Capability.MultipleIps, "true");
+
+ capabilities.put(Service.Firewall, firewallCapabilities);
return capabilities;
}
@@ -435,19 +451,17 @@ public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl impl
@Override
public boolean isReady(PhysicalNetworkServiceProvider provider) {
-// List lbDevices = _lbDeviceDao.listByPhysicalNetworkAndProvider(provider.getPhysicalNetworkId(), Provider.Netscaler.getName());
-//
-// // true if at-least one Netscaler device is added in to physical network and is in configured (in enabled state) state
-// if (lbDevices != null && !lbDevices.isEmpty()) {
-// for (ExternalLoadBalancerDeviceVO lbDevice : lbDevices) {
-// if (lbDevice.getState() == LBDeviceState.Enabled) {
-// return true;
-// }
-// }
-// }
-// return false;
- //uncomment later
- return true;
+ List lbDevices = _lbDeviceDao.listByPhysicalNetworkAndProvider(provider.getPhysicalNetworkId(), Provider.Netscaler.getName());
+
+ // true if at-least one Netscaler device is added in to physical network and is in configured (in enabled state) state
+ if (lbDevices != null && !lbDevices.isEmpty()) {
+ for (ExternalLoadBalancerDeviceVO lbDevice : lbDevices) {
+ if (lbDevice.getState() == LBDeviceState.Enabled) {
+ return true;
+ }
+ }
+ }
+ return false;
}
@Override
@@ -487,4 +501,20 @@ public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl impl
public IpDeployer getIpDeployer(Network network) {
return this;
}
+
+ @Override
+ public boolean applyFWRules(Network network,
+ List extends FirewallRule> rules)
+ throws ResourceUnavailableException {
+ // TODO - Murali, your code should go here
+ return true;
+ }
+
+ @Override
+ public boolean applyStaticNats(Network config,
+ List extends StaticNat> rules)
+ throws ResourceUnavailableException {
+ // TODO - Murali, your code should go here
+ return true;
+ }
}
\ No newline at end of file