From b0a1a47d48570b1026bbb24ced6e10f23fd2463d Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Thu, 3 Jan 2013 15:05:12 -0800 Subject: [PATCH 01/90] Not all network service providers need to be NetworkElements. NetworkElements are only those that are interested in L2 events. Since only NetworkElements were injected, and only in NetworkManagerImpl, this has led to all kinds of contortions. As a first step, enable individual service providers to be injected. Signed-off-by: Chiradeep Vittal --- .../com/cloud/network/element/IpDeployer.java | 3 +- client/tomcatconf/components.xml.in | 35 +++++++++++++++++++ .../JuniperSRXExternalFirewallElement.java | 2 +- .../com/cloud/network/NetworkManagerImpl.java | 2 ++ .../network/element/VirtualRouterElement.java | 5 ++- .../network/firewall/FirewallManagerImpl.java | 6 ++++ 6 files changed, 50 insertions(+), 3 deletions(-) diff --git a/api/src/com/cloud/network/element/IpDeployer.java b/api/src/com/cloud/network/element/IpDeployer.java index 3eebe82cf2e..8036d4b7bf2 100644 --- a/api/src/com/cloud/network/element/IpDeployer.java +++ b/api/src/com/cloud/network/element/IpDeployer.java @@ -23,8 +23,9 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; import com.cloud.network.Network.Service; import com.cloud.network.PublicIpAddress; +import com.cloud.utils.component.Adapter; -public interface IpDeployer { +public interface IpDeployer extends Adapter{ /** * Apply ip addresses to this network * @param network diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index 5957b61c0fb..49c075b117c 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -159,6 +159,41 @@ under the License. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 95bc031726a..fc47f3d7af9 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -88,7 +88,7 @@ import com.cloud.vm.ReservationContext; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; -@Local(value = NetworkElement.class) +@Local(value = {NetworkElement.class, FirewallServiceProvider.class}) public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceManagerImpl implements SourceNatServiceProvider, FirewallServiceProvider, PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer, JuniperSRXFirewallElementService { diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 3f8b08519ad..ef331e5e889 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -185,6 +185,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Adapters _networkGurus; @Inject(adapter = NetworkElement.class) Adapters _networkElements; + @Inject(adapter = IpDeployer.class) + Adapters _ipDeployers; @Inject NetworkDomainDao _networkDomainDao; @Inject diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 4ff10820ec7..abd9a507d9d 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -88,7 +88,10 @@ import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.UserVmDao; import com.google.gson.Gson; -@Local(value = NetworkElement.class) +@Local(value = {NetworkElement.class, FirewallServiceProvider.class, + DhcpServiceProvider.class, UserDataServiceProvider.class, + StaticNatServiceProvider.class, LoadBalancingServiceProvider.class, + PortForwardingServiceProvider.class, IpDeployer.class, RemoteAccessVPNServiceProvider.class} ) public class VirtualRouterElement extends AdapterBase implements VirtualRouterElementService, DhcpServiceProvider, UserDataServiceProvider, SourceNatServiceProvider, StaticNatServiceProvider, FirewallServiceProvider, LoadBalancingServiceProvider, PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer { diff --git a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java index 6e3805bac59..54611e11555 100644 --- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java +++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java @@ -49,6 +49,8 @@ import com.cloud.network.NetworkManager; import com.cloud.network.dao.FirewallRulesCidrsDao; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.element.FirewallServiceProvider; +import com.cloud.network.element.NetworkElement; import com.cloud.network.rules.FirewallManager; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.FirewallRuleType; @@ -69,6 +71,7 @@ import com.cloud.user.UserContext; import com.cloud.utils.IdentityProxy; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; +import com.cloud.utils.component.Adapters; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; @@ -116,6 +119,8 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma ResourceTagDao _resourceTagDao; @Inject VpcManager _vpcMgr; + @Inject(adapter = FirewallServiceProvider.class) + Adapters _firewallElements; private boolean _elbEnabled = false; @@ -139,6 +144,7 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma _name = name; String elbEnabledString = _configDao.getValue(Config.ElasticLoadBalancerEnabled.key()); _elbEnabled = Boolean.parseBoolean(elbEnabledString); + s_logger.info("Firewall provider list is " + _firewallElements.iterator().next()); return true; } From 3529c472489fc9008b2107afad169dfdb1e1440d Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Thu, 3 Jan 2013 23:56:55 -0800 Subject: [PATCH 02/90] Rationalize the interface by injecting ipDeployers. This is step 1 and includes 2 service providers - Remote AccessVPN and S2S VPN Signed-off-by: Chiradeep Vittal --- .../RemoteAccessVPNServiceProvider.java | 5 ++-- .../element/Site2SiteVpnServiceProvider.java | 4 ++-- .../vpn/RemoteAccessVpnManagerImpl.java | 24 +++++++++++++------ .../network/vpn/Site2SiteVpnManagerImpl.java | 12 ++++------ 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java b/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java index d799b0bf4e3..2eb0389226f 100644 --- a/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java +++ b/api/src/com/cloud/network/element/RemoteAccessVPNServiceProvider.java @@ -22,13 +22,12 @@ 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 RemoteAccessVPNServiceProvider extends NetworkElement { +public interface RemoteAccessVPNServiceProvider 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; - - IpDeployer getIpDeployer(Network network); } diff --git a/api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java b/api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java index 8063cbb5642..eadf8013602 100644 --- a/api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java +++ b/api/src/com/cloud/network/element/Site2SiteVpnServiceProvider.java @@ -17,10 +17,10 @@ package com.cloud.network.element; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.network.Network; import com.cloud.network.Site2SiteVpnConnection; +import com.cloud.utils.component.Adapter; -public interface Site2SiteVpnServiceProvider extends NetworkElement { +public interface Site2SiteVpnServiceProvider extends Adapter { boolean startSite2SiteVpn(Site2SiteVpnConnection conn) throws ResourceUnavailableException; boolean stopSite2SiteVpn(Site2SiteVpnConnection conn) throws ResourceUnavailableException; diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java index a1345910bce..45b5d197202 100755 --- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java @@ -17,6 +17,7 @@ package com.cloud.network.vpn; import java.util.ArrayList; +import java.util.Enumeration; import java.util.List; import java.util.Map; @@ -52,6 +53,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.NetworkElement; import com.cloud.network.element.RemoteAccessVPNServiceProvider; import com.cloud.network.rules.FirewallManager; import com.cloud.network.rules.FirewallRule; @@ -68,6 +70,7 @@ import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.PasswordGenerator; import com.cloud.utils.Ternary; +import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; @@ -97,6 +100,9 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag @Inject FirewallRulesDao _rulesDao; @Inject FirewallManager _firewallMgr; @Inject UsageEventDao _usageEventDao; + @Inject(adapter = RemoteAccessVPNServiceProvider.class) + Adapters _vpnServiceProviders; + int _userLimit; int _pskLength; @@ -227,10 +233,9 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag _remoteAccessVpnDao.update(vpn.getServerAddressId(), vpn); - List elements = _networkMgr.getRemoteAccessVpnElements(); boolean success = false; try { - for (RemoteAccessVPNServiceProvider element : elements) { + for (RemoteAccessVPNServiceProvider element : _vpnServiceProviders) { if (element.stopVpn(network, vpn)) { success = true; break; @@ -374,7 +379,6 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag Network network = _networkMgr.getNetwork(vpn.getNetworkId()); - List elements = _networkMgr.getRemoteAccessVpnElements(); boolean started = false; try { boolean firewallOpened = true; @@ -383,7 +387,7 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag } if (firewallOpened) { - for (RemoteAccessVPNServiceProvider element : elements) { + for (RemoteAccessVPNServiceProvider element : _vpnServiceProviders) { if (element.startVpn(network, vpn)) { started = true; break; @@ -432,12 +436,10 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag } } - List elements = _networkMgr.getRemoteAccessVpnElements(); - boolean success = true; boolean[] finals = new boolean[users.size()]; - for (RemoteAccessVPNServiceProvider element : elements) { + for (RemoteAccessVPNServiceProvider element : _vpnServiceProviders) { s_logger.debug("Applying vpn access to " + element.getName()); for (RemoteAccessVpnVO vpn : vpns) { try { @@ -630,4 +632,12 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag return _remoteAccessVpnDao.findById(vpnId); } + public List getRemoteAccessVPNServiceProviders() { + List result = new ArrayList(); + for (Enumeration e = _vpnServiceProviders.enumeration(); e.hasMoreElements();) { + result.add(e.nextElement()); + } + + return result; + } } diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java index da993d0b754..9d0f89f57f7 100644 --- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java @@ -44,7 +44,6 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.IPAddressVO; -import com.cloud.network.NetworkManager; import com.cloud.network.Site2SiteCustomerGateway; import com.cloud.network.Site2SiteCustomerGatewayVO; import com.cloud.network.Site2SiteVpnConnection; @@ -65,10 +64,10 @@ import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; -import com.cloud.user.dao.UserStatisticsDao; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; +import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; @@ -85,10 +84,11 @@ import com.cloud.vm.DomainRouterVO; public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { private static final Logger s_logger = Logger.getLogger(Site2SiteVpnManagerImpl.class); + @Inject (adapter = Site2SiteVpnServiceProvider.class) + Adapters _s2sProviders; @Inject Site2SiteCustomerGatewayDao _customerGatewayDao; @Inject Site2SiteVpnGatewayDao _vpnGatewayDao; @Inject Site2SiteVpnConnectionDao _vpnConnectionDao; - @Inject NetworkManager _networkMgr; @Inject VpcDao _vpcDao; @Inject IPAddressDao _ipAddressDao; @Inject AccountDao _accountDao; @@ -328,9 +328,8 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { conn.setState(State.Pending); _vpnConnectionDao.persist(conn); - List elements = _networkMgr.getSite2SiteVpnElements(); boolean result = true; - for (Site2SiteVpnServiceProvider element : elements) { + for (Site2SiteVpnServiceProvider element : _s2sProviders) { result = result & element.startSite2SiteVpn(conn); } @@ -528,9 +527,8 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { conn.setState(State.Disconnected); _vpnConnectionDao.persist(conn); - List elements = _networkMgr.getSite2SiteVpnElements(); boolean result = true; - for (Site2SiteVpnServiceProvider element : elements) { + for (Site2SiteVpnServiceProvider element : _s2sProviders) { result = result & element.stopSite2SiteVpn(conn); } From e37f458a8dae361fafaf39e580236fa75ced1801 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Fri, 4 Jan 2013 13:58:37 -0800 Subject: [PATCH 03/90] Rationalize the interface by injecting all service providers by the service provider interface instead of assuming everybody implements NetworkElement. This is step 2 and includes all the plugins import cleanups - remove unneeded and add explicit classes Signed-off-by: Chiradeep Vittal --- .../F5ExternalLoadBalancerElement.java | 3 +- .../JuniperSRXExternalFirewallElement.java | 4 +- .../network/element/NetscalerElement.java | 2 +- .../network/element/NiciraNvpElement.java | 4 +- .../com/cloud/network/element/OvsElement.java | 2 +- .../src/com/cloud/network/NetworkManager.java | 4 - .../com/cloud/network/NetworkManagerImpl.java | 94 ++++++++++--------- .../element/VpcVirtualRouterElement.java | 2 +- 8 files changed, 61 insertions(+), 54 deletions(-) diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index 579a4628c74..b5f6248770e 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -88,7 +88,8 @@ import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; import com.google.gson.Gson; -@Local(value = NetworkElement.class) +@Local(value = {NetworkElement.class, LoadBalancingServiceProvider.class, + IpDeployer.class}) public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceManagerImpl implements LoadBalancingServiceProvider, IpDeployer, F5ExternalLoadBalancerElementService, ExternalLoadBalancerDeviceManager { private static final Logger s_logger = Logger.getLogger(F5ExternalLoadBalancerElement.class); diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index fc47f3d7af9..29daf3a76da 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -88,7 +88,9 @@ import com.cloud.vm.ReservationContext; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; -@Local(value = {NetworkElement.class, FirewallServiceProvider.class}) +@Local(value = {NetworkElement.class, FirewallServiceProvider.class, + PortForwardingServiceProvider.class, IpDeployer.class, + SourceNatServiceProvider.class, RemoteAccessVPNServiceProvider.class}) public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceManagerImpl implements SourceNatServiceProvider, FirewallServiceProvider, PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer, JuniperSRXFirewallElementService { diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index 987e937952d..a1528cea096 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -108,7 +108,7 @@ import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; import com.google.gson.Gson; -@Local(value = NetworkElement.class) +@Local(value = {NetworkElement.class, StaticNatServiceProvider.class, LoadBalancingServiceProvider.class}) public class NetscalerElement extends ExternalLoadBalancerDeviceManagerImpl implements LoadBalancingServiceProvider, NetscalerLoadBalancerElementService, ExternalLoadBalancerDeviceManager, IpDeployer, StaticNatServiceProvider { diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java index 0a7d042a96d..90866ed0fc2 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java @@ -122,7 +122,9 @@ import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.dao.NicDao; -@Local(value = NetworkElement.class) +@Local(value = {NetworkElement.class, ConnectivityProvider.class, + SourceNatServiceProvider.class, StaticNatServiceProvider.class, + PortForwardingServiceProvider.class, IpDeployer.class} ) public class NiciraNvpElement extends AdapterBase implements ConnectivityProvider, SourceNatServiceProvider, PortForwardingServiceProvider, StaticNatServiceProvider, diff --git a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java index 5e8639c3188..e8285587957 100644 --- a/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java +++ b/plugins/network-elements/ovs/src/com/cloud/network/element/OvsElement.java @@ -40,7 +40,7 @@ import com.cloud.vm.ReservationContext; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; -@Local(value = NetworkElement.class) +@Local(value = {NetworkElement.class}) public class OvsElement extends AdapterBase implements NetworkElement { @Inject OvsTunnelManager _ovsTunnelMgr; diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 057f473e732..0646789a1b3 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -139,11 +139,7 @@ public interface NetworkManager extends NetworkService { boolean applyRules(List rules, boolean continueOnError) throws ResourceUnavailableException; public boolean validateRule(FirewallRule rule); - - List getRemoteAccessVpnElements(); - List getSite2SiteVpnElements(); - PublicIpAddress getPublicIpAddress(long ipAddressId); List listPodVlans(long podId); diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index ef331e5e889..a1604ae97a5 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -67,8 +67,28 @@ import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetwork.BroadcastDomainRange; import com.cloud.network.VirtualRouterProvider.VirtualRouterProviderType; import com.cloud.network.addr.PublicIp; -import com.cloud.network.dao.*; -import com.cloud.network.element.*; +import com.cloud.network.dao.FirewallRulesDao; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.LoadBalancerDao; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDomainDao; +import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderVO; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; +import com.cloud.network.element.DhcpServiceProvider; +import com.cloud.network.element.FirewallServiceProvider; +import com.cloud.network.element.IpDeployer; +import com.cloud.network.element.LoadBalancingServiceProvider; +import com.cloud.network.element.NetworkACLServiceProvider; +import com.cloud.network.element.NetworkElement; +import com.cloud.network.element.PortForwardingServiceProvider; +import com.cloud.network.element.StaticNatServiceProvider; +import com.cloud.network.element.UserDataServiceProvider; +import com.cloud.network.element.VirtualRouterElement; +import com.cloud.network.element.VpcVirtualRouterElement; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.lb.LoadBalancingRule.LbDestination; @@ -110,13 +130,23 @@ import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.Ip; import com.cloud.utils.net.NetUtils; -import com.cloud.vm.*; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.NicVO; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.ReservationContextImpl; +import com.cloud.vm.SecondaryStorageVmVO; +import com.cloud.vm.UserVmVO; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.Type; +import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachineProfileImpl; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; -import edu.emory.mathcs.backport.java.util.Collections; + import org.apache.log4j.Logger; import javax.ejb.Local; @@ -187,6 +217,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Adapters _networkElements; @Inject(adapter = IpDeployer.class) Adapters _ipDeployers; + @Inject(adapter = DhcpServiceProvider.class) + Adapters _dhcpProviders; @Inject NetworkDomainDao _networkDomainDao; @Inject @@ -852,20 +884,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } IpDeployer deployer = null; NetworkElement element = getElementImplementingProvider(provider.getName()); - if (element instanceof SourceNatServiceProvider) { - deployer = ((SourceNatServiceProvider) element).getIpDeployer(network); - } else if (element instanceof StaticNatServiceProvider) { - deployer = ((StaticNatServiceProvider) element).getIpDeployer(network); - } else if (element instanceof LoadBalancingServiceProvider) { - deployer = ((LoadBalancingServiceProvider) element).getIpDeployer(network); - } else if (element instanceof PortForwardingServiceProvider) { - deployer = ((PortForwardingServiceProvider) element).getIpDeployer(network); - } else if (element instanceof RemoteAccessVPNServiceProvider) { - deployer = ((RemoteAccessVPNServiceProvider) element).getIpDeployer(network); - } else if (element instanceof ConnectivityProvider) { - // Nothing to do - s_logger.debug("ConnectivityProvider " + element.getClass().getSimpleName() + " has no ip associations"); - continue; + if (element instanceof IpDeployer) { + deployer = (IpDeployer) element; } else { throw new CloudRuntimeException("Fail to get ip deployer for element: " + element); } @@ -2387,31 +2407,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return _networksDao.findById(id); } - @Override - public List getRemoteAccessVpnElements() { - List elements = new ArrayList(); - for (NetworkElement element : _networkElements) { - if (element instanceof RemoteAccessVPNServiceProvider) { - RemoteAccessVPNServiceProvider e = (RemoteAccessVPNServiceProvider) element; - elements.add(e); - } - } - - return elements; - } - - @Override - public List getSite2SiteVpnElements() { - List elements = new ArrayList(); - for (NetworkElement element : _networkElements) { - if (element instanceof Site2SiteVpnServiceProvider) { - Site2SiteVpnServiceProvider e = (Site2SiteVpnServiceProvider) element; - elements.add(e); - } - } - - return elements; - } @Override public void cleanupNics(VirtualMachineProfile vm) { @@ -4542,7 +4537,18 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override public List listNetworksForAccount(long accountId, long zoneId, Network.GuestType type) { - List accountNetworks = _networksDao.listNetworksByAccount(accountId, zoneId, type, false); + List accountNetworks = new ArrayList(); + List zoneNetworks = _networksDao.listByZone(zoneId); + + for (NetworkVO network : zoneNetworks) { + if (!isNetworkSystem(network)) { + if (network.getGuestType() == Network.GuestType.Shared || !_networksDao.listBy(accountId, network.getId()).isEmpty()) { + if (type == null || type == network.getGuestType()) { + accountNetworks.add(network); + } + } + } + } return accountNetworks; } diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java index 0acc47d7d88..71da967fc6f 100644 --- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java @@ -61,7 +61,7 @@ import com.cloud.vm.ReservationContext; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.VirtualMachineProfile; -@Local(value = NetworkElement.class) +@Local(value = {NetworkElement.class, Site2SiteVpnServiceProvider.class}) public class VpcVirtualRouterElement extends VirtualRouterElement implements VpcProvider, Site2SiteVpnServiceProvider, NetworkACLServiceProvider{ private static final Logger s_logger = Logger.getLogger(VpcVirtualRouterElement.class); @Inject From a64b38671496729e67a845aeb83fabbaccefba18 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Fri, 4 Jan 2013 19:22:53 -0800 Subject: [PATCH 04/90] Move applyRules to the rightful place(s). Not sure why applyIps is required during applyRules, so we still have a reference back into a (simplified) applyRules in NetworkManager --- .../src/com/cloud/network/NetworkManager.java | 5 +- .../com/cloud/network/NetworkManagerImpl.java | 43 +++++++++++++ .../com/cloud/network/NetworkRuleApplier.java | 28 ++++++++ .../network/firewall/FirewallManagerImpl.java | 64 ++++++++++++++++++- .../lb/LoadBalancingRulesManagerImpl.java | 28 ++++++-- 5 files changed, 158 insertions(+), 10 deletions(-) create mode 100644 server/src/com/cloud/network/NetworkRuleApplier.java diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 0646789a1b3..0d281aa47ef 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -41,8 +41,6 @@ import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; import com.cloud.network.element.NetworkElement; -import com.cloud.network.element.RemoteAccessVPNServiceProvider; -import com.cloud.network.element.Site2SiteVpnServiceProvider; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.rules.FirewallRule; @@ -50,7 +48,6 @@ import com.cloud.network.rules.StaticNat; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.user.Account; -import com.cloud.uservm.UserVm; import com.cloud.utils.Pair; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; @@ -137,6 +134,8 @@ public interface NetworkManager extends NetworkService { String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException; boolean applyRules(List rules, boolean continueOnError) throws ResourceUnavailableException; + + boolean applyRules(List rules, FirewallRule.Purpose purpose, NetworkRuleApplier applier, boolean continueOnError) throws ResourceUnavailableException; public boolean validateRule(FirewallRule rule); diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index a1604ae97a5..e7877de78d1 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -3740,6 +3740,49 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return true; } + @Override + public boolean applyRules(List rules, FirewallRule.Purpose purpose, + NetworkRuleApplier applier, boolean continueOnError) throws ResourceUnavailableException { + if (rules == null || rules.size() == 0) { + s_logger.debug("There are no rules to forward to the network elements"); + return true; + } + + boolean success = true; + Network network = _networksDao.findById(rules.get(0).getNetworkId()); + + // get the list of public ip's owned by the network + List userIps = _ipAddressDao.listByAssociatedNetwork(network.getId(), null); + List publicIps = new ArrayList(); + if (userIps != null && !userIps.isEmpty()) { + for (IPAddressVO userIp : userIps) { + PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); + publicIps.add(publicIp); + } + } + + // rules can not programmed unless IP is associated with network service provider, so run IP assoication for + // the network so as to ensure IP is associated before applying rules (in add state) + applyIpAssociations(network, false, continueOnError, publicIps); + + try { + applier.applyRules(network, purpose, rules); + } catch (ResourceUnavailableException e) { + if (!continueOnError) { + throw e; + } + s_logger.warn("Problems with applying " + purpose + " rules but pushing on", e); + success = false; + } + + // if all the rules configured on public IP are revoked then dis-associate IP with network service provider + applyIpAssociations(network, true, continueOnError, publicIps); + + return success; + } + + + @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 { diff --git a/server/src/com/cloud/network/NetworkRuleApplier.java b/server/src/com/cloud/network/NetworkRuleApplier.java new file mode 100644 index 00000000000..31763d0ac54 --- /dev/null +++ b/server/src/com/cloud/network/NetworkRuleApplier.java @@ -0,0 +1,28 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + +import java.util.List; + +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.rules.FirewallRule; + +public interface NetworkRuleApplier { + public boolean applyRules(Network network, FirewallRule.Purpose purpose, List rules) throws ResourceUnavailableException; + +} \ No newline at end of file diff --git a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java index 54611e11555..8e781ec2387 100644 --- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java +++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java @@ -46,18 +46,24 @@ import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkRuleApplier; import com.cloud.network.dao.FirewallRulesCidrsDao; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.element.FirewallServiceProvider; +import com.cloud.network.element.NetworkACLServiceProvider; import com.cloud.network.element.NetworkElement; +import com.cloud.network.element.PortForwardingServiceProvider; +import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.rules.FirewallManager; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.FirewallRuleType; import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.FirewallRule.State; import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.PortForwardingRuleVO; +import com.cloud.network.rules.StaticNat; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.network.vpc.VpcManager; import com.cloud.projects.Project.ListProjectResourcesCriteria; @@ -87,7 +93,7 @@ import com.cloud.vm.UserVmVO; import com.cloud.vm.dao.UserVmDao; @Local(value = { FirewallService.class, FirewallManager.class}) -public class FirewallManagerImpl implements FirewallService, FirewallManager, Manager { +public class FirewallManagerImpl implements FirewallService, FirewallManager, NetworkRuleApplier, Manager { private static final Logger s_logger = Logger.getLogger(FirewallManagerImpl.class); String _name; @@ -122,6 +128,15 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma @Inject(adapter = FirewallServiceProvider.class) Adapters _firewallElements; + @Inject(adapter = PortForwardingServiceProvider.class) + Adapters _pfElements; + + @Inject(adapter = StaticNatServiceProvider.class) + Adapters _staticNatElements; + + @Inject(adapter = NetworkACLServiceProvider.class) + Adapters _networkAclElements; + private boolean _elbEnabled = false; @Override @@ -434,7 +449,12 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma public boolean applyRules(List rules, boolean continueOnError, boolean updateRulesInDB) throws ResourceUnavailableException { boolean success = true; - if (!_networkMgr.applyRules(rules, continueOnError)) { + if (rules == null || rules.size() == 0) { + s_logger.debug("There are no rules to forward to the network elements"); + return true; + } + Purpose purpose = rules.get(0).getPurpose(); + if (!_networkMgr.applyRules(rules, purpose, this, continueOnError)) { s_logger.warn("Rules are not completely applied"); return false; } else { @@ -466,6 +486,46 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ma return success; } + @Override + public boolean applyRules(Network network, Purpose purpose, List rules) + throws ResourceUnavailableException { + boolean handled = false; + switch (purpose){ + case Firewall: + for (FirewallServiceProvider fwElement: _firewallElements) { + handled = fwElement.applyFWRules(network, rules); + if (handled) + break; + } + case PortForwarding: + for (PortForwardingServiceProvider element: _pfElements) { + handled = element.applyPFRules(network, (List) rules); + if (handled) + break; + } + break; + case StaticNat: + for (StaticNatServiceProvider element: _staticNatElements) { + handled = element.applyStaticNats(network, (List) rules); + if (handled) + break; + } + break; + case NetworkACL: + for (NetworkACLServiceProvider element: _networkAclElements) { + handled = element.applyNetworkACLs(network, (List) rules); + if (handled) + break; + } + break; + default: + assert(false): "Unexpected fall through in applying rules to the network elements"; + s_logger.error("FirewallManager cannot process rules of type " + purpose); + throw new CloudRuntimeException("FirewallManager cannot process rules of type " + purpose); + } + return handled; + } + @Override public void removeRule(FirewallRule rule) { diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 6346bc3fd6a..aa89474faa8 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -68,6 +68,7 @@ import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkRuleApplier; import com.cloud.network.NetworkVO; import com.cloud.network.as.AutoScalePolicy; import com.cloud.network.as.AutoScalePolicyConditionMapVO; @@ -92,6 +93,7 @@ import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.LoadBalancerVMMapDao; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.element.LoadBalancingServiceProvider; import com.cloud.network.lb.LoadBalancingRule.LbAutoScalePolicy; import com.cloud.network.lb.LoadBalancingRule.LbAutoScaleVmGroup; import com.cloud.network.lb.LoadBalancingRule.LbAutoScaleVmProfile; @@ -125,9 +127,9 @@ import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.UserDao; import com.cloud.uservm.UserVm; -import com.cloud.utils.IdentityProxy; import com.cloud.utils.Pair; import com.cloud.utils.Ternary; +import com.cloud.utils.component.Adapters; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; @@ -147,7 +149,7 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @Local(value = { LoadBalancingRulesManager.class, LoadBalancingRulesService.class }) -public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesManager, LoadBalancingRulesService, Manager { +public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesManager, LoadBalancingRulesService, NetworkRuleApplier, Manager { private static final Logger s_logger = Logger.getLogger(LoadBalancingRulesManagerImpl.class); String _name; @@ -226,7 +228,8 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa DataCenterDao _dcDao = null; @Inject UserDao _userDao; - + @Inject(adapter = LoadBalancingServiceProvider.class) + Adapters _lbProviders; // Will return a string. For LB Stickiness this will be a json, for autoscale this will be "," separated values @Override @@ -324,7 +327,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa List rules = Arrays.asList(rule); - if (!_networkMgr.applyRules(rules, false)) { + if (!_networkMgr.applyRules(rules, FirewallRule.Purpose.LoadBalancing, this, false)) { s_logger.debug("LB rules' autoscale config are not completely applied"); return false; } @@ -1119,6 +1122,19 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa return true; } } + + @Override + public boolean applyRules(Network network, Purpose purpose, List rules) + throws ResourceUnavailableException { + assert(purpose == Purpose.LoadBalancing): "LB Manager asked to handle non-LB rules"; + boolean handled = false; + for (LoadBalancingServiceProvider lbElement: _lbProviders) { + handled = lbElement.applyLBRules(network, (List) rules); + if (handled) + break; + } + return handled; + } @DB protected boolean applyLoadBalancerRules(List lbs, boolean updateRulesInDB) throws ResourceUnavailableException { @@ -1132,7 +1148,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa rules.add(loadBalancing); } - if (!_networkMgr.applyRules(rules, false)) { + if (!_networkMgr.applyRules(rules, FirewallRule.Purpose.LoadBalancing, this, false)) { s_logger.debug("LB rules are not completely applied"); return false; } @@ -1569,4 +1585,6 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa //remove the rule _lbDao.remove(rule.getId()); } + + } From f4da21998c3ea830cc222876ddafca5ff4e8d814 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Mon, 7 Jan 2013 11:10:48 -0800 Subject: [PATCH 05/90] WIP : extract NetworkService WIP : move stuff between network manager and network service. at this point there is about 700 lines of duplicated code WIP: Leave creation of default offerings to NetworkManager init WIP: clean up imports Signed-off-by: Chiradeep Vittal --- api/src/com/cloud/network/NetworkService.java | 25 +- .../ConfigurationManagerImpl.java | 5 +- .../src/com/cloud/network/NetworkManager.java | 67 +- .../com/cloud/network/NetworkManagerImpl.java | 2564 +------------- .../com/cloud/network/NetworkServiceImpl.java | 2964 +++++++++++++++++ 5 files changed, 3150 insertions(+), 2475 deletions(-) create mode 100755 server/src/com/cloud/network/NetworkServiceImpl.java diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index e7b6defd413..94a08d21cd7 100755 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -17,8 +17,6 @@ package com.cloud.network; import java.util.List; -import java.util.Map; -import java.util.Set; import com.cloud.api.commands.CreateNetworkCmd; import com.cloud.api.commands.ListNetworksCmd; @@ -29,8 +27,6 @@ import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.network.Network.Capability; -import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.user.Account; @@ -63,22 +59,12 @@ public interface NetworkService { IpAddress getIp(long id); - NetworkProfile convertNetworkToNetworkProfile(long networkId); - - Map> getNetworkCapabilities(long networkId); boolean isNetworkAvailableInDomain(long networkId, long domainId); - Long getDedicatedNetworkDomain(long networkId); - Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr); - Integer getNetworkRate(long networkId, Long vmId); - - Network getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType); - - Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId); PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List isolationMethods, String broadcastDomainRange, Long domainId, List tags, String name); @@ -93,8 +79,6 @@ public interface NetworkService { List listNetworkServices(String providerName); - List listSupportedNetworkServiceProviders(String serviceName); - PhysicalNetworkServiceProvider addProviderToPhysicalNetwork(Long physicalNetworkId, String providerName, Long destinationPhysicalNetworkId, List enabledServices); @@ -126,7 +110,6 @@ public interface NetworkService { Pair, Integer> listTrafficTypes(Long physicalNetworkId); - PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType); Network getExclusiveGuestNetwork(long zoneId); @@ -134,9 +117,7 @@ public interface NetworkService { List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner); - List listNetworksByVpc(long vpcId); - boolean isVmPartOfNetwork(long vmId, long ntwkId); /** * @param networkId @@ -169,9 +150,5 @@ public interface NetworkService { Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan, String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId) throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException; - /** - * @param network - * @return - */ - boolean canUseForDeploy(Network network); + } diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index c7a5d64ac7e..3bce619069e 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -109,6 +109,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkService; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.TrafficType; @@ -210,6 +211,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura @Inject NetworkManager _networkMgr; @Inject + NetworkService _networkSvc; + @Inject ClusterDao _clusterDao; @Inject AlertManager _alertMgr; @@ -1535,7 +1538,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Storage); } catch (InvalidParameterValueException noStorage) { PhysicalNetworkTrafficTypeVO mgmtTraffic = _trafficTypeDao.findBy(mgmtPhyNetwork.getId(), TrafficType.Management); - _networkMgr.addTrafficTypeToPhysicalNetwork(mgmtPhyNetwork.getId(), TrafficType.Storage.toString(), mgmtTraffic.getXenNetworkLabel(), mgmtTraffic.getKvmNetworkLabel(), + _networkSvc.addTrafficTypeToPhysicalNetwork(mgmtPhyNetwork.getId(), TrafficType.Storage.toString(), mgmtTraffic.getXenNetworkLabel(), mgmtTraffic.getKvmNetworkLabel(), mgmtTraffic.getVmwareNetworkLabel(), mgmtTraffic.getSimulatorNetworkLabel(), mgmtTraffic.getVlan()); s_logger.info("No storage traffic type was specified by admin, create default storage traffic on physical network " + mgmtPhyNetwork.getId() + " with same configure of management traffic type"); } diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 0d281aa47ef..101d3187ba4 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -48,6 +48,7 @@ import com.cloud.network.rules.StaticNat; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.user.Account; +import com.cloud.user.User; import com.cloud.utils.Pair; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; @@ -61,7 +62,7 @@ import com.cloud.vm.VirtualMachineProfileImpl; * NetworkManager manages the network for the different end users. * */ -public interface NetworkManager extends NetworkService { +public interface NetworkManager { /** * Assigns a new public ip address. * @@ -192,6 +193,8 @@ public interface NetworkManager extends NetworkService { Map getNetworkServiceCapabilities(long networkId, Service service); boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException; + + boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, List publicIps) throws ResourceUnavailableException; boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services); @@ -472,10 +475,72 @@ public interface NetworkManager extends NetworkService { */ PublicIp assignDedicateIpAddress(Account owner, Long guestNtwkId, Long vpcId, long dcId, boolean isSourceNat) throws ConcurrentOperationException, InsufficientAddressCapacityException; + NetworkProfile convertNetworkToNetworkProfile(long networkId); /** * @return */ int getNetworkLockTimeout(); + + boolean cleanupIpResources(long addrId, long userId, Account caller); + + + boolean restartNetwork(Long networkId, Account callerAccount, + User callerUser, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; + + + boolean shutdownNetworkElementsAndResources(ReservationContext context, + boolean b, NetworkVO network); + + + void implementNetworkElementsAndResources(DeployDestination dest, + ReservationContext context, NetworkVO network, + NetworkOfferingVO findById) throws ConcurrentOperationException, InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException; + + + Map> getNetworkCapabilities(long networkId); + + + Network getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType); + + + Long getDedicatedNetworkDomain(long networkId); + + + Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId); + + + List listSupportedNetworkServiceProviders(String serviceName); + + List listNetworksByVpc(long vpcId); + + boolean canUseForDeploy(Network network); + + Network getExclusiveGuestNetwork(long zoneId); + + long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType); + + Integer getNetworkRate(long networkId, Long vmId); + + + boolean isVmPartOfNetwork(long vmId, long ntwkId); + + PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType); + + + Network getNetwork(long networkId); + + + IpAddress getIp(long sourceIpAddressId); + + + IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, + DataCenter zone) throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException; + + + Map finalizeServicesAndProvidersForNetwork(NetworkOffering offering, + Long physicalNetworkId); + + } diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index e7877de78d1..a3fa57cb30e 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -16,24 +16,57 @@ // under the License. package com.cloud.network; +import java.net.URI; +import java.security.InvalidParameterException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import java.util.TreeSet; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.log4j.Logger; + import com.cloud.acl.ControlledEntity.ACLType; import com.cloud.acl.SecurityChecker.AccessType; import com.cloud.agent.AgentManager; import com.cloud.agent.Listener; -import com.cloud.agent.api.*; +import com.cloud.agent.api.AgentControlAnswer; +import com.cloud.agent.api.AgentControlCommand; +import com.cloud.agent.api.Answer; +import com.cloud.agent.api.CheckNetworkAnswer; +import com.cloud.agent.api.CheckNetworkCommand; +import com.cloud.agent.api.Command; +import com.cloud.agent.api.StartupCommand; +import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.agent.api.to.NicTO; import com.cloud.alert.AlertManager; -import com.cloud.api.commands.CreateNetworkCmd; -import com.cloud.api.commands.ListNetworksCmd; -import com.cloud.api.commands.ListTrafficTypeImplementorsCmd; -import com.cloud.api.commands.RestartNetworkCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; -import com.cloud.dc.*; +import com.cloud.dc.AccountVlanMapVO; +import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.Pod; +import com.cloud.dc.PodVlanMapVO; +import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; +import com.cloud.dc.VlanVO; import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.PodVlanMapDao; @@ -44,12 +77,20 @@ import com.cloud.deploy.DeploymentPlan; import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; -import com.cloud.event.ActionEvent; import com.cloud.event.EventTypes; import com.cloud.event.UsageEventVO; -import com.cloud.event.dao.EventDao; import com.cloud.event.dao.UsageEventDao; -import com.cloud.exception.*; +import com.cloud.exception.AccountLimitException; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.ConnectionException; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InsufficientVirtualNetworkCapcityException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.exception.UnsupportedServiceException; import com.cloud.host.Host; import com.cloud.host.HostVO; import com.cloud.host.Status; @@ -64,8 +105,6 @@ import com.cloud.network.Networks.AddressFormat; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.IsolationType; import com.cloud.network.Networks.TrafficType; -import com.cloud.network.PhysicalNetwork.BroadcastDomainRange; -import com.cloud.network.VirtualRouterProvider.VirtualRouterProviderType; import com.cloud.network.addr.PublicIp; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; @@ -87,18 +126,23 @@ import com.cloud.network.element.NetworkElement; import com.cloud.network.element.PortForwardingServiceProvider; import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.element.UserDataServiceProvider; -import com.cloud.network.element.VirtualRouterElement; -import com.cloud.network.element.VpcVirtualRouterElement; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.lb.LoadBalancingRule.LbDestination; import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy; import com.cloud.network.lb.LoadBalancingRulesManager; -import com.cloud.network.rules.*; +import com.cloud.network.rules.FirewallManager; +import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.PortForwardingRule; +import com.cloud.network.rules.PortForwardingRuleVO; +import com.cloud.network.rules.RulesManager; +import com.cloud.network.rules.StaticNat; +import com.cloud.network.rules.StaticNatRule; +import com.cloud.network.rules.StaticNatRuleImpl; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.network.vpc.NetworkACLManager; -import com.cloud.network.vpc.PrivateIpVO; import com.cloud.network.vpc.VpcManager; import com.cloud.network.vpc.dao.PrivateIpDao; import com.cloud.network.vpn.RemoteAccessVpnService; @@ -109,24 +153,27 @@ import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; import com.cloud.org.Grouping; -import com.cloud.projects.Project; -import com.cloud.projects.ProjectManager; -import com.cloud.server.ResourceTag.TaggedResourceType; -import com.cloud.tags.ResourceTagVO; -import com.cloud.tags.dao.ResourceTagDao; -import com.cloud.user.*; +import com.cloud.user.Account; +import com.cloud.user.AccountManager; +import com.cloud.user.DomainManager; +import com.cloud.user.ResourceLimitService; +import com.cloud.user.User; +import com.cloud.user.UserContext; import com.cloud.user.dao.AccountDao; -import com.cloud.user.dao.UserStatisticsDao; -import com.cloud.utils.AnnotationHelper; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; -import com.cloud.utils.db.*; +import com.cloud.utils.db.DB; +import com.cloud.utils.db.Filter; +import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.JoinBuilder.JoinType; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.SearchCriteria.Op; +import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.Ip; import com.cloud.utils.net.NetUtils; @@ -135,37 +182,21 @@ import com.cloud.vm.NicProfile; import com.cloud.vm.NicVO; import com.cloud.vm.ReservationContext; import com.cloud.vm.ReservationContextImpl; -import com.cloud.vm.SecondaryStorageVmVO; import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.VirtualMachineProfileImpl; -import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; -import org.apache.log4j.Logger; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; -import java.net.URI; -import java.security.InvalidParameterException; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.*; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - /** * NetworkManagerImpl implements NetworkManager. */ -@Local(value = { NetworkManager.class, NetworkService.class }) -public class NetworkManagerImpl implements NetworkManager, NetworkService, Manager, Listener { +@Local(value = { NetworkManager.class}) +public class NetworkManagerImpl implements NetworkManager, Manager, Listener { private static final Logger s_logger = Logger.getLogger(NetworkManagerImpl.class); String _name; @@ -180,10 +211,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Inject DomainDao _domainDao = null; @Inject - UserStatisticsDao _userStatsDao = null; - @Inject - EventDao _eventDao = null; - @Inject ConfigurationDao _configDao; @Inject UserVmDao _userVmDao = null; @@ -231,12 +258,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag PortForwardingRulesDao _portForwardingDao; @Inject ResourceLimitService _resourceLimitMgr; - @Inject - DomainRouterDao _routerDao; + @Inject DomainManager _domainMgr; - @Inject - ProjectManager _projectMgr; + @Inject NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao; @Inject @@ -263,15 +288,13 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag PrivateIpDao _privateIpDao; @Inject NetworkACLManager _networkACLMgr; - @Inject - ResourceTagDao _resourceTagDao; + private final HashMap _systemNetworks = new HashMap(5); private static Long _privateOfferingId = null; ScheduledExecutorService _executor; - SearchBuilder AccountsUsingNetworkSearch; SearchBuilder AssignIpAddressSearch; SearchBuilder AssignIpAddressFromPodVlanSearch; SearchBuilder IpAddressSearch; @@ -280,7 +303,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag int _networkGcWait; int _networkGcInterval; String _networkDomain; - int _cidrLimit; boolean _allowSubdomainNetworkAccess; int _networkLockTimeout; @@ -536,45 +558,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - /** - * Returns the target account for an api command - * - * @param accountName - * - non-null if the account name was passed in in the command - * @param domainId - * - non-null if the domainId was passed in in the command. - * @return - */ - protected Account getAccountForApiCommand(String accountName, Long domainId) { - Account account = UserContext.current().getCaller(); - - if (_accountMgr.isAdmin(account.getType())) { - // The admin is making the call, determine if it is for someone else or for himself - if (domainId != null) { - if ((account != null) && !_domainDao.isChildDomain(account.getDomainId(), domainId)) { - // TBD: Check if call to addProxyObject() needs correction. - PermissionDeniedException ex = new PermissionDeniedException("Invalid domain id given, permission denied"); - ex.addProxyObject("domain", domainId, "domainId"); - throw ex; - } - if (accountName != null) { - Account userAccount = _accountMgr.getActiveAccountByName(accountName, domainId); - if (userAccount != null) { - account = userAccount; - } else { - // TBD: Check if call to addProxyObject() needs correction. - PermissionDeniedException ex = new PermissionDeniedException("Unable to find account " + accountName + " in specified domain, permission denied"); - ex.addProxyObject("domain", domainId, "domainId"); - throw ex; - } - } - } else { - // the admin is calling the api on his own behalf - return account; - } - } - return account; - } + @Override public boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException { @@ -752,42 +736,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return true; } - protected boolean canIpsUsedForNonConserve(List publicIps) { - boolean result = true; - for (PublicIp ip : publicIps) { - result = canIpUsedForNonConserveService(ip, null); - if (!result) { - break; - } - } - return result; - } - - public boolean canIpsUseOffering(List publicIps, long offeringId) { - Map> ipToServices = getIpToServices(publicIps, false, true); - Map> serviceToProviders = getNetworkOfferingServiceProvidersMap(offeringId); - for (PublicIp ip : ipToServices.keySet()) { - Set services = ipToServices.get(ip); - Provider provider = null; - for (Service service : services) { - Set curProviders = serviceToProviders.get(service); - if (curProviders == null || curProviders.isEmpty()) { - continue; - } - Provider curProvider = (Provider) curProviders.toArray()[0]; - if (provider == null) { - provider = curProvider; - continue; - } - // We don't support multiple providers for one service now - if (!provider.equals(curProvider)) { - throw new InvalidParameterException("There would be multiple providers for IP " + ip.getAddress() + " with the new network offering!"); - } - } - } - return true; - } + public boolean canIpUsedForService(PublicIp publicIp, Service service, Long networkId) { List ipList = new ArrayList(); ipList.add(publicIp); @@ -869,7 +819,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return providerToIpList; } - protected boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, + @Override + public boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, List publicIps) throws ResourceUnavailableException { boolean success = true; @@ -932,54 +883,16 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return result; } - @Override - public List getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner) { - - return _networksDao.listByZoneAndGuestType(owner.getId(), zoneId, Network.GuestType.Isolated, false); - } - @Override - public List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { + + protected List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { return _networksDao.listSourceNATEnabledNetworks(owner.getId(), zoneId, Network.GuestType.Isolated); } - @Override - @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "allocating Ip", create = true) - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) - throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { + - if (networkId != null) { - Network network = _networksDao.findById(networkId); - if (network == null) { - throw new InvalidParameterValueException("Invalid network id is given"); - } - if (network.getGuestType() == Network.GuestType.Shared) { - DataCenter zone = _configMgr.getZone(zoneId); - if (zone == null) { - throw new InvalidParameterValueException("Invalid zone Id is given"); - } - - // if shared network in the advanced zone, then check the caller against the network for 'AccessType.UseNetwork' - if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) && zone.getNetworkType() == NetworkType.Advanced) { - Account caller = UserContext.current().getCaller(); - long callerUserId = UserContext.current().getCallerUserId(); - _accountMgr.checkAccess(caller, AccessType.UseNetwork, false, network); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId()); - } - return allocateIp(ipOwner, false, caller, zone); - } else { - throw new InvalidParameterValueException("Associate IP address can only be called on the shared networks in the advanced zone" + - " with Firewall/Source Nat/Static Nat/Port Forwarding/Load balancing services enabled"); - } - } - } - - return allocateIP(ipOwner, false, zoneId); - } - - public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) + private IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { Account caller = UserContext.current().getCaller(); long callerUserId = UserContext.current().getCallerUserId(); @@ -1259,7 +1172,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag _configs = _configDao.getConfiguration("Network", params); _networkDomain = _configs.get(Config.GuestDomainSuffix.key()); - _cidrLimit = NumbersUtil.parseInt(_configs.get(Config.NetworkGuestCidrLimit.key()), 22); _networkLockTimeout = NumbersUtil.parseInt(_configs.get(Config.NetworkLockTimeout.key()), 600); NetworkOfferingVO publicNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPublicNetwork, TrafficType.Public, true); @@ -1434,13 +1346,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag txn.commit(); - AccountsUsingNetworkSearch = _accountDao.createSearchBuilder(); - SearchBuilder networkAccountSearch = _networksDao.createSearchBuilderForAccount(); - AccountsUsingNetworkSearch.join("nc", networkAccountSearch, AccountsUsingNetworkSearch.entity().getId(), networkAccountSearch.entity().getAccountId(), JoinType.INNER); - networkAccountSearch.and("config", networkAccountSearch.entity().getNetworkId(), SearchCriteria.Op.EQ); - networkAccountSearch.and("owner", networkAccountSearch.entity().isOwner(), SearchCriteria.Op.EQ); - AccountsUsingNetworkSearch.done(); - + AssignIpAddressSearch = _ipAddressDao.createSearchBuilder(); AssignIpAddressSearch.and("dc", AssignIpAddressSearch.entity().getDataCenterId(), Op.EQ); AssignIpAddressSearch.and("allocated", AssignIpAddressSearch.entity().getAllocatedTime(), Op.NULL); @@ -1982,7 +1888,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return super.equals(o); //To change body of overridden methods use File | Settings | File Templates. } - private void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, + @Override + public void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, NetworkVO network, NetworkOfferingVO offering) throws ConcurrentOperationException, InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException { @@ -2309,88 +2216,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return profile; } - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_NET_IP_RELEASE, eventDescription = "disassociating Ip", async = true) - public boolean releaseIpAddress(long ipAddressId) throws InsufficientAddressCapacityException { - Long userId = UserContext.current().getCallerUserId(); - Account caller = UserContext.current().getCaller(); - - // Verify input parameters - IPAddressVO ipVO = _ipAddressDao.findById(ipAddressId); - if (ipVO == null) { - throw new InvalidParameterValueException("Unable to find ip address by id"); - } - - if (ipVO.getAllocatedTime() == null) { - s_logger.debug("Ip Address id= " + ipAddressId + " is not allocated, so do nothing."); - return true; - } - - // verify permissions - if (ipVO.getAllocatedToAccountId() != null) { - _accountMgr.checkAccess(caller, null, true, ipVO); - } - - if (ipVO.isSourceNat()) { - throw new IllegalArgumentException("ip address is used for source nat purposes and can not be disassociated."); - } - - VlanVO vlan = _vlanDao.findById(ipVO.getVlanId()); - if (!vlan.getVlanType().equals(VlanType.VirtualNetwork)) { - throw new IllegalArgumentException("only ip addresses that belong to a virtual network may be disassociated."); - } - - // Check for account wide pool. It will have an entry for account_vlan_map. - if (_accountVlanMapDao.findAccountVlanMap(ipVO.getAllocatedToAccountId(), ipVO.getVlanId()) != null) { - //see IPaddressVO.java - InvalidParameterValueException ex = new InvalidParameterValueException("Sepcified IP address uuid belongs to" + - " Account wide IP pool and cannot be disassociated"); - ex.addProxyObject("user_ip_address", ipAddressId, "ipAddressId"); - throw ex; - } - - // don't allow releasing system ip address - if (ipVO.getSystem()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Can't release system IP address with specified id"); - ex.addProxyObject(ipVO, ipVO.getId(), "systemIpAddrId"); - throw ex; - } - - boolean success = disassociatePublicIpAddress(ipAddressId, userId, caller); - - if (success) { - Long networkId = ipVO.getAssociatedWithNetworkId(); - if (networkId != null) { - Network guestNetwork = getNetwork(networkId); - NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); - Long vmId = ipVO.getAssociatedWithVmId(); - if (offering.getElasticIp() && vmId != null) { - _rulesMgr.getSystemIpAndEnableStaticNatForVm(_userVmDao.findById(vmId), true); - return true; - } - } - } else { - s_logger.warn("Failed to release public ip address id=" + ipAddressId); - } - return success; - } - - @Deprecated - // No one is using this method. - public AccountVO getNetworkOwner(long networkId) { - SearchCriteria sc = AccountsUsingNetworkSearch.create(); - sc.setJoinParameters("nc", "config", networkId); - sc.setJoinParameters("nc", "owner", true); - List accounts = _accountDao.search(sc, null); - return accounts.size() != 0 ? accounts.get(0) : null; - } - - @Deprecated - // No one is using this method. - public List getNetworksforOffering(long offeringId, long dataCenterId, long accountId) { - return _networksDao.getNetworksForOffering(offeringId, dataCenterId, accountId); - } + @Override public String getNextAvailableMacAddressInNetwork(long networkId) throws InsufficientAddressCapacityException { @@ -2445,352 +2271,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - private void checkSharedNetworkCidrOverlap(Long zoneId, long physicalNetworkId, String cidr) { - if (zoneId == null || cidr == null) { - return; - } - - DataCenter zone = _dcDao.findById(zoneId); - List networks = _networksDao.listByZone(zoneId); - Map networkToCidr = new HashMap(); - - // check for CIDR overlap with all possible CIDR for isolated guest networks - // in the zone when using external networking - PhysicalNetworkVO pNetwork = _physicalNetworkDao.findById(physicalNetworkId); - if (pNetwork.getVnet() != null) { - String vlanRange[] = pNetwork.getVnet().split("-"); - int lowestVlanTag = Integer.valueOf(vlanRange[0]); - int highestVlanTag = Integer.valueOf(vlanRange[1]); - for (int vlan=lowestVlanTag; vlan <= highestVlanTag; ++vlan) { - int offset = vlan - lowestVlanTag; - String globalVlanBits = _configDao.getValue(Config.GuestVlanBits.key()); - int cidrSize = 8 + Integer.parseInt(globalVlanBits); - String guestNetworkCidr = zone.getGuestNetworkCidr(); - String[] cidrTuple = guestNetworkCidr.split("\\/"); - long newCidrAddress = (NetUtils.ip2Long(cidrTuple[0]) & 0xff000000) | (offset << (32 - cidrSize)); - if (NetUtils.isNetworksOverlap(NetUtils.long2Ip(newCidrAddress), cidr)) { - throw new InvalidParameterValueException("Specified CIDR for shared network conflict with CIDR that is reserved for zone vlan " + vlan); - } - } - } - - // check for CIDR overlap with all CIDR's of the shared networks in the zone - for (NetworkVO network : networks) { - if (network.getGuestType() == GuestType.Isolated) { - continue; - } - if (network.getCidr() != null) { - networkToCidr.put(network.getId(), network.getCidr()); - } - } - if (networkToCidr != null && !networkToCidr.isEmpty()) { - for (long networkId : networkToCidr.keySet()) { - String ntwkCidr = networkToCidr.get(networkId); - if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { - throw new InvalidParameterValueException("Specified CIDR for shared network conflict with CIDR of a shared network in the zone."); - } - } - } - } - public void checkVirtualNetworkCidrOverlap(Long zoneId, String cidr) { - if (zoneId == null) { - return; - } - if (cidr == null) { - return; - } - List networks = _networksDao.listByZone(zoneId); - Map networkToCidr = new HashMap(); - for (NetworkVO network : networks) { - if (network.getGuestType() != GuestType.Isolated) { - continue; - } - if (network.getCidr() != null) { - networkToCidr.put(network.getId(), network.getCidr()); - } - } - if (networkToCidr == null || networkToCidr.isEmpty()) { - return; - } - - for (long networkId : networkToCidr.keySet()) { - String ntwkCidr = networkToCidr.get(networkId); - if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { - throw new InvalidParameterValueException("Warning: The specified existing network has conflict CIDR subnets with new network!"); - } - } - } - - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_NETWORK_CREATE, eventDescription = "creating network") - public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException { - Long networkOfferingId = cmd.getNetworkOfferingId(); - String gateway = cmd.getGateway(); - String startIP = cmd.getStartIp(); - String endIP = cmd.getEndIp(); - String netmask = cmd.getNetmask(); - String networkDomain = cmd.getNetworkDomain(); - String vlanId = cmd.getVlan(); - String name = cmd.getNetworkName(); - String displayText = cmd.getDisplayText(); - Account caller = UserContext.current().getCaller(); - Long physicalNetworkId = cmd.getPhysicalNetworkId(); - Long zoneId = cmd.getZoneId(); - String aclTypeStr = cmd.getAclType(); - Long domainId = cmd.getDomainId(); - boolean isDomainSpecific = false; - Boolean subdomainAccess = cmd.getSubdomainAccess(); - Long vpcId = cmd.getVpcId(); - - // Validate network offering - NetworkOfferingVO ntwkOff = _networkOfferingDao.findById(networkOfferingId); - if (ntwkOff == null || ntwkOff.isSystemOnly()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find network offering by specified id"); - if (ntwkOff != null) { - ex.addProxyObject(ntwkOff, networkOfferingId, "networkOfferingId"); - // Get the VO object's table name. - String tablename = AnnotationHelper.getTableName(ntwkOff); - if (tablename != null) { - ex.addProxyObject(tablename, networkOfferingId, "networkOfferingId"); - } else { - s_logger.info("\nCould not retrieve table name (annotation) from " + tablename + " VO proxy object\n"); - } - throw ex; - } - throw ex; - } - // validate physical network and zone - // Check if physical network exists - PhysicalNetwork pNtwk = null; - if (physicalNetworkId != null) { - pNtwk = _physicalNetworkDao.findById(physicalNetworkId); - if (pNtwk == null) { - throw new InvalidParameterValueException("Unable to find a physical network having the specified physical network id"); - } - } - - if (zoneId == null) { - zoneId = pNtwk.getDataCenterId(); - } - - DataCenter zone = _dcDao.findById(zoneId); - if (zone == null) { - throw new InvalidParameterValueException("Specified zone id was not found"); - } - - if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(caller.getType())) { - // See DataCenterVO.java - PermissionDeniedException ex = new PermissionDeniedException("Cannot perform this operation since specified Zone is currently disabled"); - ex.addProxyObject(zone, zoneId, "zoneId"); - throw ex; - } - - // Only domain and account ACL types are supported in Acton. - ACLType aclType = null; - if (aclTypeStr != null) { - if (aclTypeStr.equalsIgnoreCase(ACLType.Account.toString())) { - aclType = ACLType.Account; - } else if (aclTypeStr.equalsIgnoreCase(ACLType.Domain.toString())) { - aclType = ACLType.Domain; - } else { - throw new InvalidParameterValueException("Incorrect aclType specified. Check the API documentation for supported types"); - } - // In 3.0 all Shared networks should have aclType == Domain, all Isolated networks aclType==Account - if (ntwkOff.getGuestType() == GuestType.Isolated) { - if (aclType != ACLType.Account) { - throw new InvalidParameterValueException("AclType should be " + ACLType.Account + " for network of type " + Network.GuestType.Isolated); - } - } else if (ntwkOff.getGuestType() == GuestType.Shared) { - if (!(aclType == ACLType.Domain || aclType == ACLType.Account)) { - throw new InvalidParameterValueException("AclType should be " + ACLType.Domain + " or " + - ACLType.Account + " for network of type " + Network.GuestType.Shared); - } - } - } else { - if (ntwkOff.getGuestType() == GuestType.Isolated) { - aclType = ACLType.Account; - } else if (ntwkOff.getGuestType() == GuestType.Shared) { - aclType = ACLType.Domain; - } - } - - // Only Admin can create Shared networks - if (ntwkOff.getGuestType() == GuestType.Shared && !_accountMgr.isAdmin(caller.getType())) { - throw new InvalidParameterValueException("Only Admins can create network with guest type " + GuestType.Shared); - } - - // Check if the network is domain specific - if (aclType == ACLType.Domain) { - // only Admin can create domain with aclType=Domain - if (!_accountMgr.isAdmin(caller.getType())) { - throw new PermissionDeniedException("Only admin can create networks with aclType=Domain"); - } - - // only shared networks can be Domain specific - if (ntwkOff.getGuestType() != GuestType.Shared) { - throw new InvalidParameterValueException("Only " + GuestType.Shared + " networks can have aclType=" + ACLType.Domain); - } - - if (domainId != null) { - if (ntwkOff.getTrafficType() != TrafficType.Guest || ntwkOff.getGuestType() != Network.GuestType.Shared) { - throw new InvalidParameterValueException("Domain level networks are supported just for traffic type " - + TrafficType.Guest + " and guest type " + Network.GuestType.Shared); - } - - DomainVO domain = _domainDao.findById(domainId); - if (domain == null) { - throw new InvalidParameterValueException("Unable to find domain by specified id"); - } - _accountMgr.checkAccess(caller, domain); - } - isDomainSpecific = true; - - } else if (subdomainAccess != null) { - throw new InvalidParameterValueException("Parameter subDomainAccess can be specified only with aclType=Domain"); - } - Account owner = null; - if ((cmd.getAccountName() != null && domainId != null) || cmd.getProjectId() != null) { - owner = _accountMgr.finalizeOwner(caller, cmd.getAccountName(), domainId, cmd.getProjectId()); - } else { - owner = caller; - } - - UserContext.current().setAccountId(owner.getAccountId()); - - // VALIDATE IP INFO - // if end ip is not specified, default it to startIp - if (startIP != null) { - if (!NetUtils.isValidIp(startIP)) { - throw new InvalidParameterValueException("Invalid format for the startIp parameter"); - } - if (endIP == null) { - endIP = startIP; - } else if (!NetUtils.isValidIp(endIP)) { - throw new InvalidParameterValueException("Invalid format for the endIp parameter"); - } - } - - if (startIP != null && endIP != null) { - if (!(gateway != null && netmask != null)) { - throw new InvalidParameterValueException("gateway and netmask should be defined when startIP/endIP are passed in"); - } - } - - String cidr = null; - if (gateway != null && netmask != null) { - if (!NetUtils.isValidIp(gateway)) { - throw new InvalidParameterValueException("Invalid gateway"); - } - if (!NetUtils.isValidNetmask(netmask)) { - throw new InvalidParameterValueException("Invalid netmask"); - } - - cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask); - } - - // Regular user can create Guest Isolated Source Nat enabled network only - if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL - && (ntwkOff.getTrafficType() != TrafficType.Guest || ntwkOff.getGuestType() != Network.GuestType.Isolated - && areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))) { - throw new InvalidParameterValueException("Regular user can create a network only from the network" + - " offering having traffic type " + TrafficType.Guest + " and network type " - + Network.GuestType.Isolated + " with a service " + Service.SourceNat.getName() + " enabled"); - } - - // Don't allow to specify vlan if the caller is a regular user - if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL && (ntwkOff.getSpecifyVlan() || vlanId != null)) { - throw new InvalidParameterValueException("Regular user is not allowed to specify vlanId"); - } - - // For non-root admins check cidr limit - if it's allowed by global config value - if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN && cidr != null) { - - String[] cidrPair = cidr.split("\\/"); - int cidrSize = Integer.valueOf(cidrPair[1]); - - if (cidrSize < _cidrLimit) { - throw new InvalidParameterValueException("Cidr size can't be less than " + _cidrLimit); - } - } - - Collection ntwkProviders = finalizeServicesAndProvidersForNetwork(ntwkOff, physicalNetworkId).values(); - if (cidr != null && providersConfiguredForExternalNetworking(ntwkProviders)) { - if (ntwkOff.getGuestType() == GuestType.Shared && (zone.getNetworkType() == NetworkType.Advanced) && - isSharedNetworkOfferingWithServices(networkOfferingId)) { - // validate if CIDR specified overlaps with any of the CIDR's allocated for isolated networks and shared networks in the zone - checkSharedNetworkCidrOverlap(zoneId, pNtwk.getId(), cidr); - } else { - throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external devices!"); - } - } - - - // Vlan is created in 2 cases - works in Advance zone only: - // 1) GuestType is Shared - // 2) GuestType is Isolated, but SourceNat service is disabled - boolean createVlan = (startIP != null && endIP != null && zone.getNetworkType() == NetworkType.Advanced - && ((ntwkOff.getGuestType() == Network.GuestType.Shared) - || (ntwkOff.getGuestType() == GuestType.Isolated && - !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat)))); - - // Can add vlan range only to the network which allows it - if (createVlan && !ntwkOff.getSpecifyIpRanges()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Network offering with specified id doesn't support adding multiple ip ranges"); - ex.addProxyObject(ntwkOff, ntwkOff.getId(), "networkOfferingId"); - String tablename = AnnotationHelper.getTableName(ntwkOff); - if (tablename != null) { - ex.addProxyObject(tablename, ntwkOff.getId(), "networkOfferingId"); - } else { - s_logger.info("\nCould not retrieve table name (annotation) from " + tablename + " VO proxy object\n"); - } - throw ex; - } - - Transaction txn = Transaction.currentTxn(); - txn.start(); - - Long sharedDomainId = null; - if (isDomainSpecific) { - if (domainId != null) { - sharedDomainId = domainId; - } else { - sharedDomainId = _domainMgr.getDomain(Domain.ROOT_DOMAIN).getId(); - subdomainAccess = true; - } - } - - // default owner to system if network has aclType=Domain - if (aclType == ACLType.Domain) { - owner = _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM); - } - - //Create guest network - Network network = null; - if (vpcId != null) { - if (!_configMgr.isOfferingForVpc(ntwkOff)){ - throw new InvalidParameterValueException("Network offering can't be used for VPC networks"); - } - network = _vpcMgr.createVpcGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, - networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, caller); - } else { - if (_configMgr.isOfferingForVpc(ntwkOff)){ - throw new InvalidParameterValueException("Network offering can be used for VPC networks only"); - } - network = createGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, - networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId); - } - - if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN && createVlan) { - // Create vlan ip range - _configMgr.createVlanAndPublicIpRange(pNtwk.getDataCenterId(), network.getId(), physicalNetworkId, - false, null, startIP, endIP, gateway, netmask, vlanId, null); - } - - txn.commit(); - - return network; - } + @Override @DB @@ -3034,231 +2515,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return network; } - @Override - public List searchForNetworks(ListNetworksCmd cmd) { - Long id = cmd.getId(); - String keyword = cmd.getKeyword(); - Long zoneId = cmd.getZoneId(); - Account caller = UserContext.current().getCaller(); - Long domainId = cmd.getDomainId(); - String accountName = cmd.getAccountName(); - String guestIpType = cmd.getGuestIpType(); - String trafficType = cmd.getTrafficType(); - Boolean isSystem = cmd.getIsSystem(); - String aclType = cmd.getAclType(); - Long projectId = cmd.getProjectId(); - List permittedAccounts = new ArrayList(); - String path = null; - Long physicalNetworkId = cmd.getPhysicalNetworkId(); - List supportedServicesStr = cmd.getSupportedServices(); - Boolean restartRequired = cmd.getRestartRequired(); - boolean listAll = cmd.listAll(); - boolean isRecursive = cmd.isRecursive(); - Boolean specifyIpRanges = cmd.getSpecifyIpRanges(); - Long vpcId = cmd.getVpcId(); - Boolean canUseForDeploy = cmd.canUseForDeploy(); - Map tags = cmd.getTags(); - Boolean forVpc = cmd.getForVpc(); - - // 1) default is system to false if not specified - // 2) reset parameter to false if it's specified by the regular user - if ((isSystem == null || caller.getType() == Account.ACCOUNT_TYPE_NORMAL) && id == null) { - isSystem = false; - } - - // Account/domainId parameters and isSystem are mutually exclusive - if (isSystem != null && isSystem && (accountName != null || domainId != null)) { - throw new InvalidParameterValueException("System network belongs to system, account and domainId parameters can't be specified"); - } - - if (domainId != null) { - DomainVO domain = _domainDao.findById(domainId); - if (domain == null) { - // see DomainVO.java - throw new InvalidParameterValueException("Specified domain id doesn't exist in the system"); - } - - _accountMgr.checkAccess(caller, domain); - if (accountName != null) { - Account owner = _accountMgr.getActiveAccountByName(accountName, domainId); - if (owner == null) { - // see DomainVO.java - throw new InvalidParameterValueException("Unable to find account " + accountName + " in specified domain"); - } - - _accountMgr.checkAccess(caller, null, true, owner); - permittedAccounts.add(owner.getId()); - } - } - - if (!_accountMgr.isAdmin(caller.getType()) || (!listAll && (projectId != null && projectId.longValue() != -1 && domainId == null))) { - permittedAccounts.add(caller.getId()); - domainId = caller.getDomainId(); - } - - // set project information - boolean skipProjectNetworks = true; - if (projectId != null) { - if (projectId.longValue() == -1) { - if (!_accountMgr.isAdmin(caller.getType())) { - permittedAccounts.addAll(_projectMgr.listPermittedProjectAccounts(caller.getId())); - } - } else { - permittedAccounts.clear(); - Project project = _projectMgr.getProject(projectId); - if (project == null) { - throw new InvalidParameterValueException("Unable to find project by specified id"); - } - if (!_projectMgr.canAccessProjectAccount(caller, project.getProjectAccountId())) { - // getProject() returns type ProjectVO. - InvalidParameterValueException ex = new InvalidParameterValueException("Account " + caller + " cannot access specified project id"); - ex.addProxyObject(project, projectId, "projectId"); - throw ex; - } - permittedAccounts.add(project.getProjectAccountId()); - } - skipProjectNetworks = false; - } - - if (domainId != null) { - path = _domainDao.findById(domainId).getPath(); - } else { - path = _domainDao.findById(caller.getDomainId()).getPath(); - } - - if (listAll && domainId == null) { - isRecursive = true; - } - - Filter searchFilter = new Filter(NetworkVO.class, "id", false, cmd.getStartIndex(), cmd.getPageSizeVal()); - SearchBuilder sb = _networksDao.createSearchBuilder(); - - if (forVpc != null) { - if (forVpc) { - sb.and("vpc", sb.entity().getVpcId(), Op.NNULL); - } else { - sb.and("vpc", sb.entity().getVpcId(), Op.NULL); - } - } - - // Don't display networks created of system network offerings - SearchBuilder networkOfferingSearch = _networkOfferingDao.createSearchBuilder(); - networkOfferingSearch.and("systemOnly", networkOfferingSearch.entity().isSystemOnly(), SearchCriteria.Op.EQ); - if (isSystem != null && isSystem) { - networkOfferingSearch.and("trafficType", networkOfferingSearch.entity().getTrafficType(), SearchCriteria.Op.EQ); - } - sb.join("networkOfferingSearch", networkOfferingSearch, sb.entity().getNetworkOfferingId(), networkOfferingSearch.entity().getId(), JoinBuilder.JoinType.INNER); - - SearchBuilder zoneSearch = _dcDao.createSearchBuilder(); - zoneSearch.and("networkType", zoneSearch.entity().getNetworkType(), SearchCriteria.Op.EQ); - sb.join("zoneSearch", zoneSearch, sb.entity().getDataCenterId(), zoneSearch.entity().getId(), JoinBuilder.JoinType.INNER); - sb.and("removed", sb.entity().getRemoved(), Op.NULL); - - if (tags != null && !tags.isEmpty()) { - SearchBuilder tagSearch = _resourceTagDao.createSearchBuilder(); - for (int count=0; count < tags.size(); count++) { - tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ); - tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ); - tagSearch.cp(); - } - tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ); - sb.groupBy(sb.entity().getId()); - sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER); - } - - if (permittedAccounts.isEmpty()) { - SearchBuilder domainSearch = _domainDao.createSearchBuilder(); - domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); - sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); - } - - - SearchBuilder accountSearch = _accountDao.createSearchBuilder(); - accountSearch.and("typeNEQ", accountSearch.entity().getType(), SearchCriteria.Op.NEQ); - accountSearch.and("typeEQ", accountSearch.entity().getType(), SearchCriteria.Op.EQ); - - - sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); - - List networksToReturn = new ArrayList(); - - if (isSystem == null || !isSystem) { - if (!permittedAccounts.isEmpty()) { - //get account level networks - networksToReturn.addAll(listAccountSpecificNetworks( - buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, - physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, - permittedAccounts)); - //get domain level networks - if (domainId != null) { - networksToReturn - .addAll(listDomainLevelNetworks( - buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, - physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, - domainId, false)); - } - } else { - //add account specific networks - networksToReturn.addAll(listAccountSpecificNetworksByDomainPath( - buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, - physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, path, - isRecursive)); - //add domain specific networks of domain + parent domains - networksToReturn.addAll(listDomainSpecificNetworksByDomainPath( - buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, - physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, path, - isRecursive)); - //add networks of subdomains - if (domainId == null) { - networksToReturn - .addAll(listDomainLevelNetworks( - buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, - physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, - caller.getDomainId(), true)); - } - } - } else { - networksToReturn = _networksDao.search(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, - guestIpType, trafficType, physicalNetworkId, null, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), - searchFilter); - } - - if (supportedServicesStr != null && !supportedServicesStr.isEmpty() && !networksToReturn.isEmpty()) { - List supportedNetworks = new ArrayList(); - Service[] suppportedServices = new Service[supportedServicesStr.size()]; - int i = 0; - for (String supportedServiceStr : supportedServicesStr) { - Service service = Service.getService(supportedServiceStr); - if (service == null) { - throw new InvalidParameterValueException("Invalid service specified " + supportedServiceStr); - } else { - suppportedServices[i] = service; - } - i++; - } - - for (NetworkVO network : networksToReturn) { - if (areServicesSupportedInNetwork(network.getId(), suppportedServices)) { - supportedNetworks.add(network); - } - } - - networksToReturn=supportedNetworks; - } - - if (canUseForDeploy != null) { - List networksForDeploy = new ArrayList(); - for (NetworkVO network : networksToReturn) { - if (canUseForDeploy(network) == canUseForDeploy) { - networksForDeploy.add(network); - } - } - - networksToReturn=networksForDeploy; - } - - return networksToReturn; - } + @Override public boolean canUseForDeploy(Network network) { @@ -3275,198 +2532,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return hasFreeIps; } - private SearchCriteria buildNetworkSearchCriteria(SearchBuilder sb, String keyword, Long id, - Boolean isSystem, Long zoneId, String guestIpType, String trafficType, Long physicalNetworkId, - String aclType, boolean skipProjectNetworks, Boolean restartRequired, Boolean specifyIpRanges, Long vpcId, Map tags) { + - SearchCriteria sc = sb.create(); - - if (isSystem != null) { - sc.setJoinParameters("networkOfferingSearch", "systemOnly", isSystem); - } - - if (keyword != null) { - SearchCriteria ssc = _networksDao.createSearchCriteria(); - ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); - sc.addAnd("name", SearchCriteria.Op.SC, ssc); - } - - if (id != null) { - sc.addAnd("id", SearchCriteria.Op.EQ, id); - } - - if (zoneId != null) { - sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); - } - - if (guestIpType != null) { - sc.addAnd("guestType", SearchCriteria.Op.EQ, guestIpType); - } - - if (trafficType != null) { - sc.addAnd("trafficType", SearchCriteria.Op.EQ, trafficType); - } - - if (aclType != null) { - sc.addAnd("aclType", SearchCriteria.Op.EQ, aclType.toString()); - } - - if (physicalNetworkId != null) { - sc.addAnd("physicalNetworkId", SearchCriteria.Op.EQ, physicalNetworkId); - } - - if (skipProjectNetworks) { - sc.setJoinParameters("accountSearch", "typeNEQ", Account.ACCOUNT_TYPE_PROJECT); - } else { - sc.setJoinParameters("accountSearch", "typeEQ", Account.ACCOUNT_TYPE_PROJECT); - } - - if (restartRequired != null) { - sc.addAnd("restartRequired", SearchCriteria.Op.EQ, restartRequired); - } - - if (specifyIpRanges != null) { - sc.addAnd("specifyIpRanges", SearchCriteria.Op.EQ, specifyIpRanges); - } - - if (vpcId != null) { - sc.addAnd("vpcId", SearchCriteria.Op.EQ, vpcId); - } - - if (tags != null && !tags.isEmpty()) { - int count = 0; - sc.setJoinParameters("tagSearch", "resourceType", TaggedResourceType.Network.toString()); - for (String key : tags.keySet()) { - sc.setJoinParameters("tagSearch", "key" + String.valueOf(count), key); - sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), tags.get(key)); - count++; - } - } - - return sc; - } - - private List listDomainLevelNetworks(SearchCriteria sc, Filter searchFilter, long domainId, boolean parentDomainsOnly) { - List networkIds = new ArrayList(); - Set allowedDomains = _domainMgr.getDomainParentIds(domainId); - List maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray()); - - for (NetworkDomainVO map : maps) { - if (map.getDomainId() == domainId && parentDomainsOnly) { - continue; - } - boolean subdomainAccess = (map.isSubdomainAccess() != null) ? map.isSubdomainAccess() : getAllowSubdomainAccessGlobal(); - if (map.getDomainId() == domainId || subdomainAccess) { - networkIds.add(map.getNetworkId()); - } - } - - if (!networkIds.isEmpty()) { - SearchCriteria domainSC = _networksDao.createSearchCriteria(); - domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray()); - domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString()); - - sc.addAnd("id", SearchCriteria.Op.SC, domainSC); - return _networksDao.search(sc, searchFilter); - } else { - return new ArrayList(); - } - } - - private List listAccountSpecificNetworks(SearchCriteria sc, Filter searchFilter, List permittedAccounts) { - SearchCriteria accountSC = _networksDao.createSearchCriteria(); - if (!permittedAccounts.isEmpty()) { - accountSC.addAnd("accountId", SearchCriteria.Op.IN, permittedAccounts.toArray()); - } - - accountSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Account.toString()); - - sc.addAnd("id", SearchCriteria.Op.SC, accountSC); - return _networksDao.search(sc, searchFilter); - } - - private List listAccountSpecificNetworksByDomainPath(SearchCriteria sc, Filter searchFilter, String path, boolean isRecursive) { - SearchCriteria accountSC = _networksDao.createSearchCriteria(); - accountSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Account.toString()); - - if (path != null) { - if (isRecursive) { - sc.setJoinParameters("domainSearch", "path", path + "%"); - } else { - sc.setJoinParameters("domainSearch", "path", path); - } - } - - sc.addAnd("id", SearchCriteria.Op.SC, accountSC); - return _networksDao.search(sc, searchFilter); - } - - private List listDomainSpecificNetworksByDomainPath(SearchCriteria sc, Filter searchFilter, - String path, boolean isRecursive) { - - Set allowedDomains = new HashSet(); - if (path != null) { - if (isRecursive) { - allowedDomains = _domainMgr.getDomainChildrenIds(path); - } else { - Domain domain = _domainDao.findDomainByPath(path); - allowedDomains.add(domain.getId()); - } - } - - List networkIds = new ArrayList(); - - List maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray()); - - for (NetworkDomainVO map : maps) { - networkIds.add(map.getNetworkId()); - } - - if (!networkIds.isEmpty()) { - SearchCriteria domainSC = _networksDao.createSearchCriteria(); - domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray()); - domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString()); - - sc.addAnd("id", SearchCriteria.Op.SC, domainSC); - return _networksDao.search(sc, searchFilter); - } else { - return new ArrayList(); - } - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_NETWORK_DELETE, eventDescription = "deleting network", async = true) - public boolean deleteNetwork(long networkId) { - - Account caller = UserContext.current().getCaller(); - - // Verify network id - NetworkVO network = _networksDao.findById(networkId); - if (network == null) { - // see NetworkVO.java - - InvalidParameterValueException ex = new InvalidParameterValueException("unable to find network with specified id"); - ex.addProxyObject(network, networkId, "networkId"); - throw ex; - } - - // don't allow to delete system network - if (isNetworkSystem(network)) { - InvalidParameterValueException ex = new InvalidParameterValueException("Network with specified id is system and can't be removed"); - ex.addProxyObject(network, network.getId(), "networkId"); - throw ex; - } - - Account owner = _accountMgr.getAccount(network.getAccountId()); - - // Perform permission check - _accountMgr.checkAccess(caller, null, true, network); - - User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId()); - ReservationContext context = new ReservationContextImpl(null, null, callerUser, owner); - - return destroyNetwork(networkId, context); - } + @Override @DB @@ -3520,7 +2588,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return result; } - private boolean shutdownNetworkElementsAndResources(ReservationContext context, boolean cleanupElements, NetworkVO network) { + @Override + public boolean shutdownNetworkElementsAndResources(ReservationContext context, boolean cleanupElements, NetworkVO network) { // 1) Cleanup all the rules for the network. If it fails, just log the failure and proceed with shutting down // the elements boolean cleanupResult = true; @@ -3927,49 +2996,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - @Override - @ActionEvent(eventType = EventTypes.EVENT_NETWORK_RESTART, eventDescription = "restarting network", async = true) - public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { - // This method restarts all network elements belonging to the network and re-applies all the rules - Long networkId = cmd.getNetworkId(); - - User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId()); - Account callerAccount = _accountMgr.getActiveAccountById(callerUser.getAccountId()); - - // Check if network exists - NetworkVO network = _networksDao.findById(networkId); - if (network == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Network with specified id doesn't exist"); - ex.addProxyObject("networks", networkId, "networkId"); - throw ex; - } - - // Don't allow to restart network if it's not in Implemented/Setup state - if (!(network.getState() == Network.State.Implemented || network.getState() == Network.State.Setup)) { - throw new InvalidParameterValueException("Network is not in the right state to be restarted. Correct states are: " + Network.State.Implemented + ", " + Network.State.Setup); - } - - if (network.getBroadcastDomainType() == BroadcastDomainType.Lswitch ) { - /** - * Unable to restart these networks now. - * TODO Restarting a SDN based network requires updating the nics and the configuration - * in the controller. This requires a non-trivial rewrite of the restart procedure. - */ - throw new InvalidParameterException("Unable to restart a running SDN network."); - } - - _accountMgr.checkAccess(callerAccount, null, true, network); - - boolean success = restartNetwork(networkId, callerAccount, callerUser, cleanup); - - if (success) { - s_logger.debug("Network id=" + networkId + " is restarted successfully."); - } else { - s_logger.warn("Network id=" + networkId + " failed to restart."); - } - - return success; - } + @Override public boolean startNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { @@ -3993,7 +3020,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - private boolean restartNetwork(long networkId, Account callerAccount, User callerUser, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + @Override + public boolean restartNetwork(Long networkId, Account callerAccount, User callerUser, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { NetworkVO network = _networksDao.findById(networkId); @@ -4098,8 +3126,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return success; } - @Override - public int getActiveNicsInNetwork(long networkId) { + + protected int getActiveNicsInNetwork(long networkId) { return _networksDao.getActiveNicsIn(networkId); } @@ -4475,17 +3503,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - public boolean providersConfiguredForExternalNetworking(Collection providers) { - for(String providerStr : providers){ - Provider provider = Network.Provider.getProvider(providerStr); - if(provider.isExternal()){ - return true; - } - } - return false; - } - public boolean isSharedNetworkOfferingWithServices(long networkOfferingId) { + protected boolean isSharedNetworkOfferingWithServices(long networkOfferingId) { NetworkOfferingVO networkOffering = _networkOfferingDao.findById(networkOfferingId); if ( (networkOffering.getGuestType() == Network.GuestType.Shared) && ( areServicesSupportedByNetworkOffering(networkOfferingId, Service.SourceNat) || @@ -4508,7 +3527,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return (_ntwkSrvcDao.areServicesSupportedInNetwork(networkId, services)); } - private boolean cleanupIpResources(long ipId, long userId, Account caller) { + @Override + public boolean cleanupIpResources(long ipId, long userId, Account caller) { boolean success = true; // Revoke all firewall rules for the ip @@ -4646,8 +3666,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return ip; } - @Override - public boolean isNetworkAvailableInDomain(long networkId, long domainId) { + //@Override + protected boolean isNetworkAvailableInDomain(long networkId, long domainId) { Long networkDomainId = null; Network network = getNetwork(networkId); if (network.getGuestType() != Network.GuestType.Shared) { @@ -4688,239 +3708,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - private boolean checkForNonStoppedVmInNetwork(long networkId) { - List vms = _userVmDao.listByNetworkIdAndStates(networkId, VirtualMachine.State.Starting, - VirtualMachine.State.Running, VirtualMachine.State.Migrating, VirtualMachine.State.Stopping); - return vms.isEmpty(); - } - - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_NETWORK_UPDATE, eventDescription = "updating network", async = true) - public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, - User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr) { - boolean restartNetwork = false; - // verify input parameters - NetworkVO network = _networksDao.findById(networkId); - if (network == null) { - // see NetworkVO.java - InvalidParameterValueException ex = new InvalidParameterValueException("Specified network id doesn't exist in the system"); - ex.addProxyObject("networks", networkId, "networkId"); - throw ex; - } - - // don't allow to update network in Destroy state - if (network.getState() == Network.State.Destroy) { - throw new InvalidParameterValueException("Don't allow to update network in state " + Network.State.Destroy); - } - - // Don't allow to update system network - NetworkOffering offering = _networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId()); - if (offering.isSystemOnly()) { - throw new InvalidParameterValueException("Can't update system networks"); - } - - // allow to upgrade only Guest networks - if (network.getTrafficType() != Networks.TrafficType.Guest) { - throw new InvalidParameterValueException("Can't allow networks which traffic type is not " + TrafficType.Guest); - } - - _accountMgr.checkAccess(callerAccount, null, true, network); - - if (name != null) { - network.setName(name); - } - - if (displayText != null) { - network.setDisplayText(displayText); - } - - // network offering and domain suffix can be updated for Isolated networks only in 3.0 - if ((networkOfferingId != null || domainSuffix != null) && network.getGuestType() != GuestType.Isolated) { - throw new InvalidParameterValueException("NetworkOffering and domain suffix upgrade can be perfomed for Isolated networks only"); - } - - boolean networkOfferingChanged = false; - - long oldNetworkOfferingId = network.getNetworkOfferingId(); - if (networkOfferingId != null) { - - NetworkOfferingVO networkOffering = _networkOfferingDao.findById(networkOfferingId); - if (networkOffering == null || networkOffering.isSystemOnly()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find network offering with specified id"); - ex.addProxyObject(networkOffering, networkOfferingId, "networkOfferingId"); - throw ex; - } - - // network offering should be in Enabled state - if (networkOffering.getState() != NetworkOffering.State.Enabled) { - InvalidParameterValueException ex = new InvalidParameterValueException("Network offering with specified id is not in " + NetworkOffering.State.Enabled + " state, can't upgrade to it"); - ex.addProxyObject(networkOffering, networkOfferingId, "networkOfferingId"); - throw ex; - } - - - //can't update from vpc to non-vpc network offering - boolean forVpcNew = _configMgr.isOfferingForVpc(networkOffering); - boolean vorVpcOriginal = _configMgr.isOfferingForVpc(_configMgr.getNetworkOffering(oldNetworkOfferingId)); - if (forVpcNew != vorVpcOriginal) { - String errMsg = forVpcNew ? "a vpc offering " : "not a vpc offering"; - throw new InvalidParameterValueException("Can't update as the new offering is " + errMsg); - } - - if (networkOfferingId != oldNetworkOfferingId) { - NetworkOffering oldNtwkOff = _networkOfferingDao.findByIdIncludingRemoved(oldNetworkOfferingId); - Collection newProviders = finalizeServicesAndProvidersForNetwork(networkOffering, network.getPhysicalNetworkId()).values(); - Collection oldProviders = finalizeServicesAndProvidersForNetwork(oldNtwkOff, network.getPhysicalNetworkId()).values(); - - if (providersConfiguredForExternalNetworking(newProviders) != providersConfiguredForExternalNetworking(oldProviders) - && !changeCidr) { - throw new InvalidParameterValueException("Updating network failed since guest CIDR needs to be changed!"); - } - if (changeCidr) { - if (!checkForNonStoppedVmInNetwork(network.getId())) { - InvalidParameterValueException ex = new InvalidParameterValueException("All user vm of network of specified id should be stopped before changing CIDR!"); - ex.addProxyObject(network, networkId, "networkId"); - throw ex; - } - } - // check if the network is upgradable - if (!canUpgrade(network, oldNetworkOfferingId, networkOfferingId)) { - throw new InvalidParameterValueException("Can't upgrade from network offering " + oldNetworkOfferingId + " to " + networkOfferingId + "; check logs for more information"); - } - restartNetwork = true; - networkOfferingChanged = true; - } - } - Map newSvcProviders = new HashMap(); - if (networkOfferingChanged) { - newSvcProviders = finalizeServicesAndProvidersForNetwork(_configMgr.getNetworkOffering(networkOfferingId), network.getPhysicalNetworkId()); - } - - // don't allow to modify network domain if the service is not supported - if (domainSuffix != null) { - // validate network domain - if (!NetUtils.verifyDomainName(domainSuffix)) { - throw new InvalidParameterValueException( - "Invalid network domain. Total length shouldn't exceed 190 chars. Each domain label must be between 1 and 63 characters long, can contain ASCII letters 'a' through 'z', the digits '0' through '9', " - + "and the hyphen ('-'); can't start or end with \"-\""); - } - - long offeringId = oldNetworkOfferingId; - if (networkOfferingId != null) { - offeringId = networkOfferingId; - } - - Map dnsCapabilities = getNetworkOfferingServiceCapabilities(_configMgr.getNetworkOffering(offeringId), Service.Dns); - String isUpdateDnsSupported = dnsCapabilities.get(Capability.AllowDnsSuffixModification); - if (isUpdateDnsSupported == null || !Boolean.valueOf(isUpdateDnsSupported)) { - // TBD: use uuid instead of networkOfferingId. May need to hardcode tablename in call to addProxyObject(). - throw new InvalidParameterValueException("Domain name change is not supported by the network offering id=" + networkOfferingId); - } - - network.setNetworkDomain(domainSuffix); - // have to restart the network - restartNetwork = true; - } - - ReservationContext context = new ReservationContextImpl(null, null, callerUser, callerAccount); - // 1) Shutdown all the elements and cleanup all the rules. Don't allow to shutdown network in intermediate - // states - Shutdown and Implementing - boolean validStateToShutdown = (network.getState() == Network.State.Implemented || network.getState() == Network.State.Setup || network.getState() == Network.State.Allocated); - if (restartNetwork) { - if (validStateToShutdown) { - if (!changeCidr) { - s_logger.debug("Shutting down elements and resources for network id=" + networkId + " as a part of network update"); - - if (!shutdownNetworkElementsAndResources(context, true, network)) { - s_logger.warn("Failed to shutdown the network elements and resources as a part of network restart: " + network); - CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network elements and resources as a part of update to network of specified id"); - ex.addProxyObject(network, networkId, "networkId"); - throw ex; - } - } else { - // We need to shutdown the network, since we want to re-implement the network. - s_logger.debug("Shutting down network id=" + networkId + " as a part of network update"); - - if (!shutdownNetwork(network.getId(), context, true)) { - s_logger.warn("Failed to shutdown the network as a part of update to network with specified id"); - CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network as a part of update of specified network id"); - ex.addProxyObject(network, networkId, "networkId"); - throw ex; - } - } - } else { - CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network elements and resources as a part of update to network with specified id; network is in wrong state: " + network.getState()); - ex.addProxyObject(network, networkId, "networkId"); - throw ex; - } - } - - // 2) Only after all the elements and rules are shutdown properly, update the network VO - // get updated network - Network.State networkState = _networksDao.findById(networkId).getState(); - boolean validStateToImplement = (networkState == Network.State.Implemented || networkState == Network.State.Setup || networkState == Network.State.Allocated); - if (restartNetwork && !validStateToImplement) { - CloudRuntimeException ex = new CloudRuntimeException("Failed to implement the network elements and resources as a part of update to network with specified id; network is in wrong state: " + networkState); - ex.addProxyObject(network, networkId, "networkId"); - throw ex; - } - - if (networkOfferingId != null) { - if (networkOfferingChanged) { - Transaction txn = Transaction.currentTxn(); - txn.start(); - network.setNetworkOfferingId(networkOfferingId); - _networksDao.update(networkId, network, newSvcProviders); - // get all nics using this network - // log remove usage events for old offering - // log assign usage events for new offering - List nics = _nicDao.listByNetworkId(networkId); - for (NicVO nic : nics) { - long vmId = nic.getInstanceId(); - VMInstanceVO vm = _vmDao.findById(vmId); - if (vm == null) { - s_logger.error("Vm for nic " + nic.getId() + " not found with Vm Id:" + vmId); - continue; - } - long isDefault = (nic.isDefaultNic()) ? 1 : 0; - UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), null, oldNetworkOfferingId, null, 0L); - _usageEventDao.persist(usageEvent); - usageEvent = new UsageEventVO(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), vm.getHostName(), networkOfferingId, null, isDefault); - _usageEventDao.persist(usageEvent); - } - txn.commit(); - } else { - network.setNetworkOfferingId(networkOfferingId); - _networksDao.update(networkId, network, finalizeServicesAndProvidersForNetwork(_configMgr.getNetworkOffering(networkOfferingId), network.getPhysicalNetworkId())); - } - } else { - _networksDao.update(networkId, network); - } - - // 3) Implement the elements and rules again - if (restartNetwork) { - if (network.getState() != Network.State.Allocated) { - DeployDestination dest = new DeployDestination(_dcDao.findById(network.getDataCenterId()), null, null, null); - s_logger.debug("Implementing the network " + network + " elements and resources as a part of network update"); - try { - if (!changeCidr) { - implementNetworkElementsAndResources(dest, context, network, _networkOfferingDao.findById(network.getNetworkOfferingId())); - } else { - implementNetwork(network.getId(), dest, context); - } - } catch (Exception ex) { - s_logger.warn("Failed to implement network " + network + " elements and resources as a part of network update due to ", ex); - CloudRuntimeException e = new CloudRuntimeException("Failed to implement network (with specified id) elements and resources as a part of network update"); - e.addProxyObject(network, networkId, "networkId"); - throw e; - } - } - } - - return getNetwork(network.getId()); - } @Override public Integer getNetworkRate(long networkId, Long vmId) { @@ -5195,572 +3983,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return _ntwkSrvcDao.canProviderSupportServiceInNetwork(networkId, service, provider); } - protected boolean canUpgrade(Network network, long oldNetworkOfferingId, long newNetworkOfferingId) { - NetworkOffering oldNetworkOffering = _networkOfferingDao.findByIdIncludingRemoved(oldNetworkOfferingId); - NetworkOffering newNetworkOffering = _networkOfferingDao.findById(newNetworkOfferingId); + - // can upgrade only Isolated networks - if (oldNetworkOffering.getGuestType() != GuestType.Isolated) { - throw new InvalidParameterValueException("NetworkOfferingId can be upgraded only for the network of type " + GuestType.Isolated); - } - // security group service should be the same - if (areServicesSupportedByNetworkOffering(oldNetworkOfferingId, Service.SecurityGroup) != areServicesSupportedByNetworkOffering(newNetworkOfferingId, Service.SecurityGroup)) { - s_logger.debug("Offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different securityGroupProperty, can't upgrade"); - return false; - } - // Type of the network should be the same - if (oldNetworkOffering.getGuestType() != newNetworkOffering.getGuestType()) { - s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " are of different types, can't upgrade"); - return false; - } + - // tags should be the same - if (newNetworkOffering.getTags() != null) { - if (oldNetworkOffering.getTags() == null) { - s_logger.debug("New network offering id=" + newNetworkOfferingId + " has tags and old network offering id=" + oldNetworkOfferingId + " doesn't, can't upgrade"); - return false; - } - if (!oldNetworkOffering.getTags().equalsIgnoreCase(newNetworkOffering.getTags())) { - s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different tags, can't upgrade"); - return false; - } - } - - // Traffic types should be the same - if (oldNetworkOffering.getTrafficType() != newNetworkOffering.getTrafficType()) { - s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different traffic types, can't upgrade"); - return false; - } - - // specify vlan should be the same - if (oldNetworkOffering.getSpecifyVlan() != newNetworkOffering.getSpecifyVlan()) { - s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different values for specifyVlan, can't upgrade"); - return false; - } - - // specify ipRanges should be the same - if (oldNetworkOffering.getSpecifyIpRanges() != newNetworkOffering.getSpecifyIpRanges()) { - s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different values for specifyIpRangess, can't upgrade"); - return false; - } - - // Check all ips - List userIps = _ipAddressDao.listByAssociatedNetwork(network.getId(), null); - List publicIps = new ArrayList(); - if (userIps != null && !userIps.isEmpty()) { - for (IPAddressVO userIp : userIps) { - PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); - publicIps.add(publicIp); - } - } - if (oldNetworkOffering.isConserveMode() && !newNetworkOffering.isConserveMode()) { - if (!canIpsUsedForNonConserve(publicIps)) { - return false; - } - } - - return canIpsUseOffering(publicIps, newNetworkOfferingId); - } - - protected boolean canUpgradeProviders(long oldNetworkOfferingId, long newNetworkOfferingId) { - // list of services and providers should be the same - Map> newServices = getNetworkOfferingServiceProvidersMap(newNetworkOfferingId); - Map> oldServices = getNetworkOfferingServiceProvidersMap(oldNetworkOfferingId); - - if (newServices.size() < oldServices.size()) { - s_logger.debug("Network offering downgrade is not allowed: number of supported services for the new offering " + newNetworkOfferingId + " is less than the old offering " + oldNetworkOfferingId); - return false; - } - - for (Service service : oldServices.keySet()) { - - // 1)check that all old services are present in the new network offering - if (!newServices.containsKey(service)) { - s_logger.debug("New service offering doesn't have " + service + " service present in the old service offering, downgrade is not allowed"); - return false; - } - - Set newProviders = newServices.get(service); - Set oldProviders = oldServices.get(service); - - // 2) Can upgrade only from internal provider to external provider. Any other combinations are not allowed - for (Provider oldProvider : oldProviders) { - if (newProviders.contains(oldProvider)) { - s_logger.trace("New list of providers contains provider " + oldProvider); - continue; - } - // iterate through new providers and check that the old provider can upgrade - for (Provider newProvider : newProviders) { - if (!(!oldProvider.isExternal() && newProvider.isExternal())) { - s_logger.debug("Can't downgrade from network offering " + oldNetworkOfferingId + " to the new networkOffering " + newNetworkOfferingId); - return false; - } - } - } - } - return true; - } - - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_CREATE, eventDescription = "Creating Physical Network", create = true) - public PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List - isolationMethods, String broadcastDomainRangeStr, Long domainId, List tags, String name) { - - // Check if zone exists - if (zoneId == null) { - throw new InvalidParameterValueException("Please specify a valid zone."); - } - - DataCenterVO zone = _dcDao.findById(zoneId); - if (zone == null) { - throw new InvalidParameterValueException("Please specify a valid zone."); - } - - if (Grouping.AllocationState.Enabled == zone.getAllocationState()) { - // TBD: Send uuid instead of zoneId; may have to hardcode tablename in call to addProxyObject(). - throw new PermissionDeniedException("Cannot create PhysicalNetwork since the Zone is currently enabled, zone Id: " + zoneId); - } - - NetworkType zoneType = zone.getNetworkType(); - - if (zoneType == NetworkType.Basic) { - if (!_physicalNetworkDao.listByZone(zoneId).isEmpty()) { - // TBD: Send uuid instead of zoneId; may have to hardcode tablename in call to addProxyObject(). - throw new CloudRuntimeException("Cannot add the physical network to basic zone id: " + zoneId + ", there is a physical network already existing in this basic Zone"); - } - } - if (tags != null && tags.size() > 1) { - throw new InvalidParameterException("Only one tag can be specified for a physical network at this time"); - } - - if (isolationMethods != null && isolationMethods.size() > 1) { - throw new InvalidParameterException("Only one isolationMethod can be specified for a physical network at this time"); - } - - int vnetStart = 0; - int vnetEnd = 0; - if (vnetRange != null) { - // Verify zone type - if (zoneType == NetworkType.Basic - || (zoneType == NetworkType.Advanced && zone.isSecurityGroupEnabled())) { - throw new InvalidParameterValueException("Can't add vnet range to the physical network in the zone that supports " + zoneType + " network, Security Group enabled: " + zone.isSecurityGroupEnabled()); - } - - String[] tokens = vnetRange.split("-"); - try { - vnetStart = Integer.parseInt(tokens[0]); - if (tokens.length == 1) { - vnetEnd = vnetStart; - } else { - vnetEnd = Integer.parseInt(tokens[1]); - } - } catch (NumberFormatException e) { - throw new InvalidParameterValueException("Please specify valid integers for the vlan range."); - } - - //check for vnet conflicts with other physical network(s) in the zone - checkGuestVnetsConflicts(zoneId, vnetStart, vnetEnd, null); - - if ((vnetStart > vnetEnd) || (vnetStart < 0) || (vnetEnd > 4096)) { - s_logger.warn("Invalid vnet range: start range:" + vnetStart + " end range:" + vnetEnd); - throw new InvalidParameterValueException("Vnet range should be between 0-4096 and start range should be lesser than or equal to end range"); - } - } - - BroadcastDomainRange broadcastDomainRange = null; - if (broadcastDomainRangeStr != null && !broadcastDomainRangeStr.isEmpty()) { - try { - broadcastDomainRange = PhysicalNetwork.BroadcastDomainRange.valueOf(broadcastDomainRangeStr.toUpperCase()); - } catch (IllegalArgumentException ex) { - throw new InvalidParameterValueException("Unable to resolve broadcastDomainRange '" + broadcastDomainRangeStr + "' to a supported value {Pod or Zone}"); - } - - // in Acton release you can specify only Zone broadcastdomain type in Advance zone, and Pod in Basic - if (zoneType == NetworkType.Basic && broadcastDomainRange != null && broadcastDomainRange != BroadcastDomainRange.POD) { - throw new InvalidParameterValueException("Basic zone can have broadcast domain type of value " + BroadcastDomainRange.POD + " only"); - } else if (zoneType == NetworkType.Advanced && broadcastDomainRange != null && broadcastDomainRange != BroadcastDomainRange.ZONE) { - throw new InvalidParameterValueException("Advance zone can have broadcast domain type of value " + BroadcastDomainRange.ZONE + " only"); - } - } - - if (broadcastDomainRange == null) { - if (zoneType == NetworkType.Basic) { - broadcastDomainRange = PhysicalNetwork.BroadcastDomainRange.POD; - } else { - broadcastDomainRange = PhysicalNetwork.BroadcastDomainRange.ZONE; - } - } - - Transaction txn = Transaction.currentTxn(); - try { - txn.start(); - // Create the new physical network in the database - long id = _physicalNetworkDao.getNextInSequence(Long.class, "id"); - PhysicalNetworkVO pNetwork = new PhysicalNetworkVO(id, zoneId, vnetRange, networkSpeed, domainId, broadcastDomainRange, name); - pNetwork.setTags(tags); - pNetwork.setIsolationMethods(isolationMethods); - - pNetwork = _physicalNetworkDao.persist(pNetwork); - - // Add vnet entries for the new zone if zone type is Advanced - if (vnetRange != null) { - _dcDao.addVnet(zone.getId(), pNetwork.getId(), vnetStart, vnetEnd); - } - - // add VirtualRouter as the default network service provider - addDefaultVirtualRouterToPhysicalNetwork(pNetwork.getId()); - - // add security group provider to the physical network - addDefaultSecurityGroupProviderToPhysicalNetwork(pNetwork.getId()); - - // add VPCVirtualRouter as the defualt network service provider - addDefaultVpcVirtualRouterToPhysicalNetwork(pNetwork.getId()); - - txn.commit(); - return pNetwork; - } catch (Exception ex) { - s_logger.warn("Exception: ", ex); - throw new CloudRuntimeException("Fail to create a physical network"); - } - } - - @Override - public Pair, Integer> searchPhysicalNetworks(Long id, Long zoneId, String keyword, Long startIndex, Long pageSize, String name) { - Filter searchFilter = new Filter(PhysicalNetworkVO.class, "id", Boolean.TRUE, startIndex, pageSize); - SearchCriteria sc = _physicalNetworkDao.createSearchCriteria(); - - if (id != null) { - sc.addAnd("id", SearchCriteria.Op.EQ, id); - } - - if (zoneId != null) { - sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); - } - - if (name != null) { - sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + name + "%"); - } - - Pair, Integer> result = _physicalNetworkDao.searchAndCount(sc, searchFilter); - return new Pair, Integer>(result.first(), result.second()); - } - - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_UPDATE, eventDescription = "updating physical network", async = true) - public PhysicalNetwork updatePhysicalNetwork(Long id, String networkSpeed, List tags, String newVnetRangeString, String state) { - - // verify input parameters - PhysicalNetworkVO network = _physicalNetworkDao.findById(id); - if (network == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); - ex.addProxyObject(network, id, "physicalNetworkId"); - throw ex; - } - - // if zone is of Basic type, don't allow to add vnet range - DataCenter zone = _dcDao.findById(network.getDataCenterId()); - if (zone == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Zone with id=" + network.getDataCenterId() + " doesn't exist in the system"); - ex.addProxyObject(zone, network.getDataCenterId(), "dataCenterId"); - throw ex; - } - if (newVnetRangeString != null) { - if (zone.getNetworkType() == NetworkType.Basic - || (zone.getNetworkType() == NetworkType.Advanced && zone.isSecurityGroupEnabled())) { - throw new InvalidParameterValueException("Can't add vnet range to the physical network in the zone that supports " + zone.getNetworkType() + " network, Security Group enabled: " - + zone.isSecurityGroupEnabled()); - } - } - - if (tags != null && tags.size() > 1) { - throw new InvalidParameterException("Unable to support more than one tag on network yet"); - } - - PhysicalNetwork.State networkState = null; - if (state != null && !state.isEmpty()) { - try { - networkState = PhysicalNetwork.State.valueOf(state); - } catch (IllegalArgumentException ex) { - throw new InvalidParameterValueException("Unable to resolve state '" + state + "' to a supported value {Enabled or Disabled}"); - } - } - - if (state != null) { - network.setState(networkState); - } - - if (tags != null) { - network.setTags(tags); - } - - if (networkSpeed != null) { - network.setSpeed(networkSpeed); - } - - // Vnet range can be extended only - boolean replaceVnet = false; - ArrayList> vnetsToAdd = new ArrayList>(2); - - if (newVnetRangeString != null) { - Integer newStartVnet = 0; - Integer newEndVnet = 0; - String[] newVnetRange = newVnetRangeString.split("-"); - int maxVnet = 4096; - // for GRE phynets allow up to 32bits - // TODO: Not happy about this test. - // What about guru-like objects for physical networs? - s_logger.debug("ISOLATION METHODS:" + network.getIsolationMethods()); - // Java does not have unsigned types... - if (network.getIsolationMethods().contains("GRE")) { - maxVnet = (int)(Math.pow(2, 32)-1); - } - String rangeMessage = " between 0 and " + maxVnet; - if (newVnetRange.length < 2) { - throw new InvalidParameterValueException("Please provide valid vnet range" + rangeMessage); - } - - if (newVnetRange[0] == null || newVnetRange[1] == null) { - throw new InvalidParameterValueException("Please provide valid vnet range" + rangeMessage); - } - - try { - newStartVnet = Integer.parseInt(newVnetRange[0]); - newEndVnet = Integer.parseInt(newVnetRange[1]); - } catch (NumberFormatException e) { - s_logger.warn("Unable to parse vnet range:", e); - throw new InvalidParameterValueException("Please provide valid vnet range" + rangeMessage); - } - if (newStartVnet < 0 || newEndVnet > maxVnet) { - throw new InvalidParameterValueException("Vnet range has to be" + rangeMessage); - } - - if (newStartVnet > newEndVnet) { - throw new InvalidParameterValueException("Vnet range has to be" + rangeMessage + " and start range should be lesser than or equal to stop range"); - } - - //check if new vnet conflicts with vnet ranges of other physical networks - checkGuestVnetsConflicts(network.getDataCenterId(), newStartVnet, newEndVnet, network.getId()); - - if (physicalNetworkHasAllocatedVnets(network.getDataCenterId(), network.getId())) { - String[] existingRange = network.getVnet().split("-"); - int existingStartVnet = Integer.parseInt(existingRange[0]); - int existingEndVnet = Integer.parseInt(existingRange[1]); - - // check if vnet is being extended - if (newStartVnet.intValue() > existingStartVnet || newEndVnet.intValue() < existingEndVnet) { - throw new InvalidParameterValueException("Can't shrink existing vnet range as it the range has vnets allocated. Only extending existing vnet is supported"); - } - - if (newStartVnet < existingStartVnet) { - vnetsToAdd.add(new Pair(newStartVnet, existingStartVnet - 1)); - } - - if (newEndVnet > existingEndVnet) { - vnetsToAdd.add(new Pair(existingEndVnet + 1, newEndVnet)); - } - - } else { - vnetsToAdd.add(new Pair(newStartVnet, newEndVnet)); - replaceVnet = true; - } - } - - if (newVnetRangeString != null) { - network.setVnet(newVnetRangeString); - } - - _physicalNetworkDao.update(id, network); - - if (replaceVnet) { - s_logger.debug("Deleting existing vnet range for the physicalNetwork id= " + id + " and zone id=" + network.getDataCenterId() + " as a part of updatePhysicalNetwork call"); - _dcDao.deleteVnet(network.getId()); - } - - for (Pair vnetToAdd : vnetsToAdd) { - s_logger.debug("Adding vnet range " + vnetToAdd.first() + "-" + vnetToAdd.second() + " for the physicalNetwork id= " + id + " and zone id=" + network.getDataCenterId() - + " as a part of updatePhysicalNetwork call"); - _dcDao.addVnet(network.getDataCenterId(), network.getId(), vnetToAdd.first(), vnetToAdd.second()); - } - - return network; - } - - protected void checkGuestVnetsConflicts(long zoneId, int newStartVnet, int newEndVnet, Long pNtwkIdToSkip) { - List pNtwks = _physicalNetworkDao.listByZone(zoneId); - for (PhysicalNetwork pNtwk : pNtwks) { - // skip my own network and networks that don't have vnet range set - if ((pNtwk.getVnet() == null || pNtwk.getVnet().isEmpty()) || (pNtwkIdToSkip != null && pNtwkIdToSkip == pNtwk.getId())) { - continue; - } - String[] existingRange = pNtwk.getVnet().split("-"); - int startVnet = Integer.parseInt(existingRange[0]); - int endVnet = Integer.parseInt(existingRange[1]); - if ((newStartVnet >= startVnet && newStartVnet <= endVnet) - || (newEndVnet <= endVnet && newEndVnet >= startVnet)) { - throw new InvalidParameterValueException("Vnet range for physical network conflicts with another " + - "physical network's vnet in the zone"); - } - } - } - - private boolean physicalNetworkHasAllocatedVnets(long zoneId, long physicalNetworkId) { - return !_dcDao.listAllocatedVnets(physicalNetworkId).isEmpty(); - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_DELETE, eventDescription = "deleting physical network", async = true) - @DB - public boolean deletePhysicalNetwork(Long physicalNetworkId) { - - // verify input parameters - PhysicalNetworkVO pNetwork = _physicalNetworkDao.findById(physicalNetworkId); - if (pNetwork == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); - ex.addProxyObject(pNetwork, physicalNetworkId, "physicalNetworkId"); - throw ex; - } - - checkIfPhysicalNetworkIsDeletable(physicalNetworkId); - - Transaction txn = Transaction.currentTxn(); - txn.start(); - // delete vlans for this zone - List vlans = _vlanDao.listVlansByPhysicalNetworkId(physicalNetworkId); - for (VlanVO vlan : vlans) { - _vlanDao.remove(vlan.getId()); - } - - // Delete networks - List networks = _networksDao.listByPhysicalNetwork(physicalNetworkId); - if (networks != null && !networks.isEmpty()) { - for (NetworkVO network : networks) { - _networksDao.remove(network.getId()); - } - } - - // delete vnets - _dcDao.deleteVnet(physicalNetworkId); - - // delete service providers - List providers = _pNSPDao.listBy(physicalNetworkId); - - for(PhysicalNetworkServiceProviderVO provider : providers){ - try { - deleteNetworkServiceProvider(provider.getId()); - }catch (ResourceUnavailableException e) { - s_logger.warn("Unable to complete destroy of the physical network provider: " + provider.getProviderName() + ", id: "+ provider.getId(), e); - return false; - } catch (ConcurrentOperationException e) { - s_logger.warn("Unable to complete destroy of the physical network provider: " + provider.getProviderName() + ", id: "+ provider.getId(), e); - return false; - } - } - - // delete traffic types - _pNTrafficTypeDao.deleteTrafficTypes(physicalNetworkId); - - boolean success = _physicalNetworkDao.remove(physicalNetworkId); - - txn.commit(); - - return success; - } - - @DB - private void checkIfPhysicalNetworkIsDeletable(Long physicalNetworkId) { - List> tablesToCheck = new ArrayList>(); - - List vnet = new ArrayList(); - vnet.add(0, "op_dc_vnet_alloc"); - vnet.add(1, "physical_network_id"); - vnet.add(2, "there are allocated vnets for this physical network"); - tablesToCheck.add(vnet); - - List networks = new ArrayList(); - networks.add(0, "networks"); - networks.add(1, "physical_network_id"); - networks.add(2, "there are networks associated to this physical network"); - tablesToCheck.add(networks); - - /* - * List privateIP = new ArrayList(); - * privateIP.add(0, "op_dc_ip_address_alloc"); - * privateIP.add(1, "data_center_id"); - * privateIP.add(2, "there are private IP addresses allocated for this zone"); - * tablesToCheck.add(privateIP); - */ - - List publicIP = new ArrayList(); - publicIP.add(0, "user_ip_address"); - publicIP.add(1, "physical_network_id"); - publicIP.add(2, "there are public IP addresses allocated for this physical network"); - tablesToCheck.add(publicIP); - - for (List table : tablesToCheck) { - String tableName = table.get(0); - String column = table.get(1); - String errorMsg = table.get(2); - - String dbName = "cloud"; - - String selectSql = "SELECT * FROM `" + dbName + "`.`" + tableName + "` WHERE " + column + " = ?"; - - if (tableName.equals("networks")) { - selectSql += " AND removed is NULL"; - } - - if (tableName.equals("op_dc_vnet_alloc")) { - selectSql += " AND taken IS NOT NULL"; - } - - if (tableName.equals("user_ip_address")) { - selectSql += " AND state!='Free'"; - } - - if (tableName.equals("op_dc_ip_address_alloc")) { - selectSql += " AND taken IS NOT NULL"; - } - - Transaction txn = Transaction.currentTxn(); - try { - PreparedStatement stmt = txn.prepareAutoCloseStatement(selectSql); - stmt.setLong(1, physicalNetworkId); - ResultSet rs = stmt.executeQuery(); - if (rs != null && rs.next()) { - throw new CloudRuntimeException("The Physical Network is not deletable because " + errorMsg); - } - } catch (SQLException ex) { - throw new CloudRuntimeException("The Management Server failed to detect if physical network is deletable. Please contact Cloud Support."); - } - } - - } - - @Override - public List listNetworkServices(String providerName) { - - Provider provider = null; - if (providerName != null) { - provider = Network.Provider.getProvider(providerName); - if (provider == null) { - throw new InvalidParameterValueException("Invalid Network Service Provider=" + providerName); - } - } - - if (provider != null) { - NetworkElement element = getElementImplementingProvider(providerName); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + providerName + "'"); - } - return new ArrayList(element.getCapabilities().keySet()); - } else { - return Service.listAllServices(); - } - } @Override public List listSupportedNetworkServiceProviders(String serviceName) { @@ -5798,257 +4026,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return providers.get(0); } - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_CREATE, eventDescription = "Creating Physical Network ServiceProvider", create = true) - public PhysicalNetworkServiceProvider addProviderToPhysicalNetwork(Long physicalNetworkId, String providerName, Long destinationPhysicalNetworkId, List enabledServices) { + - // verify input parameters - PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId); - if (network == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); - ex.addProxyObject(network, physicalNetworkId, "physicalNetworkId"); - throw ex; - } + - // verify input parameters - if (destinationPhysicalNetworkId != null) { - PhysicalNetworkVO destNetwork = _physicalNetworkDao.findById(destinationPhysicalNetworkId); - if (destNetwork == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Destination Physical Network with specified id doesn't exist in the system"); - ex.addProxyObject(destNetwork, destinationPhysicalNetworkId, "destinationPhysicalNetworkId"); - throw ex; - } - } - - if (providerName != null) { - Provider provider = Network.Provider.getProvider(providerName); - if (provider == null) { - throw new InvalidParameterValueException("Invalid Network Service Provider=" + providerName); - } - } - - if (_pNSPDao.findByServiceProvider(physicalNetworkId, providerName) != null) { - // TBD: send uuid instead of physicalNetworkId. - throw new CloudRuntimeException("The '" + providerName + "' provider already exists on physical network : " + physicalNetworkId); - } - - // check if services can be turned off - NetworkElement element = getElementImplementingProvider(providerName); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + providerName + "'"); - } - List services = new ArrayList(); - - if (enabledServices != null) { - if (!element.canEnableIndividualServices()) { - if (enabledServices.size() != element.getCapabilities().keySet().size()) { - throw new InvalidParameterValueException("Cannot enable subset of Services, Please specify the complete list of Services for this Service Provider '" + providerName + "'"); - } - } - - // validate Services - boolean addGatewayService = false; - for (String serviceName : enabledServices) { - Network.Service service = Network.Service.getService(serviceName); - if (service == null || service == Service.Gateway) { - throw new InvalidParameterValueException("Invalid Network Service specified=" + serviceName); - } else if (service == Service.SourceNat) { - addGatewayService = true; - } - - // check if the service is provided by this Provider - if (!element.getCapabilities().containsKey(service)) { - throw new InvalidParameterValueException(providerName + " Provider cannot provide this Service specified=" + serviceName); - } - services.add(service); - } - - if (addGatewayService) { - services.add(Service.Gateway); - } - } else { - // enable all the default services supported by this element. - services = new ArrayList(element.getCapabilities().keySet()); - } - - Transaction txn = Transaction.currentTxn(); - try { - txn.start(); - // Create the new physical network in the database - PhysicalNetworkServiceProviderVO nsp = new PhysicalNetworkServiceProviderVO(physicalNetworkId, providerName); - // set enabled services - nsp.setEnabledServices(services); - - if (destinationPhysicalNetworkId != null) { - nsp.setDestinationPhysicalNetworkId(destinationPhysicalNetworkId); - } - nsp = _pNSPDao.persist(nsp); - - txn.commit(); - return nsp; - } catch (Exception ex) { - s_logger.warn("Exception: ", ex); - throw new CloudRuntimeException("Fail to add a provider to physical network"); - } - - } - - @Override - public Pair, Integer> listNetworkServiceProviders(Long physicalNetworkId, - String name, String state, Long startIndex, Long pageSize) { - - Filter searchFilter = new Filter(PhysicalNetworkServiceProviderVO.class, "id", false, startIndex, pageSize); - SearchBuilder sb = _pNSPDao.createSearchBuilder(); - SearchCriteria sc = sb.create(); - - if (physicalNetworkId != null) { - sc.addAnd("physicalNetworkId", Op.EQ, physicalNetworkId); - } - - if (name != null) { - sc.addAnd("providerName", Op.EQ, name); - } - - if (state != null) { - sc.addAnd("state", Op.EQ, state); - } - - Pair, Integer> result = _pNSPDao.searchAndCount(sc, searchFilter); - return new Pair, Integer>(result.first(), result.second()); - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_UPDATE, eventDescription = "Updating physical network ServiceProvider", async = true) - public PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String stateStr, List enabledServices) { - - PhysicalNetworkServiceProviderVO provider = _pNSPDao.findById(id); - if (provider == null) { - throw new InvalidParameterValueException("Network Service Provider id=" + id + "doesn't exist in the system"); - } - - NetworkElement element = getElementImplementingProvider(provider.getProviderName()); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getProviderName() + "'"); - } - - PhysicalNetworkServiceProvider.State state = null; - if (stateStr != null && !stateStr.isEmpty()) { - try { - state = PhysicalNetworkServiceProvider.State.valueOf(stateStr); - } catch (IllegalArgumentException ex) { - throw new InvalidParameterValueException("Unable to resolve state '" + stateStr + "' to a supported value {Enabled or Disabled}"); - } - } - - boolean update = false; - - if (state != null) { - if (state == PhysicalNetworkServiceProvider.State.Shutdown) { - throw new InvalidParameterValueException("Updating the provider state to 'Shutdown' is not supported"); - } - - if (s_logger.isDebugEnabled()) { - s_logger.debug("updating state of the service provider id=" + id + " on physical network: " + provider.getPhysicalNetworkId() + " to state: " + stateStr); - } - switch (state) { - case Enabled: - if (element != null && element.isReady(provider)) { - provider.setState(PhysicalNetworkServiceProvider.State.Enabled); - update = true; - } else { - throw new CloudRuntimeException("Provider is not ready, cannot Enable the provider, please configure the provider first"); - } - break; - case Disabled: - // do we need to do anything for the provider instances before disabling? - provider.setState(PhysicalNetworkServiceProvider.State.Disabled); - update = true; - break; - } - } - - if (enabledServices != null) { - // check if services can be turned of - if (!element.canEnableIndividualServices()) { - throw new InvalidParameterValueException("Cannot update set of Services for this Service Provider '" + provider.getProviderName() + "'"); - } - - // validate Services - List services = new ArrayList(); - for (String serviceName : enabledServices) { - Network.Service service = Network.Service.getService(serviceName); - if (service == null) { - throw new InvalidParameterValueException("Invalid Network Service specified=" + serviceName); - } - services.add(service); - } - // set enabled services - provider.setEnabledServices(services); - update = true; - } - - if (update) { - _pNSPDao.update(id, provider); - } - return provider; - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_DELETE, eventDescription = "Deleting physical network ServiceProvider", async = true) - public boolean deleteNetworkServiceProvider(Long id) throws ConcurrentOperationException, ResourceUnavailableException { - PhysicalNetworkServiceProviderVO provider = _pNSPDao.findById(id); - - if (provider == null) { - throw new InvalidParameterValueException("Network Service Provider id=" + id + "doesn't exist in the system"); - } - - // check if there are networks using this provider - List networks = _networksDao.listByPhysicalNetworkAndProvider(provider.getPhysicalNetworkId(), provider.getProviderName()); - if (networks != null && !networks.isEmpty()) { - throw new CloudRuntimeException("Provider is not deletable because there are active networks using this provider, please upgrade these networks to new network offerings"); - } - - User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId()); - Account callerAccount = _accountMgr.getActiveAccountById(callerUser.getAccountId()); - // shutdown the provider instances - ReservationContext context = new ReservationContextImpl(null, null, callerUser, callerAccount); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Shutting down the service provider id=" + id + " on physical network: " + provider.getPhysicalNetworkId()); - } - NetworkElement element = getElementImplementingProvider(provider.getProviderName()); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getProviderName() + "'"); - } - - if (element != null && element.shutdownProviderInstances(provider, context)) { - provider.setState(PhysicalNetworkServiceProvider.State.Shutdown); - } - - return _pNSPDao.remove(id); - } - - @Override - public PhysicalNetwork getPhysicalNetwork(Long physicalNetworkId) { - return _physicalNetworkDao.findById(physicalNetworkId); - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_CREATE, eventDescription = "Creating Physical Network", async = true) - public PhysicalNetwork getCreatedPhysicalNetwork(Long physicalNetworkId) { - return getPhysicalNetwork(physicalNetworkId); - } - - @Override - public PhysicalNetworkServiceProvider getPhysicalNetworkServiceProvider(Long providerId) { - return _pNSPDao.findById(providerId); - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_CREATE, eventDescription = "Creating Physical Network ServiceProvider", async = true) - public PhysicalNetworkServiceProvider getCreatedPhysicalNetworkServiceProvider(Long providerId) { - return getPhysicalNetworkServiceProvider(providerId); - } @Override public long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType) { @@ -6357,169 +4338,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return isServiceEnabledInNetwork(physicalNetworkId, network.getId(), Service.SecurityGroup); } - @Override - @DB - @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_CREATE, eventDescription = "Creating Physical Network TrafficType", create = true) - public PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficTypeStr, String xenLabel, String kvmLabel, String vmwareLabel, String simulatorLabel, String vlan) { - - // verify input parameters - PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId); - if (network == null) { - throw new InvalidParameterValueException("Physical Network id=" + physicalNetworkId + "doesn't exist in the system"); - } - - Networks.TrafficType trafficType = null; - if (trafficTypeStr != null && !trafficTypeStr.isEmpty()) { - try { - trafficType = Networks.TrafficType.valueOf(trafficTypeStr); - } catch (IllegalArgumentException ex) { - throw new InvalidParameterValueException("Unable to resolve trafficType '" + trafficTypeStr + "' to a supported value"); - } - } - - if (_pNTrafficTypeDao.isTrafficTypeSupported(physicalNetworkId, trafficType)) { - throw new CloudRuntimeException("This physical network already supports the traffic type: " + trafficType); - } - // For Storage, Control, Management, Public check if the zone has any other physical network with this - // traffictype already present - // If yes, we cant add these traffics to one more physical network in the zone. - - if (TrafficType.isSystemNetwork(trafficType) || TrafficType.Public.equals(trafficType) || TrafficType.Storage.equals(trafficType)) { - if (!_physicalNetworkDao.listByZoneAndTrafficType(network.getDataCenterId(), trafficType).isEmpty()) { - throw new CloudRuntimeException("Fail to add the traffic type to physical network because Zone already has a physical network with this traffic type: " + trafficType); - } - } - - if (TrafficType.Storage.equals(trafficType)) { - List ssvms = _stnwMgr.getSSVMWithNoStorageNetwork(network.getDataCenterId()); - if (!ssvms.isEmpty()) { - StringBuilder sb = new StringBuilder( - "Cannot add " - + trafficType - + " traffic type as there are below secondary storage vm still running. Please stop them all and add Storage traffic type again, then destory them all to allow CloudStack recreate them with storage network(If you have added storage network ip range)"); - sb.append("SSVMs:"); - for (SecondaryStorageVmVO ssvm : ssvms) { - sb.append(ssvm.getInstanceName()).append(":").append(ssvm.getState()); - } - throw new CloudRuntimeException(sb.toString()); - } - } - - Transaction txn = Transaction.currentTxn(); - try { - txn.start(); - // Create the new traffic type in the database - if (xenLabel == null) { - xenLabel = getDefaultXenNetworkLabel(trafficType); - } - PhysicalNetworkTrafficTypeVO pNetworktrafficType = new PhysicalNetworkTrafficTypeVO(physicalNetworkId, trafficType, xenLabel, kvmLabel, vmwareLabel, simulatorLabel, vlan); - pNetworktrafficType = _pNTrafficTypeDao.persist(pNetworktrafficType); - - txn.commit(); - return pNetworktrafficType; - } catch (Exception ex) { - s_logger.warn("Exception: ", ex); - throw new CloudRuntimeException("Fail to add a traffic type to physical network"); - } - - } - - private String getDefaultXenNetworkLabel(TrafficType trafficType) { - String xenLabel = null; - switch (trafficType) { - case Public: - xenLabel = _configDao.getValue(Config.XenPublicNetwork.key()); - break; - case Guest: - xenLabel = _configDao.getValue(Config.XenGuestNetwork.key()); - break; - case Storage: - xenLabel = _configDao.getValue(Config.XenStorageNetwork1.key()); - break; - case Management: - xenLabel = _configDao.getValue(Config.XenPrivateNetwork.key()); - break; - case Control: - xenLabel = "cloud_link_local_network"; - break; - } - return xenLabel; - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_CREATE, eventDescription = "Creating Physical Network TrafficType", async = true) - public PhysicalNetworkTrafficType getPhysicalNetworkTrafficType(Long id) { - return _pNTrafficTypeDao.findById(id); - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_UPDATE, eventDescription = "Updating physical network TrafficType", async = true) - public PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, String vmwareLabel) { - - PhysicalNetworkTrafficTypeVO trafficType = _pNTrafficTypeDao.findById(id); - - if (trafficType == null) { - throw new InvalidParameterValueException("Traffic Type with id=" + id + "doesn't exist in the system"); - } - - if (xenLabel != null) { - if("".equals(xenLabel)){ - xenLabel = null; - } - trafficType.setXenNetworkLabel(xenLabel); - } - if (kvmLabel != null) { - if("".equals(kvmLabel)){ - kvmLabel = null; - } - trafficType.setKvmNetworkLabel(kvmLabel); - } - if (vmwareLabel != null) { - if("".equals(vmwareLabel)){ - vmwareLabel = null; - } - trafficType.setVmwareNetworkLabel(vmwareLabel); - } - _pNTrafficTypeDao.update(id, trafficType); - - return trafficType; - } - - @Override - @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_DELETE, eventDescription = "Deleting physical network TrafficType", async = true) - public boolean deletePhysicalNetworkTrafficType(Long id) { - PhysicalNetworkTrafficTypeVO trafficType = _pNTrafficTypeDao.findById(id); - - if (trafficType == null) { - throw new InvalidParameterValueException("Traffic Type with id=" + id + "doesn't exist in the system"); - } - - // check if there are any networks associated to this physical network with this traffic type - if (TrafficType.Guest.equals(trafficType.getTrafficType())) { - if (!_networksDao.listByPhysicalNetworkTrafficType(trafficType.getPhysicalNetworkId(), trafficType.getTrafficType()).isEmpty()) { - throw new CloudRuntimeException("The Traffic Type is not deletable because there are existing networks with this traffic type:" + trafficType.getTrafficType()); - } - } else if (TrafficType.Storage.equals(trafficType.getTrafficType())) { - PhysicalNetworkVO pn = _physicalNetworkDao.findById(trafficType.getPhysicalNetworkId()); - if (_stnwMgr.isAnyStorageIpInUseInZone(pn.getDataCenterId())) { - throw new CloudRuntimeException("The Traffic Type is not deletable because there are still some storage network ip addresses in use:" + trafficType.getTrafficType()); - } - } - return _pNTrafficTypeDao.remove(id); - } - - @Override - public Pair, Integer> listTrafficTypes(Long physicalNetworkId) { - PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId); - if (network == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); - ex.addProxyObject(network, physicalNetworkId, "physicalNetworkId"); - throw ex; - } - - Pair, Integer> result = _pNTrafficTypeDao.listAndCountBy(physicalNetworkId); - return new Pair, Integer>(result.first(), result.second()); - } @Override public PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { @@ -6848,40 +4666,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return networks.get(0); } - protected PhysicalNetworkServiceProvider addDefaultVirtualRouterToPhysicalNetwork(long physicalNetworkId) { - - PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, Network.Provider.VirtualRouter.getName(), null, null); - // add instance of the provider - VirtualRouterElement element = (VirtualRouterElement) getElementImplementingProvider(Network.Provider.VirtualRouter.getName()); - if (element == null) { - throw new CloudRuntimeException("Unable to find the Network Element implementing the VirtualRouter Provider"); - } - element.addElement(nsp.getId(), VirtualRouterProviderType.VirtualRouter); - - return nsp; - } - - protected PhysicalNetworkServiceProvider addDefaultVpcVirtualRouterToPhysicalNetwork(long physicalNetworkId) { - - PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, - Network.Provider.VPCVirtualRouter.getName(), null, null); - // add instance of the provider - VpcVirtualRouterElement element = (VpcVirtualRouterElement) getElementImplementingProvider(Network.Provider.VPCVirtualRouter.getName()); - if (element == null) { - throw new CloudRuntimeException("Unable to find the Network Element implementing the VPCVirtualRouter Provider"); - } - element.addElement(nsp.getId(), VirtualRouterProviderType.VPCVirtualRouter); - - return nsp; - } - - protected PhysicalNetworkServiceProvider addDefaultSecurityGroupProviderToPhysicalNetwork(long physicalNetworkId) { - - PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, - Network.Provider.SecurityGroupProvider.getName(), null, null); - - return nsp; - } + @Override public boolean isNetworkSystem(Network network) { @@ -6893,7 +4678,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - protected Map finalizeServicesAndProvidersForNetwork(NetworkOffering offering, Long physicalNetworkId) { + @Override + public Map finalizeServicesAndProvidersForNetwork(NetworkOffering offering, Long physicalNetworkId) { Map svcProviders = new HashMap(); Map> providerSvcs = new HashMap>(); List servicesMap = _ntwkOfferingSrvcDao.listByNetworkOfferingId(offering.getId()); @@ -7097,29 +4883,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return true; } - @Override - public List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd) { - String type = cmd.getTrafficType(); - List> results = new ArrayList>(); - if (type != null) { - for (NetworkGuru guru : _networkGurus) { - if (guru.isMyTrafficType(TrafficType.getTrafficType(type))) { - results.add(new Pair(TrafficType.getTrafficType(type), guru.getName())); - break; - } - } - } else { - for (NetworkGuru guru : _networkGurus) { - TrafficType[] allTypes = guru.getSupportedTrafficType(); - for (TrafficType t : allTypes) { - results.add(new Pair(t, guru.getName())); - } - } - } - - return results; - } - + @Override public void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue) { for (Provider provider : providers) { @@ -7152,6 +4916,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } + @Override public IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) throws InsufficientAddressCapacityException { Network guestNetwork = getNetwork(networkId); @@ -7164,7 +4929,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag // allocate ip ip = allocateIP(owner, true, guestNetwork.getDataCenterId()); // apply ip associations - ip = associateIPToNetwork(ip.getId(), networkId); + ip = associateIPToGuestNetwork(ip.getId(), networkId, true);; } catch (ResourceAllocationException ex) { throw new CloudRuntimeException("Failed to allocate system ip due to ", ex); } catch (ConcurrentOperationException ex) { @@ -7337,106 +5102,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return false; } - @Override - @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "associating Ip", async = true) - public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, - ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException { - - Network network = _networksDao.findById(networkId); - if (network == null) { - throw new InvalidParameterValueException("Invalid network id is given"); - } - - if (network.getVpcId() != null) { - throw new InvalidParameterValueException("Can't assign ip to the network directly when network belongs" + - " to VPC.Specify vpcId to associate ip address to VPC"); - } - return associateIPToGuestNetwork(ipId, networkId, true); - - } - - - @Override @DB - public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, - String vlan, String startIp, String endIp, String gateway, String netmask, long networkOwnerId, Long vpcId) - throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { - - Account owner = _accountMgr.getAccount(networkOwnerId); - - // Get system network offeirng - NetworkOfferingVO ntwkOff = _systemNetworks.get(NetworkOffering.SystemPrivateGatewayNetworkOffering); - - // Validate physical network - PhysicalNetwork pNtwk = _physicalNetworkDao.findById(physicalNetworkId); - if (pNtwk == null) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find a physical network" + - " having the given id"); - ex.addProxyObject("physical_network", physicalNetworkId, "physicalNetworkId"); - throw ex; - } - - // VALIDATE IP INFO - // if end ip is not specified, default it to startIp - if (!NetUtils.isValidIp(startIp)) { - throw new InvalidParameterValueException("Invalid format for the startIp parameter"); - } - if (endIp == null) { - endIp = startIp; - } else if (!NetUtils.isValidIp(endIp)) { - throw new InvalidParameterValueException("Invalid format for the endIp parameter"); - } - - String cidr = null; - if (!NetUtils.isValidIp(gateway)) { - throw new InvalidParameterValueException("Invalid gateway"); - } - if (!NetUtils.isValidNetmask(netmask)) { - throw new InvalidParameterValueException("Invalid netmask"); - } - - cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask); - - - Transaction txn = Transaction.currentTxn(); - txn.start(); - - //lock datacenter as we need to get mac address seq from there - DataCenterVO dc = _dcDao.lockRow(pNtwk.getDataCenterId(), true); - - //check if we need to create guest network - Network privateNetwork = _networksDao.getPrivateNetwork(BroadcastDomainType.Vlan.toUri(vlan).toString(), cidr, - networkOwnerId, pNtwk.getDataCenterId()); - if (privateNetwork == null) { - //create Guest network - privateNetwork = createGuestNetwork(ntwkOff.getId(), networkName, displayText, gateway, cidr, vlan, - null, owner, null, pNtwk, pNtwk.getDataCenterId(), ACLType.Account, null, null); - s_logger.debug("Created private network " + privateNetwork); - } else { - s_logger.debug("Private network already exists: " + privateNetwork); - } - - //add entry to private_ip_address table - PrivateIpVO privateIp = _privateIpDao.findByIpAndSourceNetworkId(privateNetwork.getId(), startIp); - if (privateIp != null) { - throw new InvalidParameterValueException("Private ip address " + startIp + " already used for private gateway" + - " in zone " + _configMgr.getZone(pNtwk.getDataCenterId()).getName()); - } - - Long mac = dc.getMacAddress(); - Long nextMac = mac + 1; - dc.setMacAddress(nextMac); - - privateIp = new PrivateIpVO(startIp, privateNetwork.getId(), nextMac, vpcId); - _privateIpDao.persist(privateIp); - - _dcDao.update(dc.getId(), dc); - - txn.commit(); - s_logger.debug("Private network " + privateNetwork + " is created"); - - return privateNetwork; - } - + @Override public boolean setupDns(Network network, Provider provider) { boolean dnsProvided = isProviderSupportServiceInNetwork(network.getId(), Service.Dns, provider ); diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java new file mode 100755 index 00000000000..edd53e2ec1b --- /dev/null +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -0,0 +1,2964 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.network; + +import java.security.InvalidParameterException; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.log4j.Logger; + +import com.cloud.acl.ControlledEntity.ACLType; +import com.cloud.acl.SecurityChecker.AccessType; +import com.cloud.api.commands.CreateNetworkCmd; +import com.cloud.api.commands.ListNetworksCmd; +import com.cloud.api.commands.ListTrafficTypeImplementorsCmd; +import com.cloud.api.commands.RestartNetworkCmd; +import com.cloud.configuration.Config; +import com.cloud.configuration.ConfigurationManager; +import com.cloud.configuration.dao.ConfigurationDao; +import com.cloud.dc.DataCenter; +import com.cloud.dc.DataCenter.NetworkType; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.Vlan.VlanType; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.AccountVlanMapDao; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.VlanDao; +import com.cloud.deploy.DeployDestination; +import com.cloud.domain.Domain; +import com.cloud.domain.DomainVO; +import com.cloud.domain.dao.DomainDao; +import com.cloud.event.ActionEvent; +import com.cloud.event.EventTypes; +import com.cloud.event.UsageEventVO; +import com.cloud.event.dao.EventDao; +import com.cloud.event.dao.UsageEventDao; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.exception.UnsupportedServiceException; +import com.cloud.network.IpAddress.State; +import com.cloud.network.Network.Capability; +import com.cloud.network.Network.GuestType; +import com.cloud.network.Network.Provider; +import com.cloud.network.Network.Service; +import com.cloud.network.Networks.BroadcastDomainType; +import com.cloud.network.Networks.TrafficType; +import com.cloud.network.PhysicalNetwork.BroadcastDomainRange; +import com.cloud.network.VirtualRouterProvider.VirtualRouterProviderType; +import com.cloud.network.addr.PublicIp; +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.dao.NetworkServiceMapDao; +import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderVO; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; +import com.cloud.network.element.NetworkElement; +import com.cloud.network.element.VirtualRouterElement; +import com.cloud.network.element.VpcVirtualRouterElement; +import com.cloud.network.guru.NetworkGuru; +import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.RulesManager; +import com.cloud.network.vpc.PrivateIpVO; +import com.cloud.network.vpc.VpcManager; +import com.cloud.network.vpc.dao.PrivateIpDao; +import com.cloud.offering.NetworkOffering; +import com.cloud.offerings.NetworkOfferingVO; +import com.cloud.offerings.dao.NetworkOfferingDao; +import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; +import com.cloud.org.Grouping; +import com.cloud.projects.Project; +import com.cloud.projects.ProjectManager; +import com.cloud.server.ResourceTag.TaggedResourceType; +import com.cloud.tags.ResourceTagVO; +import com.cloud.tags.dao.ResourceTagDao; +import com.cloud.user.Account; +import com.cloud.user.AccountManager; +import com.cloud.user.AccountVO; +import com.cloud.user.DomainManager; +import com.cloud.user.ResourceLimitService; +import com.cloud.user.User; +import com.cloud.user.UserContext; +import com.cloud.user.dao.AccountDao; +import com.cloud.utils.AnnotationHelper; +import com.cloud.utils.NumbersUtil; +import com.cloud.utils.Pair; +import com.cloud.utils.component.Adapters; +import com.cloud.utils.component.Inject; +import com.cloud.utils.component.Manager; +import com.cloud.utils.db.DB; +import com.cloud.utils.db.Filter; +import com.cloud.utils.db.JoinBuilder; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.SearchCriteria.Op; +import com.cloud.utils.db.Transaction; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.NicVO; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.ReservationContextImpl; +import com.cloud.vm.SecondaryStorageVmVO; +import com.cloud.vm.UserVmVO; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.dao.NicDao; +import com.cloud.vm.dao.UserVmDao; +import com.cloud.vm.dao.VMInstanceDao; + +/** + * NetworkServiceImpl implements NetworkService. + */ +@Local(value = { NetworkService.class }) +public class NetworkServiceImpl implements NetworkService, Manager { + private static final Logger s_logger = Logger.getLogger(NetworkServiceImpl.class); + + String _name; + @Inject + DataCenterDao _dcDao = null; + @Inject + VlanDao _vlanDao = null; + @Inject + IPAddressDao _ipAddressDao = null; + @Inject + AccountDao _accountDao = null; + @Inject + DomainDao _domainDao = null; + + @Inject + EventDao _eventDao = null; + @Inject + ConfigurationDao _configDao; + @Inject + UserVmDao _userVmDao = null; + + @Inject + AccountManager _accountMgr; + @Inject + ConfigurationManager _configMgr; + @Inject + AccountVlanMapDao _accountVlanMapDao; + @Inject + NetworkOfferingDao _networkOfferingDao = null; + @Inject + NetworkDao _networksDao = null; + @Inject + NicDao _nicDao = null; + @Inject + RulesManager _rulesMgr; + + @Inject + UsageEventDao _usageEventDao; + + @Inject(adapter = NetworkGuru.class) + Adapters _networkGurus; + + @Inject + NetworkDomainDao _networkDomainDao; + @Inject + VMInstanceDao _vmDao; + + @Inject + FirewallRulesDao _firewallDao; + + @Inject + ResourceLimitService _resourceLimitMgr; + + @Inject + DomainManager _domainMgr; + @Inject + ProjectManager _projectMgr; + @Inject + NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao; + @Inject + PhysicalNetworkDao _physicalNetworkDao; + @Inject + PhysicalNetworkServiceProviderDao _pNSPDao; + + @Inject + PhysicalNetworkTrafficTypeDao _pNTrafficTypeDao; + + @Inject + NetworkServiceMapDao _ntwkSrvcDao; + @Inject + StorageNetworkManager _stnwMgr; + @Inject + VpcManager _vpcMgr; + @Inject + PrivateIpDao _privateIpDao; + @Inject + ResourceTagDao _resourceTagDao; + @Inject + NetworkManager _networkMgr; + + private final HashMap _systemNetworks = new HashMap(5); + + String _networkDomain; + int _cidrLimit; + boolean _allowSubdomainNetworkAccess; + + private Map _configs; + + + + + /* Get a list of IPs, classify them by service */ + //@Override + public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { + Map> ipToServices = new HashMap>(); + + if (publicIps != null && !publicIps.isEmpty()) { + Set networkSNAT = new HashSet(); + for (PublicIp ip : publicIps) { + Set services = ipToServices.get(ip); + if (services == null) { + services = new HashSet(); + } + if (ip.isSourceNat()) { + if (!networkSNAT.contains(ip.getAssociatedWithNetworkId())) { + services.add(Service.SourceNat); + networkSNAT.add(ip.getAssociatedWithNetworkId()); + } else { + CloudRuntimeException ex = new CloudRuntimeException("Multiple generic soure NAT IPs provided for network"); + // see the IPAddressVO.java class. + ex.addProxyObject("user_ip_address", ip.getAssociatedWithNetworkId(), "networkId"); + throw ex; + } + } + ipToServices.put(ip, services); + + // if IP in allocating state then it will not have any rules attached so skip IPAssoc to network service + // provider + if (ip.getState() == State.Allocating) { + continue; + } + + // check if any active rules are applied on the public IP + Set purposes = getPublicIpPurposeInRules(ip, false, includingFirewall); + // Firewall rules didn't cover static NAT + if (ip.isOneToOneNat() && ip.getAssociatedWithVmId() != null) { + if (purposes == null) { + purposes = new HashSet(); + } + purposes.add(Purpose.StaticNat); + } + if (purposes == null || purposes.isEmpty()) { + // since no active rules are there check if any rules are applied on the public IP but are in +// revoking state + + purposes = getPublicIpPurposeInRules(ip, true, includingFirewall); + if (ip.isOneToOneNat()) { + if (purposes == null) { + purposes = new HashSet(); + } + purposes.add(Purpose.StaticNat); + } + if (purposes == null || purposes.isEmpty()) { + // IP is not being used for any purpose so skip IPAssoc to network service provider + continue; + } else { + if (rulesRevoked) { + // no active rules/revoked rules are associated with this public IP, so remove the +// association with the provider + ip.setState(State.Releasing); + } else { + if (ip.getState() == State.Releasing) { + // rules are not revoked yet, so don't let the network service provider revoke the IP +// association + // mark IP is allocated so that IP association will not be removed from the provider + ip.setState(State.Allocated); + } + } + } + } + if (purposes.contains(Purpose.StaticNat)) { + services.add(Service.StaticNat); + } + if (purposes.contains(Purpose.LoadBalancing)) { + services.add(Service.Lb); + } + if (purposes.contains(Purpose.PortForwarding)) { + services.add(Service.PortForwarding); + } + if (purposes.contains(Purpose.Vpn)) { + services.add(Service.Vpn); + } + if (purposes.contains(Purpose.Firewall)) { + services.add(Service.Firewall); + } + if (services.isEmpty()) { + continue; + } + ipToServices.put(ip, services); + } + } + return ipToServices; + } + + public boolean canIpUsedForNonConserveService(PublicIp ip, Service service) { + // If it's non-conserve mode, then the new ip should not be used by any other services + List ipList = new ArrayList(); + ipList.add(ip); + Map> ipToServices = getIpToServices(ipList, false, false); + Set services = ipToServices.get(ip); + // Not used currently, safe + if (services == null || services.isEmpty()) { + return true; + } + // Since it's non-conserve mode, only one service should used for IP + if (services.size() != 1) { + throw new InvalidParameterException("There are multiple services used ip " + ip.getAddress() + "."); + } + if (service != null && !((Service) services.toArray()[0] == service || service.equals(Service.Firewall))) { + throw new InvalidParameterException("The IP " + ip.getAddress() + " is already used as " + ((Service) services.toArray()[0]).getName() + " rather than " + service.getName()); + } + return true; + } + + protected boolean canIpsUsedForNonConserve(List publicIps) { + boolean result = true; + for (PublicIp ip : publicIps) { + result = canIpUsedForNonConserveService(ip, null); + if (!result) { + break; + } + } + return result; + } + + private boolean canIpsUseOffering(List publicIps, long offeringId) { + Map> ipToServices = getIpToServices(publicIps, false, true); + Map> serviceToProviders = _networkMgr.getNetworkOfferingServiceProvidersMap(offeringId); + for (PublicIp ip : ipToServices.keySet()) { + Set services = ipToServices.get(ip); + Provider provider = null; + for (Service service : services) { + Set curProviders = serviceToProviders.get(service); + if (curProviders == null || curProviders.isEmpty()) { + continue; + } + Provider curProvider = (Provider) curProviders.toArray()[0]; + if (provider == null) { + provider = curProvider; + continue; + } + // We don't support multiple providers for one service now + if (!provider.equals(curProvider)) { + throw new InvalidParameterException("There would be multiple providers for IP " + ip.getAddress() + " with the new network offering!"); + } + } + } + return true; + } + + + + + private Set getPublicIpPurposeInRules(PublicIp ip, boolean includeRevoked, boolean includingFirewall) { + Set result = new HashSet(); + List rules = null; + if (includeRevoked) { + rules = _firewallDao.listByIp(ip.getId()); + } else { + rules = _firewallDao.listByIpAndNotRevoked(ip.getId()); + } + + if (rules == null || rules.isEmpty()) { + return null; + } + + for (FirewallRuleVO rule : rules) { + if (rule.getPurpose() != Purpose.Firewall || includingFirewall) { + result.add(rule.getPurpose()); + } + } + + return result; + } + + @Override + public List getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner) { + + return _networksDao.listByZoneAndGuestType(owner.getId(), zoneId, Network.GuestType.Isolated, false); + } + + @Override + public List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { + + return _networksDao.listSourceNATEnabledNetworks(owner.getId(), zoneId, Network.GuestType.Isolated); + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "allocating Ip", create = true) + public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) + throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { + + if (networkId != null) { + Network network = _networksDao.findById(networkId); + if (network == null) { + throw new InvalidParameterValueException("Invalid network id is given"); + } + if (network.getGuestType() == Network.GuestType.Shared) { + DataCenter zone = _configMgr.getZone(zoneId); + if (zone == null) { + throw new InvalidParameterValueException("Invalid zone Id is given"); + } + + // if shared network in the advanced zone, then check the caller against the network for 'AccessType.UseNetwork' + if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) && zone.getNetworkType() == NetworkType.Advanced) { + Account caller = UserContext.current().getCaller(); + long callerUserId = UserContext.current().getCallerUserId(); + _accountMgr.checkAccess(caller, AccessType.UseNetwork, false, network); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId()); + } + return _networkMgr.allocateIp(ipOwner, false, caller, zone); + } else { + throw new InvalidParameterValueException("Associate IP address can only be called on the shared networks in the advanced zone" + + " with Firewall/Source Nat/Static Nat/Port Forwarding/Load balancing services enabled"); + } + } + } + + return allocateIP(ipOwner, false, zoneId); + } + + protected IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) + throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { + Account caller = UserContext.current().getCaller(); + long callerUserId = UserContext.current().getCallerUserId(); + // check permissions + _accountMgr.checkAccess(caller, null, false, ipOwner); + + DataCenter zone = _configMgr.getZone(zoneId); + + return _networkMgr.allocateIp(ipOwner, isSystem, caller, zone); + } + + + + + + @Override + @DB + public boolean configure(final String name, final Map params) throws ConfigurationException { + _name = name; + + + + _configs = _configDao.getConfiguration("Network", params); + _networkDomain = _configs.get(Config.GuestDomainSuffix.key()); + + _cidrLimit = NumbersUtil.parseInt(_configs.get(Config.NetworkGuestCidrLimit.key()), 22); + + NetworkOfferingVO publicNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPublicNetwork, TrafficType.Public, true); + publicNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(publicNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemPublicNetwork, publicNetworkOffering); + NetworkOfferingVO managementNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemManagementNetwork, TrafficType.Management, false); + managementNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(managementNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemManagementNetwork, managementNetworkOffering); + NetworkOfferingVO controlNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemControlNetwork, TrafficType.Control, false); + controlNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(controlNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemControlNetwork, controlNetworkOffering); + NetworkOfferingVO storageNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemStorageNetwork, TrafficType.Storage, true); + storageNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(storageNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemStorageNetwork, storageNetworkOffering); + NetworkOfferingVO privateGatewayNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, + GuestType.Isolated); + privateGatewayNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(privateGatewayNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, privateGatewayNetworkOffering); + + + + + + _allowSubdomainNetworkAccess = Boolean.valueOf(_configs.get(Config.SubDomainNetworkAccess.key())); + + s_logger.info("Network Manager is configured."); + + return true; + } + + @Override + public String getName() { + return _name; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + return true; + } + + protected NetworkServiceImpl() { + } + + + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_NET_IP_RELEASE, eventDescription = "disassociating Ip", async = true) + public boolean releaseIpAddress(long ipAddressId) throws InsufficientAddressCapacityException { + Long userId = UserContext.current().getCallerUserId(); + Account caller = UserContext.current().getCaller(); + + // Verify input parameters + IPAddressVO ipVO = _ipAddressDao.findById(ipAddressId); + if (ipVO == null) { + throw new InvalidParameterValueException("Unable to find ip address by id"); + } + + if (ipVO.getAllocatedTime() == null) { + s_logger.debug("Ip Address id= " + ipAddressId + " is not allocated, so do nothing."); + return true; + } + + // verify permissions + if (ipVO.getAllocatedToAccountId() != null) { + _accountMgr.checkAccess(caller, null, true, ipVO); + } + + if (ipVO.isSourceNat()) { + throw new IllegalArgumentException("ip address is used for source nat purposes and can not be disassociated."); + } + + VlanVO vlan = _vlanDao.findById(ipVO.getVlanId()); + if (!vlan.getVlanType().equals(VlanType.VirtualNetwork)) { + throw new IllegalArgumentException("only ip addresses that belong to a virtual network may be disassociated."); + } + + // Check for account wide pool. It will have an entry for account_vlan_map. + if (_accountVlanMapDao.findAccountVlanMap(ipVO.getAllocatedToAccountId(), ipVO.getVlanId()) != null) { + //see IPaddressVO.java + InvalidParameterValueException ex = new InvalidParameterValueException("Sepcified IP address uuid belongs to" + + " Account wide IP pool and cannot be disassociated"); + ex.addProxyObject("user_ip_address", ipAddressId, "ipAddressId"); + throw ex; + } + + // don't allow releasing system ip address + if (ipVO.getSystem()) { + InvalidParameterValueException ex = new InvalidParameterValueException("Can't release system IP address with specified id"); + ex.addProxyObject(ipVO, ipVO.getId(), "systemIpAddrId"); + throw ex; + } + + boolean success = _networkMgr.disassociatePublicIpAddress(ipAddressId, userId, caller); + + if (success) { + Long networkId = ipVO.getAssociatedWithNetworkId(); + if (networkId != null) { + Network guestNetwork = getNetwork(networkId); + NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); + Long vmId = ipVO.getAssociatedWithVmId(); + if (offering.getElasticIp() && vmId != null) { + _rulesMgr.getSystemIpAndEnableStaticNatForVm(_userVmDao.findById(vmId), true); + return true; + } + } + } else { + s_logger.warn("Failed to release public ip address id=" + ipAddressId); + } + return success; + } + + + @Override + @DB + public Network getNetwork(long id) { + return _networksDao.findById(id); + } + + + private void checkSharedNetworkCidrOverlap(Long zoneId, long physicalNetworkId, String cidr) { + if (zoneId == null || cidr == null) { + return; + } + + DataCenter zone = _dcDao.findById(zoneId); + List networks = _networksDao.listByZone(zoneId); + Map networkToCidr = new HashMap(); + + // check for CIDR overlap with all possible CIDR for isolated guest networks + // in the zone when using external networking + PhysicalNetworkVO pNetwork = _physicalNetworkDao.findById(physicalNetworkId); + if (pNetwork.getVnet() != null) { + String vlanRange[] = pNetwork.getVnet().split("-"); + int lowestVlanTag = Integer.valueOf(vlanRange[0]); + int highestVlanTag = Integer.valueOf(vlanRange[1]); + for (int vlan=lowestVlanTag; vlan <= highestVlanTag; ++vlan) { + int offset = vlan - lowestVlanTag; + String globalVlanBits = _configDao.getValue(Config.GuestVlanBits.key()); + int cidrSize = 8 + Integer.parseInt(globalVlanBits); + String guestNetworkCidr = zone.getGuestNetworkCidr(); + String[] cidrTuple = guestNetworkCidr.split("\\/"); + long newCidrAddress = (NetUtils.ip2Long(cidrTuple[0]) & 0xff000000) | (offset << (32 - cidrSize)); + if (NetUtils.isNetworksOverlap(NetUtils.long2Ip(newCidrAddress), cidr)) { + throw new InvalidParameterValueException("Specified CIDR for shared network conflict with CIDR that is reserved for zone vlan " + vlan); + } + } + } + + // check for CIDR overlap with all CIDR's of the shared networks in the zone + for (NetworkVO network : networks) { + if (network.getGuestType() == GuestType.Isolated) { + continue; + } + if (network.getCidr() != null) { + networkToCidr.put(network.getId(), network.getCidr()); + } + } + if (networkToCidr != null && !networkToCidr.isEmpty()) { + for (long networkId : networkToCidr.keySet()) { + String ntwkCidr = networkToCidr.get(networkId); + if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { + throw new InvalidParameterValueException("Specified CIDR for shared network conflict with CIDR of a shared network in the zone."); + } + } + } + } + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_NETWORK_CREATE, eventDescription = "creating network") + public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException { + Long networkOfferingId = cmd.getNetworkOfferingId(); + String gateway = cmd.getGateway(); + String startIP = cmd.getStartIp(); + String endIP = cmd.getEndIp(); + String netmask = cmd.getNetmask(); + String networkDomain = cmd.getNetworkDomain(); + String vlanId = cmd.getVlan(); + String name = cmd.getNetworkName(); + String displayText = cmd.getDisplayText(); + Account caller = UserContext.current().getCaller(); + Long physicalNetworkId = cmd.getPhysicalNetworkId(); + Long zoneId = cmd.getZoneId(); + String aclTypeStr = cmd.getAclType(); + Long domainId = cmd.getDomainId(); + boolean isDomainSpecific = false; + Boolean subdomainAccess = cmd.getSubdomainAccess(); + Long vpcId = cmd.getVpcId(); + + // Validate network offering + NetworkOfferingVO ntwkOff = _networkOfferingDao.findById(networkOfferingId); + if (ntwkOff == null || ntwkOff.isSystemOnly()) { + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find network offering by specified id"); + if (ntwkOff != null) { + ex.addProxyObject(ntwkOff, networkOfferingId, "networkOfferingId"); + // Get the VO object's table name. + String tablename = AnnotationHelper.getTableName(ntwkOff); + if (tablename != null) { + ex.addProxyObject(tablename, networkOfferingId, "networkOfferingId"); + } else { + s_logger.info("\nCould not retrieve table name (annotation) from " + tablename + " VO proxy object\n"); + } + throw ex; + } + throw ex; + } + // validate physical network and zone + // Check if physical network exists + PhysicalNetwork pNtwk = null; + if (physicalNetworkId != null) { + pNtwk = _physicalNetworkDao.findById(physicalNetworkId); + if (pNtwk == null) { + throw new InvalidParameterValueException("Unable to find a physical network having the specified physical network id"); + } + } + + if (zoneId == null) { + zoneId = pNtwk.getDataCenterId(); + } + + DataCenter zone = _dcDao.findById(zoneId); + if (zone == null) { + throw new InvalidParameterValueException("Specified zone id was not found"); + } + + if (Grouping.AllocationState.Disabled == zone.getAllocationState() && !_accountMgr.isRootAdmin(caller.getType())) { + // See DataCenterVO.java + PermissionDeniedException ex = new PermissionDeniedException("Cannot perform this operation since specified Zone is currently disabled"); + ex.addProxyObject(zone, zoneId, "zoneId"); + throw ex; + } + + // Only domain and account ACL types are supported in Acton. + ACLType aclType = null; + if (aclTypeStr != null) { + if (aclTypeStr.equalsIgnoreCase(ACLType.Account.toString())) { + aclType = ACLType.Account; + } else if (aclTypeStr.equalsIgnoreCase(ACLType.Domain.toString())) { + aclType = ACLType.Domain; + } else { + throw new InvalidParameterValueException("Incorrect aclType specified. Check the API documentation for supported types"); + } + // In 3.0 all Shared networks should have aclType == Domain, all Isolated networks aclType==Account + if (ntwkOff.getGuestType() == GuestType.Isolated) { + if (aclType != ACLType.Account) { + throw new InvalidParameterValueException("AclType should be " + ACLType.Account + " for network of type " + Network.GuestType.Isolated); + } + } else if (ntwkOff.getGuestType() == GuestType.Shared) { + if (!(aclType == ACLType.Domain || aclType == ACLType.Account)) { + throw new InvalidParameterValueException("AclType should be " + ACLType.Domain + " or " + + ACLType.Account + " for network of type " + Network.GuestType.Shared); + } + } + } else { + if (ntwkOff.getGuestType() == GuestType.Isolated) { + aclType = ACLType.Account; + } else if (ntwkOff.getGuestType() == GuestType.Shared) { + aclType = ACLType.Domain; + } + } + + // Only Admin can create Shared networks + if (ntwkOff.getGuestType() == GuestType.Shared && !_accountMgr.isAdmin(caller.getType())) { + throw new InvalidParameterValueException("Only Admins can create network with guest type " + GuestType.Shared); + } + + // Check if the network is domain specific + if (aclType == ACLType.Domain) { + // only Admin can create domain with aclType=Domain + if (!_accountMgr.isAdmin(caller.getType())) { + throw new PermissionDeniedException("Only admin can create networks with aclType=Domain"); + } + + // only shared networks can be Domain specific + if (ntwkOff.getGuestType() != GuestType.Shared) { + throw new InvalidParameterValueException("Only " + GuestType.Shared + " networks can have aclType=" + ACLType.Domain); + } + + if (domainId != null) { + if (ntwkOff.getTrafficType() != TrafficType.Guest || ntwkOff.getGuestType() != Network.GuestType.Shared) { + throw new InvalidParameterValueException("Domain level networks are supported just for traffic type " + + TrafficType.Guest + " and guest type " + Network.GuestType.Shared); + } + + DomainVO domain = _domainDao.findById(domainId); + if (domain == null) { + throw new InvalidParameterValueException("Unable to find domain by specified id"); + } + _accountMgr.checkAccess(caller, domain); + } + isDomainSpecific = true; + + } else if (subdomainAccess != null) { + throw new InvalidParameterValueException("Parameter subDomainAccess can be specified only with aclType=Domain"); + } + Account owner = null; + if ((cmd.getAccountName() != null && domainId != null) || cmd.getProjectId() != null) { + owner = _accountMgr.finalizeOwner(caller, cmd.getAccountName(), domainId, cmd.getProjectId()); + } else { + owner = caller; + } + + UserContext.current().setAccountId(owner.getAccountId()); + + // VALIDATE IP INFO + // if end ip is not specified, default it to startIp + if (startIP != null) { + if (!NetUtils.isValidIp(startIP)) { + throw new InvalidParameterValueException("Invalid format for the startIp parameter"); + } + if (endIP == null) { + endIP = startIP; + } else if (!NetUtils.isValidIp(endIP)) { + throw new InvalidParameterValueException("Invalid format for the endIp parameter"); + } + } + + if (startIP != null && endIP != null) { + if (!(gateway != null && netmask != null)) { + throw new InvalidParameterValueException("gateway and netmask should be defined when startIP/endIP are passed in"); + } + } + + String cidr = null; + if (gateway != null && netmask != null) { + if (!NetUtils.isValidIp(gateway)) { + throw new InvalidParameterValueException("Invalid gateway"); + } + if (!NetUtils.isValidNetmask(netmask)) { + throw new InvalidParameterValueException("Invalid netmask"); + } + + cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask); + } + + // Regular user can create Guest Isolated Source Nat enabled network only + if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL + && (ntwkOff.getTrafficType() != TrafficType.Guest || ntwkOff.getGuestType() != Network.GuestType.Isolated + && areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))) { + throw new InvalidParameterValueException("Regular user can create a network only from the network" + + " offering having traffic type " + TrafficType.Guest + " and network type " + + Network.GuestType.Isolated + " with a service " + Service.SourceNat.getName() + " enabled"); + } + + // Don't allow to specify vlan if the caller is a regular user + if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL && (ntwkOff.getSpecifyVlan() || vlanId != null)) { + throw new InvalidParameterValueException("Regular user is not allowed to specify vlanId"); + } + + // For non-root admins check cidr limit - if it's allowed by global config value + if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN && cidr != null) { + + String[] cidrPair = cidr.split("\\/"); + int cidrSize = Integer.valueOf(cidrPair[1]); + + if (cidrSize < _cidrLimit) { + throw new InvalidParameterValueException("Cidr size can't be less than " + _cidrLimit); + } + } + + Collection ntwkProviders = _networkMgr.finalizeServicesAndProvidersForNetwork(ntwkOff, physicalNetworkId).values(); + if (cidr != null && providersConfiguredForExternalNetworking(ntwkProviders)) { + if (ntwkOff.getGuestType() == GuestType.Shared && (zone.getNetworkType() == NetworkType.Advanced) && + isSharedNetworkOfferingWithServices(networkOfferingId)) { + // validate if CIDR specified overlaps with any of the CIDR's allocated for isolated networks and shared networks in the zone + checkSharedNetworkCidrOverlap(zoneId, pNtwk.getId(), cidr); + } else { + throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external devices!"); + } + } + + + // Vlan is created in 2 cases - works in Advance zone only: + // 1) GuestType is Shared + // 2) GuestType is Isolated, but SourceNat service is disabled + boolean createVlan = (startIP != null && endIP != null && zone.getNetworkType() == NetworkType.Advanced + && ((ntwkOff.getGuestType() == Network.GuestType.Shared) + || (ntwkOff.getGuestType() == GuestType.Isolated && + !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat)))); + + // Can add vlan range only to the network which allows it + if (createVlan && !ntwkOff.getSpecifyIpRanges()) { + InvalidParameterValueException ex = new InvalidParameterValueException("Network offering with specified id doesn't support adding multiple ip ranges"); + ex.addProxyObject(ntwkOff, ntwkOff.getId(), "networkOfferingId"); + String tablename = AnnotationHelper.getTableName(ntwkOff); + if (tablename != null) { + ex.addProxyObject(tablename, ntwkOff.getId(), "networkOfferingId"); + } else { + s_logger.info("\nCould not retrieve table name (annotation) from " + tablename + " VO proxy object\n"); + } + throw ex; + } + + Transaction txn = Transaction.currentTxn(); + txn.start(); + + Long sharedDomainId = null; + if (isDomainSpecific) { + if (domainId != null) { + sharedDomainId = domainId; + } else { + sharedDomainId = _domainMgr.getDomain(Domain.ROOT_DOMAIN).getId(); + subdomainAccess = true; + } + } + + // default owner to system if network has aclType=Domain + if (aclType == ACLType.Domain) { + owner = _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM); + } + + //Create guest network + Network network = null; + if (vpcId != null) { + if (!_configMgr.isOfferingForVpc(ntwkOff)){ + throw new InvalidParameterValueException("Network offering can't be used for VPC networks"); + } + network = _vpcMgr.createVpcGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, + networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId, caller); + } else { + if (_configMgr.isOfferingForVpc(ntwkOff)){ + throw new InvalidParameterValueException("Network offering can be used for VPC networks only"); + } + network = _networkMgr.createGuestNetwork(networkOfferingId, name, displayText, gateway, cidr, vlanId, + networkDomain, owner, sharedDomainId, pNtwk, zoneId, aclType, subdomainAccess, vpcId); + } + + if (caller.getType() == Account.ACCOUNT_TYPE_ADMIN && createVlan) { + // Create vlan ip range + _configMgr.createVlanAndPublicIpRange(pNtwk.getDataCenterId(), network.getId(), physicalNetworkId, + false, null, startIP, endIP, gateway, netmask, vlanId, null); + } + + txn.commit(); + + return network; + } + + + + @Override + public List searchForNetworks(ListNetworksCmd cmd) { + Long id = cmd.getId(); + String keyword = cmd.getKeyword(); + Long zoneId = cmd.getZoneId(); + Account caller = UserContext.current().getCaller(); + Long domainId = cmd.getDomainId(); + String accountName = cmd.getAccountName(); + String guestIpType = cmd.getGuestIpType(); + String trafficType = cmd.getTrafficType(); + Boolean isSystem = cmd.getIsSystem(); + String aclType = cmd.getAclType(); + Long projectId = cmd.getProjectId(); + List permittedAccounts = new ArrayList(); + String path = null; + Long physicalNetworkId = cmd.getPhysicalNetworkId(); + List supportedServicesStr = cmd.getSupportedServices(); + Boolean restartRequired = cmd.getRestartRequired(); + boolean listAll = cmd.listAll(); + boolean isRecursive = cmd.isRecursive(); + Boolean specifyIpRanges = cmd.getSpecifyIpRanges(); + Long vpcId = cmd.getVpcId(); + Boolean canUseForDeploy = cmd.canUseForDeploy(); + Map tags = cmd.getTags(); + Boolean forVpc = cmd.getForVpc(); + + // 1) default is system to false if not specified + // 2) reset parameter to false if it's specified by the regular user + if ((isSystem == null || caller.getType() == Account.ACCOUNT_TYPE_NORMAL) && id == null) { + isSystem = false; + } + + // Account/domainId parameters and isSystem are mutually exclusive + if (isSystem != null && isSystem && (accountName != null || domainId != null)) { + throw new InvalidParameterValueException("System network belongs to system, account and domainId parameters can't be specified"); + } + + if (domainId != null) { + DomainVO domain = _domainDao.findById(domainId); + if (domain == null) { + // see DomainVO.java + throw new InvalidParameterValueException("Specified domain id doesn't exist in the system"); + } + + _accountMgr.checkAccess(caller, domain); + if (accountName != null) { + Account owner = _accountMgr.getActiveAccountByName(accountName, domainId); + if (owner == null) { + // see DomainVO.java + throw new InvalidParameterValueException("Unable to find account " + accountName + " in specified domain"); + } + + _accountMgr.checkAccess(caller, null, true, owner); + permittedAccounts.add(owner.getId()); + } + } + + if (!_accountMgr.isAdmin(caller.getType()) || (!listAll && (projectId != null && projectId.longValue() != -1 && domainId == null))) { + permittedAccounts.add(caller.getId()); + domainId = caller.getDomainId(); + } + + // set project information + boolean skipProjectNetworks = true; + if (projectId != null) { + if (projectId.longValue() == -1) { + if (!_accountMgr.isAdmin(caller.getType())) { + permittedAccounts.addAll(_projectMgr.listPermittedProjectAccounts(caller.getId())); + } + } else { + permittedAccounts.clear(); + Project project = _projectMgr.getProject(projectId); + if (project == null) { + throw new InvalidParameterValueException("Unable to find project by specified id"); + } + if (!_projectMgr.canAccessProjectAccount(caller, project.getProjectAccountId())) { + // getProject() returns type ProjectVO. + InvalidParameterValueException ex = new InvalidParameterValueException("Account " + caller + " cannot access specified project id"); + ex.addProxyObject(project, projectId, "projectId"); + throw ex; + } + permittedAccounts.add(project.getProjectAccountId()); + } + skipProjectNetworks = false; + } + + if (domainId != null) { + path = _domainDao.findById(domainId).getPath(); + } else { + path = _domainDao.findById(caller.getDomainId()).getPath(); + } + + if (listAll && domainId == null) { + isRecursive = true; + } + + Filter searchFilter = new Filter(NetworkVO.class, "id", false, cmd.getStartIndex(), cmd.getPageSizeVal()); + SearchBuilder sb = _networksDao.createSearchBuilder(); + + if (forVpc != null) { + if (forVpc) { + sb.and("vpc", sb.entity().getVpcId(), Op.NNULL); + } else { + sb.and("vpc", sb.entity().getVpcId(), Op.NULL); + } + } + + // Don't display networks created of system network offerings + SearchBuilder networkOfferingSearch = _networkOfferingDao.createSearchBuilder(); + networkOfferingSearch.and("systemOnly", networkOfferingSearch.entity().isSystemOnly(), SearchCriteria.Op.EQ); + if (isSystem != null && isSystem) { + networkOfferingSearch.and("trafficType", networkOfferingSearch.entity().getTrafficType(), SearchCriteria.Op.EQ); + } + sb.join("networkOfferingSearch", networkOfferingSearch, sb.entity().getNetworkOfferingId(), networkOfferingSearch.entity().getId(), JoinBuilder.JoinType.INNER); + + SearchBuilder zoneSearch = _dcDao.createSearchBuilder(); + zoneSearch.and("networkType", zoneSearch.entity().getNetworkType(), SearchCriteria.Op.EQ); + sb.join("zoneSearch", zoneSearch, sb.entity().getDataCenterId(), zoneSearch.entity().getId(), JoinBuilder.JoinType.INNER); + sb.and("removed", sb.entity().getRemoved(), Op.NULL); + + if (tags != null && !tags.isEmpty()) { + SearchBuilder tagSearch = _resourceTagDao.createSearchBuilder(); + for (int count=0; count < tags.size(); count++) { + tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ); + tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ); + tagSearch.cp(); + } + tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ); + sb.groupBy(sb.entity().getId()); + sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER); + } + + if (permittedAccounts.isEmpty()) { + SearchBuilder domainSearch = _domainDao.createSearchBuilder(); + domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE); + sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER); + } + + + SearchBuilder accountSearch = _accountDao.createSearchBuilder(); + accountSearch.and("typeNEQ", accountSearch.entity().getType(), SearchCriteria.Op.NEQ); + accountSearch.and("typeEQ", accountSearch.entity().getType(), SearchCriteria.Op.EQ); + + + sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER); + + List networksToReturn = new ArrayList(); + + if (isSystem == null || !isSystem) { + if (!permittedAccounts.isEmpty()) { + //get account level networks + networksToReturn.addAll(listAccountSpecificNetworks( + buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, + physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, + permittedAccounts)); + //get domain level networks + if (domainId != null) { + networksToReturn + .addAll(listDomainLevelNetworks( + buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, + physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, + domainId, false)); + } + } else { + //add account specific networks + networksToReturn.addAll(listAccountSpecificNetworksByDomainPath( + buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, + physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, path, + isRecursive)); + //add domain specific networks of domain + parent domains + networksToReturn.addAll(listDomainSpecificNetworksByDomainPath( + buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, + physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, path, + isRecursive)); + //add networks of subdomains + if (domainId == null) { + networksToReturn + .addAll(listDomainLevelNetworks( + buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, + physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags), searchFilter, + caller.getDomainId(), true)); + } + } + } else { + networksToReturn = _networksDao.search(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, + guestIpType, trafficType, physicalNetworkId, null, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags), + searchFilter); + } + + if (supportedServicesStr != null && !supportedServicesStr.isEmpty() && !networksToReturn.isEmpty()) { + List supportedNetworks = new ArrayList(); + Service[] suppportedServices = new Service[supportedServicesStr.size()]; + int i = 0; + for (String supportedServiceStr : supportedServicesStr) { + Service service = Service.getService(supportedServiceStr); + if (service == null) { + throw new InvalidParameterValueException("Invalid service specified " + supportedServiceStr); + } else { + suppportedServices[i] = service; + } + i++; + } + + for (NetworkVO network : networksToReturn) { + if (areServicesSupportedInNetwork(network.getId(), suppportedServices)) { + supportedNetworks.add(network); + } + } + + networksToReturn=supportedNetworks; + } + + if (canUseForDeploy != null) { + List networksForDeploy = new ArrayList(); + for (NetworkVO network : networksToReturn) { + if (_networkMgr.canUseForDeploy(network) == canUseForDeploy) { + networksForDeploy.add(network); + } + } + + networksToReturn=networksForDeploy; + } + + return networksToReturn; + } + + + + private SearchCriteria buildNetworkSearchCriteria(SearchBuilder sb, String keyword, Long id, + Boolean isSystem, Long zoneId, String guestIpType, String trafficType, Long physicalNetworkId, + String aclType, boolean skipProjectNetworks, Boolean restartRequired, Boolean specifyIpRanges, Long vpcId, Map tags) { + + SearchCriteria sc = sb.create(); + + if (isSystem != null) { + sc.setJoinParameters("networkOfferingSearch", "systemOnly", isSystem); + } + + if (keyword != null) { + SearchCriteria ssc = _networksDao.createSearchCriteria(); + ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%"); + sc.addAnd("name", SearchCriteria.Op.SC, ssc); + } + + if (id != null) { + sc.addAnd("id", SearchCriteria.Op.EQ, id); + } + + if (zoneId != null) { + sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); + } + + if (guestIpType != null) { + sc.addAnd("guestType", SearchCriteria.Op.EQ, guestIpType); + } + + if (trafficType != null) { + sc.addAnd("trafficType", SearchCriteria.Op.EQ, trafficType); + } + + if (aclType != null) { + sc.addAnd("aclType", SearchCriteria.Op.EQ, aclType.toString()); + } + + if (physicalNetworkId != null) { + sc.addAnd("physicalNetworkId", SearchCriteria.Op.EQ, physicalNetworkId); + } + + if (skipProjectNetworks) { + sc.setJoinParameters("accountSearch", "typeNEQ", Account.ACCOUNT_TYPE_PROJECT); + } else { + sc.setJoinParameters("accountSearch", "typeEQ", Account.ACCOUNT_TYPE_PROJECT); + } + + if (restartRequired != null) { + sc.addAnd("restartRequired", SearchCriteria.Op.EQ, restartRequired); + } + + if (specifyIpRanges != null) { + sc.addAnd("specifyIpRanges", SearchCriteria.Op.EQ, specifyIpRanges); + } + + if (vpcId != null) { + sc.addAnd("vpcId", SearchCriteria.Op.EQ, vpcId); + } + + if (tags != null && !tags.isEmpty()) { + int count = 0; + sc.setJoinParameters("tagSearch", "resourceType", TaggedResourceType.Network.toString()); + for (String key : tags.keySet()) { + sc.setJoinParameters("tagSearch", "key" + String.valueOf(count), key); + sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), tags.get(key)); + count++; + } + } + + return sc; + } + + private List listDomainLevelNetworks(SearchCriteria sc, Filter searchFilter, long domainId, boolean parentDomainsOnly) { + List networkIds = new ArrayList(); + Set allowedDomains = _domainMgr.getDomainParentIds(domainId); + List maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray()); + + for (NetworkDomainVO map : maps) { + if (map.getDomainId() == domainId && parentDomainsOnly) { + continue; + } + boolean subdomainAccess = (map.isSubdomainAccess() != null) ? map.isSubdomainAccess() : getAllowSubdomainAccessGlobal(); + if (map.getDomainId() == domainId || subdomainAccess) { + networkIds.add(map.getNetworkId()); + } + } + + if (!networkIds.isEmpty()) { + SearchCriteria domainSC = _networksDao.createSearchCriteria(); + domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray()); + domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString()); + + sc.addAnd("id", SearchCriteria.Op.SC, domainSC); + return _networksDao.search(sc, searchFilter); + } else { + return new ArrayList(); + } + } + + private List listAccountSpecificNetworks(SearchCriteria sc, Filter searchFilter, List permittedAccounts) { + SearchCriteria accountSC = _networksDao.createSearchCriteria(); + if (!permittedAccounts.isEmpty()) { + accountSC.addAnd("accountId", SearchCriteria.Op.IN, permittedAccounts.toArray()); + } + + accountSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Account.toString()); + + sc.addAnd("id", SearchCriteria.Op.SC, accountSC); + return _networksDao.search(sc, searchFilter); + } + + private List listAccountSpecificNetworksByDomainPath(SearchCriteria sc, Filter searchFilter, String path, boolean isRecursive) { + SearchCriteria accountSC = _networksDao.createSearchCriteria(); + accountSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Account.toString()); + + if (path != null) { + if (isRecursive) { + sc.setJoinParameters("domainSearch", "path", path + "%"); + } else { + sc.setJoinParameters("domainSearch", "path", path); + } + } + + sc.addAnd("id", SearchCriteria.Op.SC, accountSC); + return _networksDao.search(sc, searchFilter); + } + + private List listDomainSpecificNetworksByDomainPath(SearchCriteria sc, Filter searchFilter, + String path, boolean isRecursive) { + + Set allowedDomains = new HashSet(); + if (path != null) { + if (isRecursive) { + allowedDomains = _domainMgr.getDomainChildrenIds(path); + } else { + Domain domain = _domainDao.findDomainByPath(path); + allowedDomains.add(domain.getId()); + } + } + + List networkIds = new ArrayList(); + + List maps = _networkDomainDao.listDomainNetworkMapByDomain(allowedDomains.toArray()); + + for (NetworkDomainVO map : maps) { + networkIds.add(map.getNetworkId()); + } + + if (!networkIds.isEmpty()) { + SearchCriteria domainSC = _networksDao.createSearchCriteria(); + domainSC.addAnd("id", SearchCriteria.Op.IN, networkIds.toArray()); + domainSC.addAnd("aclType", SearchCriteria.Op.EQ, ACLType.Domain.toString()); + + sc.addAnd("id", SearchCriteria.Op.SC, domainSC); + return _networksDao.search(sc, searchFilter); + } else { + return new ArrayList(); + } + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_NETWORK_DELETE, eventDescription = "deleting network", async = true) + public boolean deleteNetwork(long networkId) { + + Account caller = UserContext.current().getCaller(); + + // Verify network id + NetworkVO network = _networksDao.findById(networkId); + if (network == null) { + // see NetworkVO.java + + InvalidParameterValueException ex = new InvalidParameterValueException("unable to find network with specified id"); + ex.addProxyObject(network, networkId, "networkId"); + throw ex; + } + + // don't allow to delete system network + if (isNetworkSystem(network)) { + InvalidParameterValueException ex = new InvalidParameterValueException("Network with specified id is system and can't be removed"); + ex.addProxyObject(network, network.getId(), "networkId"); + throw ex; + } + + Account owner = _accountMgr.getAccount(network.getAccountId()); + + // Perform permission check + _accountMgr.checkAccess(caller, null, true, network); + + User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId()); + ReservationContext context = new ReservationContextImpl(null, null, callerUser, owner); + + return _networkMgr.destroyNetwork(networkId, context); + } + + + @Override + @ActionEvent(eventType = EventTypes.EVENT_NETWORK_RESTART, eventDescription = "restarting network", async = true) + public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + // This method restarts all network elements belonging to the network and re-applies all the rules + Long networkId = cmd.getNetworkId(); + + User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId()); + Account callerAccount = _accountMgr.getActiveAccountById(callerUser.getAccountId()); + + // Check if network exists + NetworkVO network = _networksDao.findById(networkId); + if (network == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Network with specified id doesn't exist"); + ex.addProxyObject("networks", networkId, "networkId"); + throw ex; + } + + // Don't allow to restart network if it's not in Implemented/Setup state + if (!(network.getState() == Network.State.Implemented || network.getState() == Network.State.Setup)) { + throw new InvalidParameterValueException("Network is not in the right state to be restarted. Correct states are: " + Network.State.Implemented + ", " + Network.State.Setup); + } + + if (network.getBroadcastDomainType() == BroadcastDomainType.Lswitch ) { + /** + * Unable to restart these networks now. + * TODO Restarting a SDN based network requires updating the nics and the configuration + * in the controller. This requires a non-trivial rewrite of the restart procedure. + */ + throw new InvalidParameterException("Unable to restart a running SDN network."); + } + + _accountMgr.checkAccess(callerAccount, null, true, network); + + boolean success = _networkMgr.restartNetwork(networkId, callerAccount, callerUser, cleanup); + + if (success) { + s_logger.debug("Network id=" + networkId + " is restarted successfully."); + } else { + s_logger.warn("Network id=" + networkId + " failed to restart."); + } + + return success; + } + + @Override + public int getActiveNicsInNetwork(long networkId) { + return _networksDao.getActiveNicsIn(networkId); + } + + + + + + //@Override + protected Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { + + if (!areServicesSupportedByNetworkOffering(offering.getId(), service)) { + // TBD: We should be sending networkOfferingId and not the offering object itself. + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the network offering " + offering); + } + + Map serviceCapabilities = new HashMap(); + + // get the Provider for this Service for this offering + List providers = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(offering.getId(), service); + if (providers.isEmpty()) { + // TBD: We should be sending networkOfferingId and not the offering object itself. + throw new InvalidParameterValueException("Service " + service.getName() + " is not supported by the network offering " + offering); + } + + // FIXME - in post 3.0 we are going to support multiple providers for the same service per network offering, so + // we have to calculate capabilities for all of them + String provider = providers.get(0); + + // FIXME we return the capabilities of the first provider of the service - what if we have multiple providers + // for same Service? + NetworkElement element = _networkMgr.getElementImplementingProvider(provider); + if (element != null) { + Map> elementCapabilities = element.getCapabilities(); + ; + + if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { + // TBD: We should be sending providerId and not the offering object itself. + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider); + } + serviceCapabilities = elementCapabilities.get(service); + } + + return serviceCapabilities; + } + + + @Override + public IpAddress getIp(long ipAddressId) { + return _ipAddressDao.findById(ipAddressId); + } + + + protected boolean providersConfiguredForExternalNetworking(Collection providers) { + for(String providerStr : providers){ + Provider provider = Network.Provider.getProvider(providerStr); + if(provider.isExternal()){ + return true; + } + } + return false; + } + + protected boolean isSharedNetworkOfferingWithServices(long networkOfferingId) { + NetworkOfferingVO networkOffering = _networkOfferingDao.findById(networkOfferingId); + if ( (networkOffering.getGuestType() == Network.GuestType.Shared) && ( + areServicesSupportedByNetworkOffering(networkOfferingId, Service.SourceNat) || + areServicesSupportedByNetworkOffering(networkOfferingId, Service.StaticNat) || + areServicesSupportedByNetworkOffering(networkOfferingId, Service.Firewall) || + areServicesSupportedByNetworkOffering(networkOfferingId, Service.PortForwarding) || + areServicesSupportedByNetworkOffering(networkOfferingId, Service.Lb))) { + return true; + } + return false; + } + + //@Override + protected boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { + return (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(networkOfferingId, services)); + } + + //@Override + protected boolean areServicesSupportedInNetwork(long networkId, Service... services) { + return (_ntwkSrvcDao.areServicesSupportedInNetwork(networkId, services)); + } + + + + + + @Override + public boolean isNetworkAvailableInDomain(long networkId, long domainId) { + Long networkDomainId = null; + Network network = getNetwork(networkId); + if (network.getGuestType() != Network.GuestType.Shared) { + s_logger.trace("Network id=" + networkId + " is not shared"); + return false; + } + + NetworkDomainVO networkDomainMap = _networkDomainDao.getDomainNetworkMapByNetworkId(networkId); + if (networkDomainMap == null) { + s_logger.trace("Network id=" + networkId + " is shared, but not domain specific"); + return true; + } else { + networkDomainId = networkDomainMap.getDomainId(); + } + + if (domainId == networkDomainId.longValue()) { + return true; + } + + if (networkDomainMap.subdomainAccess) { + Set parentDomains = _domainMgr.getDomainParentIds(domainId); + + if (parentDomains.contains(domainId)) { + return true; + } + } + + return false; + } + + + + private boolean checkForNonStoppedVmInNetwork(long networkId) { + List vms = _userVmDao.listByNetworkIdAndStates(networkId, VirtualMachine.State.Starting, + VirtualMachine.State.Running, VirtualMachine.State.Migrating, VirtualMachine.State.Stopping); + return vms.isEmpty(); + } + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_NETWORK_UPDATE, eventDescription = "updating network", async = true) + public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, + User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr) { + boolean restartNetwork = false; + + // verify input parameters + NetworkVO network = _networksDao.findById(networkId); + if (network == null) { + // see NetworkVO.java + InvalidParameterValueException ex = new InvalidParameterValueException("Specified network id doesn't exist in the system"); + ex.addProxyObject("networks", networkId, "networkId"); + throw ex; + } + + // don't allow to update network in Destroy state + if (network.getState() == Network.State.Destroy) { + throw new InvalidParameterValueException("Don't allow to update network in state " + Network.State.Destroy); + } + + // Don't allow to update system network + NetworkOffering offering = _networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId()); + if (offering.isSystemOnly()) { + throw new InvalidParameterValueException("Can't update system networks"); + } + + // allow to upgrade only Guest networks + if (network.getTrafficType() != Networks.TrafficType.Guest) { + throw new InvalidParameterValueException("Can't allow networks which traffic type is not " + TrafficType.Guest); + } + + _accountMgr.checkAccess(callerAccount, null, true, network); + + if (name != null) { + network.setName(name); + } + + if (displayText != null) { + network.setDisplayText(displayText); + } + + // network offering and domain suffix can be updated for Isolated networks only in 3.0 + if ((networkOfferingId != null || domainSuffix != null) && network.getGuestType() != GuestType.Isolated) { + throw new InvalidParameterValueException("NetworkOffering and domain suffix upgrade can be perfomed for Isolated networks only"); + } + + boolean networkOfferingChanged = false; + + long oldNetworkOfferingId = network.getNetworkOfferingId(); + if (networkOfferingId != null) { + + NetworkOfferingVO networkOffering = _networkOfferingDao.findById(networkOfferingId); + if (networkOffering == null || networkOffering.isSystemOnly()) { + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find network offering with specified id"); + ex.addProxyObject(networkOffering, networkOfferingId, "networkOfferingId"); + throw ex; + } + + // network offering should be in Enabled state + if (networkOffering.getState() != NetworkOffering.State.Enabled) { + InvalidParameterValueException ex = new InvalidParameterValueException("Network offering with specified id is not in " + NetworkOffering.State.Enabled + " state, can't upgrade to it"); + ex.addProxyObject(networkOffering, networkOfferingId, "networkOfferingId"); + throw ex; + } + + + //can't update from vpc to non-vpc network offering + boolean forVpcNew = _configMgr.isOfferingForVpc(networkOffering); + boolean vorVpcOriginal = _configMgr.isOfferingForVpc(_configMgr.getNetworkOffering(oldNetworkOfferingId)); + if (forVpcNew != vorVpcOriginal) { + String errMsg = forVpcNew ? "a vpc offering " : "not a vpc offering"; + throw new InvalidParameterValueException("Can't update as the new offering is " + errMsg); + } + + if (networkOfferingId != oldNetworkOfferingId) { + NetworkOffering oldNtwkOff = _networkOfferingDao.findByIdIncludingRemoved(oldNetworkOfferingId); + Collection newProviders = _networkMgr.finalizeServicesAndProvidersForNetwork(networkOffering, network.getPhysicalNetworkId()).values(); + Collection oldProviders = _networkMgr.finalizeServicesAndProvidersForNetwork(oldNtwkOff, network.getPhysicalNetworkId()).values(); + + if (providersConfiguredForExternalNetworking(newProviders) != providersConfiguredForExternalNetworking(oldProviders) + && !changeCidr) { + throw new InvalidParameterValueException("Updating network failed since guest CIDR needs to be changed!"); + } + if (changeCidr) { + if (!checkForNonStoppedVmInNetwork(network.getId())) { + InvalidParameterValueException ex = new InvalidParameterValueException("All user vm of network of specified id should be stopped before changing CIDR!"); + ex.addProxyObject(network, networkId, "networkId"); + throw ex; + } + } + // check if the network is upgradable + if (!canUpgrade(network, oldNetworkOfferingId, networkOfferingId)) { + throw new InvalidParameterValueException("Can't upgrade from network offering " + oldNetworkOfferingId + " to " + networkOfferingId + "; check logs for more information"); + } + restartNetwork = true; + networkOfferingChanged = true; + } + } + Map newSvcProviders = new HashMap(); + if (networkOfferingChanged) { + newSvcProviders = _networkMgr.finalizeServicesAndProvidersForNetwork(_configMgr.getNetworkOffering(networkOfferingId), network.getPhysicalNetworkId()); + } + + // don't allow to modify network domain if the service is not supported + if (domainSuffix != null) { + // validate network domain + if (!NetUtils.verifyDomainName(domainSuffix)) { + throw new InvalidParameterValueException( + "Invalid network domain. Total length shouldn't exceed 190 chars. Each domain label must be between 1 and 63 characters long, can contain ASCII letters 'a' through 'z', the digits '0' through '9', " + + "and the hyphen ('-'); can't start or end with \"-\""); + } + + long offeringId = oldNetworkOfferingId; + if (networkOfferingId != null) { + offeringId = networkOfferingId; + } + + Map dnsCapabilities = getNetworkOfferingServiceCapabilities(_configMgr.getNetworkOffering(offeringId), Service.Dns); + String isUpdateDnsSupported = dnsCapabilities.get(Capability.AllowDnsSuffixModification); + if (isUpdateDnsSupported == null || !Boolean.valueOf(isUpdateDnsSupported)) { + // TBD: use uuid instead of networkOfferingId. May need to hardcode tablename in call to addProxyObject(). + throw new InvalidParameterValueException("Domain name change is not supported by the network offering id=" + networkOfferingId); + } + + network.setNetworkDomain(domainSuffix); + // have to restart the network + restartNetwork = true; + } + + ReservationContext context = new ReservationContextImpl(null, null, callerUser, callerAccount); + // 1) Shutdown all the elements and cleanup all the rules. Don't allow to shutdown network in intermediate + // states - Shutdown and Implementing + boolean validStateToShutdown = (network.getState() == Network.State.Implemented || network.getState() == Network.State.Setup || network.getState() == Network.State.Allocated); + if (restartNetwork) { + if (validStateToShutdown) { + if (!changeCidr) { + s_logger.debug("Shutting down elements and resources for network id=" + networkId + " as a part of network update"); + + if (!_networkMgr.shutdownNetworkElementsAndResources(context, true, network)) { + s_logger.warn("Failed to shutdown the network elements and resources as a part of network restart: " + network); + CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network elements and resources as a part of update to network of specified id"); + ex.addProxyObject(network, networkId, "networkId"); + throw ex; + } + } else { + // We need to shutdown the network, since we want to re-implement the network. + s_logger.debug("Shutting down network id=" + networkId + " as a part of network update"); + + if (!_networkMgr.shutdownNetwork(network.getId(), context, true)) { + s_logger.warn("Failed to shutdown the network as a part of update to network with specified id"); + CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network as a part of update of specified network id"); + ex.addProxyObject(network, networkId, "networkId"); + throw ex; + } + } + } else { + CloudRuntimeException ex = new CloudRuntimeException("Failed to shutdown the network elements and resources as a part of update to network with specified id; network is in wrong state: " + network.getState()); + ex.addProxyObject(network, networkId, "networkId"); + throw ex; + } + } + + // 2) Only after all the elements and rules are shutdown properly, update the network VO + // get updated network + Network.State networkState = _networksDao.findById(networkId).getState(); + boolean validStateToImplement = (networkState == Network.State.Implemented || networkState == Network.State.Setup || networkState == Network.State.Allocated); + if (restartNetwork && !validStateToImplement) { + CloudRuntimeException ex = new CloudRuntimeException("Failed to implement the network elements and resources as a part of update to network with specified id; network is in wrong state: " + networkState); + ex.addProxyObject(network, networkId, "networkId"); + throw ex; + } + + if (networkOfferingId != null) { + if (networkOfferingChanged) { + Transaction txn = Transaction.currentTxn(); + txn.start(); + network.setNetworkOfferingId(networkOfferingId); + _networksDao.update(networkId, network, newSvcProviders); + // get all nics using this network + // log remove usage events for old offering + // log assign usage events for new offering + List nics = _nicDao.listByNetworkId(networkId); + for (NicVO nic : nics) { + long vmId = nic.getInstanceId(); + VMInstanceVO vm = _vmDao.findById(vmId); + if (vm == null) { + s_logger.error("Vm for nic " + nic.getId() + " not found with Vm Id:" + vmId); + continue; + } + long isDefault = (nic.isDefaultNic()) ? 1 : 0; + UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_NETWORK_OFFERING_REMOVE, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), null, oldNetworkOfferingId, null, 0L); + _usageEventDao.persist(usageEvent); + usageEvent = new UsageEventVO(EventTypes.EVENT_NETWORK_OFFERING_ASSIGN, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), vm.getHostName(), networkOfferingId, null, isDefault); + _usageEventDao.persist(usageEvent); + } + txn.commit(); + } else { + network.setNetworkOfferingId(networkOfferingId); + _networksDao.update(networkId, network, _networkMgr.finalizeServicesAndProvidersForNetwork(_configMgr.getNetworkOffering(networkOfferingId), network.getPhysicalNetworkId())); + } + } else { + _networksDao.update(networkId, network); + } + + // 3) Implement the elements and rules again + if (restartNetwork) { + if (network.getState() != Network.State.Allocated) { + DeployDestination dest = new DeployDestination(_dcDao.findById(network.getDataCenterId()), null, null, null); + s_logger.debug("Implementing the network " + network + " elements and resources as a part of network update"); + try { + if (!changeCidr) { + _networkMgr.implementNetworkElementsAndResources(dest, context, network, _networkOfferingDao.findById(network.getNetworkOfferingId())); + } else { + _networkMgr.implementNetwork(network.getId(), dest, context); + } + } catch (Exception ex) { + s_logger.warn("Failed to implement network " + network + " elements and resources as a part of network update due to ", ex); + CloudRuntimeException e = new CloudRuntimeException("Failed to implement network (with specified id) elements and resources as a part of network update"); + e.addProxyObject(network, networkId, "networkId"); + throw e; + } + } + } + + return getNetwork(network.getId()); + } + + + + + protected Set getAvailableIps(Network network, String requestedIp) { + String[] cidr = network.getCidr().split("/"); + List ips = _nicDao.listIpAddressInNetwork(network.getId()); + Set allPossibleIps = NetUtils.getAllIpsFromCidr(cidr[0], Integer.parseInt(cidr[1])); + Set usedIps = new TreeSet(); + + for (String ip : ips) { + if (requestedIp != null && requestedIp.equals(ip)) { + s_logger.warn("Requested ip address " + requestedIp + " is already in use in network" + network); + return null; + } + + usedIps.add(NetUtils.ip2Long(ip)); + } + if (usedIps.size() != 0) { + allPossibleIps.removeAll(usedIps); + } + return allPossibleIps; + } + + + + protected boolean canUpgrade(Network network, long oldNetworkOfferingId, long newNetworkOfferingId) { + NetworkOffering oldNetworkOffering = _networkOfferingDao.findByIdIncludingRemoved(oldNetworkOfferingId); + NetworkOffering newNetworkOffering = _networkOfferingDao.findById(newNetworkOfferingId); + + // can upgrade only Isolated networks + if (oldNetworkOffering.getGuestType() != GuestType.Isolated) { + throw new InvalidParameterValueException("NetworkOfferingId can be upgraded only for the network of type " + GuestType.Isolated); + } + + // security group service should be the same + if (areServicesSupportedByNetworkOffering(oldNetworkOfferingId, Service.SecurityGroup) != areServicesSupportedByNetworkOffering(newNetworkOfferingId, Service.SecurityGroup)) { + s_logger.debug("Offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different securityGroupProperty, can't upgrade"); + return false; + } + + // Type of the network should be the same + if (oldNetworkOffering.getGuestType() != newNetworkOffering.getGuestType()) { + s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " are of different types, can't upgrade"); + return false; + } + + // tags should be the same + if (newNetworkOffering.getTags() != null) { + if (oldNetworkOffering.getTags() == null) { + s_logger.debug("New network offering id=" + newNetworkOfferingId + " has tags and old network offering id=" + oldNetworkOfferingId + " doesn't, can't upgrade"); + return false; + } + if (!oldNetworkOffering.getTags().equalsIgnoreCase(newNetworkOffering.getTags())) { + s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different tags, can't upgrade"); + return false; + } + } + + // Traffic types should be the same + if (oldNetworkOffering.getTrafficType() != newNetworkOffering.getTrafficType()) { + s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different traffic types, can't upgrade"); + return false; + } + + // specify vlan should be the same + if (oldNetworkOffering.getSpecifyVlan() != newNetworkOffering.getSpecifyVlan()) { + s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different values for specifyVlan, can't upgrade"); + return false; + } + + // specify ipRanges should be the same + if (oldNetworkOffering.getSpecifyIpRanges() != newNetworkOffering.getSpecifyIpRanges()) { + s_logger.debug("Network offerings " + newNetworkOfferingId + " and " + oldNetworkOfferingId + " have different values for specifyIpRangess, can't upgrade"); + return false; + } + + // Check all ips + List userIps = _ipAddressDao.listByAssociatedNetwork(network.getId(), null); + List publicIps = new ArrayList(); + if (userIps != null && !userIps.isEmpty()) { + for (IPAddressVO userIp : userIps) { + PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); + publicIps.add(publicIp); + } + } + if (oldNetworkOffering.isConserveMode() && !newNetworkOffering.isConserveMode()) { + if (!canIpsUsedForNonConserve(publicIps)) { + return false; + } + } + + return canIpsUseOffering(publicIps, newNetworkOfferingId); + } + + + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_CREATE, eventDescription = "Creating Physical Network", create = true) + public PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List + isolationMethods, String broadcastDomainRangeStr, Long domainId, List tags, String name) { + + // Check if zone exists + if (zoneId == null) { + throw new InvalidParameterValueException("Please specify a valid zone."); + } + + DataCenterVO zone = _dcDao.findById(zoneId); + if (zone == null) { + throw new InvalidParameterValueException("Please specify a valid zone."); + } + + if (Grouping.AllocationState.Enabled == zone.getAllocationState()) { + // TBD: Send uuid instead of zoneId; may have to hardcode tablename in call to addProxyObject(). + throw new PermissionDeniedException("Cannot create PhysicalNetwork since the Zone is currently enabled, zone Id: " + zoneId); + } + + NetworkType zoneType = zone.getNetworkType(); + + if (zoneType == NetworkType.Basic) { + if (!_physicalNetworkDao.listByZone(zoneId).isEmpty()) { + // TBD: Send uuid instead of zoneId; may have to hardcode tablename in call to addProxyObject(). + throw new CloudRuntimeException("Cannot add the physical network to basic zone id: " + zoneId + ", there is a physical network already existing in this basic Zone"); + } + } + if (tags != null && tags.size() > 1) { + throw new InvalidParameterException("Only one tag can be specified for a physical network at this time"); + } + + if (isolationMethods != null && isolationMethods.size() > 1) { + throw new InvalidParameterException("Only one isolationMethod can be specified for a physical network at this time"); + } + + int vnetStart = 0; + int vnetEnd = 0; + if (vnetRange != null) { + // Verify zone type + if (zoneType == NetworkType.Basic + || (zoneType == NetworkType.Advanced && zone.isSecurityGroupEnabled())) { + throw new InvalidParameterValueException("Can't add vnet range to the physical network in the zone that supports " + zoneType + " network, Security Group enabled: " + zone.isSecurityGroupEnabled()); + } + + String[] tokens = vnetRange.split("-"); + try { + vnetStart = Integer.parseInt(tokens[0]); + if (tokens.length == 1) { + vnetEnd = vnetStart; + } else { + vnetEnd = Integer.parseInt(tokens[1]); + } + } catch (NumberFormatException e) { + throw new InvalidParameterValueException("Please specify valid integers for the vlan range."); + } + + //check for vnet conflicts with other physical network(s) in the zone + checkGuestVnetsConflicts(zoneId, vnetStart, vnetEnd, null); + + if ((vnetStart > vnetEnd) || (vnetStart < 0) || (vnetEnd > 4096)) { + s_logger.warn("Invalid vnet range: start range:" + vnetStart + " end range:" + vnetEnd); + throw new InvalidParameterValueException("Vnet range should be between 0-4096 and start range should be lesser than or equal to end range"); + } + } + + BroadcastDomainRange broadcastDomainRange = null; + if (broadcastDomainRangeStr != null && !broadcastDomainRangeStr.isEmpty()) { + try { + broadcastDomainRange = PhysicalNetwork.BroadcastDomainRange.valueOf(broadcastDomainRangeStr.toUpperCase()); + } catch (IllegalArgumentException ex) { + throw new InvalidParameterValueException("Unable to resolve broadcastDomainRange '" + broadcastDomainRangeStr + "' to a supported value {Pod or Zone}"); + } + + // in Acton release you can specify only Zone broadcastdomain type in Advance zone, and Pod in Basic + if (zoneType == NetworkType.Basic && broadcastDomainRange != null && broadcastDomainRange != BroadcastDomainRange.POD) { + throw new InvalidParameterValueException("Basic zone can have broadcast domain type of value " + BroadcastDomainRange.POD + " only"); + } else if (zoneType == NetworkType.Advanced && broadcastDomainRange != null && broadcastDomainRange != BroadcastDomainRange.ZONE) { + throw new InvalidParameterValueException("Advance zone can have broadcast domain type of value " + BroadcastDomainRange.ZONE + " only"); + } + } + + if (broadcastDomainRange == null) { + if (zoneType == NetworkType.Basic) { + broadcastDomainRange = PhysicalNetwork.BroadcastDomainRange.POD; + } else { + broadcastDomainRange = PhysicalNetwork.BroadcastDomainRange.ZONE; + } + } + + Transaction txn = Transaction.currentTxn(); + try { + txn.start(); + // Create the new physical network in the database + long id = _physicalNetworkDao.getNextInSequence(Long.class, "id"); + PhysicalNetworkVO pNetwork = new PhysicalNetworkVO(id, zoneId, vnetRange, networkSpeed, domainId, broadcastDomainRange, name); + pNetwork.setTags(tags); + pNetwork.setIsolationMethods(isolationMethods); + + pNetwork = _physicalNetworkDao.persist(pNetwork); + + // Add vnet entries for the new zone if zone type is Advanced + if (vnetRange != null) { + _dcDao.addVnet(zone.getId(), pNetwork.getId(), vnetStart, vnetEnd); + } + + // add VirtualRouter as the default network service provider + addDefaultVirtualRouterToPhysicalNetwork(pNetwork.getId()); + + // add security group provider to the physical network + addDefaultSecurityGroupProviderToPhysicalNetwork(pNetwork.getId()); + + // add VPCVirtualRouter as the defualt network service provider + addDefaultVpcVirtualRouterToPhysicalNetwork(pNetwork.getId()); + + txn.commit(); + return pNetwork; + } catch (Exception ex) { + s_logger.warn("Exception: ", ex); + throw new CloudRuntimeException("Fail to create a physical network"); + } + } + + @Override + public Pair, Integer> searchPhysicalNetworks(Long id, Long zoneId, String keyword, Long startIndex, Long pageSize, String name) { + Filter searchFilter = new Filter(PhysicalNetworkVO.class, "id", Boolean.TRUE, startIndex, pageSize); + SearchCriteria sc = _physicalNetworkDao.createSearchCriteria(); + + if (id != null) { + sc.addAnd("id", SearchCriteria.Op.EQ, id); + } + + if (zoneId != null) { + sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId); + } + + if (name != null) { + sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + name + "%"); + } + + Pair, Integer> result = _physicalNetworkDao.searchAndCount(sc, searchFilter); + return new Pair, Integer>(result.first(), result.second()); + } + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_UPDATE, eventDescription = "updating physical network", async = true) + public PhysicalNetwork updatePhysicalNetwork(Long id, String networkSpeed, List tags, String newVnetRangeString, String state) { + + // verify input parameters + PhysicalNetworkVO network = _physicalNetworkDao.findById(id); + if (network == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); + ex.addProxyObject(network, id, "physicalNetworkId"); + throw ex; + } + + // if zone is of Basic type, don't allow to add vnet range + DataCenter zone = _dcDao.findById(network.getDataCenterId()); + if (zone == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Zone with id=" + network.getDataCenterId() + " doesn't exist in the system"); + ex.addProxyObject(zone, network.getDataCenterId(), "dataCenterId"); + throw ex; + } + if (newVnetRangeString != null) { + if (zone.getNetworkType() == NetworkType.Basic + || (zone.getNetworkType() == NetworkType.Advanced && zone.isSecurityGroupEnabled())) { + throw new InvalidParameterValueException("Can't add vnet range to the physical network in the zone that supports " + zone.getNetworkType() + " network, Security Group enabled: " + + zone.isSecurityGroupEnabled()); + } + } + + if (tags != null && tags.size() > 1) { + throw new InvalidParameterException("Unable to support more than one tag on network yet"); + } + + PhysicalNetwork.State networkState = null; + if (state != null && !state.isEmpty()) { + try { + networkState = PhysicalNetwork.State.valueOf(state); + } catch (IllegalArgumentException ex) { + throw new InvalidParameterValueException("Unable to resolve state '" + state + "' to a supported value {Enabled or Disabled}"); + } + } + + if (state != null) { + network.setState(networkState); + } + + if (tags != null) { + network.setTags(tags); + } + + if (networkSpeed != null) { + network.setSpeed(networkSpeed); + } + + // Vnet range can be extended only + boolean replaceVnet = false; + ArrayList> vnetsToAdd = new ArrayList>(2); + + if (newVnetRangeString != null) { + Integer newStartVnet = 0; + Integer newEndVnet = 0; + String[] newVnetRange = newVnetRangeString.split("-"); + int maxVnet = 4096; + // for GRE phynets allow up to 32bits + // TODO: Not happy about this test. + // What about guru-like objects for physical networs? + s_logger.debug("ISOLATION METHODS:" + network.getIsolationMethods()); + // Java does not have unsigned types... + if (network.getIsolationMethods().contains("GRE")) { + maxVnet = (int)(Math.pow(2, 32)-1); + } + String rangeMessage = " between 0 and " + maxVnet; + if (newVnetRange.length < 2) { + throw new InvalidParameterValueException("Please provide valid vnet range" + rangeMessage); + } + + if (newVnetRange[0] == null || newVnetRange[1] == null) { + throw new InvalidParameterValueException("Please provide valid vnet range" + rangeMessage); + } + + try { + newStartVnet = Integer.parseInt(newVnetRange[0]); + newEndVnet = Integer.parseInt(newVnetRange[1]); + } catch (NumberFormatException e) { + s_logger.warn("Unable to parse vnet range:", e); + throw new InvalidParameterValueException("Please provide valid vnet range" + rangeMessage); + } + if (newStartVnet < 0 || newEndVnet > maxVnet) { + throw new InvalidParameterValueException("Vnet range has to be" + rangeMessage); + } + + if (newStartVnet > newEndVnet) { + throw new InvalidParameterValueException("Vnet range has to be" + rangeMessage + " and start range should be lesser than or equal to stop range"); + } + + //check if new vnet conflicts with vnet ranges of other physical networks + checkGuestVnetsConflicts(network.getDataCenterId(), newStartVnet, newEndVnet, network.getId()); + + if (physicalNetworkHasAllocatedVnets(network.getDataCenterId(), network.getId())) { + String[] existingRange = network.getVnet().split("-"); + int existingStartVnet = Integer.parseInt(existingRange[0]); + int existingEndVnet = Integer.parseInt(existingRange[1]); + + // check if vnet is being extended + if (newStartVnet.intValue() > existingStartVnet || newEndVnet.intValue() < existingEndVnet) { + throw new InvalidParameterValueException("Can't shrink existing vnet range as it the range has vnets allocated. Only extending existing vnet is supported"); + } + + if (newStartVnet < existingStartVnet) { + vnetsToAdd.add(new Pair(newStartVnet, existingStartVnet - 1)); + } + + if (newEndVnet > existingEndVnet) { + vnetsToAdd.add(new Pair(existingEndVnet + 1, newEndVnet)); + } + + } else { + vnetsToAdd.add(new Pair(newStartVnet, newEndVnet)); + replaceVnet = true; + } + } + + if (newVnetRangeString != null) { + network.setVnet(newVnetRangeString); + } + + _physicalNetworkDao.update(id, network); + + if (replaceVnet) { + s_logger.debug("Deleting existing vnet range for the physicalNetwork id= " + id + " and zone id=" + network.getDataCenterId() + " as a part of updatePhysicalNetwork call"); + _dcDao.deleteVnet(network.getId()); + } + + for (Pair vnetToAdd : vnetsToAdd) { + s_logger.debug("Adding vnet range " + vnetToAdd.first() + "-" + vnetToAdd.second() + " for the physicalNetwork id= " + id + " and zone id=" + network.getDataCenterId() + + " as a part of updatePhysicalNetwork call"); + _dcDao.addVnet(network.getDataCenterId(), network.getId(), vnetToAdd.first(), vnetToAdd.second()); + } + + return network; + } + + protected void checkGuestVnetsConflicts(long zoneId, int newStartVnet, int newEndVnet, Long pNtwkIdToSkip) { + List pNtwks = _physicalNetworkDao.listByZone(zoneId); + for (PhysicalNetwork pNtwk : pNtwks) { + // skip my own network and networks that don't have vnet range set + if ((pNtwk.getVnet() == null || pNtwk.getVnet().isEmpty()) || (pNtwkIdToSkip != null && pNtwkIdToSkip == pNtwk.getId())) { + continue; + } + String[] existingRange = pNtwk.getVnet().split("-"); + int startVnet = Integer.parseInt(existingRange[0]); + int endVnet = Integer.parseInt(existingRange[1]); + if ((newStartVnet >= startVnet && newStartVnet <= endVnet) + || (newEndVnet <= endVnet && newEndVnet >= startVnet)) { + throw new InvalidParameterValueException("Vnet range for physical network conflicts with another " + + "physical network's vnet in the zone"); + } + } + } + + private boolean physicalNetworkHasAllocatedVnets(long zoneId, long physicalNetworkId) { + return !_dcDao.listAllocatedVnets(physicalNetworkId).isEmpty(); + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_DELETE, eventDescription = "deleting physical network", async = true) + @DB + public boolean deletePhysicalNetwork(Long physicalNetworkId) { + + // verify input parameters + PhysicalNetworkVO pNetwork = _physicalNetworkDao.findById(physicalNetworkId); + if (pNetwork == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); + ex.addProxyObject(pNetwork, physicalNetworkId, "physicalNetworkId"); + throw ex; + } + + checkIfPhysicalNetworkIsDeletable(physicalNetworkId); + + Transaction txn = Transaction.currentTxn(); + txn.start(); + // delete vlans for this zone + List vlans = _vlanDao.listVlansByPhysicalNetworkId(physicalNetworkId); + for (VlanVO vlan : vlans) { + _vlanDao.remove(vlan.getId()); + } + + // Delete networks + List networks = _networksDao.listByPhysicalNetwork(physicalNetworkId); + if (networks != null && !networks.isEmpty()) { + for (NetworkVO network : networks) { + _networksDao.remove(network.getId()); + } + } + + // delete vnets + _dcDao.deleteVnet(physicalNetworkId); + + // delete service providers + List providers = _pNSPDao.listBy(physicalNetworkId); + + for(PhysicalNetworkServiceProviderVO provider : providers){ + try { + deleteNetworkServiceProvider(provider.getId()); + }catch (ResourceUnavailableException e) { + s_logger.warn("Unable to complete destroy of the physical network provider: " + provider.getProviderName() + ", id: "+ provider.getId(), e); + return false; + } catch (ConcurrentOperationException e) { + s_logger.warn("Unable to complete destroy of the physical network provider: " + provider.getProviderName() + ", id: "+ provider.getId(), e); + return false; + } + } + + // delete traffic types + _pNTrafficTypeDao.deleteTrafficTypes(physicalNetworkId); + + boolean success = _physicalNetworkDao.remove(physicalNetworkId); + + txn.commit(); + + return success; + } + + @DB + private void checkIfPhysicalNetworkIsDeletable(Long physicalNetworkId) { + List> tablesToCheck = new ArrayList>(); + + List vnet = new ArrayList(); + vnet.add(0, "op_dc_vnet_alloc"); + vnet.add(1, "physical_network_id"); + vnet.add(2, "there are allocated vnets for this physical network"); + tablesToCheck.add(vnet); + + List networks = new ArrayList(); + networks.add(0, "networks"); + networks.add(1, "physical_network_id"); + networks.add(2, "there are networks associated to this physical network"); + tablesToCheck.add(networks); + + /* + * List privateIP = new ArrayList(); + * privateIP.add(0, "op_dc_ip_address_alloc"); + * privateIP.add(1, "data_center_id"); + * privateIP.add(2, "there are private IP addresses allocated for this zone"); + * tablesToCheck.add(privateIP); + */ + + List publicIP = new ArrayList(); + publicIP.add(0, "user_ip_address"); + publicIP.add(1, "physical_network_id"); + publicIP.add(2, "there are public IP addresses allocated for this physical network"); + tablesToCheck.add(publicIP); + + for (List table : tablesToCheck) { + String tableName = table.get(0); + String column = table.get(1); + String errorMsg = table.get(2); + + String dbName = "cloud"; + + String selectSql = "SELECT * FROM `" + dbName + "`.`" + tableName + "` WHERE " + column + " = ?"; + + if (tableName.equals("networks")) { + selectSql += " AND removed is NULL"; + } + + if (tableName.equals("op_dc_vnet_alloc")) { + selectSql += " AND taken IS NOT NULL"; + } + + if (tableName.equals("user_ip_address")) { + selectSql += " AND state!='Free'"; + } + + if (tableName.equals("op_dc_ip_address_alloc")) { + selectSql += " AND taken IS NOT NULL"; + } + + Transaction txn = Transaction.currentTxn(); + try { + PreparedStatement stmt = txn.prepareAutoCloseStatement(selectSql); + stmt.setLong(1, physicalNetworkId); + ResultSet rs = stmt.executeQuery(); + if (rs != null && rs.next()) { + throw new CloudRuntimeException("The Physical Network is not deletable because " + errorMsg); + } + } catch (SQLException ex) { + throw new CloudRuntimeException("The Management Server failed to detect if physical network is deletable. Please contact Cloud Support."); + } + } + + } + + @Override + public List listNetworkServices(String providerName) { + + Provider provider = null; + if (providerName != null) { + provider = Network.Provider.getProvider(providerName); + if (provider == null) { + throw new InvalidParameterValueException("Invalid Network Service Provider=" + providerName); + } + } + + if (provider != null) { + NetworkElement element = _networkMgr.getElementImplementingProvider(providerName); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + providerName + "'"); + } + return new ArrayList(element.getCapabilities().keySet()); + } else { + return Service.listAllServices(); + } + } + + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_CREATE, eventDescription = "Creating Physical Network ServiceProvider", create = true) + public PhysicalNetworkServiceProvider addProviderToPhysicalNetwork(Long physicalNetworkId, String providerName, Long destinationPhysicalNetworkId, List enabledServices) { + + // verify input parameters + PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId); + if (network == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); + ex.addProxyObject(network, physicalNetworkId, "physicalNetworkId"); + throw ex; + } + + // verify input parameters + if (destinationPhysicalNetworkId != null) { + PhysicalNetworkVO destNetwork = _physicalNetworkDao.findById(destinationPhysicalNetworkId); + if (destNetwork == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Destination Physical Network with specified id doesn't exist in the system"); + ex.addProxyObject(destNetwork, destinationPhysicalNetworkId, "destinationPhysicalNetworkId"); + throw ex; + } + } + + if (providerName != null) { + Provider provider = Network.Provider.getProvider(providerName); + if (provider == null) { + throw new InvalidParameterValueException("Invalid Network Service Provider=" + providerName); + } + } + + if (_pNSPDao.findByServiceProvider(physicalNetworkId, providerName) != null) { + // TBD: send uuid instead of physicalNetworkId. + throw new CloudRuntimeException("The '" + providerName + "' provider already exists on physical network : " + physicalNetworkId); + } + + // check if services can be turned off + NetworkElement element = _networkMgr.getElementImplementingProvider(providerName); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + providerName + "'"); + } + List services = new ArrayList(); + + if (enabledServices != null) { + if (!element.canEnableIndividualServices()) { + if (enabledServices.size() != element.getCapabilities().keySet().size()) { + throw new InvalidParameterValueException("Cannot enable subset of Services, Please specify the complete list of Services for this Service Provider '" + providerName + "'"); + } + } + + // validate Services + boolean addGatewayService = false; + for (String serviceName : enabledServices) { + Network.Service service = Network.Service.getService(serviceName); + if (service == null || service == Service.Gateway) { + throw new InvalidParameterValueException("Invalid Network Service specified=" + serviceName); + } else if (service == Service.SourceNat) { + addGatewayService = true; + } + + // check if the service is provided by this Provider + if (!element.getCapabilities().containsKey(service)) { + throw new InvalidParameterValueException(providerName + " Provider cannot provide this Service specified=" + serviceName); + } + services.add(service); + } + + if (addGatewayService) { + services.add(Service.Gateway); + } + } else { + // enable all the default services supported by this element. + services = new ArrayList(element.getCapabilities().keySet()); + } + + Transaction txn = Transaction.currentTxn(); + try { + txn.start(); + // Create the new physical network in the database + PhysicalNetworkServiceProviderVO nsp = new PhysicalNetworkServiceProviderVO(physicalNetworkId, providerName); + // set enabled services + nsp.setEnabledServices(services); + + if (destinationPhysicalNetworkId != null) { + nsp.setDestinationPhysicalNetworkId(destinationPhysicalNetworkId); + } + nsp = _pNSPDao.persist(nsp); + + txn.commit(); + return nsp; + } catch (Exception ex) { + s_logger.warn("Exception: ", ex); + throw new CloudRuntimeException("Fail to add a provider to physical network"); + } + + } + + @Override + public Pair, Integer> listNetworkServiceProviders(Long physicalNetworkId, + String name, String state, Long startIndex, Long pageSize) { + + Filter searchFilter = new Filter(PhysicalNetworkServiceProviderVO.class, "id", false, startIndex, pageSize); + SearchBuilder sb = _pNSPDao.createSearchBuilder(); + SearchCriteria sc = sb.create(); + + if (physicalNetworkId != null) { + sc.addAnd("physicalNetworkId", Op.EQ, physicalNetworkId); + } + + if (name != null) { + sc.addAnd("providerName", Op.EQ, name); + } + + if (state != null) { + sc.addAnd("state", Op.EQ, state); + } + + Pair, Integer> result = _pNSPDao.searchAndCount(sc, searchFilter); + return new Pair, Integer>(result.first(), result.second()); + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_UPDATE, eventDescription = "Updating physical network ServiceProvider", async = true) + public PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String stateStr, List enabledServices) { + + PhysicalNetworkServiceProviderVO provider = _pNSPDao.findById(id); + if (provider == null) { + throw new InvalidParameterValueException("Network Service Provider id=" + id + "doesn't exist in the system"); + } + + NetworkElement element = _networkMgr.getElementImplementingProvider(provider.getProviderName()); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getProviderName() + "'"); + } + + PhysicalNetworkServiceProvider.State state = null; + if (stateStr != null && !stateStr.isEmpty()) { + try { + state = PhysicalNetworkServiceProvider.State.valueOf(stateStr); + } catch (IllegalArgumentException ex) { + throw new InvalidParameterValueException("Unable to resolve state '" + stateStr + "' to a supported value {Enabled or Disabled}"); + } + } + + boolean update = false; + + if (state != null) { + if (state == PhysicalNetworkServiceProvider.State.Shutdown) { + throw new InvalidParameterValueException("Updating the provider state to 'Shutdown' is not supported"); + } + + if (s_logger.isDebugEnabled()) { + s_logger.debug("updating state of the service provider id=" + id + " on physical network: " + provider.getPhysicalNetworkId() + " to state: " + stateStr); + } + switch (state) { + case Enabled: + if (element != null && element.isReady(provider)) { + provider.setState(PhysicalNetworkServiceProvider.State.Enabled); + update = true; + } else { + throw new CloudRuntimeException("Provider is not ready, cannot Enable the provider, please configure the provider first"); + } + break; + case Disabled: + // do we need to do anything for the provider instances before disabling? + provider.setState(PhysicalNetworkServiceProvider.State.Disabled); + update = true; + break; + } + } + + if (enabledServices != null) { + // check if services can be turned of + if (!element.canEnableIndividualServices()) { + throw new InvalidParameterValueException("Cannot update set of Services for this Service Provider '" + provider.getProviderName() + "'"); + } + + // validate Services + List services = new ArrayList(); + for (String serviceName : enabledServices) { + Network.Service service = Network.Service.getService(serviceName); + if (service == null) { + throw new InvalidParameterValueException("Invalid Network Service specified=" + serviceName); + } + services.add(service); + } + // set enabled services + provider.setEnabledServices(services); + update = true; + } + + if (update) { + _pNSPDao.update(id, provider); + } + return provider; + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_DELETE, eventDescription = "Deleting physical network ServiceProvider", async = true) + public boolean deleteNetworkServiceProvider(Long id) throws ConcurrentOperationException, ResourceUnavailableException { + PhysicalNetworkServiceProviderVO provider = _pNSPDao.findById(id); + + if (provider == null) { + throw new InvalidParameterValueException("Network Service Provider id=" + id + "doesn't exist in the system"); + } + + // check if there are networks using this provider + List networks = _networksDao.listByPhysicalNetworkAndProvider(provider.getPhysicalNetworkId(), provider.getProviderName()); + if (networks != null && !networks.isEmpty()) { + throw new CloudRuntimeException("Provider is not deletable because there are active networks using this provider, please upgrade these networks to new network offerings"); + } + + User callerUser = _accountMgr.getActiveUser(UserContext.current().getCallerUserId()); + Account callerAccount = _accountMgr.getActiveAccountById(callerUser.getAccountId()); + // shutdown the provider instances + ReservationContext context = new ReservationContextImpl(null, null, callerUser, callerAccount); + if (s_logger.isDebugEnabled()) { + s_logger.debug("Shutting down the service provider id=" + id + " on physical network: " + provider.getPhysicalNetworkId()); + } + NetworkElement element = _networkMgr.getElementImplementingProvider(provider.getProviderName()); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getProviderName() + "'"); + } + + if (element != null && element.shutdownProviderInstances(provider, context)) { + provider.setState(PhysicalNetworkServiceProvider.State.Shutdown); + } + + return _pNSPDao.remove(id); + } + + @Override + public PhysicalNetwork getPhysicalNetwork(Long physicalNetworkId) { + return _physicalNetworkDao.findById(physicalNetworkId); + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_PHYSICAL_NETWORK_CREATE, eventDescription = "Creating Physical Network", async = true) + public PhysicalNetwork getCreatedPhysicalNetwork(Long physicalNetworkId) { + return getPhysicalNetwork(physicalNetworkId); + } + + @Override + public PhysicalNetworkServiceProvider getPhysicalNetworkServiceProvider(Long providerId) { + return _pNSPDao.findById(providerId); + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_SERVICE_PROVIDER_CREATE, eventDescription = "Creating Physical Network ServiceProvider", async = true) + public PhysicalNetworkServiceProvider getCreatedPhysicalNetworkServiceProvider(Long providerId) { + return getPhysicalNetworkServiceProvider(providerId); + } + + @Override + public long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType) { + List pNtwks = new ArrayList(); + if (trafficType != null) { + pNtwks = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); + } else { + pNtwks = _physicalNetworkDao.listByZone(zoneId); + } + + if (pNtwks.isEmpty()) { + throw new InvalidParameterValueException("Unable to find physical network in zone id=" + zoneId); + } + + if (pNtwks.size() > 1) { + if (tag == null) { + throw new InvalidParameterValueException("More than one physical networks exist in zone id=" + zoneId + " and no tags are specified in order to make a choice"); + } + + Long pNtwkId = null; + for (PhysicalNetwork pNtwk : pNtwks) { + if (pNtwk.getTags().contains(tag)) { + s_logger.debug("Found physical network id=" + pNtwk.getId() + " based on requested tags " + tag); + pNtwkId = pNtwk.getId(); + break; + } + } + if (pNtwkId == null) { + throw new InvalidParameterValueException("Unable to find physical network which match the tags " + tag); + } + return pNtwkId; + } else { + return pNtwks.get(0).getId(); + } + } + + + + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_CREATE, eventDescription = "Creating Physical Network TrafficType", create = true) + public PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficTypeStr, String xenLabel, String kvmLabel, String vmwareLabel, String simulatorLabel, String vlan) { + + // verify input parameters + PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId); + if (network == null) { + throw new InvalidParameterValueException("Physical Network id=" + physicalNetworkId + "doesn't exist in the system"); + } + + Networks.TrafficType trafficType = null; + if (trafficTypeStr != null && !trafficTypeStr.isEmpty()) { + try { + trafficType = Networks.TrafficType.valueOf(trafficTypeStr); + } catch (IllegalArgumentException ex) { + throw new InvalidParameterValueException("Unable to resolve trafficType '" + trafficTypeStr + "' to a supported value"); + } + } + + if (_pNTrafficTypeDao.isTrafficTypeSupported(physicalNetworkId, trafficType)) { + throw new CloudRuntimeException("This physical network already supports the traffic type: " + trafficType); + } + // For Storage, Control, Management, Public check if the zone has any other physical network with this + // traffictype already present + // If yes, we cant add these traffics to one more physical network in the zone. + + if (TrafficType.isSystemNetwork(trafficType) || TrafficType.Public.equals(trafficType) || TrafficType.Storage.equals(trafficType)) { + if (!_physicalNetworkDao.listByZoneAndTrafficType(network.getDataCenterId(), trafficType).isEmpty()) { + throw new CloudRuntimeException("Fail to add the traffic type to physical network because Zone already has a physical network with this traffic type: " + trafficType); + } + } + + if (TrafficType.Storage.equals(trafficType)) { + List ssvms = _stnwMgr.getSSVMWithNoStorageNetwork(network.getDataCenterId()); + if (!ssvms.isEmpty()) { + StringBuilder sb = new StringBuilder( + "Cannot add " + + trafficType + + " traffic type as there are below secondary storage vm still running. Please stop them all and add Storage traffic type again, then destory them all to allow CloudStack recreate them with storage network(If you have added storage network ip range)"); + sb.append("SSVMs:"); + for (SecondaryStorageVmVO ssvm : ssvms) { + sb.append(ssvm.getInstanceName()).append(":").append(ssvm.getState()); + } + throw new CloudRuntimeException(sb.toString()); + } + } + + Transaction txn = Transaction.currentTxn(); + try { + txn.start(); + // Create the new traffic type in the database + if (xenLabel == null) { + xenLabel = getDefaultXenNetworkLabel(trafficType); + } + PhysicalNetworkTrafficTypeVO pNetworktrafficType = new PhysicalNetworkTrafficTypeVO(physicalNetworkId, trafficType, xenLabel, kvmLabel, vmwareLabel, simulatorLabel, vlan); + pNetworktrafficType = _pNTrafficTypeDao.persist(pNetworktrafficType); + + txn.commit(); + return pNetworktrafficType; + } catch (Exception ex) { + s_logger.warn("Exception: ", ex); + throw new CloudRuntimeException("Fail to add a traffic type to physical network"); + } + + } + + private String getDefaultXenNetworkLabel(TrafficType trafficType) { + String xenLabel = null; + switch (trafficType) { + case Public: + xenLabel = _configDao.getValue(Config.XenPublicNetwork.key()); + break; + case Guest: + xenLabel = _configDao.getValue(Config.XenGuestNetwork.key()); + break; + case Storage: + xenLabel = _configDao.getValue(Config.XenStorageNetwork1.key()); + break; + case Management: + xenLabel = _configDao.getValue(Config.XenPrivateNetwork.key()); + break; + case Control: + xenLabel = "cloud_link_local_network"; + break; + } + return xenLabel; + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_CREATE, eventDescription = "Creating Physical Network TrafficType", async = true) + public PhysicalNetworkTrafficType getPhysicalNetworkTrafficType(Long id) { + return _pNTrafficTypeDao.findById(id); + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_UPDATE, eventDescription = "Updating physical network TrafficType", async = true) + public PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, String vmwareLabel) { + + PhysicalNetworkTrafficTypeVO trafficType = _pNTrafficTypeDao.findById(id); + + if (trafficType == null) { + throw new InvalidParameterValueException("Traffic Type with id=" + id + "doesn't exist in the system"); + } + + if (xenLabel != null) { + if("".equals(xenLabel)){ + xenLabel = null; + } + trafficType.setXenNetworkLabel(xenLabel); + } + if (kvmLabel != null) { + if("".equals(kvmLabel)){ + kvmLabel = null; + } + trafficType.setKvmNetworkLabel(kvmLabel); + } + if (vmwareLabel != null) { + if("".equals(vmwareLabel)){ + vmwareLabel = null; + } + trafficType.setVmwareNetworkLabel(vmwareLabel); + } + _pNTrafficTypeDao.update(id, trafficType); + + return trafficType; + } + + @Override + @ActionEvent(eventType = EventTypes.EVENT_TRAFFIC_TYPE_DELETE, eventDescription = "Deleting physical network TrafficType", async = true) + public boolean deletePhysicalNetworkTrafficType(Long id) { + PhysicalNetworkTrafficTypeVO trafficType = _pNTrafficTypeDao.findById(id); + + if (trafficType == null) { + throw new InvalidParameterValueException("Traffic Type with id=" + id + "doesn't exist in the system"); + } + + // check if there are any networks associated to this physical network with this traffic type + if (TrafficType.Guest.equals(trafficType.getTrafficType())) { + if (!_networksDao.listByPhysicalNetworkTrafficType(trafficType.getPhysicalNetworkId(), trafficType.getTrafficType()).isEmpty()) { + throw new CloudRuntimeException("The Traffic Type is not deletable because there are existing networks with this traffic type:" + trafficType.getTrafficType()); + } + } else if (TrafficType.Storage.equals(trafficType.getTrafficType())) { + PhysicalNetworkVO pn = _physicalNetworkDao.findById(trafficType.getPhysicalNetworkId()); + if (_stnwMgr.isAnyStorageIpInUseInZone(pn.getDataCenterId())) { + throw new CloudRuntimeException("The Traffic Type is not deletable because there are still some storage network ip addresses in use:" + trafficType.getTrafficType()); + } + } + return _pNTrafficTypeDao.remove(id); + } + + @Override + public Pair, Integer> listTrafficTypes(Long physicalNetworkId) { + PhysicalNetworkVO network = _physicalNetworkDao.findById(physicalNetworkId); + if (network == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Physical Network with specified id doesn't exist in the system"); + ex.addProxyObject(network, physicalNetworkId, "physicalNetworkId"); + throw ex; + } + + Pair, Integer> result = _pNTrafficTypeDao.listAndCountBy(physicalNetworkId); + return new Pair, Integer>(result.first(), result.second()); + } + + + + + + @Override //TODO: duplicated in NetworkMgr + public NetworkVO getExclusiveGuestNetwork(long zoneId) { + List networks = _networksDao.listBy(Account.ACCOUNT_ID_SYSTEM, zoneId, GuestType.Shared, TrafficType.Guest); + if (networks == null || networks.isEmpty()) { + throw new InvalidParameterValueException("Unable to find network with trafficType " + TrafficType.Guest + " and guestType " + GuestType.Shared + " in zone " + zoneId); + } + + if (networks.size() > 1) { + throw new InvalidParameterValueException("Found more than 1 network with trafficType " + TrafficType.Guest + " and guestType " + GuestType.Shared + " in zone " + zoneId); + + } + + return networks.get(0); + } + + protected PhysicalNetworkServiceProvider addDefaultVirtualRouterToPhysicalNetwork(long physicalNetworkId) { + + PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, Network.Provider.VirtualRouter.getName(), null, null); + // add instance of the provider + VirtualRouterElement element = (VirtualRouterElement) _networkMgr.getElementImplementingProvider(Network.Provider.VirtualRouter.getName()); + if (element == null) { + throw new CloudRuntimeException("Unable to find the Network Element implementing the VirtualRouter Provider"); + } + element.addElement(nsp.getId(), VirtualRouterProviderType.VirtualRouter); + + return nsp; + } + + protected PhysicalNetworkServiceProvider addDefaultVpcVirtualRouterToPhysicalNetwork(long physicalNetworkId) { + + PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, + Network.Provider.VPCVirtualRouter.getName(), null, null); + // add instance of the provider + VpcVirtualRouterElement element = (VpcVirtualRouterElement) _networkMgr.getElementImplementingProvider(Network.Provider.VPCVirtualRouter.getName()); + if (element == null) { + throw new CloudRuntimeException("Unable to find the Network Element implementing the VPCVirtualRouter Provider"); + } + element.addElement(nsp.getId(), VirtualRouterProviderType.VPCVirtualRouter); + + return nsp; + } + + protected PhysicalNetworkServiceProvider addDefaultSecurityGroupProviderToPhysicalNetwork(long physicalNetworkId) { + + PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, + Network.Provider.SecurityGroupProvider.getName(), null, null); + + return nsp; + } + + //@Override + protected boolean isNetworkSystem(Network network) { + NetworkOffering no = _networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId()); + if (no.isSystemOnly()) { + return true; + } else { + return false; + } + } + + + //@Override + private boolean getAllowSubdomainAccessGlobal() { + return _allowSubdomainNetworkAccess; + } + + + + @Override + public List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd) { + String type = cmd.getTrafficType(); + List> results = new ArrayList>(); + if (type != null) { + for (NetworkGuru guru : _networkGurus) { + if (guru.isMyTrafficType(TrafficType.getTrafficType(type))) { + results.add(new Pair(TrafficType.getTrafficType(type), guru.getName())); + break; + } + } + } else { + for (NetworkGuru guru : _networkGurus) { + TrafficType[] allTypes = guru.getSupportedTrafficType(); + for (TrafficType t : allTypes) { + results.add(new Pair(t, guru.getName())); + } + } + } + + return results; + } + + + @Override + @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "associating Ip", async = true) + public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, + ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException { + + Network network = _networksDao.findById(networkId); + if (network == null) { + throw new InvalidParameterValueException("Invalid network id is given"); + } + + if (network.getVpcId() != null) { + throw new InvalidParameterValueException("Can't assign ip to the network directly when network belongs" + + " to VPC.Specify vpcId to associate ip address to VPC"); + } + return _networkMgr.associateIPToGuestNetwork(ipId, networkId, true); + + } + + + @Override @DB + public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, + String vlan, String startIp, String endIp, String gateway, String netmask, long networkOwnerId, Long vpcId) + throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { + + Account owner = _accountMgr.getAccount(networkOwnerId); + + // Get system network offeirng + NetworkOfferingVO ntwkOff = _systemNetworks.get(NetworkOffering.SystemPrivateGatewayNetworkOffering); + + // Validate physical network + PhysicalNetwork pNtwk = _physicalNetworkDao.findById(physicalNetworkId); + if (pNtwk == null) { + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find a physical network" + + " having the given id"); + ex.addProxyObject("physical_network", physicalNetworkId, "physicalNetworkId"); + throw ex; + } + + // VALIDATE IP INFO + // if end ip is not specified, default it to startIp + if (!NetUtils.isValidIp(startIp)) { + throw new InvalidParameterValueException("Invalid format for the startIp parameter"); + } + if (endIp == null) { + endIp = startIp; + } else if (!NetUtils.isValidIp(endIp)) { + throw new InvalidParameterValueException("Invalid format for the endIp parameter"); + } + + String cidr = null; + if (!NetUtils.isValidIp(gateway)) { + throw new InvalidParameterValueException("Invalid gateway"); + } + if (!NetUtils.isValidNetmask(netmask)) { + throw new InvalidParameterValueException("Invalid netmask"); + } + + cidr = NetUtils.ipAndNetMaskToCidr(gateway, netmask); + + + Transaction txn = Transaction.currentTxn(); + txn.start(); + + //lock datacenter as we need to get mac address seq from there + DataCenterVO dc = _dcDao.lockRow(pNtwk.getDataCenterId(), true); + + //check if we need to create guest network + Network privateNetwork = _networksDao.getPrivateNetwork(BroadcastDomainType.Vlan.toUri(vlan).toString(), cidr, + networkOwnerId, pNtwk.getDataCenterId()); + if (privateNetwork == null) { + //create Guest network + privateNetwork = _networkMgr.createGuestNetwork(ntwkOff.getId(), networkName, displayText, gateway, cidr, vlan, + null, owner, null, pNtwk, pNtwk.getDataCenterId(), ACLType.Account, null, null); + s_logger.debug("Created private network " + privateNetwork); + } else { + s_logger.debug("Private network already exists: " + privateNetwork); + } + + //add entry to private_ip_address table + PrivateIpVO privateIp = _privateIpDao.findByIpAndSourceNetworkId(privateNetwork.getId(), startIp); + if (privateIp != null) { + throw new InvalidParameterValueException("Private ip address " + startIp + " already used for private gateway" + + " in zone " + _configMgr.getZone(pNtwk.getDataCenterId()).getName()); + } + + Long mac = dc.getMacAddress(); + Long nextMac = mac + 1; + dc.setMacAddress(nextMac); + + privateIp = new PrivateIpVO(startIp, privateNetwork.getId(), nextMac, vpcId); + _privateIpDao.persist(privateIp); + + _dcDao.update(dc.getId(), dc); + + txn.commit(); + s_logger.debug("Private network " + privateNetwork + " is created"); + + return privateNetwork; + } + +} From cf9068598516963e34af69f72dec38f22b96c3f2 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Mon, 7 Jan 2013 12:53:20 -0800 Subject: [PATCH 06/90] Remove old applyRules implementation --- .../src/com/cloud/network/NetworkManager.java | 2 - .../com/cloud/network/NetworkManagerImpl.java | 91 +------------------ 2 files changed, 1 insertion(+), 92 deletions(-) diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 101d3187ba4..87848b822b1 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -133,8 +133,6 @@ public interface NetworkManager { List getNicProfiles(VirtualMachine vm); String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException; - - boolean applyRules(List rules, boolean continueOnError) throws ResourceUnavailableException; boolean applyRules(List rules, FirewallRule.Purpose purpose, NetworkRuleApplier applier, boolean continueOnError) throws ResourceUnavailableException; diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index a3fa57cb30e..592613efe34 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -255,8 +255,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { @Inject FirewallRulesDao _firewallDao; @Inject - PortForwardingRulesDao _portForwardingDao; - @Inject ResourceLimitService _resourceLimitMgr; @Inject @@ -2852,94 +2850,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { - @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"); - return true; - } - - boolean success = true; - Network network = _networksDao.findById(rules.get(0).getNetworkId()); - Purpose purpose = rules.get(0).getPurpose(); - - // get the list of public ip's owned by the network - List userIps = _ipAddressDao.listByAssociatedNetwork(network.getId(), null); - List publicIps = new ArrayList(); - if (userIps != null && !userIps.isEmpty()) { - for (IPAddressVO userIp : userIps) { - PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); - publicIps.add(publicIp); - } - } - - // rules can not programmed unless IP is associated with network service provider, so run IP assoication for - // the network so as to ensure IP is associated before applying rules (in add state) - applyIpAssociations(network, false, continueOnError, publicIps); - - for (NetworkElement ne : _networkElements) { - Provider provider = Network.Provider.getProvider(ne.getName()); - if (provider == null) { - if (ne.getName().equalsIgnoreCase("Ovs") || ne.getName().equalsIgnoreCase("BareMetal") - || ne.getName().equalsIgnoreCase("CiscoNexus1000vVSM")) { - continue; - } - throw new CloudRuntimeException("Unable to identify the provider by name " + ne.getName()); - } - try { - boolean handled; - switch (purpose) { - case LoadBalancing: - boolean isLbProvider = isProviderSupportServiceInNetwork(network.getId(), Service.Lb, provider); - if (!(ne instanceof LoadBalancingServiceProvider && isLbProvider)) { - continue; - } - handled = ((LoadBalancingServiceProvider) ne).applyLBRules(network, (List) rules); - break; - case PortForwarding: - boolean isPfProvider = isProviderSupportServiceInNetwork(network.getId(), Service.PortForwarding, provider); - if (!(ne instanceof PortForwardingServiceProvider && isPfProvider)) { - 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: - boolean isFirewallProvider = isProviderSupportServiceInNetwork(network.getId(), Service.Firewall, provider); - if (!(ne instanceof FirewallServiceProvider && isFirewallProvider)) { - continue; - } - handled = ((FirewallServiceProvider) ne).applyFWRules(network, rules); - break; - case NetworkACL: - boolean isNetworkACLProvider = isProviderSupportServiceInNetwork(network.getId(), Service.NetworkACL, provider); - if (!(ne instanceof NetworkACLServiceProvider && isNetworkACLProvider)) { - continue; - } - handled = ((NetworkACLServiceProvider) ne).applyNetworkACLs(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) { - throw e; - } - s_logger.warn("Problems with " + ne.getName() + " but pushing on", e); - success = false; - } - } - - // if all the rules configured on public IP are revoked then dis-associate IP with network service provider - applyIpAssociations(network, true, continueOnError, publicIps); - - return success; - } + public class NetworkGarbageCollector implements Runnable { From c876f02c6f5368d210879a90a0ac8fc1b798f5d9 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Mon, 7 Jan 2013 13:32:45 -0800 Subject: [PATCH 07/90] Clean up some unused imports --- server/src/com/cloud/network/NetworkManagerImpl.java | 4 ---- .../com/cloud/network/element/VpcVirtualRouterElement.java | 7 ++----- server/src/com/cloud/network/vpc/VpcManagerImpl.java | 7 +++++-- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 592613efe34..d17b9a6c0ce 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -118,12 +118,9 @@ import com.cloud.network.dao.PhysicalNetworkServiceProviderVO; import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; import com.cloud.network.element.DhcpServiceProvider; -import com.cloud.network.element.FirewallServiceProvider; import com.cloud.network.element.IpDeployer; import com.cloud.network.element.LoadBalancingServiceProvider; -import com.cloud.network.element.NetworkACLServiceProvider; import com.cloud.network.element.NetworkElement; -import com.cloud.network.element.PortForwardingServiceProvider; import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; @@ -135,7 +132,6 @@ import com.cloud.network.rules.FirewallManager; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.FirewallRuleVO; -import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.PortForwardingRuleVO; import com.cloud.network.rules.RulesManager; import com.cloud.network.rules.StaticNat; diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java index 71da967fc6f..ab748b25de3 100644 --- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java @@ -36,7 +36,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.NetworkService; import com.cloud.network.PublicIpAddress; import com.cloud.network.Site2SiteVpnConnection; import com.cloud.network.Site2SiteVpnGateway; @@ -64,8 +63,6 @@ import com.cloud.vm.VirtualMachineProfile; @Local(value = {NetworkElement.class, Site2SiteVpnServiceProvider.class}) public class VpcVirtualRouterElement extends VirtualRouterElement implements VpcProvider, Site2SiteVpnServiceProvider, NetworkACLServiceProvider{ private static final Logger s_logger = Logger.getLogger(VpcVirtualRouterElement.class); - @Inject - NetworkService _ntwkService; @Inject VpcManager _vpcMgr; @Inject @@ -234,7 +231,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc List routers = _routerDao.listByVpcId(vpcId); for (VirtualRouter router : routers) { //1) Check if router is already a part of the network - if (!_ntwkService.isVmPartOfNetwork(router.getId(), network.getId())) { + if (!_networkMgr.isVmPartOfNetwork(router.getId(), network.getId())) { s_logger.debug("Router " + router + " is not a part the network " + network); continue; } @@ -262,7 +259,7 @@ public class VpcVirtualRouterElement extends VirtualRouterElement implements Vpc List routers = _routerDao.listByVpcId(vpcId); for (VirtualRouter router : routers) { //1) Check if router is already a part of the network - if (!_ntwkService.isVmPartOfNetwork(router.getId(), config.getId())) { + if (!_networkMgr.isVmPartOfNetwork(router.getId(), config.getId())) { s_logger.debug("Router " + router + " is not a part the network " + config); continue; } diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index dbaecbbc3cb..f974d4f79d0 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -62,6 +62,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkService; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.TrafficType; @@ -137,6 +138,8 @@ public class VpcManagerImpl implements VpcManager, Manager{ @Inject NetworkManager _ntwkMgr; @Inject + NetworkService _ntwkSvc; + @Inject IPAddressDao _ipAddressDao; @Inject DomainRouterDao _routerDao; @@ -1255,7 +1258,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ s_logger.debug("Creating Private gateway for VPC " + vpc); //1) create private network String networkName = "vpc-" + vpc.getName() + "-privateNetwork"; - Network privateNtwk = _ntwkMgr.createPrivateNetwork(networkName, networkName, physicalNetworkId, + Network privateNtwk = _ntwkSvc.createPrivateNetwork(networkName, networkName, physicalNetworkId, vlan, ipAddress, null, gateway, netmask, gatewayOwnerId, vpcId); //2) create gateway entry @@ -1953,7 +1956,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ validateNtkwOffForVpc(ntwkOffId, null, null, null, vpc, networkId, null); } - return _ntwkMgr.updateGuestNetwork(networkId, name, displayText, callerAccount, callerUser, domainSuffix, + return _ntwkSvc.updateGuestNetwork(networkId, name, displayText, callerAccount, callerUser, domainSuffix, ntwkOffId, changeCidr); } From e262eef296377d56ee202e0ff5f28286b4936157 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Mon, 7 Jan 2013 14:07:22 -0800 Subject: [PATCH 08/90] Fix mocks --- .../cloud/network/MockNetworkManagerImpl.java | 133 ++++++++++++++---- .../com/cloud/vpc/MockNetworkManagerImpl.java | 107 ++++++++++---- 2 files changed, 183 insertions(+), 57 deletions(-) diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index 76b911a722e..4ad53245599 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -16,6 +16,14 @@ // under the License. package com.cloud.network; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + import com.cloud.acl.ControlledEntity.ACLType; import com.cloud.api.commands.CreateNetworkCmd; import com.cloud.api.commands.ListNetworksCmd; @@ -27,7 +35,12 @@ import com.cloud.dc.Vlan.VlanType; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlan; -import com.cloud.exception.*; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InsufficientVirtualNetworkCapcityException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.Network.Capability; import com.cloud.network.Network.GuestType; @@ -36,11 +49,10 @@ import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; import com.cloud.network.element.NetworkElement; -import com.cloud.network.element.RemoteAccessVPNServiceProvider; -import com.cloud.network.element.Site2SiteVpnServiceProvider; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.StaticNat; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; @@ -48,14 +60,13 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.utils.Pair; import com.cloud.utils.component.Manager; -import com.cloud.vm.*; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachineProfileImpl; @Local(value = { NetworkManager.class, NetworkService.class }) public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkService { @@ -254,12 +265,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public boolean applyRules(List rules, boolean continueOnError) throws ResourceUnavailableException { - // TODO Auto-generated method stub - return false; - } - + @Override public PublicIpAddress getPublicIpAddress(long ipAddressId) { // TODO Auto-generated method stub @@ -411,10 +417,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public List getRemoteAccessVpnElements() { - return null; - } + @Override public boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider) { @@ -994,15 +997,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - /* (non-Javadoc) -<<<<<<< HEAD - * @see com.cloud.network.NetworkManager#getSite2SiteVpnElements() - */ - @Override - public List getSite2SiteVpnElements() { - // TODO Auto-generated method stub - return null; - } + /* (non-Javadoc) * @see com.cloud.network.NetworkManager#isPrivateGateway(com.cloud.vm.Nic) @@ -1135,4 +1130,82 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS // TODO Auto-generated method stub return 0; } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#applyRules(java.util.List, com.cloud.network.rules.FirewallRule.Purpose, com.cloud.network.NetworkRuleApplier, boolean) + */ + @Override + public boolean applyRules(List rules, Purpose purpose, NetworkRuleApplier applier, + boolean continueOnError) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#applyIpAssociations(com.cloud.network.Network, boolean, boolean, java.util.List) + */ + @Override + public boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, + List publicIps) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#cleanupIpResources(long, long, com.cloud.user.Account) + */ + @Override + public boolean cleanupIpResources(long addrId, long userId, Account caller) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#restartNetwork(java.lang.Long, com.cloud.user.Account, com.cloud.user.User, boolean) + */ + @Override + public boolean restartNetwork(Long networkId, Account callerAccount, User callerUser, boolean cleanup) + throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#shutdownNetworkElementsAndResources(com.cloud.vm.ReservationContext, boolean, com.cloud.network.NetworkVO) + */ + @Override + public boolean shutdownNetworkElementsAndResources(ReservationContext context, boolean b, NetworkVO network) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#implementNetworkElementsAndResources(com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext, com.cloud.network.NetworkVO, com.cloud.offerings.NetworkOfferingVO) + */ + @Override + public void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, + NetworkVO network, NetworkOfferingVO findById) throws ConcurrentOperationException, + InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocateIp(com.cloud.user.Account, boolean, com.cloud.user.Account, com.cloud.dc.DataCenter) + */ + @Override + public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, DataCenter zone) + throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#finalizeServicesAndProvidersForNetwork(com.cloud.offering.NetworkOffering, java.lang.Long) + */ + @Override + public Map finalizeServicesAndProvidersForNetwork(NetworkOffering offering, Long physicalNetworkId) { + // TODO Auto-generated method stub + return null; + } } diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index 3536d66ea4f..f8818c002f8 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -43,6 +43,7 @@ import com.cloud.network.element.Site2SiteVpnServiceProvider; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.StaticNat; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; @@ -62,7 +63,7 @@ import javax.naming.ConfigurationException; import java.util.*; @Local(value = { NetworkManager.class, NetworkService.class }) -public class MockNetworkManagerImpl implements NetworkManager, Manager{ +public class MockNetworkManagerImpl implements NetworkManager, NetworkService, Manager{ @Inject NetworkServiceMapDao _ntwkSrvcDao; @Inject @@ -617,14 +618,6 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ return null; } - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#applyRules(java.util.List, boolean) - */ - @Override - public boolean applyRules(List rules, boolean continueOnError) throws ResourceUnavailableException { - // TODO Auto-generated method stub - return false; - } /* (non-Javadoc) * @see com.cloud.network.NetworkManager#validateRule(com.cloud.network.rules.FirewallRule) @@ -635,24 +628,6 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ return false; } - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getRemoteAccessVpnElements() - */ - @Override - public List getRemoteAccessVpnElements() { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getSite2SiteVpnElements() - */ - @Override - public List getSite2SiteVpnElements() { - // TODO Auto-generated method stub - return null; - } - /* (non-Javadoc) * @see com.cloud.network.NetworkManager#getPublicIpAddress(long) */ @@ -1480,4 +1455,82 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ return 0; } + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#applyRules(java.util.List, com.cloud.network.rules.FirewallRule.Purpose, com.cloud.network.NetworkRuleApplier, boolean) + */ + @Override + public boolean applyRules(List rules, Purpose purpose, NetworkRuleApplier applier, + boolean continueOnError) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#applyIpAssociations(com.cloud.network.Network, boolean, boolean, java.util.List) + */ + @Override + public boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, + List publicIps) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#cleanupIpResources(long, long, com.cloud.user.Account) + */ + @Override + public boolean cleanupIpResources(long addrId, long userId, Account caller) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#restartNetwork(java.lang.Long, com.cloud.user.Account, com.cloud.user.User, boolean) + */ + @Override + public boolean restartNetwork(Long networkId, Account callerAccount, User callerUser, boolean cleanup) + throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#shutdownNetworkElementsAndResources(com.cloud.vm.ReservationContext, boolean, com.cloud.network.NetworkVO) + */ + @Override + public boolean shutdownNetworkElementsAndResources(ReservationContext context, boolean b, NetworkVO network) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#implementNetworkElementsAndResources(com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext, com.cloud.network.NetworkVO, com.cloud.offerings.NetworkOfferingVO) + */ + @Override + public void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, + NetworkVO network, NetworkOfferingVO findById) throws ConcurrentOperationException, + InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocateIp(com.cloud.user.Account, boolean, com.cloud.user.Account, com.cloud.dc.DataCenter) + */ + @Override + public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, DataCenter zone) + throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#finalizeServicesAndProvidersForNetwork(com.cloud.offering.NetworkOffering, java.lang.Long) + */ + @Override + public Map finalizeServicesAndProvidersForNetwork(NetworkOffering offering, Long physicalNetworkId) { + // TODO Auto-generated method stub + return null; + } + } From af1abe4056dfe00bd3b6f070fce19b2beb1bfc81 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Mon, 7 Jan 2013 14:57:40 -0800 Subject: [PATCH 09/90] Forgot some element adapters + dont add JuniperSRX by default --- client/tomcatconf/components.xml.in | 22 ++++++++++++++----- .../DefaultComponentLibrary.java | 2 ++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index 49c075b117c..48b1e8ae8c4 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -161,11 +161,6 @@ under the License. - - - - - @@ -176,14 +171,15 @@ under the License. - + + @@ -191,9 +187,23 @@ under the License. + + + + + + + + + + + + + + diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 226ca49a56b..32a6be7c674 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -74,6 +74,7 @@ import com.cloud.maint.UpgradeManagerImpl; import com.cloud.maint.dao.AgentUpgradeDaoImpl; import com.cloud.network.ExternalLoadBalancerUsageManagerImpl; import com.cloud.network.NetworkManagerImpl; +import com.cloud.network.NetworkServiceImpl; import com.cloud.network.StorageNetworkManagerImpl; import com.cloud.network.as.AutoScaleManagerImpl; import com.cloud.network.as.dao.AutoScalePolicyConditionMapDaoImpl; @@ -379,6 +380,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addManager("account manager", AccountManagerImpl.class); addManager("domain manager", DomainManagerImpl.class); addManager("resource limit manager", ResourceLimitManagerImpl.class); + addManager("network service", NetworkServiceImpl.class); addManager("network manager", NetworkManagerImpl.class); addManager("download manager", DownloadMonitorImpl.class); addManager("upload manager", UploadMonitorImpl.class); From 5a830c4db048f33296d3f4b6df40c54c739aab04 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Mon, 7 Jan 2013 18:30:35 -0800 Subject: [PATCH 10/90] Network-refactor: Refactor NetworkManager into NetworkModel and NetworkManager. NetworkManager's exclusive focus is now - handling plugins during orchestration, and - to deal with ip address allocation. Those classes that used to refer to NetworkManager to get access to the datamodel now refer to NetworkModel Signed-off-by: Chiradeep Vittal --- .../com/cloud/hypervisor/guru/VMwareGuru.java | 4 +- .../vmware/VmwareServerDiscoverer.java | 4 +- .../vmware/manager/VmwareManagerImpl.java | 4 +- .../element/ElasticLoadBalancerElement.java | 4 +- .../lb/ElasticLoadBalancerManagerImpl.java | 17 +- .../F5ExternalLoadBalancerElement.java | 4 +- .../JuniperSRXExternalFirewallElement.java | 4 +- .../network/element/NetscalerElement.java | 6 +- .../network/element/NiciraNvpElement.java | 101 +- .../guru/NiciraNvpGuestNetworkGuru.java | 8 +- .../network/element/NiciraNvpElementTest.java | 9 +- .../guru/NiciraNvpGuestNetworkGuruTest.java | 13 +- .../network/guru/OvsGuestNetworkGuru.java | 19 +- server/src/com/cloud/acl/DomainChecker.java | 4 +- server/src/com/cloud/api/ApiDBUtils.java | 25 +- .../cloud/async/AsyncJobExecutorContext.java | 4 +- .../async/AsyncJobExecutorContextImpl.java | 9 +- .../baremetal/BareMetalVmManagerImpl.java | 2 +- .../ConfigurationManagerImpl.java | 57 +- .../consoleproxy/ConsoleProxyManagerImpl.java | 5 +- .../ha/ManagementIPSystemVMInvestigator.java | 4 +- .../com/cloud/ha/UserVmDomRInvestigator.java | 4 +- .../kvm/discoverer/KvmServerDiscoverer.java | 4 +- .../ExternalFirewallDeviceManagerImpl.java | 2 +- ...ExternalLoadBalancerDeviceManagerImpl.java | 6 +- .../ExternalLoadBalancerUsageManagerImpl.java | 2 +- .../ExternalNetworkDeviceManagerImpl.java | 2 +- .../src/com/cloud/network/NetworkManager.java | 227 +- .../com/cloud/network/NetworkManagerImpl.java | 1830 +------------ .../src/com/cloud/network/NetworkModel.java | 250 ++ .../com/cloud/network/NetworkModelImpl.java | 1734 ++++++++++++ .../com/cloud/network/NetworkServiceImpl.java | 20 +- .../element/CloudZonesNetworkElement.java | 4 +- .../network/element/VirtualRouterElement.java | 4 +- .../network/firewall/FirewallManagerImpl.java | 11 +- .../network/guru/ControlNetworkGuru.java | 4 +- .../cloud/network/guru/DirectNetworkGuru.java | 5 +- .../guru/DirectPodBasedNetworkGuru.java | 2 +- .../guru/ExternalGuestNetworkGuru.java | 14 +- .../cloud/network/guru/GuestNetworkGuru.java | 11 +- .../network/guru/PrivateNetworkGuru.java | 4 +- .../lb/LoadBalancingRulesManagerImpl.java | 19 +- .../VirtualNetworkApplianceManagerImpl.java | 87 +- ...VpcVirtualNetworkApplianceManagerImpl.java | 56 +- .../cloud/network/rules/RulesManagerImpl.java | 45 +- .../security/SecurityGroupManagerImpl.java | 9 +- .../network/vpc/NetworkACLManagerImpl.java | 4 +- .../com/cloud/network/vpc/VpcManagerImpl.java | 27 +- .../vpn/RemoteAccessVpnManagerImpl.java | 4 +- .../com/cloud/resource/DiscovererBase.java | 4 +- .../com/cloud/storage/StorageManagerImpl.java | 4 +- .../SecondaryStorageManagerImpl.java | 9 +- .../src/com/cloud/vm/UserVmManagerImpl.java | 50 +- .../cloud/vm/VirtualMachineManagerImpl.java | 15 +- .../network/MockFirewallManagerImpl.java | 183 ++ .../cloud/network/MockNetworkManagerImpl.java | 972 ++----- .../cloud/network/MockRulesManagerImpl.java | 295 ++ .../MockRemoteAccessVPNServiceProvider.java | 62 + .../network/vpn/RemoteAccessVpnTest.java | 91 + .../com/cloud/vpc/MockNetworkManagerImpl.java | 2396 ++++++++--------- 60 files changed, 4481 insertions(+), 4298 deletions(-) create mode 100644 server/src/com/cloud/network/NetworkModel.java create mode 100644 server/src/com/cloud/network/NetworkModelImpl.java create mode 100644 server/test/com/cloud/network/MockFirewallManagerImpl.java create mode 100644 server/test/com/cloud/network/MockRulesManagerImpl.java create mode 100644 server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java create mode 100644 server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java index 546df5f2389..ca03866d49e 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/guru/VMwareGuru.java @@ -48,7 +48,7 @@ import com.cloud.hypervisor.HypervisorGuruBase; import com.cloud.hypervisor.vmware.VmwareCleanupMaid; import com.cloud.hypervisor.vmware.manager.VmwareManager; import com.cloud.hypervisor.vmware.mo.VirtualEthernetCardType; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.NetworkDao; @@ -84,7 +84,7 @@ public class VMwareGuru extends HypervisorGuruBase implements HypervisorGuru { @Inject VmwareManager _vmwareMgr; @Inject SecondaryStorageVmManager _secStorageMgr; @Inject CheckPointManager _checkPointMgr; - @Inject NetworkManager _networkMgr; + @Inject NetworkModel _networkMgr; protected VMwareGuru() { super(); diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java index a75640bedfe..684df54ccd5 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/VmwareServerDiscoverer.java @@ -50,7 +50,7 @@ import com.cloud.hypervisor.vmware.mo.HostMO; import com.cloud.hypervisor.vmware.resource.VmwareContextFactory; import com.cloud.hypervisor.vmware.resource.VmwareResource; import com.cloud.hypervisor.vmware.util.VmwareContext; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.dao.CiscoNexusVSMDeviceDao; import com.cloud.resource.Discoverer; import com.cloud.resource.DiscovererBase; @@ -84,7 +84,7 @@ public class VmwareServerDiscoverer extends DiscovererBase implements Discoverer @Inject ResourceManager _resourceMgr; @Inject CiscoNexusVSMDeviceDao _nexusDao; @Inject - NetworkManager _netmgr; + NetworkModel _netmgr; @Override public Map> find(long dcId, Long podId, Long clusterId, URI url, diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java index 64ded51b453..c450312c1a7 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -73,7 +73,7 @@ import com.cloud.hypervisor.vmware.mo.VmwareHostType; import com.cloud.utils.ssh.SshHelper; import com.cloud.hypervisor.vmware.util.VmwareContext; import com.cloud.network.CiscoNexusVSMDeviceVO; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.dao.CiscoNexusVSMDeviceDao; import com.cloud.org.Cluster.ClusterType; import com.cloud.secstorage.CommandExecLogDao; @@ -113,7 +113,7 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis @Inject AgentManager _agentMgr; @Inject - protected NetworkManager _netMgr; + protected NetworkModel _netMgr; @Inject HostDao _hostDao; @Inject ClusterDao _clusterDao; @Inject ClusterDetailsDao _clusterDetailsDao; diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java index 34cbe086452..201b397c280 100644 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/element/ElasticLoadBalancerElement.java @@ -36,7 +36,7 @@ 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.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PublicIpAddress; @@ -57,7 +57,7 @@ import com.cloud.vm.VirtualMachineProfile; public class ElasticLoadBalancerElement extends AdapterBase implements LoadBalancingServiceProvider, IpDeployer { private static final Logger s_logger = Logger.getLogger(ElasticLoadBalancerElement.class); private static final Map> capabilities = setCapabilities(); - @Inject NetworkManager _networkManager; + @Inject NetworkModel _networkManager; @Inject ElasticLoadBalancerManager _lbMgr; @Inject ConfigurationDao _configDao; @Inject NetworkOfferingDao _networkOfferingDao; diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java index 366070af21f..3d3ba9c89a1 100644 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java @@ -79,6 +79,7 @@ import com.cloud.network.Network; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetworkServiceProvider; @@ -147,6 +148,8 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { @Inject AgentManager _agentMgr; @Inject + NetworkModel _networkModel; + @Inject NetworkManager _networkMgr; @Inject LoadBalancerDao _loadBalancerDao = null; @@ -291,7 +294,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { String protocol = rule.getProtocol(); String algorithm = rule.getAlgorithm(); - String elbIp = _networkMgr.getIp(rule.getSourceIpAddressId()).getAddress() + String elbIp = _networkModel.getIp(rule.getSourceIpAddressId()).getAddress() .addr(); int srcPort = rule.getSourcePortStart(); String uuid = rule.getUuid(); @@ -472,7 +475,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { try { - if (_networkMgr.isNetworkSystem(guestNetwork) || guestNetwork.getGuestType() == Network.GuestType.Shared) { + if (_networkModel.isNetworkSystem(guestNetwork) || guestNetwork.getGuestType() == Network.GuestType.Shared) { owner = _accountService.getSystemAccount(); } @@ -494,7 +497,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { s_logger.debug("Creating the ELB vm " + id); } - List offerings = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork); + List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork); NetworkOfferingVO controlOffering = offerings.get(0); NetworkVO controlConfig = _networkMgr.setupNetwork(_systemAcct, controlOffering, plan, null, null, false).get(0); @@ -507,7 +510,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { VMTemplateVO template = _templateDao.findSystemVMTemplate(dcId); String typeString = "ElasticLoadBalancerVm"; - Long physicalNetworkId = _networkMgr.getPhysicalNetworkId(guestNetwork); + Long physicalNetworkId = _networkModel.getPhysicalNetworkId(guestNetwork); PhysicalNetworkServiceProvider provider = _physicalProviderDao.findByServiceProvider(physicalNetworkId, typeString); if (provider == null) { throw new CloudRuntimeException("Cannot find service provider " + typeString + " in physical network " + physicalNetworkId); @@ -593,7 +596,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { @DB public PublicIp allocDirectIp(Account account, long guestNetworkId) throws InsufficientAddressCapacityException { - Network frontEndNetwork = _networkMgr.getNetwork(guestNetworkId); + Network frontEndNetwork = _networkModel.getNetwork(guestNetworkId); Transaction txn = Transaction.currentTxn(); txn.start(); @@ -620,7 +623,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { @DB public LoadBalancer handleCreateLoadBalancerRule(CreateLoadBalancerRuleCmd lb, Account account, long networkId) throws InsufficientAddressCapacityException, NetworkRuleConflictException { //this part of code is executed when the LB provider is Elastic Load Balancer vm - if (!_networkMgr.isProviderSupportServiceInNetwork(lb.getNetworkId(), Service.Lb, Provider.ElasticLoadBalancerVm)) { + if (!_networkModel.isProviderSupportServiceInNetwork(lb.getNetworkId(), Service.Lb, Provider.ElasticLoadBalancerVm)) { return null; } @@ -659,7 +662,7 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { throw new NetworkRuleConflictException("ELB: Found existing load balancers matching requested new LB"); } - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); IPAddressVO ipAddr = _ipAddressDao.findById(ipId); LoadBalancer result = null; diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index b5f6248770e..4c557cc5d46 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -61,7 +61,7 @@ import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkExternalLoadBalancerVO; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetworkServiceProvider; @@ -95,7 +95,7 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan private static final Logger s_logger = Logger.getLogger(F5ExternalLoadBalancerElement.class); @Inject - NetworkManager _networkManager; + NetworkModel _networkManager; @Inject ConfigurationManager _configMgr; @Inject diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 29daf3a76da..c6cac55a705 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -61,7 +61,7 @@ import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkExternalFirewallVO; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PhysicalNetworkVO; @@ -99,7 +99,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan private static final Map> capabilities = setCapabilities(); @Inject - NetworkManager _networkManager; + NetworkModel _networkManager; @Inject HostDao _hostDao; @Inject diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index a1528cea096..18bee328e0d 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -73,7 +73,7 @@ import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkExternalLoadBalancerVO; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetworkServiceProvider; @@ -117,7 +117,7 @@ StaticNatServiceProvider { public static final AutoScaleCounterType AutoScaleCounterNetscaler = new AutoScaleCounterType("netscaler"); @Inject - NetworkManager _networkManager; + NetworkModel _networkManager; @Inject ConfigurationManager _configMgr; @Inject @@ -125,7 +125,7 @@ StaticNatServiceProvider { @Inject AgentManager _agentMgr; @Inject - NetworkManager _networkMgr; + NetworkModel _networkMgr; @Inject HostDao _hostDao; @Inject diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java index 90866ed0fc2..de6a6293e60 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java @@ -75,6 +75,7 @@ import com.cloud.network.ExternalNetworkDeviceManager.NetworkDevice; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks; import com.cloud.network.Networks.BroadcastDomainType; @@ -159,6 +160,8 @@ public class NiciraNvpElement extends AdapterBase implements @Inject NetworkManager _networkManager; @Inject + NetworkModel _networkModel; + @Inject ConfigurationManager _configMgr; @Inject NetworkServiceMapDao _ntwkSrvcDao; @@ -182,7 +185,7 @@ public class NiciraNvpElement extends AdapterBase implements return false; } - if (!_networkManager.isProviderForNetwork(getProvider(), + if (!_networkModel.isProviderForNetwork(getProvider(), network.getId())) { s_logger.debug("NiciraNvpElement is not a provider for network " + network.getDisplayText()); @@ -246,58 +249,50 @@ public class NiciraNvpElement extends AdapterBase implements * Lock the network as we might need to do multiple operations that * should be done only once. */ - Network lock = _networkDao.acquireInLockTable(network.getId(), - _networkManager.getNetworkLockTimeout()); - if (lock == null) { - throw new ConcurrentOperationException("Unable to lock network " - + network.getId()); - } - try { - // Implement SourceNat immediately as we have al the info already - if (_networkManager.isProviderSupportServiceInNetwork( - network.getId(), Service.SourceNat, Provider.NiciraNvp)) { - s_logger.debug("Apparently we are supposed to provide SourceNat on this network"); +// Network lock = _networkDao.acquireInLockTable(network.getId(), +// _networkModel.getNetworkLockTimeout()); +// if (lock == null) { +// throw new ConcurrentOperationException("Unable to lock network " +// + network.getId()); +// } - PublicIp sourceNatIp = _networkManager - .assignSourceNatIpAddressToGuestNetwork(owner, network); - String publicCidr = sourceNatIp.getAddress().addr() + "/" - + NetUtils.getCidrSize(sourceNatIp.getVlanNetmask()); - String internalCidr = network.getGateway() + "/" - + network.getCidr().split("/")[1]; - long vlanid = (Vlan.UNTAGGED.equals(sourceNatIp.getVlanTag())) ? 0 - : Long.parseLong(sourceNatIp.getVlanTag()); + // Implement SourceNat immediately as we have al the info already + if (_networkModel.isProviderSupportServiceInNetwork( + network.getId(), Service.SourceNat, Provider.NiciraNvp)) { + s_logger.debug("Apparently we are supposed to provide SourceNat on this network"); - CreateLogicalRouterCommand cmd = new CreateLogicalRouterCommand( - niciraNvpHost.getDetail("l3gatewayserviceuuid"), vlanid, - network.getBroadcastUri().getSchemeSpecificPart(), - "router-" + network.getDisplayText(), publicCidr, - sourceNatIp.getGateway(), internalCidr, context - .getDomain().getName() - + "-" - + context.getAccount().getAccountName()); - CreateLogicalRouterAnswer answer = (CreateLogicalRouterAnswer) _agentMgr - .easySend(niciraNvpHost.getId(), cmd); - if (answer.getResult() == false) { - s_logger.error("Failed to create Logical Router for network " - + network.getDisplayText()); - return false; - } - - // Store the uuid so we can easily find it during cleanup - NiciraNvpRouterMappingVO routermapping = - new NiciraNvpRouterMappingVO(answer.getLogicalRouterUuid(), network.getId()); - _niciraNvpRouterMappingDao.persist(routermapping); - } - } finally { - if (lock != null) { - _networkDao.releaseFromLockTable(lock.getId()); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Lock is released for network id " - + lock.getId() + " as a part of router startup in " - + dest); - } - } + PublicIp sourceNatIp = _networkManager + .assignSourceNatIpAddressToGuestNetwork(owner, network); + String publicCidr = sourceNatIp.getAddress().addr() + "/" + + NetUtils.getCidrSize(sourceNatIp.getVlanNetmask()); + String internalCidr = network.getGateway() + "/" + + network.getCidr().split("/")[1]; + long vlanid = (Vlan.UNTAGGED.equals(sourceNatIp.getVlanTag())) ? 0 + : Long.parseLong(sourceNatIp.getVlanTag()); + + CreateLogicalRouterCommand cmd = new CreateLogicalRouterCommand( + niciraNvpHost.getDetail("l3gatewayserviceuuid"), vlanid, + network.getBroadcastUri().getSchemeSpecificPart(), + "router-" + network.getDisplayText(), publicCidr, + sourceNatIp.getGateway(), internalCidr, context + .getDomain().getName() + + "-" + + context.getAccount().getAccountName()); + CreateLogicalRouterAnswer answer = (CreateLogicalRouterAnswer) _agentMgr + .easySend(niciraNvpHost.getId(), cmd); + if (answer.getResult() == false) { + s_logger.error("Failed to create Logical Router for network " + + network.getDisplayText()); + return false; + } + + // Store the uuid so we can easily find it during cleanup + NiciraNvpRouterMappingVO routermapping = + new NiciraNvpRouterMappingVO(answer.getLogicalRouterUuid(), network.getId()); + _niciraNvpRouterMappingDao.persist(routermapping); } + + return true; } @@ -446,7 +441,7 @@ public class NiciraNvpElement extends AdapterBase implements NiciraNvpDeviceVO niciraNvpDevice = devices.get(0); HostVO niciraNvpHost = _hostDao.findById(niciraNvpDevice.getHostId()); - if (_networkManager.isProviderSupportServiceInNetwork(network.getId(), + if (_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.SourceNat, Provider.NiciraNvp)) { s_logger.debug("Apparently we were providing SourceNat on this network"); @@ -888,7 +883,7 @@ public class NiciraNvpElement extends AdapterBase implements List staticNatRules = new ArrayList(); for (StaticNat rule : rules) { - IpAddress sourceIp = _networkManager.getIp(rule.getSourceIpAddressId()); + IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId()); // Force the nat rule into the StaticNatRuleTO, no use making a new TO object // we only need the source and destination ip. Unfortunately no mention if a rule // is new. @@ -936,7 +931,7 @@ public class NiciraNvpElement extends AdapterBase implements List portForwardingRules = new ArrayList(); for (PortForwardingRule rule : rules) { - IpAddress sourceIp = _networkManager.getIp(rule.getSourceIpAddressId()); + IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId()); Vlan vlan = _vlanDao.findById(sourceIp.getVlanId()); PortForwardingRuleTO ruleTO = new PortForwardingRuleTO((PortForwardingRule) rule, vlan.getVlanTag(), sourceIp.getAddress().addr()); portForwardingRules.add(ruleTO); diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java index 99be680a5c6..02916f919a9 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java @@ -41,7 +41,7 @@ import com.cloud.host.dao.HostDao; import com.cloud.host.dao.HostDetailsDao; import com.cloud.network.Network; import com.cloud.network.Network.Service; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkVO; import com.cloud.network.Network.GuestType; @@ -71,9 +71,9 @@ public class NiciraNvpGuestNetworkGuru extends GuestNetworkGuru { private static final Logger s_logger = Logger.getLogger(NiciraNvpGuestNetworkGuru.class); @Inject - NetworkManager _externalNetworkManager; + NetworkModel _externalNetworkManager; @Inject - NetworkManager _networkMgr; + NetworkModel _networkModel; @Inject NetworkDao _networkDao; @Inject @@ -153,7 +153,7 @@ public class NiciraNvpGuestNetworkGuru extends GuestNetworkGuru { long dcId = dest.getDataCenter().getId(); //get physical network id - long physicalNetworkId = _networkMgr.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); + long physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); NetworkVO implemented = new NetworkVO(network.getTrafficType(), network.getMode(), network.getBroadcastDomainType(), network.getNetworkOfferingId(), State.Allocated, network.getDataCenterId(), physicalNetworkId); diff --git a/plugins/network-elements/nicira-nvp/test/com/cloud/network/element/NiciraNvpElementTest.java b/plugins/network-elements/nicira-nvp/test/com/cloud/network/element/NiciraNvpElementTest.java index acfd3bcdb9e..09d50a33a64 100644 --- a/plugins/network-elements/nicira-nvp/test/com/cloud/network/element/NiciraNvpElementTest.java +++ b/plugins/network-elements/nicira-nvp/test/com/cloud/network/element/NiciraNvpElementTest.java @@ -33,6 +33,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.NetworkServiceMapDao; @@ -48,6 +49,7 @@ public class NiciraNvpElementTest { NiciraNvpElement _element = new NiciraNvpElement(); NetworkManager _networkManager = mock(NetworkManager.class); + NetworkModel _networkModel = mock(NetworkModel.class); NetworkServiceMapDao _ntwkSrvcDao = mock (NetworkServiceMapDao.class); @Before @@ -55,9 +57,10 @@ public class NiciraNvpElementTest { _element._resourceMgr = mock(ResourceManager.class); _element._networkManager = _networkManager; _element._ntwkSrvcDao = _ntwkSrvcDao; + _element._networkModel = _networkModel; // Standard responses - when(_networkManager.isProviderForNetwork(Provider.NiciraNvp, 42L)).thenReturn(true); + when(_networkModel.isProviderForNetwork(Provider.NiciraNvp, 42L)).thenReturn(true); _element.configure("NiciraNvpTestElement", Collections. emptyMap()); } @@ -81,12 +84,12 @@ public class NiciraNvpElementTest { // No nvp provider in the network assertFalse(_element.canHandle(net, Service.Connectivity)); - when(_networkManager.isProviderForNetwork(Provider.NiciraNvp, 42L)).thenReturn(false); + when(_networkModel.isProviderForNetwork(Provider.NiciraNvp, 42L)).thenReturn(false); when(_ntwkSrvcDao.canProviderSupportServiceInNetwork(42L, Service.Connectivity, Provider.NiciraNvp)).thenReturn(true); // NVP provider does not provide Connectivity for this network assertFalse(_element.canHandle(net, Service.Connectivity)); - when(_networkManager.isProviderForNetwork(Provider.NiciraNvp, 42L)).thenReturn(true); + when(_networkModel.isProviderForNetwork(Provider.NiciraNvp, 42L)).thenReturn(true); // Only service Connectivity is supported assertFalse(_element.canHandle(net, Service.Dhcp)); diff --git a/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java b/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java index e37b2f42105..124e28f496a 100644 --- a/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java +++ b/plugins/network-elements/nicira-nvp/test/com/cloud/network/guru/NiciraNvpGuestNetworkGuruTest.java @@ -44,6 +44,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Service; import com.cloud.network.Network.State; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.BroadcastDomainType; @@ -67,6 +68,8 @@ public class NiciraNvpGuestNetworkGuruTest { NetworkOfferingServiceMapDao nosd = mock(NetworkOfferingServiceMapDao.class); AgentManager agentmgr = mock (AgentManager.class); NetworkManager netmgr = mock (NetworkManager.class); + NetworkModel netmodel = mock (NetworkModel.class); + HostDao hostdao = mock (HostDao.class); NetworkDao netdao = mock(NetworkDao.class); NiciraNvpGuestNetworkGuru guru; @@ -80,7 +83,7 @@ public class NiciraNvpGuestNetworkGuruTest { guru._niciraNvpDao = nvpdao; guru._dcDao = dcdao; guru._ntwkOfferingSrvcDao = nosd; - guru._networkMgr = netmgr; + guru._networkModel = netmodel; guru._hostDao = hostdao; guru._agentMgr = agentmgr; guru._networkDao = netdao; @@ -261,7 +264,7 @@ public class NiciraNvpGuestNetworkGuruTest { when(niciraHost.getDetail("transportzoneisotype")).thenReturn("stt"); when(niciraHost.getId()).thenReturn(42L); - when(netmgr.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); + when(netmodel.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); Domain dom = mock(Domain.class); when(dom.getName()).thenReturn("domain"); Account acc = mock(Account.class); @@ -318,7 +321,7 @@ public class NiciraNvpGuestNetworkGuruTest { when(niciraHost.getDetail("transportzoneisotype")).thenReturn("stt"); when(niciraHost.getId()).thenReturn(42L); - when(netmgr.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); + when(netmodel.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); Domain dom = mock(Domain.class); when(dom.getName()).thenReturn("domain"); Account acc = mock(Account.class); @@ -374,7 +377,7 @@ public class NiciraNvpGuestNetworkGuruTest { when(niciraHost.getDetail("transportzoneisotype")).thenReturn("stt"); when(niciraHost.getId()).thenReturn(42L); - when(netmgr.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); + when(netmodel.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); Domain dom = mock(Domain.class); when(dom.getName()).thenReturn("domain"); Account acc = mock(Account.class); @@ -432,7 +435,7 @@ public class NiciraNvpGuestNetworkGuruTest { when(niciraHost.getDetail("transportzoneisotype")).thenReturn("stt"); when(niciraHost.getId()).thenReturn(42L); - when(netmgr.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); + when(netmodel.findPhysicalNetworkId(anyLong(), (String) any(), (TrafficType) any())).thenReturn(42L); Domain dom = mock(Domain.class); when(dom.getName()).thenReturn("domain"); Account acc = mock(Account.class); diff --git a/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java b/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java index 16e1ecc1cec..30a11294051 100644 --- a/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java +++ b/plugins/network-elements/ovs/src/com/cloud/network/guru/OvsGuestNetworkGuru.java @@ -16,8 +16,6 @@ // under the License. package com.cloud.network.guru; -import java.util.List; - import javax.ejb.Local; import org.apache.log4j.Logger; @@ -29,32 +27,25 @@ import com.cloud.deploy.DeploymentPlan; import com.cloud.event.EventTypes; import com.cloud.event.EventUtils; import com.cloud.event.EventVO; -import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientVirtualNetworkCapcityException; import com.cloud.network.Network; -import com.cloud.network.NetworkManager; +import com.cloud.network.Network.GuestType; +import com.cloud.network.Network.State; import com.cloud.network.NetworkVO; +import com.cloud.network.Networks.BroadcastDomainType; +import com.cloud.network.PhysicalNetwork; +import com.cloud.network.PhysicalNetwork.IsolationMethod; import com.cloud.network.ovs.OvsTunnelManager; import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; import com.cloud.user.UserContext; import com.cloud.utils.component.Inject; -import com.cloud.vm.Nic.ReservationStrategy; -import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; -import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachineProfile; -import com.cloud.network.Networks.BroadcastDomainType; -import com.cloud.network.Network.GuestType; -import com.cloud.network.Network.State; -import com.cloud.network.PhysicalNetwork; -import com.cloud.network.PhysicalNetwork.IsolationMethod; @Local(value=NetworkGuru.class) public class OvsGuestNetworkGuru extends GuestNetworkGuru { private static final Logger s_logger = Logger.getLogger(OvsGuestNetworkGuru.class); - @Inject NetworkManager _externalNetworkManager; @Inject OvsTunnelManager _ovsTunnelMgr; OvsGuestNetworkGuru() { diff --git a/server/src/com/cloud/acl/DomainChecker.java b/server/src/com/cloud/acl/DomainChecker.java index 6bc2cd39814..ca7be9293b7 100755 --- a/server/src/com/cloud/acl/DomainChecker.java +++ b/server/src/com/cloud/acl/DomainChecker.java @@ -25,7 +25,7 @@ import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; import com.cloud.exception.PermissionDeniedException; import com.cloud.network.Network; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.offering.DiskOffering; import com.cloud.offering.ServiceOffering; import com.cloud.projects.ProjectManager; @@ -47,7 +47,7 @@ public class DomainChecker extends AdapterBase implements SecurityChecker { @Inject LaunchPermissionDao _launchPermissionDao; @Inject ProjectManager _projectMgr; @Inject ProjectAccountDao _projecAccountDao; - @Inject NetworkManager _networkMgr; + @Inject NetworkModel _networkMgr; protected DomainChecker() { super(); diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java index 012075c2e49..d2abc29a888 100755 --- a/server/src/com/cloud/api/ApiDBUtils.java +++ b/server/src/com/cloud/api/ApiDBUtils.java @@ -60,6 +60,7 @@ import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkDomainVO; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkRuleConfigVO; import com.cloud.network.NetworkVO; @@ -174,6 +175,7 @@ public class ApiDBUtils { private static StorageManager _storageMgr; private static UserVmManager _userVmMgr; private static NetworkManager _networkMgr; + private static NetworkModel _networkModel; private static StatsCollector _statsCollector; private static AccountDao _accountDao; @@ -240,6 +242,7 @@ public class ApiDBUtils { _storageMgr = locator.getManager(StorageManager.class); _userVmMgr = locator.getManager(UserVmManager.class); _networkMgr = locator.getManager(NetworkManager.class); + _networkModel = locator.getManager(NetworkModel.class); _configMgr = locator.getManager(ConfigurationService.class); _accountDao = locator.getDao(AccountDao.class); @@ -341,7 +344,7 @@ public class ApiDBUtils { } public static Long getPodIdForVlan(long vlanDbId) { - return _networkMgr.getPodIdForVlan(vlanDbId); + return _networkModel.getPodIdForVlan(vlanDbId); } public static String getVersion() { @@ -696,11 +699,11 @@ public class ApiDBUtils { } public static Map> getNetworkCapabilities(long networkId, long zoneId) { - return _networkMgr.getNetworkCapabilities(networkId); + return _networkModel.getNetworkCapabilities(networkId); } public static long getPublicNetworkIdByZone(long zoneId) { - return _networkMgr.getSystemNetworkByZoneAndTrafficType(zoneId, TrafficType.Public).getId(); + return _networkModel.getSystemNetworkByZoneAndTrafficType(zoneId, TrafficType.Public).getId(); } public static Long getVlanNetworkId(long vlanId) { @@ -730,7 +733,7 @@ public class ApiDBUtils { } public static Long getDedicatedNetworkDomain(long networkId) { - return _networkMgr.getDedicatedNetworkDomain(networkId); + return _networkModel.getDedicatedNetworkDomain(networkId); } public static float getCpuOverprovisioningFactor() { @@ -787,25 +790,25 @@ public class ApiDBUtils { } public static Map> listNetworkOfferingServices(long networkOfferingId) { - return _networkMgr.getNetworkOfferingServiceProvidersMap(networkOfferingId); + return _networkModel.getNetworkOfferingServiceProvidersMap(networkOfferingId); } public static List getElementServices(Provider provider) { - return _networkMgr.getElementServices(provider); + return _networkModel.getElementServices(provider); } public static List getProvidersForService(Service service) { - return _networkMgr.listSupportedNetworkServiceProviders(service.getName()); + return _networkModel.listSupportedNetworkServiceProviders(service.getName()); } public static boolean canElementEnableIndividualServices(Provider serviceProvider) { - return _networkMgr.canElementEnableIndividualServices(serviceProvider); + return _networkModel.canElementEnableIndividualServices(serviceProvider); } public static Pair getDomainNetworkDetails(long networkId) { NetworkDomainVO map = _networkDomainDao.getDomainNetworkMapByNetworkId(networkId); - boolean subdomainAccess = (map.isSubdomainAccess() != null) ? map.isSubdomainAccess() : _networkMgr.getAllowSubdomainAccessGlobal(); + boolean subdomainAccess = (map.isSubdomainAccess() != null) ? map.isSubdomainAccess() : _networkModel.getAllowSubdomainAccessGlobal(); return new Pair(map.getDomainId(), subdomainAccess); } @@ -832,11 +835,11 @@ public class ApiDBUtils { } public static List listVpcNetworks(long vpcId) { - return _networkMgr.listNetworksByVpc(vpcId); + return _networkModel.listNetworksByVpc(vpcId); } public static boolean canUseForDeploy(Network network) { - return _networkMgr.canUseForDeploy(network); + return _networkModel.canUseForDeploy(network); } public static String getUuid(String resourceId, TaggedResourceType resourceType) { diff --git a/server/src/com/cloud/async/AsyncJobExecutorContext.java b/server/src/com/cloud/async/AsyncJobExecutorContext.java index 109fb5383f0..390a4103351 100644 --- a/server/src/com/cloud/async/AsyncJobExecutorContext.java +++ b/server/src/com/cloud/async/AsyncJobExecutorContext.java @@ -19,7 +19,7 @@ package com.cloud.async; import com.cloud.agent.AgentManager; import com.cloud.async.dao.AsyncJobDao; import com.cloud.event.dao.EventDao; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.dao.IPAddressDao; import com.cloud.server.ManagementServer; import com.cloud.storage.StorageManager; @@ -37,7 +37,7 @@ import com.cloud.vm.dao.UserVmDao; public interface AsyncJobExecutorContext extends Manager { public ManagementServer getManagementServer(); public AgentManager getAgentMgr(); - public NetworkManager getNetworkMgr(); + public NetworkModel getNetworkMgr(); public UserVmManager getVmMgr(); public SnapshotManager getSnapshotMgr(); public AccountManager getAccountMgr(); diff --git a/server/src/com/cloud/async/AsyncJobExecutorContextImpl.java b/server/src/com/cloud/async/AsyncJobExecutorContextImpl.java index 5676b7c8aa2..dee1f58bd8c 100644 --- a/server/src/com/cloud/async/AsyncJobExecutorContextImpl.java +++ b/server/src/com/cloud/async/AsyncJobExecutorContextImpl.java @@ -25,6 +25,7 @@ import com.cloud.agent.AgentManager; import com.cloud.async.dao.AsyncJobDao; import com.cloud.event.dao.EventDao; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.dao.IPAddressDao; import com.cloud.server.ManagementServer; import com.cloud.storage.StorageManager; @@ -44,7 +45,7 @@ public class AsyncJobExecutorContextImpl implements AsyncJobExecutorContext { private String _name; private AgentManager _agentMgr; - private NetworkManager _networkMgr; + private NetworkModel _networkMgr; private UserVmManager _vmMgr; private SnapshotManager _snapMgr; private AccountManager _accountMgr; @@ -72,7 +73,7 @@ public class AsyncJobExecutorContextImpl implements AsyncJobExecutorContext { } @Override - public NetworkManager getNetworkMgr() { + public NetworkModel getNetworkMgr() { return _networkMgr; } @@ -159,9 +160,9 @@ public class AsyncJobExecutorContextImpl implements AsyncJobExecutorContext { throw new ConfigurationException("unable to get " + AgentManager.class.getName()); } - _networkMgr = locator.getManager(NetworkManager.class); + _networkMgr = locator.getManager(NetworkModel.class); if (_networkMgr == null) { - throw new ConfigurationException("unable to get " + NetworkManager.class.getName()); + throw new ConfigurationException("unable to get " + NetworkModel.class.getName()); } _vmMgr = locator.getManager(UserVmManager.class); diff --git a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java index 3972728d5db..31639a6a14c 100755 --- a/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java +++ b/server/src/com/cloud/baremetal/BareMetalVmManagerImpl.java @@ -307,7 +307,7 @@ public class BareMetalVmManagerImpl extends UserVmManagerImpl implements BareMet s_logger.warn("Bare Metal only supports basical network mode now, switch to baisc network automatically"); } - Network defaultNetwork = _networkMgr.getExclusiveGuestNetwork(dc.getId()); + Network defaultNetwork = _networkModel.getExclusiveGuestNetwork(dc.getId()); if (defaultNetwork == null) { throw new InvalidParameterValueException("Unable to find a default network to start a vm"); } diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index 3bce619069e..e851525773c 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -109,6 +109,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkService; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.BroadcastDomainType; @@ -213,6 +214,8 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura @Inject NetworkService _networkSvc; @Inject + NetworkModel _networkModel; + @Inject ClusterDao _clusterDao; @Inject AlertManager _alertMgr; @@ -758,7 +761,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura } // Delete vlans associated with the pod - List vlans = _networkMgr.listPodVlans(podId); + List vlans = _networkModel.listPodVlans(podId); if (vlans != null && !vlans.isEmpty()) { for (Vlan vlan : vlans) { _vlanDao.remove(vlan.getId()); @@ -1527,15 +1530,15 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura PhysicalNetwork mgmtPhyNetwork; if (NetworkType.Advanced == zone.getNetworkType()) { // zone should have a physical network with public and management traffiType - _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Public); - mgmtPhyNetwork = _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); + _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Public); + mgmtPhyNetwork = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); } else { // zone should have a physical network with management traffiType - mgmtPhyNetwork = _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); + mgmtPhyNetwork = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); } try { - _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Storage); + _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Storage); } catch (InvalidParameterValueException noStorage) { PhysicalNetworkTrafficTypeVO mgmtTraffic = _trafficTypeDao.findBy(mgmtPhyNetwork.getId(), TrafficType.Management); _networkSvc.addTrafficTypeToPhysicalNetwork(mgmtPhyNetwork.getId(), TrafficType.Storage.toString(), mgmtTraffic.getXenNetworkLabel(), mgmtTraffic.getKvmNetworkLabel(), @@ -2134,14 +2137,14 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura } else { if (forVirtualNetwork) { // default physical network with public traffic in the zone - physicalNetworkId = _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Public).getId(); + physicalNetworkId = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Public).getId(); } else { if (zone.getNetworkType() == DataCenter.NetworkType.Basic) { // default physical network with guest traffic in the zone - physicalNetworkId = _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Guest).getId(); + physicalNetworkId = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Guest).getId(); } else if (zone.getNetworkType() == DataCenter.NetworkType.Advanced) { if (zone.isSecurityGroupEnabled()) { - physicalNetworkId = _networkMgr.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Guest).getId(); + physicalNetworkId = _networkModel.getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Guest).getId(); } else { throw new InvalidParameterValueException("Physical Network Id is null, please provide the Network id for Direct vlan creation "); } @@ -2165,18 +2168,18 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura if (forVirtualNetwork) { if (network == null) { // find default public network in the zone - networkId = _networkMgr.getSystemNetworkByZoneAndTrafficType(zoneId, TrafficType.Public).getId(); - network = _networkMgr.getNetwork(networkId); + networkId = _networkModel.getSystemNetworkByZoneAndTrafficType(zoneId, TrafficType.Public).getId(); + network = _networkModel.getNetwork(networkId); } else if (network.getGuestType() != null || network.getTrafficType() != TrafficType.Public) { throw new InvalidParameterValueException("Can't find Public network by id=" + networkId); } } else { if (network == null) { if (zone.getNetworkType() == DataCenter.NetworkType.Basic) { - networkId = _networkMgr.getExclusiveGuestNetwork(zoneId).getId(); - network = _networkMgr.getNetwork(networkId); + networkId = _networkModel.getExclusiveGuestNetwork(zoneId).getId(); + network = _networkModel.getNetwork(networkId); } else { - network = _networkMgr.getNetworkWithSecurityGroupEnabled(zoneId); + network = _networkModel.getNetworkWithSecurityGroupEnabled(zoneId); if (network == null) { throw new InvalidParameterValueException("Nework id is required for Direct vlan creation "); } @@ -2275,7 +2278,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura String vlanId, Account vlanOwner) { - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); //Validate the zone DataCenterVO zone = _zoneDao.findById(zoneId); @@ -2516,7 +2519,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura " as ip " + ip + " belonging to the range is used for static nat purposes. Cleanup the rules first"); } - if (ip.isSourceNat() && _networkMgr.getNetwork(ip.getAssociatedWithNetworkId()) != null) { + if (ip.isSourceNat() && _networkModel.getNetwork(ip.getAssociatedWithNetworkId()) != null) { throw new InvalidParameterValueException("Can't delete account specific vlan " + vlanDbId + " as ip " + ip + " belonging to the range is a source nat ip for the network id=" + ip.getSourceNetworkId() + ". IP range with the source nat ip address can be removed either as a part of Network, or account removal"); @@ -3060,7 +3063,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura } // validate providers combination here - _networkMgr.canProviderSupportServices(providerCombinationToVerify); + _networkModel.canProviderSupportServices(providerCombinationToVerify); // validate the LB service capabilities specified in the network offering Map lbServiceCapabilityMap = cmd.getServiceCapabilities(Service.Lb); @@ -3243,7 +3246,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura if ((lbServiceCapabilityMap != null) && (!lbServiceCapabilityMap.isEmpty())) { String isolationCapability = lbServiceCapabilityMap.get(Capability.SupportedLBIsolation); if (isolationCapability != null) { - _networkMgr.checkCapabilityForProvider(serviceProviderMap.get(Service.Lb), Service.Lb, Capability.SupportedLBIsolation, isolationCapability); + _networkModel.checkCapabilityForProvider(serviceProviderMap.get(Service.Lb), Service.Lb, Capability.SupportedLBIsolation, isolationCapability); dedicatedLb = isolationCapability.contains("dedicated"); } else { dedicatedLb = true; @@ -3259,14 +3262,14 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura if ((sourceNatServiceCapabilityMap != null) && (!sourceNatServiceCapabilityMap.isEmpty())) { String sourceNatType = sourceNatServiceCapabilityMap.get(Capability.SupportedSourceNatTypes); if (sourceNatType != null) { - _networkMgr.checkCapabilityForProvider(serviceProviderMap.get(Service.SourceNat), Service.SourceNat, + _networkModel.checkCapabilityForProvider(serviceProviderMap.get(Service.SourceNat), Service.SourceNat, Capability.SupportedSourceNatTypes, sourceNatType); sharedSourceNat = sourceNatType.contains("perzone"); } String param = sourceNatServiceCapabilityMap.get(Capability.RedundantRouter); if (param != null) { - _networkMgr.checkCapabilityForProvider(serviceProviderMap.get(Service.SourceNat), Service.SourceNat, + _networkModel.checkCapabilityForProvider(serviceProviderMap.get(Service.SourceNat), Service.SourceNat, Capability.RedundantRouter, param); redundantRouter = param.contains("true"); } @@ -3426,7 +3429,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura Network network = null; if (networkId != null) { // check if network exists and the caller can operate with it - network = _networkMgr.getNetwork(networkId); + network = _networkModel.getNetwork(networkId); if (network == null) { throw new InvalidParameterValueException("Unable to find the network by id=" + networkId); } @@ -3438,7 +3441,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura _accountMgr.checkAccess(caller, null, true, network); - List offeringIds = _networkMgr.listNetworkOfferingsForUpgrade(networkId); + List offeringIds = _networkModel.listNetworkOfferingsForUpgrade(networkId); if (!offeringIds.isEmpty()) { sc.addAnd("id", SearchCriteria.Op.IN, offeringIds.toArray()); @@ -3517,21 +3520,21 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura } if (listBySupportedServices) { - addOffering = addOffering && _networkMgr.areServicesSupportedByNetworkOffering(offering.getId(), supportedServices); + addOffering = addOffering && _networkModel.areServicesSupportedByNetworkOffering(offering.getId(), supportedServices); } if (checkIfProvidersAreEnabled) { if (supportedServices != null && supportedServices.length > 0) { checkForProviders = Arrays.asList(supportedServices); } else { - checkForProviders = _networkMgr.listNetworkOfferingServices(offering.getId()); + checkForProviders = _networkModel.listNetworkOfferingServices(offering.getId()); } - addOffering = addOffering && _networkMgr.areServicesEnabledInZone(zoneId, offering, checkForProviders); + addOffering = addOffering && _networkModel.areServicesEnabledInZone(zoneId, offering, checkForProviders); } if (sourceNatSupported != null) { - addOffering = addOffering && (_networkMgr.areServicesSupportedByNetworkOffering(offering.getId(), Network.Service.SourceNat) == sourceNatSupported); + addOffering = addOffering && (_networkModel.areServicesSupportedByNetworkOffering(offering.getId(), Network.Service.SourceNat) == sourceNatSupported); } if (forVpc != null) { @@ -3656,7 +3659,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura } else { if (availability == NetworkOffering.Availability.Required) { boolean canOffBeRequired = (offeringToUpdate.getGuestType() == GuestType.Isolated - && _networkMgr.areServicesSupportedByNetworkOffering(offeringToUpdate.getId(), Service.SourceNat)); + && _networkModel.areServicesSupportedByNetworkOffering(offeringToUpdate.getId(), Service.SourceNat)); if (!canOffBeRequired) { throw new InvalidParameterValueException("Availability can be " + NetworkOffering.Availability.Required + " only for networkOfferings of type " + GuestType.Isolated + " and with " @@ -3782,7 +3785,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura Long networkId = vlan.getNetworkId(); if (networkId != null) { - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); if (network != null) { accountId = network.getAccountId(); } diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index d7875f72ee5..9161e605abf 100755 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -92,6 +92,7 @@ import com.cloud.keystore.KeystoreVO; import com.cloud.network.IPAddressVO; import com.cloud.network.Network; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.IPAddressDao; @@ -212,6 +213,8 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx @Inject NetworkManager _networkMgr; @Inject + NetworkModel _networkModel; + @Inject AccountManager _accountMgr; @Inject ServiceOfferingDao _offeringDao; @@ -766,7 +769,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx NetworkVO defaultNetwork = defaultNetworks.get(0); - List offerings = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork, NetworkOfferingVO.SystemManagementNetwork); + List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork, NetworkOfferingVO.SystemManagementNetwork); List> networks = new ArrayList>(offerings.size() + 1); NicProfile defaultNic = new NicProfile(); defaultNic.setDefaultNic(true); diff --git a/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java b/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java index 8a5b02af282..ea9620204cd 100644 --- a/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java +++ b/server/src/com/cloud/ha/ManagementIPSystemVMInvestigator.java @@ -27,7 +27,7 @@ import org.apache.log4j.Logger; import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.host.dao.HostDao; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks.TrafficType; import com.cloud.utils.component.Inject; import com.cloud.vm.Nic; @@ -40,7 +40,7 @@ public class ManagementIPSystemVMInvestigator extends AbstractInvestigatorImpl { private String _name = null; @Inject private HostDao _hostDao = null; - @Inject private NetworkManager _networkMgr = null; + @Inject private NetworkModel _networkMgr = null; @Override diff --git a/server/src/com/cloud/ha/UserVmDomRInvestigator.java b/server/src/com/cloud/ha/UserVmDomRInvestigator.java index 5a3e55025e7..e058a6f4f47 100644 --- a/server/src/com/cloud/ha/UserVmDomRInvestigator.java +++ b/server/src/com/cloud/ha/UserVmDomRInvestigator.java @@ -31,7 +31,7 @@ import com.cloud.agent.api.PingTestCommand; import com.cloud.host.HostVO; import com.cloud.host.Status; import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks.TrafficType; import com.cloud.network.router.VirtualRouter; import com.cloud.network.router.VpcVirtualNetworkApplianceManager; @@ -49,7 +49,7 @@ public class UserVmDomRInvestigator extends AbstractInvestigatorImpl { private String _name = null; @Inject private final UserVmDao _userVmDao = null; @Inject private final AgentManager _agentMgr = null; - @Inject private final NetworkManager _networkMgr = null; + @Inject private final NetworkModel _networkMgr = null; @Inject private final VpcVirtualNetworkApplianceManager _vnaMgr = null; @Override diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java index 8ce6b8ad8ee..60b6e7f5601 100644 --- a/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java +++ b/server/src/com/cloud/hypervisor/kvm/discoverer/KvmServerDiscoverer.java @@ -52,7 +52,7 @@ import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.kvm.discoverer.KvmDummyResourceBase; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.PhysicalNetworkSetupInfo; import com.cloud.resource.Discoverer; import com.cloud.resource.DiscovererBase; @@ -79,7 +79,7 @@ public class KvmServerDiscoverer extends DiscovererBase implements Discoverer, @Inject ClusterDao _clusterDao; @Inject ResourceManager _resourceMgr; @Inject AgentManager _agentMgr; - @Inject NetworkManager _networkMgr; + @Inject NetworkModel _networkMgr; @Override public boolean processAnswers(long agentId, long seq, Answer[] answers) { diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java index 1629dd5e5f3..8431e03da52 100644 --- a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java @@ -111,7 +111,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl @Inject HostDao _hostDao; @Inject NetworkServiceMapDao _ntwkSrvcProviderDao; @Inject DataCenterDao _dcDao; - @Inject NetworkManager _networkMgr; + @Inject NetworkModel _networkMgr; @Inject InlineLoadBalancerNicMapDao _inlineLoadBalancerNicMapDao; @Inject NicDao _nicDao; @Inject AgentManager _agentMgr; diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java index 8c69bf6d852..97c63064c32 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java @@ -127,6 +127,8 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase @Inject DataCenterDao _dcDao; @Inject + NetworkModel _networkModel; + @Inject NetworkManager _networkMgr; @Inject InlineLoadBalancerNicMapDao _inlineLoadBalancerNicMapDao; @@ -801,7 +803,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase String protocol = rule.getProtocol(); String algorithm = rule.getAlgorithm(); String uuid = rule.getUuid(); - String srcIp = _networkMgr.getIp(rule.getSourceIpAddressId()).getAddress().addr(); + String srcIp = _networkModel.getIp(rule.getSourceIpAddressId()).getAddress().addr(); int srcPort = rule.getSourcePortStart(); List destinations = rule.getDestinations(); List sourceCidrs = rule.getSourceCidrList(); @@ -930,7 +932,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase long guestVlanTag = Long.parseLong(guestConfig.getBroadcastUri().getHost()); String selfIp = null; String guestVlanNetmask = NetUtils.cidr2Netmask(guestConfig.getCidr()); - Integer networkRate = _networkMgr.getNetworkRate(guestConfig.getId(), null); + Integer networkRate = _networkModel.getNetworkRate(guestConfig.getId(), null); if (add) { // Acquire a self-ip address from the guest network IP address range diff --git a/server/src/com/cloud/network/ExternalLoadBalancerUsageManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerUsageManagerImpl.java index 67494965505..5a15a9be7db 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerUsageManagerImpl.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerUsageManagerImpl.java @@ -88,7 +88,7 @@ public class ExternalLoadBalancerUsageManagerImpl implements ExternalLoadBalance @Inject DataCenterDao _dcDao; @Inject - NetworkManager _networkMgr; + NetworkModel _networkMgr; @Inject InlineLoadBalancerNicMapDao _inlineLoadBalancerNicMapDao; @Inject diff --git a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java index dfe720e08a2..aae77368d6c 100755 --- a/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalNetworkDeviceManagerImpl.java @@ -80,7 +80,7 @@ public class ExternalNetworkDeviceManagerImpl implements ExternalNetworkDeviceMa @Inject ExternalDhcpManager _dhcpMgr; @Inject PxeServerManager _pxeMgr; @Inject AgentManager _agentMgr; - @Inject NetworkManager _networkMgr; + @Inject NetworkModel _networkMgr; @Inject HostDao _hostDao; @Inject DataCenterDao _dcDao; @Inject AccountDao _accountDao; diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 87848b822b1..8f8ea5edaca 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -16,14 +16,11 @@ // under the License. package com.cloud.network; -import java.util.ArrayList; import java.util.List; import java.util.Map; -import java.util.Set; import com.cloud.acl.ControlledEntity.ACLType; import com.cloud.dc.DataCenter; -import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; @@ -34,13 +31,8 @@ import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InsufficientVirtualNetworkCapcityException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.network.Network.Capability; 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.NetworkElement; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.rules.FirewallRule; @@ -62,7 +54,7 @@ import com.cloud.vm.VirtualMachineProfileImpl; * NetworkManager manages the network for the different end users. * */ -public interface NetworkManager { +public interface NetworkManager { /** * Assigns a new public ip address. * @@ -95,27 +87,12 @@ public interface NetworkManager { */ public boolean disassociatePublicIpAddress(long id, long userId, Account caller); - /** - * Lists IP addresses that belong to VirtualNetwork VLANs - * - * @param accountId - * - account that the IP address should belong to - * @param associatedNetworkId - * TODO - * @param sourceNat - * - (optional) true if the IP address should be a source NAT address - * @return - list of IP addresses - */ - List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat); - List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) throws ConcurrentOperationException; List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException; - List getSystemAccountNetworkOfferings(String... offeringNames); - void allocate(VirtualMachineProfile vm, List> networks) throws InsufficientCapacityException, ConcurrentOperationException; void prepare(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context) throws InsufficientCapacityException, ConcurrentOperationException, @@ -128,25 +105,13 @@ public interface NetworkManager { void expungeNics(VirtualMachineProfile vm); - List getNics(long vmId); - List getNicProfiles(VirtualMachine vm); - String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException; - boolean applyRules(List rules, FirewallRule.Purpose purpose, NetworkRuleApplier applier, boolean continueOnError) throws ResourceUnavailableException; - public boolean validateRule(FirewallRule rule); - - PublicIpAddress getPublicIpAddress(long ipAddressId); - - List listPodVlans(long podId); - Pair implementNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; - List listNetworksUsedByVm(long vmId, boolean isSystem); - void prepareNicForMigration(VirtualMachineProfile vm, DeployDestination dest); boolean shutdownNetwork(long networkId, ReservationContext context, boolean cleanupElements); @@ -174,135 +139,35 @@ public interface NetworkManager { boolean associateIpAddressListToAccount(long userId, long accountId, long zoneId, Long vlanId, Network guestNetwork) throws InsufficientCapacityException, ConcurrentOperationException, ResourceUnavailableException, ResourceAllocationException; - Nic getNicInNetwork(long vmId, long networkId); - - List getNicsForTraffic(long vmId, TrafficType type); - - Network getDefaultNetworkForVm(long vmId); - - Nic getDefaultNic(long vmId); - UserDataServiceProvider getPasswordResetProvider(Network network); - UserDataServiceProvider getUserDataUpdateProvider(Network network); - - boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId); - - Map getNetworkServiceCapabilities(long networkId, Service service); - boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException; boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, List publicIps) throws ResourceUnavailableException; - boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services); - - NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId); - boolean startNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; - String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId); - - List listNetworksForAccount(long accountId, long zoneId, Network.GuestType type); - - List listAllNetworksInAllZonesByType(Network.GuestType type); - IPAddressVO markIpAsUnavailable(long addrId); public String acquireGuestIpAddress(Network network, String requestedIp); - String getGlobalGuestDomainSuffix(); - - String getStartIpAddress(long networkId); - boolean applyStaticNats(List staticNats, boolean continueOnError) throws ResourceUnavailableException; - String getIpInNetwork(long vmId, long networkId); - - String getIpInNetworkIncludingRemoved(long vmId, long networkId); - - Long getPodIdForVlan(long vlanDbId); - - List listNetworkOfferingsForUpgrade(long networkId); - - boolean isSecurityGroupSupportedInNetwork(Network network); - - boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider); - - boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName); - - String getNetworkTag(HypervisorType hType, Network network); - - List getElementServices(Provider provider); - - boolean canElementEnableIndividualServices(Provider provider); - - boolean areServicesSupportedInNetwork(long networkId, Service... services); - - boolean isNetworkSystem(Network network); - boolean reallocate(VirtualMachineProfile vm, DataCenterDeployment dest) throws InsufficientCapacityException, ConcurrentOperationException; - Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service); - - Long getPhysicalNetworkId(Network network); - - boolean getAllowSubdomainAccessGlobal(); - - boolean isProviderForNetwork(Provider provider, long networkId); - - boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId); - - void canProviderSupportServices(Map> providersMap); - - List getPhysicalNetworkInfo(long dcId, - HypervisorType hypervisorType); - - boolean canAddDefaultSecurityGroup(); - - List listNetworkOfferingServices(long networkOfferingId); - - boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services); - - public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall); - - public Map> getProviderToIpList(Network network, Map> ipToServices); - - public boolean checkIpForService(IPAddressVO ip, Service service, Long networkId); - - void checkCapabilityForProvider(Set providers, Service service, - Capability cap, String capValue); - - Provider getDefaultUniqueProviderForService(String serviceName); - IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) throws InsufficientAddressCapacityException; boolean handleSystemIpRelease(IpAddress ip); - void checkNetworkPermissions(Account owner, Network network); - void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile vm, Network network, String requestedIp) throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException; - String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType); - - String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType); - - String getDefaultPublicTrafficLabel(long dcId, HypervisorType vmware); - - String getDefaultGuestTrafficLabel(long dcId, HypervisorType vmware); - - /** - * @param providerName - * @return - */ - NetworkElement getElementImplementingProvider(String providerName); - /** * @param owner * @param guestNetwork @@ -313,27 +178,6 @@ public interface NetworkManager { PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network guestNetwork) throws InsufficientAddressCapacityException, ConcurrentOperationException; - /** - * @param accountId - * @param zoneId - * @return - */ - String getAccountNetworkDomain(long accountId, long zoneId); - - - /** - * @return - */ - String getDefaultNetworkDomain(); - - - /** - * @param ntwkOffId - * @return - */ - List getNtwkOffDistinctProviders(long ntwkOffId); - - /** * @param requested * @param network @@ -375,15 +219,6 @@ public interface NetworkManager { void removeNic(VirtualMachineProfile vm, Nic nic); - /** - * @param accountId - * @param dcId - * @param sourceNat - * @return - */ - List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat); - - /** * @param ipAddrId * @param networkId @@ -393,15 +228,6 @@ public interface NetworkManager { InsufficientAddressCapacityException, ConcurrentOperationException; - /** - * @param vm - * @param networkId - * @param broadcastUri TODO - * @return - */ - NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri); - - /** * @param network * @param provider @@ -420,21 +246,6 @@ public interface NetworkManager { throws ConcurrentOperationException, ResourceUnavailableException; - /** - * @param zoneId - * @param trafficType - * @return - */ - List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType); - - - /** - * @param guestNic - * @return - */ - boolean isPrivateGateway(Nic guestNic); - - /** * @param network * @param requested @@ -497,42 +308,6 @@ public interface NetworkManager { NetworkOfferingVO findById) throws ConcurrentOperationException, InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException; - Map> getNetworkCapabilities(long networkId); - - - Network getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType); - - - Long getDedicatedNetworkDomain(long networkId); - - - Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId); - - - List listSupportedNetworkServiceProviders(String serviceName); - - List listNetworksByVpc(long vpcId); - - boolean canUseForDeploy(Network network); - - Network getExclusiveGuestNetwork(long zoneId); - - long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType); - - Integer getNetworkRate(long networkId, Long vmId); - - - boolean isVmPartOfNetwork(long vmId, long ntwkId); - - PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType); - - - Network getNetwork(long networkId); - - - IpAddress getIp(long sourceIpAddressId); - - IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, DataCenter zone) throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException; diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index d17b9a6c0ce..f256a185928 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -17,7 +17,6 @@ package com.cloud.network; import java.net.URI; -import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -25,12 +24,10 @@ import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Set; -import java.util.TreeSet; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -75,7 +72,6 @@ import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlan; import com.cloud.domain.Domain; -import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; import com.cloud.event.EventTypes; import com.cloud.event.UsageEventVO; @@ -114,12 +110,10 @@ import com.cloud.network.dao.NetworkDomainDao; import com.cloud.network.dao.NetworkServiceMapDao; import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; -import com.cloud.network.dao.PhysicalNetworkServiceProviderVO; import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; import com.cloud.network.element.DhcpServiceProvider; import com.cloud.network.element.IpDeployer; -import com.cloud.network.element.LoadBalancingServiceProvider; import com.cloud.network.element.NetworkElement; import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.element.UserDataServiceProvider; @@ -181,9 +175,9 @@ import com.cloud.vm.ReservationContextImpl; import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachineProfileImpl; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.VirtualMachineProfile; -import com.cloud.vm.VirtualMachineProfileImpl; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; @@ -193,7 +187,7 @@ import com.cloud.vm.dao.VMInstanceDao; */ @Local(value = { NetworkManager.class}) public class NetworkManagerImpl implements NetworkManager, Manager, Listener { - private static final Logger s_logger = Logger.getLogger(NetworkManagerImpl.class); + static final Logger s_logger = Logger.getLogger(NetworkManagerImpl.class); String _name; @Inject @@ -242,8 +236,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { Adapters _ipDeployers; @Inject(adapter = DhcpServiceProvider.class) Adapters _dhcpProviders; - @Inject - NetworkDomainDao _networkDomainDao; + @Inject VMInstanceDao _vmDao; @Inject @@ -252,9 +245,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { FirewallRulesDao _firewallDao; @Inject ResourceLimitService _resourceLimitMgr; - - @Inject - DomainManager _domainMgr; @Inject NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao; @@ -282,10 +272,12 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { PrivateIpDao _privateIpDao; @Inject NetworkACLManager _networkACLMgr; + @Inject + NetworkModel _networkModel; private final HashMap _systemNetworks = new HashMap(5); - private static Long _privateOfferingId = null; + static Long _privateOfferingId = null; ScheduledExecutorService _executor; @@ -304,33 +296,8 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { HashMap _lastNetworkIdsToFree = new HashMap(); - private static HashMap> s_serviceToImplementedProvidersMap = new HashMap>(); - private static HashMap s_providerToNetworkElementMap = new HashMap(); - - @Override - public NetworkElement getElementImplementingProvider(String providerName) { - String elementName = s_providerToNetworkElementMap.get(providerName); - NetworkElement element = _networkElements.get(elementName); - return element; - } - - @Override - public List getElementServices(Provider provider) { - NetworkElement element = getElementImplementingProvider(provider.getName()); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getName() + "'"); - } - return new ArrayList(element.getCapabilities().keySet()); - } - - @Override - public boolean canElementEnableIndividualServices(Provider provider) { - NetworkElement element = getElementImplementingProvider(provider.getName()); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getName() + "'"); - } - return element.canEnableIndividualServices(); - } + static HashMap> s_serviceToImplementedProvidersMap = new HashMap>(); + static HashMap s_providerToNetworkElementMap = new HashMap(); @Override public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner, VlanType type, Long networkId, String requestedIp, boolean isSystem) throws InsufficientAddressCapacityException { @@ -589,237 +556,15 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return success; } - private Map> getProviderServicesMap(long networkId) { - Map> map = new HashMap>(); - List nsms = _ntwkSrvcDao.getServicesInNetwork(networkId); - for (NetworkServiceMapVO nsm : nsms) { - Set services = map.get(Provider.getProvider(nsm.getProvider())); - if (services == null) { - services = new HashSet(); - } - services.add(Service.getService(nsm.getService())); - map.put(Provider.getProvider(nsm.getProvider()), services); - } - return map; - } - - private Map> getServiceProvidersMap(long networkId) { - Map> map = new HashMap>(); - List nsms = _ntwkSrvcDao.getServicesInNetwork(networkId); - for (NetworkServiceMapVO nsm : nsms) { - Set providers = map.get(Service.getService(nsm.getService())); - if (providers == null) { - providers = new HashSet(); - } - providers.add(Provider.getProvider(nsm.getProvider())); - map.put(Service.getService(nsm.getService()), providers); - } - return map; - } - - /* Get a list of IPs, classify them by service */ - @Override - public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { - Map> ipToServices = new HashMap>(); - - if (publicIps != null && !publicIps.isEmpty()) { - Set networkSNAT = new HashSet(); - for (PublicIp ip : publicIps) { - Set services = ipToServices.get(ip); - if (services == null) { - services = new HashSet(); - } - if (ip.isSourceNat()) { - if (!networkSNAT.contains(ip.getAssociatedWithNetworkId())) { - services.add(Service.SourceNat); - networkSNAT.add(ip.getAssociatedWithNetworkId()); - } else { - CloudRuntimeException ex = new CloudRuntimeException("Multiple generic soure NAT IPs provided for network"); - // see the IPAddressVO.java class. - ex.addProxyObject("user_ip_address", ip.getAssociatedWithNetworkId(), "networkId"); - throw ex; - } - } - ipToServices.put(ip, services); - - // if IP in allocating state then it will not have any rules attached so skip IPAssoc to network service - // provider - if (ip.getState() == State.Allocating) { - continue; - } - - // check if any active rules are applied on the public IP - Set purposes = getPublicIpPurposeInRules(ip, false, includingFirewall); - // Firewall rules didn't cover static NAT - if (ip.isOneToOneNat() && ip.getAssociatedWithVmId() != null) { - if (purposes == null) { - purposes = new HashSet(); - } - purposes.add(Purpose.StaticNat); - } - if (purposes == null || purposes.isEmpty()) { - // since no active rules are there check if any rules are applied on the public IP but are in -// revoking state - - purposes = getPublicIpPurposeInRules(ip, true, includingFirewall); - if (ip.isOneToOneNat()) { - if (purposes == null) { - purposes = new HashSet(); - } - purposes.add(Purpose.StaticNat); - } - if (purposes == null || purposes.isEmpty()) { - // IP is not being used for any purpose so skip IPAssoc to network service provider - continue; - } else { - if (rulesRevoked) { - // no active rules/revoked rules are associated with this public IP, so remove the -// association with the provider - ip.setState(State.Releasing); - } else { - if (ip.getState() == State.Releasing) { - // rules are not revoked yet, so don't let the network service provider revoke the IP -// association - // mark IP is allocated so that IP association will not be removed from the provider - ip.setState(State.Allocated); - } - } - } - } - if (purposes.contains(Purpose.StaticNat)) { - services.add(Service.StaticNat); - } - if (purposes.contains(Purpose.LoadBalancing)) { - services.add(Service.Lb); - } - if (purposes.contains(Purpose.PortForwarding)) { - services.add(Service.PortForwarding); - } - if (purposes.contains(Purpose.Vpn)) { - services.add(Service.Vpn); - } - if (purposes.contains(Purpose.Firewall)) { - services.add(Service.Firewall); - } - if (services.isEmpty()) { - continue; - } - ipToServices.put(ip, services); - } - } - return ipToServices; - } - - public boolean canIpUsedForNonConserveService(PublicIp ip, Service service) { - // If it's non-conserve mode, then the new ip should not be used by any other services - List ipList = new ArrayList(); - ipList.add(ip); - Map> ipToServices = getIpToServices(ipList, false, false); - Set services = ipToServices.get(ip); - // Not used currently, safe - if (services == null || services.isEmpty()) { - return true; - } - // Since it's non-conserve mode, only one service should used for IP - if (services.size() != 1) { - throw new InvalidParameterException("There are multiple services used ip " + ip.getAddress() + "."); - } - if (service != null && !((Service) services.toArray()[0] == service || service.equals(Service.Firewall))) { - throw new InvalidParameterException("The IP " + ip.getAddress() + " is already used as " + ((Service) services.toArray()[0]).getName() + " rather than " + service.getName()); - } - return true; - } - - - - public boolean canIpUsedForService(PublicIp publicIp, Service service, Long networkId) { - List ipList = new ArrayList(); - ipList.add(publicIp); - Map> ipToServices = getIpToServices(ipList, false, true); - Set services = ipToServices.get(publicIp); - if (services == null || services.isEmpty()) { - return true; - } - - if (networkId == null) { - networkId = publicIp.getAssociatedWithNetworkId(); - } - - // We only support one provider for one service now - Map> serviceToProviders = getServiceProvidersMap(networkId); - Set oldProviders = serviceToProviders.get(services.toArray()[0]); - Provider oldProvider = (Provider) oldProviders.toArray()[0]; - // Since IP already has service to bind with, the oldProvider can't be null - Set newProviders = serviceToProviders.get(service); - if (newProviders == null || newProviders.isEmpty()) { - throw new InvalidParameterException("There is no new provider for IP " + publicIp.getAddress() + " of service " + service.getName() + "!"); - } - Provider newProvider = (Provider) newProviders.toArray()[0]; - if (!oldProvider.equals(newProvider)) { - throw new InvalidParameterException("There would be multiple providers for IP " + publicIp.getAddress() + "!"); - } - return true; - } - - /* Return a mapping between provider in the network and the IP they should applied */ - @Override - public Map> getProviderToIpList(Network network, Map> ipToServices) { - NetworkOffering offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); - if (!offering.isConserveMode()) { - for (PublicIp ip : ipToServices.keySet()) { - Set services = new HashSet() ; - services.addAll(ipToServices.get(ip)); - if (services != null && services.contains(Service.Firewall)) { - services.remove(Service.Firewall); - } - if (services != null && services.size() > 1) { - throw new CloudRuntimeException("Ip " + ip.getAddress() + " is used by multiple services!"); - } - } - } - Map> serviceToIps = new HashMap>(); - for (PublicIp ip : ipToServices.keySet()) { - for (Service service : ipToServices.get(ip)) { - Set ips = serviceToIps.get(service); - if (ips == null) { - ips = new HashSet(); - } - ips.add(ip); - serviceToIps.put(service, ips); - } - } - // TODO Check different provider for same IP - Map> providerToServices = getProviderServicesMap(network.getId()); - Map> providerToIpList = new HashMap>(); - for (Provider provider : providerToServices.keySet()) { - Set services = providerToServices.get(provider); - ArrayList ipList = new ArrayList(); - Set ipSet = new HashSet(); - for (Service service : services) { - Set serviceIps = serviceToIps.get(service); - if (serviceIps == null || serviceIps.isEmpty()) { - continue; - } - ipSet.addAll(serviceIps); - } - Set sourceNatIps = serviceToIps.get(Service.SourceNat); - if (sourceNatIps != null && !sourceNatIps.isEmpty()) { - ipList.addAll(0, sourceNatIps); - ipSet.removeAll(sourceNatIps); - } - ipList.addAll(ipSet); - providerToIpList.put(provider, ipList); - } - return providerToIpList; - } + @Override public boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, List publicIps) throws ResourceUnavailableException { boolean success = true; - Map> ipToServices = getIpToServices(publicIps, rulesRevoked, true); - Map> providerToIpList = getProviderToIpList(network, ipToServices); + Map> ipToServices = _networkModel.getIpToServices(publicIps, rulesRevoked, true); + Map> providerToIpList = _networkModel.getProviderToIpList(network, ipToServices); for (Provider provider : providerToIpList.keySet()) { try { @@ -828,7 +573,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { continue; } IpDeployer deployer = null; - NetworkElement element = getElementImplementingProvider(provider.getName()); + NetworkElement element = _networkModel.getElementImplementingProvider(provider.getName()); if (element instanceof IpDeployer) { deployer = (IpDeployer) element; } else { @@ -855,27 +600,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return success; } - Set getPublicIpPurposeInRules(PublicIp ip, boolean includeRevoked, boolean includingFirewall) { - Set result = new HashSet(); - List rules = null; - if (includeRevoked) { - rules = _firewallDao.listByIp(ip.getId()); - } else { - rules = _firewallDao.listByIpAndNotRevoked(ip.getId()); - } - - if (rules == null || rules.isEmpty()) { - return null; - } - - for (FirewallRuleVO rule : rules) { - if (rule.getPurpose() != Purpose.Firewall || includingFirewall) { - result.add(rule.getPurpose()); - } - } - - return result; - } @@ -966,11 +690,10 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return ip; } - protected IPAddressVO getExistingSourceNatInNetwork(long ownerId, Long networkId) { - - List addrs = listPublicIpsAssignedToGuestNtwk(ownerId, networkId, true); - + + List addrs = _networkModel.listPublicIpsAssignedToGuestNtwk(ownerId, networkId, true); + IPAddressVO sourceNatIp = null; if (addrs.isEmpty()) { return null; @@ -982,14 +705,14 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return sourceNatIp; } } - + assert (sourceNatIp != null) : "How do we get a bunch of ip addresses but none of them are source nat? " + "account=" + ownerId + "; networkId=" + networkId; } return sourceNatIp; } - + @DB @Override public IPAddressVO associateIPToGuestNetwork(long ipId, long networkId, boolean releaseOnFailure) @@ -1055,7 +778,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { // In Advance zone only allow to do IP assoc // - for Isolated networks with source nat service enabled // - for shared networks with source nat service enabled - if (zone.getNetworkType() == NetworkType.Advanced && (!areServicesSupportedInNetwork(network.getId(), Service.SourceNat))) { + if (zone.getNetworkType() == NetworkType.Advanced && (!_networkModel.areServicesSupportedInNetwork(network.getId(), Service.SourceNat))) { throw new InvalidParameterValueException("In zone of type " + NetworkType.Advanced + " ip address can be associated only to the network of guest type " + GuestType.Isolated + " with the " + Service.SourceNat.getName() + " enabled"); @@ -1438,35 +1161,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { protected NetworkManagerImpl() { } - @Override - public List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat) { - SearchCriteria sc = IpAddressSearch.create(); - sc.setParameters("accountId", accountId); - sc.setParameters("associatedWithNetworkId", associatedNetworkId); - - if (sourceNat != null) { - sc.addAnd("sourceNat", SearchCriteria.Op.EQ, sourceNat); - } - sc.setJoinParameters("virtualNetworkVlanSB", "vlanType", VlanType.VirtualNetwork); - - return _ipAddressDao.search(sc, null); - } - - @Override - public List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat) { - SearchCriteria sc = IpAddressSearch.create(); - sc.setParameters("accountId", accountId); - sc.setParameters("dataCenterId", dcId); - - if (sourceNat != null) { - sc.addAnd("sourceNat", SearchCriteria.Op.EQ, sourceNat); - } - sc.setJoinParameters("virtualNetworkVlanSB", "vlanType", VlanType.VirtualNetwork); - - return _ipAddressDao.search(sc, null); - } - - @Override public List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) @@ -1577,18 +1271,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { } } - @Override - public List getSystemAccountNetworkOfferings(String... offeringNames) { - List offerings = new ArrayList(offeringNames.length); - for (String offeringName : offeringNames) { - NetworkOfferingVO network = _systemNetworks.get(offeringName); - if (network == null) { - throw new CloudRuntimeException("Unable to find system network profile for " + offeringName); - } - offerings.add(network); - } - return offerings; - } + @Override @DB @@ -1698,9 +1381,9 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { vo = _nicDao.persist(vo); - Integer networkRate = getNetworkRate(network.getId(), vm.getId()); + Integer networkRate = _networkModel.getNetworkRate(network.getId(), vm.getId()); NicProfile vmNic = new NicProfile(vo, network, vo.getBroadcastUri(), vo.getIsolationUri(), networkRate, - isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), + _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vm.getHypervisorType(), network)); return new Pair(vmNic, Integer.valueOf(deviceId)); @@ -1788,7 +1471,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { to.setDns2(profile.getDns2()); } - Integer networkRate = getNetworkRate(config.getId(), null); + Integer networkRate = _networkModel.getNetworkRate(config.getId(), null); to.setNetworkRateMbps(networkRate); to.setUuid(config.getUuid()); @@ -1894,7 +1577,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { boolean sharedSourceNat = offering.getSharedSourceNat(); DataCenter zone = _dcDao.findById(network.getDataCenterId()); - if (!sharedSourceNat && areServicesSupportedInNetwork(network.getId(), Service.SourceNat) + if (!sharedSourceNat && _networkModel.areServicesSupportedInNetwork(network.getId(), Service.SourceNat) && (network.getGuestType() == Network.GuestType.Isolated || (network.getGuestType() == Network.GuestType.Shared && zone.getNetworkType() == NetworkType.Advanced))) { @@ -1919,7 +1602,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { List providersToImplement = getNetworkProviders(network.getId()); for (NetworkElement element : _networkElements) { if (providersToImplement.contains(element.getProvider())) { - if (!isProviderEnabledInPhysicalNetwork(getPhysicalNetworkId(network), element.getProvider().getName())) { + if (!_networkModel.isProviderEnabledInPhysicalNetwork(_networkModel.getPhysicalNetworkId(network), element.getProvider().getName())) { // The physicalNetworkId will not get translated into a uuid by the reponse serializer, // because the serializer would look up the NetworkVO class's table and retrieve the // network id instead of the physical network id. @@ -1957,14 +1640,14 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { ConcurrentOperationException, ResourceUnavailableException { element.prepare(network, profile, vmProfile, dest, context); if (vmProfile.getType() == Type.User && vmProfile.getHypervisorType() != HypervisorType.BareMetal && element.getProvider() != null) { - if (areServicesSupportedInNetwork(network.getId(), Service.Dhcp) && - isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, element.getProvider()) && + if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.Dhcp) && + _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, element.getProvider()) && (element instanceof DhcpServiceProvider)) { DhcpServiceProvider sp = (DhcpServiceProvider) element; sp.addDhcpEntry(network, profile, vmProfile, dest, context); } - if (areServicesSupportedInNetwork(network.getId(), Service.UserData) && - isProviderSupportServiceInNetwork(network.getId(), Service.UserData, element.getProvider()) && + if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.UserData) && + _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.UserData, element.getProvider()) && (element instanceof UserDataServiceProvider)) { UserDataServiceProvider sp = (UserDataServiceProvider) element; sp.addPasswordAndUserdata(network, profile, vmProfile, dest, context); @@ -1983,7 +1666,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { _networksDao.changeActiveNicsBy(networkId, count); } - if (nic.getVmType() == VirtualMachine.Type.User || (nic.getVmType() == VirtualMachine.Type.DomainRouter && getNetwork(networkId).getTrafficType() == TrafficType.Guest)) { + if (nic.getVmType() == VirtualMachine.Type.User || (nic.getVmType() == VirtualMachine.Type.DomainRouter && _networksDao.findById(networkId).getTrafficType() == TrafficType.Guest)) { _networksDao.setCheckForGc(networkId); } @@ -2024,7 +1707,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - Integer networkRate = getNetworkRate(network.getId(), vmProfile.getId()); + Integer networkRate = _networkModel.getNetworkRate(network.getId(), vmProfile.getId()); NetworkGuru guru = _networkGurus.get(network.getGuruName()); NicVO nic = _nicDao.findById(nicId); @@ -2042,7 +1725,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { profile = new NicProfile(nic, network, broadcastUri, isolationUri, - networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vmProfile.getHypervisorType(), network)); + networkRate, _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vmProfile.getHypervisorType(), network)); guru.reserve(profile, network, vmProfile, dest, context); nic.setIp4Address(profile.getIp4Address()); nic.setAddressFormat(profile.getFormat()); @@ -2062,7 +1745,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { updateNic(nic, network.getId(), 1); } else { profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), - networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vmProfile.getHypervisorType(), network)); + networkRate, _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vmProfile.getHypervisorType(), network)); guru.updateNicProfile(profile, network); nic.setState(Nic.State.Reserved); updateNic(nic, network.getId(), 1); @@ -2075,7 +1758,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { prepareElement(element, network, profile, vmProfile, dest, context); } - profile.setSecurityGroupEnabled(isSecurityGroupSupportedInNetwork(network)); + profile.setSecurityGroupEnabled(_networkModel.isSecurityGroupSupportedInNetwork(network)); guru.updateNicProfile(profile, network); return profile; } @@ -2085,11 +1768,11 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { List nics = _nicDao.listByVmId(vm.getId()); for (NicVO nic : nics) { NetworkVO network = _networksDao.findById(nic.getNetworkId()); - Integer networkRate = getNetworkRate(network.getId(), vm.getId()); + Integer networkRate = _networkModel.getNetworkRate(network.getId(), vm.getId()); NetworkGuru guru = _networkGurus.get(network.getGuruName()); NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), networkRate, - isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); + _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vm.getHypervisorType(), network)); guru.updateNicProfile(profile, network); vm.addNic(profile); } @@ -2135,7 +1818,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { nic.setState(Nic.State.Releasing); _nicDao.update(nic.getId(), nic); NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), null, - isSecurityGroupSupportedInNetwork(network), getNetworkTag(vmProfile.getHypervisorType(), network)); + _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vmProfile.getHypervisorType(), network)); if (guru.release(profile, vmProfile, nic.getReservationId())) { applyProfileToNicForRelease(nic, profile); nic.setState(Nic.State.Allocated); @@ -2166,68 +1849,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { } } - @Override - public List getNics(long vmId) { - return _nicDao.listByVmId(vmId); - } - - @Override - public List getNicProfiles(VirtualMachine vm) { - List nics = _nicDao.listByVmId(vm.getId()); - List profiles = new ArrayList(); - - if (nics != null) { - for (Nic nic : nics) { - NetworkVO network = _networksDao.findById(nic.getNetworkId()); - Integer networkRate = getNetworkRate(network.getId(), vm.getId()); - - NetworkGuru guru = _networkGurus.get(network.getGuruName()); - NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), - networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); - guru.updateNicProfile(profile, network); - profiles.add(profile); - } - } - return profiles; - } - - @Override - public NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri) { - NicVO nic = null; - if (broadcastUri != null) { - nic = _nicDao.findByNetworkIdInstanceIdAndBroadcastUri(networkId, vm.getId(), broadcastUri); - } else { - nic = _nicDao.findByInstanceIdAndNetworkId(networkId, vm.getId()); - } - NetworkVO network = _networksDao.findById(networkId); - Integer networkRate = getNetworkRate(network.getId(), vm.getId()); - - NetworkGuru guru = _networkGurus.get(network.getGuruName()); - NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), - networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); - guru.updateNicProfile(profile, network); - - return profile; - } - - - - @Override - public String getNextAvailableMacAddressInNetwork(long networkId) throws InsufficientAddressCapacityException { - String mac = _networksDao.getNextAvailableMacAddress(networkId); - if (mac == null) { - throw new InsufficientAddressCapacityException("Unable to create another mac address", Network.class, networkId); - } - return mac; - } - - @Override - @DB - public Network getNetwork(long id) { - return _networksDao.findById(id); - } - - @Override public void cleanupNics(VirtualMachineProfile vm) { if (s_logger.isDebugEnabled()) { @@ -2250,7 +1871,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { _nicDao.update(nic.getId(), nic); NetworkVO network = _networksDao.findById(nic.getNetworkId()); NicProfile profile = new NicProfile(nic, network, null, null, null, - isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); + _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vm.getHypervisorType(), network)); NetworkGuru guru = _networkGurus.get(network.getGuruName()); guru.deallocate(network, profile, vm); _nicDao.remove(nic.getId()); @@ -2321,7 +1942,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { // if zone is basic, only Shared network offerings w/o source nat service are allowed if (!(ntwkOff.getGuestType() == GuestType.Shared && - !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))) { + !_networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))) { throw new InvalidParameterValueException("For zone of type " + NetworkType.Basic + " only offerings of " + "guestType " + GuestType.Shared + " with disabled " + Service.SourceNat.getName() + " service are allowed"); @@ -2352,7 +1973,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { // Only Account specific Isolated network with sourceNat service disabled are allowed in security group // enabled zone boolean allowCreation = (ntwkOff.getGuestType() == GuestType.Isolated - && !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat)); + && !_networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat)); if (!allowCreation) { throw new InvalidParameterValueException("Only Account specific Isolated network with sourceNat " + "service disabled are allowed in security group enabled zone"); @@ -2393,8 +2014,8 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { } // If networkDomain is not specified, take it from the global configuration - if (areServicesSupportedByNetworkOffering(networkOfferingId, Service.Dns)) { - Map dnsCapabilities = getNetworkOfferingServiceCapabilities + if (_networkModel.areServicesSupportedByNetworkOffering(networkOfferingId, Service.Dns)) { + Map dnsCapabilities = _networkModel.getNetworkOfferingServiceCapabilities (_configMgr.getNetworkOffering(networkOfferingId), Service.Dns); String isUpdateDnsSupported = dnsCapabilities.get(Capability.AllowDnsSuffixModification); if (isUpdateDnsSupported == null || !Boolean.valueOf(isUpdateDnsSupported)) { @@ -2407,9 +2028,9 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { if (networkDomain == null) { // 1) Get networkDomain from the corresponding account/domain/zone if (aclType == ACLType.Domain) { - networkDomain = getDomainNetworkDomain(domainId, zoneId); + networkDomain = _networkModel.getDomainNetworkDomain(domainId, zoneId); } else if (aclType == ACLType.Account) { - networkDomain = getAccountNetworkDomain(owner.getId(), zoneId); + networkDomain = _networkModel.getAccountNetworkDomain(owner.getId(), zoneId); } // 2) If null, generate networkDomain using domain suffix from the global config variables @@ -2434,7 +2055,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { // with different Cidrs for the same Shared network boolean cidrRequired = zone.getNetworkType() == NetworkType.Advanced && ntwkOff.getTrafficType() == TrafficType.Guest && (ntwkOff.getGuestType() == GuestType.Shared || (ntwkOff.getGuestType() == GuestType.Isolated - && !areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))); + && !_networkModel.areServicesSupportedByNetworkOffering(ntwkOff.getId(), Service.SourceNat))); if (cidr == null && cidrRequired) { throw new InvalidParameterValueException("StartIp/endIp/gateway/netmask are required when create network of" + " type " + Network.GuestType.Shared + " and network of type " + GuestType.Isolated + " with service " @@ -2511,25 +2132,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { - @Override - public boolean canUseForDeploy(Network network) { - if (network.getTrafficType() != TrafficType.Guest) { - return false; - } - boolean hasFreeIps = true; - if (network.getGuestType() == GuestType.Shared) { - hasFreeIps = _ipAddressDao.countFreeIPsInNetwork(network.getId()) > 0; - } else { - hasFreeIps = (getAvailableIps(network, null)).size() > 0; - } - - return hasFreeIps; - } - - - - - @Override @DB public boolean shutdownNetwork(long networkId, ReservationContext context, boolean cleanupElements) { @@ -2605,9 +2207,9 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { for (NetworkElement element : _networkElements) { if (providersToShutdown.contains(element.getProvider())) { try { - if (!isProviderEnabledInPhysicalNetwork(getPhysicalNetworkId(network), element.getProvider().getName())) { + if (!_networkModel.isProviderEnabledInPhysicalNetwork(_networkModel.getPhysicalNetworkId(network), element.getProvider().getName())) { s_logger.warn("Unable to complete shutdown of the network elements due to element: " + element.getName() + " either doesn't exist or not enabled in the physical network " - + getPhysicalNetworkId(network)); + + _networkModel.getPhysicalNetworkId(network)); success = false; } if (s_logger.isDebugEnabled()) { @@ -2692,9 +2294,9 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { for (NetworkElement element : _networkElements) { if (providersToDestroy.contains(element.getProvider())) { try { - if (!isProviderEnabledInPhysicalNetwork(getPhysicalNetworkId(network), element.getProvider().getName())) { + if (!_networkModel.isProviderEnabledInPhysicalNetwork(_networkModel.getPhysicalNetworkId(network), element.getProvider().getName())) { s_logger.warn("Unable to complete destroy of the network elements due to element: " + element.getName() + " either doesn't exist or not enabled in the physical network " - + getPhysicalNetworkId(network)); + + _networkModel.getPhysicalNetworkId(network)); success = false; } @@ -2780,29 +2382,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return result; } - @Override - public boolean validateRule(FirewallRule rule) { - Network network = _networksDao.findById(rule.getNetworkId()); - Purpose purpose = rule.getPurpose(); - for (NetworkElement ne : _networkElements) { - boolean validated; - switch (purpose) { - case LoadBalancing: - if (!(ne instanceof LoadBalancingServiceProvider)) { - continue; - } - validated = ((LoadBalancingServiceProvider) ne).validateLBRule(network, (LoadBalancingRule) rule); - if (!validated) - return false; - break; - default: - s_logger.debug("Unable to validate network rules for purpose: " + purpose.toString()); - validated = false; - } - } - return true; - } - @Override public boolean applyRules(List rules, FirewallRule.Purpose purpose, NetworkRuleApplier applier, boolean continueOnError) throws ResourceUnavailableException { @@ -2880,14 +2459,14 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { for (Long networkId : shutdownList) { // If network is removed, unset gc flag for it - if (getNetwork(networkId) == null) { + if (_networksDao.findById(networkId) == null) { s_logger.debug("Network id=" + networkId + " is removed, so clearing up corresponding gc check"); _networksDao.clearCheckForGc(networkId); } else { try { User caller = _accountMgr.getSystemUser(); - Account owner = _accountMgr.getAccount(getNetwork(networkId).getAccountId()); + Account owner = _accountMgr.getAccount(_networksDao.findById(networkId).getAccountId()); ReservationContext context = new ReservationContextImpl(null, null, caller, owner); @@ -3038,190 +2617,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return _networksDao.getActiveNicsIn(networkId); } - @Override - public Map> getNetworkCapabilities(long networkId) { - - Map> networkCapabilities = new HashMap>(); - - // list all services of this networkOffering - List servicesMap = _ntwkSrvcDao.getServicesInNetwork(networkId); - for (NetworkServiceMapVO instance : servicesMap) { - Service service = Service.getService(instance.getService()); - NetworkElement element = getElementImplementingProvider(instance.getProvider()); - if (element != null) { - Map> elementCapabilities = element.getCapabilities(); - ; - if (elementCapabilities != null) { - networkCapabilities.put(service, elementCapabilities.get(service)); - } - } - } - - return networkCapabilities; - } - - @Override - public Map getNetworkServiceCapabilities(long networkId, Service service) { - - if (!areServicesSupportedInNetwork(networkId, service)) { - // TBD: networkId to uuid. No VO object being passed. So we will need to call - // addProxyObject with hardcoded tablename. Or we should probably look up the correct dao proxy object. - throw new UnsupportedServiceException("Service " + service.getName() + " is not supported in the network id=" + networkId); - } - - Map serviceCapabilities = new HashMap(); - - // get the Provider for this Service for this offering - String provider = _ntwkSrvcDao.getProviderForServiceInNetwork(networkId, service); - - NetworkElement element = getElementImplementingProvider(provider); - if (element != null) { - Map> elementCapabilities = element.getCapabilities(); - ; - - if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { - throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider); - } - serviceCapabilities = elementCapabilities.get(service); - } - - return serviceCapabilities; - } - - @Override - public Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { - - if (!areServicesSupportedByNetworkOffering(offering.getId(), service)) { - // TBD: We should be sending networkOfferingId and not the offering object itself. - throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the network offering " + offering); - } - - Map serviceCapabilities = new HashMap(); - - // get the Provider for this Service for this offering - List providers = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(offering.getId(), service); - if (providers.isEmpty()) { - // TBD: We should be sending networkOfferingId and not the offering object itself. - throw new InvalidParameterValueException("Service " + service.getName() + " is not supported by the network offering " + offering); - } - - // FIXME - in post 3.0 we are going to support multiple providers for the same service per network offering, so - // we have to calculate capabilities for all of them - String provider = providers.get(0); - - // FIXME we return the capabilities of the first provider of the service - what if we have multiple providers - // for same Service? - NetworkElement element = getElementImplementingProvider(provider); - if (element != null) { - Map> elementCapabilities = element.getCapabilities(); - ; - - if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { - // TBD: We should be sending providerId and not the offering object itself. - throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider); - } - serviceCapabilities = elementCapabilities.get(service); - } - - return serviceCapabilities; - } - - @Override - public NetworkVO getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - // find system public network offering - Long networkOfferingId = null; - List offerings = _networkOfferingDao.listSystemNetworkOfferings(); - for (NetworkOfferingVO offering : offerings) { - if (offering.getTrafficType() == trafficType) { - networkOfferingId = offering.getId(); - break; - } - } - - if (networkOfferingId == null) { - throw new InvalidParameterValueException("Unable to find system network offering with traffic type " + trafficType); - } - - List networks = _networksDao.listBy(Account.ACCOUNT_ID_SYSTEM, networkOfferingId, zoneId); - if (networks == null || networks.isEmpty()) { - // TBD: send uuid instead of zoneId. Hardcode tablename in call to addProxyObject(). - throw new InvalidParameterValueException("Unable to find network with traffic type " + trafficType + " in zone " + zoneId); - } - return networks.get(0); - } - - @Override - public NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId) { - List networks = _networksDao.listByZoneSecurityGroup(zoneId); - if (networks == null || networks.isEmpty()) { - return null; - } - - if (networks.size() > 1) { - s_logger.debug("There are multiple network with security group enabled? select one of them..."); - } - return networks.get(0); - } - - @Override - public PublicIpAddress getPublicIpAddress(long ipAddressId) { - IPAddressVO addr = _ipAddressDao.findById(ipAddressId); - if (addr == null) { - return null; - } - - return new PublicIp(addr, _vlanDao.findById(addr.getVlanId()), NetUtils.createSequenceBasedMacAddress(addr.getMacAddress())); - } - - @Override - public List listPodVlans(long podId) { - List vlans = _vlanDao.listVlansForPodByType(podId, VlanType.DirectAttached); - return vlans; - } - - @Override - public List listNetworksUsedByVm(long vmId, boolean isSystem) { - List networks = new ArrayList(); - - List nics = _nicDao.listByVmId(vmId); - if (nics != null) { - for (Nic nic : nics) { - NetworkVO network = _networksDao.findByIdIncludingRemoved(nic.getNetworkId()); - - if (isNetworkSystem(network) == isSystem) { - networks.add(network); - } - } - } - - return networks; - } - - @Override - public Nic getNicInNetwork(long vmId, long networkId) { - return _nicDao.findByInstanceIdAndNetworkId(networkId, vmId); - } - - @Override - public String getIpInNetwork(long vmId, long networkId) { - Nic guestNic = getNicInNetwork(vmId, networkId); - assert (guestNic != null && guestNic.getIp4Address() != null) : "Vm doesn't belong to network associated with " + - "ipAddress or ip4 address is null"; - return guestNic.getIp4Address(); - } - - @Override - public String getIpInNetworkIncludingRemoved(long vmId, long networkId) { - Nic guestNic = getNicInNetworkIncludingRemoved(vmId, networkId); - assert (guestNic != null && guestNic.getIp4Address() != null) : "Vm doesn't belong to network associated with " + - "ipAddress or ip4 address is null"; - return guestNic.getIp4Address(); - } - - private Nic getNicInNetworkIncludingRemoved(long vmId, long networkId) { - return _nicDao.findByInstanceIdAndNetworkIdIncludingRemoved(networkId, vmId); - } - + @Override @DB public boolean associateIpAddressListToAccount(long userId, long accountId, long zoneId, Long vlanId, Network guestNetwork) @@ -3258,7 +2654,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { } if (requiredOfferings.get(0).getState() == NetworkOffering.State.Enabled) { - long physicalNetworkId = findPhysicalNetworkId(zoneId, requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType()); + long physicalNetworkId = _networkModel.findPhysicalNetworkId(zoneId, requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType()); // Validate physical network PhysicalNetwork physicalNetwork = _physicalNetworkDao.findById(physicalNetworkId); if (physicalNetwork == null) { @@ -3315,20 +2711,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return true; } - @Override - public List getNicsForTraffic(long vmId, TrafficType type) { - SearchCriteria sc = NicForTrafficTypeSearch.create(); - sc.setParameters("instance", vmId); - sc.setJoinParameters("network", "traffictype", type); - - return _nicDao.search(sc, null); - } - - @Override - public IpAddress getIp(long ipAddressId) { - return _ipAddressDao.findById(ipAddressId); - } - @Override public NetworkProfile convertNetworkToNetworkProfile(long networkId) { NetworkVO network = _networksDao.findById(networkId); @@ -3339,40 +2721,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return profile; } - @Override - public Network getDefaultNetworkForVm(long vmId) { - Nic defaultNic = getDefaultNic(vmId); - if (defaultNic == null) { - return null; - } else { - return _networksDao.findById(defaultNic.getNetworkId()); - } - } - - @Override - public Nic getDefaultNic(long vmId) { - List nics = _nicDao.listByVmId(vmId); - Nic defaultNic = null; - if (nics != null) { - for (Nic nic : nics) { - if (nic.isDefaultNic()) { - defaultNic = nic; - break; - } - } - } else { - s_logger.debug("Unable to find default network for the vm; vm doesn't have any nics"); - return null; - } - - if (defaultNic == null) { - s_logger.debug("Unable to find default network for the vm; vm doesn't have default nic"); - } - - return defaultNic; - - } - @Override public UserDataServiceProvider getPasswordResetProvider(Network network) { String passwordProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.UserData); @@ -3382,58 +2730,22 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return null; } - return (UserDataServiceProvider)getElementImplementingProvider(passwordProvider); + return (UserDataServiceProvider)_networkModel.getElementImplementingProvider(passwordProvider); } - @Override - public UserDataServiceProvider getUserDataUpdateProvider(Network network) { - String userDataProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.UserData); - - if (userDataProvider == null) { - s_logger.debug("Network " + network + " doesn't support service " + Service.UserData.getName()); - return null; - } - - return (UserDataServiceProvider)getElementImplementingProvider(userDataProvider); - } - - @Override - public boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId) { - boolean netscalerInNetwork = isProviderForNetwork(Network.Provider.Netscaler, networkId); - boolean juniperInNetwork = isProviderForNetwork(Network.Provider.JuniperSRX, networkId); - boolean f5InNetwork = isProviderForNetwork(Network.Provider.F5BigIp, networkId); - - if (netscalerInNetwork || juniperInNetwork || f5InNetwork) { - return true; - } else { - return false; - } - } - - protected boolean isSharedNetworkOfferingWithServices(long networkOfferingId) { NetworkOfferingVO networkOffering = _networkOfferingDao.findById(networkOfferingId); if ( (networkOffering.getGuestType() == Network.GuestType.Shared) && ( - areServicesSupportedByNetworkOffering(networkOfferingId, Service.SourceNat) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.StaticNat) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.Firewall) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.PortForwarding) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.Lb))) { + _networkModel.areServicesSupportedByNetworkOffering(networkOfferingId, Service.SourceNat) || + _networkModel.areServicesSupportedByNetworkOffering(networkOfferingId, Service.StaticNat) || + _networkModel.areServicesSupportedByNetworkOffering(networkOfferingId, Service.Firewall) || + _networkModel.areServicesSupportedByNetworkOffering(networkOfferingId, Service.PortForwarding) || + _networkModel.areServicesSupportedByNetworkOffering(networkOfferingId, Service.Lb))) { return true; } return false; } - @Override - public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { - return (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(networkOfferingId, services)); - } - - @Override - public boolean areServicesSupportedInNetwork(long networkId, Service... services) { - return (_ntwkSrvcDao.areServicesSupportedInNetwork(networkId, services)); - } - @Override public boolean cleanupIpResources(long ipId, long userId, Account caller) { boolean success = true; @@ -3483,56 +2795,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return success; } - @Override - public String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId) { - - List virtualNetworks = _networksDao.listByZoneAndGuestType(accountId, dataCenterId, Network.GuestType.Isolated, false); - - if (virtualNetworks.isEmpty()) { - s_logger.trace("Unable to find default Virtual network account id=" + accountId); - return null; - } - - NetworkVO virtualNetwork = virtualNetworks.get(0); - - NicVO networkElementNic = _nicDao.findByNetworkIdAndType(virtualNetwork.getId(), Type.DomainRouter); - - if (networkElementNic != null) { - return networkElementNic.getIp4Address(); - } else { - s_logger.warn("Unable to set find network element for the network id=" + virtualNetwork.getId()); - return null; - } - } - - @Override - public List listNetworksForAccount(long accountId, long zoneId, Network.GuestType type) { - List accountNetworks = new ArrayList(); - List zoneNetworks = _networksDao.listByZone(zoneId); - - for (NetworkVO network : zoneNetworks) { - if (!isNetworkSystem(network)) { - if (network.getGuestType() == Network.GuestType.Shared || !_networksDao.listBy(accountId, network.getId()).isEmpty()) { - if (type == null || type == network.getGuestType()) { - accountNetworks.add(network); - } - } - } - } - return accountNetworks; - } - - @Override - public List listAllNetworksInAllZonesByType(Network.GuestType type) { - List networks = new ArrayList(); - for (NetworkVO network: _networksDao.listAll()) { - if (!isNetworkSystem(network)) { - networks.add(network); - } - } - return networks; - } - @DB @Override public IPAddressVO markIpAsUnavailable(long addrId) { @@ -3573,78 +2835,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return ip; } - //@Override - protected boolean isNetworkAvailableInDomain(long networkId, long domainId) { - Long networkDomainId = null; - Network network = getNetwork(networkId); - if (network.getGuestType() != Network.GuestType.Shared) { - s_logger.trace("Network id=" + networkId + " is not shared"); - return false; - } - - NetworkDomainVO networkDomainMap = _networkDomainDao.getDomainNetworkMapByNetworkId(networkId); - if (networkDomainMap == null) { - s_logger.trace("Network id=" + networkId + " is shared, but not domain specific"); - return true; - } else { - networkDomainId = networkDomainMap.getDomainId(); - } - - if (domainId == networkDomainId.longValue()) { - return true; - } - - if (networkDomainMap.subdomainAccess) { - Set parentDomains = _domainMgr.getDomainParentIds(domainId); - - if (parentDomains.contains(domainId)) { - return true; - } - } - - return false; - } - - @Override - public Long getDedicatedNetworkDomain(long networkId) { - NetworkDomainVO networkMaps = _networkDomainDao.getDomainNetworkMapByNetworkId(networkId); - if (networkMaps != null) { - return networkMaps.getDomainId(); - } else { - return null; - } - } - - - - @Override - public Integer getNetworkRate(long networkId, Long vmId) { - VMInstanceVO vm = null; - if (vmId != null) { - vm = _vmDao.findById(vmId); - } - Network network = getNetwork(networkId); - NetworkOffering ntwkOff = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); - - // For default userVm Default network and domR guest/public network, get rate information from the service - // offering; for other situations get information - // from the network offering - boolean isUserVmsDefaultNetwork = false; - boolean isDomRGuestOrPublicNetwork = false; - if (vm != null) { - Nic nic = _nicDao.findByInstanceIdAndNetworkId(networkId, vmId); - if (vm.getType() == Type.User && nic != null && nic.isDefaultNic()) { - isUserVmsDefaultNetwork = true; - } else if (vm.getType() == Type.DomainRouter && ntwkOff != null && (ntwkOff.getTrafficType() == TrafficType.Public || ntwkOff.getTrafficType() == TrafficType.Guest)) { - isDomRGuestOrPublicNetwork = true; - } - } - if (isUserVmsDefaultNetwork || isDomRGuestOrPublicNetwork) { - return _configMgr.getServiceOfferingNetworkRate(vm.getServiceOfferingId()); - } else { - return _configMgr.getNetworkOfferingNetworkRate(ntwkOff.getId()); - } - } + Random _rand = new Random(System.currentTimeMillis()); @@ -3656,7 +2847,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return null; } - Set availableIps = getAvailableIps(network, requestedIp); + Set availableIps = _networkModel.getAvailableIps(network, requestedIp); if (availableIps.isEmpty()) { return null; @@ -3683,87 +2874,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return result; } - protected Set getAvailableIps(Network network, String requestedIp) { - String[] cidr = network.getCidr().split("/"); - List ips = _nicDao.listIpAddressInNetwork(network.getId()); - Set allPossibleIps = NetUtils.getAllIpsFromCidr(cidr[0], Integer.parseInt(cidr[1])); - Set usedIps = new TreeSet(); - - for (String ip : ips) { - if (requestedIp != null && requestedIp.equals(ip)) { - s_logger.warn("Requested ip address " + requestedIp + " is already in use in network" + network); - return null; - } - - usedIps.add(NetUtils.ip2Long(ip)); - } - if (usedIps.size() != 0) { - allPossibleIps.removeAll(usedIps); - } - return allPossibleIps; - } - - private String getZoneNetworkDomain(long zoneId) { - return _dcDao.findById(zoneId).getDomain(); - } - - private String getDomainNetworkDomain(long domainId, long zoneId) { - String networkDomain = null; - Long searchDomainId = domainId; - while(searchDomainId != null){ - DomainVO domain = _domainDao.findById(searchDomainId); - if(domain.getNetworkDomain() != null){ - networkDomain = domain.getNetworkDomain(); - break; - } - searchDomainId = domain.getParent(); - } - if (networkDomain == null) { - return getZoneNetworkDomain(zoneId); - } - return networkDomain; - } - - @Override - public String getAccountNetworkDomain(long accountId, long zoneId) { - String networkDomain = _accountDao.findById(accountId).getNetworkDomain(); - - if (networkDomain == null) { - // get domain level network domain - return getDomainNetworkDomain(_accountDao.findById(accountId).getDomainId(), zoneId); - } - - return networkDomain; - } - - @Override - public String getGlobalGuestDomainSuffix() { - return _networkDomain; - } - - @Override - public String getStartIpAddress(long networkId) { - List vlans = _vlanDao.listVlansByNetworkId(networkId); - if (vlans.isEmpty()) { - return null; - } - - String startIP = vlans.get(0).getIpRange().split("-")[0]; - - for (VlanVO vlan : vlans) { - String startIP1 = vlan.getIpRange().split("-")[0]; - long startIPLong = NetUtils.ip2Long(startIP); - long startIPLong1 = NetUtils.ip2Long(startIP1); - - if (startIPLong1 < startIPLong) { - startIP = startIP1; - } - } - - return startIP; - } - @Override public boolean applyStaticNats(List staticNats, boolean continueOnError) throws ResourceUnavailableException { Network network = _networksDao.findById(staticNats.get(0).getNetworkId()); @@ -3831,16 +2942,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return success; } - @Override - public Long getPodIdForVlan(long vlanDbId) { - PodVlanMapVO podVlanMaps = _podVlanMapDao.listPodVlanMapsByVlan(vlanDbId); - if (podVlanMaps == null) { - return null; - } else { - return podVlanMaps.getPodId(); - } - } - @DB @Override public boolean reallocate(VirtualMachineProfile vm, DataCenterDeployment dest) throws InsufficientCapacityException, ConcurrentOperationException { @@ -3866,136 +2967,9 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return true; } - @Override - public Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId) { - Map> serviceProviderMap = new HashMap>(); - List map = _ntwkOfferingSrvcDao.listByNetworkOfferingId(networkOfferingId); - - for (NetworkOfferingServiceMapVO instance : map) { - String service = instance.getService(); - Set providers; - providers = serviceProviderMap.get(service); - if (providers == null) { - providers = new HashSet(); - } - providers.add(Provider.getProvider(instance.getProvider())); - serviceProviderMap.put(Service.getService(service), providers); - } - - return serviceProviderMap; - } - - @Override - public boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider) { - return _ntwkSrvcDao.canProviderSupportServiceInNetwork(networkId, service, provider); - } - - - - - - - - - @Override - public List listSupportedNetworkServiceProviders(String serviceName) { - Network.Service service = null; - if (serviceName != null) { - service = Network.Service.getService(serviceName); - if (service == null) { - throw new InvalidParameterValueException("Invalid Network Service=" + serviceName); - } - } - - Set supportedProviders = new HashSet(); - - if (service != null) { - supportedProviders.addAll(s_serviceToImplementedProvidersMap.get(service)); - } else { - for (List pList : s_serviceToImplementedProvidersMap.values()) { - supportedProviders.addAll(pList); - } - } - - return new ArrayList(supportedProviders); - } - - @Override - public Provider getDefaultUniqueProviderForService(String serviceName) { - List providers = listSupportedNetworkServiceProviders(serviceName); - if (providers.isEmpty()) { - throw new CloudRuntimeException("No providers supporting service " + serviceName + " found in cloudStack"); - } - if (providers.size() > 1) { - throw new CloudRuntimeException("More than 1 provider supporting service " + serviceName + " found in cloudStack"); - } - - return providers.get(0); - } - - - - - - - @Override - public long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType) { - List pNtwks = new ArrayList(); - if (trafficType != null) { - pNtwks = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); - } else { - pNtwks = _physicalNetworkDao.listByZone(zoneId); - } - - if (pNtwks.isEmpty()) { - throw new InvalidParameterValueException("Unable to find physical network in zone id=" + zoneId); - } - - if (pNtwks.size() > 1) { - if (tag == null) { - throw new InvalidParameterValueException("More than one physical networks exist in zone id=" + zoneId + " and no tags are specified in order to make a choice"); - } - - Long pNtwkId = null; - for (PhysicalNetwork pNtwk : pNtwks) { - if (pNtwk.getTags().contains(tag)) { - s_logger.debug("Found physical network id=" + pNtwk.getId() + " based on requested tags " + tag); - pNtwkId = pNtwk.getId(); - break; - } - } - if (pNtwkId == null) { - throw new InvalidParameterValueException("Unable to find physical network which match the tags " + tag); - } - return pNtwkId; - } else { - return pNtwks.get(0).getId(); - } - } - - @Override - public List listNetworkOfferingsForUpgrade(long networkId) { - List offeringsToReturn = new ArrayList(); - NetworkOffering originalOffering = _configMgr.getNetworkOffering(getNetwork(networkId).getNetworkOfferingId()); - - boolean securityGroupSupportedByOriginalOff = areServicesSupportedByNetworkOffering(originalOffering.getId(), Service.SecurityGroup); - - // security group supported property should be the same - - List offerings = _networkOfferingDao.getOfferingIdsToUpgradeFrom(originalOffering); - - for (Long offeringId : offerings) { - if (areServicesSupportedByNetworkOffering(offeringId, Service.SecurityGroup) == securityGroupSupportedByOriginalOff) { - offeringsToReturn.add(offeringId); - } - } - - return offeringsToReturn; - } - private boolean cleanupNetworkResources(long networkId, Account caller, long callerUserId) { boolean success = true; - Network network = getNetwork(networkId); + Network network = _networksDao.findById(networkId); //remove all PF/Static Nat rules for the network try { @@ -4112,7 +3086,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { throw new InvalidParameterValueException("Source ip address of the rule id=" + firewallStaticNatRule.getId() + " is not static nat enabled"); } - String dstIp = getIpInNetwork(ip.getAssociatedWithVmId(), firewallStaticNatRule.getNetworkId()); + String dstIp = _networkModel.getIpInNetwork(ip.getAssociatedWithVmId(), firewallStaticNatRule.getNetworkId()); ruleVO.setState(FirewallRule.State.Revoke); staticNatRules.add(new StaticNatRuleImpl(ruleVO, dstIp)); } @@ -4205,7 +3179,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { } // Get all ip addresses, mark as releasing and release them on the backend - Network network = getNetwork(networkId); + Network network = _networksDao.findById(networkId); List userIps = _ipAddressDao.listByAssociatedNetwork(networkId, null); List publicIpsToRelease = new ArrayList(); if (userIps != null && !userIps.isEmpty()) { @@ -4228,96 +3202,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return success; } - @Override - public boolean isSecurityGroupSupportedInNetwork(Network network) { - if (network.getTrafficType() != TrafficType.Guest) { - s_logger.trace("Security group can be enabled for Guest networks only; and network " + network + " has a diff traffic type"); - return false; - } - - Long physicalNetworkId = network.getPhysicalNetworkId(); - - // physical network id can be null in Guest Network in Basic zone, so locate the physical network - if (physicalNetworkId == null) { - physicalNetworkId = findPhysicalNetworkId(network.getDataCenterId(), null, null); - } - - return isServiceEnabledInNetwork(physicalNetworkId, network.getId(), Service.SecurityGroup); - } - - - @Override - public PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - - List networkList = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); - - if (networkList.isEmpty()) { - InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find the default physical network with traffic=" + trafficType + " in the specified zone id"); - // Since we don't have a DataCenterVO object at our disposal, we just set the table name that the zoneId's corresponding uuid is looked up from, manually. - ex.addProxyObject("data_center", zoneId, "zoneId"); - throw ex; - } - - if (networkList.size() > 1) { - InvalidParameterValueException ex = new InvalidParameterValueException("More than one physical networks exist in zone id=" + zoneId + " with traffic type=" + trafficType); - ex.addProxyObject("data_center", zoneId, "zoneId"); - throw ex; - } - - return networkList.get(0); - } - - @Override - public String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType){ - try{ - PhysicalNetwork mgmtPhyNetwork = getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); - PhysicalNetworkTrafficTypeVO mgmtTraffic = _pNTrafficTypeDao.findBy(mgmtPhyNetwork.getId(), TrafficType.Management); - if(mgmtTraffic != null){ - String label = null; - switch(hypervisorType){ - case XenServer : label = mgmtTraffic.getXenNetworkLabel(); - break; - case KVM : label = mgmtTraffic.getKvmNetworkLabel(); - break; - case VMware : label = mgmtTraffic.getVmwareNetworkLabel(); - break; - } - return label; - } - }catch(Exception ex){ - if(s_logger.isDebugEnabled()){ - s_logger.debug("Failed to retrive the default label for management traffic:"+"zone: "+ zoneId +" hypervisor: "+hypervisorType +" due to:" + ex.getMessage()); - } - } - return null; - } - - @Override - public String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType){ - try{ - PhysicalNetwork storagePhyNetwork = getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Storage); - PhysicalNetworkTrafficTypeVO storageTraffic = _pNTrafficTypeDao.findBy(storagePhyNetwork.getId(), TrafficType.Storage); - if(storageTraffic != null){ - String label = null; - switch(hypervisorType){ - case XenServer : label = storageTraffic.getXenNetworkLabel(); - break; - case KVM : label = storageTraffic.getKvmNetworkLabel(); - break; - case VMware : label = storageTraffic.getVmwareNetworkLabel(); - break; - } - return label; - } - }catch(Exception ex){ - if(s_logger.isDebugEnabled()){ - s_logger.debug("Failed to retrive the default label for storage traffic:"+"zone: "+ zoneId +" hypervisor: "+hypervisorType +" due to:" + ex.getMessage()); - } - } - return null; - } - - @Override public boolean processAnswers(long agentId, long seq, Answer[] answers) { return false; @@ -4333,32 +3217,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return null; } - @Override - public List getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType) { - List networkInfoList = new ArrayList(); - List physicalNtwkList = _physicalNetworkDao.listByZone(dcId); - for (PhysicalNetworkVO pNtwk : physicalNtwkList) { - String publicName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Public, hypervisorType); - String privateName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Management, hypervisorType); - String guestName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Guest, hypervisorType); - String storageName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Storage, hypervisorType); - // String controlName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Control, hypervisorType); - PhysicalNetworkSetupInfo info = new PhysicalNetworkSetupInfo(); - info.setPhysicalNetworkId(pNtwk.getId()); - info.setGuestNetworkName(guestName); - info.setPrivateNetworkName(privateName); - info.setPublicNetworkName(publicName); - info.setStorageNetworkName(storageName); - PhysicalNetworkTrafficTypeVO mgmtTraffic = _pNTrafficTypeDao.findBy(pNtwk.getId(), TrafficType.Management); - if (mgmtTraffic != null) { - String vlan = mgmtTraffic.getVlan(); - info.setMgmtVlan(vlan); - } - networkInfoList.add(info); - } - return networkInfoList; - } - @Override public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) throws ConnectionException { if (!(cmd instanceof StartupRoutingCommand)) { @@ -4397,7 +3255,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { String privateName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Management, hypervisorType); String guestName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Guest, hypervisorType); String storageName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Storage, hypervisorType); - // String controlName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Control, hypervisorType); + // String controlName = _pNTrafficTypeDao._networkModel.getNetworkTag(pNtwk.getId(), TrafficType.Control, hypervisorType); PhysicalNetworkSetupInfo info = new PhysicalNetworkSetupInfo(); info.setPhysicalNetworkId(pNtwk.getId()); info.setGuestNetworkName(guestName); @@ -4461,130 +3319,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return false; } - private boolean isProviderEnabled(PhysicalNetworkServiceProvider provider) { - if (provider == null || provider.getState() != PhysicalNetworkServiceProvider.State.Enabled) { // TODO: check -// for other states: Shutdown? - return false; - } - return true; - } - - @Override - public boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName) { - PhysicalNetworkServiceProviderVO ntwkSvcProvider = _pNSPDao.findByServiceProvider(physicalNetowrkId, providerName); - if (ntwkSvcProvider == null) { - s_logger.warn("Unable to find provider " + providerName + " in physical network id=" + physicalNetowrkId); - return false; - } - return isProviderEnabled(ntwkSvcProvider); - } - - private boolean isServiceEnabledInNetwork(long physicalNetworkId, long networkId, Service service) { - // check if the service is supported in the network - if (!areServicesSupportedInNetwork(networkId, service)) { - s_logger.debug("Service " + service.getName() + " is not supported in the network id=" + networkId); - return false; - } - - // get provider for the service and check if all of them are supported - String provider = _ntwkSrvcDao.getProviderForServiceInNetwork(networkId, service); - if (!isProviderEnabledInPhysicalNetwork(physicalNetworkId, provider)) { - s_logger.debug("Provider " + provider + " is not enabled in physical network id=" + physicalNetworkId); - return false; - } - - return true; - } - - @Override - public String getNetworkTag(HypervisorType hType, Network network) { - // no network tag for control traffic type - TrafficType effectiveTrafficType = network.getTrafficType(); - if(hType == HypervisorType.VMware && effectiveTrafficType == TrafficType.Control) - effectiveTrafficType = TrafficType.Management; - - if (effectiveTrafficType == TrafficType.Control) { - return null; - } - - Long physicalNetworkId = null; - if (effectiveTrafficType != TrafficType.Guest) { - physicalNetworkId = getNonGuestNetworkPhysicalNetworkId(network); - } else { - NetworkOffering offering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); - physicalNetworkId = network.getPhysicalNetworkId(); - if(physicalNetworkId == null){ - physicalNetworkId = findPhysicalNetworkId(network.getDataCenterId(), offering.getTags(), offering.getTrafficType()); - } - } - - if (physicalNetworkId == null) { - assert (false) : "Can't get the physical network"; - s_logger.warn("Can't get the physical network"); - return null; - } - - return _pNTrafficTypeDao.getNetworkTag(physicalNetworkId, effectiveTrafficType, hType); - } - - protected Long getNonGuestNetworkPhysicalNetworkId(Network network) { - // no physical network for control traffic type - - // have to remove this sanity check as VMware control network is management network - // we need to retrieve traffic label information through physical network -/* - if (network.getTrafficType() == TrafficType.Control) { - return null; - } -*/ - Long physicalNetworkId = network.getPhysicalNetworkId(); - - if (physicalNetworkId == null) { - List pNtwks = _physicalNetworkDao.listByZone(network.getDataCenterId()); - if (pNtwks.size() == 1) { - physicalNetworkId = pNtwks.get(0).getId(); - } else { - // locate physicalNetwork with supported traffic type - // We can make this assumptions based on the fact that Public/Management/Control traffic types are - // supported only in one physical network in the zone in 3.0 - for (PhysicalNetworkVO pNtwk : pNtwks) { - if (_pNTrafficTypeDao.isTrafficTypeSupported(pNtwk.getId(), network.getTrafficType())) { - physicalNetworkId = pNtwk.getId(); - break; - } - } - } - } - return physicalNetworkId; - } - - @Override - public NetworkVO getExclusiveGuestNetwork(long zoneId) { - List networks = _networksDao.listBy(Account.ACCOUNT_ID_SYSTEM, zoneId, GuestType.Shared, TrafficType.Guest); - if (networks == null || networks.isEmpty()) { - throw new InvalidParameterValueException("Unable to find network with trafficType " + TrafficType.Guest + " and guestType " + GuestType.Shared + " in zone " + zoneId); - } - - if (networks.size() > 1) { - throw new InvalidParameterValueException("Found more than 1 network with trafficType " + TrafficType.Guest + " and guestType " + GuestType.Shared + " in zone " + zoneId); - - } - - return networks.get(0); - } - - - - @Override - public boolean isNetworkSystem(Network network) { - NetworkOffering no = _networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId()); - if (no.isSystemOnly()) { - return true; - } else { - return false; - } - } - @Override public Map finalizeServicesAndProvidersForNetwork(NetworkOffering offering, Long physicalNetworkId) { Map svcProviders = new HashMap(); @@ -4604,7 +3338,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { String provider = serviceMap.getProvider(); if (provider == null) { - provider = getDefaultUniqueProviderForService(service).getName(); + provider = _networkModel.getDefaultUniqueProviderForService(service).getName(); } // check that provider is supported @@ -4626,25 +3360,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return svcProviders; } - @Override - public Long getPhysicalNetworkId(Network network) { - if (network.getTrafficType() != TrafficType.Guest) { - return getNonGuestNetworkPhysicalNetworkId(network); - } - - Long physicalNetworkId = network.getPhysicalNetworkId(); - NetworkOffering offering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); - if (physicalNetworkId == null) { - physicalNetworkId = findPhysicalNetworkId(network.getDataCenterId(), offering.getTags(), offering.getTrafficType()); - } - return physicalNetworkId; - } - - @Override - public boolean getAllowSubdomainAccessGlobal() { - return _allowSubdomainNetworkAccess; - } - private List getNetworkProviders(long networkId) { List providerNames = _ntwkSrvcDao.getDistinctProviders(networkId); List providers = new ArrayList(); @@ -4655,178 +3370,10 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return providers; } - @Override - public boolean isProviderForNetwork(Provider provider, long networkId) { - if (_ntwkSrvcDao.isProviderForNetwork(networkId, provider) != null) { - return true; - } else { - return false; - } - } - - @Override - public boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId) { - if (_ntwkOfferingSrvcDao.isProviderForNetworkOffering(networkOfferingId, provider)) { - return true; - } else { - return false; - } - } - - @Override - public void canProviderSupportServices(Map> providersMap) { - for (Provider provider : providersMap.keySet()) { - // check if services can be turned off - NetworkElement element = getElementImplementingProvider(provider.getName()); - if (element == null) { - throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getName() + "'"); - } - - Set enabledServices = new HashSet(); - enabledServices.addAll(providersMap.get(provider)); - - if (enabledServices != null && !enabledServices.isEmpty()) { - if (!element.canEnableIndividualServices()) { - Set requiredServices = new HashSet(); - requiredServices.addAll(element.getCapabilities().keySet()); - - if (requiredServices.contains(Network.Service.Gateway)) { - requiredServices.remove(Network.Service.Gateway); - } - - if (requiredServices.contains(Network.Service.Firewall)) { - requiredServices.remove(Network.Service.Firewall); - } - - if (enabledServices.contains(Network.Service.Firewall)) { - enabledServices.remove(Network.Service.Firewall); - } - - // exclude gateway service - if (enabledServices.size() != requiredServices.size()) { - StringBuilder servicesSet = new StringBuilder(); - - for (Service requiredService : requiredServices) { - // skip gateway service as we don't allow setting it via API - if (requiredService == Service.Gateway) { - continue; - } - servicesSet.append(requiredService.getName() + ", "); - } - servicesSet.delete(servicesSet.toString().length() - 2, servicesSet.toString().length()); - - throw new InvalidParameterValueException("Cannot enable subset of Services, Please specify the complete list of Services: " + servicesSet.toString() + " for Service Provider " - + provider.getName()); - } - } - List serviceList = new ArrayList(); - for (Service service : enabledServices) { - // check if the service is provided by this Provider - if (!element.getCapabilities().containsKey(service)) { - throw new UnsupportedServiceException(provider.getName() + " Provider cannot provide service " + service.getName()); - } - serviceList.add(service.getName()); - } - if (!element.verifyServicesCombination(enabledServices)) { - throw new UnsupportedServiceException("Provider " + provider.getName() + " doesn't support services combination: " + serviceList); - } - } - } - } - - @Override - public boolean canAddDefaultSecurityGroup() { - String defaultAdding = _configDao.getValue(Config.SecurityGroupDefaultAdding.key()); - return (defaultAdding != null && defaultAdding.equalsIgnoreCase("true")); - } - - @Override - public List listNetworkOfferingServices(long networkOfferingId) { - List services = new ArrayList(); - List servicesStr = _ntwkOfferingSrvcDao.listServicesForNetworkOffering(networkOfferingId); - for (String serviceStr : servicesStr) { - services.add(Service.getService(serviceStr)); - } - - return services; - } - - @Override - public boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services) { - long physicalNtwkId = findPhysicalNetworkId(zoneId, offering.getTags(), offering.getTrafficType()); - boolean result = true; - List checkedProvider = new ArrayList(); - for (Service service : services) { - // get all the providers, and check if each provider is enabled - List providerNames = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(offering.getId(), service); - for (String providerName : providerNames) { - if (!checkedProvider.contains(providerName)) { - result = result && isProviderEnabledInPhysicalNetwork(physicalNtwkId, providerName); - } - } - } - - return result; - } - - @Override - public boolean checkIpForService(IPAddressVO userIp, Service service, Long networkId) { - if (networkId == null) { - networkId = userIp.getAssociatedWithNetworkId(); - } - - NetworkVO network = _networksDao.findById(networkId); - NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); - if (offering.getGuestType() != GuestType.Isolated) { - return true; - } - PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); - if (!canIpUsedForService(publicIp, service, networkId)) { - return false; - } - if (!offering.isConserveMode()) { - return canIpUsedForNonConserveService(publicIp, service); - } - return true; - } - - - @Override - public void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue) { - for (Provider provider : providers) { - NetworkElement element = getElementImplementingProvider(provider.getName()); - if (element != null) { - Map> elementCapabilities = element.getCapabilities(); - if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { - throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider.getName()); - } - Map serviceCapabilities = elementCapabilities.get(service); - if (serviceCapabilities == null || serviceCapabilities.isEmpty()) { - throw new UnsupportedServiceException("Service " + service.getName() + " doesn't have capabilites for element=" + element.getName() + " implementing Provider=" + provider.getName()); - } - - String value = serviceCapabilities.get(cap); - if (value == null || value.isEmpty()) { - throw new UnsupportedServiceException("Service " + service.getName() + " doesn't have capability " + cap.getName() + " for element=" + element.getName() + " implementing Provider=" - + provider.getName()); - } - - capValue = capValue.toLowerCase(); - - if (!value.contains(capValue)) { - throw new UnsupportedServiceException("Service " + service.getName() + " doesn't support value " + capValue + " for capability " + cap.getName() + " for element=" + element.getName() - + " implementing Provider=" + provider.getName()); - } - } else { - throw new UnsupportedServiceException("Unable to find network element for provider " + provider.getName()); - } - } - } - @Override public IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) throws InsufficientAddressCapacityException { - Network guestNetwork = getNetwork(networkId); + Network guestNetwork = _networksDao.findById(networkId); NetworkOffering off = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); IpAddress ip = null; if ((off.getElasticLb() && forElasticLb) || (off.getElasticIp() && forElasticIp)) { @@ -4871,21 +3418,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { return success; } - @Override - public void checkNetworkPermissions(Account owner, Network network) { - // Perform account permission check - if (network.getGuestType() != Network.GuestType.Shared) { - List networkMap = _networksDao.listBy(owner.getId(), network.getId()); - if (networkMap == null || networkMap.isEmpty()) { - throw new PermissionDeniedException("Unable to use network with id= " + network.getId() + ", permission denied"); - } - } else { - if (!isNetworkAvailableInDomain(network.getId(), owner.getDomainId())) { - throw new PermissionDeniedException("Shared network id=" + network.getId() + " is not available in domain id=" + owner.getDomainId()); - } - } - } - public void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile vm, Network network, String requestedIp) throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException { if (nic.getIp4Address() == null) { @@ -4905,184 +3437,19 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { nic.setDns2(dc.getDns2()); } - @Override - public String getDefaultPublicTrafficLabel(long dcId, HypervisorType hypervisorType) { - try { - PhysicalNetwork publicPhyNetwork = getOnePhysicalNetworkByZoneAndTrafficType(dcId, TrafficType.Public); - PhysicalNetworkTrafficTypeVO publicTraffic = _pNTrafficTypeDao.findBy(publicPhyNetwork.getId(), - TrafficType.Public); - if (publicTraffic != null) { - String label = null; - switch (hypervisorType) { - case XenServer: - label = publicTraffic.getXenNetworkLabel(); - break; - case KVM: - label = publicTraffic.getKvmNetworkLabel(); - break; - case VMware: - label = publicTraffic.getVmwareNetworkLabel(); - break; - } - return label; - } - } catch (Exception ex) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Failed to retrieve the default label for public traffic." + "zone: " + dcId + " hypervisor: " + hypervisorType + " due to: " + ex.getMessage()); - } - } - return null; - } - - @Override - public String getDefaultGuestTrafficLabel(long dcId, HypervisorType hypervisorType) { - try { - PhysicalNetwork guestPhyNetwork = getOnePhysicalNetworkByZoneAndTrafficType(dcId, TrafficType.Guest); - PhysicalNetworkTrafficTypeVO guestTraffic = _pNTrafficTypeDao.findBy(guestPhyNetwork.getId(), - TrafficType.Guest); - if (guestTraffic != null) { - String label = null; - switch (hypervisorType) { - case XenServer: - label = guestTraffic.getXenNetworkLabel(); - break; - case KVM: - label = guestTraffic.getKvmNetworkLabel(); - break; - case VMware: - label = guestTraffic.getVmwareNetworkLabel(); - break; - } - return label; - } - } catch (Exception ex) { - if (s_logger.isDebugEnabled()) { - s_logger.debug("Failed to retrive the default label for management traffic:" + "zone: " + dcId + - " hypervisor: " + hypervisorType + " due to:" + ex.getMessage()); - } - } - return null; - } - - private PhysicalNetwork getOnePhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - List networkList = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); - - if (networkList.isEmpty()) { - throw new InvalidParameterValueException("Unable to find the default physical network with traffic=" - + trafficType + " in zone id=" + zoneId + ". "); - } - - if (networkList.size() > 1) { - s_logger.info("More than one physical networks exist in zone id=" + zoneId + " with traffic type=" - + trafficType + ". "); - } - - return networkList.get(0); - } - @Override - public List listNetworksByVpc(long vpcId) { - return _networksDao.listByVpc(vpcId); - } - - @Override - public String getDefaultNetworkDomain() { - return _networkDomain; - } - - @Override - public List getNtwkOffDistinctProviders(long ntkwOffId) { - List providerNames = _ntwkOfferingSrvcDao.getDistinctProviders(ntkwOffId); - List providers = new ArrayList(); - for (String providerName : providerNames) { - providers.add(Network.Provider.getProvider(providerName)); - } - - return providers; - } - - @Override - public boolean isVmPartOfNetwork(long vmId, long ntwkId) { - if (_nicDao.findNonReleasedByInstanceIdAndNetworkId(ntwkId, vmId) != null) { - return true; - } - return false; - } - - @Override public boolean setupDns(Network network, Provider provider) { - boolean dnsProvided = isProviderSupportServiceInNetwork(network.getId(), Service.Dns, provider ); - boolean dhcpProvided =isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, + boolean dnsProvided = _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dns, provider ); + boolean dhcpProvided =_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, provider); boolean setupDns = dnsProvided || dhcpProvided; return setupDns; } - - @Override - public List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType) { - - List pNtwks = _physicalNetworkDao.listByZone(zoneId); - - Iterator it = pNtwks.iterator(); - while (it.hasNext()) { - PhysicalNetwork pNtwk = it.next(); - if (!_pNTrafficTypeDao.isTrafficTypeSupported(pNtwk.getId(), trafficType)) { - it.remove(); - } - } - return pNtwks; - } - @Override - public boolean isPrivateGateway(Nic guestNic) { - Network network = getNetwork(guestNic.getNetworkId()); - if (network.getTrafficType() != TrafficType.Guest || network.getNetworkOfferingId() != _privateOfferingId.longValue()) { - return false; - } - return true; - } - - @Override - public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context, - VirtualMachineProfileImpl vmProfile, boolean prepare) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, - ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - - VirtualMachine vm = vmProfile.getVirtualMachine(); - NetworkVO networkVO = _networksDao.findById(network.getId()); - DataCenter dc = _configMgr.getZone(network.getDataCenterId()); - Host host = _hostDao.findById(vm.getHostId()); - DeployDestination dest = new DeployDestination(dc, null, null, host); - - NicProfile nic = getNicProfileForVm(network, requested, vm); - - //1) allocate nic (if needed) - if (nic == null) { - int deviceId = _nicDao.countNics(vm.getId()); - - nic = allocateNic(requested, network, false, - deviceId, vmProfile).first(); - - if (nic == null) { - throw new CloudRuntimeException("Failed to allocate nic for vm " + vm + " in network " + network); - } - - s_logger.debug("Nic is allocated successfully for vm " + vm + " in network " + network); - } - - //2) prepare nic - if (prepare) { - nic = prepareNic(vmProfile, dest, context, nic.getId(), networkVO); - s_logger.debug("Nic is prepared successfully for vm " + vm + " in network " + network); - } - - return nic; - } - - private NicProfile getNicProfileForVm(Network network, NicProfile requested, VirtualMachine vm) { + protected NicProfile getNicProfileForVm(Network network, NicProfile requested, VirtualMachine vm) { NicProfile nic = null; if (requested != null && requested.getBroadCastUri() != null) { String broadcastUri = requested.getBroadCastUri().toString(); @@ -5090,22 +3457,77 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { NicVO nicVO = _nicDao.findByNetworkIdInstanceIdAndBroadcastUri(network.getId(), vm.getId(), broadcastUri); if (nicVO != null) { if (ipAddress == null || nicVO.getIp4Address().equals(ipAddress)) { - nic = getNicProfile(vm, network.getId(), broadcastUri); + nic = _networkModel.getNicProfile(vm, network.getId(), broadcastUri); } } } else { NicVO nicVO = _nicDao.findByInstanceIdAndNetworkId(network.getId(), vm.getId()); if (nicVO != null) { - nic = getNicProfile(vm, network.getId(), null); + nic = _networkModel.getNicProfile(vm, network.getId(), null); } } return nic; } + @Override + public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context, VirtualMachineProfileImpl vmProfile, boolean prepare) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + + VirtualMachine vm = vmProfile.getVirtualMachine(); + NetworkVO networkVO = _networksDao.findById(network.getId()); + DataCenter dc = _configMgr.getZone(network.getDataCenterId()); + Host host = _hostDao.findById(vm.getHostId()); + DeployDestination dest = new DeployDestination(dc, null, null, host); + + NicProfile nic = getNicProfileForVm(network, requested, vm); + + //1) allocate nic (if needed) + if (nic == null) { + int deviceId = _nicDao.countNics(vm.getId()); + + nic = allocateNic(requested, network, false, + deviceId, vmProfile).first(); + + if (nic == null) { + throw new CloudRuntimeException("Failed to allocate nic for vm " + vm + " in network " + network); + } + + s_logger.debug("Nic is allocated successfully for vm " + vm + " in network " + network); + } + + //2) prepare nic + if (prepare) { + nic = prepareNic(vmProfile, dest, context, nic.getId(), networkVO); + s_logger.debug("Nic is prepared successfully for vm " + vm + " in network " + network); + } + + return nic; + } + @Override + public List getNicProfiles(VirtualMachine vm) { + List nics = _nicDao.listByVmId(vm.getId()); + List profiles = new ArrayList(); + + if (nics != null) { + for (Nic nic : nics) { + NetworkVO network = _networksDao.findById(nic.getNetworkId()); + Integer networkRate = _networkModel.getNetworkRate(network.getId(), vm.getId()); + + NetworkGuru guru = _networkGurus.get(network.getGuruName()); + NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), + networkRate, _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(vm.getHypervisorType(), network)); + guru.updateNicProfile(profile, network); + profiles.add(profile); + } + } + return profiles; + } @Override public int getNetworkLockTimeout() { return _networkLockTimeout; } + } diff --git a/server/src/com/cloud/network/NetworkModel.java b/server/src/com/cloud/network/NetworkModel.java new file mode 100644 index 00000000000..27ab38d099c --- /dev/null +++ b/server/src/com/cloud/network/NetworkModel.java @@ -0,0 +1,250 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.cloud.dc.Vlan; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.Network.Capability; +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.NetworkElement; +import com.cloud.network.element.UserDataServiceProvider; +import com.cloud.network.rules.FirewallRule; +import com.cloud.offering.NetworkOffering; +import com.cloud.offerings.NetworkOfferingVO; +import com.cloud.user.Account; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.VirtualMachine; + +/** + * @author chiradeep + * + */ +public interface NetworkModel { + + /** + * Lists IP addresses that belong to VirtualNetwork VLANs + * + * @param accountId + * - account that the IP address should belong to + * @param associatedNetworkId + * TODO + * @param sourceNat + * - (optional) true if the IP address should be a source NAT address + * @return - list of IP addresses + */ + List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat); + + List getSystemAccountNetworkOfferings(String... offeringNames); + + List getNics(long vmId); + + String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException; + + boolean validateRule(FirewallRule rule); + + PublicIpAddress getPublicIpAddress(long ipAddressId); + + List listPodVlans(long podId); + + List listNetworksUsedByVm(long vmId, boolean isSystem); + + Nic getNicInNetwork(long vmId, long networkId); + + List getNicsForTraffic(long vmId, TrafficType type); + + Network getDefaultNetworkForVm(long vmId); + + Nic getDefaultNic(long vmId); + + UserDataServiceProvider getUserDataUpdateProvider(Network network); + + boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId); + + Map getNetworkServiceCapabilities(long networkId, Service service); + + boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services); + + NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId); + + String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId); + + List listNetworksForAccount(long accountId, long zoneId, Network.GuestType type); + + List listAllNetworksInAllZonesByType(Network.GuestType type); + + String getGlobalGuestDomainSuffix(); + + String getStartIpAddress(long networkId); + + String getIpInNetwork(long vmId, long networkId); + + String getIpInNetworkIncludingRemoved(long vmId, long networkId); + + Long getPodIdForVlan(long vlanDbId); + + List listNetworkOfferingsForUpgrade(long networkId); + + boolean isSecurityGroupSupportedInNetwork(Network network); + + boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider); + + boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName); + + String getNetworkTag(HypervisorType hType, Network network); + + List getElementServices(Provider provider); + + boolean canElementEnableIndividualServices(Provider provider); + + boolean areServicesSupportedInNetwork(long networkId, Service... services); + + boolean isNetworkSystem(Network network); + + Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service); + + Long getPhysicalNetworkId(Network network); + + boolean getAllowSubdomainAccessGlobal(); + + boolean isProviderForNetwork(Provider provider, long networkId); + + boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId); + + void canProviderSupportServices(Map> providersMap); + + List getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType); + + boolean canAddDefaultSecurityGroup(); + + List listNetworkOfferingServices(long networkOfferingId); + + boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services); + + Map> getIpToServices(List publicIps, boolean rulesRevoked, + boolean includingFirewall); + + Map> getProviderToIpList(Network network, Map> ipToServices); + + boolean checkIpForService(IPAddressVO ip, Service service, Long networkId); + + void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue); + + Provider getDefaultUniqueProviderForService(String serviceName); + + void checkNetworkPermissions(Account owner, Network network); + + String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType); + + String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType); + + String getDefaultPublicTrafficLabel(long dcId, HypervisorType vmware); + + String getDefaultGuestTrafficLabel(long dcId, HypervisorType vmware); + + /** + * @param providerName + * @return + */ + NetworkElement getElementImplementingProvider(String providerName); + + /** + * @param accountId + * @param zoneId + * @return + */ + String getAccountNetworkDomain(long accountId, long zoneId); + + /** + * @return + */ + String getDefaultNetworkDomain(); + + /** + * @param ntwkOffId + * @return + */ + List getNtwkOffDistinctProviders(long ntwkOffId); + + /** + * @param accountId + * @param dcId + * @param sourceNat + * @return + */ + List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat); + + /** + * @param zoneId + * @param trafficType + * @return + */ + List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType); + + /** + * @param guestNic + * @return + */ + boolean isPrivateGateway(Nic guestNic); + + Map> getNetworkCapabilities(long networkId); + + Network getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType); + + Long getDedicatedNetworkDomain(long networkId); + + Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId); + + List listSupportedNetworkServiceProviders(String serviceName); + + List listNetworksByVpc(long vpcId); + + boolean canUseForDeploy(Network network); + + Network getExclusiveGuestNetwork(long zoneId); + + long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType); + + Integer getNetworkRate(long networkId, Long vmId); + + boolean isVmPartOfNetwork(long vmId, long ntwkId); + + PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType); + + Network getNetwork(long networkId); + + IpAddress getIp(long sourceIpAddressId); + + boolean isNetworkAvailableInDomain(long networkId, long domainId); + + NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri); + + Set getAvailableIps(Network network, String requestedIp); + + String getDomainNetworkDomain(long domainId, long zoneId); + +} \ No newline at end of file diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java new file mode 100644 index 00000000000..819c57b0da5 --- /dev/null +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -0,0 +1,1734 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + +import java.security.InvalidParameterException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +import org.apache.log4j.Logger; + +import com.cloud.configuration.Config; +import com.cloud.configuration.ConfigurationManager; +import com.cloud.configuration.dao.ConfigurationDao; +import com.cloud.dc.PodVlanMapVO; +import com.cloud.dc.Vlan.VlanType; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.PodVlanMapDao; +import com.cloud.dc.dao.VlanDao; +import com.cloud.domain.DomainVO; +import com.cloud.domain.dao.DomainDao; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.UnsupportedServiceException; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.IpAddress.State; +import com.cloud.network.Network.Capability; +import com.cloud.network.Network.GuestType; +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.dao.FirewallRulesDao; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDomainDao; +import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; +import com.cloud.network.dao.PhysicalNetworkServiceProviderVO; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; +import com.cloud.network.element.LoadBalancingServiceProvider; +import com.cloud.network.element.NetworkElement; +import com.cloud.network.element.UserDataServiceProvider; +import com.cloud.network.lb.LoadBalancingRule; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.dao.PortForwardingRulesDao; +import com.cloud.network.vpc.dao.PrivateIpDao; +import com.cloud.offering.NetworkOffering; +import com.cloud.offerings.NetworkOfferingServiceMapVO; +import com.cloud.offerings.NetworkOfferingVO; +import com.cloud.offerings.dao.NetworkOfferingDao; +import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; +import com.cloud.user.Account; +import com.cloud.user.DomainManager; +import com.cloud.user.dao.AccountDao; +import com.cloud.utils.component.Adapters; +import com.cloud.utils.component.Inject; +import com.cloud.utils.db.DB; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.NicVO; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachine.Type; +import com.cloud.vm.dao.NicDao; +import com.cloud.vm.dao.VMInstanceDao; + + +public class NetworkModelImpl implements NetworkModel{ + static final Logger s_logger = Logger.getLogger(NetworkModelImpl.class); + + String _name; + @Inject + DataCenterDao _dcDao = null; + @Inject + VlanDao _vlanDao = null; + @Inject + IPAddressDao _ipAddressDao = null; + @Inject + AccountDao _accountDao = null; + @Inject + DomainDao _domainDao = null; + @Inject + ConfigurationDao _configDao; + + @Inject + ConfigurationManager _configMgr; + + @Inject + NetworkOfferingDao _networkOfferingDao = null; + @Inject + NetworkDao _networksDao = null; + @Inject + NicDao _nicDao = null; + + @Inject + PodVlanMapDao _podVlanMapDao; + + @Inject(adapter = NetworkElement.class) + Adapters _networkElements; + + @Inject + NetworkDomainDao _networkDomainDao; + @Inject + VMInstanceDao _vmDao; + + @Inject + FirewallRulesDao _firewallDao; + @Inject + DomainManager _domainMgr; + + @Inject + NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao; + @Inject + PhysicalNetworkDao _physicalNetworkDao; + @Inject + PhysicalNetworkServiceProviderDao _pNSPDao; + @Inject + PortForwardingRulesDao _portForwardingRulesDao; + @Inject + PhysicalNetworkTrafficTypeDao _pNTrafficTypeDao; + @Inject + NetworkServiceMapDao _ntwkSrvcDao; + @Inject + PrivateIpDao _privateIpDao; + + + + private final HashMap _systemNetworks = new HashMap(5); + static Long _privateOfferingId = null; + + + SearchBuilder IpAddressSearch; + SearchBuilder NicForTrafficTypeSearch; + + + String _networkDomain; + boolean _allowSubdomainNetworkAccess; + + private Map _configs; + + HashMap _lastNetworkIdsToFree = new HashMap(); + + static HashMap> s_serviceToImplementedProvidersMap = new HashMap>(); + static HashMap s_providerToNetworkElementMap = new HashMap(); + /** + * + */ + public NetworkModelImpl() { + super(); + } + + @Override + public NetworkElement getElementImplementingProvider(String providerName) { + String elementName = s_providerToNetworkElementMap.get(providerName); + NetworkElement element = _networkElements.get(elementName); + return element; + } + + @Override + public List getElementServices(Provider provider) { + NetworkElement element = getElementImplementingProvider(provider.getName()); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getName() + "'"); + } + return new ArrayList(element.getCapabilities().keySet()); + } + + @Override + public boolean canElementEnableIndividualServices(Provider provider) { + NetworkElement element = getElementImplementingProvider(provider.getName()); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getName() + "'"); + } + return element.canEnableIndividualServices(); + } + + Set getPublicIpPurposeInRules(PublicIp ip, boolean includeRevoked, boolean includingFirewall) { + Set result = new HashSet(); + List rules = null; + if (includeRevoked) { + rules = _firewallDao.listByIp(ip.getId()); + } else { + rules = _firewallDao.listByIpAndNotRevoked(ip.getId()); + } + + if (rules == null || rules.isEmpty()) { + return null; + } + + for (FirewallRuleVO rule : rules) { + if (rule.getPurpose() != Purpose.Firewall || includingFirewall) { + result.add(rule.getPurpose()); + } + } + + return result; + } + + @Override + public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { + Map> ipToServices = new HashMap>(); + + if (publicIps != null && !publicIps.isEmpty()) { + Set networkSNAT = new HashSet(); + for (PublicIp ip : publicIps) { + Set services = ipToServices.get(ip); + if (services == null) { + services = new HashSet(); + } + if (ip.isSourceNat()) { + if (!networkSNAT.contains(ip.getAssociatedWithNetworkId())) { + services.add(Service.SourceNat); + networkSNAT.add(ip.getAssociatedWithNetworkId()); + } else { + CloudRuntimeException ex = new CloudRuntimeException("Multiple generic soure NAT IPs provided for network"); + // see the IPAddressVO.java class. + ex.addProxyObject("user_ip_address", ip.getAssociatedWithNetworkId(), "networkId"); + throw ex; + } + } + ipToServices.put(ip, services); + + // if IP in allocating state then it will not have any rules attached so skip IPAssoc to network service + // provider + if (ip.getState() == State.Allocating) { + continue; + } + + // check if any active rules are applied on the public IP + Set purposes = getPublicIpPurposeInRules(ip, false, includingFirewall); + // Firewall rules didn't cover static NAT + if (ip.isOneToOneNat() && ip.getAssociatedWithVmId() != null) { + if (purposes == null) { + purposes = new HashSet(); + } + purposes.add(Purpose.StaticNat); + } + if (purposes == null || purposes.isEmpty()) { + // since no active rules are there check if any rules are applied on the public IP but are in + // revoking state + + purposes = getPublicIpPurposeInRules(ip, true, includingFirewall); + if (ip.isOneToOneNat()) { + if (purposes == null) { + purposes = new HashSet(); + } + purposes.add(Purpose.StaticNat); + } + if (purposes == null || purposes.isEmpty()) { + // IP is not being used for any purpose so skip IPAssoc to network service provider + continue; + } else { + if (rulesRevoked) { + // no active rules/revoked rules are associated with this public IP, so remove the + // association with the provider + ip.setState(State.Releasing); + } else { + if (ip.getState() == State.Releasing) { + // rules are not revoked yet, so don't let the network service provider revoke the IP + // association + // mark IP is allocated so that IP association will not be removed from the provider + ip.setState(State.Allocated); + } + } + } + } + if (purposes.contains(Purpose.StaticNat)) { + services.add(Service.StaticNat); + } + if (purposes.contains(Purpose.LoadBalancing)) { + services.add(Service.Lb); + } + if (purposes.contains(Purpose.PortForwarding)) { + services.add(Service.PortForwarding); + } + if (purposes.contains(Purpose.Vpn)) { + services.add(Service.Vpn); + } + if (purposes.contains(Purpose.Firewall)) { + services.add(Service.Firewall); + } + if (services.isEmpty()) { + continue; + } + ipToServices.put(ip, services); + } + } + return ipToServices; + } + + public boolean canIpUsedForNonConserveService(PublicIp ip, Service service) { + // If it's non-conserve mode, then the new ip should not be used by any other services + List ipList = new ArrayList(); + ipList.add(ip); + Map> ipToServices = getIpToServices(ipList, false, false); + Set services = ipToServices.get(ip); + // Not used currently, safe + if (services == null || services.isEmpty()) { + return true; + } + // Since it's non-conserve mode, only one service should used for IP + if (services.size() != 1) { + throw new InvalidParameterException("There are multiple services used ip " + ip.getAddress() + "."); + } + if (service != null && !((Service) services.toArray()[0] == service || service.equals(Service.Firewall))) { + throw new InvalidParameterException("The IP " + ip.getAddress() + " is already used as " + ((Service) services.toArray()[0]).getName() + " rather than " + service.getName()); + } + return true; + } + + Map> getServiceProvidersMap(long networkId) { + Map> map = new HashMap>(); + List nsms = _ntwkSrvcDao.getServicesInNetwork(networkId); + for (NetworkServiceMapVO nsm : nsms) { + Set providers = map.get(Service.getService(nsm.getService())); + if (providers == null) { + providers = new HashSet(); + } + providers.add(Provider.getProvider(nsm.getProvider())); + map.put(Service.getService(nsm.getService()), providers); + } + return map; + } + + public boolean canIpUsedForService(PublicIp publicIp, Service service, Long networkId) { + List ipList = new ArrayList(); + ipList.add(publicIp); + Map> ipToServices = getIpToServices(ipList, false, true); + Set services = ipToServices.get(publicIp); + if (services == null || services.isEmpty()) { + return true; + } + + if (networkId == null) { + networkId = publicIp.getAssociatedWithNetworkId(); + } + + // We only support one provider for one service now + Map> serviceToProviders = getServiceProvidersMap(networkId); + Set oldProviders = serviceToProviders.get(services.toArray()[0]); + Provider oldProvider = (Provider) oldProviders.toArray()[0]; + // Since IP already has service to bind with, the oldProvider can't be null + Set newProviders = serviceToProviders.get(service); + if (newProviders == null || newProviders.isEmpty()) { + throw new InvalidParameterException("There is no new provider for IP " + publicIp.getAddress() + " of service " + service.getName() + "!"); + } + Provider newProvider = (Provider) newProviders.toArray()[0]; + if (!oldProvider.equals(newProvider)) { + throw new InvalidParameterException("There would be multiple providers for IP " + publicIp.getAddress() + "!"); + } + return true; + } + + Map> getProviderServicesMap(long networkId) { + Map> map = new HashMap>(); + List nsms = _ntwkSrvcDao.getServicesInNetwork(networkId); + for (NetworkServiceMapVO nsm : nsms) { + Set services = map.get(Provider.getProvider(nsm.getProvider())); + if (services == null) { + services = new HashSet(); + } + services.add(Service.getService(nsm.getService())); + map.put(Provider.getProvider(nsm.getProvider()), services); + } + return map; + } + + @Override + public Map> getProviderToIpList(Network network, Map> ipToServices) { + NetworkOffering offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); + if (!offering.isConserveMode()) { + for (PublicIp ip : ipToServices.keySet()) { + Set services = new HashSet() ; + services.addAll(ipToServices.get(ip)); + if (services != null && services.contains(Service.Firewall)) { + services.remove(Service.Firewall); + } + if (services != null && services.size() > 1) { + throw new CloudRuntimeException("Ip " + ip.getAddress() + " is used by multiple services!"); + } + } + } + Map> serviceToIps = new HashMap>(); + for (PublicIp ip : ipToServices.keySet()) { + for (Service service : ipToServices.get(ip)) { + Set ips = serviceToIps.get(service); + if (ips == null) { + ips = new HashSet(); + } + ips.add(ip); + serviceToIps.put(service, ips); + } + } + // TODO Check different provider for same IP + Map> providerToServices = getProviderServicesMap(network.getId()); + Map> providerToIpList = new HashMap>(); + for (Provider provider : providerToServices.keySet()) { + Set services = providerToServices.get(provider); + ArrayList ipList = new ArrayList(); + Set ipSet = new HashSet(); + for (Service service : services) { + Set serviceIps = serviceToIps.get(service); + if (serviceIps == null || serviceIps.isEmpty()) { + continue; + } + ipSet.addAll(serviceIps); + } + Set sourceNatIps = serviceToIps.get(Service.SourceNat); + if (sourceNatIps != null && !sourceNatIps.isEmpty()) { + ipList.addAll(0, sourceNatIps); + ipSet.removeAll(sourceNatIps); + } + ipList.addAll(ipSet); + providerToIpList.put(provider, ipList); + } + return providerToIpList; + } + + + + @Override + public List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat) { + SearchCriteria sc = IpAddressSearch.create(); + sc.setParameters("accountId", accountId); + sc.setParameters("associatedWithNetworkId", associatedNetworkId); + + if (sourceNat != null) { + sc.addAnd("sourceNat", SearchCriteria.Op.EQ, sourceNat); + } + sc.setJoinParameters("virtualNetworkVlanSB", "vlanType", VlanType.VirtualNetwork); + + return _ipAddressDao.search(sc, null); + } + + @Override + public List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat) { + SearchCriteria sc = IpAddressSearch.create(); + sc.setParameters("accountId", accountId); + sc.setParameters("dataCenterId", dcId); + + if (sourceNat != null) { + sc.addAnd("sourceNat", SearchCriteria.Op.EQ, sourceNat); + } + sc.setJoinParameters("virtualNetworkVlanSB", "vlanType", VlanType.VirtualNetwork); + + return _ipAddressDao.search(sc, null); + } + + @Override + public List getNics(long vmId) { + return _nicDao.listByVmId(vmId); + } + + + + @Override + public String getNextAvailableMacAddressInNetwork(long networkId) throws InsufficientAddressCapacityException { + String mac = _networksDao.getNextAvailableMacAddress(networkId); + if (mac == null) { + throw new InsufficientAddressCapacityException("Unable to create another mac address", Network.class, networkId); + } + return mac; + } + + @Override + @DB + public Network getNetwork(long id) { + return _networksDao.findById(id); + } + + @Override + public boolean canUseForDeploy(Network network) { + if (network.getTrafficType() != TrafficType.Guest) { + return false; + } + boolean hasFreeIps = true; + if (network.getGuestType() == GuestType.Shared) { + hasFreeIps = _ipAddressDao.countFreeIPsInNetwork(network.getId()) > 0; + } else { + hasFreeIps = (getAvailableIps(network, null)).size() > 0; + } + + return hasFreeIps; + } + + @Override + public boolean validateRule(FirewallRule rule) { + Network network = _networksDao.findById(rule.getNetworkId()); + Purpose purpose = rule.getPurpose(); + for (NetworkElement ne : _networkElements) { + boolean validated; + switch (purpose) { + case LoadBalancing: + if (!(ne instanceof LoadBalancingServiceProvider)) { + continue; + } + validated = ((LoadBalancingServiceProvider) ne).validateLBRule(network, (LoadBalancingRule) rule); + if (!validated) + return false; + break; + default: + s_logger.debug("Unable to validate network rules for purpose: " + purpose.toString()); + validated = false; + } + } + return true; + } + + @Override + public Map> getNetworkCapabilities(long networkId) { + + Map> networkCapabilities = new HashMap>(); + + // list all services of this networkOffering + List servicesMap = _ntwkSrvcDao.getServicesInNetwork(networkId); + for (NetworkServiceMapVO instance : servicesMap) { + Service service = Service.getService(instance.getService()); + NetworkElement element = getElementImplementingProvider(instance.getProvider()); + if (element != null) { + Map> elementCapabilities = element.getCapabilities(); + ; + if (elementCapabilities != null) { + networkCapabilities.put(service, elementCapabilities.get(service)); + } + } + } + + return networkCapabilities; + } + + @Override + public Map getNetworkServiceCapabilities(long networkId, Service service) { + + if (!areServicesSupportedInNetwork(networkId, service)) { + // TBD: networkId to uuid. No VO object being passed. So we will need to call + // addProxyObject with hardcoded tablename. Or we should probably look up the correct dao proxy object. + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported in the network id=" + networkId); + } + + Map serviceCapabilities = new HashMap(); + + // get the Provider for this Service for this offering + String provider = _ntwkSrvcDao.getProviderForServiceInNetwork(networkId, service); + + NetworkElement element = getElementImplementingProvider(provider); + if (element != null) { + Map> elementCapabilities = element.getCapabilities(); + ; + + if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider); + } + serviceCapabilities = elementCapabilities.get(service); + } + + return serviceCapabilities; + } + + @Override + public Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { + + if (!areServicesSupportedByNetworkOffering(offering.getId(), service)) { + // TBD: We should be sending networkOfferingId and not the offering object itself. + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the network offering " + offering); + } + + Map serviceCapabilities = new HashMap(); + + // get the Provider for this Service for this offering + List providers = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(offering.getId(), service); + if (providers.isEmpty()) { + // TBD: We should be sending networkOfferingId and not the offering object itself. + throw new InvalidParameterValueException("Service " + service.getName() + " is not supported by the network offering " + offering); + } + + // FIXME - in post 3.0 we are going to support multiple providers for the same service per network offering, so + // we have to calculate capabilities for all of them + String provider = providers.get(0); + + // FIXME we return the capabilities of the first provider of the service - what if we have multiple providers + // for same Service? + NetworkElement element = getElementImplementingProvider(provider); + if (element != null) { + Map> elementCapabilities = element.getCapabilities(); + ; + + if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { + // TBD: We should be sending providerId and not the offering object itself. + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider); + } + serviceCapabilities = elementCapabilities.get(service); + } + + return serviceCapabilities; + } + + @Override + public NetworkVO getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { + // find system public network offering + Long networkOfferingId = null; + List offerings = _networkOfferingDao.listSystemNetworkOfferings(); + for (NetworkOfferingVO offering : offerings) { + if (offering.getTrafficType() == trafficType) { + networkOfferingId = offering.getId(); + break; + } + } + + if (networkOfferingId == null) { + throw new InvalidParameterValueException("Unable to find system network offering with traffic type " + trafficType); + } + + List networks = _networksDao.listBy(Account.ACCOUNT_ID_SYSTEM, networkOfferingId, zoneId); + if (networks == null || networks.isEmpty()) { + // TBD: send uuid instead of zoneId. Hardcode tablename in call to addProxyObject(). + throw new InvalidParameterValueException("Unable to find network with traffic type " + trafficType + " in zone " + zoneId); + } + return networks.get(0); + } + + @Override + public NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId) { + List networks = _networksDao.listByZoneSecurityGroup(zoneId); + if (networks == null || networks.isEmpty()) { + return null; + } + + if (networks.size() > 1) { + s_logger.debug("There are multiple network with security group enabled? select one of them..."); + } + return networks.get(0); + } + + @Override + public PublicIpAddress getPublicIpAddress(long ipAddressId) { + IPAddressVO addr = _ipAddressDao.findById(ipAddressId); + if (addr == null) { + return null; + } + + return new PublicIp(addr, _vlanDao.findById(addr.getVlanId()), NetUtils.createSequenceBasedMacAddress(addr.getMacAddress())); + } + + @Override + public List listPodVlans(long podId) { + List vlans = _vlanDao.listVlansForPodByType(podId, VlanType.DirectAttached); + return vlans; + } + + @Override + public List listNetworksUsedByVm(long vmId, boolean isSystem) { + List networks = new ArrayList(); + + List nics = _nicDao.listByVmId(vmId); + if (nics != null) { + for (Nic nic : nics) { + NetworkVO network = _networksDao.findByIdIncludingRemoved(nic.getNetworkId()); + + if (isNetworkSystem(network) == isSystem) { + networks.add(network); + } + } + } + + return networks; + } + + @Override + public Nic getNicInNetwork(long vmId, long networkId) { + return _nicDao.findByInstanceIdAndNetworkId(networkId, vmId); + } + + @Override + public String getIpInNetwork(long vmId, long networkId) { + Nic guestNic = getNicInNetwork(vmId, networkId); + assert (guestNic != null && guestNic.getIp4Address() != null) : "Vm doesn't belong to network associated with " + + "ipAddress or ip4 address is null"; + return guestNic.getIp4Address(); + } + + @Override + public String getIpInNetworkIncludingRemoved(long vmId, long networkId) { + Nic guestNic = getNicInNetworkIncludingRemoved(vmId, networkId); + assert (guestNic != null && guestNic.getIp4Address() != null) : "Vm doesn't belong to network associated with " + + "ipAddress or ip4 address is null"; + return guestNic.getIp4Address(); + } + + @Override + public List getNicsForTraffic(long vmId, TrafficType type) { + SearchCriteria sc = NicForTrafficTypeSearch.create(); + sc.setParameters("instance", vmId); + sc.setJoinParameters("network", "traffictype", type); + + return _nicDao.search(sc, null); + } + + @Override + public IpAddress getIp(long ipAddressId) { + return _ipAddressDao.findById(ipAddressId); + } + + @Override + public Network getDefaultNetworkForVm(long vmId) { + Nic defaultNic = getDefaultNic(vmId); + if (defaultNic == null) { + return null; + } else { + return _networksDao.findById(defaultNic.getNetworkId()); + } + } + + @Override + public Nic getDefaultNic(long vmId) { + List nics = _nicDao.listByVmId(vmId); + Nic defaultNic = null; + if (nics != null) { + for (Nic nic : nics) { + if (nic.isDefaultNic()) { + defaultNic = nic; + break; + } + } + } else { + s_logger.debug("Unable to find default network for the vm; vm doesn't have any nics"); + return null; + } + + if (defaultNic == null) { + s_logger.debug("Unable to find default network for the vm; vm doesn't have default nic"); + } + + return defaultNic; + + } + + @Override + public UserDataServiceProvider getUserDataUpdateProvider(Network network) { + String userDataProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.UserData); + + if (userDataProvider == null) { + s_logger.debug("Network " + network + " doesn't support service " + Service.UserData.getName()); + return null; + } + + return (UserDataServiceProvider)getElementImplementingProvider(userDataProvider); + } + + @Override + public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { + return (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(networkOfferingId, services)); + } + + @Override + public boolean areServicesSupportedInNetwork(long networkId, Service... services) { + return (_ntwkSrvcDao.areServicesSupportedInNetwork(networkId, services)); + } + + @Override + public String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId) { + + List virtualNetworks = _networksDao.listByZoneAndGuestType(accountId, dataCenterId, Network.GuestType.Isolated, false); + + if (virtualNetworks.isEmpty()) { + s_logger.trace("Unable to find default Virtual network account id=" + accountId); + return null; + } + + NetworkVO virtualNetwork = virtualNetworks.get(0); + + NicVO networkElementNic = _nicDao.findByNetworkIdAndType(virtualNetwork.getId(), Type.DomainRouter); + + if (networkElementNic != null) { + return networkElementNic.getIp4Address(); + } else { + s_logger.warn("Unable to set find network element for the network id=" + virtualNetwork.getId()); + return null; + } + } + + @Override + public List listNetworksForAccount(long accountId, long zoneId, Network.GuestType type) { + List accountNetworks = new ArrayList(); + List zoneNetworks = _networksDao.listByZone(zoneId); + + for (NetworkVO network : zoneNetworks) { + if (!isNetworkSystem(network)) { + if (network.getGuestType() == Network.GuestType.Shared || !_networksDao.listBy(accountId, network.getId()).isEmpty()) { + if (type == null || type == network.getGuestType()) { + accountNetworks.add(network); + } + } + } + } + return accountNetworks; + } + + @Override + public List listAllNetworksInAllZonesByType(Network.GuestType type) { + List networks = new ArrayList(); + for (NetworkVO network: _networksDao.listAll()) { + if (!isNetworkSystem(network)) { + networks.add(network); + } + } + return networks; + } + + @Override + public Long getDedicatedNetworkDomain(long networkId) { + NetworkDomainVO networkMaps = _networkDomainDao.getDomainNetworkMapByNetworkId(networkId); + if (networkMaps != null) { + return networkMaps.getDomainId(); + } else { + return null; + } + } + + @Override + public Integer getNetworkRate(long networkId, Long vmId) { + VMInstanceVO vm = null; + if (vmId != null) { + vm = _vmDao.findById(vmId); + } + Network network = getNetwork(networkId); + NetworkOffering ntwkOff = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); + + // For default userVm Default network and domR guest/public network, get rate information from the service + // offering; for other situations get information + // from the network offering + boolean isUserVmsDefaultNetwork = false; + boolean isDomRGuestOrPublicNetwork = false; + if (vm != null) { + Nic nic = _nicDao.findByInstanceIdAndNetworkId(networkId, vmId); + if (vm.getType() == Type.User && nic != null && nic.isDefaultNic()) { + isUserVmsDefaultNetwork = true; + } else if (vm.getType() == Type.DomainRouter && ntwkOff != null && (ntwkOff.getTrafficType() == TrafficType.Public || ntwkOff.getTrafficType() == TrafficType.Guest)) { + isDomRGuestOrPublicNetwork = true; + } + } + if (isUserVmsDefaultNetwork || isDomRGuestOrPublicNetwork) { + return _configMgr.getServiceOfferingNetworkRate(vm.getServiceOfferingId()); + } else { + return _configMgr.getNetworkOfferingNetworkRate(ntwkOff.getId()); + } + } + + @Override + public String getAccountNetworkDomain(long accountId, long zoneId) { + String networkDomain = _accountDao.findById(accountId).getNetworkDomain(); + + if (networkDomain == null) { + // get domain level network domain + return getDomainNetworkDomain(_accountDao.findById(accountId).getDomainId(), zoneId); + } + + return networkDomain; + } + + @Override + public String getGlobalGuestDomainSuffix() { + return _networkDomain; + } + + @Override + public String getStartIpAddress(long networkId) { + List vlans = _vlanDao.listVlansByNetworkId(networkId); + if (vlans.isEmpty()) { + return null; + } + + String startIP = vlans.get(0).getIpRange().split("-")[0]; + + for (VlanVO vlan : vlans) { + String startIP1 = vlan.getIpRange().split("-")[0]; + long startIPLong = NetUtils.ip2Long(startIP); + long startIPLong1 = NetUtils.ip2Long(startIP1); + + if (startIPLong1 < startIPLong) { + startIP = startIP1; + } + } + + return startIP; + } + + @Override + public Long getPodIdForVlan(long vlanDbId) { + PodVlanMapVO podVlanMaps = _podVlanMapDao.listPodVlanMapsByVlan(vlanDbId); + if (podVlanMaps == null) { + return null; + } else { + return podVlanMaps.getPodId(); + } + } + + @Override + public Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId) { + Map> serviceProviderMap = new HashMap>(); + List map = _ntwkOfferingSrvcDao.listByNetworkOfferingId(networkOfferingId); + + for (NetworkOfferingServiceMapVO instance : map) { + String service = instance.getService(); + Set providers; + providers = serviceProviderMap.get(service); + if (providers == null) { + providers = new HashSet(); + } + providers.add(Provider.getProvider(instance.getProvider())); + serviceProviderMap.put(Service.getService(service), providers); + } + + return serviceProviderMap; + } + + @Override + public boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider) { + return _ntwkSrvcDao.canProviderSupportServiceInNetwork(networkId, service, provider); + } + + @Override + public List listSupportedNetworkServiceProviders(String serviceName) { + Network.Service service = null; + if (serviceName != null) { + service = Network.Service.getService(serviceName); + if (service == null) { + throw new InvalidParameterValueException("Invalid Network Service=" + serviceName); + } + } + + Set supportedProviders = new HashSet(); + + if (service != null) { + supportedProviders.addAll(s_serviceToImplementedProvidersMap.get(service)); + } else { + for (List pList : s_serviceToImplementedProvidersMap.values()) { + supportedProviders.addAll(pList); + } + } + + return new ArrayList(supportedProviders); + } + + @Override + public Provider getDefaultUniqueProviderForService(String serviceName) { + List providers = listSupportedNetworkServiceProviders(serviceName); + if (providers.isEmpty()) { + throw new CloudRuntimeException("No providers supporting service " + serviceName + " found in cloudStack"); + } + if (providers.size() > 1) { + throw new CloudRuntimeException("More than 1 provider supporting service " + serviceName + " found in cloudStack"); + } + + return providers.get(0); + } + + @Override + public long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType) { + List pNtwks = new ArrayList(); + if (trafficType != null) { + pNtwks = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); + } else { + pNtwks = _physicalNetworkDao.listByZone(zoneId); + } + + if (pNtwks.isEmpty()) { + throw new InvalidParameterValueException("Unable to find physical network in zone id=" + zoneId); + } + + if (pNtwks.size() > 1) { + if (tag == null) { + throw new InvalidParameterValueException("More than one physical networks exist in zone id=" + zoneId + " and no tags are specified in order to make a choice"); + } + + Long pNtwkId = null; + for (PhysicalNetwork pNtwk : pNtwks) { + if (pNtwk.getTags().contains(tag)) { + s_logger.debug("Found physical network id=" + pNtwk.getId() + " based on requested tags " + tag); + pNtwkId = pNtwk.getId(); + break; + } + } + if (pNtwkId == null) { + throw new InvalidParameterValueException("Unable to find physical network which match the tags " + tag); + } + return pNtwkId; + } else { + return pNtwks.get(0).getId(); + } + } + + @Override + public List listNetworkOfferingsForUpgrade(long networkId) { + List offeringsToReturn = new ArrayList(); + NetworkOffering originalOffering = _configMgr.getNetworkOffering(getNetwork(networkId).getNetworkOfferingId()); + + boolean securityGroupSupportedByOriginalOff = areServicesSupportedByNetworkOffering(originalOffering.getId(), Service.SecurityGroup); + + // security group supported property should be the same + + List offerings = _networkOfferingDao.getOfferingIdsToUpgradeFrom(originalOffering); + + for (Long offeringId : offerings) { + if (areServicesSupportedByNetworkOffering(offeringId, Service.SecurityGroup) == securityGroupSupportedByOriginalOff) { + offeringsToReturn.add(offeringId); + } + } + + return offeringsToReturn; + } + + @Override + public boolean isSecurityGroupSupportedInNetwork(Network network) { + if (network.getTrafficType() != TrafficType.Guest) { + s_logger.trace("Security group can be enabled for Guest networks only; and network " + network + " has a diff traffic type"); + return false; + } + + Long physicalNetworkId = network.getPhysicalNetworkId(); + + // physical network id can be null in Guest Network in Basic zone, so locate the physical network + if (physicalNetworkId == null) { + physicalNetworkId = findPhysicalNetworkId(network.getDataCenterId(), null, null); + } + + return isServiceEnabledInNetwork(physicalNetworkId, network.getId(), Service.SecurityGroup); + } + + @Override + public PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { + + List networkList = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); + + if (networkList.isEmpty()) { + InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find the default physical network with traffic=" + trafficType + " in the specified zone id"); + // Since we don't have a DataCenterVO object at our disposal, we just set the table name that the zoneId's corresponding uuid is looked up from, manually. + ex.addProxyObject("data_center", zoneId, "zoneId"); + throw ex; + } + + if (networkList.size() > 1) { + InvalidParameterValueException ex = new InvalidParameterValueException("More than one physical networks exist in zone id=" + zoneId + " with traffic type=" + trafficType); + ex.addProxyObject("data_center", zoneId, "zoneId"); + throw ex; + } + + return networkList.get(0); + } + + @Override + public String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType) { + try{ + PhysicalNetwork mgmtPhyNetwork = getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Management); + PhysicalNetworkTrafficTypeVO mgmtTraffic = _pNTrafficTypeDao.findBy(mgmtPhyNetwork.getId(), TrafficType.Management); + if(mgmtTraffic != null){ + String label = null; + switch(hypervisorType){ + case XenServer : label = mgmtTraffic.getXenNetworkLabel(); + break; + case KVM : label = mgmtTraffic.getKvmNetworkLabel(); + break; + case VMware : label = mgmtTraffic.getVmwareNetworkLabel(); + break; + } + return label; + } + }catch(Exception ex){ + if(s_logger.isDebugEnabled()){ + s_logger.debug("Failed to retrive the default label for management traffic:"+"zone: "+ zoneId +" hypervisor: "+hypervisorType +" due to:" + ex.getMessage()); + } + } + return null; + } + + @Override + public String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType) { + try{ + PhysicalNetwork storagePhyNetwork = getDefaultPhysicalNetworkByZoneAndTrafficType(zoneId, TrafficType.Storage); + PhysicalNetworkTrafficTypeVO storageTraffic = _pNTrafficTypeDao.findBy(storagePhyNetwork.getId(), TrafficType.Storage); + if(storageTraffic != null){ + String label = null; + switch(hypervisorType){ + case XenServer : label = storageTraffic.getXenNetworkLabel(); + break; + case KVM : label = storageTraffic.getKvmNetworkLabel(); + break; + case VMware : label = storageTraffic.getVmwareNetworkLabel(); + break; + } + return label; + } + }catch(Exception ex){ + if(s_logger.isDebugEnabled()){ + s_logger.debug("Failed to retrive the default label for storage traffic:"+"zone: "+ zoneId +" hypervisor: "+hypervisorType +" due to:" + ex.getMessage()); + } + } + return null; + } + + @Override + public List getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType) { + List networkInfoList = new ArrayList(); + List physicalNtwkList = _physicalNetworkDao.listByZone(dcId); + for (PhysicalNetworkVO pNtwk : physicalNtwkList) { + String publicName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Public, hypervisorType); + String privateName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Management, hypervisorType); + String guestName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Guest, hypervisorType); + String storageName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Storage, hypervisorType); + // String controlName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Control, hypervisorType); + PhysicalNetworkSetupInfo info = new PhysicalNetworkSetupInfo(); + info.setPhysicalNetworkId(pNtwk.getId()); + info.setGuestNetworkName(guestName); + info.setPrivateNetworkName(privateName); + info.setPublicNetworkName(publicName); + info.setStorageNetworkName(storageName); + PhysicalNetworkTrafficTypeVO mgmtTraffic = _pNTrafficTypeDao.findBy(pNtwk.getId(), TrafficType.Management); + if (mgmtTraffic != null) { + String vlan = mgmtTraffic.getVlan(); + info.setMgmtVlan(vlan); + } + networkInfoList.add(info); + } + return networkInfoList; + } + + @Override + public boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName) { + PhysicalNetworkServiceProviderVO ntwkSvcProvider = _pNSPDao.findByServiceProvider(physicalNetowrkId, providerName); + if (ntwkSvcProvider == null) { + s_logger.warn("Unable to find provider " + providerName + " in physical network id=" + physicalNetowrkId); + return false; + } + return isProviderEnabled(ntwkSvcProvider); + } + + @Override + public String getNetworkTag(HypervisorType hType, Network network) { + // no network tag for control traffic type + TrafficType effectiveTrafficType = network.getTrafficType(); + if(hType == HypervisorType.VMware && effectiveTrafficType == TrafficType.Control) + effectiveTrafficType = TrafficType.Management; + + if (effectiveTrafficType == TrafficType.Control) { + return null; + } + + Long physicalNetworkId = null; + if (effectiveTrafficType != TrafficType.Guest) { + physicalNetworkId = getNonGuestNetworkPhysicalNetworkId(network); + } else { + NetworkOffering offering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); + physicalNetworkId = network.getPhysicalNetworkId(); + if(physicalNetworkId == null){ + physicalNetworkId = findPhysicalNetworkId(network.getDataCenterId(), offering.getTags(), offering.getTrafficType()); + } + } + + if (physicalNetworkId == null) { + assert (false) : "Can't get the physical network"; + s_logger.warn("Can't get the physical network"); + return null; + } + + return _pNTrafficTypeDao.getNetworkTag(physicalNetworkId, effectiveTrafficType, hType); + } + + @Override + public NetworkVO getExclusiveGuestNetwork(long zoneId) { + List networks = _networksDao.listBy(Account.ACCOUNT_ID_SYSTEM, zoneId, GuestType.Shared, TrafficType.Guest); + if (networks == null || networks.isEmpty()) { + throw new InvalidParameterValueException("Unable to find network with trafficType " + TrafficType.Guest + " and guestType " + GuestType.Shared + " in zone " + zoneId); + } + + if (networks.size() > 1) { + throw new InvalidParameterValueException("Found more than 1 network with trafficType " + TrafficType.Guest + " and guestType " + GuestType.Shared + " in zone " + zoneId); + + } + + return networks.get(0); + } + + @Override + public boolean isNetworkSystem(Network network) { + NetworkOffering no = _networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId()); + if (no.isSystemOnly()) { + return true; + } else { + return false; + } + } + + @Override + public Long getPhysicalNetworkId(Network network) { + if (network.getTrafficType() != TrafficType.Guest) { + return getNonGuestNetworkPhysicalNetworkId(network); + } + + Long physicalNetworkId = network.getPhysicalNetworkId(); + NetworkOffering offering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); + if (physicalNetworkId == null) { + physicalNetworkId = findPhysicalNetworkId(network.getDataCenterId(), offering.getTags(), offering.getTrafficType()); + } + return physicalNetworkId; + } + + @Override + public boolean getAllowSubdomainAccessGlobal() { + return _allowSubdomainNetworkAccess; + } + + @Override + public boolean isProviderForNetwork(Provider provider, long networkId) { + if (_ntwkSrvcDao.isProviderForNetwork(networkId, provider) != null) { + return true; + } else { + return false; + } + } + + @Override + public boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId) { + if (_ntwkOfferingSrvcDao.isProviderForNetworkOffering(networkOfferingId, provider)) { + return true; + } else { + return false; + } + } + + @Override + public void canProviderSupportServices(Map> providersMap) { + for (Provider provider : providersMap.keySet()) { + // check if services can be turned off + NetworkElement element = getElementImplementingProvider(provider.getName()); + if (element == null) { + throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getName() + "'"); + } + + Set enabledServices = new HashSet(); + enabledServices.addAll(providersMap.get(provider)); + + if (enabledServices != null && !enabledServices.isEmpty()) { + if (!element.canEnableIndividualServices()) { + Set requiredServices = new HashSet(); + requiredServices.addAll(element.getCapabilities().keySet()); + + if (requiredServices.contains(Network.Service.Gateway)) { + requiredServices.remove(Network.Service.Gateway); + } + + if (requiredServices.contains(Network.Service.Firewall)) { + requiredServices.remove(Network.Service.Firewall); + } + + if (enabledServices.contains(Network.Service.Firewall)) { + enabledServices.remove(Network.Service.Firewall); + } + + // exclude gateway service + if (enabledServices.size() != requiredServices.size()) { + StringBuilder servicesSet = new StringBuilder(); + + for (Service requiredService : requiredServices) { + // skip gateway service as we don't allow setting it via API + if (requiredService == Service.Gateway) { + continue; + } + servicesSet.append(requiredService.getName() + ", "); + } + servicesSet.delete(servicesSet.toString().length() - 2, servicesSet.toString().length()); + + throw new InvalidParameterValueException("Cannot enable subset of Services, Please specify the complete list of Services: " + servicesSet.toString() + " for Service Provider " + + provider.getName()); + } + } + List serviceList = new ArrayList(); + for (Service service : enabledServices) { + // check if the service is provided by this Provider + if (!element.getCapabilities().containsKey(service)) { + throw new UnsupportedServiceException(provider.getName() + " Provider cannot provide service " + service.getName()); + } + serviceList.add(service.getName()); + } + if (!element.verifyServicesCombination(enabledServices)) { + throw new UnsupportedServiceException("Provider " + provider.getName() + " doesn't support services combination: " + serviceList); + } + } + } + } + + @Override + public boolean canAddDefaultSecurityGroup() { + String defaultAdding = _configDao.getValue(Config.SecurityGroupDefaultAdding.key()); + return (defaultAdding != null && defaultAdding.equalsIgnoreCase("true")); + } + + @Override + public List listNetworkOfferingServices(long networkOfferingId) { + List services = new ArrayList(); + List servicesStr = _ntwkOfferingSrvcDao.listServicesForNetworkOffering(networkOfferingId); + for (String serviceStr : servicesStr) { + services.add(Service.getService(serviceStr)); + } + + return services; + } + + @Override + public boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services) { + long physicalNtwkId = findPhysicalNetworkId(zoneId, offering.getTags(), offering.getTrafficType()); + boolean result = true; + List checkedProvider = new ArrayList(); + for (Service service : services) { + // get all the providers, and check if each provider is enabled + List providerNames = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(offering.getId(), service); + for (String providerName : providerNames) { + if (!checkedProvider.contains(providerName)) { + result = result && isProviderEnabledInPhysicalNetwork(physicalNtwkId, providerName); + } + } + } + + return result; + } + + @Override + public boolean checkIpForService(IPAddressVO userIp, Service service, Long networkId) { + if (networkId == null) { + networkId = userIp.getAssociatedWithNetworkId(); + } + + NetworkVO network = _networksDao.findById(networkId); + NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); + if (offering.getGuestType() != GuestType.Isolated) { + return true; + } + PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); + if (!canIpUsedForService(publicIp, service, networkId)) { + return false; + } + if (!offering.isConserveMode()) { + return canIpUsedForNonConserveService(publicIp, service); + } + return true; + } + + @Override + public void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue) { + for (Provider provider : providers) { + NetworkElement element = getElementImplementingProvider(provider.getName()); + if (element != null) { + Map> elementCapabilities = element.getCapabilities(); + if (elementCapabilities == null || !elementCapabilities.containsKey(service)) { + throw new UnsupportedServiceException("Service " + service.getName() + " is not supported by the element=" + element.getName() + " implementing Provider=" + provider.getName()); + } + Map serviceCapabilities = elementCapabilities.get(service); + if (serviceCapabilities == null || serviceCapabilities.isEmpty()) { + throw new UnsupportedServiceException("Service " + service.getName() + " doesn't have capabilites for element=" + element.getName() + " implementing Provider=" + provider.getName()); + } + + String value = serviceCapabilities.get(cap); + if (value == null || value.isEmpty()) { + throw new UnsupportedServiceException("Service " + service.getName() + " doesn't have capability " + cap.getName() + " for element=" + element.getName() + " implementing Provider=" + + provider.getName()); + } + + capValue = capValue.toLowerCase(); + + if (!value.contains(capValue)) { + throw new UnsupportedServiceException("Service " + service.getName() + " doesn't support value " + capValue + " for capability " + cap.getName() + " for element=" + element.getName() + + " implementing Provider=" + provider.getName()); + } + } else { + throw new UnsupportedServiceException("Unable to find network element for provider " + provider.getName()); + } + } + } + + @Override + public void checkNetworkPermissions(Account owner, Network network) { + // Perform account permission check + if (network.getGuestType() != Network.GuestType.Shared) { + List networkMap = _networksDao.listBy(owner.getId(), network.getId()); + if (networkMap == null || networkMap.isEmpty()) { + throw new PermissionDeniedException("Unable to use network with id= " + network.getId() + ", permission denied"); + } + } else { + if (!isNetworkAvailableInDomain(network.getId(), owner.getDomainId())) { + throw new PermissionDeniedException("Shared network id=" + network.getId() + " is not available in domain id=" + owner.getDomainId()); + } + } + } + + @Override + public String getDefaultPublicTrafficLabel(long dcId, HypervisorType hypervisorType) { + try { + PhysicalNetwork publicPhyNetwork = getOnePhysicalNetworkByZoneAndTrafficType(dcId, TrafficType.Public); + PhysicalNetworkTrafficTypeVO publicTraffic = _pNTrafficTypeDao.findBy(publicPhyNetwork.getId(), + TrafficType.Public); + if (publicTraffic != null) { + String label = null; + switch (hypervisorType) { + case XenServer: + label = publicTraffic.getXenNetworkLabel(); + break; + case KVM: + label = publicTraffic.getKvmNetworkLabel(); + break; + case VMware: + label = publicTraffic.getVmwareNetworkLabel(); + break; + } + return label; + } + } catch (Exception ex) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Failed to retrieve the default label for public traffic." + "zone: " + dcId + " hypervisor: " + hypervisorType + " due to: " + ex.getMessage()); + } + } + return null; + } + + @Override + public String getDefaultGuestTrafficLabel(long dcId, HypervisorType hypervisorType) { + try { + PhysicalNetwork guestPhyNetwork = getOnePhysicalNetworkByZoneAndTrafficType(dcId, TrafficType.Guest); + PhysicalNetworkTrafficTypeVO guestTraffic = _pNTrafficTypeDao.findBy(guestPhyNetwork.getId(), + TrafficType.Guest); + if (guestTraffic != null) { + String label = null; + switch (hypervisorType) { + case XenServer: + label = guestTraffic.getXenNetworkLabel(); + break; + case KVM: + label = guestTraffic.getKvmNetworkLabel(); + break; + case VMware: + label = guestTraffic.getVmwareNetworkLabel(); + break; + } + return label; + } + } catch (Exception ex) { + if (s_logger.isDebugEnabled()) { + s_logger.debug("Failed to retrive the default label for management traffic:" + "zone: " + dcId + + " hypervisor: " + hypervisorType + " due to:" + ex.getMessage()); + } + } + return null; + } + + @Override + public List listNetworksByVpc(long vpcId) { + return _networksDao.listByVpc(vpcId); + } + + @Override + public String getDefaultNetworkDomain() { + return _networkDomain; + } + + @Override + public List getNtwkOffDistinctProviders(long ntkwOffId) { + List providerNames = _ntwkOfferingSrvcDao.getDistinctProviders(ntkwOffId); + List providers = new ArrayList(); + for (String providerName : providerNames) { + providers.add(Network.Provider.getProvider(providerName)); + } + + return providers; + } + + @Override + public boolean isVmPartOfNetwork(long vmId, long ntwkId) { + if (_nicDao.findNonReleasedByInstanceIdAndNetworkId(ntwkId, vmId) != null) { + return true; + } + return false; + } + + @Override + public List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType) { + + List pNtwks = _physicalNetworkDao.listByZone(zoneId); + + Iterator it = pNtwks.iterator(); + while (it.hasNext()) { + PhysicalNetwork pNtwk = it.next(); + if (!_pNTrafficTypeDao.isTrafficTypeSupported(pNtwk.getId(), trafficType)) { + it.remove(); + } + } + return pNtwks; + } + + @Override + public boolean isPrivateGateway(Nic guestNic) { + Network network = getNetwork(guestNic.getNetworkId()); + if (network.getTrafficType() != TrafficType.Guest || network.getNetworkOfferingId() != _privateOfferingId.longValue()) { + return false; + } + return true; + } + + + @Override + public List getSystemAccountNetworkOfferings(String... offeringNames) { + List offerings = new ArrayList(offeringNames.length); + for (String offeringName : offeringNames) { + NetworkOfferingVO network = _systemNetworks.get(offeringName); + if (network == null) { + throw new CloudRuntimeException("Unable to find system network profile for " + offeringName); + } + offerings.add(network); + } + return offerings; + } + + @Override + public boolean isNetworkAvailableInDomain(long networkId, long domainId) { + Long networkDomainId = null; + Network network = getNetwork(networkId); + if (network.getGuestType() != Network.GuestType.Shared) { + s_logger.trace("Network id=" + networkId + " is not shared"); + return false; + } + + NetworkDomainVO networkDomainMap = _networkDomainDao.getDomainNetworkMapByNetworkId(networkId); + if (networkDomainMap == null) { + s_logger.trace("Network id=" + networkId + " is shared, but not domain specific"); + return true; + } else { + networkDomainId = networkDomainMap.getDomainId(); + } + + if (domainId == networkDomainId.longValue()) { + return true; + } + + if (networkDomainMap.subdomainAccess) { + Set parentDomains = _domainMgr.getDomainParentIds(domainId); + + if (parentDomains.contains(domainId)) { + return true; + } + } + + return false; + } + + @Override + public Set getAvailableIps(Network network, String requestedIp) { + String[] cidr = network.getCidr().split("/"); + List ips = _nicDao.listIpAddressInNetwork(network.getId()); + Set allPossibleIps = NetUtils.getAllIpsFromCidr(cidr[0], Integer.parseInt(cidr[1])); + Set usedIps = new TreeSet(); + + for (String ip : ips) { + if (requestedIp != null && requestedIp.equals(ip)) { + s_logger.warn("Requested ip address " + requestedIp + " is already in use in network" + network); + return null; + } + + usedIps.add(NetUtils.ip2Long(ip)); + } + if (usedIps.size() != 0) { + allPossibleIps.removeAll(usedIps); + } + return allPossibleIps; + } + + @Override + public String getDomainNetworkDomain(long domainId, long zoneId) { + String networkDomain = null; + Long searchDomainId = domainId; + while(searchDomainId != null){ + DomainVO domain = _domainDao.findById(searchDomainId); + if(domain.getNetworkDomain() != null){ + networkDomain = domain.getNetworkDomain(); + break; + } + searchDomainId = domain.getParent(); + } + if (networkDomain == null) { + return getZoneNetworkDomain(zoneId); + } + return networkDomain; + } + + boolean isProviderEnabled(PhysicalNetworkServiceProvider provider) { + if (provider == null || provider.getState() != PhysicalNetworkServiceProvider.State.Enabled) { // TODO: check + // for other states: Shutdown? + return false; + } + return true; + } + + boolean isServiceEnabledInNetwork(long physicalNetworkId, long networkId, Service service) { + // check if the service is supported in the network + if (!areServicesSupportedInNetwork(networkId, service)) { + s_logger.debug("Service " + service.getName() + " is not supported in the network id=" + networkId); + return false; + } + + // get provider for the service and check if all of them are supported + String provider = _ntwkSrvcDao.getProviderForServiceInNetwork(networkId, service); + if (!isProviderEnabledInPhysicalNetwork(physicalNetworkId, provider)) { + s_logger.debug("Provider " + provider + " is not enabled in physical network id=" + physicalNetworkId); + return false; + } + + return true; + } + + Nic getNicInNetworkIncludingRemoved(long vmId, long networkId) { + return _nicDao.findByInstanceIdAndNetworkIdIncludingRemoved(networkId, vmId); + } + + String getZoneNetworkDomain(long zoneId) { + return _dcDao.findById(zoneId).getDomain(); + } + + PhysicalNetwork getOnePhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { + List networkList = _physicalNetworkDao.listByZoneAndTrafficType(zoneId, trafficType); + + if (networkList.isEmpty()) { + throw new InvalidParameterValueException("Unable to find the default physical network with traffic=" + + trafficType + " in zone id=" + zoneId + ". "); + } + + if (networkList.size() > 1) { + s_logger.info("More than one physical networks exist in zone id=" + zoneId + " with traffic type=" + + trafficType + ". "); + } + + return networkList.get(0); + } + + + + protected Long getNonGuestNetworkPhysicalNetworkId(Network network) { + // no physical network for control traffic type + + // have to remove this sanity check as VMware control network is management network + // we need to retrieve traffic label information through physical network + /* + if (network.getTrafficType() == TrafficType.Control) { + return null; + } + */ + Long physicalNetworkId = network.getPhysicalNetworkId(); + + if (physicalNetworkId == null) { + List pNtwks = _physicalNetworkDao.listByZone(network.getDataCenterId()); + if (pNtwks.size() == 1) { + physicalNetworkId = pNtwks.get(0).getId(); + } else { + // locate physicalNetwork with supported traffic type + // We can make this assumptions based on the fact that Public/Management/Control traffic types are + // supported only in one physical network in the zone in 3.0 + for (PhysicalNetworkVO pNtwk : pNtwks) { + if (_pNTrafficTypeDao.isTrafficTypeSupported(pNtwk.getId(), network.getTrafficType())) { + physicalNetworkId = pNtwk.getId(); + break; + } + } + } + } + return physicalNetworkId; + } + + @Override + public NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri) { + NicVO nic = null; + if (broadcastUri != null) { + nic = _nicDao.findByNetworkIdInstanceIdAndBroadcastUri(networkId, vm.getId(), broadcastUri); + } else { + nic = _nicDao.findByInstanceIdAndNetworkId(networkId, vm.getId()); + } + NetworkVO network = _networksDao.findById(networkId); + Integer networkRate = getNetworkRate(network.getId(), vm.getId()); + +// NetworkGuru guru = _networkGurus.get(network.getGuruName()); + NicProfile profile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), + networkRate, isSecurityGroupSupportedInNetwork(network), getNetworkTag(vm.getHypervisorType(), network)); +// guru.updateNicProfile(profile, network); + + return profile; + } + + @Override + public boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId) { + boolean netscalerInNetwork = isProviderForNetwork(Network.Provider.Netscaler, networkId); + boolean juniperInNetwork = isProviderForNetwork(Network.Provider.JuniperSRX, networkId); + boolean f5InNetwork = isProviderForNetwork(Network.Provider.F5BigIp, networkId); + + if (netscalerInNetwork || juniperInNetwork || f5InNetwork) { + return true; + } else { + return false; + } + } +} \ No newline at end of file diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index edd53e2ec1b..1d2db3e5b80 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -226,6 +226,8 @@ public class NetworkServiceImpl implements NetworkService, Manager { ResourceTagDao _resourceTagDao; @Inject NetworkManager _networkMgr; + @Inject + NetworkModel _networkModel; private final HashMap _systemNetworks = new HashMap(5); @@ -364,7 +366,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { private boolean canIpsUseOffering(List publicIps, long offeringId) { Map> ipToServices = getIpToServices(publicIps, false, true); - Map> serviceToProviders = _networkMgr.getNetworkOfferingServiceProvidersMap(offeringId); + Map> serviceToProviders = _networkModel.getNetworkOfferingServiceProvidersMap(offeringId); for (PublicIp ip : ipToServices.keySet()) { Set services = ipToServices.get(ip); Provider provider = null; @@ -1146,7 +1148,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { if (canUseForDeploy != null) { List networksForDeploy = new ArrayList(); for (NetworkVO network : networksToReturn) { - if (_networkMgr.canUseForDeploy(network) == canUseForDeploy) { + if (_networkModel.canUseForDeploy(network) == canUseForDeploy) { networksForDeploy.add(network); } } @@ -1429,7 +1431,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { // FIXME we return the capabilities of the first provider of the service - what if we have multiple providers // for same Service? - NetworkElement element = _networkMgr.getElementImplementingProvider(provider); + NetworkElement element = _networkModel.getElementImplementingProvider(provider); if (element != null) { Map> elementCapabilities = element.getCapabilities(); ; @@ -2301,7 +2303,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { } if (provider != null) { - NetworkElement element = _networkMgr.getElementImplementingProvider(providerName); + NetworkElement element = _networkModel.getElementImplementingProvider(providerName); if (element == null) { throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + providerName + "'"); } @@ -2348,7 +2350,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { } // check if services can be turned off - NetworkElement element = _networkMgr.getElementImplementingProvider(providerName); + NetworkElement element = _networkModel.getElementImplementingProvider(providerName); if (element == null) { throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + providerName + "'"); } @@ -2441,7 +2443,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { throw new InvalidParameterValueException("Network Service Provider id=" + id + "doesn't exist in the system"); } - NetworkElement element = _networkMgr.getElementImplementingProvider(provider.getProviderName()); + NetworkElement element = _networkModel.getElementImplementingProvider(provider.getProviderName()); if (element == null) { throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getProviderName() + "'"); } @@ -2530,7 +2532,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { if (s_logger.isDebugEnabled()) { s_logger.debug("Shutting down the service provider id=" + id + " on physical network: " + provider.getPhysicalNetworkId()); } - NetworkElement element = _networkMgr.getElementImplementingProvider(provider.getProviderName()); + NetworkElement element = _networkModel.getElementImplementingProvider(provider.getProviderName()); if (element == null) { throw new InvalidParameterValueException("Unable to find the Network Element implementing the Service Provider '" + provider.getProviderName() + "'"); } @@ -2788,7 +2790,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, Network.Provider.VirtualRouter.getName(), null, null); // add instance of the provider - VirtualRouterElement element = (VirtualRouterElement) _networkMgr.getElementImplementingProvider(Network.Provider.VirtualRouter.getName()); + VirtualRouterElement element = (VirtualRouterElement) _networkModel.getElementImplementingProvider(Network.Provider.VirtualRouter.getName()); if (element == null) { throw new CloudRuntimeException("Unable to find the Network Element implementing the VirtualRouter Provider"); } @@ -2802,7 +2804,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { PhysicalNetworkServiceProvider nsp = addProviderToPhysicalNetwork(physicalNetworkId, Network.Provider.VPCVirtualRouter.getName(), null, null); // add instance of the provider - VpcVirtualRouterElement element = (VpcVirtualRouterElement) _networkMgr.getElementImplementingProvider(Network.Provider.VPCVirtualRouter.getName()); + VpcVirtualRouterElement element = (VpcVirtualRouterElement) _networkModel.getElementImplementingProvider(Network.Provider.VPCVirtualRouter.getName()); if (element == null) { throw new CloudRuntimeException("Unable to find the Network Element implementing the VPCVirtualRouter Provider"); } diff --git a/server/src/com/cloud/network/element/CloudZonesNetworkElement.java b/server/src/com/cloud/network/element/CloudZonesNetworkElement.java index ae8be0d3317..67597261e00 100644 --- a/server/src/com/cloud/network/element/CloudZonesNetworkElement.java +++ b/server/src/com/cloud/network/element/CloudZonesNetworkElement.java @@ -44,7 +44,7 @@ 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.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.dao.NetworkDao; @@ -72,7 +72,7 @@ public class CloudZonesNetworkElement extends AdapterBase implements NetworkElem @Inject NetworkDao _networkConfigDao; @Inject - NetworkManager _networkMgr; + NetworkModel _networkMgr; @Inject UserVmManager _userVmMgr; @Inject diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index abd9a507d9d..d35e358c349 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -43,7 +43,7 @@ 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.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks.TrafficType; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PublicIpAddress; @@ -102,7 +102,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl @Inject NetworkDao _networksDao; @Inject - NetworkManager _networkMgr; + NetworkModel _networkMgr; @Inject LoadBalancingRulesManager _lbMgr; @Inject diff --git a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java index 8e781ec2387..60c5bf30d42 100644 --- a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java +++ b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java @@ -46,6 +46,7 @@ import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkRuleApplier; import com.cloud.network.dao.FirewallRulesCidrsDao; import com.cloud.network.dao.FirewallRulesDao; @@ -112,6 +113,8 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ne @Inject NetworkManager _networkMgr; @Inject + NetworkModel _networkModel; + @Inject UsageEventDao _usageEventDao; @Inject ConfigurationDao _configDao; @@ -186,7 +189,7 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ne " doesn't exist in the system"); } - _networkMgr.checkIpForService(ipAddress, Service.Firewall, null); + _networkModel.checkIpForService(ipAddress, Service.Firewall, null); validateFirewallRule(caller, ipAddress, portStart, portEnd, protocol, Purpose.Firewall, type); @@ -421,7 +424,7 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ne networkId = ipAddress.getAssociatedWithNetworkId(); } - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); assert network != null : "Can't create port forwarding rule as network associated with public ip address is null?"; // Verify that the network guru supports the protocol specified @@ -429,10 +432,10 @@ public class FirewallManagerImpl implements FirewallService, FirewallManager, Ne if (purpose == Purpose.LoadBalancing) { if (!_elbEnabled) { - caps = _networkMgr.getNetworkServiceCapabilities(network.getId(), Service.Lb); + caps = _networkModel.getNetworkServiceCapabilities(network.getId(), Service.Lb); } } else if (purpose == Purpose.PortForwarding) { - caps = _networkMgr.getNetworkServiceCapabilities(network.getId(), Service.PortForwarding); + caps = _networkModel.getNetworkServiceCapabilities(network.getId(), Service.PortForwarding); } if (caps != null) { diff --git a/server/src/com/cloud/network/guru/ControlNetworkGuru.java b/server/src/com/cloud/network/guru/ControlNetworkGuru.java index 934cd70864e..ef8052221fa 100755 --- a/server/src/com/cloud/network/guru/ControlNetworkGuru.java +++ b/server/src/com/cloud/network/guru/ControlNetworkGuru.java @@ -35,7 +35,7 @@ import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientVirtualNetworkCapcityException; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.Network; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.AddressFormat; @@ -58,7 +58,7 @@ import com.cloud.vm.VirtualMachineProfile; public class ControlNetworkGuru extends PodBasedNetworkGuru implements NetworkGuru { private static final Logger s_logger = Logger.getLogger(ControlNetworkGuru.class); @Inject DataCenterDao _dcDao; - @Inject NetworkManager _networkMgr; + @Inject NetworkModel _networkMgr; String _cidr; String _gateway; diff --git a/server/src/com/cloud/network/guru/DirectNetworkGuru.java b/server/src/com/cloud/network/guru/DirectNetworkGuru.java index ee824af5aef..b290c1da3ef 100755 --- a/server/src/com/cloud/network/guru/DirectNetworkGuru.java +++ b/server/src/com/cloud/network/guru/DirectNetworkGuru.java @@ -36,6 +36,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Service; import com.cloud.network.Network.State; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.BroadcastDomainType; @@ -64,6 +65,8 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru { @Inject VlanDao _vlanDao; @Inject + NetworkModel _networkModel; + @Inject NetworkManager _networkMgr; @Inject IPAddressDao _ipAddressDao; @@ -132,7 +135,7 @@ public class DirectNetworkGuru extends AdapterBase implements NetworkGuru { } } - boolean isSecurityGroupEnabled = _networkMgr.areServicesSupportedByNetworkOffering(offering.getId(), Service.SecurityGroup); + boolean isSecurityGroupEnabled = _networkModel.areServicesSupportedByNetworkOffering(offering.getId(), Service.SecurityGroup); if (isSecurityGroupEnabled) { config.setName("SecurityGroupEnabledNetwork"); config.setDisplayText("SecurityGroupEnabledNetwork"); diff --git a/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java b/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java index 354d7ed2714..8ca4547d686 100755 --- a/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java +++ b/server/src/com/cloud/network/guru/DirectPodBasedNetworkGuru.java @@ -109,7 +109,7 @@ public class DirectPodBasedNetworkGuru extends DirectNetworkGuru { } if (rsStrategy == ReservationStrategy.Create) { - String mac = _networkMgr.getNextAvailableMacAddressInNetwork(network.getId()); + String mac = _networkModel.getNextAvailableMacAddressInNetwork(network.getId()); nic.setMacAddress(mac); } return nic; diff --git a/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java b/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java index 24d24f85521..f8a8a95ec05 100644 --- a/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java +++ b/server/src/com/cloud/network/guru/ExternalGuestNetworkGuru.java @@ -106,7 +106,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { NetworkVO config = (NetworkVO) super.design(offering, plan, userSpecified, owner); if (config == null) { return null; - } else if (_networkMgr.networkIsConfiguredForExternalNetworking(plan.getDataCenterId(), config.getId())) { + } else if (_networkModel.networkIsConfiguredForExternalNetworking(plan.getDataCenterId(), config.getId())) { /* In order to revert userSpecified network setup */ config.setState(State.Allocated); } @@ -122,7 +122,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { return null; } - if (!_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { + if (!_networkModel.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { return super.implement(config, offering, dest, context); } @@ -195,7 +195,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { public NicProfile allocate(Network config, NicProfile nic, VirtualMachineProfile vm) throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException { - if (_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId()) && nic != null && nic.getRequestedIp() != null) { + if (_networkModel.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId()) && nic != null && nic.getRequestedIp() != null) { throw new CloudRuntimeException("Does not support custom ip allocation at this time: " + nic); } @@ -206,7 +206,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { return null; } - if (_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { + if (_networkModel.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { profile.setStrategy(ReservationStrategy.Start); /* We won't clear IP address, because router may set gateway as it IP, and it would be updated properly later */ //profile.setIp4Address(null); @@ -225,7 +225,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { return; } - if (_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { + if (_networkModel.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { nic.setIp4Address(null); nic.setGateway(null); nic.setNetmask(null); @@ -245,7 +245,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { DataCenter dc = _dcDao.findById(config.getDataCenterId()); - if (_networkMgr.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { + if (_networkModel.networkIsConfiguredForExternalNetworking(config.getDataCenterId(), config.getId())) { nic.setBroadcastUri(config.getBroadcastUri()); nic.setIsolationUri(config.getBroadcastUri()); nic.setDns1(dc.getDns1()); @@ -280,7 +280,7 @@ public class ExternalGuestNetworkGuru extends GuestNetworkGuru { NetworkVO network = _networkDao.findById(nic.getNetworkId()); - if (network != null && _networkMgr.networkIsConfiguredForExternalNetworking(network.getDataCenterId(), network.getId())) { + if (network != null && _networkModel.networkIsConfiguredForExternalNetworking(network.getDataCenterId(), network.getId())) { return true; } else { return super.release(nic, vm, reservationId); diff --git a/server/src/com/cloud/network/guru/GuestNetworkGuru.java b/server/src/com/cloud/network/guru/GuestNetworkGuru.java index 91b95f953cc..95878859598 100755 --- a/server/src/com/cloud/network/guru/GuestNetworkGuru.java +++ b/server/src/com/cloud/network/guru/GuestNetworkGuru.java @@ -45,6 +45,7 @@ import com.cloud.network.IPAddressVO; import com.cloud.network.Network; import com.cloud.network.Network.State; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.AddressFormat; @@ -82,6 +83,8 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur @Inject protected NetworkManager _networkMgr; @Inject + protected NetworkModel _networkModel; + @Inject protected DataCenterDao _dcDao; @Inject protected VlanDao _vlanDao; @@ -310,7 +313,7 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur long dcId = dest.getDataCenter().getId(); //get physical network id - long physicalNetworkId = _networkMgr.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); + long physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); NetworkVO implemented = new NetworkVO(network.getTrafficType(), network.getMode(), network.getBroadcastDomainType(), network.getNetworkOfferingId(), State.Allocated, @@ -355,11 +358,11 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur boolean isGateway = false; if (vm.getVirtualMachine().getType() == VirtualMachine.Type.DomainRouter) { if (network.getVpcId() != null) { - if (_networkMgr.isProviderSupportServiceInNetwork(network.getId(), Service.SourceNat, Provider.VPCVirtualRouter)) { + if (_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.SourceNat, Provider.VPCVirtualRouter)) { isGateway = true; } } else { - if (_networkMgr.isProviderSupportServiceInNetwork(network.getId(), Service.SourceNat, Provider.VirtualRouter)) { + if (_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.SourceNat, Provider.VirtualRouter)) { isGateway = true; } } @@ -387,7 +390,7 @@ public abstract class GuestNetworkGuru extends AdapterBase implements NetworkGur nic.setStrategy(ReservationStrategy.Start); if (nic.getMacAddress() == null) { - nic.setMacAddress(_networkMgr.getNextAvailableMacAddressInNetwork(network.getId())); + nic.setMacAddress(_networkModel.getNextAvailableMacAddressInNetwork(network.getId())); if (nic.getMacAddress() == null) { throw new InsufficientAddressCapacityException("Unable to allocate more mac addresses", Network.class, network.getId()); } diff --git a/server/src/com/cloud/network/guru/PrivateNetworkGuru.java b/server/src/com/cloud/network/guru/PrivateNetworkGuru.java index 9d4c9c327ff..b50e342b4c3 100644 --- a/server/src/com/cloud/network/guru/PrivateNetworkGuru.java +++ b/server/src/com/cloud/network/guru/PrivateNetworkGuru.java @@ -31,7 +31,7 @@ import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.Network; import com.cloud.network.Network.GuestType; import com.cloud.network.Network.State; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkProfile; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.AddressFormat; @@ -62,7 +62,7 @@ public class PrivateNetworkGuru extends AdapterBase implements NetworkGuru { @Inject protected PrivateIpDao _privateIpDao; @Inject - protected NetworkManager _networkMgr; + protected NetworkModel _networkMgr; private static final TrafficType[] _trafficTypes = {TrafficType.Guest}; diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index aa89474faa8..7bb2a2538c2 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -68,6 +68,7 @@ import com.cloud.network.Network.Capability; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkRuleApplier; import com.cloud.network.NetworkVO; import com.cloud.network.as.AutoScalePolicy; @@ -157,6 +158,8 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa @Inject NetworkManager _networkMgr; @Inject + NetworkModel _networkModel; + @Inject RulesManager _rulesMgr; @Inject AccountManager _accountMgr; @@ -234,7 +237,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa // Will return a string. For LB Stickiness this will be a json, for autoscale this will be "," separated values @Override public String getLBCapability(long networkid, String capabilityName) { - Map> serviceCapabilitiesMap = _networkMgr.getNetworkCapabilities(networkid); + Map> serviceCapabilitiesMap = _networkModel.getNetworkCapabilities(networkid); if (serviceCapabilitiesMap != null) { for (Service service : serviceCapabilitiesMap.keySet()) { ServiceResponse serviceResponse = new ServiceResponse(); @@ -486,7 +489,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa List policyList = new ArrayList(); policyList.add(new LbStickinessPolicy(cmd.getStickinessMethodName(), lbpolicy.getParams())); LoadBalancingRule lbRule = new LoadBalancingRule(loadBalancer, getExistingDestinations(lbpolicy.getId()), policyList); - if (!_networkMgr.validateRule(lbRule)) { + if (!_networkModel.validateRule(lbRule)) { throw new InvalidParameterValueException("Failed to create Stickiness policy: Validation Failed " + cmd.getLbRuleId()); } @@ -624,7 +627,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa } // Let's check to make sure the vm has a nic in the same network as the load balancing rule. - List nics = _networkMgr.getNics(vm.getId()); + List nics = _networkModel.getNics(vm.getId()); Nic nicInSameNetwork = null; for (Nic nic : nics) { if (nic.getNetworkId() == loadBalancer.getNetworkId()) { @@ -858,7 +861,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa // gather external network usage stats for this lb rule NetworkVO network = _networkDao.findById(lb.getNetworkId()); if (network != null) { - if (_networkMgr.networkIsConfiguredForExternalNetworking(network.getDataCenterId(), network.getId())) { + if (_networkModel.networkIsConfiguredForExternalNetworking(network.getDataCenterId(), network.getId())) { _externalLBUsageMgr.updateExternalLoadBalancerNetworkUsageStats(loadBalancerId); } } @@ -939,7 +942,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa ipVO = _ipAddressDao.findById(ipAddrId); } - Network network = _networkMgr.getNetwork(lb.getNetworkId()); + Network network = _networkModel.getNetwork(lb.getNetworkId()); // FIXME: breaking the dependency on ELB manager. This breaks functionality of ELB using virtual router // Bug CS-15411 opened to document this @@ -968,14 +971,14 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa && ipVO.getVpcId() != null && ipVO.getVpcId().longValue() == network.getVpcId(); if (assignToVpcNtwk) { //set networkId just for verification purposes - _networkMgr.checkIpForService(ipVO, Service.Lb, lb.getNetworkId()); + _networkModel.checkIpForService(ipVO, Service.Lb, lb.getNetworkId()); s_logger.debug("The ip is not associated with the VPC network id="+ lb.getNetworkId() + " so assigning"); ipVO = _networkMgr.associateIPToGuestNetwork(ipAddrId, lb.getNetworkId(), false); performedIpAssoc = true; } } else { - _networkMgr.checkIpForService(ipVO, Service.Lb, null); + _networkModel.checkIpForService(ipVO, Service.Lb, null); } if (ipVO.getAssociatedWithNetworkId() == null) { @@ -1047,7 +1050,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa _accountMgr.checkAccess(caller.getCaller(), null, true, ipAddr); // verify that lb service is supported by the network - if (!_networkMgr.areServicesSupportedInNetwork(network.getId(), Service.Lb)) { + if (!_networkModel.areServicesSupportedInNetwork(network.getId(), Service.Lb)) { InvalidParameterValueException ex = new InvalidParameterValueException("LB service is not supported in specified network id"); ex.addProxyObject(network, networkId, "networkId"); throw ex; diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 966c32de6c2..1570d1a9ba0 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -130,6 +130,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.IsolationType; @@ -290,6 +291,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian @Inject NetworkManager _networkMgr; @Inject + NetworkModel _networkModel; + @Inject VirtualMachineManager _itMgr; @Inject VpnUserDao _vpnUsersDao; @@ -805,7 +808,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (privateIP != null) { List routerNics = _nicDao.listByVmId(router.getId()); for (Nic routerNic : routerNics) { - Network network = _networkMgr.getNetwork(routerNic.getNetworkId()); + Network network = _networkModel.getNetwork(routerNic.getNetworkId()); if (network.getTrafficType() == TrafficType.Public) { boolean forVpc = router.getVpcId() != null; final NetworkUsageCommand usageCmd = new NetworkUsageCommand(privateIP, router.getHostName(), @@ -1320,7 +1323,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian // 1) Get deployment plan and find out the list of routers boolean isPodBased = (dest.getDataCenter().getNetworkType() == NetworkType.Basic || - _networkMgr.areServicesSupportedInNetwork(guestNetwork.getId(), Service.SecurityGroup)) + _networkModel.areServicesSupportedInNetwork(guestNetwork.getId(), Service.SecurityGroup)) && guestNetwork.getTrafficType() == TrafficType.Guest; // dest has pod=null, for Basic Zone findOrDeployVRs for all Pods @@ -1380,7 +1383,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian // Check if providers are supported in the physical networks VirtualRouterProviderType type = VirtualRouterProviderType.VirtualRouter; - Long physicalNetworkId = _networkMgr.getPhysicalNetworkId(guestNetwork); + Long physicalNetworkId = _networkModel.getPhysicalNetworkId(guestNetwork); PhysicalNetworkServiceProvider provider = _physicalProviderDao.findByServiceProvider(physicalNetworkId, type.toString()); if (provider == null) { throw new CloudRuntimeException("Cannot find service provider " + type.toString() + " in physical network " + physicalNetworkId); @@ -1390,13 +1393,13 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian throw new CloudRuntimeException("Cannot find virtual router provider " + type.toString() + " as service provider " + provider.getId()); } - if (_networkMgr.isNetworkSystem(guestNetwork) || guestNetwork.getGuestType() == Network.GuestType.Shared) { + if (_networkModel.isNetworkSystem(guestNetwork) || guestNetwork.getGuestType() == Network.GuestType.Shared) { owner = _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM); } // Check if public network has to be set on VR boolean publicNetwork = false; - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetwork.getId(), Service.SourceNat, Provider.VirtualRouter)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetwork.getId(), Service.SourceNat, Provider.VirtualRouter)) { publicNetwork = true; } if (isRedundant && !publicNetwork) { @@ -1598,7 +1601,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian s_logger.debug("Adding nic for Virtual Router in Guest network " + guestNetwork); String defaultNetworkStartIp = null; if (guestNetwork.getCidr() != null && !setupPublicNetwork) { - String startIp = _networkMgr.getStartIpAddress(guestNetwork.getId()); + String startIp = _networkModel.getStartIpAddress(guestNetwork.getId()); if (startIp != null && _ipAddressDao.findByIpAndSourceNetworkId(guestNetwork.getId(), startIp).getAllocatedTime() == null) { defaultNetworkStartIp = startIp; } else if (s_logger.isDebugEnabled()){ @@ -1630,7 +1633,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian //2) Control network s_logger.debug("Adding nic for Virtual Router in Control network "); - List offerings = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork); + List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork); NetworkOfferingVO controlOffering = offerings.get(0); NetworkVO controlConfig = _networkMgr.setupNetwork(_systemAcct, controlOffering, plan, null, null, false).get(0); networks.add(new Pair(controlConfig, null)); @@ -1653,7 +1656,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (hasGuestNetwork) { defaultNic.setDeviceId(2); } - NetworkOfferingVO publicOffering = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemPublicNetwork).get(0); + NetworkOfferingVO publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemPublicNetwork).get(0); List publicNetworks = _networkMgr.setupNetwork(_systemAcct, publicOffering, plan, null, null, false); networks.add(new Pair(publicNetworks.get(0), defaultNic)); } @@ -1871,8 +1874,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } } else if (nic.getTrafficType() == TrafficType.Guest) { - dnsProvided = _networkMgr.isProviderSupportServiceInNetwork(nic.getNetworkId(), Service.Dns, Provider.VirtualRouter); - dhcpProvided = _networkMgr.isProviderSupportServiceInNetwork(nic.getNetworkId(), Service.Dhcp, Provider.VirtualRouter); + dnsProvided = _networkModel.isProviderSupportServiceInNetwork(nic.getNetworkId(), Service.Dns, Provider.VirtualRouter); + dhcpProvided = _networkModel.isProviderSupportServiceInNetwork(nic.getNetworkId(), Service.Dhcp, Provider.VirtualRouter); //build bootloader parameter for the guest buf.append(createGuestBootLoadArgs(nic, defaultDns1, defaultDns2, router)); } else if (nic.getTrafficType() == TrafficType.Public) { @@ -1973,7 +1976,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian s_logger.error("Failed to get update priority!", e); throw new CloudRuntimeException("Failed to get update priority!"); } - Network net = _networkMgr.getNetwork(guestNic.getNetworkId()); + Network net = _networkModel.getNetwork(guestNic.getNetworkId()); buf.append(" guestgw=").append(net.getGateway()); String brd = NetUtils.long2Ip(NetUtils.ip2Long(guestNic.getIp4Address()) | ~NetUtils.ip2Long(guestNic.getNetmask())); buf.append(" guestbrd=").append(brd); @@ -2129,13 +2132,13 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } protected void finalizeUserDataAndDhcpOnStart(Commands cmds, DomainRouterVO router, Provider provider, Long guestNetworkId) { - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Dhcp, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Dhcp, provider)) { // Resend dhcp s_logger.debug("Reapplying dhcp entries as a part of domR " + router + " start..."); createDhcpEntryCommandsForVMs(router, cmds, guestNetworkId); } - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.UserData, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.UserData, provider)) { // Resend user data s_logger.debug("Reapplying vm data (userData and metaData) entries as a part of domR " + router + " start..."); createVmDataCommandForVMs(router, cmds, guestNetworkId); @@ -2156,26 +2159,26 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian //Get information about all the rules (StaticNats and StaticNatRules; PFVPN to reapply on domR start) for (PublicIpAddress ip : publicIps) { - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.PortForwarding, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.PortForwarding, provider)) { pfRules.addAll(_pfRulesDao.listForApplication(ip.getId())); } - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.StaticNat, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.StaticNat, provider)) { staticNatFirewallRules.addAll(_rulesDao.listByIpAndPurpose(ip.getId(), Purpose.StaticNat)); } - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Firewall, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Firewall, provider)) { firewallRules.addAll(_rulesDao.listByIpAndPurpose(ip.getId(), Purpose.Firewall)); } - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Vpn, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Vpn, provider)) { RemoteAccessVpn vpn = _vpnDao.findById(ip.getId()); if (vpn != null) { vpns.add(vpn); } } - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.StaticNat, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.StaticNat, provider)) { if (ip.isOneToOneNat()) { - String dstIp = _networkMgr.getIpInNetwork(ip.getAssociatedWithVmId(), guestNetworkId); + String dstIp = _networkModel.getIpInNetwork(ip.getAssociatedWithVmId(), guestNetworkId); StaticNatImpl staticNat = new StaticNatImpl(ip.getAccountId(), ip.getDomainId(), guestNetworkId, ip.getId(), dstIp, false); staticNats.add(staticNat); } @@ -2220,7 +2223,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian List lbs = _loadBalancerDao.listByNetworkId(guestNetworkId); List lbRules = new ArrayList(); - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Lb, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Lb, provider)) { // Re-apply load balancing rules for (LoadBalancerVO lb : lbs) { List dstList = _lbMgr.getExistingDestinations(lb.getId()); @@ -2245,7 +2248,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (publicIps != null && !publicIps.isEmpty()) { s_logger.debug("Found " + publicIps.size() + " ip(s) to apply as a part of domR " + router + " start."); // Re-apply public ip addresses - should come before PF/LB/VPN - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.Firewall, provider)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Firewall, provider)) { createAssociateIPCommands(router, publicIps, cmds, 0); } } @@ -2254,7 +2257,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian protected ArrayList getPublicIpsToApply(VirtualRouter router, Provider provider, Long guestNetworkId, com.cloud.network.IpAddress.State... skipInStates) { long ownerId = router.getAccountId(); - final List userIps = _networkMgr.listPublicIpsAssignedToGuestNtwk(ownerId, guestNetworkId, null); + final List userIps = _networkModel.listPublicIpsAssignedToGuestNtwk(ownerId, guestNetworkId, null); List allPublicIps = new ArrayList(); if (userIps != null && !userIps.isEmpty()) { boolean addIp = true; @@ -2279,8 +2282,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian //Get public Ips that should be handled by router Network network = _networkDao.findById(guestNetworkId); - Map> ipToServices = _networkMgr.getIpToServices(allPublicIps, false, true); - Map> providerToIpList = _networkMgr.getProviderToIpList(network, ipToServices); + Map> ipToServices = _networkModel.getIpToServices(allPublicIps, false, true); + Map> providerToIpList = _networkModel.getProviderToIpList(network, ipToServices); // Only cover virtual router for now, if ELB use it this need to be modified ArrayList publicIps = providerToIpList.get(provider); @@ -2313,7 +2316,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian List routerNics = _nicDao.listByVmId(profile.getId()); for (Nic routerNic : routerNics) { - Network network = _networkMgr.getNetwork(routerNic.getNetworkId()); + Network network = _networkModel.getNetwork(routerNic.getNetworkId()); if (network.getTrafficType() == TrafficType.Guest) { guestNetworks.add(network); } @@ -2413,7 +2416,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian for (VirtualRouter router : routers) { if (router.getState() == State.Running) { Commands cmds = new Commands(OnError.Continue); - IpAddress ip = _networkMgr.getIp(vpn.getServerAddressId()); + IpAddress ip = _networkModel.getIp(vpn.getServerAddressId()); RemoteAccessVpnCfgCommand removeVpnCmd = new RemoteAccessVpnCfgCommand(false, ip.getAddress().addr(), vpn.getLocalIp(), vpn.getIpRange(), vpn.getIpsecPresharedKey()); @@ -2513,7 +2516,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian NicVO defaultNic = _nicDao.findDefaultNicForVM(userVmId); //check if DNS provider is the domR - if (!_networkMgr.isProviderSupportServiceInNetwork(defaultNic.getNetworkId(), Service.Dns, Provider.VirtualRouter)) { + if (!_networkModel.isProviderSupportServiceInNetwork(defaultNic.getNetworkId(), Service.Dns, Provider.VirtualRouter)) { return null; } @@ -2522,7 +2525,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian return findGatewayIp(userVmId); } - DataCenter dc = _dcDao.findById(_networkMgr.getNetwork(defaultNic.getNetworkId()).getDataCenterId()); + DataCenter dc = _dcDao.findById(_networkModel.getNetwork(defaultNic.getNetworkId()).getDataCenterId()); boolean isZoneBasic = (dc.getNetworkType() == NetworkType.Basic); //find domR's nic in the network @@ -2741,8 +2744,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian }); // Get network rate - required for IpAssoc - Integer networkRate = _networkMgr.getNetworkRate(ipAddrList.get(0).getNetworkId(), router.getId()); - Network network = _networkMgr.getNetwork(ipAddrList.get(0).getNetworkId()); + Integer networkRate = _networkModel.getNetworkRate(ipAddrList.get(0).getNetworkId(), router.getId()); + Network network = _networkModel.getNetwork(ipAddrList.get(0).getNetworkId()); IpAddressTO[] ipsToSend = new IpAddressTO[ipAddrList.size()]; int i = 0; @@ -2765,7 +2768,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian sourceNat, vlanId, vlanGateway, vlanNetmask, vifMacAddress, networkRate, ipAddr.isOneToOneNat()); ip.setTrafficType(network.getTrafficType()); - ip.setNetworkName(_networkMgr.getNetworkTag(router.getHypervisorType(), network)); + ip.setNetworkName(_networkModel.getNetworkTag(router.getHypervisorType(), network)); ipsToSend[i++] = ip; /* send the firstIP = true for the first Add, this is to create primary on interface*/ if (!firstIP || add) { @@ -2788,7 +2791,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (rules != null) { rulesTO = new ArrayList(); for (PortForwardingRule rule : rules) { - IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId()); + IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId()); PortForwardingRuleTO ruleTO = new PortForwardingRuleTO(rule, null, sourceIp.getAddress().addr()); rulesTO.add(ruleTO); } @@ -2816,7 +2819,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (rules != null) { rulesTO = new ArrayList(); for (StaticNatRule rule : rules) { - IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId()); + IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId()); StaticNatRuleTO ruleTO = new StaticNatRuleTO(rule, null, sourceIp.getAddress().addr(), rule.getDestIpAddress()); rulesTO.add(ruleTO); } @@ -2841,7 +2844,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian String algorithm = rule.getAlgorithm(); String uuid = rule.getUuid(); - String srcIp = _networkMgr.getIp(rule.getSourceIpAddressId()).getAddress().addr(); + String srcIp = _networkModel.getIp(rule.getSourceIpAddressId()).getAddress().addr(); int srcPort = rule.getSourcePortStart(); List destinations = rule.getDestinations(); List stickinessPolicies = rule.getStickinessPolicies(); @@ -2855,12 +2858,12 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian routerPublicIp = domr.getPublicIpAddress(); } - Network guestNetwork = _networkMgr.getNetwork(guestNetworkId); + Network guestNetwork = _networkModel.getNetwork(guestNetworkId); Nic nic = _nicDao.findByInstanceIdAndNetworkId(guestNetwork.getId(), router.getId()); NicProfile nicProfile = new NicProfile(nic, guestNetwork, nic.getBroadcastUri(), nic.getIsolationUri(), - _networkMgr.getNetworkRate(guestNetwork.getId(), router.getId()), - _networkMgr.isSecurityGroupSupportedInNetwork(guestNetwork), - _networkMgr.getNetworkTag(router.getHypervisorType(), guestNetwork)); + _networkModel.getNetworkRate(guestNetwork.getId(), router.getId()), + _networkModel.isSecurityGroupSupportedInNetwork(guestNetwork), + _networkModel.getNetworkTag(router.getHypervisorType(), guestNetwork)); LoadBalancerConfigCommand cmd = new LoadBalancerConfigCommand(lbs,routerPublicIp, getRouterIpInNetwork(guestNetworkId, router.getId()),router.getPrivateIpAddress(), @@ -2898,7 +2901,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian addUsersCmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, getRouterIpInNetwork(vpn.getNetworkId(), router.getId())); addUsersCmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); - IpAddress ip = _networkMgr.getIp(vpn.getServerAddressId()); + IpAddress ip = _networkModel.getIp(vpn.getServerAddressId()); RemoteAccessVpnCfgCommand startVpnCmd = new RemoteAccessVpnCfgCommand(true, ip.getAddress().addr(), vpn.getLocalIp(), vpn.getIpRange(), vpn.getIpsecPresharedKey()); @@ -3173,7 +3176,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (rules != null) { rulesTO = new ArrayList(); for (FirewallRule rule : rules) { - IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId()); + IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId()); FirewallRuleTO ruleTO = new FirewallRuleTO(rule, null, sourceIp.getAddress().addr()); rulesTO.add(ruleTO); } @@ -3317,7 +3320,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (rules != null) { rulesTO = new ArrayList(); for (StaticNat rule : rules) { - IpAddress sourceIp = _networkMgr.getIp(rule.getSourceIpAddressId()); + IpAddress sourceIp = _networkModel.getIp(rule.getSourceIpAddressId()); StaticNatRuleTO ruleTO = new StaticNatRuleTO(0, sourceIp.getAddress().addr(), null, null, rule.getDestIpAddress(), null, null, null, rule.isForRevoke(), false); rulesTO.add(ruleTO); @@ -3450,7 +3453,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (privateIP != null) { List routerNics = _nicDao.listByVmId(router.getId()); for (Nic routerNic : routerNics) { - Network network = _networkMgr.getNetwork(routerNic.getNetworkId()); + Network network = _networkModel.getNetwork(routerNic.getNetworkId()); if (network.getTrafficType() == TrafficType.Public) { boolean forVpc = router.getVpcId() != null; final NetworkUsageCommand usageCmd = new NetworkUsageCommand(privateIP, router.getHostName(), diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index 1fd710dc23d..12af4baa24c 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -287,12 +287,12 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } //Check if router is a part of the Guest network - if (!_networkMgr.isVmPartOfNetwork(router.getId(), network.getId())) { + if (!_networkModel.isVmPartOfNetwork(router.getId(), network.getId())) { s_logger.debug("Router " + router + " is not a part of the Guest network " + network); return true; } - boolean result = setupVpcGuestNetwork(network, router, false, _networkMgr.getNicProfile(router, network.getId(), null)); + boolean result = setupVpcGuestNetwork(network, router, false, _networkModel.getNicProfile(router, network.getId(), null)); if (!result) { s_logger.warn("Failed to destroy guest network config " + network + " on router " + router); return false; @@ -421,13 +421,13 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } protected SetupGuestNetworkCommand createSetupGuestNetworkCommand(VirtualRouter router, boolean add, NicProfile guestNic) { - Network network = _networkMgr.getNetwork(guestNic.getNetworkId()); + Network network = _networkModel.getNetwork(guestNic.getNetworkId()); String defaultDns1 = null; String defaultDns2 = null; - boolean dnsProvided = _networkMgr.isProviderSupportServiceInNetwork(network.getId(), Service.Dns, Provider.VPCVirtualRouter); - boolean dhcpProvided = _networkMgr.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, + boolean dnsProvided = _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dns, Provider.VPCVirtualRouter); + boolean dhcpProvided = _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, Provider.VPCVirtualRouter); boolean setupDns = dnsProvided || dhcpProvided; @@ -441,7 +441,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian String networkDomain = network.getNetworkDomain(); String dhcpRange = getGuestDhcpRange(guestNic, network, _configMgr.getZone(network.getDataCenterId())); - NicProfile nicProfile = _networkMgr.getNicProfile(router, nic.getNetworkId(), null); + NicProfile nicProfile = _networkModel.getNicProfile(router, nic.getNetworkId(), null); SetupGuestNetworkCommand setupCmd = new SetupGuestNetworkCommand(dhcpRange, networkDomain, false, null, defaultDns1, defaultDns2, add, _itMgr.toNicTO(nicProfile, router.getHypervisorType())); @@ -482,8 +482,8 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian List ipAddrList = vlanAndIp.getValue(); // Get network rate - required for IpAssoc - Integer networkRate = _networkMgr.getNetworkRate(ipAddrList.get(0).getNetworkId(), router.getId()); - Network network = _networkMgr.getNetwork(ipAddrList.get(0).getNetworkId()); + Integer networkRate = _networkModel.getNetworkRate(ipAddrList.get(0).getNetworkId(), router.getId()); + Network network = _networkModel.getNetwork(ipAddrList.get(0).getNetworkId()); IpAddressTO[] ipsToSend = new IpAddressTO[ipAddrList.size()]; int i = 0; @@ -498,7 +498,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian networkRate, ipAddr.isOneToOneNat()); ip.setTrafficType(network.getTrafficType()); - ip.setNetworkName(_networkMgr.getNetworkTag(router.getHypervisorType(), network)); + ip.setNetworkName(_networkModel.getNetworkTag(router.getHypervisorType(), network)); ipsToSend[i++] = ip; if (ipAddr.isSourceNat()) { sourceNatIpAdd = new Pair(ip, ipAddr.getNetworkId()); @@ -528,7 +528,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian } protected NicTO getNicTO(final VirtualRouter router, Long networkId, String broadcastUri) { - NicProfile nicProfile = _networkMgr.getNicProfile(router, networkId, broadcastUri); + NicProfile nicProfile = _networkModel.getNicProfile(router, networkId, broadcastUri); return _itMgr.toNicTO(nicProfile, router.getHypervisorType()); } @@ -557,7 +557,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian for (String vlanTag : nicsToUnplug.keySet()) { Network publicNtwk = null; try { - publicNtwk = _networkMgr.getNetwork(nicsToUnplug.get(vlanTag).getNetworkId()); + publicNtwk = _networkModel.getNetwork(nicsToUnplug.get(vlanTag).getNetworkId()); URI broadcastUri = BroadcastDomainType.Vlan.toUri(vlanTag); _itMgr.removeVmFromNetwork(router, publicNtwk, broadcastUri); } catch (ConcurrentOperationException e) { @@ -589,7 +589,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian NicProfile publicNic = null; Network publicNtwk = null; try { - publicNtwk = _networkMgr.getNetwork(ip.getNetworkId()); + publicNtwk = _networkModel.getNetwork(ip.getNetworkId()); publicNic = _itMgr.addVmToNetwork(router, publicNtwk, defaultNic); } catch (ConcurrentOperationException e) { s_logger.warn("Failed to add router " + router + " to vlan " + vlanTag + @@ -772,7 +772,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian List routerNics = _nicDao.listByVmId(profile.getId()); for (Nic routerNic : routerNics) { - Network network = _networkMgr.getNetwork(routerNic.getNetworkId()); + Network network = _networkModel.getNetwork(routerNic.getNetworkId()); if (network.getTrafficType() == TrafficType.Guest) { Pair guestNic = new Pair(routerNic, network); guestNics.add(guestNic); @@ -835,10 +835,10 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian PlugNicCommand plugNicCmd = new PlugNicCommand(getNicTO(router, guestNic.getNetworkId(), null), router.getInstanceName()); cmds.addCommand(plugNicCmd); - if (!_networkMgr.isPrivateGateway(guestNic)) { + if (!_networkModel.isPrivateGateway(guestNic)) { //set guest network VirtualMachine vm = _vmDao.findById(router.getId()); - NicProfile nicProfile = _networkMgr.getNicProfile(vm, guestNic.getNetworkId(), null); + NicProfile nicProfile = _networkModel.getNicProfile(vm, guestNic.getNetworkId(), null); SetupGuestNetworkCommand setupCmd = createSetupGuestNetworkCommand(router, true, nicProfile); cmds.addCommand(setupCmd); } else { @@ -918,7 +918,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian super.finalizeNetworkRulesForNetwork(cmds, router, provider, guestNetworkId); if (router.getVpcId() != null) { - if (_networkMgr.isProviderSupportServiceInNetwork(guestNetworkId, Service.NetworkACL, Provider.VPCVirtualRouter)) { + if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.NetworkACL, Provider.VPCVirtualRouter)) { List networkACLs = _networkACLMgr.listNetworkACLs(guestNetworkId); s_logger.debug("Found " + networkACLs.size() + " network ACLs to apply as a part of VPC VR " + router + " start for guest network id=" + guestNetworkId); @@ -933,7 +933,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian public boolean setupPrivateGateway(PrivateGateway gateway, VirtualRouter router) throws ConcurrentOperationException, ResourceUnavailableException { boolean result = true; try { - Network network = _networkMgr.getNetwork(gateway.getNetworkId()); + Network network = _networkModel.getNetwork(gateway.getNetworkId()); NicProfile requested = createPrivateNicProfileForGateway(gateway); NicProfile guestNic = _itMgr.addVmToNetwork(router, network, requested); @@ -1006,15 +1006,15 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian public boolean destroyPrivateGateway(PrivateGateway gateway, VirtualRouter router) throws ConcurrentOperationException, ResourceUnavailableException { - if (!_networkMgr.isVmPartOfNetwork(router.getId(), gateway.getNetworkId())) { + if (!_networkModel.isVmPartOfNetwork(router.getId(), gateway.getNetworkId())) { s_logger.debug("Router doesn't have nic for gateway " + gateway + " so no need to removed it"); return true; } - Network privateNetwork = _networkMgr.getNetwork(gateway.getNetworkId()); + Network privateNetwork = _networkModel.getNetwork(gateway.getNetworkId()); s_logger.debug("Releasing private ip for gateway " + gateway + " from " + router); - boolean result = setupVpcPrivateNetwork(router, false, _networkMgr.getNicProfile(router, privateNetwork.getId(), null)); + boolean result = setupVpcPrivateNetwork(router, false, _networkModel.getNicProfile(router, privateNetwork.getId(), null)); if (!result) { s_logger.warn("Failed to release private ip for gateway " + gateway + " on router " + router); return false; @@ -1167,13 +1167,13 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian int i = 0; for (final PrivateIpAddress ipAddr : ipAddrList) { - Network network = _networkMgr.getNetwork(ipAddr.getNetworkId()); + Network network = _networkModel.getNetwork(ipAddr.getNetworkId()); IpAddressTO ip = new IpAddressTO(Account.ACCOUNT_ID_SYSTEM, ipAddr.getIpAddress(), add, false, false, ipAddr.getVlanTag(), ipAddr.getGateway(), ipAddr.getNetmask(), ipAddr.getMacAddress(), null, false); ip.setTrafficType(network.getTrafficType()); - ip.setNetworkName(_networkMgr.getNetworkTag(router.getHypervisorType(), network)); + ip.setNetworkName(_networkModel.getNetworkTag(router.getHypervisorType(), network)); ipsToSend[i++] = ip; } @@ -1205,7 +1205,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian VpcGateway privateGateway = _vpcMgr.getPrivateGatewayForVpc(vpcId); if (privateGateway != null) { NicProfile privateNic = createPrivateNicProfileForGateway(privateGateway); - Network privateNetwork = _networkMgr.getNetwork(privateGateway.getNetworkId()); + Network privateNetwork = _networkModel.getNetwork(privateGateway.getNetworkId()); networks.add(new Pair((NetworkVO) privateNetwork, privateNic)); } @@ -1235,7 +1235,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian publicNic.setBroadcastType(BroadcastDomainType.Vlan); publicNic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(publicIp.getVlanTag())); publicNic.setIsolationUri(IsolationType.Vlan.toUri(publicIp.getVlanTag())); - NetworkOfferingVO publicOffering = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemPublicNetwork).get(0); + NetworkOfferingVO publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemPublicNetwork).get(0); List publicNetworks = _networkMgr.setupNetwork(_systemAcct, publicOffering, plan, null, null, false); networks.add(new Pair(publicNetworks.get(0), publicNic)); publicVlans.add(publicIp.getVlanTag()); @@ -1247,7 +1247,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian @DB protected NicProfile createPrivateNicProfileForGateway(VpcGateway privateGateway) { - Network privateNetwork = _networkMgr.getNetwork(privateGateway.getNetworkId()); + Network privateNetwork = _networkModel.getNetwork(privateGateway.getNetworkId()); PrivateIpVO ipVO = _privateIpDao.allocateIpAddress(privateNetwork.getDataCenterId(), privateNetwork.getId(), privateGateway.getIp4Address()); Nic privateNic = _nicDao.findByIp4AddressAndNetworkId(ipVO.getIpAddress(), privateNetwork.getId()); @@ -1256,9 +1256,9 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian if (privateNic != null) { VirtualMachine vm = _vmDao.findById(privateNic.getId()); privateNicProfile = new NicProfile(privateNic, privateNetwork, privateNic.getBroadcastUri(), privateNic.getIsolationUri(), - _networkMgr.getNetworkRate(privateNetwork.getId(), vm.getId()), - _networkMgr.isSecurityGroupSupportedInNetwork(privateNetwork), - _networkMgr.getNetworkTag(vm.getHypervisorType(), privateNetwork)); + _networkModel.getNetworkRate(privateNetwork.getId(), vm.getId()), + _networkModel.isSecurityGroupSupportedInNetwork(privateNetwork), + _networkModel.getNetworkTag(vm.getHypervisorType(), privateNetwork)); } else { String vlanTag = privateNetwork.getBroadcastUri().getHost(); String netmask = NetUtils.getCidrNetmask(privateNetwork.getCidr()); diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index 02d186d9b3b..1548afeb420 100755 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -33,6 +33,7 @@ import com.cloud.network.IpAddress; import com.cloud.network.Network; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.dao.FirewallRulesCidrsDao; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; @@ -90,6 +91,8 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { @Inject NetworkManager _networkMgr; @Inject + NetworkModel _networkModel; + @Inject EventDao _eventDao; @Inject UsageEventDao _usageEventDao; @@ -173,14 +176,14 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { } Long networkId = rule.getNetworkId(); - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); //associate ip address to network (if needed) boolean performedIpAssoc = false; if (ipAddress.getAssociatedWithNetworkId() == null) { boolean assignToVpcNtwk = network.getVpcId() != null && ipAddress.getVpcId() != null && ipAddress.getVpcId().longValue() == network.getVpcId(); if (assignToVpcNtwk) { - _networkMgr.checkIpForService(ipAddress, Service.PortForwarding, networkId); + _networkModel.checkIpForService(ipAddress, Service.PortForwarding, networkId); s_logger.debug("The ip is not associated with the VPC network id="+ networkId + ", so assigning"); try { @@ -192,7 +195,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { } } } else { - _networkMgr.checkIpForService(ipAddress, Service.PortForwarding, null); + _networkModel.checkIpForService(ipAddress, Service.PortForwarding, null); } if (ipAddress.getAssociatedWithNetworkId() == null) { @@ -228,7 +231,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { // Verify that vm has nic in the network Ip dstIp = rule.getDestinationIpAddress(); - Nic guestNic = _networkMgr.getNicInNetwork(vmId, networkId); + Nic guestNic = _networkModel.getNicInNetwork(vmId, networkId); if (guestNic == null || guestNic.getIp4Address() == null) { throw new InvalidParameterValueException("Vm doesn't belong to network associated with ipAddress"); } else { @@ -326,15 +329,15 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { Long accountId = ipAddress.getAllocatedToAccountId(); Long domainId = ipAddress.getAllocatedInDomainId(); - _networkMgr.checkIpForService(ipAddress, Service.StaticNat, null); + _networkModel.checkIpForService(ipAddress, Service.StaticNat, null); - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); NetworkOffering off = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); if (off.getElasticIp()) { throw new InvalidParameterValueException("Can't create ip forwarding rules for the network where elasticIP service is enabled"); } - String dstIp = _networkMgr.getIpInNetwork(ipAddress.getAssociatedWithVmId(), networkId); + String dstIp = _networkModel.getIpInNetwork(ipAddress.getAssociatedWithVmId(), networkId); Transaction txn = Transaction.currentTxn(); txn.start(); @@ -398,19 +401,19 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { boolean performedIpAssoc = false; boolean result = false; try { - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); if (network == null) { throw new InvalidParameterValueException("Unable to find network by id"); } // Check that vm has a nic in the network - Nic guestNic = _networkMgr.getNicInNetwork(vmId, networkId); + Nic guestNic = _networkModel.getNicInNetwork(vmId, networkId); if (guestNic == null) { throw new InvalidParameterValueException("Vm doesn't belong to the network with specified id"); } - if (!_networkMgr.areServicesSupportedInNetwork(network.getId(), Service.StaticNat)) { + if (!_networkModel.areServicesSupportedInNetwork(network.getId(), Service.StaticNat)) { throw new InvalidParameterValueException("Unable to create static nat rule; StaticNat service is not " + "supported in network with specified id"); } @@ -426,7 +429,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { boolean assignToVpcNtwk = network.getVpcId() != null && ipAddress.getVpcId() != null && ipAddress.getVpcId().longValue() == network.getVpcId(); if (assignToVpcNtwk) { - _networkMgr.checkIpForService(ipAddress, Service.StaticNat, networkId); + _networkModel.checkIpForService(ipAddress, Service.StaticNat, networkId); s_logger.debug("The ip is not associated with the VPC network id="+ networkId + ", so assigning"); try { @@ -439,7 +442,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { performedIpAssoc = true; } } else { - _networkMgr.checkIpForService(ipAddress, Service.StaticNat, null); + _networkModel.checkIpForService(ipAddress, Service.StaticNat, null); } if (ipAddress.getAssociatedWithNetworkId() == null) { @@ -512,7 +515,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { Long networkId = oldIP.getAssociatedWithNetworkId(); boolean reassignStaticNat = false; if (networkId != null) { - Network guestNetwork = _networkMgr.getNetwork(networkId); + Network guestNetwork = _networkModel.getNetwork(networkId); NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); if (offering.getElasticIp()) { reassignStaticNat = true; @@ -875,7 +878,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { List staticNats = new ArrayList(); for (IPAddressVO ip : ips) { // Get nic IP4 address - String dstIp = _networkMgr.getIpInNetwork(ip.getAssociatedWithVmId(), networkId); + String dstIp = _networkModel.getIpInNetwork(ip.getAssociatedWithVmId(), networkId); StaticNatImpl staticNat = new StaticNatImpl(ip.getAllocatedToAccountId(), ip.getAllocatedInDomainId(), networkId, ip.getId(), dstIp, false); staticNats.add(staticNat); } @@ -1170,7 +1173,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { // if network has elastic IP functionality supported, we first have to disable static nat on old ip in order to // re-enable it on the new one enable static nat takes care of that - Network guestNetwork = _networkMgr.getNetwork(ipAddress.getAssociatedWithNetworkId()); + Network guestNetwork = _networkModel.getNetwork(ipAddress.getAssociatedWithNetworkId()); NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); if (offering.getElasticIp()) { if (offering.getAssociatePublicIP()) { @@ -1257,9 +1260,9 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { String dstIp; if (forRevoke) { - dstIp = _networkMgr.getIpInNetworkIncludingRemoved(ip.getAssociatedWithVmId(), rule.getNetworkId()); + dstIp = _networkModel.getIpInNetworkIncludingRemoved(ip.getAssociatedWithVmId(), rule.getNetworkId()); } else { - dstIp = _networkMgr.getIpInNetwork(ip.getAssociatedWithVmId(), rule.getNetworkId()); + dstIp = _networkModel.getIpInNetwork(ip.getAssociatedWithVmId(), rule.getNetworkId()); } return new StaticNatRuleImpl(ruleVO, dstIp); @@ -1327,7 +1330,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { } UserVmVO vm = _vmDao.findById(sourceIp.getAssociatedWithVmId()); - Network network = _networkMgr.getNetwork(networkId); + Network network = _networkModel.getNetwork(networkId); if (network == null) { CloudRuntimeException ex = new CloudRuntimeException("Unable to find an ip address to map to specified vm id"); ex.addProxyObject(vm, vm.getId(), "vmId"); @@ -1343,9 +1346,9 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { String dstIp; if (forRevoke) { - dstIp = _networkMgr.getIpInNetworkIncludingRemoved(sourceIp.getAssociatedWithVmId(), networkId); + dstIp = _networkModel.getIpInNetworkIncludingRemoved(sourceIp.getAssociatedWithVmId(), networkId); } else { - dstIp = _networkMgr.getIpInNetwork(sourceIp.getAssociatedWithVmId(), networkId); + dstIp = _networkModel.getIpInNetwork(sourceIp.getAssociatedWithVmId(), networkId); } StaticNatImpl staticNat = new StaticNatImpl(sourceIp.getAllocatedToAccountId(), sourceIp.getAllocatedInDomainId(), @@ -1361,7 +1364,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { // enable static nat if eIp capability is supported List nics = _nicDao.listByVmId(vm.getId()); for (Nic nic : nics) { - Network guestNetwork = _networkMgr.getNetwork(nic.getNetworkId()); + Network guestNetwork = _networkModel.getNetwork(nic.getNetworkId()); NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); if (offering.getElasticIp()) { boolean isSystemVM = (vm.getType() == Type.ConsoleProxy || vm.getType() == Type.SecondaryStorageVm); diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java index a1ed6d73e42..1d7d0fdb0e8 100755 --- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java +++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java @@ -66,6 +66,7 @@ import com.cloud.exception.ResourceInUseException; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.Network; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.security.SecurityGroupWork.Step; import com.cloud.network.security.SecurityRule.SecurityRuleType; import com.cloud.network.security.dao.SecurityGroupDao; @@ -152,6 +153,8 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG @Inject NetworkManager _networkMgr; @Inject + NetworkModel _networkModel; + @Inject AccountManager _accountMgr; @Inject DomainManager _domainMgr; @@ -353,7 +356,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG if (rule.getAllowedNetworkId() != null) { List allowedInstances = _securityGroupVMMapDao.listBySecurityGroup(rule.getAllowedNetworkId(), State.Running); for (SecurityGroupVMMapVO ngmapVO : allowedInstances) { - Nic defaultNic = _networkMgr.getDefaultNic(ngmapVO.getInstanceId()); + Nic defaultNic = _networkModel.getDefaultNic(ngmapVO.getInstanceId()); if (defaultNic != null) { String cidr = defaultNic.getIp4Address(); cidr = cidr + "/32"; @@ -1327,8 +1330,8 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG VirtualMachine vm = _vmDao.findByIdIncludingRemoved(vmId); List nics = _networkMgr.getNicProfiles(vm); for (NicProfile nic : nics) { - Network network = _networkMgr.getNetwork(nic.getNetworkId()); - if (_networkMgr.isSecurityGroupSupportedInNetwork(network) && vm.getHypervisorType() != HypervisorType.VMware) { + Network network = _networkModel.getNetwork(nic.getNetworkId()); + if (_networkModel.isSecurityGroupSupportedInNetwork(network) && vm.getHypervisorType() != HypervisorType.VMware) { return true; } } diff --git a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java index ce1b768e9f8..36cb8d50952 100644 --- a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java +++ b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java @@ -35,7 +35,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.Network.Service; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.Networks; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.firewall.NetworkACLService; @@ -79,7 +79,7 @@ public class NetworkACLManagerImpl implements Manager,NetworkACLManager{ @Inject FirewallRulesDao _firewallDao; @Inject - NetworkManager _networkMgr; + NetworkModel _networkMgr; @Inject VpcManager _vpcMgr; @Inject diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java b/server/src/com/cloud/network/vpc/VpcManagerImpl.java index f974d4f79d0..e95c54f5df6 100644 --- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java +++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java @@ -62,6 +62,7 @@ import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkService; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.BroadcastDomainType; @@ -138,6 +139,8 @@ public class VpcManagerImpl implements VpcManager, Manager{ @Inject NetworkManager _ntwkMgr; @Inject + NetworkModel _ntwkModel; + @Inject NetworkService _ntwkSvc; @Inject IPAddressDao _ipAddressDao; @@ -547,12 +550,12 @@ public class VpcManagerImpl implements VpcManager, Manager{ if (networkDomain == null) { // 1) Get networkDomain from the corresponding account - networkDomain = _ntwkMgr.getAccountNetworkDomain(owner.getId(), zoneId); + networkDomain = _ntwkModel.getAccountNetworkDomain(owner.getId(), zoneId); // 2) If null, generate networkDomain using domain suffix from the global config variables if (networkDomain == null) { - networkDomain = "cs" + Long.toHexString(owner.getId()) + _ntwkMgr.getDefaultNetworkDomain(); + networkDomain = "cs" + Long.toHexString(owner.getId()) + _ntwkModel.getDefaultNetworkDomain(); } } @@ -564,7 +567,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ { //the provider has to be enabled at least in one network in the zone for (PhysicalNetwork pNtwk : _pNtwkDao.listByZone(zoneId)) { - if (_ntwkMgr.isProviderEnabledInPhysicalNetwork(pNtwk.getId(), Provider.VPCVirtualRouter.getName())) { + if (_ntwkModel.isProviderEnabledInPhysicalNetwork(pNtwk.getId(), Provider.VPCVirtualRouter.getName())) { return true; } } @@ -961,7 +964,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ } //2) validate network offering attributes - List svcs = _ntwkMgr.listNetworkOfferingServices(guestNtwkOff.getId()); + List svcs = _ntwkModel.listNetworkOfferingServices(guestNtwkOff.getId()); validateNtwkOffForVpc(guestNtwkOff, svcs); //3) Check services/providers against VPC providers @@ -977,14 +980,14 @@ public class VpcManagerImpl implements VpcManager, Manager{ } //4) Only one network in the VPC can support LB - if (_ntwkMgr.areServicesSupportedByNetworkOffering(guestNtwkOff.getId(), Service.Lb)) { + if (_ntwkModel.areServicesSupportedByNetworkOffering(guestNtwkOff.getId(), Service.Lb)) { List networks = getVpcNetworks(vpc.getId()); for (Network network : networks) { if (networkId != null && network.getId() == networkId.longValue()) { //skip my own network continue; } else { - if (_ntwkMgr.areServicesSupportedInNetwork(network.getId(), Service.Lb)) { + if (_ntwkModel.areServicesSupportedInNetwork(network.getId(), Service.Lb)) { throw new InvalidParameterValueException("LB service is already supported " + "by network " + network + " in VPC " + vpc); } @@ -996,7 +999,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ @Override public void validateNtwkOffForVpc(NetworkOffering guestNtwkOff, List supportedSvcs) { //1) in current release, only vpc provider is supported by Vpc offering - List providers = _ntwkMgr.getNtwkOffDistinctProviders(guestNtwkOff.getId()); + List providers = _ntwkModel.getNtwkOffDistinctProviders(guestNtwkOff.getId()); for (Provider provider : providers) { if (provider != Provider.VPCVirtualRouter) { throw new InvalidParameterValueException("Only provider of type " + Provider.VPCVirtualRouter.getName() @@ -1091,7 +1094,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ protected VpcProvider getVpcElement() { if (vpcElement == null) { - vpcElement = ((VpcProvider)_ntwkMgr.getElementImplementingProvider(Provider.VPCVirtualRouter.getName())); + vpcElement = ((VpcProvider)_ntwkModel.getElementImplementingProvider(Provider.VPCVirtualRouter.getName())); } if (vpcElement == null) { @@ -1219,7 +1222,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ } protected PrivateGateway getPrivateGatewayProfile(VpcGateway gateway) { - Network network = _ntwkMgr.getNetwork(gateway.getNetworkId()); + Network network = _ntwkModel.getNetwork(gateway.getNetworkId()); return new PrivateGatewayProfile(gateway, network.getPhysicalNetworkId()); } @@ -1246,7 +1249,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ //Validate physical network if (physicalNetworkId == null) { - List pNtwks = _ntwkMgr.getPhysicalNtwksSupportingTrafficType(vpc.getZoneId(), TrafficType.Guest); + List pNtwks = _ntwkModel.getPhysicalNtwksSupportingTrafficType(vpc.getZoneId(), TrafficType.Guest); if (pNtwks.isEmpty() || pNtwks.size() != 1) { throw new InvalidParameterValueException("Physical network can't be determined; pass physical network id"); } @@ -1770,7 +1773,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ Account caller = UserContext.current().getCaller(); Account owner = null; - IpAddress ipToAssoc = _ntwkMgr.getIp(ipId); + IpAddress ipToAssoc = _ntwkModel.getIp(ipId); if (ipToAssoc != null) { _accountMgr.checkAccess(caller, null, true, ipToAssoc); owner = _accountMgr.getAccount(ipToAssoc.getAllocatedToAccountId()); @@ -1829,7 +1832,7 @@ public class VpcManagerImpl implements VpcManager, Manager{ boolean success = false; try { //unassign ip from the VPC router - success = _ntwkMgr.applyIpAssociations(_ntwkMgr.getNetwork(networkId), true); + success = _ntwkMgr.applyIpAssociations(_ntwkModel.getNetwork(networkId), true); } catch (ResourceUnavailableException ex) { throw new CloudRuntimeException("Failed to apply ip associations for network id=" + networkId + " as a part of unassigning ip " + ipId + " from vpc", ex); diff --git a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java index 45b5d197202..e0f114d0909 100755 --- a/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/RemoteAccessVpnManagerImpl.java @@ -42,7 +42,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.IPAddressVO; import com.cloud.network.Network; import com.cloud.network.Network.Service; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.PublicIpAddress; import com.cloud.network.RemoteAccessVpn; import com.cloud.network.RemoteAccessVpnVO; @@ -94,7 +94,7 @@ public class RemoteAccessVpnManagerImpl implements RemoteAccessVpnService, Manag @Inject IPAddressDao _ipAddressDao; @Inject AccountManager _accountMgr; @Inject DomainManager _domainMgr; - @Inject NetworkManager _networkMgr; + @Inject NetworkModel _networkMgr; @Inject RulesManager _rulesMgr; @Inject DomainDao _domainDao; @Inject FirewallRulesDao _rulesDao; diff --git a/server/src/com/cloud/resource/DiscovererBase.java b/server/src/com/cloud/resource/DiscovererBase.java index b5896530958..64dfa399a14 100644 --- a/server/src/com/cloud/resource/DiscovererBase.java +++ b/server/src/com/cloud/resource/DiscovererBase.java @@ -32,7 +32,7 @@ import com.cloud.dc.ClusterVO; import com.cloud.dc.dao.ClusterDao; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; import com.cloud.utils.net.UrlUtil; @@ -43,7 +43,7 @@ public abstract class DiscovererBase implements Discoverer { private static final Logger s_logger = Logger.getLogger(DiscovererBase.class); @Inject protected ClusterDao _clusterDao; @Inject protected ConfigurationDao _configDao; - @Inject protected NetworkManager _networkMgr; + @Inject protected NetworkModel _networkMgr; @Inject protected HostDao _hostDao; @Override diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 3e3a67a96c2..805a7039e03 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -125,7 +125,7 @@ import com.cloud.host.Status; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.hypervisor.HypervisorGuruManager; -import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.offering.ServiceOffering; import com.cloud.org.Grouping; import com.cloud.org.Grouping.AllocationState; @@ -240,7 +240,7 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag @Inject protected SecondaryStorageVmManager _secStorageMgr; @Inject - protected NetworkManager _networkMgr; + protected NetworkModel _networkMgr; @Inject protected VolumeDao _volsDao; @Inject diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index 7a94001c405..8b55a325f6c 100755 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -77,6 +77,7 @@ import com.cloud.keystore.KeystoreManager; import com.cloud.network.IPAddressVO; import com.cloud.network.Network; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.IPAddressDao; @@ -193,7 +194,9 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V @Inject protected SwiftManager _swiftMgr; @Inject - private NetworkManager _networkMgr; + protected NetworkManager _networkMgr; + @Inject + protected NetworkModel _networkModel; @Inject protected SnapshotDao _snapshotDao; @@ -380,7 +383,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V allowedCidrs.add(cidr); } } - List nics = _networkMgr.getNicsForTraffic(secStorageVm.getId(), TrafficType.Management); + List nics = _networkModel.getNicsForTraffic(secStorageVm.getId(), TrafficType.Management); setupCmd.setAllowedInternalSites(allowedCidrs.toArray(new String[allowedCidrs.size()])); } String copyPasswd = _configDao.getValue("secstorage.copy.password"); @@ -547,7 +550,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V NetworkVO defaultNetwork = defaultNetworks.get(0); - List offerings = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork, NetworkOfferingVO.SystemManagementNetwork, NetworkOfferingVO.SystemStorageNetwork); + List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork, NetworkOfferingVO.SystemManagementNetwork, NetworkOfferingVO.SystemStorageNetwork); List> networks = new ArrayList>(offerings.size() + 1); NicProfile defaultNic = new NicProfile(); defaultNic.setDefaultNic(true); diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 9356048453a..e470c03d971 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -176,6 +176,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager @Inject protected HostPodDao _podDao = null; @Inject + protected NetworkModel _networkModel = null; + @Inject protected NetworkManager _networkMgr = null; @Inject protected StorageManager _storageMgr = null; @@ -346,14 +348,14 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager VMTemplateVO template = _templateDao.findByIdIncludingRemoved(vmInstance.getTemplateId()); if (template.getEnablePassword()) { - Nic defaultNic = _networkMgr.getDefaultNic(vmId); + Nic defaultNic = _networkModel.getDefaultNic(vmId); if (defaultNic == null) { s_logger.error("Unable to reset password for vm " + vmInstance + " as the instance doesn't have default nic"); return false; } Network defaultNetwork = _networkDao.findById(defaultNic.getNetworkId()); - NicProfile defaultNicProfile = new NicProfile(defaultNic, defaultNetwork, null, null, null, _networkMgr.isSecurityGroupSupportedInNetwork(defaultNetwork), _networkMgr.getNetworkTag(template.getHypervisorType(), defaultNetwork)); + NicProfile defaultNicProfile = new NicProfile(defaultNic, defaultNetwork, null, null, null, _networkModel.isSecurityGroupSupportedInNetwork(defaultNetwork), _networkModel.getNetworkTag(template.getHypervisorType(), defaultNetwork)); VirtualMachineProfile vmProfile = new VirtualMachineProfileImpl(vmInstance); vmProfile.setParameter(VirtualMachineProfile.Param.VmPassword, password); @@ -1756,7 +1758,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager private boolean updateUserDataInternal(UserVm vm) throws ResourceUnavailableException, InsufficientCapacityException { VMTemplateVO template = _templateDao.findByIdIncludingRemoved(vm.getTemplateId()); - Nic defaultNic = _networkMgr.getDefaultNic(vm.getId()); + Nic defaultNic = _networkModel.getDefaultNic(vm.getId()); if (defaultNic == null) { s_logger.error("Unable to update userdata for vm id=" + vm.getId() + " as the instance doesn't have default nic"); return false; @@ -1764,12 +1766,12 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager Network defaultNetwork = _networkDao.findById(defaultNic.getNetworkId()); NicProfile defaultNicProfile = new NicProfile(defaultNic, defaultNetwork, null, null, null, - _networkMgr.isSecurityGroupSupportedInNetwork(defaultNetwork), - _networkMgr.getNetworkTag(template.getHypervisorType(), defaultNetwork)); + _networkModel.isSecurityGroupSupportedInNetwork(defaultNetwork), + _networkModel.getNetworkTag(template.getHypervisorType(), defaultNetwork)); VirtualMachineProfile vmProfile = new VirtualMachineProfileImpl((VMInstanceVO)vm); - UserDataServiceProvider element = _networkMgr.getUserDataUpdateProvider(defaultNetwork); + UserDataServiceProvider element = _networkModel.getUserDataUpdateProvider(defaultNetwork); if (element == null) { throw new CloudRuntimeException("Can't find network element for " + Service.UserData.getName() + " provider needed for UserData update"); } @@ -1994,7 +1996,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager _accountMgr.checkAccess(caller, null, true, owner); // Get default guest network in Basic zone - Network defaultNetwork = _networkMgr.getExclusiveGuestNetwork(zone.getId()); + Network defaultNetwork = _networkModel.getExclusiveGuestNetwork(zone.getId()); if (defaultNetwork == null) { throw new InvalidParameterValueException("Unable to find a default network to start a vm"); @@ -2006,7 +2008,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (securityGroupIdList != null && isVmWare) { throw new InvalidParameterValueException("Security group feature is not supported for vmWare hypervisor"); - } else if (!isVmWare && _networkMgr.isSecurityGroupSupportedInNetwork(defaultNetwork) && _networkMgr.canAddDefaultSecurityGroup()) { + } else if (!isVmWare && _networkModel.isSecurityGroupSupportedInNetwork(defaultNetwork) && _networkModel.canAddDefaultSecurityGroup()) { //add the default securityGroup only if no security group is specified if(securityGroupIdList == null || securityGroupIdList.isEmpty()){ if (securityGroupIdList == null) { @@ -2046,7 +2048,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager // If no network is specified, find system security group enabled network if (networkIdList == null || networkIdList.isEmpty()) { - NetworkVO networkWithSecurityGroup = _networkMgr.getNetworkWithSecurityGroupEnabled(zone.getId()); + NetworkVO networkWithSecurityGroup = _networkModel.getNetworkWithSecurityGroupEnabled(zone.getId()); if (networkWithSecurityGroup == null) { throw new InvalidParameterValueException("No network with security enabled is found in zone id=" + zone.getId()); } @@ -2069,7 +2071,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager throw new InvalidParameterValueException("Unable to find network by id " + networkIdList.get(0).longValue()); } - if (!_networkMgr.isSecurityGroupSupportedInNetwork(network)) { + if (!_networkModel.isSecurityGroupSupportedInNetwork(network)) { throw new InvalidParameterValueException("Network is not security group enabled: " + network.getId()); } @@ -2085,7 +2087,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager throw new InvalidParameterValueException("Unable to find network by id " + networkIdList.get(0).longValue()); } - boolean isSecurityGroupEnabled = _networkMgr.isSecurityGroupSupportedInNetwork(network); + boolean isSecurityGroupEnabled = _networkModel.isSecurityGroupSupportedInNetwork(network); if (isSecurityGroupEnabled) { if (networkIdList.size() > 1) { throw new InvalidParameterValueException("Can't create a vm with multiple networks one of" + @@ -2109,7 +2111,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } // if network is security group enabled, and no security group is specified, then add the default security group automatically - if (isSecurityGroupEnabledNetworkUsed && !isVmWare && _networkMgr.canAddDefaultSecurityGroup()) { + if (isSecurityGroupEnabledNetworkUsed && !isVmWare && _networkModel.canAddDefaultSecurityGroup()) { //add the default securityGroup only if no security group is specified if(securityGroupIdList == null || securityGroupIdList.isEmpty()){ @@ -2163,9 +2165,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (requiredOfferings.get(0).getState() == NetworkOffering.State.Enabled) { // get Virtual networks - List virtualNetworks = _networkMgr.listNetworksForAccount(owner.getId(), zone.getId(), Network.GuestType.Isolated); + List virtualNetworks = _networkModel.listNetworksForAccount(owner.getId(), zone.getId(), Network.GuestType.Isolated); if (virtualNetworks.isEmpty()) { - long physicalNetworkId = _networkMgr.findPhysicalNetworkId(zone.getId(), requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType()); + long physicalNetworkId = _networkModel.findPhysicalNetworkId(zone.getId(), requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType()); // Validate physical network PhysicalNetwork physicalNetwork = _physicalNetworkDao.findById(physicalNetworkId); if (physicalNetwork == null) { @@ -2207,7 +2209,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } - _networkMgr.checkNetworkPermissions(owner, network); + _networkModel.checkNetworkPermissions(owner, network); //don't allow to use system networks NetworkOffering networkOffering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); @@ -2376,7 +2378,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager networks.add(new Pair(network, profile)); - if (_networkMgr.isSecurityGroupSupportedInNetwork(network)) { + if (_networkModel.isSecurityGroupSupportedInNetwork(network)) { securityGroupEnabled = true; } @@ -2440,7 +2442,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (hostNames.contains(hostName)) { throw new InvalidParameterValueException("The vm with hostName " + hostName + " already exists in the network domain: " + ntwkDomain + "; network=" - + _networkMgr.getNetwork(ntwkId)); + + _networkModel.getNetwork(ntwkId)); } } } @@ -2760,7 +2762,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager UserContext ctx = UserContext.current(); try { long networkId = ip.getAssociatedWithNetworkId(); - Network guestNetwork = _networkMgr.getNetwork(networkId); + Network guestNetwork = _networkModel.getNetwork(networkId); NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); assert (offering.getAssociatePublicIP() == true) : "User VM should not have system owned public IP associated with it when offering configured not to associate public IP."; _rulesMgr.disableStaticNat(ip.getId(), ctx.getCaller(), ctx.getCallerUserId(), true); @@ -2815,7 +2817,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } //check if vm is security group enabled - if (_securityGroupMgr.isVmSecurityGroupEnabled(vmId) && _securityGroupMgr.getSecurityGroupsForVm(vmId).isEmpty() && !_securityGroupMgr.isVmMappedToDefaultSecurityGroup(vmId) && _networkMgr.canAddDefaultSecurityGroup()) { + if (_securityGroupMgr.isVmSecurityGroupEnabled(vmId) && _securityGroupMgr.getSecurityGroupsForVm(vmId).isEmpty() && !_securityGroupMgr.isVmMappedToDefaultSecurityGroup(vmId) && _networkModel.canAddDefaultSecurityGroup()) { //if vm is not mapped to security group, create a mapping if (s_logger.isDebugEnabled()) { s_logger.debug("Vm " + vm + " is security group enabled, but not mapped to default security group; creating the mapping automatically"); @@ -3503,7 +3505,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager List networkList = new ArrayList(); // Get default guest network in Basic zone - Network defaultNetwork = _networkMgr.getExclusiveGuestNetwork(zone.getId()); + Network defaultNetwork = _networkModel.getExclusiveGuestNetwork(zone.getId()); if (defaultNetwork == null) { throw new InvalidParameterValueException("Unable to find a default network to start a vm"); @@ -3515,7 +3517,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (securityGroupIdList != null && isVmWare) { throw new InvalidParameterValueException("Security group feature is not supported for vmWare hypervisor"); - } else if (!isVmWare && _networkMgr.isSecurityGroupSupportedInNetwork(defaultNetwork) && _networkMgr.canAddDefaultSecurityGroup()) { + } else if (!isVmWare && _networkModel.isSecurityGroupSupportedInNetwork(defaultNetwork) && _networkModel.canAddDefaultSecurityGroup()) { if (securityGroupIdList == null) { securityGroupIdList = new ArrayList(); } @@ -3580,7 +3582,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager throw ex; } - _networkMgr.checkNetworkPermissions(newAccount, network); + _networkModel.checkNetworkPermissions(newAccount, network); //don't allow to use system networks NetworkOffering networkOffering = _configMgr.getNetworkOffering(network.getNetworkOfferingId()); @@ -3601,9 +3603,9 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } if (requiredOfferings.get(0).getState() == NetworkOffering.State.Enabled) { // get Virtual networks - List virtualNetworks = _networkMgr.listNetworksForAccount(newAccount.getId(), zone.getId(), Network.GuestType.Isolated); + List virtualNetworks = _networkModel.listNetworksForAccount(newAccount.getId(), zone.getId(), Network.GuestType.Isolated); if (virtualNetworks.isEmpty()) { - long physicalNetworkId = _networkMgr.findPhysicalNetworkId(zone.getId(), requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType()); + long physicalNetworkId = _networkModel.findPhysicalNetworkId(zone.getId(), requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType()); // Validate physical network PhysicalNetwork physicalNetwork = _physicalNetworkDao.findById(physicalNetworkId); if (physicalNetwork == null) { diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java index 9230f4ae729..f777a9e8782 100755 --- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java @@ -109,6 +109,7 @@ import com.cloud.hypervisor.HypervisorGuru; import com.cloud.hypervisor.HypervisorGuruManager; import com.cloud.network.Network; import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkModel; import com.cloud.network.NetworkVO; import com.cloud.network.dao.NetworkDao; import com.cloud.offering.ServiceOffering; @@ -170,6 +171,8 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene @Inject protected NetworkManager _networkMgr; @Inject + protected NetworkModel _networkModel; + @Inject protected AgentManager _agentMgr; @Inject protected VMInstanceDao _vmDao; @@ -2153,9 +2156,9 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene VirtualMachineProfile profile = new VirtualMachineProfileImpl(vm); List nics = _nicsDao.listByVmId(profile.getId()); for (NicVO nic : nics) { - Network network = _networkMgr.getNetwork(nic.getNetworkId()); + Network network = _networkModel.getNetwork(nic.getNetworkId()); NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), null, - _networkMgr.isSecurityGroupSupportedInNetwork(network), _networkMgr.getNetworkTag(profile.getHypervisorType(), network)); + _networkModel.isSecurityGroupSupportedInNetwork(network), _networkModel.getNetworkTag(profile.getHypervisorType(), network)); profile.addNic(nicProfile); } @@ -2533,13 +2536,13 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene if (broadcastUri != null) { nic = _nicsDao.findByNetworkIdInstanceIdAndBroadcastUri(network.getId(), vm.getId(), broadcastUri.toString()); } else { - nic = _networkMgr.getNicInNetwork(vm.getId(), network.getId()); + nic = _networkModel.getNicInNetwork(vm.getId(), network.getId()); } NicProfile nicProfile = new NicProfile(nic, network, nic.getBroadcastUri(), nic.getIsolationUri(), - _networkMgr.getNetworkRate(network.getId(), vm.getId()), - _networkMgr.isSecurityGroupSupportedInNetwork(network), - _networkMgr.getNetworkTag(vmProfile.getVirtualMachine().getHypervisorType(), network)); + _networkModel.getNetworkRate(network.getId(), vm.getId()), + _networkModel.isSecurityGroupSupportedInNetwork(network), + _networkModel.getNetworkTag(vmProfile.getVirtualMachine().getHypervisorType(), network)); //1) Unplug the nic NicTO nicTO = toNicTO(nicProfile, vmProfile.getVirtualMachine().getHypervisorType()); diff --git a/server/test/com/cloud/network/MockFirewallManagerImpl.java b/server/test/com/cloud/network/MockFirewallManagerImpl.java new file mode 100644 index 00000000000..0d388f2c3ef --- /dev/null +++ b/server/test/com/cloud/network/MockFirewallManagerImpl.java @@ -0,0 +1,183 @@ +package com.cloud.network; + +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.api.commands.ListFirewallRulesCmd; +import com.cloud.exception.NetworkRuleConflictException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.firewall.FirewallService; +import com.cloud.network.rules.FirewallManager; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.FirewallRule.FirewallRuleType; +import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.user.Account; +import com.cloud.utils.Pair; +import com.cloud.utils.component.Manager; + +@Local(value = {FirewallManager.class, FirewallService.class}) +public class MockFirewallManagerImpl implements FirewallManager, + FirewallService, Manager { + + @Override + public boolean configure(String name, Map params) + throws ConfigurationException { + return true; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + // TODO Auto-generated method stub + return false; + } + + @Override + public String getName() { + // TODO Auto-generated method stub + return null; + } + + @Override + public FirewallRule createFirewallRule(FirewallRule rule) + throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return null; + } + + @Override + public Pair, Integer> listFirewallRules( + ListFirewallRulesCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean revokeFirewallRule(long ruleId, boolean apply) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyFirewallRules(long ipId, Account caller) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public FirewallRule getFirewallRule(long ruleId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean revokeRelatedFirewallRule(long ruleId, boolean apply) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void detectRulesConflict(FirewallRule newRule) + throws NetworkRuleConflictException { + // TODO Auto-generated method stub + + } + + @Override + public void validateFirewallRule(Account caller, IPAddressVO ipAddress, + Integer portStart, Integer portEnd, String proto, Purpose purpose, + FirewallRuleType type) { + // TODO Auto-generated method stub + + } + + @Override + public boolean applyRules(List rules, + boolean continueOnError, boolean updateRulesInDB) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyFirewallRules(List rules, + boolean continueOnError, Account caller) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void revokeRule(FirewallRuleVO rule, Account caller, long userId, + boolean needUsageEvent) { + // TODO Auto-generated method stub + + } + + @Override + public boolean revokeFirewallRulesForIp(long ipId, long userId, + Account caller) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean revokeFirewallRule(long ruleId, boolean apply, + Account caller, long userId) { + // TODO Auto-generated method stub + return false; + } + + @Override + public FirewallRule createFirewallRule(long ipAddrId, Account caller, + String xId, Integer portStart, Integer portEnd, String protocol, + List sourceCidrList, Integer icmpCode, Integer icmpType, + Long relatedRuleId, FirewallRuleType type, long networkId) + throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return null; + } + + @Override + public FirewallRule createRuleForAllCidrs(long ipAddrId, Account caller, + Integer startPort, Integer endPort, String protocol, + Integer icmpCode, Integer icmpType, Long relatedRuleId, + long networkId) throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean revokeAllFirewallRulesForNetwork(long networkId, + long userId, Account caller) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean revokeFirewallRulesForVm(long vmId) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean addSystemFirewallRules(IPAddressVO ip, Account acct) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void removeRule(FirewallRule rule) { + // TODO Auto-generated method stub + + } + +} diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index 4ad53245599..96201f0fbd2 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -131,35 +131,16 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public Map> getNetworkCapabilities(long networkId) { - // TODO Auto-generated method stub - return null; - } - + @Override public boolean isNetworkAvailableInDomain(long networkId, long domainId) { // TODO Auto-generated method stub return false; } - @Override - public Long getDedicatedNetworkDomain(long networkId) { - // TODO Auto-generated method stub - return null; - } + - @Override - public Integer getNetworkRate(long networkId, Long vmId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Network getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - // TODO Auto-generated method stub - return null; - } + @Override public boolean configure(String name, Map params) throws ConfigurationException { @@ -190,11 +171,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return false; } - @Override - public List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat) { - // TODO Auto-generated method stub - return null; - } + @Override public List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) @@ -210,11 +187,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public List getSystemAccountNetworkOfferings(String... offeringNames) { - // TODO Auto-generated method stub - return null; - } + @Override public void allocate(VirtualMachineProfile vm, List> networks) throws InsufficientCapacityException, ConcurrentOperationException { @@ -247,37 +220,17 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS } - @Override - public List getNics(long vmId) { - // TODO Auto-generated method stub - return null; - } - + @Override public List getNicProfiles(VirtualMachine vm) { // TODO Auto-generated method stub return null; } - @Override - public String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } + + - @Override - public PublicIpAddress getPublicIpAddress(long ipAddressId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public List listPodVlans(long podId) { - // TODO Auto-generated method stub - return null; - } - @Override public Pair implementNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { @@ -285,11 +238,6 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public List listNetworksUsedByVm(long vmId, boolean isSystem) { - // TODO Auto-generated method stub - return null; - } @Override public void prepareNicForMigration(VirtualMachineProfile vm, DeployDestination dest) { @@ -317,29 +265,9 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return false; } - @Override - public Nic getNicInNetwork(long vmId, long networkId) { - // TODO Auto-generated method stub - return null; - } + - @Override - public List getNicsForTraffic(long vmId, TrafficType type) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Network getDefaultNetworkForVm(long vmId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Nic getDefaultNic(long vmId) { - // TODO Auto-generated method stub - return null; - } + @Override public boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException { @@ -347,17 +275,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return false; } - @Override - public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { - // TODO Auto-generated method stub - return false; - } - - @Override - public NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId) { - // TODO Auto-generated method stub - return null; - } + @Override public boolean startNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { @@ -365,12 +283,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return false; } - @Override - public String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId) { - // TODO Auto-generated method stub - return null; - } - + @Override public IPAddressVO markIpAsUnavailable(long addrId) { // TODO Auto-generated method stub @@ -383,35 +296,14 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public String getGlobalGuestDomainSuffix() { - // TODO Auto-generated method stub - return null; - } - - @Override - public String getStartIpAddress(long networkId) { - // TODO Auto-generated method stub - return null; - } - + @Override public boolean applyStaticNats(List staticNats, boolean continueOnError) throws ResourceUnavailableException { // TODO Auto-generated method stub return false; } - @Override - public String getIpInNetwork(long vmId, long networkId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public String getIpInNetworkIncludingRemoved(long vmId, long networkId) { - // TODO Auto-generated method stub - return null; - } + public Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId) { return null; @@ -419,11 +311,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS - @Override - public boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider) { - // TODO Auto-generated method stub - return false; - } + @Override public PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List isolationMethods, String broadcastDomainRange, Long domainId, List tags, String name) { @@ -455,11 +343,6 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public List listSupportedNetworkServiceProviders(String serviceName) { - // TODO Auto-generated method stub - return null; - } @Override public PhysicalNetworkServiceProvider addProviderToPhysicalNetwork(Long physicalNetworkId, String providerName, Long destinationPhysicalNetworkId, List enabledServices) { @@ -533,72 +416,16 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - // TODO Auto-generated method stub - return null; - } - + @Override public Network getExclusiveGuestNetwork(long zoneId) { // TODO Auto-generated method stub return null; } - @Override - public Long getPodIdForVlan(long vlanDbId) { - // TODO Auto-generated method stub - return null; - } + - @Override - public boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId) { - // TODO Auto-generated method stub - return false; - } - - @Override - public Map getNetworkServiceCapabilities(long networkId, Service service) { - // TODO Auto-generated method stub - return null; - } - - @Override - public List listNetworksForAccount(long accountId, long zoneId, GuestType type) { - // TODO Auto-generated method stub - return null; - } - - @Override - public List listNetworkOfferingsForUpgrade(long networkId) { - // TODO Auto-generated method stub - return null; - } - - - @Override - public boolean isSecurityGroupSupportedInNetwork(Network network) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName) { - // TODO Auto-generated method stub - return false; - } - - @Override - public List getElementServices(Provider provider) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean canElementEnableIndividualServices(Provider provider) { - // TODO Auto-generated method stub - return false; - } + @Override public UserDataServiceProvider getPasswordResetProvider(Network network) { @@ -606,12 +433,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public UserDataServiceProvider getUserDataUpdateProvider(Network network) { - // TODO Auto-generated method stub - return null; - } - + @Override public PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String state, List enabledServices) { // TODO Auto-generated method stub @@ -624,504 +446,11 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - @Override - public boolean areServicesSupportedInNetwork(long networkId, Service... services) { - // TODO Auto-generated method stub - return false; - } + - @Override - public boolean isNetworkSystem(Network network) { - // TODO Auto-generated method stub - return false; - } - - @Override - public Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean reallocate(VirtualMachineProfile vm, DataCenterDeployment dest) throws InsufficientCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return false; - } - - @Override - public Long getPhysicalNetworkId(Network network) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean getAllowSubdomainAccessGlobal() { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean isProviderForNetwork(Provider provider, long networkId) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) - throws ConcurrentOperationException, ResourceUnavailableException, - InsufficientCapacityException { - // TODO Auto-generated method stub - return false; - } - - @Override - public String getNetworkTag(HypervisorType hType, Network network) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void canProviderSupportServices( - Map> providersMap) { - // TODO Auto-generated method stub - - } - - @Override - public boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId) { - // TODO Auto-generated method stub - return false; - } - - - @Override - public boolean canAddDefaultSecurityGroup() { - // TODO Auto-generated method stub - return false; - } - - @Override - public List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd) { - // TODO Auto-generated method stub - return null; - } - - @Override - public List listNetworkOfferingServices(long networkOfferingId) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services) { - // TODO Auto-generated method stub - return false; - } - - @Override - public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Map> getProviderToIpList(Network network, Map> ipToServices) { - // TODO Auto-generated method stub - return null; - } - - @Override - public boolean checkIpForService(IPAddressVO ip, Service service, Long networkId) { - // TODO Auto-generated method stub - return false; - } - - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#isVmPartOfNetwork(long, long) - */ - @Override - public boolean isVmPartOfNetwork(long vmId, long ntwkId) { - // TODO Auto-generated method stub - return false; - } - - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultNetworkDomain() - */ - @Override - public String getDefaultNetworkDomain() { - // TODO Auto-generated method stub - return null; - } - - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#allocateNic(com.cloud.vm.NicProfile, com.cloud.network.Network, java.lang.Boolean, int, com.cloud.vm.VirtualMachineProfile) - */ - @Override - public Pair allocateNic(NicProfile requested, Network network, Boolean isDefaultNic, int deviceId, VirtualMachineProfile vm) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#prepareNic(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext, long, com.cloud.network.NetworkVO) - */ - @Override - public NicProfile prepareNic(VirtualMachineProfile vmProfile, DeployDestination dest, ReservationContext context, long nicId, NetworkVO network) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listPublicIpsAssignedToAccount(long, long, java.lang.Boolean) - */ - @Override - public List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, long, Long) - */ - @Override - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#updateGuestNetwork(long, java.lang.String, java.lang.String, com.cloud.user.Account, com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean) - */ - @Override - public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan, String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId) - throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long, com.cloud.user.Account) - */ - @Override - public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listNetworksByVpc(long) - */ - @Override - public List listNetworksByVpc(long vpcId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#validateRule(com.cloud.network.rules.FirewallRule) - */ - @Override - public boolean validateRule(FirewallRule rule) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#shutdownNetwork(long, com.cloud.vm.ReservationContext, boolean) - */ - @Override - public boolean shutdownNetwork(long networkId, ReservationContext context, boolean cleanupElements) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listAllNetworksInAllZonesByType(com.cloud.network.Network.GuestType) - */ - @Override - public List listAllNetworksInAllZonesByType(GuestType type) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPhysicalNetworkInfo(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public List getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#checkCapabilityForProvider(java.util.Set, com.cloud.network.Network.Service, com.cloud.network.Network.Capability, java.lang.String) - */ - @Override - public void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultUniqueProviderForService(java.lang.String) - */ - @Override - public List getNtwkOffDistinctProviders(long ntwkOffId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignSystemIp(long, com.cloud.user.Account, boolean, boolean) - */ - @Override - public IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) throws InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#checkNetworkPermissions(com.cloud.user.Account, com.cloud.network.Network) - */ - @Override - public void checkNetworkPermissions(Account owner, Network network) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#allocateDirectIp(com.cloud.vm.NicProfile, com.cloud.dc.DataCenter, com.cloud.vm.VirtualMachineProfile, com.cloud.network.Network, java.lang.String) - */ - @Override - public void releaseNic(VirtualMachineProfile vmProfile, Nic nic) throws ConcurrentOperationException, ResourceUnavailableException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getElementImplementingProvider(java.lang.String) - */ - @Override - public NetworkElement getElementImplementingProvider(String providerName) { - // TODO Auto-generated method stub - return null; - } - - - @Override - public boolean canUseForDeploy(Network network) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultStorageTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) -<<<<<<< HEAD - * @see com.cloud.network.NetworkManager#getDefaultPublicTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultPublicTrafficLabel(long dcId, HypervisorType vmware) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignSourceNatIpAddressToGuestNetwork(com.cloud.user.Account, com.cloud.network.Network) -======= - * @see com.cloud.network.NetworkManager#getNicProfile(com.cloud.vm.VirtualMachine, long) ->>>>>>> ddb9e49... VPC: unittest preparation - */ - @Override - public PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network guestNetwork) throws InsufficientAddressCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#setupDns(com.cloud.network.Network, com.cloud.network.Network.Provider) - */ - @Override - public boolean setupDns(Network network, Provider provider) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPhysicalNtwksSupportingTrafficType(long, com.cloud.network.Networks.TrafficType) - */ - @Override - public List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignPublicIpAddress(long, java.lang.Long, com.cloud.user.Account, com.cloud.dc.Vlan.VlanType, java.lang.Long, java.lang.String, boolean) - */ - @Override - public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner, VlanType type, Long networkId, String requestedIp, boolean isSystem) throws InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getAccountNetworkDomain(long, long) - */ - @Override - public String getAccountNetworkDomain(long accountId, long zoneId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#updateGuestNetwork(long, java.lang.String, java.lang.String, com.cloud.user.Account, com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean) - */ - @Override - public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr) { - // TODO Auto-generated method stub - return null; - } + - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isPrivateGateway(com.cloud.vm.Nic) -======= - * @see com.cloud.network.NetworkService#canUseForDeploy(com.cloud.network.Network) ->>>>>>> ddb9e49... VPC: unittest preparation - */ - @Override - public boolean isPrivateGateway(Nic guestNic) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#allocateDirectIp(com.cloud.vm.NicProfile, com.cloud.dc.DataCenter, com.cloud.vm.VirtualMachineProfile, com.cloud.network.Network, java.lang.String) - */ - @Override - public void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile vm, Network network, String requestedIp) throws InsufficientVirtualNetworkCapcityException, - InsufficientAddressCapacityException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#createNicForVm(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.ReservationContext, com.cloud.vm.VirtualMachineProfileImpl, boolean) - */ - @Override - public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context, VirtualMachineProfileImpl vmProfile, boolean prepare) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultManagementTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType) { - // TODO Auto-generated method stub - return null; - } - - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#handleSystemIpRelease(com.cloud.network.IpAddress) - */ - @Override - public boolean handleSystemIpRelease(IpAddress ip) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#removeNic(com.cloud.vm.VirtualMachineProfile, com.cloud.vm.Nic) - */ - @Override - public void removeNic(VirtualMachineProfile vm, Nic nic) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultGuestTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultGuestTrafficLabel(long dcId, HypervisorType vmware) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNicProfile(com.cloud.vm.VirtualMachine, long, java.lang.String) - */ - @Override - public NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignVpnGatewayIpAddress(long, com.cloud.user.Account, long) - */ - @Override - public PublicIp assignVpnGatewayIpAddress(long dcId, Account owner, long vpcId) throws InsufficientAddressCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#markPublicIpAsAllocated(com.cloud.network.IPAddressVO) - */ - @Override - public void markPublicIpAsAllocated(IPAddressVO addr) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignDedicateIpAddress(com.cloud.user.Account, java.lang.Long, java.lang.Long, long, boolean) - */ - @Override - public PublicIp assignDedicateIpAddress(Account owner, Long guestNtwkId, Long vpcId, long dcId, boolean isSourceNat) throws ConcurrentOperationException, InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long, com.cloud.user.Account) - */ - @Override - public List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultUniqueProviderForService(java.lang.String) - */ - @Override - public Provider getDefaultUniqueProviderForService(String serviceName) { - // TODO Auto-generated method stub - return null; - } - /* (non-Javadoc) * @see com.cloud.network.NetworkManager#getNetworkLockTimeout() */ @@ -1208,4 +537,263 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS // TODO Auto-generated method stub return null; } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#getNicProfileForVm(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.VirtualMachine) + */ + protected NicProfile getNicProfileForVm(Network network, NicProfile requested, VirtualMachine vm) { + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#getOnePhysicalNetworkByZoneAndTrafficType(long, com.cloud.network.Networks.TrafficType) + */ + protected PhysicalNetwork getOnePhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#getZoneNetworkDomain(long) + */ + protected String getZoneNetworkDomain(long zoneId) { + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#getNicInNetworkIncludingRemoved(long, long) + */ + protected Nic getNicInNetworkIncludingRemoved(long vmId, long networkId) { + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, long, java.lang.Long) + */ + @Override + public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, + InsufficientAddressCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#restartNetwork(com.cloud.api.commands.RestartNetworkCmd, boolean) + */ + @Override + public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) throws ConcurrentOperationException, + ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#updateGuestNetwork(long, java.lang.String, java.lang.String, com.cloud.user.Account, com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean) + */ + @Override + public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, + User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#listTrafficTypeImplementor(com.cloud.api.commands.ListTrafficTypeImplementorsCmd) + */ + @Override + public List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long, com.cloud.user.Account) + */ + @Override + public List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#associateIPToNetwork(long, long) + */ + @Override + public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, + ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#createPrivateNetwork(java.lang.String, java.lang.String, long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, java.lang.Long) + */ + @Override + public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan, + String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId) + throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignPublicIpAddress(long, java.lang.Long, com.cloud.user.Account, com.cloud.dc.Vlan.VlanType, java.lang.Long, java.lang.String, boolean) + */ + @Override + public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner, VlanType type, Long networkId, + String requestedIp, boolean isSystem) throws InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#shutdownNetwork(long, com.cloud.vm.ReservationContext, boolean) + */ + @Override + public boolean shutdownNetwork(long networkId, ReservationContext context, boolean cleanupElements) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#reallocate(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DataCenterDeployment) + */ + @Override + public boolean reallocate(VirtualMachineProfile vm, DataCenterDeployment dest) + throws InsufficientCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignSystemIp(long, com.cloud.user.Account, boolean, boolean) + */ + @Override + public IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) + throws InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#handleSystemIpRelease(com.cloud.network.IpAddress) + */ + @Override + public boolean handleSystemIpRelease(IpAddress ip) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocateDirectIp(com.cloud.vm.NicProfile, com.cloud.dc.DataCenter, com.cloud.vm.VirtualMachineProfile, com.cloud.network.Network, java.lang.String) + */ + @Override + public void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile vm, + Network network, String requestedIp) throws InsufficientVirtualNetworkCapcityException, + InsufficientAddressCapacityException { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignSourceNatIpAddressToGuestNetwork(com.cloud.user.Account, com.cloud.network.Network) + */ + @Override + public PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network guestNetwork) + throws InsufficientAddressCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocateNic(com.cloud.vm.NicProfile, com.cloud.network.Network, java.lang.Boolean, int, com.cloud.vm.VirtualMachineProfile) + */ + @Override + public Pair allocateNic(NicProfile requested, Network network, Boolean isDefaultNic, + int deviceId, VirtualMachineProfile vm) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#prepareNic(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext, long, com.cloud.network.NetworkVO) + */ + @Override + public NicProfile prepareNic(VirtualMachineProfile vmProfile, DeployDestination dest, + ReservationContext context, long nicId, NetworkVO network) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#removeNic(com.cloud.vm.VirtualMachineProfile, com.cloud.vm.Nic) + */ + @Override + public void removeNic(VirtualMachineProfile vm, Nic nic) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#setupDns(com.cloud.network.Network, com.cloud.network.Network.Provider) + */ + @Override + public boolean setupDns(Network network, Provider provider) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#releaseNic(com.cloud.vm.VirtualMachineProfile, com.cloud.vm.Nic) + */ + @Override + public void releaseNic(VirtualMachineProfile vmProfile, Nic nic) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#createNicForVm(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.ReservationContext, com.cloud.vm.VirtualMachineProfileImpl, boolean) + */ + @Override + public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context, + VirtualMachineProfileImpl vmProfile, boolean prepare) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignVpnGatewayIpAddress(long, com.cloud.user.Account, long) + */ + @Override + public PublicIp assignVpnGatewayIpAddress(long dcId, Account owner, long vpcId) + throws InsufficientAddressCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#markPublicIpAsAllocated(com.cloud.network.IPAddressVO) + */ + @Override + public void markPublicIpAsAllocated(IPAddressVO addr) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignDedicateIpAddress(com.cloud.user.Account, java.lang.Long, java.lang.Long, long, boolean) + */ + @Override + public PublicIp assignDedicateIpAddress(Account owner, Long guestNtwkId, Long vpcId, long dcId, boolean isSourceNat) + throws ConcurrentOperationException, InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } } diff --git a/server/test/com/cloud/network/MockRulesManagerImpl.java b/server/test/com/cloud/network/MockRulesManagerImpl.java new file mode 100644 index 00000000000..fb5be2b9d6b --- /dev/null +++ b/server/test/com/cloud/network/MockRulesManagerImpl.java @@ -0,0 +1,295 @@ +package com.cloud.network; + +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.api.commands.ListPortForwardingRulesCmd; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.NetworkRuleConflictException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.PortForwardingRule; +import com.cloud.network.rules.PortForwardingRuleVO; +import com.cloud.network.rules.RulesManager; +import com.cloud.network.rules.RulesService; +import com.cloud.network.rules.StaticNatRule; +import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.user.Account; +import com.cloud.uservm.UserVm; +import com.cloud.utils.Pair; +import com.cloud.utils.component.Manager; +import com.cloud.vm.VirtualMachine; + +@Local(value = {RulesManager.class, RulesService.class}) +public class MockRulesManagerImpl implements RulesManager, Manager, RulesService { + + @Override + public Pair, Integer> searchStaticNatRules( + Long ipId, Long id, Long vmId, Long start, Long size, + String accountName, Long domainId, Long projectId, + boolean isRecursive, boolean listAll) { + // TODO Auto-generated method stub + return null; + } + + @Override + public PortForwardingRule createPortForwardingRule(PortForwardingRule rule, + Long vmId, boolean openFirewall) + throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean revokePortForwardingRule(long ruleId, boolean apply) { + // TODO Auto-generated method stub + return false; + } + + @Override + public Pair, Integer> listPortForwardingRules( + ListPortForwardingRulesCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean applyPortForwardingRules(long ipAdddressId, Account caller) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean enableStaticNat(long ipAddressId, long vmId, long networkId, + boolean isSystemVm) throws NetworkRuleConflictException, + ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public PortForwardingRule getPortForwardigRule(long ruleId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public FirewallRule getFirewallRule(long ruleId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public StaticNatRule createStaticNatRule(StaticNatRule rule, + boolean openFirewall) throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean revokeStaticNatRule(long ruleId, boolean apply) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyStaticNatRules(long ipAdddressId, Account caller) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public StaticNatRule buildStaticNatRule(FirewallRule rule, boolean forRevoke) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getSourceCidrs(long ruleId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean disableStaticNat(long ipId) + throws ResourceUnavailableException, NetworkRuleConflictException, + InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyPortForwardingRules(long ipAddressId, + boolean continueOnError, Account caller) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyStaticNatRulesForIp(long sourceIpId, + boolean continueOnError, Account caller, boolean forRevoke) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyPortForwardingRulesForNetwork(long networkId, + boolean continueOnError, Account caller) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyStaticNatRulesForNetwork(long networkId, + boolean continueOnError, Account caller) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void checkIpAndUserVm(IpAddress ipAddress, UserVm userVm, + Account caller) { + // TODO Auto-generated method stub + + } + + @Override + public void checkRuleAndUserVm(FirewallRule rule, UserVm userVm, + Account caller) { + // TODO Auto-generated method stub + + } + + @Override + public boolean revokeAllPFAndStaticNatRulesForIp(long ipId, long userId, + Account caller) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean revokeAllPFStaticNatRulesForNetwork(long networkId, + long userId, Account caller) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public List listFirewallRulesByIp(long ipAddressId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List listPortForwardingRulesForApplication( + long ipId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List gatherPortForwardingRulesForApplication( + List addrs) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean revokePortForwardingRulesForVm(long vmId) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean revokeStaticNatRulesForVm(long vmId) { + // TODO Auto-generated method stub + return false; + } + + @Override + public FirewallRule[] reservePorts(IpAddress ip, String protocol, + Purpose purpose, boolean openFirewall, Account caller, int... ports) + throws NetworkRuleConflictException { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean releasePorts(long ipId, String protocol, Purpose purpose, + int... ports) { + // TODO Auto-generated method stub + return false; + } + + @Override + public List listByNetworkId(long networkId) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean applyStaticNatForIp(long sourceIpId, + boolean continueOnError, Account caller, boolean forRevoke) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyStaticNatsForNetwork(long networkId, + boolean continueOnError, Account caller) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void getSystemIpAndEnableStaticNatForVm(VirtualMachine vm, + boolean getNewIp) throws InsufficientAddressCapacityException { + // TODO Auto-generated method stub + + } + + @Override + public boolean disableStaticNat(long ipAddressId, Account caller, + long callerUserId, boolean releaseIpIfElastic) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean applyStaticNatForNetwork(long networkId, + boolean continueOnError, Account caller, boolean forRevoke) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean configure(String name, Map params) + throws ConfigurationException { + + return true; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + // TODO Auto-generated method stub + return false; + } + + @Override + public String getName() { + // TODO Auto-generated method stub + return "MockRulesManagerImpl"; + } + +} diff --git a/server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java b/server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java new file mode 100644 index 00000000000..ddccc2b31a0 --- /dev/null +++ b/server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java @@ -0,0 +1,62 @@ +package com.cloud.network.vpn; + +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.Network; +import com.cloud.network.RemoteAccessVpn; +import com.cloud.network.VpnUser; +import com.cloud.network.element.RemoteAccessVPNServiceProvider; + +@Local (value = RemoteAccessVPNServiceProvider.class) +public class MockRemoteAccessVPNServiceProvider implements + RemoteAccessVPNServiceProvider { + + @Override + public boolean configure(String name, Map params) + throws ConfigurationException { + return true; + } + + @Override + public String getName() { + return "MockRemoteAccessVPNServiceProvider"; + } + + @Override + public boolean start() { + return true; + } + + @Override + public boolean stop() { + // TODO Auto-generated method stub + return false; + } + + @Override + public String[] applyVpnUsers(RemoteAccessVpn vpn, + List users) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean startVpn(Network network, RemoteAccessVpn vpn) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean stopVpn(Network network, RemoteAccessVpn vpn) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java b/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java new file mode 100644 index 00000000000..f18626a2c13 --- /dev/null +++ b/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java @@ -0,0 +1,91 @@ +package com.cloud.network.vpn; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import javax.naming.ConfigurationException; + +import junit.framework.Assert; + +import org.apache.log4j.Logger; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.cloud.configuration.DefaultInterceptorLibrary; +import com.cloud.configuration.dao.ConfigurationDaoImpl; +import com.cloud.domain.dao.DomainDaoImpl; +import com.cloud.event.dao.UsageEventDaoImpl; +import com.cloud.network.MockFirewallManagerImpl; +import com.cloud.network.MockNetworkManagerImpl; +import com.cloud.network.MockRulesManagerImpl; +import com.cloud.network.dao.FirewallRulesDaoImpl; +import com.cloud.network.dao.IPAddressDaoImpl; +import com.cloud.network.dao.RemoteAccessVpnDaoImpl; +import com.cloud.network.dao.VpnUserDaoImpl; +import com.cloud.network.element.RemoteAccessVPNServiceProvider; +import com.cloud.user.MockAccountManagerImpl; +import com.cloud.user.MockDomainManagerImpl; +import com.cloud.user.dao.AccountDaoImpl; +import com.cloud.utils.Pair; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.MockComponentLocator; + +public class RemoteAccessVpnTest { + private MockComponentLocator locator; + private final static Logger s_logger = Logger.getLogger(RemoteAccessVpnTest.class); + + + private static void addDaos(MockComponentLocator locator) { + locator.addDao("AccountDao", AccountDaoImpl.class); + locator.addDao("VpnUserDao", VpnUserDaoImpl.class); + locator.addDao("FirewallRulesDao", FirewallRulesDaoImpl.class); + locator.addDao("IPAddressDao", IPAddressDaoImpl.class); + locator.addDao("DomainDao", DomainDaoImpl.class); + locator.addDao("UsageEventDao", UsageEventDaoImpl.class); + locator.addDao("RemoteAccessVpnDao", RemoteAccessVpnDaoImpl.class); + locator.addDao("ConfigurationDao", ConfigurationDaoImpl.class); + + } + + private static void addManagers(MockComponentLocator locator) { + locator.addManager("AccountManager", MockAccountManagerImpl.class); + locator.addManager("DomainManager", MockDomainManagerImpl.class); + locator.addManager("NetworkManager", MockNetworkManagerImpl.class); + locator.addManager("RulesManager", MockRulesManagerImpl.class); + locator.addManager("FirewallManager", MockFirewallManagerImpl.class); + } + + @Before + public void setUp() { + locator = new MockComponentLocator("management-server"); + addDaos(locator); + addManagers(locator); + s_logger.info("Finished setUp"); + } + + @After + public void tearDown() throws Exception { + } + + + @Test + public void testInjected() throws Exception { + List>> list = + new ArrayList>>(); + list.add(new Pair>("RemoteAccessVPNServiceProvider", MockRemoteAccessVPNServiceProvider.class)); + locator.addAdapterChain(RemoteAccessVPNServiceProvider.class, list); + s_logger.info("Finished add adapter"); + locator.makeActive(new DefaultInterceptorLibrary()); + s_logger.info("Finished make active"); + RemoteAccessVpnManagerImpl vpnMgr = ComponentLocator.inject(RemoteAccessVpnManagerImpl.class); + s_logger.info("Finished inject"); + Assert.assertTrue(vpnMgr.configure("RemoteAccessVpnMgr",new HashMap()) ); + Assert.assertTrue(vpnMgr.start()); + int numProviders = vpnMgr.getRemoteAccessVPNServiceProviders().size(); + Assert.assertTrue(numProviders > 0); + } + + +} diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index f8818c002f8..15bb830989e 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -75,1329 +75,8 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M private static final Logger s_logger = Logger.getLogger(MockNetworkManagerImpl.class); - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getIsolatedNetworksOwnedByAccountInZone(long, com.cloud.user.Account) - */ - @Override - public List getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner) { - // TODO Auto-generated method stub - return null; - } + - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#releaseIpAddress(long) - */ - @Override - public boolean releaseIpAddress(long ipAddressId) throws InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#createGuestNetwork(com.cloud.api.commands.CreateNetworkCmd) - */ - @Override - public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapacityException, ConcurrentOperationException, ResourceAllocationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#searchForNetworks(com.cloud.api.commands.ListNetworksCmd) - */ - @Override - public List searchForNetworks(ListNetworksCmd cmd) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#deleteNetwork(long) - */ - @Override - public boolean deleteNetwork(long networkId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#restartNetwork(com.cloud.api.commands.RestartNetworkCmd, boolean) - */ - @Override - public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getActiveNicsInNetwork(long) - */ - @Override - public int getActiveNicsInNetwork(long networkId) { - // TODO Auto-generated method stub - return 0; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getNetwork(long) - */ - @Override - public Network getNetwork(long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getIp(long) - */ - @Override - public IpAddress getIp(long id) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#convertNetworkToNetworkProfile(long) - */ - @Override - public NetworkProfile convertNetworkToNetworkProfile(long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getNetworkCapabilities(long) - */ - @Override - public Map> getNetworkCapabilities(long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#isNetworkAvailableInDomain(long, long) - */ - @Override - public boolean isNetworkAvailableInDomain(long networkId, long domainId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getDedicatedNetworkDomain(long) - */ - @Override - public Long getDedicatedNetworkDomain(long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#updateGuestNetwork(long, java.lang.String, java.lang.String, com.cloud.user.Account, com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean) - */ - @Override - public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getNetworkRate(long, java.lang.Long) - */ - @Override - public Integer getNetworkRate(long networkId, Long vmId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getSystemNetworkByZoneAndTrafficType(long, com.cloud.network.Networks.TrafficType) - */ - @Override - public Network getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getNetworkOfferingServiceProvidersMap(long) - */ - @Override - public Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#createPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.String, java.util.List, java.lang.String, java.lang.Long, java.util.List, java.lang.String) - */ - @Override - public PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List isolationMethods, String broadcastDomainRange, Long domainId, List tags, String name) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#searchPhysicalNetworks(java.lang.Long, java.lang.Long, java.lang.String, java.lang.Long, java.lang.Long, java.lang.String) - */ - @Override - public Pair, Integer> searchPhysicalNetworks(Long id, Long zoneId, String keyword, Long startIndex, Long pageSize, String name) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#updatePhysicalNetwork(java.lang.Long, java.lang.String, java.util.List, java.lang.String, java.lang.String) - */ - @Override - public PhysicalNetwork updatePhysicalNetwork(Long id, String networkSpeed, List tags, String newVnetRangeString, String state) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#deletePhysicalNetwork(java.lang.Long) - */ - @Override - public boolean deletePhysicalNetwork(Long id) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listNetworkServices(java.lang.String) - */ - @Override - public List listNetworkServices(String providerName) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listSupportedNetworkServiceProviders(java.lang.String) - */ - @Override - public List listSupportedNetworkServiceProviders(String serviceName) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#addProviderToPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.Long, java.util.List) - */ - @Override - public PhysicalNetworkServiceProvider addProviderToPhysicalNetwork(Long physicalNetworkId, String providerName, Long destinationPhysicalNetworkId, List enabledServices) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listNetworkServiceProviders(java.lang.Long, java.lang.String, java.lang.String, java.lang.Long, java.lang.Long) - */ - @Override - public Pair, Integer> listNetworkServiceProviders(Long physicalNetworkId, String name, String state, Long startIndex, Long pageSize) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#updateNetworkServiceProvider(java.lang.Long, java.lang.String, java.util.List) - */ - @Override - public PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String state, List enabledServices) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#deleteNetworkServiceProvider(java.lang.Long) - */ - @Override - public boolean deleteNetworkServiceProvider(Long id) throws ConcurrentOperationException, ResourceUnavailableException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getPhysicalNetwork(java.lang.Long) - */ - @Override - public PhysicalNetwork getPhysicalNetwork(Long physicalNetworkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getCreatedPhysicalNetwork(java.lang.Long) - */ - @Override - public PhysicalNetwork getCreatedPhysicalNetwork(Long physicalNetworkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getPhysicalNetworkServiceProvider(java.lang.Long) - */ - @Override - public PhysicalNetworkServiceProvider getPhysicalNetworkServiceProvider(Long providerId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getCreatedPhysicalNetworkServiceProvider(java.lang.Long) - */ - @Override - public PhysicalNetworkServiceProvider getCreatedPhysicalNetworkServiceProvider(Long providerId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#findPhysicalNetworkId(long, java.lang.String, com.cloud.network.Networks.TrafficType) - */ - @Override - public long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType) { - // TODO Auto-generated method stub - return 0; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#addTrafficTypeToPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) - */ - @Override - public PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficType, String xenLabel, String kvmLabel, String vmwareLabel, String simulatorLabel, String vlan) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getPhysicalNetworkTrafficType(java.lang.Long) - */ - @Override - public PhysicalNetworkTrafficType getPhysicalNetworkTrafficType(Long id) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#updatePhysicalNetworkTrafficType(java.lang.Long, java.lang.String, java.lang.String, java.lang.String) - */ - @Override - public PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, String vmwareLabel) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#deletePhysicalNetworkTrafficType(java.lang.Long) - */ - @Override - public boolean deletePhysicalNetworkTrafficType(Long id) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listTrafficTypes(java.lang.Long) - */ - @Override - public Pair, Integer> listTrafficTypes(Long physicalNetworkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getDefaultPhysicalNetworkByZoneAndTrafficType(long, com.cloud.network.Networks.TrafficType) - */ - @Override - public PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getExclusiveGuestNetwork(long) - */ - @Override - public Network getExclusiveGuestNetwork(long zoneId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listTrafficTypeImplementor(com.cloud.api.commands.ListTrafficTypeImplementorsCmd) - */ - @Override - public List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long, com.cloud.user.Account) - */ - @Override - public List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#listNetworksByVpc(long) - */ - @Override - public List listNetworksByVpc(long vpcId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#isVmPartOfNetwork(long, long) - */ - @Override - public boolean isVmPartOfNetwork(long vmId, long ntwkId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#associateIPToNetwork(long, long) - */ - @Override - public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#createPrivateNetwork(java.lang.String, java.lang.String, long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, java.lang.Long) - */ - @Override - public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan, String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId) - throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#canUseForDeploy(com.cloud.network.Network) - */ - @Override - public boolean canUseForDeploy(Network network) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignPublicIpAddress(long, java.lang.Long, com.cloud.user.Account, com.cloud.dc.Vlan.VlanType, java.lang.Long, java.lang.String, boolean) - */ - @Override - public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner, VlanType type, Long networkId, String requestedIp, boolean isSystem) throws InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#disassociatePublicIpAddress(long, long, com.cloud.user.Account) - */ - @Override - public boolean disassociatePublicIpAddress(long id, long userId, Account caller) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listPublicIpsAssignedToGuestNtwk(long, long, java.lang.Boolean) - */ - @Override - public List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#setupNetwork(com.cloud.user.Account, com.cloud.offerings.NetworkOfferingVO, com.cloud.deploy.DeploymentPlan, java.lang.String, java.lang.String, boolean) - */ - @Override - public List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) throws ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#setupNetwork(com.cloud.user.Account, com.cloud.offerings.NetworkOfferingVO, com.cloud.network.Network, com.cloud.deploy.DeploymentPlan, java.lang.String, java.lang.String, boolean, java.lang.Long, com.cloud.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long) - */ - @Override - public List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, ACLType aclType, - Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getSystemAccountNetworkOfferings(java.lang.String[]) - */ - @Override - public List getSystemAccountNetworkOfferings(String... offeringNames) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#allocate(com.cloud.vm.VirtualMachineProfile, java.util.List) - */ - @Override - public void allocate(VirtualMachineProfile vm, List> networks) throws InsufficientCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#prepare(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext) - */ - @Override - public void prepare(VirtualMachineProfile profile, DeployDestination dest, ReservationContext context) throws InsufficientCapacityException, ConcurrentOperationException, - ResourceUnavailableException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#release(com.cloud.vm.VirtualMachineProfile, boolean) - */ - @Override - public void release(VirtualMachineProfile vmProfile, boolean forced) throws ConcurrentOperationException, ResourceUnavailableException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#cleanupNics(com.cloud.vm.VirtualMachineProfile) - */ - @Override - public void cleanupNics(VirtualMachineProfile vm) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#expungeNics(com.cloud.vm.VirtualMachineProfile) - */ - @Override - public void expungeNics(VirtualMachineProfile vm) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNics(long) - */ - @Override - public List getNics(long vmId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNicProfiles(com.cloud.vm.VirtualMachine) - */ - @Override - public List getNicProfiles(VirtualMachine vm) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNextAvailableMacAddressInNetwork(long) - */ - @Override - public String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#validateRule(com.cloud.network.rules.FirewallRule) - */ - @Override - public boolean validateRule(FirewallRule rule) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPublicIpAddress(long) - */ - @Override - public PublicIpAddress getPublicIpAddress(long ipAddressId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listPodVlans(long) - */ - @Override - public List listPodVlans(long podId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#implementNetwork(long, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext) - */ - @Override - public Pair implementNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, - InsufficientCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listNetworksUsedByVm(long, boolean) - */ - @Override - public List listNetworksUsedByVm(long vmId, boolean isSystem) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#prepareNicForMigration(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination) - */ - @Override - public void prepareNicForMigration(VirtualMachineProfile vm, DeployDestination dest) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#shutdownNetwork(long, com.cloud.vm.ReservationContext, boolean) - */ - @Override - public boolean shutdownNetwork(long networkId, ReservationContext context, boolean cleanupElements) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#destroyNetwork(long, com.cloud.vm.ReservationContext) - */ - @Override - public boolean destroyNetwork(long networkId, ReservationContext context) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#createGuestNetwork(long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.cloud.user.Account, java.lang.Long, com.cloud.network.PhysicalNetwork, long, com.cloud.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long) - */ - @Override - public Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, String cidr, String vlanId, String networkDomain, Account owner, Long domainId, - PhysicalNetwork physicalNetwork, long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#associateIpAddressListToAccount(long, long, long, java.lang.Long, com.cloud.network.Network) - */ - @Override - public boolean associateIpAddressListToAccount(long userId, long accountId, long zoneId, Long vlanId, Network guestNetwork) throws InsufficientCapacityException, ConcurrentOperationException, - ResourceUnavailableException, ResourceAllocationException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNicInNetwork(long, long) - */ - @Override - public Nic getNicInNetwork(long vmId, long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNicsForTraffic(long, com.cloud.network.Networks.TrafficType) - */ - @Override - public List getNicsForTraffic(long vmId, TrafficType type) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultNetworkForVm(long) - */ - @Override - public Network getDefaultNetworkForVm(long vmId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultNic(long) - */ - @Override - public Nic getDefaultNic(long vmId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPasswordResetElements() - */ - @Override - public UserDataServiceProvider getPasswordResetProvider(Network network) { - // TODO Auto-generated method stub - return null; - } - - @Override - public UserDataServiceProvider getUserDataUpdateProvider(Network network) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#networkIsConfiguredForExternalNetworking(long, long) - */ - @Override - public boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNetworkServiceCapabilities(long, com.cloud.network.Network.Service) - */ - @Override - public Map getNetworkServiceCapabilities(long networkId, Service service) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#applyIpAssociations(com.cloud.network.Network, boolean) - */ - @Override - public boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#areServicesSupportedByNetworkOffering(long, com.cloud.network.Network.Service[]) - */ - @Override - public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { - return (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(networkOfferingId, services)); - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNetworkWithSecurityGroupEnabled(java.lang.Long) - */ - @Override - public NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#startNetwork(long, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext) - */ - @Override - public boolean startNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getIpOfNetworkElementInVirtualNetwork(long, long) - */ - @Override - public String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listNetworksForAccount(long, long, com.cloud.network.Network.GuestType) - */ - @Override - public List listNetworksForAccount(long accountId, long zoneId, GuestType type) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listAllNetworksInAllZonesByType(com.cloud.network.Network.GuestType) - */ - @Override - public List listAllNetworksInAllZonesByType(GuestType type) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#markIpAsUnavailable(long) - */ - @Override - public IPAddressVO markIpAsUnavailable(long addrId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#acquireGuestIpAddress(com.cloud.network.Network, java.lang.String) - */ - @Override - public String acquireGuestIpAddress(Network network, String requestedIp) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getGlobalGuestDomainSuffix() - */ - @Override - public String getGlobalGuestDomainSuffix() { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getStartIpAddress(long) - */ - @Override - public String getStartIpAddress(long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#applyStaticNats(java.util.List, boolean) - */ - @Override - public boolean applyStaticNats(List staticNats, boolean continueOnError) throws ResourceUnavailableException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getIpInNetwork(long, long) - */ - @Override - public String getIpInNetwork(long vmId, long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getIpInNetworkIncludingRemoved(long, long) - */ - @Override - public String getIpInNetworkIncludingRemoved(long vmId, long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPodIdForVlan(long) - */ - @Override - public Long getPodIdForVlan(long vlanDbId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listNetworkOfferingsForUpgrade(long) - */ - @Override - public List listNetworkOfferingsForUpgrade(long networkId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isSecurityGroupSupportedInNetwork(com.cloud.network.Network) - */ - @Override - public boolean isSecurityGroupSupportedInNetwork(Network network) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isProviderSupportServiceInNetwork(long, com.cloud.network.Network.Service, com.cloud.network.Network.Provider) - */ - @Override - public boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isProviderEnabledInPhysicalNetwork(long, java.lang.String) - */ - @Override - public boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNetworkTag(com.cloud.hypervisor.Hypervisor.HypervisorType, com.cloud.network.Network) - */ - @Override - public String getNetworkTag(HypervisorType hType, Network network) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getElementServices(com.cloud.network.Network.Provider) - */ - @Override - public List getElementServices(Provider provider) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#canElementEnableIndividualServices(com.cloud.network.Network.Provider) - */ - @Override - public boolean canElementEnableIndividualServices(Provider provider) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#areServicesSupportedInNetwork(long, com.cloud.network.Network.Service[]) - */ - @Override - public boolean areServicesSupportedInNetwork(long networkId, Service... services) { - return (_ntwkSrvcDao.areServicesSupportedInNetwork(networkId, services)); - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isNetworkSystem(com.cloud.network.Network) - */ - @Override - public boolean isNetworkSystem(Network network) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#reallocate(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DataCenterDeployment) - */ - @Override - public boolean reallocate(VirtualMachineProfile vm, DataCenterDeployment dest) throws InsufficientCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNetworkOfferingServiceCapabilities(com.cloud.offering.NetworkOffering, com.cloud.network.Network.Service) - */ - @Override - public Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPhysicalNetworkId(com.cloud.network.Network) - */ - @Override - public Long getPhysicalNetworkId(Network network) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getAllowSubdomainAccessGlobal() - */ - @Override - public boolean getAllowSubdomainAccessGlobal() { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isProviderForNetwork(com.cloud.network.Network.Provider, long) - */ - @Override - public boolean isProviderForNetwork(Provider provider, long networkId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isProviderForNetworkOffering(com.cloud.network.Network.Provider, long) - */ - @Override - public boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#canProviderSupportServices(java.util.Map) - */ - @Override - public void canProviderSupportServices(Map> providersMap) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPhysicalNetworkInfo(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public List getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#canAddDefaultSecurityGroup() - */ - @Override - public boolean canAddDefaultSecurityGroup() { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listNetworkOfferingServices(long) - */ - @Override - public List listNetworkOfferingServices(long networkOfferingId) { - List supportedSvcs = new ArrayList(); - if (networkOfferingId != 2) { - supportedSvcs.add(Service.SourceNat); - } - return supportedSvcs; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#areServicesEnabledInZone(long, com.cloud.offering.NetworkOffering, java.util.List) - */ - @Override - public boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getIpToServices(java.util.List, boolean, boolean) - */ - @Override - public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getProviderToIpList(com.cloud.network.Network, java.util.Map) - */ - @Override - public Map> getProviderToIpList(Network network, Map> ipToServices) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#checkIpForService(com.cloud.network.IPAddressVO, com.cloud.network.Network.Service, java.lang.Long) - */ - @Override - public boolean checkIpForService(IPAddressVO ip, Service service, Long networkId) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#checkCapabilityForProvider(java.util.Set, com.cloud.network.Network.Service, com.cloud.network.Network.Capability, java.lang.String) - */ - @Override - public void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultUniqueProviderForService(java.lang.String) - */ - @Override - public Provider getDefaultUniqueProviderForService(String serviceName) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignSystemIp(long, com.cloud.user.Account, boolean, boolean) - */ - @Override - public IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) throws InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#handleSystemIpRelease(com.cloud.network.IpAddress) - */ - @Override - public boolean handleSystemIpRelease(IpAddress ip) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#checkNetworkPermissions(com.cloud.user.Account, com.cloud.network.Network) - */ - @Override - public void checkNetworkPermissions(Account owner, Network network) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#allocateDirectIp(com.cloud.vm.NicProfile, com.cloud.dc.DataCenter, com.cloud.vm.VirtualMachineProfile, com.cloud.network.Network, java.lang.String) - */ - @Override - public void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile vm, Network network, String requestedIp) throws InsufficientVirtualNetworkCapcityException, - InsufficientAddressCapacityException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultManagementTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultStorageTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultPublicTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultPublicTrafficLabel(long dcId, HypervisorType vmware) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultGuestTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) - */ - @Override - public String getDefaultGuestTrafficLabel(long dcId, HypervisorType vmware) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getElementImplementingProvider(java.lang.String) - */ - @Override - public NetworkElement getElementImplementingProvider(String providerName) { - return new MockVpcVirtualRouterElement(); - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignSourceNatIpAddressToGuestNetwork(com.cloud.user.Account, com.cloud.network.Network) - */ - @Override - public PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network guestNetwork) throws InsufficientAddressCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getAccountNetworkDomain(long, long) - */ - @Override - public String getAccountNetworkDomain(long accountId, long zoneId) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getDefaultNetworkDomain() - */ - @Override - public String getDefaultNetworkDomain() { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNtwkOffDistinctProviders(long) - */ - @Override - public List getNtwkOffDistinctProviders(long ntwkOffId) { - List providers = new ArrayList(); - providers.add(Provider.VPCVirtualRouter); - return providers; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#allocateNic(com.cloud.vm.NicProfile, com.cloud.network.Network, java.lang.Boolean, int, com.cloud.vm.VirtualMachineProfile) - */ - @Override - public Pair allocateNic(NicProfile requested, Network network, Boolean isDefaultNic, int deviceId, VirtualMachineProfile vm) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#prepareNic(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext, long, com.cloud.network.NetworkVO) - */ - @Override - public NicProfile prepareNic(VirtualMachineProfile vmProfile, DeployDestination dest, ReservationContext context, long nicId, NetworkVO network) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#removeNic(com.cloud.vm.VirtualMachineProfile, com.cloud.vm.Nic) - */ - @Override - public void removeNic(VirtualMachineProfile vm, Nic nic) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#listPublicIpsAssignedToAccount(long, long, java.lang.Boolean) - */ - @Override - public List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#associateIPToGuestNetwork(long, long, boolean) - */ - @Override - public IPAddressVO associateIPToGuestNetwork(long ipAddrId, long networkId, boolean releaseOnFailure) throws ResourceAllocationException, ResourceUnavailableException, InsufficientAddressCapacityException, - ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNicProfile(com.cloud.vm.VirtualMachine, long, java.lang.String) - */ - @Override - public NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#setupDns(com.cloud.network.Network, com.cloud.network.Network.Provider) - */ - @Override - public boolean setupDns(Network network, Provider provider) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#releaseNic(com.cloud.vm.VirtualMachineProfile, com.cloud.vm.Nic) - */ - @Override - public void releaseNic(VirtualMachineProfile vmProfile, Nic nic) throws ConcurrentOperationException, ResourceUnavailableException { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getPhysicalNtwksSupportingTrafficType(long, com.cloud.network.Networks.TrafficType) - */ - @Override - public List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#isPrivateGateway(com.cloud.vm.Nic) - */ - @Override - public boolean isPrivateGateway(Nic guestNic) { - // TODO Auto-generated method stub - return false; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#createNicForVm(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.ReservationContext, com.cloud.vm.VirtualMachineProfileImpl, boolean) - */ - @Override - public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context, VirtualMachineProfileImpl vmProfile, boolean prepare) - throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignVpnGatewayIpAddress(long, com.cloud.user.Account, long) - */ - @Override - public PublicIp assignVpnGatewayIpAddress(long dcId, Account owner, long vpcId) throws InsufficientAddressCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#markPublicIpAsAllocated(com.cloud.network.IPAddressVO) - */ - @Override - public void markPublicIpAsAllocated(IPAddressVO addr) { - // TODO Auto-generated method stub - - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#assignDedicateIpAddress(com.cloud.user.Account, java.lang.Long, java.lang.Long, long, boolean) - */ - @Override - public PublicIp assignDedicateIpAddress(Account owner, Long guestNtwkId, Long vpcId, long dcId, boolean isSourceNat) throws ConcurrentOperationException, InsufficientAddressCapacityException { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.utils.component.Manager#configure(java.lang.String, java.util.Map) - */ - @Override - public boolean configure(String name, Map params) throws ConfigurationException { - // TODO Auto-generated method stub - return true; - } /* (non-Javadoc) * @see com.cloud.utils.component.Manager#start() @@ -1418,15 +97,36 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M return true; } + + + + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#configure(java.lang.String, java.util.Map) + */ + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + // TODO Auto-generated method stub + return false; + } + + + + + /* (non-Javadoc) * @see com.cloud.utils.component.Manager#stop() */ @Override public boolean stop() { // TODO Auto-generated method stub - return true; + return false; } + + + + /* (non-Javadoc) * @see com.cloud.utils.component.Manager#getName() */ @@ -1436,25 +136,632 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M return null; } + + + + /* (non-Javadoc) - * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, boolean, long) + * @see com.cloud.network.NetworkService#getIsolatedNetworksOwnedByAccountInZone(long, com.cloud.user.Account) */ @Override - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { + public List getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner) { // TODO Auto-generated method stub return null; } + + + /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNetworkLockTimeout() + * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, long, java.lang.Long) */ @Override - public int getNetworkLockTimeout() { + public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, + InsufficientAddressCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#releaseIpAddress(long) + */ + @Override + public boolean releaseIpAddress(long ipAddressId) throws InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#createGuestNetwork(com.cloud.api.commands.CreateNetworkCmd) + */ + @Override + public Network createGuestNetwork(CreateNetworkCmd cmd) throws InsufficientCapacityException, + ConcurrentOperationException, ResourceAllocationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#searchForNetworks(com.cloud.api.commands.ListNetworksCmd) + */ + @Override + public List searchForNetworks(ListNetworksCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#deleteNetwork(long) + */ + @Override + public boolean deleteNetwork(long networkId) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#restartNetwork(com.cloud.api.commands.RestartNetworkCmd, boolean) + */ + @Override + public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) throws ConcurrentOperationException, + ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getActiveNicsInNetwork(long) + */ + @Override + public int getActiveNicsInNetwork(long networkId) { // TODO Auto-generated method stub return 0; } + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getNetwork(long) + */ + @Override + public Network getNetwork(long networkId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getIp(long) + */ + @Override + public IpAddress getIp(long id) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#isNetworkAvailableInDomain(long, long) + */ + @Override + public boolean isNetworkAvailableInDomain(long networkId, long domainId) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#updateGuestNetwork(long, java.lang.String, java.lang.String, com.cloud.user.Account, com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean) + */ + @Override + public Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, + User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#createPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.String, java.util.List, java.lang.String, java.lang.Long, java.util.List, java.lang.String) + */ + @Override + public PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, + List isolationMethods, String broadcastDomainRange, Long domainId, List tags, String name) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#searchPhysicalNetworks(java.lang.Long, java.lang.Long, java.lang.String, java.lang.Long, java.lang.Long, java.lang.String) + */ + @Override + public Pair, Integer> searchPhysicalNetworks(Long id, Long zoneId, String keyword, + Long startIndex, Long pageSize, String name) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#updatePhysicalNetwork(java.lang.Long, java.lang.String, java.util.List, java.lang.String, java.lang.String) + */ + @Override + public PhysicalNetwork updatePhysicalNetwork(Long id, String networkSpeed, List tags, + String newVnetRangeString, String state) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#deletePhysicalNetwork(java.lang.Long) + */ + @Override + public boolean deletePhysicalNetwork(Long id) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#listNetworkServices(java.lang.String) + */ + @Override + public List listNetworkServices(String providerName) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#addProviderToPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.Long, java.util.List) + */ + @Override + public PhysicalNetworkServiceProvider addProviderToPhysicalNetwork(Long physicalNetworkId, String providerName, + Long destinationPhysicalNetworkId, List enabledServices) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#listNetworkServiceProviders(java.lang.Long, java.lang.String, java.lang.String, java.lang.Long, java.lang.Long) + */ + @Override + public Pair, Integer> listNetworkServiceProviders( + Long physicalNetworkId, String name, String state, Long startIndex, Long pageSize) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#updateNetworkServiceProvider(java.lang.Long, java.lang.String, java.util.List) + */ + @Override + public PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String state, + List enabledServices) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#deleteNetworkServiceProvider(java.lang.Long) + */ + @Override + public boolean deleteNetworkServiceProvider(Long id) throws ConcurrentOperationException, + ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getPhysicalNetwork(java.lang.Long) + */ + @Override + public PhysicalNetwork getPhysicalNetwork(Long physicalNetworkId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getCreatedPhysicalNetwork(java.lang.Long) + */ + @Override + public PhysicalNetwork getCreatedPhysicalNetwork(Long physicalNetworkId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getPhysicalNetworkServiceProvider(java.lang.Long) + */ + @Override + public PhysicalNetworkServiceProvider getPhysicalNetworkServiceProvider(Long providerId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getCreatedPhysicalNetworkServiceProvider(java.lang.Long) + */ + @Override + public PhysicalNetworkServiceProvider getCreatedPhysicalNetworkServiceProvider(Long providerId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#findPhysicalNetworkId(long, java.lang.String, com.cloud.network.Networks.TrafficType) + */ + @Override + public long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType) { + // TODO Auto-generated method stub + return 0; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#addTrafficTypeToPhysicalNetwork(java.lang.Long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public PhysicalNetworkTrafficType addTrafficTypeToPhysicalNetwork(Long physicalNetworkId, String trafficType, + String xenLabel, String kvmLabel, String vmwareLabel, String simulatorLabel, String vlan) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getPhysicalNetworkTrafficType(java.lang.Long) + */ + @Override + public PhysicalNetworkTrafficType getPhysicalNetworkTrafficType(Long id) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#updatePhysicalNetworkTrafficType(java.lang.Long, java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public PhysicalNetworkTrafficType updatePhysicalNetworkTrafficType(Long id, String xenLabel, String kvmLabel, + String vmwareLabel) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#deletePhysicalNetworkTrafficType(java.lang.Long) + */ + @Override + public boolean deletePhysicalNetworkTrafficType(Long id) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#listTrafficTypes(java.lang.Long) + */ + @Override + public Pair, Integer> listTrafficTypes(Long physicalNetworkId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getExclusiveGuestNetwork(long) + */ + @Override + public Network getExclusiveGuestNetwork(long zoneId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#listTrafficTypeImplementor(com.cloud.api.commands.ListTrafficTypeImplementorsCmd) + */ + @Override + public List> listTrafficTypeImplementor(ListTrafficTypeImplementorsCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long, com.cloud.user.Account) + */ + @Override + public List getIsolatedNetworksWithSourceNATOwnedByAccountInZone(long zoneId, Account owner) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#associateIPToNetwork(long, long) + */ + @Override + public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException, + ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#createPrivateNetwork(java.lang.String, java.lang.String, long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, long, java.lang.Long) + */ + @Override + public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan, + String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId) + throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignPublicIpAddress(long, java.lang.Long, com.cloud.user.Account, com.cloud.dc.Vlan.VlanType, java.lang.Long, java.lang.String, boolean) + */ + @Override + public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner, VlanType type, Long networkId, + String requestedIp, boolean isSystem) throws InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#disassociatePublicIpAddress(long, long, com.cloud.user.Account) + */ + @Override + public boolean disassociatePublicIpAddress(long id, long userId, Account caller) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#setupNetwork(com.cloud.user.Account, com.cloud.offerings.NetworkOfferingVO, com.cloud.deploy.DeploymentPlan, java.lang.String, java.lang.String, boolean) + */ + @Override + public List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, + String displayText, boolean isDefault) throws ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#setupNetwork(com.cloud.user.Account, com.cloud.offerings.NetworkOfferingVO, com.cloud.network.Network, com.cloud.deploy.DeploymentPlan, java.lang.String, java.lang.String, boolean, java.lang.Long, com.cloud.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long) + */ + @Override + public List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, + DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, + ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocate(com.cloud.vm.VirtualMachineProfile, java.util.List) + */ + @Override + public void allocate(VirtualMachineProfile vm, List> networks) + throws InsufficientCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#prepare(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext) + */ + @Override + public void prepare(VirtualMachineProfile profile, DeployDestination dest, + ReservationContext context) throws InsufficientCapacityException, ConcurrentOperationException, + ResourceUnavailableException { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#release(com.cloud.vm.VirtualMachineProfile, boolean) + */ + @Override + public void release(VirtualMachineProfile vmProfile, boolean forced) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#cleanupNics(com.cloud.vm.VirtualMachineProfile) + */ + @Override + public void cleanupNics(VirtualMachineProfile vm) { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#expungeNics(com.cloud.vm.VirtualMachineProfile) + */ + @Override + public void expungeNics(VirtualMachineProfile vm) { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#getNicProfiles(com.cloud.vm.VirtualMachine) + */ + @Override + public List getNicProfiles(VirtualMachine vm) { + // TODO Auto-generated method stub + return null; + } + + + + + /* (non-Javadoc) * @see com.cloud.network.NetworkManager#applyRules(java.util.List, com.cloud.network.rules.FirewallRule.Purpose, com.cloud.network.NetworkRuleApplier, boolean) */ @@ -1465,6 +772,121 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M return false; } + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#implementNetwork(long, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext) + */ + @Override + public Pair implementNetwork(long networkId, DeployDestination dest, + ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, + InsufficientCapacityException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#prepareNicForMigration(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination) + */ + @Override + public void prepareNicForMigration(VirtualMachineProfile vm, DeployDestination dest) { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#shutdownNetwork(long, com.cloud.vm.ReservationContext, boolean) + */ + @Override + public boolean shutdownNetwork(long networkId, ReservationContext context, boolean cleanupElements) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#destroyNetwork(long, com.cloud.vm.ReservationContext) + */ + @Override + public boolean destroyNetwork(long networkId, ReservationContext context) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#createGuestNetwork(long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, com.cloud.user.Account, java.lang.Long, com.cloud.network.PhysicalNetwork, long, com.cloud.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long) + */ + @Override + public Network createGuestNetwork(long networkOfferingId, String name, String displayText, String gateway, + String cidr, String vlanId, String networkDomain, Account owner, Long domainId, + PhysicalNetwork physicalNetwork, long zoneId, ACLType aclType, Boolean subdomainAccess, Long vpcId) + throws ConcurrentOperationException, InsufficientCapacityException, ResourceAllocationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#associateIpAddressListToAccount(long, long, long, java.lang.Long, com.cloud.network.Network) + */ + @Override + public boolean associateIpAddressListToAccount(long userId, long accountId, long zoneId, Long vlanId, + Network guestNetwork) throws InsufficientCapacityException, ConcurrentOperationException, + ResourceUnavailableException, ResourceAllocationException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#getPasswordResetProvider(com.cloud.network.Network) + */ + @Override + public UserDataServiceProvider getPasswordResetProvider(Network network) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#applyIpAssociations(com.cloud.network.Network, boolean) + */ + @Override + public boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + + + + /* (non-Javadoc) * @see com.cloud.network.NetworkManager#applyIpAssociations(com.cloud.network.Network, boolean, boolean, java.util.List) */ @@ -1475,6 +897,304 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M return false; } + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#startNetwork(long, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext) + */ + @Override + public boolean startNetwork(long networkId, DeployDestination dest, ReservationContext context) + throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#markIpAsUnavailable(long) + */ + @Override + public IPAddressVO markIpAsUnavailable(long addrId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#acquireGuestIpAddress(com.cloud.network.Network, java.lang.String) + */ + @Override + public String acquireGuestIpAddress(Network network, String requestedIp) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#applyStaticNats(java.util.List, boolean) + */ + @Override + public boolean applyStaticNats(List staticNats, boolean continueOnError) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#reallocate(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DataCenterDeployment) + */ + @Override + public boolean reallocate(VirtualMachineProfile vm, DataCenterDeployment dest) + throws InsufficientCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignSystemIp(long, com.cloud.user.Account, boolean, boolean) + */ + @Override + public IpAddress assignSystemIp(long networkId, Account owner, boolean forElasticLb, boolean forElasticIp) + throws InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#handleSystemIpRelease(com.cloud.network.IpAddress) + */ + @Override + public boolean handleSystemIpRelease(IpAddress ip) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocateDirectIp(com.cloud.vm.NicProfile, com.cloud.dc.DataCenter, com.cloud.vm.VirtualMachineProfile, com.cloud.network.Network, java.lang.String) + */ + @Override + public void allocateDirectIp(NicProfile nic, DataCenter dc, VirtualMachineProfile vm, + Network network, String requestedIp) throws InsufficientVirtualNetworkCapcityException, + InsufficientAddressCapacityException { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignSourceNatIpAddressToGuestNetwork(com.cloud.user.Account, com.cloud.network.Network) + */ + @Override + public PublicIp assignSourceNatIpAddressToGuestNetwork(Account owner, Network guestNetwork) + throws InsufficientAddressCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#allocateNic(com.cloud.vm.NicProfile, com.cloud.network.Network, java.lang.Boolean, int, com.cloud.vm.VirtualMachineProfile) + */ + @Override + public Pair allocateNic(NicProfile requested, Network network, Boolean isDefaultNic, + int deviceId, VirtualMachineProfile vm) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#prepareNic(com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext, long, com.cloud.network.NetworkVO) + */ + @Override + public NicProfile prepareNic(VirtualMachineProfile vmProfile, DeployDestination dest, + ReservationContext context, long nicId, NetworkVO network) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#removeNic(com.cloud.vm.VirtualMachineProfile, com.cloud.vm.Nic) + */ + @Override + public void removeNic(VirtualMachineProfile vm, Nic nic) { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#associateIPToGuestNetwork(long, long, boolean) + */ + @Override + public IPAddressVO associateIPToGuestNetwork(long ipAddrId, long networkId, boolean releaseOnFailure) + throws ResourceAllocationException, ResourceUnavailableException, InsufficientAddressCapacityException, + ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#setupDns(com.cloud.network.Network, com.cloud.network.Network.Provider) + */ + @Override + public boolean setupDns(Network network, Provider provider) { + // TODO Auto-generated method stub + return false; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#releaseNic(com.cloud.vm.VirtualMachineProfile, com.cloud.vm.Nic) + */ + @Override + public void releaseNic(VirtualMachineProfile vmProfile, Nic nic) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#createNicForVm(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.ReservationContext, com.cloud.vm.VirtualMachineProfileImpl, boolean) + */ + @Override + public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context, + VirtualMachineProfileImpl vmProfile, boolean prepare) + throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException, + ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignVpnGatewayIpAddress(long, com.cloud.user.Account, long) + */ + @Override + public PublicIp assignVpnGatewayIpAddress(long dcId, Account owner, long vpcId) + throws InsufficientAddressCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#markPublicIpAsAllocated(com.cloud.network.IPAddressVO) + */ + @Override + public void markPublicIpAsAllocated(IPAddressVO addr) { + // TODO Auto-generated method stub + + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#assignDedicateIpAddress(com.cloud.user.Account, java.lang.Long, java.lang.Long, long, boolean) + */ + @Override + public PublicIp assignDedicateIpAddress(Account owner, Long guestNtwkId, Long vpcId, long dcId, boolean isSourceNat) + throws ConcurrentOperationException, InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#convertNetworkToNetworkProfile(long) + */ + @Override + public NetworkProfile convertNetworkToNetworkProfile(long networkId) { + // TODO Auto-generated method stub + return null; + } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkManager#getNetworkLockTimeout() + */ + @Override + public int getNetworkLockTimeout() { + // TODO Auto-generated method stub + return 0; + } + + + + + /* (non-Javadoc) * @see com.cloud.network.NetworkManager#cleanupIpResources(long, long, com.cloud.user.Account) */ @@ -1484,6 +1204,10 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M return false; } + + + + /* (non-Javadoc) * @see com.cloud.network.NetworkManager#restartNetwork(java.lang.Long, com.cloud.user.Account, com.cloud.user.User, boolean) */ @@ -1494,6 +1218,10 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M return false; } + + + + /* (non-Javadoc) * @see com.cloud.network.NetworkManager#shutdownNetworkElementsAndResources(com.cloud.vm.ReservationContext, boolean, com.cloud.network.NetworkVO) */ @@ -1503,6 +1231,10 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M return false; } + + + + /* (non-Javadoc) * @see com.cloud.network.NetworkManager#implementNetworkElementsAndResources(com.cloud.deploy.DeployDestination, com.cloud.vm.ReservationContext, com.cloud.network.NetworkVO, com.cloud.offerings.NetworkOfferingVO) */ @@ -1514,6 +1246,10 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M } + + + + /* (non-Javadoc) * @see com.cloud.network.NetworkManager#allocateIp(com.cloud.user.Account, boolean, com.cloud.user.Account, com.cloud.dc.DataCenter) */ @@ -1524,6 +1260,10 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M return null; } + + + + /* (non-Javadoc) * @see com.cloud.network.NetworkManager#finalizeServicesAndProvidersForNetwork(com.cloud.offering.NetworkOffering, java.lang.Long) */ @@ -1533,4 +1273,6 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M return null; } + + } From 6b6d8c5710536bcc0070535c5e01427227373d77 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Tue, 8 Jan 2013 11:27:04 -0800 Subject: [PATCH 11/90] Network-refactor: Move code from NetworkManager to NetworkModel. NetworkModel is intended as a read-only view on the network model. This includes Networks, Nics, Ip address, PhysicalNetwork, NetworkOfferings, etc The code in configure() and start() is used to support queries on the network model which is now the responsibility of the NetworkModel service Network-refactor: Fix tests so that they get injected with the required NetworkModel mock Signed-off-by: Chiradeep Vittal --- .../DefaultComponentLibrary.java | 2 + .../com/cloud/network/NetworkManagerImpl.java | 78 +- .../com/cloud/network/NetworkModelImpl.java | 109 ++- .../element/VpcVirtualRouterElement.java | 6 +- .../cloud/network/MockNetworkModelImpl.java | 798 ++++++++++++++++++ .../SecurityGroupManagerImpl2Test.java | 2 + .../network/vpn/RemoteAccessVpnTest.java | 2 + 7 files changed, 916 insertions(+), 81 deletions(-) create mode 100644 server/test/com/cloud/network/MockNetworkModelImpl.java diff --git a/server/src/com/cloud/configuration/DefaultComponentLibrary.java b/server/src/com/cloud/configuration/DefaultComponentLibrary.java index 32a6be7c674..f57c6919752 100755 --- a/server/src/com/cloud/configuration/DefaultComponentLibrary.java +++ b/server/src/com/cloud/configuration/DefaultComponentLibrary.java @@ -74,6 +74,7 @@ import com.cloud.maint.UpgradeManagerImpl; import com.cloud.maint.dao.AgentUpgradeDaoImpl; import com.cloud.network.ExternalLoadBalancerUsageManagerImpl; import com.cloud.network.NetworkManagerImpl; +import com.cloud.network.NetworkModelImpl; import com.cloud.network.NetworkServiceImpl; import com.cloud.network.StorageNetworkManagerImpl; import com.cloud.network.as.AutoScaleManagerImpl; @@ -382,6 +383,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com addManager("resource limit manager", ResourceLimitManagerImpl.class); addManager("network service", NetworkServiceImpl.class); addManager("network manager", NetworkManagerImpl.class); + addManager("network model", NetworkModelImpl.class); addManager("download manager", DownloadMonitorImpl.class); addManager("upload manager", UploadMonitorImpl.class); addManager("keystore manager", KeystoreManagerImpl.class); diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index f256a185928..8ff3bba66fd 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -106,7 +106,6 @@ import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.NetworkDao; -import com.cloud.network.dao.NetworkDomainDao; import com.cloud.network.dao.NetworkServiceMapDao; import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; @@ -145,7 +144,6 @@ import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; import com.cloud.org.Grouping; import com.cloud.user.Account; import com.cloud.user.AccountManager; -import com.cloud.user.DomainManager; import com.cloud.user.ResourceLimitService; import com.cloud.user.User; import com.cloud.user.UserContext; @@ -158,7 +156,6 @@ import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.DB; import com.cloud.utils.db.Filter; -import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.JoinBuilder.JoinType; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; @@ -175,9 +172,9 @@ import com.cloud.vm.ReservationContextImpl; import com.cloud.vm.UserVmVO; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachineProfileImpl; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachineProfileImpl; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; @@ -275,29 +272,20 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { @Inject NetworkModel _networkModel; - - private final HashMap _systemNetworks = new HashMap(5); - static Long _privateOfferingId = null; - ScheduledExecutorService _executor; SearchBuilder AssignIpAddressSearch; SearchBuilder AssignIpAddressFromPodVlanSearch; - SearchBuilder IpAddressSearch; - SearchBuilder NicForTrafficTypeSearch; int _networkGcWait; int _networkGcInterval; String _networkDomain; - boolean _allowSubdomainNetworkAccess; int _networkLockTimeout; private Map _configs; HashMap _lastNetworkIdsToFree = new HashMap(); - static HashMap> s_serviceToImplementedProvidersMap = new HashMap>(); - static HashMap s_providerToNetworkElementMap = new HashMap(); @Override public PublicIp assignPublicIpAddress(long dcId, Long podId, Account owner, VlanType type, Long networkId, String requestedIp, boolean isSystem) throws InsufficientAddressCapacityException { @@ -891,23 +879,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { _networkLockTimeout = NumbersUtil.parseInt(_configs.get(Config.NetworkLockTimeout.key()), 600); - NetworkOfferingVO publicNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPublicNetwork, TrafficType.Public, true); - publicNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(publicNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemPublicNetwork, publicNetworkOffering); - NetworkOfferingVO managementNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemManagementNetwork, TrafficType.Management, false); - managementNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(managementNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemManagementNetwork, managementNetworkOffering); - NetworkOfferingVO controlNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemControlNetwork, TrafficType.Control, false); - controlNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(controlNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemControlNetwork, controlNetworkOffering); - NetworkOfferingVO storageNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemStorageNetwork, TrafficType.Storage, true); - storageNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(storageNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemStorageNetwork, storageNetworkOffering); - NetworkOfferingVO privateGatewayNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, - GuestType.Isolated); - privateGatewayNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(privateGatewayNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, privateGatewayNetworkOffering); - _privateOfferingId = privateGatewayNetworkOffering.getId(); + // populate providers @@ -1086,27 +1058,8 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { AssignIpAddressFromPodVlanSearch.join("vlan", podVlanSearch, podVlanSearch.entity().getId(), AssignIpAddressFromPodVlanSearch.entity().getVlanId(), JoinType.INNER); AssignIpAddressFromPodVlanSearch.done(); - IpAddressSearch = _ipAddressDao.createSearchBuilder(); - IpAddressSearch.and("accountId", IpAddressSearch.entity().getAllocatedToAccountId(), Op.EQ); - IpAddressSearch.and("dataCenterId", IpAddressSearch.entity().getDataCenterId(), Op.EQ); - IpAddressSearch.and("vpcId", IpAddressSearch.entity().getVpcId(), Op.EQ); - IpAddressSearch.and("associatedWithNetworkId", IpAddressSearch.entity().getAssociatedWithNetworkId(), Op.EQ); - SearchBuilder virtualNetworkVlanSB = _vlanDao.createSearchBuilder(); - virtualNetworkVlanSB.and("vlanType", virtualNetworkVlanSB.entity().getVlanType(), Op.EQ); - IpAddressSearch.join("virtualNetworkVlanSB", virtualNetworkVlanSB, IpAddressSearch.entity().getVlanId(), virtualNetworkVlanSB.entity().getId(), JoinBuilder.JoinType.INNER); - IpAddressSearch.done(); - - NicForTrafficTypeSearch = _nicDao.createSearchBuilder(); - SearchBuilder networkSearch = _networksDao.createSearchBuilder(); - NicForTrafficTypeSearch.join("network", networkSearch, networkSearch.entity().getId(), NicForTrafficTypeSearch.entity().getNetworkId(), JoinType.INNER); - NicForTrafficTypeSearch.and("instance", NicForTrafficTypeSearch.entity().getInstanceId(), Op.EQ); - networkSearch.and("traffictype", networkSearch.entity().getTrafficType(), Op.EQ); - NicForTrafficTypeSearch.done(); - _executor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("Network-Scavenger")); - _allowSubdomainNetworkAccess = Boolean.valueOf(_configs.get(Config.SubDomainNetworkAccess.key())); - _agentMgr.registerForHostEvents(this, true, false, true); s_logger.info("Network Manager is configured."); @@ -1122,33 +1075,6 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { @Override public boolean start() { - // populate s_serviceToImplementedProvidersMap & s_providerToNetworkElementMap with current _networkElements - // Need to do this in start() since _networkElements are not completely configured until then. - for (NetworkElement element : _networkElements) { - Map> capabilities = element.getCapabilities(); - Provider implementedProvider = element.getProvider(); - if (implementedProvider != null) { - if (s_providerToNetworkElementMap.containsKey(implementedProvider.getName())) { - s_logger.error("Cannot start NetworkManager: Provider <-> NetworkElement must be a one-to-one map, " + - "multiple NetworkElements found for Provider: " + implementedProvider.getName()); - return false; - } - s_providerToNetworkElementMap.put(implementedProvider.getName(), element.getName()); - } - if (capabilities != null && implementedProvider != null) { - for (Service service : capabilities.keySet()) { - if (s_serviceToImplementedProvidersMap.containsKey(service)) { - List providers = s_serviceToImplementedProvidersMap.get(service); - providers.add(implementedProvider); - } else { - List providers = new ArrayList(); - providers.add(implementedProvider); - s_serviceToImplementedProvidersMap.put(service, providers); - } - } - } - } - _executor.scheduleWithFixedDelay(new NetworkGarbageCollector(), _networkGcInterval, _networkGcInterval, TimeUnit.SECONDS); return true; } diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java index 819c57b0da5..e9d4fbb64e0 100644 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -27,6 +27,9 @@ import java.util.Map; import java.util.Set; import java.util.TreeSet; +import javax.ejb.Local; +import javax.naming.ConfigurationException; + import org.apache.log4j.Logger; import com.cloud.configuration.Config; @@ -81,9 +84,13 @@ import com.cloud.user.DomainManager; import com.cloud.user.dao.AccountDao; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.Inject; +import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; +import com.cloud.utils.db.JoinBuilder; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.JoinBuilder.JoinType; +import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; import com.cloud.vm.Nic; @@ -95,8 +102,8 @@ import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.VMInstanceDao; - -public class NetworkModelImpl implements NetworkModel{ +@Local(value = { NetworkModel.class}) +public class NetworkModelImpl implements NetworkModel, Manager{ static final Logger s_logger = Logger.getLogger(NetworkModelImpl.class); String _name; @@ -164,8 +171,8 @@ public class NetworkModelImpl implements NetworkModel{ SearchBuilder NicForTrafficTypeSearch; - String _networkDomain; - boolean _allowSubdomainNetworkAccess; + private String _networkDomain; + private boolean _allowSubdomainNetworkAccess; private Map _configs; @@ -1731,4 +1738,98 @@ public class NetworkModelImpl implements NetworkModel{ return false; } } + + + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + _name = name; + _configs = _configDao.getConfiguration("Network", params); + _networkDomain = _configs.get(Config.GuestDomainSuffix.key()); + _allowSubdomainNetworkAccess = Boolean.valueOf(_configs.get(Config.SubDomainNetworkAccess.key())); + + NetworkOfferingVO publicNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPublicNetwork, TrafficType.Public, true); + publicNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(publicNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemPublicNetwork, publicNetworkOffering); + NetworkOfferingVO managementNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemManagementNetwork, TrafficType.Management, false); + managementNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(managementNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemManagementNetwork, managementNetworkOffering); + NetworkOfferingVO controlNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemControlNetwork, TrafficType.Control, false); + controlNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(controlNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemControlNetwork, controlNetworkOffering); + NetworkOfferingVO storageNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemStorageNetwork, TrafficType.Storage, true); + storageNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(storageNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemStorageNetwork, storageNetworkOffering); + NetworkOfferingVO privateGatewayNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, + GuestType.Isolated); + privateGatewayNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(privateGatewayNetworkOffering); + _systemNetworks.put(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, privateGatewayNetworkOffering); + _privateOfferingId = privateGatewayNetworkOffering.getId(); + + + IpAddressSearch = _ipAddressDao.createSearchBuilder(); + IpAddressSearch.and("accountId", IpAddressSearch.entity().getAllocatedToAccountId(), Op.EQ); + IpAddressSearch.and("dataCenterId", IpAddressSearch.entity().getDataCenterId(), Op.EQ); + IpAddressSearch.and("vpcId", IpAddressSearch.entity().getVpcId(), Op.EQ); + IpAddressSearch.and("associatedWithNetworkId", IpAddressSearch.entity().getAssociatedWithNetworkId(), Op.EQ); + SearchBuilder virtualNetworkVlanSB = _vlanDao.createSearchBuilder(); + virtualNetworkVlanSB.and("vlanType", virtualNetworkVlanSB.entity().getVlanType(), Op.EQ); + IpAddressSearch.join("virtualNetworkVlanSB", virtualNetworkVlanSB, IpAddressSearch.entity().getVlanId(), virtualNetworkVlanSB.entity().getId(), JoinBuilder.JoinType.INNER); + IpAddressSearch.done(); + + NicForTrafficTypeSearch = _nicDao.createSearchBuilder(); + SearchBuilder networkSearch = _networksDao.createSearchBuilder(); + NicForTrafficTypeSearch.join("network", networkSearch, networkSearch.entity().getId(), NicForTrafficTypeSearch.entity().getNetworkId(), JoinType.INNER); + NicForTrafficTypeSearch.and("instance", NicForTrafficTypeSearch.entity().getInstanceId(), Op.EQ); + networkSearch.and("traffictype", networkSearch.entity().getTrafficType(), Op.EQ); + NicForTrafficTypeSearch.done(); + + s_logger.info("Network Model is configured."); + + return true; + } + + + @Override + public boolean start() { + // populate s_serviceToImplementedProvidersMap & s_providerToNetworkElementMap with current _networkElements + // Need to do this in start() since _networkElements are not completely configured until then. + for (NetworkElement element : _networkElements) { + Map> capabilities = element.getCapabilities(); + Provider implementedProvider = element.getProvider(); + if (implementedProvider != null) { + if (s_providerToNetworkElementMap.containsKey(implementedProvider.getName())) { + s_logger.error("Cannot start NetworkModel: Provider <-> NetworkElement must be a one-to-one map, " + + "multiple NetworkElements found for Provider: " + implementedProvider.getName()); + return false; + } + s_providerToNetworkElementMap.put(implementedProvider.getName(), element.getName()); + } + if (capabilities != null && implementedProvider != null) { + for (Service service : capabilities.keySet()) { + if (s_serviceToImplementedProvidersMap.containsKey(service)) { + List providers = s_serviceToImplementedProvidersMap.get(service); + providers.add(implementedProvider); + } else { + List providers = new ArrayList(); + providers.add(implementedProvider); + s_serviceToImplementedProvidersMap.put(service, providers); + } + } + } + } + s_logger.info("Started Network Model"); + return true; + } + + + @Override + public boolean stop() { + return true; + } + + + @Override + public String getName() { + return _name; + } } \ No newline at end of file diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java index ab748b25de3..1bc6b9c3db2 100644 --- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java @@ -60,7 +60,11 @@ import com.cloud.vm.ReservationContext; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.VirtualMachineProfile; -@Local(value = {NetworkElement.class, Site2SiteVpnServiceProvider.class}) +@Local(value = {NetworkElement.class, FirewallServiceProvider.class, + DhcpServiceProvider.class, UserDataServiceProvider.class, + StaticNatServiceProvider.class, LoadBalancingServiceProvider.class, + PortForwardingServiceProvider.class, IpDeployer.class, + Site2SiteVpnServiceProvider.class, NetworkACLServiceProvider.class}) public class VpcVirtualRouterElement extends VirtualRouterElement implements VpcProvider, Site2SiteVpnServiceProvider, NetworkACLServiceProvider{ private static final Logger s_logger = Logger.getLogger(VpcVirtualRouterElement.class); @Inject diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java new file mode 100644 index 00000000000..80b9c0fe628 --- /dev/null +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -0,0 +1,798 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.dc.Vlan; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.network.Network.Capability; +import com.cloud.network.Network.GuestType; +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.NetworkElement; +import com.cloud.network.element.UserDataServiceProvider; +import com.cloud.network.rules.FirewallRule; +import com.cloud.offering.NetworkOffering; +import com.cloud.offerings.NetworkOfferingVO; +import com.cloud.user.Account; +import com.cloud.utils.component.Manager; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.VirtualMachine; + +@Local(value = {NetworkModel.class}) +public class MockNetworkModelImpl implements NetworkModel, Manager { + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#configure(java.lang.String, java.util.Map) + */ + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#start() + */ + @Override + public boolean start() { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#stop() + */ + @Override + public boolean stop() { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#getName() + */ + @Override + public String getName() { + return "MockNetworkModelImpl"; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listPublicIpsAssignedToGuestNtwk(long, long, java.lang.Boolean) + */ + @Override + public List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, + Boolean sourceNat) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getSystemAccountNetworkOfferings(java.lang.String[]) + */ + @Override + public List getSystemAccountNetworkOfferings(String... offeringNames) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNics(long) + */ + @Override + public List getNics(long vmId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNextAvailableMacAddressInNetwork(long) + */ + @Override + public String getNextAvailableMacAddressInNetwork(long networkConfigurationId) + throws InsufficientAddressCapacityException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#validateRule(com.cloud.network.rules.FirewallRule) + */ + @Override + public boolean validateRule(FirewallRule rule) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getPublicIpAddress(long) + */ + @Override + public PublicIpAddress getPublicIpAddress(long ipAddressId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listPodVlans(long) + */ + @Override + public List listPodVlans(long podId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listNetworksUsedByVm(long, boolean) + */ + @Override + public List listNetworksUsedByVm(long vmId, boolean isSystem) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNicInNetwork(long, long) + */ + @Override + public Nic getNicInNetwork(long vmId, long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNicsForTraffic(long, com.cloud.network.Networks.TrafficType) + */ + @Override + public List getNicsForTraffic(long vmId, TrafficType type) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultNetworkForVm(long) + */ + @Override + public Network getDefaultNetworkForVm(long vmId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultNic(long) + */ + @Override + public Nic getDefaultNic(long vmId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getUserDataUpdateProvider(com.cloud.network.Network) + */ + @Override + public UserDataServiceProvider getUserDataUpdateProvider(Network network) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#networkIsConfiguredForExternalNetworking(long, long) + */ + @Override + public boolean networkIsConfiguredForExternalNetworking(long zoneId, long networkId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkServiceCapabilities(long, com.cloud.network.Network.Service) + */ + @Override + public Map getNetworkServiceCapabilities(long networkId, Service service) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#areServicesSupportedByNetworkOffering(long, com.cloud.network.Network.Service[]) + */ + @Override + public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkWithSecurityGroupEnabled(java.lang.Long) + */ + @Override + public NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getIpOfNetworkElementInVirtualNetwork(long, long) + */ + @Override + public String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listNetworksForAccount(long, long, com.cloud.network.Network.GuestType) + */ + @Override + public List listNetworksForAccount(long accountId, long zoneId, GuestType type) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listAllNetworksInAllZonesByType(com.cloud.network.Network.GuestType) + */ + @Override + public List listAllNetworksInAllZonesByType(GuestType type) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getGlobalGuestDomainSuffix() + */ + @Override + public String getGlobalGuestDomainSuffix() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getStartIpAddress(long) + */ + @Override + public String getStartIpAddress(long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getIpInNetwork(long, long) + */ + @Override + public String getIpInNetwork(long vmId, long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getIpInNetworkIncludingRemoved(long, long) + */ + @Override + public String getIpInNetworkIncludingRemoved(long vmId, long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getPodIdForVlan(long) + */ + @Override + public Long getPodIdForVlan(long vlanDbId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listNetworkOfferingsForUpgrade(long) + */ + @Override + public List listNetworkOfferingsForUpgrade(long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isSecurityGroupSupportedInNetwork(com.cloud.network.Network) + */ + @Override + public boolean isSecurityGroupSupportedInNetwork(Network network) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isProviderSupportServiceInNetwork(long, com.cloud.network.Network.Service, com.cloud.network.Network.Provider) + */ + @Override + public boolean isProviderSupportServiceInNetwork(long networkId, Service service, Provider provider) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isProviderEnabledInPhysicalNetwork(long, java.lang.String) + */ + @Override + public boolean isProviderEnabledInPhysicalNetwork(long physicalNetowrkId, String providerName) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkTag(com.cloud.hypervisor.Hypervisor.HypervisorType, com.cloud.network.Network) + */ + @Override + public String getNetworkTag(HypervisorType hType, Network network) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getElementServices(com.cloud.network.Network.Provider) + */ + @Override + public List getElementServices(Provider provider) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#canElementEnableIndividualServices(com.cloud.network.Network.Provider) + */ + @Override + public boolean canElementEnableIndividualServices(Provider provider) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#areServicesSupportedInNetwork(long, com.cloud.network.Network.Service[]) + */ + @Override + public boolean areServicesSupportedInNetwork(long networkId, Service... services) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isNetworkSystem(com.cloud.network.Network) + */ + @Override + public boolean isNetworkSystem(Network network) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkOfferingServiceCapabilities(com.cloud.offering.NetworkOffering, com.cloud.network.Network.Service) + */ + @Override + public Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getPhysicalNetworkId(com.cloud.network.Network) + */ + @Override + public Long getPhysicalNetworkId(Network network) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getAllowSubdomainAccessGlobal() + */ + @Override + public boolean getAllowSubdomainAccessGlobal() { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isProviderForNetwork(com.cloud.network.Network.Provider, long) + */ + @Override + public boolean isProviderForNetwork(Provider provider, long networkId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isProviderForNetworkOffering(com.cloud.network.Network.Provider, long) + */ + @Override + public boolean isProviderForNetworkOffering(Provider provider, long networkOfferingId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#canProviderSupportServices(java.util.Map) + */ + @Override + public void canProviderSupportServices(Map> providersMap) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getPhysicalNetworkInfo(long, com.cloud.hypervisor.Hypervisor.HypervisorType) + */ + @Override + public List getPhysicalNetworkInfo(long dcId, HypervisorType hypervisorType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#canAddDefaultSecurityGroup() + */ + @Override + public boolean canAddDefaultSecurityGroup() { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listNetworkOfferingServices(long) + */ + @Override + public List listNetworkOfferingServices(long networkOfferingId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#areServicesEnabledInZone(long, com.cloud.offering.NetworkOffering, java.util.List) + */ + @Override + public boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getIpToServices(java.util.List, boolean, boolean) + */ + @Override + public Map> getIpToServices(List publicIps, boolean rulesRevoked, + boolean includingFirewall) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getProviderToIpList(com.cloud.network.Network, java.util.Map) + */ + @Override + public Map> getProviderToIpList(Network network, + Map> ipToServices) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#checkIpForService(com.cloud.network.IPAddressVO, com.cloud.network.Network.Service, java.lang.Long) + */ + @Override + public boolean checkIpForService(IPAddressVO ip, Service service, Long networkId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#checkCapabilityForProvider(java.util.Set, com.cloud.network.Network.Service, com.cloud.network.Network.Capability, java.lang.String) + */ + @Override + public void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultUniqueProviderForService(java.lang.String) + */ + @Override + public Provider getDefaultUniqueProviderForService(String serviceName) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#checkNetworkPermissions(com.cloud.user.Account, com.cloud.network.Network) + */ + @Override + public void checkNetworkPermissions(Account owner, Network network) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultManagementTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) + */ + @Override + public String getDefaultManagementTrafficLabel(long zoneId, HypervisorType hypervisorType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultStorageTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) + */ + @Override + public String getDefaultStorageTrafficLabel(long zoneId, HypervisorType hypervisorType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultPublicTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) + */ + @Override + public String getDefaultPublicTrafficLabel(long dcId, HypervisorType vmware) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultGuestTrafficLabel(long, com.cloud.hypervisor.Hypervisor.HypervisorType) + */ + @Override + public String getDefaultGuestTrafficLabel(long dcId, HypervisorType vmware) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getElementImplementingProvider(java.lang.String) + */ + @Override + public NetworkElement getElementImplementingProvider(String providerName) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getAccountNetworkDomain(long, long) + */ + @Override + public String getAccountNetworkDomain(long accountId, long zoneId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultNetworkDomain() + */ + @Override + public String getDefaultNetworkDomain() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNtwkOffDistinctProviders(long) + */ + @Override + public List getNtwkOffDistinctProviders(long ntwkOffId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listPublicIpsAssignedToAccount(long, long, java.lang.Boolean) + */ + @Override + public List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getPhysicalNtwksSupportingTrafficType(long, com.cloud.network.Networks.TrafficType) + */ + @Override + public List getPhysicalNtwksSupportingTrafficType(long zoneId, TrafficType trafficType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isPrivateGateway(com.cloud.vm.Nic) + */ + @Override + public boolean isPrivateGateway(Nic guestNic) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkCapabilities(long) + */ + @Override + public Map> getNetworkCapabilities(long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getSystemNetworkByZoneAndTrafficType(long, com.cloud.network.Networks.TrafficType) + */ + @Override + public Network getSystemNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDedicatedNetworkDomain(long) + */ + @Override + public Long getDedicatedNetworkDomain(long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkOfferingServiceProvidersMap(long) + */ + @Override + public Map> getNetworkOfferingServiceProvidersMap(long networkOfferingId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listSupportedNetworkServiceProviders(java.lang.String) + */ + @Override + public List listSupportedNetworkServiceProviders(String serviceName) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#listNetworksByVpc(long) + */ + @Override + public List listNetworksByVpc(long vpcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#canUseForDeploy(com.cloud.network.Network) + */ + @Override + public boolean canUseForDeploy(Network network) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getExclusiveGuestNetwork(long) + */ + @Override + public Network getExclusiveGuestNetwork(long zoneId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#findPhysicalNetworkId(long, java.lang.String, com.cloud.network.Networks.TrafficType) + */ + @Override + public long findPhysicalNetworkId(long zoneId, String tag, TrafficType trafficType) { + // TODO Auto-generated method stub + return 0; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetworkRate(long, java.lang.Long) + */ + @Override + public Integer getNetworkRate(long networkId, Long vmId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isVmPartOfNetwork(long, long) + */ + @Override + public boolean isVmPartOfNetwork(long vmId, long ntwkId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDefaultPhysicalNetworkByZoneAndTrafficType(long, com.cloud.network.Networks.TrafficType) + */ + @Override + public PhysicalNetwork getDefaultPhysicalNetworkByZoneAndTrafficType(long zoneId, TrafficType trafficType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNetwork(long) + */ + @Override + public Network getNetwork(long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getIp(long) + */ + @Override + public IpAddress getIp(long sourceIpAddressId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isNetworkAvailableInDomain(long, long) + */ + @Override + public boolean isNetworkAvailableInDomain(long networkId, long domainId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getNicProfile(com.cloud.vm.VirtualMachine, long, java.lang.String) + */ + @Override + public NicProfile getNicProfile(VirtualMachine vm, long networkId, String broadcastUri) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getAvailableIps(com.cloud.network.Network, java.lang.String) + */ + @Override + public Set getAvailableIps(Network network, String requestedIp) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getDomainNetworkDomain(long, long) + */ + @Override + public String getDomainNetworkDomain(long domainId, long zoneId) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java index c4b4e94a60f..9c3e3310403 100644 --- a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java +++ b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java @@ -33,6 +33,7 @@ import com.cloud.configuration.dao.ConfigurationDaoImpl; import com.cloud.domain.dao.DomainDaoImpl; import com.cloud.event.dao.UsageEventDaoImpl; import com.cloud.network.MockNetworkManagerImpl; +import com.cloud.network.MockNetworkModelImpl; import com.cloud.network.security.dao.SecurityGroupDaoImpl; import com.cloud.network.security.dao.SecurityGroupRuleDaoImpl; import com.cloud.network.security.dao.SecurityGroupRulesDaoImpl; @@ -81,6 +82,7 @@ public class SecurityGroupManagerImpl2Test extends TestCase { locator.addManager("VirtualMachineManager", MockVirtualMachineManagerImpl.class); locator.addManager("UserVmManager", MockUserVmManagerImpl.class); locator.addManager("NetworkManager", MockNetworkManagerImpl.class); + locator.addManager("NetworkModel", MockNetworkModelImpl.class); locator.addManager("AccountManager", MockAccountManagerImpl.class); locator.addManager("DomainManager", MockDomainManagerImpl.class); locator.addManager("ProjectManager", MockProjectManagerImpl.class); diff --git a/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java b/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java index f18626a2c13..25d52e74865 100644 --- a/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java +++ b/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java @@ -19,6 +19,7 @@ import com.cloud.domain.dao.DomainDaoImpl; import com.cloud.event.dao.UsageEventDaoImpl; import com.cloud.network.MockFirewallManagerImpl; import com.cloud.network.MockNetworkManagerImpl; +import com.cloud.network.MockNetworkModelImpl; import com.cloud.network.MockRulesManagerImpl; import com.cloud.network.dao.FirewallRulesDaoImpl; import com.cloud.network.dao.IPAddressDaoImpl; @@ -53,6 +54,7 @@ public class RemoteAccessVpnTest { locator.addManager("AccountManager", MockAccountManagerImpl.class); locator.addManager("DomainManager", MockDomainManagerImpl.class); locator.addManager("NetworkManager", MockNetworkManagerImpl.class); + locator.addManager("NetworkModel", MockNetworkModelImpl.class); locator.addManager("RulesManager", MockRulesManagerImpl.class); locator.addManager("FirewallManager", MockFirewallManagerImpl.class); } From 504264236c9a9580b75c480d60e79a6e3a40b0c5 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Tue, 8 Jan 2013 13:38:03 -0800 Subject: [PATCH 12/90] Network-refactor: In preparation for moving the read-only interface NetworkModel to the api project, ensure that all methods use interfaces from the api project. By moving it to the api project, it lessens the dependency of plugins on the server components. Signed-off-by: Chiradeep Vittal --- .../lb/ElasticLoadBalancerManagerImpl.java | 6 +-- .../consoleproxy/ConsoleProxyManagerImpl.java | 12 +++--- .../ExternalFirewallDeviceManagerImpl.java | 4 +- .../src/com/cloud/network/NetworkManager.java | 6 +-- .../com/cloud/network/NetworkManagerImpl.java | 20 ++++----- .../src/com/cloud/network/NetworkModel.java | 27 +++++------- .../com/cloud/network/NetworkModelImpl.java | 43 ++++++++++--------- .../VirtualNetworkApplianceManagerImpl.java | 28 ++++++------ ...VpcVirtualNetworkApplianceManagerImpl.java | 5 +-- .../SecondaryStorageManagerImpl.java | 5 ++- .../src/com/cloud/vm/UserVmManagerImpl.java | 8 ++-- .../cloud/network/MockNetworkManagerImpl.java | 6 +-- .../cloud/network/MockNetworkModelImpl.java | 42 +++++++++--------- .../com/cloud/vpc/MockNetworkManagerImpl.java | 6 +-- 14 files changed, 106 insertions(+), 112 deletions(-) mode change 100755 => 100644 server/src/com/cloud/vm/UserVmManagerImpl.java diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java index 3d3ba9c89a1..6481d7fa86f 100644 --- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java +++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java @@ -101,8 +101,8 @@ import com.cloud.network.router.VpcVirtualNetworkApplianceManager; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.LoadBalancer; +import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; -import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.service.ServiceOfferingVO; import com.cloud.service.dao.ServiceOfferingDao; @@ -497,8 +497,8 @@ ElasticLoadBalancerManager, Manager, VirtualMachineGuru { s_logger.debug("Creating the ELB vm " + id); } - List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork); - NetworkOfferingVO controlOffering = offerings.get(0); + List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork); + NetworkOffering controlOffering = offerings.get(0); NetworkVO controlConfig = _networkMgr.setupNetwork(_systemAcct, controlOffering, plan, null, null, false).get(0); List> networks = new ArrayList>(2); diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 9161e605abf..c8f8bdcbe27 100755 --- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -98,8 +98,8 @@ import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.NetworkDao; import com.cloud.network.rules.RulesManager; +import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; -import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.resource.ResourceManager; import com.cloud.resource.ResourceStateAdapter; @@ -239,9 +239,9 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx private ServiceOfferingVO _serviceOffering; - NetworkOfferingVO _publicNetworkOffering; - NetworkOfferingVO _managementNetworkOffering; - NetworkOfferingVO _linkLocalNetworkOffering; + NetworkOffering _publicNetworkOffering; + NetworkOffering _managementNetworkOffering; + NetworkOffering _linkLocalNetworkOffering; @Inject private VirtualMachineManager _itMgr; @@ -769,7 +769,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx NetworkVO defaultNetwork = defaultNetworks.get(0); - List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork, NetworkOfferingVO.SystemManagementNetwork); + List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork, NetworkOffering.SystemManagementNetwork); List> networks = new ArrayList>(offerings.size() + 1); NicProfile defaultNic = new NicProfile(); defaultNic.setDefaultNic(true); @@ -777,7 +777,7 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx networks.add(new Pair(_networkMgr.setupNetwork(systemAcct, _networkOfferingDao.findById(defaultNetwork.getNetworkOfferingId()), plan, null, null, false).get(0), defaultNic)); - for (NetworkOfferingVO offering : offerings) { + for (NetworkOffering offering : offerings) { networks.add(new Pair(_networkMgr.setupNetwork(systemAcct, offering, plan, null, null, false).get(0), null)); } diff --git a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java index 8431e03da52..6b05e25d15f 100644 --- a/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalFirewallDeviceManagerImpl.java @@ -384,7 +384,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl IPAddressVO sourceNatIp = null; if (!sharedSourceNat) { // Get the source NAT IP address for this account - List sourceNatIps = _networkMgr.listPublicIpsAssignedToAccount(network.getAccountId(), + List sourceNatIps = _networkMgr.listPublicIpsAssignedToAccount(network.getAccountId(), zoneId, true); if (sourceNatIps.size() != 1) { @@ -393,7 +393,7 @@ public abstract class ExternalFirewallDeviceManagerImpl extends AdapterBase impl s_logger.error(errorMsg); return true; } else { - sourceNatIp = sourceNatIps.get(0); + sourceNatIp = _ipAddressDao.findById(sourceNatIps.get(0).getId()); } } diff --git a/server/src/com/cloud/network/NetworkManager.java b/server/src/com/cloud/network/NetworkManager.java index 8f8ea5edaca..d4a9b5c64c9 100755 --- a/server/src/com/cloud/network/NetworkManager.java +++ b/server/src/com/cloud/network/NetworkManager.java @@ -87,10 +87,10 @@ public interface NetworkManager { */ public boolean disassociatePublicIpAddress(long id, long userId, Account caller); - List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) + List setupNetwork(Account owner, NetworkOffering offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) throws ConcurrentOperationException; - List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, + List setupNetwork(Account owner, NetworkOffering offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException; void allocate(VirtualMachineProfile vm, List> networks) throws InsufficientCapacityException, ConcurrentOperationException; @@ -143,7 +143,7 @@ public interface NetworkManager { boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException; - boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, List publicIps) throws ResourceUnavailableException; + boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, List publicIps) throws ResourceUnavailableException; boolean startNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException; diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 8ff3bba66fd..eb20207dca6 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -548,15 +548,15 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { @Override public boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, - List publicIps) throws ResourceUnavailableException { + List publicIps) throws ResourceUnavailableException { boolean success = true; - Map> ipToServices = _networkModel.getIpToServices(publicIps, rulesRevoked, true); - Map> providerToIpList = _networkModel.getProviderToIpList(network, ipToServices); + Map> ipToServices = _networkModel.getIpToServices(publicIps, rulesRevoked, true); + Map> providerToIpList = _networkModel.getProviderToIpList(network, ipToServices); for (Provider provider : providerToIpList.keySet()) { try { - ArrayList ips = providerToIpList.get(provider); + ArrayList ips = providerToIpList.get(provider); if (ips == null || ips.isEmpty()) { continue; } @@ -568,7 +568,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { throw new CloudRuntimeException("Fail to get ip deployer for element: " + element); } Set services = new HashSet(); - for (PublicIp ip : ips) { + for (PublicIpAddress ip : ips) { if (!ipToServices.containsKey(ip)) { continue; } @@ -680,16 +680,16 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { protected IPAddressVO getExistingSourceNatInNetwork(long ownerId, Long networkId) { - List addrs = _networkModel.listPublicIpsAssignedToGuestNtwk(ownerId, networkId, true); + List addrs = _networkModel.listPublicIpsAssignedToGuestNtwk(ownerId, networkId, true); IPAddressVO sourceNatIp = null; if (addrs.isEmpty()) { return null; } else { // Account already has ip addresses - for (IPAddressVO addr : addrs) { + for (IpAddress addr : addrs) { if (addr.isSourceNat()) { - sourceNatIp = addr; + sourceNatIp = _ipAddressDao.findById(addr.getId()); return sourceNatIp; } } @@ -1088,7 +1088,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { } @Override - public List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, + public List setupNetwork(Account owner, NetworkOffering offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) throws ConcurrentOperationException { return setupNetwork(owner, offering, null, plan, name, displayText, false, null, null, null, null); @@ -1096,7 +1096,7 @@ public class NetworkManagerImpl implements NetworkManager, Manager, Listener { @Override @DB - public List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, DeploymentPlan + public List setupNetwork(Account owner, NetworkOffering offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException { diff --git a/server/src/com/cloud/network/NetworkModel.java b/server/src/com/cloud/network/NetworkModel.java index 27ab38d099c..f53cfbd2ef2 100644 --- a/server/src/com/cloud/network/NetworkModel.java +++ b/server/src/com/cloud/network/NetworkModel.java @@ -29,21 +29,16 @@ import com.cloud.network.Network.Capability; 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.NetworkElement; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.rules.FirewallRule; import com.cloud.offering.NetworkOffering; -import com.cloud.offerings.NetworkOfferingVO; import com.cloud.user.Account; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; import com.cloud.vm.VirtualMachine; -/** - * @author chiradeep - * - */ + public interface NetworkModel { /** @@ -57,9 +52,9 @@ public interface NetworkModel { * - (optional) true if the IP address should be a source NAT address * @return - list of IP addresses */ - List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat); + List listPublicIpsAssignedToGuestNtwk(long accountId, long associatedNetworkId, Boolean sourceNat); - List getSystemAccountNetworkOfferings(String... offeringNames); + List getSystemAccountNetworkOfferings(String... offeringNames); List getNics(long vmId); @@ -71,7 +66,7 @@ public interface NetworkModel { List listPodVlans(long podId); - List listNetworksUsedByVm(long vmId, boolean isSystem); + List listNetworksUsedByVm(long vmId, boolean isSystem); Nic getNicInNetwork(long vmId, long networkId); @@ -89,13 +84,13 @@ public interface NetworkModel { boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services); - NetworkVO getNetworkWithSecurityGroupEnabled(Long zoneId); + Network getNetworkWithSecurityGroupEnabled(Long zoneId); String getIpOfNetworkElementInVirtualNetwork(long accountId, long dataCenterId); - List listNetworksForAccount(long accountId, long zoneId, Network.GuestType type); + List listNetworksForAccount(long accountId, long zoneId, Network.GuestType type); - List listAllNetworksInAllZonesByType(Network.GuestType type); + List listAllNetworksInAllZonesByType(Network.GuestType type); String getGlobalGuestDomainSuffix(); @@ -145,12 +140,12 @@ public interface NetworkModel { boolean areServicesEnabledInZone(long zoneId, NetworkOffering offering, List services); - Map> getIpToServices(List publicIps, boolean rulesRevoked, + Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall); - Map> getProviderToIpList(Network network, Map> ipToServices); + Map> getProviderToIpList(Network network, Map> ipToServices); - boolean checkIpForService(IPAddressVO ip, Service service, Long networkId); + boolean checkIpForService(IpAddress ip, Service service, Long networkId); void checkCapabilityForProvider(Set providers, Service service, Capability cap, String capValue); @@ -196,7 +191,7 @@ public interface NetworkModel { * @param sourceNat * @return */ - List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat); + List listPublicIpsAssignedToAccount(long accountId, long dcId, Boolean sourceNat); /** * @param zoneId diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java index e9d4fbb64e0..8dee11ecc3d 100644 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -212,7 +212,7 @@ public class NetworkModelImpl implements NetworkModel, Manager{ return element.canEnableIndividualServices(); } - Set getPublicIpPurposeInRules(PublicIp ip, boolean includeRevoked, boolean includingFirewall) { + Set getPublicIpPurposeInRules(PublicIpAddress ip, boolean includeRevoked, boolean includingFirewall) { Set result = new HashSet(); List rules = null; if (includeRevoked) { @@ -235,12 +235,12 @@ public class NetworkModelImpl implements NetworkModel, Manager{ } @Override - public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { - Map> ipToServices = new HashMap>(); + public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { + Map> ipToServices = new HashMap>(); if (publicIps != null && !publicIps.isEmpty()) { Set networkSNAT = new HashSet(); - for (PublicIp ip : publicIps) { + for (PublicIpAddress ip : publicIps) { Set services = ipToServices.get(ip); if (services == null) { services = new HashSet(); @@ -328,9 +328,9 @@ public class NetworkModelImpl implements NetworkModel, Manager{ public boolean canIpUsedForNonConserveService(PublicIp ip, Service service) { // If it's non-conserve mode, then the new ip should not be used by any other services - List ipList = new ArrayList(); + List ipList = new ArrayList(); ipList.add(ip); - Map> ipToServices = getIpToServices(ipList, false, false); + Map> ipToServices = getIpToServices(ipList, false, false); Set services = ipToServices.get(ip); // Not used currently, safe if (services == null || services.isEmpty()) { @@ -361,9 +361,9 @@ public class NetworkModelImpl implements NetworkModel, Manager{ } public boolean canIpUsedForService(PublicIp publicIp, Service service, Long networkId) { - List ipList = new ArrayList(); + List ipList = new ArrayList(); ipList.add(publicIp); - Map> ipToServices = getIpToServices(ipList, false, true); + Map> ipToServices = getIpToServices(ipList, false, true); Set services = ipToServices.get(publicIp); if (services == null || services.isEmpty()) { return true; @@ -404,10 +404,10 @@ public class NetworkModelImpl implements NetworkModel, Manager{ } @Override - public Map> getProviderToIpList(Network network, Map> ipToServices) { + public Map> getProviderToIpList(Network network, Map> ipToServices) { NetworkOffering offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); if (!offering.isConserveMode()) { - for (PublicIp ip : ipToServices.keySet()) { + for (PublicIpAddress ip : ipToServices.keySet()) { Set services = new HashSet() ; services.addAll(ipToServices.get(ip)); if (services != null && services.contains(Service.Firewall)) { @@ -418,12 +418,12 @@ public class NetworkModelImpl implements NetworkModel, Manager{ } } } - Map> serviceToIps = new HashMap>(); - for (PublicIp ip : ipToServices.keySet()) { + Map> serviceToIps = new HashMap>(); + for (PublicIpAddress ip : ipToServices.keySet()) { for (Service service : ipToServices.get(ip)) { - Set ips = serviceToIps.get(service); + Set ips = serviceToIps.get(service); if (ips == null) { - ips = new HashSet(); + ips = new HashSet(); } ips.add(ip); serviceToIps.put(service, ips); @@ -431,19 +431,19 @@ public class NetworkModelImpl implements NetworkModel, Manager{ } // TODO Check different provider for same IP Map> providerToServices = getProviderServicesMap(network.getId()); - Map> providerToIpList = new HashMap>(); + Map> providerToIpList = new HashMap>(); for (Provider provider : providerToServices.keySet()) { Set services = providerToServices.get(provider); - ArrayList ipList = new ArrayList(); - Set ipSet = new HashSet(); + ArrayList ipList = new ArrayList(); + Set ipSet = new HashSet(); for (Service service : services) { - Set serviceIps = serviceToIps.get(service); + Set serviceIps = serviceToIps.get(service); if (serviceIps == null || serviceIps.isEmpty()) { continue; } ipSet.addAll(serviceIps); } - Set sourceNatIps = serviceToIps.get(Service.SourceNat); + Set sourceNatIps = serviceToIps.get(Service.SourceNat); if (sourceNatIps != null && !sourceNatIps.isEmpty()) { ipList.addAll(0, sourceNatIps); ipSet.removeAll(sourceNatIps); @@ -1361,7 +1361,7 @@ public class NetworkModelImpl implements NetworkModel, Manager{ } @Override - public boolean checkIpForService(IPAddressVO userIp, Service service, Long networkId) { + public boolean checkIpForService(IpAddress userIp, Service service, Long networkId) { if (networkId == null) { networkId = userIp.getAssociatedWithNetworkId(); } @@ -1371,7 +1371,8 @@ public class NetworkModelImpl implements NetworkModel, Manager{ if (offering.getGuestType() != GuestType.Isolated) { return true; } - PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); + IPAddressVO ipVO = _ipAddressDao.findById(userIp.getId()); + PublicIp publicIp = new PublicIp(ipVO, _vlanDao.findById(userIp.getVlanId()), NetUtils.createSequenceBasedMacAddress(ipVO.getMacAddress())); if (!canIpUsedForService(publicIp, service, networkId)) { return false; } diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 1570d1a9ba0..2a2a625f9f8 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -17,7 +17,6 @@ package com.cloud.network.router; -import java.net.URI; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; @@ -67,7 +66,6 @@ import com.cloud.agent.api.routing.NetworkElementCommand; import com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand; import com.cloud.agent.api.routing.SavePasswordCommand; import com.cloud.agent.api.routing.SetFirewallRulesCommand; -import com.cloud.agent.api.routing.SetNetworkACLCommand; import com.cloud.agent.api.routing.SetPortForwardingRulesCommand; import com.cloud.agent.api.routing.SetPortForwardingRulesVpcCommand; import com.cloud.agent.api.routing.SetStaticNatRulesCommand; @@ -76,7 +74,6 @@ import com.cloud.agent.api.routing.VpnUsersCfgCommand; import com.cloud.agent.api.to.FirewallRuleTO; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.LoadBalancerTO; -import com.cloud.agent.api.to.NetworkACLTO; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.PortForwardingRuleTO; import com.cloud.agent.api.to.StaticNatRuleTO; @@ -175,8 +172,8 @@ import com.cloud.network.rules.StaticNatImpl; import com.cloud.network.rules.StaticNatRule; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.network.vpn.Site2SiteVpnManager; +import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; -import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.resource.ResourceManager; import com.cloud.service.ServiceOfferingVO; @@ -1633,8 +1630,8 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian //2) Control network s_logger.debug("Adding nic for Virtual Router in Control network "); - List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork); - NetworkOfferingVO controlOffering = offerings.get(0); + List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork); + NetworkOffering controlOffering = offerings.get(0); NetworkVO controlConfig = _networkMgr.setupNetwork(_systemAcct, controlOffering, plan, null, null, false).get(0); networks.add(new Pair(controlConfig, null)); @@ -1656,7 +1653,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian if (hasGuestNetwork) { defaultNic.setDeviceId(2); } - NetworkOfferingVO publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemPublicNetwork).get(0); + NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); List publicNetworks = _networkMgr.setupNetwork(_systemAcct, publicOffering, plan, null, null, false); networks.add(new Pair(publicNetworks.get(0), defaultNic)); } @@ -2257,11 +2254,11 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian protected ArrayList getPublicIpsToApply(VirtualRouter router, Provider provider, Long guestNetworkId, com.cloud.network.IpAddress.State... skipInStates) { long ownerId = router.getAccountId(); - final List userIps = _networkModel.listPublicIpsAssignedToGuestNtwk(ownerId, guestNetworkId, null); + final List userIps = _networkModel.listPublicIpsAssignedToGuestNtwk(ownerId, guestNetworkId, null); List allPublicIps = new ArrayList(); if (userIps != null && !userIps.isEmpty()) { boolean addIp = true; - for (IPAddressVO userIp : userIps) { + for (IpAddress userIp : userIps) { if (skipInStates != null) { for (IpAddress.State stateToSkip : skipInStates) { if (userIp.getState() == stateToSkip) { @@ -2273,8 +2270,9 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } if (addIp) { - PublicIp publicIp = new PublicIp(userIp, _vlanDao.findById(userIp.getVlanId()), - NetUtils.createSequenceBasedMacAddress(userIp.getMacAddress())); + IPAddressVO ipVO = _ipAddressDao.findById(userIp.getId()); + PublicIp publicIp = new PublicIp(ipVO, _vlanDao.findById(userIp.getVlanId()), + NetUtils.createSequenceBasedMacAddress(ipVO.getMacAddress())); allPublicIps.add(publicIp); } } @@ -2282,11 +2280,11 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian //Get public Ips that should be handled by router Network network = _networkDao.findById(guestNetworkId); - Map> ipToServices = _networkModel.getIpToServices(allPublicIps, false, true); - Map> providerToIpList = _networkModel.getProviderToIpList(network, ipToServices); + Map> ipToServices = _networkModel.getIpToServices(allPublicIps, false, true); + Map> providerToIpList = _networkModel.getProviderToIpList(network, ipToServices); // Only cover virtual router for now, if ELB use it this need to be modified - ArrayList publicIps = providerToIpList.get(provider); + ArrayList publicIps = providerToIpList.get(provider); return publicIps; } @@ -2520,7 +2518,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian return null; } - NetworkOfferingVO offering = _networkOfferingDao.findById(_networkDao.findById(defaultNic.getNetworkId()).getNetworkOfferingId()); + NetworkOffering offering = _networkOfferingDao.findById(_networkDao.findById(defaultNic.getNetworkId()).getNetworkOfferingId()); if (offering.getRedundantRouter()) { return findGatewayIp(userVmId); } diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java index 12af4baa24c..155aeb512e0 100644 --- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java @@ -30,7 +30,6 @@ import org.apache.log4j.Logger; import com.cloud.agent.AgentManager.OnError; import com.cloud.agent.api.Command; -import com.cloud.agent.api.GetDomRVersionCmd; import com.cloud.agent.api.NetworkUsageCommand; import com.cloud.agent.api.PlugNicAnswer; import com.cloud.agent.api.PlugNicCommand; @@ -105,7 +104,7 @@ import com.cloud.network.vpc.dao.StaticRouteDao; import com.cloud.network.vpc.dao.VpcDao; import com.cloud.network.vpc.dao.VpcOfferingDao; import com.cloud.network.vpn.Site2SiteVpnManager; -import com.cloud.offerings.NetworkOfferingVO; +import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; import com.cloud.user.UserStatisticsVO; import com.cloud.utils.Pair; @@ -1235,7 +1234,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian publicNic.setBroadcastType(BroadcastDomainType.Vlan); publicNic.setBroadcastUri(BroadcastDomainType.Vlan.toUri(publicIp.getVlanTag())); publicNic.setIsolationUri(IsolationType.Vlan.toUri(publicIp.getVlanTag())); - NetworkOfferingVO publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemPublicNetwork).get(0); + NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); List publicNetworks = _networkMgr.setupNetwork(_systemAcct, publicOffering, plan, null, null, false); networks.add(new Pair(publicNetworks.get(0), publicNic)); publicVlans.add(publicIp.getVlanTag()); diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index 8b55a325f6c..e4208811f23 100755 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -83,6 +83,7 @@ import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.NetworkDao; import com.cloud.network.rules.RulesManager; +import com.cloud.offering.NetworkOffering; import com.cloud.offering.ServiceOffering; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; @@ -550,14 +551,14 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V NetworkVO defaultNetwork = defaultNetworks.get(0); - List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork, NetworkOfferingVO.SystemManagementNetwork, NetworkOfferingVO.SystemStorageNetwork); + List offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemControlNetwork, NetworkOfferingVO.SystemManagementNetwork, NetworkOfferingVO.SystemStorageNetwork); List> networks = new ArrayList>(offerings.size() + 1); NicProfile defaultNic = new NicProfile(); defaultNic.setDefaultNic(true); defaultNic.setDeviceId(2); try { networks.add(new Pair(_networkMgr.setupNetwork(systemAcct, _networkOfferingDao.findById(defaultNetwork.getNetworkOfferingId()), plan, null, null, false).get(0), defaultNic)); - for (NetworkOfferingVO offering : offerings) { + for (NetworkOffering offering : offerings) { networks.add(new Pair(_networkMgr.setupNetwork(systemAcct, offering, plan, null, null, false).get(0), null)); } } catch (ConcurrentOperationException e) { diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java old mode 100755 new mode 100644 index e470c03d971..a437e1f72b9 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2048,12 +2048,12 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager // If no network is specified, find system security group enabled network if (networkIdList == null || networkIdList.isEmpty()) { - NetworkVO networkWithSecurityGroup = _networkModel.getNetworkWithSecurityGroupEnabled(zone.getId()); + Network networkWithSecurityGroup = _networkModel.getNetworkWithSecurityGroupEnabled(zone.getId()); if (networkWithSecurityGroup == null) { throw new InvalidParameterValueException("No network with security enabled is found in zone id=" + zone.getId()); } - networkList.add(networkWithSecurityGroup); + networkList.add(_networkDao.findById(networkWithSecurityGroup.getId())); isSecurityGroupEnabledNetworkUsed = true; } else if (securityGroupIdList != null && !securityGroupIdList.isEmpty()) { @@ -2165,7 +2165,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (requiredOfferings.get(0).getState() == NetworkOffering.State.Enabled) { // get Virtual networks - List virtualNetworks = _networkModel.listNetworksForAccount(owner.getId(), zone.getId(), Network.GuestType.Isolated); + List virtualNetworks = _networkModel.listNetworksForAccount(owner.getId(), zone.getId(), Network.GuestType.Isolated); if (virtualNetworks.isEmpty()) { long physicalNetworkId = _networkModel.findPhysicalNetworkId(zone.getId(), requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType()); // Validate physical network @@ -3603,7 +3603,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } if (requiredOfferings.get(0).getState() == NetworkOffering.State.Enabled) { // get Virtual networks - List virtualNetworks = _networkModel.listNetworksForAccount(newAccount.getId(), zone.getId(), Network.GuestType.Isolated); + List virtualNetworks = _networkModel.listNetworksForAccount(newAccount.getId(), zone.getId(), Network.GuestType.Isolated); if (virtualNetworks.isEmpty()) { long physicalNetworkId = _networkModel.findPhysicalNetworkId(zone.getId(), requiredOfferings.get(0).getTags(), requiredOfferings.get(0).getTrafficType()); // Validate physical network diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index 96201f0fbd2..0053d4a43b1 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -174,14 +174,14 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS @Override - public List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) + public List setupNetwork(Account owner, NetworkOffering offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) throws ConcurrentOperationException { // TODO Auto-generated method stub return null; } @Override - public List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, + public List setupNetwork(Account owner, NetworkOffering offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException { // TODO Auto-generated method stub return null; @@ -475,7 +475,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS */ @Override public boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, - List publicIps) throws ResourceUnavailableException { + List publicIps) throws ResourceUnavailableException { // TODO Auto-generated method stub return false; } diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java index 80b9c0fe628..76e7171788e 100644 --- a/server/test/com/cloud/network/MockNetworkModelImpl.java +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -478,31 +478,11 @@ public class MockNetworkModelImpl implements NetworkModel, Manager { return false; } - /* (non-Javadoc) - * @see com.cloud.network.NetworkModel#getIpToServices(java.util.List, boolean, boolean) - */ - @Override - public Map> getIpToServices(List publicIps, boolean rulesRevoked, - boolean includingFirewall) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see com.cloud.network.NetworkModel#getProviderToIpList(com.cloud.network.Network, java.util.Map) - */ - @Override - public Map> getProviderToIpList(Network network, - Map> ipToServices) { - // TODO Auto-generated method stub - return null; - } - /* (non-Javadoc) * @see com.cloud.network.NetworkModel#checkIpForService(com.cloud.network.IPAddressVO, com.cloud.network.Network.Service, java.lang.Long) */ @Override - public boolean checkIpForService(IPAddressVO ip, Service service, Long networkId) { + public boolean checkIpForService(IpAddress ip, Service service, Long networkId) { // TODO Auto-generated method stub return false; } @@ -795,4 +775,24 @@ public class MockNetworkModelImpl implements NetworkModel, Manager { return null; } + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getIpToServices(java.util.List, boolean, boolean) + */ + @Override + public Map> getIpToServices(List publicIps, boolean rulesRevoked, + boolean includingFirewall) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getProviderToIpList(com.cloud.network.Network, java.util.Map) + */ + @Override + public Map> getProviderToIpList(Network network, + Map> ipToServices) { + // TODO Auto-generated method stub + return null; + } + } diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index 15bb830989e..beb0bd4d20b 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -655,7 +655,7 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M * @see com.cloud.network.NetworkManager#setupNetwork(com.cloud.user.Account, com.cloud.offerings.NetworkOfferingVO, com.cloud.deploy.DeploymentPlan, java.lang.String, java.lang.String, boolean) */ @Override - public List setupNetwork(Account owner, NetworkOfferingVO offering, DeploymentPlan plan, String name, + public List setupNetwork(Account owner, NetworkOffering offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) throws ConcurrentOperationException { // TODO Auto-generated method stub return null; @@ -669,7 +669,7 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M * @see com.cloud.network.NetworkManager#setupNetwork(com.cloud.user.Account, com.cloud.offerings.NetworkOfferingVO, com.cloud.network.Network, com.cloud.deploy.DeploymentPlan, java.lang.String, java.lang.String, boolean, java.lang.Long, com.cloud.acl.ControlledEntity.ACLType, java.lang.Boolean, java.lang.Long) */ @Override - public List setupNetwork(Account owner, NetworkOfferingVO offering, Network predefined, + public List setupNetwork(Account owner, NetworkOffering offering, Network predefined, DeploymentPlan plan, String name, String displayText, boolean errorIfAlreadySetup, Long domainId, ACLType aclType, Boolean subdomainAccess, Long vpcId) throws ConcurrentOperationException { // TODO Auto-generated method stub @@ -892,7 +892,7 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M */ @Override public boolean applyIpAssociations(Network network, boolean rulesRevoked, boolean continueOnError, - List publicIps) throws ResourceUnavailableException { + List publicIps) throws ResourceUnavailableException { // TODO Auto-generated method stub return false; } From 0c3001530ff85adb37205693727498953f13cc8c Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Tue, 8 Jan 2013 14:14:30 -0800 Subject: [PATCH 13/90] Network-refactor: move readonly interface NetworkModel into api project so that plugins can stop depending on the server project Network-refactor: accidentally injected NetworkModel twice (revert one of them) Signed-off-by: Chiradeep Vittal --- {server => api}/src/com/cloud/network/NetworkModel.java | 0 .../src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java | 3 +-- 2 files changed, 1 insertion(+), 2 deletions(-) rename {server => api}/src/com/cloud/network/NetworkModel.java (100%) diff --git a/server/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java similarity index 100% rename from server/src/com/cloud/network/NetworkModel.java rename to api/src/com/cloud/network/NetworkModel.java diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java index 02916f919a9..d7b8cfb1fdb 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/guru/NiciraNvpGuestNetworkGuru.java @@ -70,8 +70,7 @@ import com.cloud.vm.VirtualMachineProfile; public class NiciraNvpGuestNetworkGuru extends GuestNetworkGuru { private static final Logger s_logger = Logger.getLogger(NiciraNvpGuestNetworkGuru.class); - @Inject - NetworkModel _externalNetworkManager; + @Inject NetworkModel _networkModel; @Inject From a34ce77b77954213e3fc67ead808322e42a21517 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Tue, 8 Jan 2013 17:11:59 -0800 Subject: [PATCH 14/90] Network-refactor: verify that s2s provider gets injected as expected Signed-off-by: Chiradeep Vittal --- .../network/vpn/Site2SiteVpnManagerImpl.java | 1 + .../vpc/MockSite2SiteVpnServiceProvider.java | 86 +++++++++++++++++++ .../test/com/cloud/vpc/Site2SiteVpnTest.java | 82 ++++++++++++++++++ 3 files changed, 169 insertions(+) create mode 100644 server/test/com/cloud/vpc/MockSite2SiteVpnServiceProvider.java create mode 100644 server/test/com/cloud/vpc/Site2SiteVpnTest.java diff --git a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java index 9d0f89f57f7..8c1ebe502fc 100644 --- a/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java +++ b/server/src/com/cloud/network/vpn/Site2SiteVpnManagerImpl.java @@ -108,6 +108,7 @@ public class Site2SiteVpnManagerImpl implements Site2SiteVpnManager, Manager { Map configs = configDao.getConfiguration(params); _connLimit = NumbersUtil.parseInt(configs.get(Config.Site2SiteVpnConnectionPerVpnGatewayLimit.key()), 4); _subnetsLimit = NumbersUtil.parseInt(configs.get(Config.Site2SiteVpnSubnetsPerCustomerGatewayLimit.key()), 10); + assert (_s2sProviders.enumeration().hasMoreElements()): "Did not get injected with a list of S2S providers!"; return true; } diff --git a/server/test/com/cloud/vpc/MockSite2SiteVpnServiceProvider.java b/server/test/com/cloud/vpc/MockSite2SiteVpnServiceProvider.java new file mode 100644 index 00000000000..8f5c0c1c1bf --- /dev/null +++ b/server/test/com/cloud/vpc/MockSite2SiteVpnServiceProvider.java @@ -0,0 +1,86 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.vpc; + +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.Site2SiteVpnConnection; +import com.cloud.network.element.Site2SiteVpnServiceProvider; + +@Local({Site2SiteVpnServiceProvider.class}) +public class MockSite2SiteVpnServiceProvider implements Site2SiteVpnServiceProvider { + + /* (non-Javadoc) + * @see com.cloud.utils.component.Adapter#configure(java.lang.String, java.util.Map) + */ + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Adapter#getName() + */ + @Override + public String getName() { + // TODO Auto-generated method stub + return "Site2SiteVpnServiceProvider"; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Adapter#start() + */ + @Override + public boolean start() { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Adapter#stop() + */ + @Override + public boolean stop() { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.network.element.Site2SiteVpnServiceProvider#startSite2SiteVpn(com.cloud.network.Site2SiteVpnConnection) + */ + @Override + public boolean startSite2SiteVpn(Site2SiteVpnConnection conn) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.network.element.Site2SiteVpnServiceProvider#stopSite2SiteVpn(com.cloud.network.Site2SiteVpnConnection) + */ + @Override + public boolean stopSite2SiteVpn(Site2SiteVpnConnection conn) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return true; + } + +} diff --git a/server/test/com/cloud/vpc/Site2SiteVpnTest.java b/server/test/com/cloud/vpc/Site2SiteVpnTest.java new file mode 100644 index 00000000000..57117b1166e --- /dev/null +++ b/server/test/com/cloud/vpc/Site2SiteVpnTest.java @@ -0,0 +1,82 @@ +package com.cloud.vpc; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import junit.framework.Assert; + +import org.apache.log4j.Logger; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.cloud.configuration.DefaultInterceptorLibrary; +import com.cloud.network.dao.IPAddressDaoImpl; +import com.cloud.network.dao.Site2SiteCustomerGatewayDaoImpl; +import com.cloud.network.dao.Site2SiteVpnConnectionDao; +import com.cloud.network.dao.Site2SiteVpnConnectionDaoImpl; +import com.cloud.network.dao.Site2SiteVpnGatewayDaoImpl; +import com.cloud.network.element.Site2SiteVpnServiceProvider; +import com.cloud.network.vpc.dao.VpcDaoImpl; +import com.cloud.network.vpn.Site2SiteVpnManagerImpl; +import com.cloud.user.MockAccountManagerImpl; +import com.cloud.user.dao.AccountDaoImpl; +import com.cloud.utils.Pair; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.Inject; +import com.cloud.utils.component.MockComponentLocator; +import com.cloud.vpc.dao.MockConfigurationDaoImpl; + +public class Site2SiteVpnTest { + private MockComponentLocator locator; + private final static Logger s_logger = Logger.getLogger(Site2SiteVpnTest.class); + + private static void addDaos(MockComponentLocator locator) { + locator.addDao("AccountDao", AccountDaoImpl.class); + locator.addDao("Site2SiteCustomerGatewayDao", Site2SiteCustomerGatewayDaoImpl.class); + locator.addDao("Site2SiteVpnGatewayDao", Site2SiteVpnGatewayDaoImpl.class); + locator.addDao("Site2SiteVpnConnectionDao", Site2SiteVpnConnectionDaoImpl.class); + + locator.addDao("IPAddressDao", IPAddressDaoImpl.class); + locator.addDao("VpcDao", VpcDaoImpl.class); + locator.addDao("ConfiguratioDao", MockConfigurationDaoImpl.class); + + } + + private static void addManagers(MockComponentLocator locator) { + locator.addManager("AccountManager", MockAccountManagerImpl.class); + locator.addManager("VpcManager", MockVpcManagerImpl.class); + } + + @Before + public void setUp() { + locator = new MockComponentLocator("management-server"); + addDaos(locator); + addManagers(locator); + s_logger.info("Finished setUp"); + } + + @After + public void tearDown() throws Exception { + } + + + @Test + public void testInjected() throws Exception { + List>> list = + new ArrayList>>(); + list.add(new Pair>("Site2SiteVpnServiceProvider", MockSite2SiteVpnServiceProvider.class)); + locator.addAdapterChain(Site2SiteVpnServiceProvider.class, list); + s_logger.info("Finished add adapter"); + locator.makeActive(new DefaultInterceptorLibrary()); + s_logger.info("Finished make active"); + Site2SiteVpnManagerImpl vpnMgr = ComponentLocator.inject(Site2SiteVpnManagerImpl.class); + s_logger.info("Finished inject"); + Assert.assertTrue(vpnMgr.configure("Site2SiteVpnMgr",new HashMap()) ); + Assert.assertTrue(vpnMgr.start()); + + } + + +} From 88df984ff3edddaf502692b4e37bba2cc45365fa Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Tue, 8 Jan 2013 18:39:25 -0800 Subject: [PATCH 15/90] Network-refactor: add a method for plugins to get the source nat ip Signed-off-by: Chiradeep Vittal --- api/src/com/cloud/network/NetworkModel.java | 2 + .../com/cloud/network/NetworkModelImpl.java | 21 +++++ .../cloud/network/MockNetworkModelImpl.java | 9 ++ .../com/cloud/network/NetworkModelTest.java | 88 +++++++++++++++++++ 4 files changed, 120 insertions(+) create mode 100644 server/test/com/cloud/network/NetworkModelTest.java diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java index f53cfbd2ef2..bd3acbefbdc 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -241,5 +241,7 @@ public interface NetworkModel { Set getAvailableIps(Network network, String requestedIp); String getDomainNetworkDomain(long domainId, long zoneId); + + PublicIpAddress getSourceNatIpAddressForGuestNetwork(Account owner, Network guestNetwork); } \ No newline at end of file diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java index 8dee11ecc3d..dcd3c25668d 100644 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -1833,4 +1833,25 @@ public class NetworkModelImpl implements NetworkModel, Manager{ public String getName() { return _name; } + + @Override + public PublicIpAddress getSourceNatIpAddressForGuestNetwork(Account owner, Network guestNetwork) { + List addrs = listPublicIpsAssignedToGuestNtwk(owner.getId(), guestNetwork.getId(), true); + + IPAddressVO sourceNatIp = null; + if (addrs.isEmpty()) { + return null; + } else { + for (IpAddress addr : addrs) { + if (addr.isSourceNat()) { + sourceNatIp = _ipAddressDao.findById(addr.getId()); + return new PublicIp(sourceNatIp, _vlanDao.findById(sourceNatIp.getVlanId()), + NetUtils.createSequenceBasedMacAddress(sourceNatIp.getMacAddress())); + } + } + + } + + return null; + } } \ No newline at end of file diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java index 76e7171788e..e1113a4aee4 100644 --- a/server/test/com/cloud/network/MockNetworkModelImpl.java +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -795,4 +795,13 @@ public class MockNetworkModelImpl implements NetworkModel, Manager { return null; } + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#getSourceNatIpAddressForGuestNetwork(com.cloud.user.Account, com.cloud.network.Network) + */ + @Override + public PublicIpAddress getSourceNatIpAddressForGuestNetwork(Account owner, Network guestNetwork) { + // TODO Auto-generated method stub + return null; + } + } diff --git a/server/test/com/cloud/network/NetworkModelTest.java b/server/test/com/cloud/network/NetworkModelTest.java new file mode 100644 index 00000000000..52b3187e50c --- /dev/null +++ b/server/test/com/cloud/network/NetworkModelTest.java @@ -0,0 +1,88 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.mockito.Matchers.*; + +import java.util.ArrayList; +import java.util.List; + +import junit.framework.Assert; + +import org.junit.Before; +import org.junit.Test; + +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.VlanDao; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.user.Account; +import com.cloud.utils.db.Filter; +import com.cloud.utils.db.SearchBuilder; +import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.net.Ip; + +public class NetworkModelTest { + @Before + public void setUp() { + + } + + @Test + public void testGetSourceNatIpAddressForGuestNetwork() { + NetworkModelImpl modelImpl = new NetworkModelImpl(); + IPAddressDao ipAddressDao = mock(IPAddressDao.class); + modelImpl._ipAddressDao = ipAddressDao; + List fakeList = new ArrayList(); + IPAddressVO fakeIp = new IPAddressVO(new Ip("75.75.75.75"), 1, 0xaabbccddeeffL, 10, false); + fakeList.add(fakeIp); + SearchBuilder fakeSearch = mock(SearchBuilder.class); + modelImpl.IpAddressSearch = fakeSearch; + VlanDao fakeVlanDao = mock(VlanDao.class); + when (fakeVlanDao.findById(anyLong())).thenReturn(mock(VlanVO.class)); + modelImpl._vlanDao = fakeVlanDao; + when(fakeSearch.create()).thenReturn(mock(SearchCriteria.class)); + when( + ipAddressDao.search( + any(SearchCriteria.class), + (Filter)org.mockito.Matchers.isNull() + ) + ).thenReturn(fakeList); + when ( + ipAddressDao.findById(anyLong()) + ).thenReturn(fakeIp); + Account fakeAccount = mock(Account.class); + when(fakeAccount.getId()).thenReturn(1L); + Network fakeNetwork = mock(Network.class); + when(fakeNetwork.getId()).thenReturn(1L); + PublicIpAddress answer = modelImpl.getSourceNatIpAddressForGuestNetwork(fakeAccount, fakeNetwork); + Assert.assertNull(answer); + IPAddressVO fakeIp2 = new IPAddressVO(new Ip("76.75.75.75"), 1, 0xaabb10ddeeffL, 10, true); + fakeList.add(fakeIp2); + when ( + ipAddressDao.findById(anyLong()) + ).thenReturn(fakeIp2); + answer = modelImpl.getSourceNatIpAddressForGuestNetwork(fakeAccount, fakeNetwork); + Assert.assertNotNull(answer); + Assert.assertEquals(answer.getAddress().addr(), "76.75.75.75"); + + } + +} From e0578180c51089e7ae62774834664511df5020b5 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Tue, 8 Jan 2013 23:49:32 -0800 Subject: [PATCH 16/90] Network-refactor: verify injection is correct. Verify that dhcp service providers and ip deployers get injected independently in addition to the list of network elements Signed-off-by: Chiradeep Vittal --- .../com/cloud/alert/MockAlertManagerImpl.java | 87 +++ .../com/cloud/network/NetworkManagerTest.java | 53 ++ .../NetworkManagerTestComponentLibrary.java | 104 +++ .../resource/MockResourceManagerImpl.java | 607 ++++++++++++++++++ .../com/cloud/user/MockDomainManagerImpl.java | 4 +- ...MockVpcVirtualNetworkApplianceManager.java | 390 +++++++++++ .../test/resources/network-mgr-component.xml | 176 +++++ 7 files changed, 1419 insertions(+), 2 deletions(-) create mode 100644 server/test/com/cloud/alert/MockAlertManagerImpl.java create mode 100644 server/test/com/cloud/network/NetworkManagerTest.java create mode 100644 server/test/com/cloud/network/NetworkManagerTestComponentLibrary.java create mode 100644 server/test/com/cloud/resource/MockResourceManagerImpl.java create mode 100644 server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java create mode 100644 server/test/resources/network-mgr-component.xml diff --git a/server/test/com/cloud/alert/MockAlertManagerImpl.java b/server/test/com/cloud/alert/MockAlertManagerImpl.java new file mode 100644 index 00000000000..3f87193d2f1 --- /dev/null +++ b/server/test/com/cloud/alert/MockAlertManagerImpl.java @@ -0,0 +1,87 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.alert; + +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +@Local(value = {AlertManager.class}) +public class MockAlertManagerImpl implements AlertManager { + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#configure(java.lang.String, java.util.Map) + */ + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#start() + */ + @Override + public boolean start() { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#stop() + */ + @Override + public boolean stop() { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#getName() + */ + @Override + public String getName() { + return "MockAlertManagerImpl"; + } + + /* (non-Javadoc) + * @see com.cloud.alert.AlertManager#clearAlert(short, long, long) + */ + @Override + public void clearAlert(short alertType, long dataCenterId, long podId) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.alert.AlertManager#sendAlert(short, long, java.lang.Long, java.lang.String, java.lang.String) + */ + @Override + public void sendAlert(short alertType, long dataCenterId, Long podId, String subject, String body) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.alert.AlertManager#recalculateCapacity() + */ + @Override + public void recalculateCapacity() { + // TODO Auto-generated method stub + + } + +} diff --git a/server/test/com/cloud/network/NetworkManagerTest.java b/server/test/com/cloud/network/NetworkManagerTest.java new file mode 100644 index 00000000000..017adfee718 --- /dev/null +++ b/server/test/com/cloud/network/NetworkManagerTest.java @@ -0,0 +1,53 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + + +import junit.framework.Assert; + +import org.junit.Test; + +import com.cloud.network.element.DhcpServiceProvider; +import com.cloud.network.element.IpDeployer; +import com.cloud.network.firewall.FirewallManagerImpl; +import com.cloud.network.rules.FirewallManager; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.testcase.ComponentSetup; +import com.cloud.utils.testcase.ComponentTestCase; + +@ComponentSetup(managerName="management-server", setupXml="network-mgr-component.xml") +public class NetworkManagerTest extends ComponentTestCase { + + @Test + public void testInjected() { + NetworkManagerImpl networkMgr = (NetworkManagerImpl)ComponentLocator.getCurrentLocator().getManager(NetworkManager.class); + Assert.assertTrue(networkMgr._ipDeployers.enumeration().hasMoreElements()); + Assert.assertTrue(networkMgr._networkElements.enumeration().hasMoreElements()); + Assert.assertTrue(networkMgr._dhcpProviders.enumeration().hasMoreElements()); + Assert.assertNotNull(networkMgr._networkModel); + + Assert.assertNotNull(networkMgr._ipDeployers.get("VirtualRouter")); + Assert.assertNotNull(networkMgr._dhcpProviders.get("VirtualRouter")); + + Assert.assertTrue(networkMgr._ipDeployers.get("VirtualRouter") instanceof IpDeployer); + Assert.assertTrue(networkMgr._dhcpProviders.get("VirtualRouter") instanceof DhcpServiceProvider); + + + } + +} diff --git a/server/test/com/cloud/network/NetworkManagerTestComponentLibrary.java b/server/test/com/cloud/network/NetworkManagerTestComponentLibrary.java new file mode 100644 index 00000000000..24979e40b66 --- /dev/null +++ b/server/test/com/cloud/network/NetworkManagerTestComponentLibrary.java @@ -0,0 +1,104 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network; + +import com.cloud.agent.MockAgentManagerImpl; +import com.cloud.alert.AlertManagerImpl; +import com.cloud.alert.MockAlertManagerImpl; +import com.cloud.baremetal.ExternalDhcpManagerImpl; +import com.cloud.configuration.ConfigurationManagerImpl; +import com.cloud.configuration.DefaultComponentLibrary; +import com.cloud.network.as.AutoScaleManagerImpl; +import com.cloud.network.firewall.FirewallManagerImpl; +import com.cloud.network.lb.LoadBalancingRulesManagerImpl; +import com.cloud.network.router.VpcVirtualNetworkApplianceManagerImpl; +import com.cloud.network.rules.RulesManagerImpl; +import com.cloud.network.security.SecurityGroupManagerImpl2; +import com.cloud.network.vpc.NetworkACLManagerImpl; +import com.cloud.network.vpc.VpcManagerImpl; +import com.cloud.network.vpn.RemoteAccessVpnManagerImpl; +import com.cloud.network.vpn.Site2SiteVpnManagerImpl; +import com.cloud.projects.MockProjectManagerImpl; +import com.cloud.projects.ProjectManagerImpl; +import com.cloud.resource.MockResourceManagerImpl; +import com.cloud.resource.ResourceManagerImpl; +import com.cloud.resourcelimit.ResourceLimitManagerImpl; +import com.cloud.storage.s3.S3ManagerImpl; +import com.cloud.storage.secondary.SecondaryStorageManagerImpl; +import com.cloud.storage.swift.SwiftManagerImpl; +import com.cloud.tags.TaggedResourceManagerImpl; +import com.cloud.template.TemplateManagerImpl; +import com.cloud.user.AccountManagerImpl; +import com.cloud.user.DomainManagerImpl; +import com.cloud.user.MockAccountManagerImpl; +import com.cloud.user.MockDomainManagerImpl; +import com.cloud.vm.MockVirtualMachineManagerImpl; +import com.cloud.vpc.MockConfigurationManagerImpl; +import com.cloud.vpc.MockResourceLimitManagerImpl; +import com.cloud.vpc.MockVpcManagerImpl; +import com.cloud.vpc.MockVpcVirtualNetworkApplianceManager; + + +public class NetworkManagerTestComponentLibrary extends DefaultComponentLibrary { + + /* (non-Javadoc) + * @see com.cloud.configuration.DefaultComponentLibrary#populateManagers() + */ + @Override + protected void populateManagers() { + addManager("configuration manager", MockConfigurationManagerImpl.class); + addManager("account manager", MockAccountManagerImpl.class); + addManager("domain manager", MockDomainManagerImpl.class); + addManager("resource limit manager", MockResourceLimitManagerImpl.class); + addManager("network service", NetworkServiceImpl.class); + addManager("network manager", NetworkManagerImpl.class); + addManager("network model", NetworkModelImpl.class); + addManager("LoadBalancingRulesManager", LoadBalancingRulesManagerImpl.class); + //addManager("AutoScaleManager", AutoScaleManagerImpl.class); + addManager("RulesManager", RulesManagerImpl.class); + addManager("RemoteAccessVpnManager", RemoteAccessVpnManagerImpl.class); + addManager("FirewallManager", FirewallManagerImpl.class); + addManager("StorageNetworkManager", StorageNetworkManagerImpl.class); + addManager("VPC Manager", MockVpcManagerImpl.class); + addManager("VpcVirtualRouterManager", MockVpcVirtualNetworkApplianceManager.class); + addManager("NetworkACLManager", NetworkACLManagerImpl.class); + addManager("Site2SiteVpnManager", Site2SiteVpnManagerImpl.class); + addManager("Alert Manager", MockAlertManagerImpl.class); + addManager("ProjectManager", MockProjectManagerImpl.class); + //addManager("SwiftManager", SwiftManagerImpl.class); + //addManager("S3Manager", S3ManagerImpl.class); + //addManager("SecondaryStorageManager", SecondaryStorageManagerImpl.class); + //addManager("SecurityGroupManager", SecurityGroupManagerImpl2.class); + addManager("AgentManager", MockAgentManagerImpl.class); + addManager("ExternalLoadBalancerUsageManager", ExternalLoadBalancerUsageManagerImpl.class); + //addManager("TemplateManager", TemplateManagerImpl.class); + //addManager("VirtualMachineManager", MockVirtualMachineManagerImpl.class); + addManager("ResourceManager", MockResourceManagerImpl.class); + addManager("ExternalDhcpManager", ExternalDhcpManagerImpl.class); + + + + + } + + @Override + protected void populateAdapters() { + //no-op + } + +} diff --git a/server/test/com/cloud/resource/MockResourceManagerImpl.java b/server/test/com/cloud/resource/MockResourceManagerImpl.java new file mode 100644 index 00000000000..19356b36756 --- /dev/null +++ b/server/test/com/cloud/resource/MockResourceManagerImpl.java @@ -0,0 +1,607 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.resource; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.agent.api.StartupCommand; +import com.cloud.agent.api.StartupRoutingCommand; +import com.cloud.api.commands.AddClusterCmd; +import com.cloud.api.commands.AddHostCmd; +import com.cloud.api.commands.AddS3Cmd; +import com.cloud.api.commands.AddSecondaryStorageCmd; +import com.cloud.api.commands.AddSwiftCmd; +import com.cloud.api.commands.CancelMaintenanceCmd; +import com.cloud.api.commands.DeleteClusterCmd; +import com.cloud.api.commands.ListS3sCmd; +import com.cloud.api.commands.ListSwiftsCmd; +import com.cloud.api.commands.PrepareForMaintenanceCmd; +import com.cloud.api.commands.ReconnectHostCmd; +import com.cloud.api.commands.UpdateHostCmd; +import com.cloud.api.commands.UpdateHostPasswordCmd; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.HostPodVO; +import com.cloud.dc.PodCluster; +import com.cloud.exception.AgentUnavailableException; +import com.cloud.exception.DiscoveryException; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.ResourceInUseException; +import com.cloud.host.Host; +import com.cloud.host.HostStats; +import com.cloud.host.HostVO; +import com.cloud.host.Status; +import com.cloud.host.Host.Type; +import com.cloud.hypervisor.Hypervisor.HypervisorType; +import com.cloud.org.Cluster; +import com.cloud.resource.ResourceState.Event; +import com.cloud.service.ServiceOfferingVO; +import com.cloud.storage.S3; +import com.cloud.storage.Swift; +import com.cloud.template.VirtualMachineTemplate; +import com.cloud.utils.Pair; +import com.cloud.utils.component.Manager; +import com.cloud.utils.fsm.NoTransitionException; + +@Local(value = {ResourceManager.class}) +public class MockResourceManagerImpl implements ResourceManager, Manager { + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#updateHost(com.cloud.api.commands.UpdateHostCmd) + */ + @Override + public Host updateHost(UpdateHostCmd cmd) throws NoTransitionException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#cancelMaintenance(com.cloud.api.commands.CancelMaintenanceCmd) + */ + @Override + public Host cancelMaintenance(CancelMaintenanceCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#reconnectHost(com.cloud.api.commands.ReconnectHostCmd) + */ + @Override + public Host reconnectHost(ReconnectHostCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#discoverCluster(com.cloud.api.commands.AddClusterCmd) + */ + @Override + public List discoverCluster(AddClusterCmd cmd) throws IllegalArgumentException, + DiscoveryException, ResourceInUseException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#deleteCluster(com.cloud.api.commands.DeleteClusterCmd) + */ + @Override + public boolean deleteCluster(DeleteClusterCmd cmd) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#updateCluster(com.cloud.org.Cluster, java.lang.String, java.lang.String, java.lang.String, java.lang.String) + */ + @Override + public Cluster updateCluster(Cluster cluster, String clusterType, String hypervisor, String allocationState, + String managedstate) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#discoverHosts(com.cloud.api.commands.AddHostCmd) + */ + @Override + public List discoverHosts(AddHostCmd cmd) throws IllegalArgumentException, DiscoveryException, + InvalidParameterValueException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#discoverHosts(com.cloud.api.commands.AddSecondaryStorageCmd) + */ + @Override + public List discoverHosts(AddSecondaryStorageCmd cmd) throws IllegalArgumentException, + DiscoveryException, InvalidParameterValueException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#maintain(com.cloud.api.commands.PrepareForMaintenanceCmd) + */ + @Override + public Host maintain(PrepareForMaintenanceCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#updateHostPassword(com.cloud.api.commands.UpdateHostPasswordCmd) + */ + @Override + public boolean updateHostPassword(UpdateHostPasswordCmd upasscmd) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#getHost(long) + */ + @Override + public Host getHost(long hostId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#getCluster(java.lang.Long) + */ + @Override + public Cluster getCluster(Long clusterId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#discoverSwift(com.cloud.api.commands.AddSwiftCmd) + */ + @Override + public Swift discoverSwift(AddSwiftCmd addSwiftCmd) throws DiscoveryException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#discoverS3(com.cloud.api.commands.AddS3Cmd) + */ + @Override + public S3 discoverS3(AddS3Cmd cmd) throws DiscoveryException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#getSupportedHypervisorTypes(long, boolean, java.lang.Long) + */ + @Override + public List getSupportedHypervisorTypes(long zoneId, boolean forVirtualRouter, Long podId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#listSwifts(com.cloud.api.commands.ListSwiftsCmd) + */ + @Override + public List listSwifts(ListSwiftsCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceService#listS3s(com.cloud.api.commands.ListS3sCmd) + */ + @Override + public List listS3s(ListS3sCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#registerResourceEvent(java.lang.Integer, com.cloud.resource.ResourceListener) + */ + @Override + public void registerResourceEvent(Integer event, ResourceListener listener) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#unregisterResourceEvent(com.cloud.resource.ResourceListener) + */ + @Override + public void unregisterResourceEvent(ResourceListener listener) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#registerResourceStateAdapter(java.lang.String, com.cloud.resource.ResourceStateAdapter) + */ + @Override + public void registerResourceStateAdapter(String name, ResourceStateAdapter adapter) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#unregisterResourceStateAdapter(java.lang.String) + */ + @Override + public void unregisterResourceStateAdapter(String name) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#createHostAndAgent(java.lang.Long, com.cloud.resource.ServerResource, java.util.Map, boolean, java.util.List, boolean) + */ + @Override + public Host createHostAndAgent(Long hostId, ServerResource resource, Map details, boolean old, + List hostTags, boolean forRebalance) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#addHost(long, com.cloud.resource.ServerResource, com.cloud.host.Host.Type, java.util.Map) + */ + @Override + public Host addHost(long zoneId, ServerResource resource, Type hostType, Map hostDetails) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#createHostVOForConnectedAgent(com.cloud.agent.api.StartupCommand[]) + */ + @Override + public HostVO createHostVOForConnectedAgent(StartupCommand[] cmds) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#checkCIDR(com.cloud.dc.HostPodVO, com.cloud.dc.DataCenterVO, java.lang.String, java.lang.String) + */ + @Override + public void checkCIDR(HostPodVO pod, DataCenterVO dc, String serverPrivateIP, String serverPrivateNetmask) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#fillRoutingHostVO(com.cloud.host.HostVO, com.cloud.agent.api.StartupRoutingCommand, com.cloud.hypervisor.Hypervisor.HypervisorType, java.util.Map, java.util.List) + */ + @Override + public HostVO fillRoutingHostVO(HostVO host, StartupRoutingCommand ssCmd, HypervisorType hyType, + Map details, List hostTags) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#deleteRoutingHost(com.cloud.host.HostVO, boolean, boolean) + */ + @Override + public void deleteRoutingHost(HostVO host, boolean isForced, boolean forceDestroyStorage) + throws UnableDeleteHostException { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#executeUserRequest(long, com.cloud.resource.ResourceState.Event) + */ + @Override + public boolean executeUserRequest(long hostId, Event event) throws AgentUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#resourceStateTransitTo(com.cloud.host.Host, com.cloud.resource.ResourceState.Event, long) + */ + @Override + public boolean resourceStateTransitTo(Host host, Event event, long msId) throws NoTransitionException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#umanageHost(long) + */ + @Override + public boolean umanageHost(long hostId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#maintenanceFailed(long) + */ + @Override + public boolean maintenanceFailed(long hostId) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#maintain(long) + */ + @Override + public boolean maintain(long hostId) throws AgentUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#deleteHost(long, boolean, boolean) + */ + @Override + public boolean deleteHost(long hostId, boolean isForced, boolean isForceDeleteStorage) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#findDirectlyConnectedHosts() + */ + @Override + public List findDirectlyConnectedHosts() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllUpAndEnabledHosts(com.cloud.host.Host.Type, java.lang.Long, java.lang.Long, long) + */ + @Override + public List listAllUpAndEnabledHosts(Type type, Long clusterId, Long podId, long dcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllHostsInCluster(long) + */ + @Override + public List listAllHostsInCluster(long clusterId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listHostsInClusterByStatus(long, com.cloud.host.Status) + */ + @Override + public List listHostsInClusterByStatus(long clusterId, Status status) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllUpAndEnabledHostsInOneZoneByType(com.cloud.host.Host.Type, long) + */ + @Override + public List listAllUpAndEnabledHostsInOneZoneByType(Type type, long dcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllHostsInOneZoneByType(com.cloud.host.Host.Type, long) + */ + @Override + public List listAllHostsInOneZoneByType(Type type, long dcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllHostsInAllZonesByType(com.cloud.host.Host.Type) + */ + @Override + public List listAllHostsInAllZonesByType(Type type) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAvailHypervisorInZone(java.lang.Long, java.lang.Long) + */ + @Override + public List listAvailHypervisorInZone(Long hostId, Long zoneId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#findHostByGuid(java.lang.String) + */ + @Override + public HostVO findHostByGuid(String guid) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#findHostByName(java.lang.String) + */ + @Override + public HostVO findHostByName(String name) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listHostsByNameLike(java.lang.String) + */ + @Override + public List listHostsByNameLike(String name) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#findPod(com.cloud.template.VirtualMachineTemplate, com.cloud.service.ServiceOfferingVO, com.cloud.dc.DataCenterVO, long, java.util.Set) + */ + @Override + public Pair findPod(VirtualMachineTemplate template, ServiceOfferingVO offering, DataCenterVO dc, + long accountId, Set avoids) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#getHostStatistics(long) + */ + @Override + public HostStats getHostStatistics(long hostId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#getGuestOSCategoryId(long) + */ + @Override + public Long getGuestOSCategoryId(long hostId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#getHostTags(long) + */ + @Override + public String getHostTags(long hostId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listByDataCenter(long) + */ + @Override + public List listByDataCenter(long dcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllNotInMaintenanceHostsInOneZone(com.cloud.host.Host.Type, java.lang.Long) + */ + @Override + public List listAllNotInMaintenanceHostsInOneZone(Type type, Long dcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#getDefaultHypervisor(long) + */ + @Override + public HypervisorType getDefaultHypervisor(long zoneId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#getAvailableHypervisor(long) + */ + @Override + public HypervisorType getAvailableHypervisor(long zoneId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#getMatchingDiscover(com.cloud.hypervisor.Hypervisor.HypervisorType) + */ + @Override + public Discoverer getMatchingDiscover(HypervisorType hypervisorType) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#findHostByGuid(long, java.lang.String) + */ + @Override + public List findHostByGuid(long dcId, String guid) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.resource.ResourceManager#listAllUpAndEnabledNonHAHosts(com.cloud.host.Host.Type, java.lang.Long, java.lang.Long, long) + */ + @Override + public List listAllUpAndEnabledNonHAHosts(Type type, Long clusterId, Long podId, long dcId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#configure(java.lang.String, java.util.Map) + */ + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#start() + */ + @Override + public boolean start() { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#stop() + */ + @Override + public boolean stop() { + // TODO Auto-generated method stub + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#getName() + */ + @Override + public String getName() { + // TODO Auto-generated method stub + return "MockResourceManagerImpl"; + } + +} diff --git a/server/test/com/cloud/user/MockDomainManagerImpl.java b/server/test/com/cloud/user/MockDomainManagerImpl.java index 4266f3553e5..c5ff30524c4 100644 --- a/server/test/com/cloud/user/MockDomainManagerImpl.java +++ b/server/test/com/cloud/user/MockDomainManagerImpl.java @@ -31,8 +31,8 @@ import com.cloud.exception.PermissionDeniedException; import com.cloud.utils.component.Manager; import com.cloud.utils.Pair; -@Local(value = { DomainManager.class }) -public class MockDomainManagerImpl implements Manager, DomainManager { +@Local(value = { DomainManager.class, DomainService.class }) +public class MockDomainManagerImpl implements Manager, DomainManager, DomainService { @Override public Domain createDomain(String name, Long parentId, String networkDomain) { diff --git a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java new file mode 100644 index 00000000000..8716a2b5991 --- /dev/null +++ b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java @@ -0,0 +1,390 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.vpc; + +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import com.cloud.api.commands.UpgradeRouterCmd; +import com.cloud.deploy.DeployDestination; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.Network; +import com.cloud.network.PublicIpAddress; +import com.cloud.network.RemoteAccessVpn; +import com.cloud.network.Site2SiteVpnConnection; +import com.cloud.network.VpcVirtualNetworkApplianceService; +import com.cloud.network.VpnUser; +import com.cloud.network.router.VirtualRouter; +import com.cloud.network.router.VpcVirtualNetworkApplianceManager; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.StaticNat; +import com.cloud.network.vpc.PrivateGateway; +import com.cloud.network.vpc.StaticRouteProfile; +import com.cloud.network.vpc.Vpc; +import com.cloud.user.Account; +import com.cloud.user.User; +import com.cloud.uservm.UserVm; +import com.cloud.utils.component.Manager; +import com.cloud.vm.DomainRouterVO; +import com.cloud.vm.NicProfile; +import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachineProfile.Param; + +@Local(value = {VpcVirtualNetworkApplianceManager.class, VpcVirtualNetworkApplianceService.class}) +public class MockVpcVirtualNetworkApplianceManager implements VpcVirtualNetworkApplianceManager, + VpcVirtualNetworkApplianceService, Manager { + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#sendSshKeysToHost(java.lang.Long, java.lang.String, java.lang.String) + */ + @Override + public boolean sendSshKeysToHost(Long hostId, String pubKey, String prvKey) { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#savePasswordToRouter(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.VirtualMachineProfile, java.util.List) + */ + @Override + public boolean savePasswordToRouter(Network network, NicProfile nic, VirtualMachineProfile profile, + List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#saveUserDataToRouter(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.VirtualMachineProfile, java.util.List) + */ + @Override + public boolean saveUserDataToRouter(Network network, NicProfile nic, VirtualMachineProfile profile, + List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#deployVirtualRouterInGuestNetwork(com.cloud.network.Network, com.cloud.deploy.DeployDestination, com.cloud.user.Account, java.util.Map, boolean) + */ + @Override + public List deployVirtualRouterInGuestNetwork(Network guestNetwork, DeployDestination dest, + Account owner, Map params, boolean isRedundant) throws InsufficientCapacityException, + ResourceUnavailableException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#startRemoteAccessVpn(com.cloud.network.Network, com.cloud.network.RemoteAccessVpn, java.util.List) + */ + @Override + public boolean startRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List routers) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#deleteRemoteAccessVpn(com.cloud.network.Network, com.cloud.network.RemoteAccessVpn, java.util.List) + */ + @Override + public boolean deleteRemoteAccessVpn(Network network, RemoteAccessVpn vpn, List routers) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#associatePublicIP(com.cloud.network.Network, java.util.List, java.util.List) + */ + @Override + public boolean associatePublicIP(Network network, List ipAddress, + List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#applyFirewallRules(com.cloud.network.Network, java.util.List, java.util.List) + */ + @Override + public boolean applyFirewallRules(Network network, List rules, + List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#getRoutersForNetwork(long) + */ + @Override + public List getRoutersForNetwork(long networkId) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#applyVpnUsers(com.cloud.network.Network, java.util.List, java.util.List) + */ + @Override + public String[] applyVpnUsers(Network network, List users, List routers) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#stop(com.cloud.network.router.VirtualRouter, boolean, com.cloud.user.User, com.cloud.user.Account) + */ + @Override + public VirtualRouter stop(VirtualRouter router, boolean forced, User callingUser, Account callingAccount) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#getDnsBasicZoneUpdate() + */ + @Override + public String getDnsBasicZoneUpdate() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#applyStaticNats(com.cloud.network.Network, java.util.List, java.util.List) + */ + @Override + public boolean applyStaticNats(Network network, List rules, + List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#applyDhcpEntry(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, java.util.List) + */ + @Override + public boolean applyDhcpEntry(Network config, NicProfile nic, VirtualMachineProfile vm, + DeployDestination dest, List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VirtualNetworkApplianceManager#applyUserData(com.cloud.network.Network, com.cloud.vm.NicProfile, com.cloud.vm.VirtualMachineProfile, com.cloud.deploy.DeployDestination, java.util.List) + */ + @Override + public boolean applyUserData(Network config, NicProfile nic, VirtualMachineProfile vm, + DeployDestination dest, List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.VirtualNetworkApplianceService#startRouter(long, boolean) + */ + @Override + public VirtualRouter startRouter(long routerId, boolean reprogramNetwork) throws ConcurrentOperationException, + ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.VirtualNetworkApplianceService#rebootRouter(long, boolean) + */ + @Override + public VirtualRouter rebootRouter(long routerId, boolean reprogramNetwork) throws ConcurrentOperationException, + ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.VirtualNetworkApplianceService#upgradeRouter(com.cloud.api.commands.UpgradeRouterCmd) + */ + @Override + public VirtualRouter upgradeRouter(UpgradeRouterCmd cmd) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.VirtualNetworkApplianceService#stopRouter(long, boolean) + */ + @Override + public VirtualRouter stopRouter(long routerId, boolean forced) throws ResourceUnavailableException, + ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.VirtualNetworkApplianceService#startRouter(long) + */ + @Override + public VirtualRouter startRouter(long id) throws ResourceUnavailableException, InsufficientCapacityException, + ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.VirtualNetworkApplianceService#destroyRouter(long, com.cloud.user.Account, java.lang.Long) + */ + @Override + public VirtualRouter destroyRouter(long routerId, Account caller, Long callerUserId) + throws ResourceUnavailableException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#configure(java.lang.String, java.util.Map) + */ + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + return true; + + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#start() + */ + @Override + public boolean start() { + return true; + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#stop() + */ + @Override + public boolean stop() { + return true; + + } + + /* (non-Javadoc) + * @see com.cloud.utils.component.Manager#getName() + */ + @Override + public String getName() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.VpcVirtualNetworkApplianceService#addVpcRouterToGuestNetwork(com.cloud.network.router.VirtualRouter, com.cloud.network.Network, boolean) + */ + @Override + public boolean addVpcRouterToGuestNetwork(VirtualRouter router, Network network, boolean isRedundant) + throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.VpcVirtualNetworkApplianceService#removeVpcRouterFromGuestNetwork(com.cloud.network.router.VirtualRouter, com.cloud.network.Network, boolean) + */ + @Override + public boolean removeVpcRouterFromGuestNetwork(VirtualRouter router, Network network, boolean isRedundant) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#deployVirtualRouterInVpc(com.cloud.network.vpc.Vpc, com.cloud.deploy.DeployDestination, com.cloud.user.Account, java.util.Map) + */ + @Override + public List deployVirtualRouterInVpc(Vpc vpc, DeployDestination dest, Account owner, + Map params) throws InsufficientCapacityException, ConcurrentOperationException, + ResourceUnavailableException { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#applyNetworkACLs(com.cloud.network.Network, java.util.List, java.util.List) + */ + @Override + public boolean applyNetworkACLs(Network network, List rules, + List routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#setupPrivateGateway(com.cloud.network.vpc.PrivateGateway, com.cloud.network.router.VirtualRouter) + */ + @Override + public boolean setupPrivateGateway(PrivateGateway gateway, VirtualRouter router) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#destroyPrivateGateway(com.cloud.network.vpc.PrivateGateway, com.cloud.network.router.VirtualRouter) + */ + @Override + public boolean destroyPrivateGateway(PrivateGateway gateway, VirtualRouter router) + throws ConcurrentOperationException, ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#applyStaticRoutes(java.util.List, java.util.List) + */ + @Override + public boolean applyStaticRoutes(List routes, List routers) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#startSite2SiteVpn(com.cloud.network.Site2SiteVpnConnection, com.cloud.network.router.VirtualRouter) + */ + @Override + public boolean startSite2SiteVpn(Site2SiteVpnConnection conn, VirtualRouter router) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + + /* (non-Javadoc) + * @see com.cloud.network.router.VpcVirtualNetworkApplianceManager#stopSite2SiteVpn(com.cloud.network.Site2SiteVpnConnection, com.cloud.network.router.VirtualRouter) + */ + @Override + public boolean stopSite2SiteVpn(Site2SiteVpnConnection conn, VirtualRouter router) + throws ResourceUnavailableException { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/server/test/resources/network-mgr-component.xml b/server/test/resources/network-mgr-component.xml new file mode 100644 index 00000000000..cc8b643f2d7 --- /dev/null +++ b/server/test/resources/network-mgr-component.xml @@ -0,0 +1,176 @@ + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + From 1339650c2c98dd88ca4935e3c8cbf9fdd854c3ae Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Tue, 8 Jan 2013 23:52:19 -0800 Subject: [PATCH 17/90] Network-refactor: remove unused members. Makes testing of injection a PIA. Signed-off-by: Chiradeep Vittal --- .../src/com/cloud/network/element/VirtualRouterElement.java | 4 +--- .../com/cloud/network/lb/LoadBalancingRulesManagerImpl.java | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index d35e358c349..124d029be44 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -80,7 +80,6 @@ import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; -import com.cloud.vm.UserVmManager; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.VirtualMachineProfile; @@ -113,8 +112,7 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl ConfigurationManager _configMgr; @Inject RulesManager _rulesMgr; - @Inject - UserVmManager _userVmMgr; + @Inject UserVmDao _userVmDao; @Inject diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 7bb2a2538c2..eb75d0b4cda 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -119,7 +119,6 @@ import com.cloud.service.dao.ServiceOfferingDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.tags.ResourceTagVO; import com.cloud.tags.dao.ResourceTagDao; -import com.cloud.template.TemplateManager; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.DomainService; @@ -197,8 +196,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa DomainService _domainMgr; @Inject ConfigurationManager _configMgr; - @Inject - TemplateManager _templateMgr; + @Inject ExternalLoadBalancerUsageManager _externalLBUsageMgr; @Inject From 728db6c8ca4000b74f4d0e945303c2a586a5b061 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Wed, 9 Jan 2013 12:10:51 -0800 Subject: [PATCH 18/90] Network-refactor: fix bugs in components.xml discovered by unit tests Provide injection tests for NetworkManager and FirewallManager Signed-off-by: Chiradeep Vittal --- client/tomcatconf/components.xml.in | 14 +++- .../element/VpcVirtualRouterElement.java | 2 +- .../com/cloud/network/NetworkManagerTest.java | 8 +++ .../network/firewall/FirewallManagerTest.java | 67 +++++++++++++++++++ .../test/resources/network-mgr-component.xml | 14 +++- 5 files changed, 98 insertions(+), 7 deletions(-) create mode 100644 server/test/com/cloud/network/firewall/FirewallManagerTest.java diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index 48b1e8ae8c4..f678f5d655a 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -161,47 +161,55 @@ under the License. + + + + + + + - + + - + - + diff --git a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java index 1bc6b9c3db2..f923ae1f924 100644 --- a/server/src/com/cloud/network/element/VpcVirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VpcVirtualRouterElement.java @@ -63,7 +63,7 @@ import com.cloud.vm.VirtualMachineProfile; @Local(value = {NetworkElement.class, FirewallServiceProvider.class, DhcpServiceProvider.class, UserDataServiceProvider.class, StaticNatServiceProvider.class, LoadBalancingServiceProvider.class, - PortForwardingServiceProvider.class, IpDeployer.class, + PortForwardingServiceProvider.class, IpDeployer.class, VpcProvider.class, Site2SiteVpnServiceProvider.class, NetworkACLServiceProvider.class}) public class VpcVirtualRouterElement extends VirtualRouterElement implements VpcProvider, Site2SiteVpnServiceProvider, NetworkACLServiceProvider{ private static final Logger s_logger = Logger.getLogger(VpcVirtualRouterElement.class); diff --git a/server/test/com/cloud/network/NetworkManagerTest.java b/server/test/com/cloud/network/NetworkManagerTest.java index 017adfee718..6fdf35f160b 100644 --- a/server/test/com/cloud/network/NetworkManagerTest.java +++ b/server/test/com/cloud/network/NetworkManagerTest.java @@ -20,11 +20,13 @@ package com.cloud.network; import junit.framework.Assert; +import org.apache.log4j.Logger; import org.junit.Test; import com.cloud.network.element.DhcpServiceProvider; import com.cloud.network.element.IpDeployer; import com.cloud.network.firewall.FirewallManagerImpl; +import com.cloud.network.firewall.FirewallManagerTest; import com.cloud.network.rules.FirewallManager; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.testcase.ComponentSetup; @@ -32,6 +34,7 @@ import com.cloud.utils.testcase.ComponentTestCase; @ComponentSetup(managerName="management-server", setupXml="network-mgr-component.xml") public class NetworkManagerTest extends ComponentTestCase { + private static final Logger s_logger = Logger.getLogger(NetworkManagerTest.class); @Test public void testInjected() { @@ -42,11 +45,16 @@ public class NetworkManagerTest extends ComponentTestCase { Assert.assertNotNull(networkMgr._networkModel); Assert.assertNotNull(networkMgr._ipDeployers.get("VirtualRouter")); + Assert.assertNotNull(networkMgr._ipDeployers.get("VpcVirtualRouter")); + Assert.assertNotNull(networkMgr._dhcpProviders.get("VirtualRouter")); + Assert.assertNotNull(networkMgr._dhcpProviders.get("VpcVirtualRouter")); + Assert.assertTrue(networkMgr._ipDeployers.get("VirtualRouter") instanceof IpDeployer); Assert.assertTrue(networkMgr._dhcpProviders.get("VirtualRouter") instanceof DhcpServiceProvider); + s_logger.info("Done testing injection of network manager's network elements"); } diff --git a/server/test/com/cloud/network/firewall/FirewallManagerTest.java b/server/test/com/cloud/network/firewall/FirewallManagerTest.java new file mode 100644 index 00000000000..b17741f0614 --- /dev/null +++ b/server/test/com/cloud/network/firewall/FirewallManagerTest.java @@ -0,0 +1,67 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +package com.cloud.network.firewall; + + +import junit.framework.Assert; + +import org.apache.log4j.Logger; +import org.junit.Test; + +import com.cloud.network.element.FirewallServiceProvider; +import com.cloud.network.element.NetworkACLServiceProvider; +import com.cloud.network.element.PortForwardingServiceProvider; +import com.cloud.network.element.StaticNatServiceProvider; +import com.cloud.network.rules.FirewallManager; +import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.testcase.ComponentSetup; +import com.cloud.utils.testcase.ComponentTestCase; + +@ComponentSetup(managerName="management-server", setupXml="network-mgr-component.xml") +public class FirewallManagerTest extends ComponentTestCase { + private static final Logger s_logger = Logger.getLogger(FirewallManagerTest.class); + + @Test + public void testInjected() { + FirewallManagerImpl firewallMgr = (FirewallManagerImpl)ComponentLocator.getCurrentLocator().getManager(FirewallManager.class); + Assert.assertTrue(firewallMgr._firewallElements.enumeration().hasMoreElements()); + Assert.assertTrue(firewallMgr._pfElements.enumeration().hasMoreElements()); + Assert.assertTrue(firewallMgr._staticNatElements.enumeration().hasMoreElements()); + Assert.assertTrue(firewallMgr._networkAclElements.enumeration().hasMoreElements()); + Assert.assertNotNull(firewallMgr._networkModel); + + Assert.assertNotNull(firewallMgr._firewallElements.get("VirtualRouter")); + Assert.assertNotNull(firewallMgr._firewallElements.get("VpcVirtualRouter")); + Assert.assertNotNull(firewallMgr._pfElements.get("VirtualRouter")); + Assert.assertNotNull(firewallMgr._pfElements.get("VpcVirtualRouter")); + Assert.assertNotNull(firewallMgr._staticNatElements.get("VirtualRouter")); + Assert.assertNotNull(firewallMgr._staticNatElements.get("VpcVirtualRouter")); + Assert.assertNotNull(firewallMgr._networkAclElements.get("VpcVirtualRouter")); + Assert.assertNull(firewallMgr._networkAclElements.get("VirtualRouter")); + + + Assert.assertTrue(firewallMgr._firewallElements.get("VirtualRouter") instanceof FirewallServiceProvider); + Assert.assertTrue(firewallMgr._pfElements.get("VirtualRouter") instanceof PortForwardingServiceProvider); + Assert.assertTrue(firewallMgr._staticNatElements.get("VirtualRouter") instanceof StaticNatServiceProvider); + Assert.assertTrue(firewallMgr._networkAclElements.get("VpcVirtualRouter") instanceof NetworkACLServiceProvider); + + s_logger.info("Done testing injection of service elements into firewall manager"); + + } + +} diff --git a/server/test/resources/network-mgr-component.xml b/server/test/resources/network-mgr-component.xml index cc8b643f2d7..42d3c2ebdb1 100644 --- a/server/test/resources/network-mgr-component.xml +++ b/server/test/resources/network-mgr-component.xml @@ -91,47 +91,55 @@ under the License. + + + + + + + - + + - + - + From dbe3fe2d34e7deb0f6b9fceac32416db2c3917d2 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Wed, 9 Jan 2013 14:14:00 -0800 Subject: [PATCH 19/90] Network-refactor: interaction between firewall manager and network manager changed, verify this works as expected Signed-off-by: Chiradeep Vittal --- .../com/cloud/network/NetworkManagerTest.java | 3 - .../network/firewall/FirewallManagerTest.java | 90 +++++++++++++++++++ 2 files changed, 90 insertions(+), 3 deletions(-) diff --git a/server/test/com/cloud/network/NetworkManagerTest.java b/server/test/com/cloud/network/NetworkManagerTest.java index 6fdf35f160b..c0856d649ff 100644 --- a/server/test/com/cloud/network/NetworkManagerTest.java +++ b/server/test/com/cloud/network/NetworkManagerTest.java @@ -25,9 +25,6 @@ import org.junit.Test; import com.cloud.network.element.DhcpServiceProvider; import com.cloud.network.element.IpDeployer; -import com.cloud.network.firewall.FirewallManagerImpl; -import com.cloud.network.firewall.FirewallManagerTest; -import com.cloud.network.rules.FirewallManager; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.testcase.ComponentSetup; import com.cloud.utils.testcase.ComponentTestCase; diff --git a/server/test/com/cloud/network/firewall/FirewallManagerTest.java b/server/test/com/cloud/network/firewall/FirewallManagerTest.java index b17741f0614..c4470d2512d 100644 --- a/server/test/com/cloud/network/firewall/FirewallManagerTest.java +++ b/server/test/com/cloud/network/firewall/FirewallManagerTest.java @@ -18,17 +18,38 @@ package com.cloud.network.firewall; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyBoolean; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.List; + import junit.framework.Assert; import org.apache.log4j.Logger; import org.junit.Test; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.Network; +import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkRuleApplier; import com.cloud.network.element.FirewallServiceProvider; import com.cloud.network.element.NetworkACLServiceProvider; import com.cloud.network.element.PortForwardingServiceProvider; import com.cloud.network.element.StaticNatServiceProvider; +import com.cloud.network.element.VirtualRouterElement; +import com.cloud.network.element.VpcVirtualRouterElement; import com.cloud.network.rules.FirewallManager; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRule.Purpose; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.utils.component.Adapter; +import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.ComponentLocator.ComponentInfo; import com.cloud.utils.testcase.ComponentSetup; import com.cloud.utils.testcase.ComponentTestCase; @@ -63,5 +84,74 @@ public class FirewallManagerTest extends ComponentTestCase { s_logger.info("Done testing injection of service elements into firewall manager"); } + + @Test + public void testApplyRules() { + List ruleList = new ArrayList(); + FirewallRuleVO rule = + new FirewallRuleVO("rule1", 1, 80, "TCP", 1, 2, 1, + FirewallRule.Purpose.Firewall, null, null, null, null); + ruleList.add(rule); + FirewallManagerImpl firewallMgr = (FirewallManagerImpl)ComponentLocator.getCurrentLocator().getManager(FirewallManager.class); + + NetworkManager netMgr = mock(NetworkManager.class); + firewallMgr._networkMgr = netMgr; + + try { + firewallMgr.applyRules(ruleList, false, false); + verify(netMgr) + .applyRules(any(List.class), + any(FirewallRule.Purpose.class), + any(NetworkRuleApplier.class), + anyBoolean()); + + } catch (ResourceUnavailableException e) { + Assert.fail("Unreachable code"); + } + } + + @Test + public void testApplyFWRules() { + List ruleList = new ArrayList(); + FirewallRuleVO rule = + new FirewallRuleVO("rule1", 1, 80, "TCP", 1, 2, 1, + FirewallRule.Purpose.Firewall, null, null, null, null); + ruleList.add(rule); + FirewallManagerImpl firewallMgr = (FirewallManagerImpl)ComponentLocator.getCurrentLocator().getManager(FirewallManager.class); + VirtualRouterElement virtualRouter = + mock(VirtualRouterElement.class); + VpcVirtualRouterElement vpcVirtualRouter = + mock(VpcVirtualRouterElement.class); + ComponentInfo c1 = + new ComponentInfo("VirtualRouter", + VirtualRouterElement.class, virtualRouter); + ComponentInfo c2 = + new ComponentInfo("VpcVirtualRouter", + VpcVirtualRouterElement.class, vpcVirtualRouter); + List> adapters = + new ArrayList>(); + adapters.add(c1); + adapters.add(c2); + Adapters fwElements = + new Adapters("firewalElements", adapters); + firewallMgr._firewallElements = fwElements; + + try { + when( + virtualRouter.applyFWRules(any(Network.class), any(List.class)) + ).thenReturn(false); + when( + vpcVirtualRouter.applyFWRules(any(Network.class), any(List.class)) + ).thenReturn(true); + //Network network, Purpose purpose, List rules + firewallMgr.applyRules(mock(Network.class), Purpose.Firewall, ruleList); + verify(vpcVirtualRouter).applyFWRules(any(Network.class), any(List.class)); + verify(virtualRouter).applyFWRules(any(Network.class), any(List.class)); + + + } catch (ResourceUnavailableException e) { + Assert.fail("Unreachable code"); + } + } } From 05a85c7cd612190b117878ac0e20bc95c28111fe Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Wed, 9 Jan 2013 15:32:09 -0800 Subject: [PATCH 20/90] Network-refactor: reduce verbosity of test logs. Icky way to do it, but unable to get maven to pick up log4j properties from test/resources Signed-off-by: Chiradeep Vittal --- .../network/firewall/FirewallManagerTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/server/test/com/cloud/network/firewall/FirewallManagerTest.java b/server/test/com/cloud/network/firewall/FirewallManagerTest.java index c4470d2512d..bb46592a7c7 100644 --- a/server/test/com/cloud/network/firewall/FirewallManagerTest.java +++ b/server/test/com/cloud/network/firewall/FirewallManagerTest.java @@ -29,7 +29,9 @@ import java.util.List; import junit.framework.Assert; +import org.apache.log4j.Level; import org.apache.log4j.Logger; +import org.junit.Before; import org.junit.Test; import com.cloud.exception.ResourceUnavailableException; @@ -50,15 +52,31 @@ import com.cloud.utils.component.Adapter; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.ComponentLocator.ComponentInfo; +import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.testcase.ComponentSetup; import com.cloud.utils.testcase.ComponentTestCase; @ComponentSetup(managerName="management-server", setupXml="network-mgr-component.xml") public class FirewallManagerTest extends ComponentTestCase { private static final Logger s_logger = Logger.getLogger(FirewallManagerTest.class); + + @Before + public void setUp() { + Logger componentlogger = Logger.getLogger(ComponentLocator.class); + Logger daoLogger = Logger.getLogger(GenericDaoBase.class); + Logger cloudLogger = Logger.getLogger("com.cloud"); + + componentlogger.setLevel(Level.WARN); + daoLogger.setLevel(Level.ERROR); + cloudLogger.setLevel(Level.ERROR); + s_logger.setLevel(Level.INFO); + super.setUp(); + } + @Test public void testInjected() { + FirewallManagerImpl firewallMgr = (FirewallManagerImpl)ComponentLocator.getCurrentLocator().getManager(FirewallManager.class); Assert.assertTrue(firewallMgr._firewallElements.enumeration().hasMoreElements()); Assert.assertTrue(firewallMgr._pfElements.enumeration().hasMoreElements()); From 745fae93f6d7a704a6095049902c611efd803f1e Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Wed, 9 Jan 2013 17:53:40 -0800 Subject: [PATCH 21/90] Network-refactor: some clean up of the NetworkService interface - remove unused public apis - remove unused members - change visibility of methods to protected if they do not implement a method in the interface Signed-off-by: Chiradeep Vittal --- api/src/com/cloud/network/NetworkService.java | 7 +- .../com/cloud/network/NetworkServiceImpl.java | 68 +++---------------- 2 files changed, 16 insertions(+), 59 deletions(-) diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index 94a08d21cd7..b93be6fcb3d 100755 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -33,6 +33,11 @@ import com.cloud.user.Account; import com.cloud.user.User; import com.cloud.utils.Pair; +/** + * The NetworkService interface is the "public" api to entities that make requests to the orchestration engine + * Such entities are usually the admin and end-user API. + * + */ public interface NetworkService { List getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner); @@ -60,8 +65,6 @@ public interface NetworkService { IpAddress getIp(long id); - boolean isNetworkAvailableInDomain(long networkId, long domainId); - Network updateGuestNetwork(long networkId, String name, String displayText, Account callerAccount, User callerUser, String domainSuffix, Long networkOfferingId, Boolean changeCidr); diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index 1d2db3e5b80..be719c2d924 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -231,18 +231,13 @@ public class NetworkServiceImpl implements NetworkService, Manager { private final HashMap _systemNetworks = new HashMap(5); - String _networkDomain; int _cidrLimit; boolean _allowSubdomainNetworkAccess; private Map _configs; - - - /* Get a list of IPs, classify them by service */ - //@Override - public Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { + protected Map> getIpToServices(List publicIps, boolean rulesRevoked, boolean includingFirewall) { Map> ipToServices = new HashMap>(); if (publicIps != null && !publicIps.isEmpty()) { @@ -333,7 +328,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { return ipToServices; } - public boolean canIpUsedForNonConserveService(PublicIp ip, Service service) { + protected boolean canIpUsedForNonConserveService(PublicIp ip, Service service) { // If it's non-conserve mode, then the new ip should not be used by any other services List ipList = new ArrayList(); ipList.add(ip); @@ -464,7 +459,6 @@ public class NetworkServiceImpl implements NetworkService, Manager { protected IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { Account caller = UserContext.current().getCaller(); - long callerUserId = UserContext.current().getCallerUserId(); // check permissions _accountMgr.checkAccess(caller, null, false, ipOwner); @@ -481,11 +475,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { @DB public boolean configure(final String name, final Map params) throws ConfigurationException { _name = name; - - - _configs = _configDao.getConfiguration("Network", params); - _networkDomain = _configs.get(Config.GuestDomainSuffix.key()); _cidrLimit = NumbersUtil.parseInt(_configs.get(Config.NetworkGuestCidrLimit.key()), 22); @@ -506,13 +496,9 @@ public class NetworkServiceImpl implements NetworkService, Manager { privateGatewayNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(privateGatewayNetworkOffering); _systemNetworks.put(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, privateGatewayNetworkOffering); - - - - _allowSubdomainNetworkAccess = Boolean.valueOf(_configs.get(Config.SubDomainNetworkAccess.key())); - s_logger.info("Network Manager is configured."); + s_logger.info("Network Service is configured."); return true; } @@ -1408,7 +1394,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { - //@Override + protected Map getNetworkOfferingServiceCapabilities(NetworkOffering offering, Service service) { if (!areServicesSupportedByNetworkOffering(offering.getId(), service)) { @@ -1476,12 +1462,12 @@ public class NetworkServiceImpl implements NetworkService, Manager { return false; } - //@Override + protected boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { return (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(networkOfferingId, services)); } - //@Override + protected boolean areServicesSupportedInNetwork(long networkId, Service... services) { return (_ntwkSrvcDao.areServicesSupportedInNetwork(networkId, services)); } @@ -1490,39 +1476,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { - @Override - public boolean isNetworkAvailableInDomain(long networkId, long domainId) { - Long networkDomainId = null; - Network network = getNetwork(networkId); - if (network.getGuestType() != Network.GuestType.Shared) { - s_logger.trace("Network id=" + networkId + " is not shared"); - return false; - } - - NetworkDomainVO networkDomainMap = _networkDomainDao.getDomainNetworkMapByNetworkId(networkId); - if (networkDomainMap == null) { - s_logger.trace("Network id=" + networkId + " is shared, but not domain specific"); - return true; - } else { - networkDomainId = networkDomainMap.getDomainId(); - } - - if (domainId == networkDomainId.longValue()) { - return true; - } - - if (networkDomainMap.subdomainAccess) { - Set parentDomains = _domainMgr.getDomainParentIds(domainId); - - if (parentDomains.contains(domainId)) { - return true; - } - } - - return false; - } - - + private boolean checkForNonStoppedVmInNetwork(long networkId) { List vms = _userVmDao.listByNetworkIdAndStates(networkId, VirtualMachine.State.Starting, @@ -2222,7 +2176,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { } @DB - private void checkIfPhysicalNetworkIsDeletable(Long physicalNetworkId) { + protected void checkIfPhysicalNetworkIsDeletable(Long physicalNetworkId) { List> tablesToCheck = new ArrayList>(); List vnet = new ArrayList(); @@ -2771,7 +2725,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { - @Override //TODO: duplicated in NetworkMgr + @Override //TODO: duplicated in NetworkModel public NetworkVO getExclusiveGuestNetwork(long zoneId) { List networks = _networksDao.listBy(Account.ACCOUNT_ID_SYSTEM, zoneId, GuestType.Shared, TrafficType.Guest); if (networks == null || networks.isEmpty()) { @@ -2821,7 +2775,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { return nsp; } - //@Override + protected boolean isNetworkSystem(Network network) { NetworkOffering no = _networkOfferingDao.findByIdIncludingRemoved(network.getNetworkOfferingId()); if (no.isSystemOnly()) { @@ -2832,7 +2786,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { } - //@Override + private boolean getAllowSubdomainAccessGlobal() { return _allowSubdomainNetworkAccess; } From 1776659fe76bb23003baaa7f3f39a2223cee9fd2 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Wed, 9 Jan 2013 18:35:06 -0800 Subject: [PATCH 22/90] Network-refactor: move validateRule to LB manager since it now has access to LB elements. NetworkServiceImpl does not need a cache of system network offerings Ensure mocks build to new APIs. Signed-off-by: Chiradeep Vittal --- api/src/com/cloud/network/NetworkModel.java | 9 +++-- .../com/cloud/network/NetworkModelImpl.java | 28 ++------------- .../com/cloud/network/NetworkServiceImpl.java | 36 +++++++------------ .../lb/LoadBalancingRulesManagerImpl.java | 19 +++++++++- .../cloud/network/MockNetworkManagerImpl.java | 10 ------ .../cloud/network/MockNetworkModelImpl.java | 9 +---- .../com/cloud/vpc/MockNetworkManagerImpl.java | 12 ------- 7 files changed, 39 insertions(+), 84 deletions(-) diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java index bd3acbefbdc..ed76c6650ba 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -31,7 +31,6 @@ import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.network.element.NetworkElement; import com.cloud.network.element.UserDataServiceProvider; -import com.cloud.network.rules.FirewallRule; import com.cloud.offering.NetworkOffering; import com.cloud.user.Account; import com.cloud.vm.Nic; @@ -39,6 +38,12 @@ import com.cloud.vm.NicProfile; import com.cloud.vm.VirtualMachine; +/** + * The NetworkModel presents a read-only view into the Network data such as L2 networks, + * Nics, PublicIps, NetworkOfferings, traffic labels, physical networks and the like + * The idea is that only the orchestration core should be able to modify the data, while other + * participants in the orchestration can use this interface to query the data. + */ public interface NetworkModel { /** @@ -60,8 +65,6 @@ public interface NetworkModel { String getNextAvailableMacAddressInNetwork(long networkConfigurationId) throws InsufficientAddressCapacityException; - boolean validateRule(FirewallRule rule); - PublicIpAddress getPublicIpAddress(long ipAddressId); List listPodVlans(long podId); diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java index dcd3c25668d..2470989d97d 100644 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -65,11 +65,8 @@ import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; import com.cloud.network.dao.PhysicalNetworkServiceProviderVO; import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; -import com.cloud.network.element.LoadBalancingServiceProvider; import com.cloud.network.element.NetworkElement; import com.cloud.network.element.UserDataServiceProvider; -import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.FirewallRuleVO; import com.cloud.network.rules.dao.PortForwardingRulesDao; @@ -87,9 +84,9 @@ import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.db.DB; import com.cloud.utils.db.JoinBuilder; +import com.cloud.utils.db.JoinBuilder.JoinType; import com.cloud.utils.db.SearchBuilder; import com.cloud.utils.db.SearchCriteria; -import com.cloud.utils.db.JoinBuilder.JoinType; import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; @@ -521,28 +518,7 @@ public class NetworkModelImpl implements NetworkModel, Manager{ return hasFreeIps; } - @Override - public boolean validateRule(FirewallRule rule) { - Network network = _networksDao.findById(rule.getNetworkId()); - Purpose purpose = rule.getPurpose(); - for (NetworkElement ne : _networkElements) { - boolean validated; - switch (purpose) { - case LoadBalancing: - if (!(ne instanceof LoadBalancingServiceProvider)) { - continue; - } - validated = ((LoadBalancingServiceProvider) ne).validateLBRule(network, (LoadBalancingRule) rule); - if (!validated) - return false; - break; - default: - s_logger.debug("Unable to validate network rules for purpose: " + purpose.toString()); - validated = false; - } - } - return true; - } + @Override public Map> getNetworkCapabilities(long networkId) { diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index be719c2d924..dc8f54956de 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -229,8 +229,6 @@ public class NetworkServiceImpl implements NetworkService, Manager { @Inject NetworkModel _networkModel; - private final HashMap _systemNetworks = new HashMap(5); - int _cidrLimit; boolean _allowSubdomainNetworkAccess; @@ -467,10 +465,6 @@ public class NetworkServiceImpl implements NetworkService, Manager { return _networkMgr.allocateIp(ipOwner, isSystem, caller, zone); } - - - - @Override @DB public boolean configure(final String name, final Map params) throws ConfigurationException { @@ -479,23 +473,6 @@ public class NetworkServiceImpl implements NetworkService, Manager { _cidrLimit = NumbersUtil.parseInt(_configs.get(Config.NetworkGuestCidrLimit.key()), 22); - NetworkOfferingVO publicNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPublicNetwork, TrafficType.Public, true); - publicNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(publicNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemPublicNetwork, publicNetworkOffering); - NetworkOfferingVO managementNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemManagementNetwork, TrafficType.Management, false); - managementNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(managementNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemManagementNetwork, managementNetworkOffering); - NetworkOfferingVO controlNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemControlNetwork, TrafficType.Control, false); - controlNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(controlNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemControlNetwork, controlNetworkOffering); - NetworkOfferingVO storageNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemStorageNetwork, TrafficType.Storage, true); - storageNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(storageNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemStorageNetwork, storageNetworkOffering); - NetworkOfferingVO privateGatewayNetworkOffering = new NetworkOfferingVO(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, - GuestType.Isolated); - privateGatewayNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(privateGatewayNetworkOffering); - _systemNetworks.put(NetworkOfferingVO.SystemPrivateGatewayNetworkOffering, privateGatewayNetworkOffering); - _allowSubdomainNetworkAccess = Boolean.valueOf(_configs.get(Config.SubDomainNetworkAccess.key())); s_logger.info("Network Service is configured."); @@ -2844,7 +2821,7 @@ public class NetworkServiceImpl implements NetworkService, Manager { Account owner = _accountMgr.getAccount(networkOwnerId); // Get system network offeirng - NetworkOfferingVO ntwkOff = _systemNetworks.get(NetworkOffering.SystemPrivateGatewayNetworkOffering); + NetworkOfferingVO ntwkOff = findSystemNetworkOffering(NetworkOffering.SystemPrivateGatewayNetworkOffering); // Validate physical network PhysicalNetwork pNtwk = _physicalNetworkDao.findById(physicalNetworkId); @@ -2917,4 +2894,15 @@ public class NetworkServiceImpl implements NetworkService, Manager { return privateNetwork; } + + private NetworkOfferingVO findSystemNetworkOffering(String offeringName) { + List allOfferings = _networkOfferingDao.listSystemNetworkOfferings(); + for (NetworkOfferingVO offer: allOfferings){ + if (offer.getName().equals(offeringName)) { + return offer; + } + } + return null; + } + } diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index eb75d0b4cda..662a2dafdb6 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -95,6 +95,7 @@ import com.cloud.network.dao.LoadBalancerVMMapDao; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkServiceMapDao; import com.cloud.network.element.LoadBalancingServiceProvider; +import com.cloud.network.element.NetworkElement; import com.cloud.network.lb.LoadBalancingRule.LbAutoScalePolicy; import com.cloud.network.lb.LoadBalancingRule.LbAutoScaleVmGroup; import com.cloud.network.lb.LoadBalancingRule.LbAutoScaleVmProfile; @@ -487,7 +488,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa List policyList = new ArrayList(); policyList.add(new LbStickinessPolicy(cmd.getStickinessMethodName(), lbpolicy.getParams())); LoadBalancingRule lbRule = new LoadBalancingRule(loadBalancer, getExistingDestinations(lbpolicy.getId()), policyList); - if (!_networkModel.validateRule(lbRule)) { + if (!validateRule(lbRule)) { throw new InvalidParameterValueException("Failed to create Stickiness policy: Validation Failed " + cmd.getLbRuleId()); } @@ -498,6 +499,22 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa return policy; } + + private boolean validateRule(LoadBalancingRule lbRule) { + Network network = _networkDao.findById(lbRule.getNetworkId()); + Purpose purpose = lbRule.getPurpose(); + if (purpose != Purpose.LoadBalancing) { + s_logger.debug("Unable to validate network rules for purpose: " + purpose.toString()); + return false; + } + for (LoadBalancingServiceProvider ne : _lbProviders) { + boolean validated = ne.validateLBRule(network, lbRule); + if (!validated) + return false; + } + return true; + } + @Override @DB @ActionEvent(eventType = EventTypes.EVENT_LB_STICKINESSPOLICY_CREATE, eventDescription = "Apply Stickinesspolicy to load balancer ", async = true) diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index 0053d4a43b1..cfaa16971a6 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -131,16 +131,6 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - - @Override - public boolean isNetworkAvailableInDomain(long networkId, long domainId) { - // TODO Auto-generated method stub - return false; - } - - - - @Override public boolean configure(String name, Map params) throws ConfigurationException { diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java index e1113a4aee4..fae5ad38ffc 100644 --- a/server/test/com/cloud/network/MockNetworkModelImpl.java +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -118,14 +118,7 @@ public class MockNetworkModelImpl implements NetworkModel, Manager { return null; } - /* (non-Javadoc) - * @see com.cloud.network.NetworkModel#validateRule(com.cloud.network.rules.FirewallRule) - */ - @Override - public boolean validateRule(FirewallRule rule) { - // TODO Auto-generated method stub - return false; - } + /* (non-Javadoc) * @see com.cloud.network.NetworkModel#getPublicIpAddress(long) diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index beb0bd4d20b..1a3cbae46ba 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -273,18 +273,6 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#isNetworkAvailableInDomain(long, long) - */ - @Override - public boolean isNetworkAvailableInDomain(long networkId, long domainId) { - // TODO Auto-generated method stub - return false; - } - - - - /* (non-Javadoc) * @see com.cloud.network.NetworkService#updateGuestNetwork(long, java.lang.String, java.lang.String, com.cloud.user.Account, com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean) From 8d3cbc82d80eb0c4ead6f68377157fd477fe2d76 Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Sat, 12 Jan 2013 14:38:14 +0530 Subject: [PATCH 23/90] marvin: fixes for handling multiple phy. networks zones do not qualify for vlans but phy networks should carry the underlying vlan information. moving the vlan down to physical_network in configGenerator.py. also the sandbox example has been corrected to reflect this change and includes an illustration of using traffic types with labels. Signed-off-by: Prasanna Santhanam Reported-By: Marcus Sorenson --- tools/marvin/marvin/configGenerator.py | 3 +-- tools/marvin/marvin/deployDataCenter.py | 2 +- .../marvin/sandbox/advanced/advanced_env.py | 18 +++++++++++++++--- .../marvin/sandbox/advanced/setup.properties | 16 ++++++++-------- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/tools/marvin/marvin/configGenerator.py b/tools/marvin/marvin/configGenerator.py index d494beb6444..e2a6a24d69f 100644 --- a/tools/marvin/marvin/configGenerator.py +++ b/tools/marvin/marvin/configGenerator.py @@ -65,8 +65,6 @@ class zone(): self.internaldns2 = None self.securitygroupenabled = None self.localstorageenabled = None - ''' Guest Vlan range - only advanced zone''' - self.vlan = None '''default public network, in advanced mode''' self.ipranges = [] self.physical_networks = [] @@ -80,6 +78,7 @@ class traffictype(): self.xen = labeldict['xen'] if 'xen' in labeldict.keys() else None self.kvm = labeldict['kvm'] if 'kvm' in labeldict.keys() else None self.vmware = labeldict['vmware'] if 'vmware' in labeldict.keys() else None + self.simulator = labeldict['simulator'] if 'simulator' in labeldict.keys() else None #{ # 'xen' : 'cloud-xen', # 'kvm' : 'cloud-kvm', diff --git a/tools/marvin/marvin/deployDataCenter.py b/tools/marvin/marvin/deployDataCenter.py index 0d5f3bdc659..7f8c0295ad8 100644 --- a/tools/marvin/marvin/deployDataCenter.py +++ b/tools/marvin/marvin/deployDataCenter.py @@ -289,7 +289,7 @@ class deployDataCenters(): for pnet in zone.physical_networks: phynetwrk = self.createPhysicalNetwork(pnet, zoneId) self.configureProviders(phynetwrk, pnet.providers) - self.updatePhysicalNetwork(phynetwrk.id, "Enabled", vlan=zone.vlan) + self.updatePhysicalNetwork(phynetwrk.id, "Enabled", vlan=pnet.vlan) if zone.networktype == "Basic": listnetworkoffering = listNetworkOfferings.listNetworkOfferingsCmd() diff --git a/tools/marvin/marvin/sandbox/advanced/advanced_env.py b/tools/marvin/marvin/sandbox/advanced/advanced_env.py index 1873f31d50f..db78a84b33b 100644 --- a/tools/marvin/marvin/sandbox/advanced/advanced_env.py +++ b/tools/marvin/marvin/sandbox/advanced/advanced_env.py @@ -52,10 +52,22 @@ def describeResources(config): pn = physical_network() pn.name = "Sandbox-pnet" - pn.traffictypes = [traffictype("Guest"), traffictype("Management"), traffictype("Public")] + pn.vlan = config.get('cloudstack', 'pnet.vlan') + pn.tags = ["cloud-simulator-public"] + pn.traffictypes = [traffictype("Guest"), + traffictype("Management", {"simulator" : "cloud-simulator-mgmt"}), + traffictype("Public", {"simulator":"cloud-simulator-public"})] pn.providers.append(vpcprovider) + + pn2 = physical_network() + pn2.name = "Sandbox-pnet2" + pn2.vlan = config.get('cloudstack', 'pnet2.vlan') + pn2.tags = ["cloud-simulator-guest"] + pn2.traffictypes = [traffictype('Guest', {'simulator': 'cloud-simulator-guest'})] + pn2.providers.append(vpcprovider) z.physical_networks.append(pn) + z.physical_networks.append(pn2) p = pod() p.name = 'POD0' @@ -118,11 +130,11 @@ def describeResources(config): ''''add loggers''' testClientLogger = logger() testClientLogger.name = 'TestClient' - testClientLogger.file = '/var/log/testclient.log' + testClientLogger.file = 'testclient.log' testCaseLogger = logger() testCaseLogger.name = 'TestCase' - testCaseLogger.file = '/var/log/testcase.log' + testCaseLogger.file = 'testcase.log' zs.logger.append(testClientLogger) zs.logger.append(testCaseLogger) diff --git a/tools/marvin/marvin/sandbox/advanced/setup.properties b/tools/marvin/marvin/sandbox/advanced/setup.properties index ba44d5146b6..73eacc938d4 100644 --- a/tools/marvin/marvin/sandbox/advanced/setup.properties +++ b/tools/marvin/marvin/sandbox/advanced/setup.properties @@ -24,10 +24,9 @@ storage.cleanup.interval=300 account.cleanup.interval=600 expunge.workers=3 workers=10 -use.user.concentrated.pod.allocation=false vm.allocation.algorithm=random vm.op.wait.interval=5 -guest.domain.suffix=sandbox.kvm +guest.domain.suffix=sandbox.simulator instance.name=QA direct.agent.load.size=1000 default.page.size=10000 @@ -35,15 +34,16 @@ check.pod.cidrs=true secstorage.allowed.internal.sites=10.147.28.0/24 [environment] dns=10.147.28.6 -mshost=10.147.29.111 +mshost=localhost mshost.user=root mshost.passwd=password -mysql.host=10.147.29.111 +mysql.host=localhost mysql.cloud.user=cloud mysql.cloud.passwd=cloud [cloudstack] #guest VLAN -zone.vlan=675-679 +pnet.vlan=675-679 +pnet2.vlan=800-1000 #management network private.gateway=10.147.29.1 private.pod.startip=10.147.29.150 @@ -56,9 +56,9 @@ public.vlan.startip=10.147.31.150 public.vlan.endip=10.147.31.159 public.netmask=255.255.255.0 #hypervisor host information -hypervisor=XenServer -host=10.147.29.58 +hypervisor=Simulator +host=simulator0 host.password=password #storage pools -primary.pool=nfs://10.147.28.6:/export/home/sandbox/kamakura +primary.pool=nfs://10.147.28.6:/export/home/sandbox/primary secondary.pool=nfs://10.147.28.6:/export/home/sandbox/sstor From 5442df2b5eba253f2dc80e08ff97e3f22047bbae Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Sun, 13 Jan 2013 14:22:56 +0530 Subject: [PATCH 24/90] devcloud-kvm: marvin deployment config generator for devcloud-kvm The devcloud-kvm.py script will take the kvm.properties file to generate an advanced zone configuration with two physical networks with traffic labels for 'guest' and 'public' traffic going on 'eth0' and 'eth1' respectively. To generate config: $ python devcloud-kvm.py -i kvm.properties -o devcloud-kvm-advanced.cfg Signed-off-by: Prasanna Santhanam --- tools/devcloud-kvm/devcloud-kvm-advanced.cfg | 183 +++++++++++++++++++ tools/devcloud-kvm/devcloud-kvm.py | 157 ++++++++++++++++ tools/devcloud-kvm/kvm.properties | 62 +++++++ 3 files changed, 402 insertions(+) create mode 100644 tools/devcloud-kvm/devcloud-kvm-advanced.cfg create mode 100644 tools/devcloud-kvm/devcloud-kvm.py create mode 100644 tools/devcloud-kvm/kvm.properties diff --git a/tools/devcloud-kvm/devcloud-kvm-advanced.cfg b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg new file mode 100644 index 00000000000..b96805ede2a --- /dev/null +++ b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg @@ -0,0 +1,183 @@ +{ + "zones": [ + { + "localstorageenabled": "true", + "name": "Devcloud-KVM", + "guestcidraddress": "10.1.1.0/24", + "dns1": "8.8.8.8", + "physical_networks": [ + { + "name": "eth0", + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + }, + { + "broadcastdomainrange": "ZONE", + "name": "VpcVirtualRouter" + } + ], + "broadcastdomainrange": "Zone", + "vlan": "3900-3919", + "traffictypes": [ + { + "kvm": "kvm-guest", + "typ": "Guest" + }, + { + "typ": "Management" + } + ], + "tags": [ + "devcloud-guest" + ] + }, + { + "name": "eth1", + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + }, + { + "broadcastdomainrange": "ZONE", + "name": "VpcVirtualRouter" + } + ], + "broadcastdomainrange": "Zone", + "vlan": "3920-3939", + "traffictypes": [ + { + "kvm": "kvm-public", + "typ": "Public" + } + ], + "tags": [ + "devcloud-public" + ] + } + ], + "ipranges": [ + { + "startip": "10.0.3.100", + "endip": "10.0.3.199", + "netmask": "255.255.255.0", + "vlan": "31", + "gateway": "10.0.3.2" + } + ], + "networktype": "Advanced", + "pods": [ + { + "endip": "192.168.56.249", + "name": "POD0", + "startip": "192.168.56.200", + "netmask": "255.255.255.0", + "clusters": [ + { + "clustername": "C0", + "hypervisor": "KVM", + "hosts": [ + { + "username": "root", + "url": "http://192.168.56.10", + "password": "password" + } + ], + "clustertype": "CloudManaged", + "primaryStorages": [ + { + "url": "nfs://192.168.56.10/opt/storage/primary", + "name": "PS0" + } + ] + } + ], + "gateway": "192.168.56.1" + } + ], + "internaldns1": "8.8.8.8", + "secondaryStorages": [ + { + "url": "nfs://192.168.56.10/opt/storage/secondary" + } + ] + } + ], + "dbSvr": { + "dbSvr": "127.0.0.1", + "passwd": "cloud", + "db": "cloud", + "port": 3306, + "user": "cloud" + }, + "logger": [ + { + "name": "TestClient", + "file": "testclient.log" + }, + { + "name": "TestCase", + "file": "testcase.log" + } + ], + "globalConfig": [ + { + "name": "storage.cleanup.interval", + "value": "300" + }, + { + "name": "instance.name", + "value": "vm" + }, + { + "name": "workers", + "value": "10" + }, + { + "name": "vm.op.wait.interval", + "value": "5" + }, + { + "name": "account.cleanup.interval", + "value": "600" + }, + { + "name": "guest.domain.suffix", + "value": "devcloud.kvm" + }, + { + "name": "expunge.delay", + "value": "60" + }, + { + "name": "vm.allocation.algorithm", + "value": "random" + }, + { + "name": "expunge.interval", + "value": "60" + }, + { + "name": "expunge.workers", + "value": "3" + }, + { + "name": "secstorage.allowed.internal.sites", + "value": "10.147.28.0/24" + }, + { + "name": "check.pod.cidrs", + "value": "true" + } + ], + "mgtSvr": [ + { + "mgtSvrIp": "127.0.0.1", + "passwd": "password", + "user": "root", + "port": 8096 + } + ] +} \ No newline at end of file diff --git a/tools/devcloud-kvm/devcloud-kvm.py b/tools/devcloud-kvm/devcloud-kvm.py new file mode 100644 index 00000000000..dd551b58552 --- /dev/null +++ b/tools/devcloud-kvm/devcloud-kvm.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +''' +############################################################ +# Experimental state of scripts +# * Need to be reviewed +# * Only a sandbox +############################################################ +''' +import random +import marvin +from ConfigParser import SafeConfigParser +from optparse import OptionParser +from marvin.configGenerator import * + + +def getGlobalSettings(config): + for k, v in dict(config.items('globals')).iteritems(): + cfg = configuration() + cfg.name = k + cfg.value = v + yield cfg + + +def describeDevcloudKvmResources(config): + zs = cloudstackConfiguration() + + z = zone() + z.dns1 = config.get('environment', 'dns') + z.internaldns1 = config.get('environment', 'dns') + z.name = 'Devcloud-%s'%(config.get('cloudstack', 'hypervisor')) + z.networktype = 'Advanced' + z.guestcidraddress = '10.1.1.0/24' + z.localstorageenabled = 'true' + + vpcprovider = provider() + vpcprovider.name = 'VpcVirtualRouter' + + pn = physical_network() + pn.name = "eth0" + pn.vlan = config.get('cloudstack', 'pnet.vlan') + pn.tags = ["devcloud-guest"] + pn.traffictypes = [traffictype("Guest", {"kvm" :"kvm-guest" }), traffictype("Management")] + pn.providers.append(vpcprovider) + + pn2 = physical_network() + pn2.name = "eth1" + pn2.vlan = config.get('cloudstack', 'pnet2.vlan') + pn2.tags = ["devcloud-public"] + pn2.traffictypes = [traffictype("Public", {"kvm" : "kvm-public"})] + pn2.providers.append(vpcprovider) + + z.physical_networks.append(pn) + z.physical_networks.append(pn2) + + p = pod() + p.name = 'POD0' + p.gateway = config.get('cloudstack', 'private.gateway') + p.startip = config.get('cloudstack', 'private.pod.startip') + p.endip = config.get('cloudstack', 'private.pod.endip') + p.netmask = config.get('cloudstack', 'private.netmask') + + v = iprange() + v.gateway = config.get('cloudstack', 'public.gateway') + v.startip = config.get('cloudstack', 'public.vlan.startip') + v.endip = config.get('cloudstack', 'public.vlan.endip') + v.netmask = config.get('cloudstack', 'public.netmask') + v.vlan = config.get('cloudstack', 'public.vlan') + z.ipranges.append(v) + + c = cluster() + c.clustername = 'C0' + c.hypervisor = config.get('cloudstack', 'hypervisor') + c.clustertype = 'CloudManaged' + + h = host() + h.username = 'root' + h.password = config.get('cloudstack', 'host.password') + h.url = 'http://%s'%(config.get('cloudstack', 'host')) + c.hosts.append(h) + + ps = primaryStorage() + ps.name = 'PS0' + ps.url = config.get('cloudstack', 'primary.pool') + c.primaryStorages.append(ps) + + p.clusters.append(c) + z.pods.append(p) + + secondary = secondaryStorage() + secondary.url = config.get('cloudstack', 'secondary.pool') + z.secondaryStorages.append(secondary) + + '''Add zone''' + zs.zones.append(z) + + '''Add mgt server''' + mgt = managementServer() + mgt.mgtSvrIp = config.get('environment', 'mshost') + mgt.user = config.get('environment', 'mshost.user') + mgt.passwd = config.get('environment', 'mshost.passwd') + zs.mgtSvr.append(mgt) + + '''Add a database''' + db = dbServer() + db.dbSvr = config.get('environment', 'mysql.host') + db.user = config.get('environment', 'mysql.cloud.user') + db.passwd = config.get('environment', 'mysql.cloud.passwd') + zs.dbSvr = db + + '''Add some configuration''' + [zs.globalConfig.append(cfg) for cfg in getGlobalSettings(config)] + + ''''add loggers''' + testClientLogger = logger() + testClientLogger.name = 'TestClient' + testClientLogger.file = 'testclient.log' + + testCaseLogger = logger() + testCaseLogger.name = 'TestCase' + testCaseLogger.file = 'testcase.log' + + zs.logger.append(testClientLogger) + zs.logger.append(testCaseLogger) + return zs + + +if __name__ == '__main__': + parser = OptionParser() + parser.add_option('-i', '--input', action='store', default='setup.properties', \ + dest='input', help='file containing environment setup information') + parser.add_option('-o', '--output', action='store', default='./devcloud-kvm-advanced.cfg', \ + dest='output', help='path where environment json will be generated') + + + (opts, args) = parser.parse_args() + + cfg_parser = SafeConfigParser() + cfg_parser.read(opts.input) + + cfg = describeDevcloudKvmResources(cfg_parser) + generate_setup_config(cfg, opts.output) diff --git a/tools/devcloud-kvm/kvm.properties b/tools/devcloud-kvm/kvm.properties new file mode 100644 index 00000000000..79afcd4a8ea --- /dev/null +++ b/tools/devcloud-kvm/kvm.properties @@ -0,0 +1,62 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + + +[globals] +#global settings in cloudstack +expunge.delay=60 +expunge.interval=60 +storage.cleanup.interval=300 +account.cleanup.interval=600 +expunge.workers=3 +workers=10 +vm.allocation.algorithm=random +vm.op.wait.interval=5 +guest.domain.suffix=devcloud.kvm +instance.name=vm +check.pod.cidrs=true +secstorage.allowed.internal.sites=10.147.28.0/24 +[environment] +dns=8.8.8.8 +mshost=127.0.0.1 +mshost.user=root +mshost.passwd=password +mysql.host=127.0.0.1 +mysql.cloud.user=cloud +mysql.cloud.passwd=cloud +[cloudstack] +#guest VLAN +pnet.vlan=3900-3919 +pnet2.vlan=3920-3939 +#management network +private.gateway=192.168.56.1 +private.pod.startip=192.168.56.200 +private.pod.endip=192.168.56.249 +private.netmask=255.255.255.0 +#public network +public.gateway=10.0.3.2 +public.vlan=31 +public.vlan.startip=10.0.3.100 +public.vlan.endip=10.0.3.199 +public.netmask=255.255.255.0 +#hypervisor host information +hypervisor=KVM +host=192.168.56.10 +host.password=password +#storage pools +primary.pool=nfs://192.168.56.10/opt/storage/primary +secondary.pool=nfs://192.168.56.10/opt/storage/secondary From 127867cc999a7c772cdf5108b3e7432f91178cfe Mon Sep 17 00:00:00 2001 From: Noa Resare Date: Sat, 12 Jan 2013 19:07:32 +0000 Subject: [PATCH 25/90] Improved handling of unknown OS, Distribution Introduce UnknownSystemExcpetion to indicate that the system is is unknonwn. Catch said exception in cloud-setup-management, print an error and exit. CLOUDSTACK-966: Improve error reporting when running on unknown OS / version Signed-off-by: Prasanna Santhanam --- client/bindir/cloud-setup-management.in | 10 ++++++++-- python/lib/cloudutils/utilities.py | 6 +++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/client/bindir/cloud-setup-management.in b/client/bindir/cloud-setup-management.in index 469c9614b41..ca1327ae725 100755 --- a/client/bindir/cloud-setup-management.in +++ b/client/bindir/cloud-setup-management.in @@ -16,8 +16,9 @@ # specific language governing permissions and limitations # under the License. +import sys from cloudutils.syscfg import sysConfigFactory -from cloudutils.utilities import initLoging +from cloudutils.utilities import initLoging, UnknownSystemException from cloudutils.cloudException import CloudRuntimeException, CloudInternalException from cloudutils.globalEnv import globalEnv from cloudutils.serviceConfigServer import cloudManagementConfig @@ -35,7 +36,12 @@ if __name__ == '__main__': glbEnv.mode = "Server" print "Starting to configure CloudStack Management Server:" - syscfg = sysConfigFactory.getSysConfigFactory(glbEnv) + try: + syscfg = sysConfigFactory.getSysConfigFactory(glbEnv) + except UnknownSystemException: + print >>sys.stderr, ("Error: CloudStack failed to detect your " + "operating system. Exiting.") + sys.exit(1) try: syscfg.registerService(cloudManagementConfig) syscfg.config() diff --git a/python/lib/cloudutils/utilities.py b/python/lib/cloudutils/utilities.py index adf81fcbd4c..3f5f2a9dc8b 100755 --- a/python/lib/cloudutils/utilities.py +++ b/python/lib/cloudutils/utilities.py @@ -96,6 +96,10 @@ def writeProgressBar(msg, result): output = "[%-6s]\n"%"Failed" sys.stdout.write(output) sys.stdout.flush() + +class UnknownSystemException(Exception): + "This Excption is raised if the current operating enviornment is unknown" + pass class Distribution: def __init__(self): @@ -120,7 +124,7 @@ class Distribution: self.arch = bash("uname -m").getStdout() else: - self.distro = "Unknown" + raise UnknownSystemException def getVersion(self): return self.distro From c06218d32f3e4b20ec86303639af847cb911ec39 Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Mon, 14 Jan 2013 16:49:42 +0530 Subject: [PATCH 26/90] CLOUDSTACK-971:Error Dialog is empty --- ui/scripts/sharedFunctions.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ui/scripts/sharedFunctions.js b/ui/scripts/sharedFunctions.js index eb78ad15da0..51c4fdb5902 100644 --- a/ui/scripts/sharedFunctions.js +++ b/ui/scripts/sharedFunctions.js @@ -208,12 +208,13 @@ function parseXMLHttpResponse(XMLHttpResponse) { var json = JSON.parse(XMLHttpResponse.responseText); if (json != null) { var property; - for(property in json) {} + for(property in json) { var errorObj = json[property]; if(errorObj.errorcode == 401 && errorObj.errortext == "unable to verify user credentials and/or request signature") return _l('label.session.expired'); else return _s(errorObj.errortext); + } } else { return ""; From 0293d3d665ad41ea2e49a01f9c0fd6cf4547a9bf Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Mon, 14 Jan 2013 10:51:39 -0700 Subject: [PATCH 27/90] Summary: Allow passing 'storagetype' to DiskOffering.create in marvin base.py Signed-off-by: Marcus Sorensen 1358185899 -0700 --- tools/marvin/marvin/integration/lib/base.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py index 0daea5dd579..726a628d070 100644 --- a/tools/marvin/marvin/integration/lib/base.py +++ b/tools/marvin/marvin/integration/lib/base.py @@ -1109,6 +1109,9 @@ class DiskOffering: if domainid: cmd.domainid = domainid + if services["storagetype"]: + cmd.storagetype = services["storagetype"] + return DiskOffering(apiclient.createDiskOffering(cmd).__dict__) def delete(self, apiclient): From 9139949d966c45153899b056aa3b19da55e6931f Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Mon, 14 Jan 2013 12:57:12 -0700 Subject: [PATCH 28/90] Summary: Adding devcloud-advanced.cfg marvin config for advanced network testing Signed-off-by: Marcus Sorensen 1358193432 -0700 --- tools/devcloud/devcloud-advanced.cfg | 105 +++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 tools/devcloud/devcloud-advanced.cfg diff --git a/tools/devcloud/devcloud-advanced.cfg b/tools/devcloud/devcloud-advanced.cfg new file mode 100644 index 00000000000..54cdd44f95b --- /dev/null +++ b/tools/devcloud/devcloud-advanced.cfg @@ -0,0 +1,105 @@ +{ + "zones": [ + { + "localstorageenabled": "true", + "name": "testzone", + "guestcidraddress": "10.1.1.0/24", + "dns1": "8.8.8.8", + "physical_networks": [ + { + "broadcastdomainrange": "Zone", + "vlan": "3900-4000", + "name": "eth0", + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + }, + { + "broadcastdomainrange": "ZONE", + "name": "VpcVirtualRouter" + } + ] + }, + { + "broadcastdomainrange": "Zone", + "name": "eth1", + "traffictypes": [ + { + "xen": "Pool-wide network associated with eth1", + "typ": "Public" + } + ], + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + } + ] + } + ], + "ipranges": [ + { + "startip": "10.0.3.100", + "endip": "10.0.3.199", + "netmask": "255.255.255.0", + "vlan": "untagged", + "gateway": "10.0.3.2" + } + ], + "networktype": "Advanced", + "pods": [ + { + "endip": "192.168.56.249", + "name": "testpod", + "startip": "192.168.56.200", + "netmask": "255.255.255.0", + "clusters": [ + { + "clustername": "testcluster", + "hypervisor": "XenServer", + "hosts": [ + { + "username": "root", + "url": "http://192.168.56.10/", + "password": "password" + } + ], + "clustertype": "CloudManaged" + } + ], + "gateway": "192.168.56.1" + } + ], + "internaldns1": "8.8.4.4", + "secondaryStorages": [ + { + "url": "nfs://192.168.56.10:/opt/storage/secondary" + } + ] + } + ], + "dbSvr": { + "dbSvr": "127.0.0.1", + "passwd": "cloud", + "db": "cloud", + "port": 3306, + "user": "cloud" + }, + "logger": [ + { + "name": "TestClient", + "file": "/var/log/testclient.log" + }, + { + "name": "TestCase", + "file": "/var/log/testcase.log" + } + ], + "mgtSvr": [ + { + "mgtSvrIp": "192.168.56.10", + "port": 8096 + } + ] +} From 896e505da6de08e723b339e748064de10d250c8c Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 15:06:46 -0800 Subject: [PATCH 29/90] APIChecker: Make interface generic, pass user and not just role Signed-off-by: Rohit Yadav --- api/src/org/apache/cloudstack/acl/APIChecker.java | 4 ++-- .../acl/StaticRoleBasedAPIAccessChecker.java | 12 +++++++++++- server/src/com/cloud/api/ApiServer.java | 4 +--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/api/src/org/apache/cloudstack/acl/APIChecker.java b/api/src/org/apache/cloudstack/acl/APIChecker.java index b14dfe101ba..9e5c6c61108 100644 --- a/api/src/org/apache/cloudstack/acl/APIChecker.java +++ b/api/src/org/apache/cloudstack/acl/APIChecker.java @@ -17,11 +17,11 @@ package org.apache.cloudstack.acl; import com.cloud.exception.PermissionDeniedException; -import org.apache.cloudstack.acl.RoleType; +import com.cloud.user.User; import com.cloud.utils.component.Adapter; // APIChecker checks the ownership and access control to API requests public interface APIChecker extends Adapter { // Interface for checking access for a role using apiname - boolean checkAccess(RoleType roleType, String apiCommandName) throws PermissionDeniedException; + boolean checkAccess(User user, String apiCommandName) throws PermissionDeniedException; } diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index affd69ed89c..55db2880664 100644 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -18,6 +18,9 @@ package org.apache.cloudstack.acl; import com.cloud.exception.PermissionDeniedException; import com.cloud.server.ManagementServer; +import com.cloud.user.Account; +import com.cloud.user.AccountService; +import com.cloud.user.User; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.PluggableService; @@ -42,6 +45,8 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC private static Map> s_roleBasedApisMap = new HashMap>(); + private static AccountService s_accountService; + protected StaticRoleBasedAPIAccessChecker() { super(); for (RoleType roleType: RoleType.values()) @@ -49,8 +54,10 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC } @Override - public boolean checkAccess(RoleType roleType, String commandName) + public boolean checkAccess(User user, String commandName) throws PermissionDeniedException { + Account account = s_accountService.getAccount(user.getAccountId()); + RoleType roleType = s_accountService.getRoleType(account); boolean isAllowed = s_roleBasedApisMap.get(roleType).contains(commandName); if (!isAllowed) { throw new PermissionDeniedException("The API does not exist or is blacklisted. Role type=" + roleType.toString() + " is not allowed to request the api: " + commandName); @@ -64,6 +71,9 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC // Read command properties files to build the static map per role. ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); + + s_accountService = locator.getManager(AccountService.class); + List services = locator.getAllPluggableServices(); services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 03462e488ef..c8511b2991d 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -785,11 +785,9 @@ public class ApiServer implements HttpRequestHandler { throw new PermissionDeniedException("User is null for role based API access check for command" + commandName); } - Account account = _accountMgr.getAccount(user.getAccountId()); - RoleType roleType = _accountMgr.getRoleType(account); for (APIChecker apiChecker : _apiAccessCheckers) { // Fail the checking if any checker fails to verify - if (!apiChecker.checkAccess(roleType, commandName)) + if (!apiChecker.checkAccess(user, commandName)) return false; } return true; From e97090a9202452a0ecdff2da55181517cb5b2364 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Mon, 14 Jan 2013 17:15:22 -0700 Subject: [PATCH 30/90] Summary: Updated devcloud-advanced.cfg and devcloud-kvm-advanced.cfg Signed-off-by: Marcus Sorensen 1358208922 -0700 --- tools/devcloud-kvm/devcloud-kvm-advanced.cfg | 144 +++++-------------- tools/devcloud/devcloud-advanced.cfg | 10 ++ 2 files changed, 48 insertions(+), 106 deletions(-) diff --git a/tools/devcloud-kvm/devcloud-kvm-advanced.cfg b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg index b96805ede2a..1110863d848 100644 --- a/tools/devcloud-kvm/devcloud-kvm-advanced.cfg +++ b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg @@ -2,12 +2,24 @@ "zones": [ { "localstorageenabled": "true", - "name": "Devcloud-KVM", + "name": "testzone", "guestcidraddress": "10.1.1.0/24", "dns1": "8.8.8.8", "physical_networks": [ { - "name": "eth0", + "broadcastdomainrange": "Zone", + "vlan": "3900-4000", + "name": "eth0", + "traffictypes": [ + { + "kvm": "cloudbr0", + "typ": "Management" + }, + { + "kvm": "cloudbr0", + "typ": "Guest" + } + ], "providers": [ { "broadcastdomainrange": "ZONE", @@ -17,90 +29,62 @@ "broadcastdomainrange": "ZONE", "name": "VpcVirtualRouter" } - ], - "broadcastdomainrange": "Zone", - "vlan": "3900-3919", - "traffictypes": [ - { - "kvm": "kvm-guest", - "typ": "Guest" - }, - { - "typ": "Management" - } - ], - "tags": [ - "devcloud-guest" ] }, { + "broadcastdomainrange": "Zone", "name": "eth1", + "traffictypes": [ + { + "kvm": "cloudbr1", + "typ": "Public" + } + ], "providers": [ { "broadcastdomainrange": "ZONE", "name": "VirtualRouter" - }, - { - "broadcastdomainrange": "ZONE", - "name": "VpcVirtualRouter" } - ], - "broadcastdomainrange": "Zone", - "vlan": "3920-3939", - "traffictypes": [ - { - "kvm": "kvm-public", - "typ": "Public" - } - ], - "tags": [ - "devcloud-public" ] } ], "ipranges": [ { - "startip": "10.0.3.100", - "endip": "10.0.3.199", + "startip": "192.168.100.100", + "endip": "192.168.100.199", "netmask": "255.255.255.0", - "vlan": "31", - "gateway": "10.0.3.2" + "vlan": "untagged", + "gateway": "192.168.100.1" } ], "networktype": "Advanced", "pods": [ { - "endip": "192.168.56.249", - "name": "POD0", - "startip": "192.168.56.200", + "endip": "172.17.10.199", + "name": "testpod", + "startip": "172.17.10.100", "netmask": "255.255.255.0", "clusters": [ { - "clustername": "C0", + "clustername": "testcluster", "hypervisor": "KVM", "hosts": [ { "username": "root", - "url": "http://192.168.56.10", + "url": "http://172.17.10.10/", "password": "password" } ], - "clustertype": "CloudManaged", - "primaryStorages": [ - { - "url": "nfs://192.168.56.10/opt/storage/primary", - "name": "PS0" - } - ] + "clustertype": "CloudManaged" } ], - "gateway": "192.168.56.1" + "gateway": "172.17.10.1" } ], - "internaldns1": "8.8.8.8", + "internaldns1": "8.8.4.4", "secondaryStorages": [ { - "url": "nfs://192.168.56.10/opt/storage/secondary" + "url": "nfs://172.17.10.10:/nfs/secondary" } ] } @@ -115,69 +99,17 @@ "logger": [ { "name": "TestClient", - "file": "testclient.log" + "file": "/var/log/testclient.log" }, { "name": "TestCase", - "file": "testcase.log" - } - ], - "globalConfig": [ - { - "name": "storage.cleanup.interval", - "value": "300" - }, - { - "name": "instance.name", - "value": "vm" - }, - { - "name": "workers", - "value": "10" - }, - { - "name": "vm.op.wait.interval", - "value": "5" - }, - { - "name": "account.cleanup.interval", - "value": "600" - }, - { - "name": "guest.domain.suffix", - "value": "devcloud.kvm" - }, - { - "name": "expunge.delay", - "value": "60" - }, - { - "name": "vm.allocation.algorithm", - "value": "random" - }, - { - "name": "expunge.interval", - "value": "60" - }, - { - "name": "expunge.workers", - "value": "3" - }, - { - "name": "secstorage.allowed.internal.sites", - "value": "10.147.28.0/24" - }, - { - "name": "check.pod.cidrs", - "value": "true" + "file": "/var/log/testcase.log" } ], "mgtSvr": [ { - "mgtSvrIp": "127.0.0.1", - "passwd": "password", - "user": "root", + "mgtSvrIp": "172.17.10.10", "port": 8096 } ] -} \ No newline at end of file +} diff --git a/tools/devcloud/devcloud-advanced.cfg b/tools/devcloud/devcloud-advanced.cfg index 54cdd44f95b..ad4cdda1912 100644 --- a/tools/devcloud/devcloud-advanced.cfg +++ b/tools/devcloud/devcloud-advanced.cfg @@ -10,6 +10,16 @@ "broadcastdomainrange": "Zone", "vlan": "3900-4000", "name": "eth0", + "traffictypes": [ + { + "xen": "Pool-wide network associated with eth0", + "typ": "Management" + }, + { + "xen": "Pool-wide network associated with eth0", + "typ": "Guest" + } + ], "providers": [ { "broadcastdomainrange": "ZONE", From 3aba867e1630cf7071fb97b5f925dced1b5439d6 Mon Sep 17 00:00:00 2001 From: anthony Date: Mon, 14 Jan 2013 18:25:32 -0800 Subject: [PATCH 31/90] only basic network is pod based. it has nothing to do with shared SG enabled netwokr --- .../network/router/VirtualNetworkApplianceManagerImpl.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 1f74c7174e8..492e1dc20b1 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1381,9 +1381,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian assert guestNetwork.getTrafficType() == TrafficType.Guest; // 1) Get deployment plan and find out the list of routers - boolean isPodBased = (dest.getDataCenter().getNetworkType() == NetworkType.Basic || - _networkMgr.areServicesSupportedInNetwork(guestNetwork.getId(), Service.SecurityGroup)) - && guestNetwork.getTrafficType() == TrafficType.Guest; + boolean isPodBased = (dest.getDataCenter().getNetworkType() == NetworkType.Basic); // dest has pod=null, for Basic Zone findOrDeployVRs for all Pods List destinations = new ArrayList(); From 0a1e4b8cf95a3e0041e3f306c4dfad09b3b6216a Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 16:46:12 -0800 Subject: [PATCH 32/90] tomcatconf: Move apiname:mask rules in commands.properties.in, delete others Signed-off-by: Rohit Yadav --- .../cisconexusvsm_commands.properties.in | 25 ------ client/tomcatconf/commands-ext.properties.in | 28 ------- client/tomcatconf/commands.properties.in | 84 +++++++++++++++++++ .../tomcatconf/f5bigip_commands.properties.in | 32 ------- .../junipersrx_commands.properties.in | 30 ------- .../tomcatconf/netapp_commands.properties.in | 33 -------- ...tscalerloadbalancer_commands.properties.in | 26 ------ .../nicira-nvp_commands.properties.in | 29 ------- .../simulator_commands.properties.in | 19 ----- .../virtualrouter_commands.properties.in | 24 ------ 10 files changed, 84 insertions(+), 246 deletions(-) delete mode 100644 client/tomcatconf/cisconexusvsm_commands.properties.in delete mode 100644 client/tomcatconf/commands-ext.properties.in delete mode 100644 client/tomcatconf/f5bigip_commands.properties.in delete mode 100644 client/tomcatconf/junipersrx_commands.properties.in delete mode 100644 client/tomcatconf/netapp_commands.properties.in delete mode 100644 client/tomcatconf/netscalerloadbalancer_commands.properties.in delete mode 100644 client/tomcatconf/nicira-nvp_commands.properties.in delete mode 100644 client/tomcatconf/simulator_commands.properties.in delete mode 100644 client/tomcatconf/virtualrouter_commands.properties.in diff --git a/client/tomcatconf/cisconexusvsm_commands.properties.in b/client/tomcatconf/cisconexusvsm_commands.properties.in deleted file mode 100644 index 0427ba2d212..00000000000 --- a/client/tomcatconf/cisconexusvsm_commands.properties.in +++ /dev/null @@ -1,25 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### Cisco Nexus 1000v Virtual Supervisor Module (VSM) commands -deleteCiscoNexusVSM=1 -enableCiscoNexusVSM=1 -disableCiscoNexusVSM=1 -listCiscoNexusVSMs=1 diff --git a/client/tomcatconf/commands-ext.properties.in b/client/tomcatconf/commands-ext.properties.in deleted file mode 100644 index cd1d0eac066..00000000000 --- a/client/tomcatconf/commands-ext.properties.in +++ /dev/null @@ -1,28 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -#### usage commands -generateUsageRecords=com.cloud.api.commands.GenerateUsageRecordsCmd;1 -listUsageRecords=com.cloud.api.commands.GetUsageRecordsCmd;1 -listUsageTypes=com.cloud.api.commands.ListUsageTypesCmd;1 - -#### traffic monitor commands -addTrafficMonitor=com.cloud.api.commands.AddTrafficMonitorCmd;1 -deleteTrafficMonitor=com.cloud.api.commands.DeleteTrafficMonitorCmd;1 -listTrafficMonitors=com.cloud.api.commands.ListTrafficMonitorsCmd;1 - - diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 3872f2a8783..99cb874a55f 100644 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -424,3 +424,87 @@ resetVpnConnection=15 listVpnCustomerGateways=15 listVpnGateways=15 listVpnConnections=15 + +#### router commands +createVirtualRouterElement=7 +configureVirtualRouterElement=7 +listVirtualRouterElements=7 + +#### usage commands +generateUsageRecords=1 +listUsageRecords=1 +listUsageTypes=1 + +#### traffic monitor commands +addTrafficMonitor=1 +deleteTrafficMonitor=1 +listTrafficMonitors=1 + +#### Cisco Nexus 1000v Virtual Supervisor Module (VSM) commands +deleteCiscoNexusVSM=1 +enableCiscoNexusVSM=1 +disableCiscoNexusVSM=1 +listCiscoNexusVSMs=1 + +#### f5 big ip load balancer commands + +#Deprecated commands +addExternalLoadBalancer=1 +deleteExternalLoadBalancer=1 +listExternalLoadBalancers=1 + +addF5LoadBalancer=1 +configureF5LoadBalancer=1 +deleteF5LoadBalancer=1 +listF5LoadBalancers=1 +listF5LoadBalancerNetworks=1 + +#### juniper srx firewall commands +addExternalFirewall=1 +deleteExternalFirewall=1 +listExternalFirewalls=1 + +addSrxFirewall=1 +deleteSrxFirewall=1 +configureSrxFirewall=1 +listSrxFirewalls=1 +listSrxFirewallNetworks=1 + +####Netapp integration commands +createVolumeOnFiler=15 +destroyVolumeOnFiler=15 +listVolumesOnFiler=15 +createLunOnFiler=15 +destroyLunOnFiler=15 +listLunsOnFiler=15 +associateLun=15 +dissociateLun=15 +createPool=15 +deletePool=15 +modifyPool=15 +listPools=15 + +#### netscaler load balancer commands +addNetscalerLoadBalancer=1 +deleteNetscalerLoadBalancer=1 +configureNetscalerLoadBalancer=1 +listNetscalerLoadBalancers=1 +listNetscalerLoadBalancerNetworks=1 + +#### nicira nvp commands + +addNiciraNvpDevice=1 +deleteNiciraNvpDevice=1 +listNiciraNvpDevices=1 +listNiciraNvpDeviceNetworks=1 + +# Not implemented (yet) +#configureNiciraNvpDevice=1 + +#### host simulator commands + +configureSimulator=1 + +#### api discovery commands + +listApis=15 diff --git a/client/tomcatconf/f5bigip_commands.properties.in b/client/tomcatconf/f5bigip_commands.properties.in deleted file mode 100644 index 8c3cc2a145a..00000000000 --- a/client/tomcatconf/f5bigip_commands.properties.in +++ /dev/null @@ -1,32 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### f5 big ip load balancer commands - -#Deprecated commands -addExternalLoadBalancer=1 -deleteExternalLoadBalancer=1 -listExternalLoadBalancers=1 - -addF5LoadBalancer=1 -configureF5LoadBalancer=1 -deleteF5LoadBalancer=1 -listF5LoadBalancers=1 -listF5LoadBalancerNetworks=1 diff --git a/client/tomcatconf/junipersrx_commands.properties.in b/client/tomcatconf/junipersrx_commands.properties.in deleted file mode 100644 index 2cadc62c57e..00000000000 --- a/client/tomcatconf/junipersrx_commands.properties.in +++ /dev/null @@ -1,30 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### juniper srx firewall commands -addExternalFirewall=1 -deleteExternalFirewall=1 -listExternalFirewalls=1 - -addSrxFirewall=1 -deleteSrxFirewall=1 -configureSrxFirewall=1 -listSrxFirewalls=1 -listSrxFirewallNetworks=1 diff --git a/client/tomcatconf/netapp_commands.properties.in b/client/tomcatconf/netapp_commands.properties.in deleted file mode 100644 index ea17ac0560b..00000000000 --- a/client/tomcatconf/netapp_commands.properties.in +++ /dev/null @@ -1,33 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -####Netapp integration commands -createVolumeOnFiler=15 -destroyVolumeOnFiler=15 -listVolumesOnFiler=15 -createLunOnFiler=15 -destroyLunOnFiler=15 -listLunsOnFiler=15 -associateLun=15 -dissociateLun=15 -createPool=15 -deletePool=15 -modifyPool=15 -listPools=15 diff --git a/client/tomcatconf/netscalerloadbalancer_commands.properties.in b/client/tomcatconf/netscalerloadbalancer_commands.properties.in deleted file mode 100644 index 9eeb8da9987..00000000000 --- a/client/tomcatconf/netscalerloadbalancer_commands.properties.in +++ /dev/null @@ -1,26 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### netscaler load balancer commands -addNetscalerLoadBalancer=1 -deleteNetscalerLoadBalancer=1 -configureNetscalerLoadBalancer=1 -listNetscalerLoadBalancers=1 -listNetscalerLoadBalancerNetworks=1 diff --git a/client/tomcatconf/nicira-nvp_commands.properties.in b/client/tomcatconf/nicira-nvp_commands.properties.in deleted file mode 100644 index 1b2b5253394..00000000000 --- a/client/tomcatconf/nicira-nvp_commands.properties.in +++ /dev/null @@ -1,29 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### nicira nvp commands - -addNiciraNvpDevice=1 -deleteNiciraNvpDevice=1 -listNiciraNvpDevices=1 -listNiciraNvpDeviceNetworks=1 - -# Not implemented (yet) -#configureNiciraNvpDevice=1 diff --git a/client/tomcatconf/simulator_commands.properties.in b/client/tomcatconf/simulator_commands.properties.in deleted file mode 100644 index b7213a28c05..00000000000 --- a/client/tomcatconf/simulator_commands.properties.in +++ /dev/null @@ -1,19 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - - -configureSimulator=1 diff --git a/client/tomcatconf/virtualrouter_commands.properties.in b/client/tomcatconf/virtualrouter_commands.properties.in deleted file mode 100644 index 169496b8f4d..00000000000 --- a/client/tomcatconf/virtualrouter_commands.properties.in +++ /dev/null @@ -1,24 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER -### Please standardize naming conventions to camel-case (even for acronyms). - -#### router commands -createVirtualRouterElement=7 -configureVirtualRouterElement=7 -listVirtualRouterElements=7 From b9c020fa7c80481fa9444dc6affb1beb069a8768 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 18:54:26 -0800 Subject: [PATCH 33/90] APIChecker: Fix interface definition to take in User Signed-off-by: Rohit Yadav --- api/src/org/apache/cloudstack/acl/APIChecker.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api/src/org/apache/cloudstack/acl/APIChecker.java b/api/src/org/apache/cloudstack/acl/APIChecker.java index 9e5c6c61108..0d0dfd1be4e 100644 --- a/api/src/org/apache/cloudstack/acl/APIChecker.java +++ b/api/src/org/apache/cloudstack/acl/APIChecker.java @@ -23,5 +23,8 @@ import com.cloud.utils.component.Adapter; // APIChecker checks the ownership and access control to API requests public interface APIChecker extends Adapter { // Interface for checking access for a role using apiname + // If true, apiChecker has checked the operation + // If false, apiChecker is unable to handle the operation or not implemented + // On exception, checkAccess failed don't allow boolean checkAccess(User user, String apiCommandName) throws PermissionDeniedException; } From 0a31945ee589e2db8886fd8a01bdfaf91e6cfd26 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 18:54:58 -0800 Subject: [PATCH 34/90] PluggableService: Fix interface to return list of cmd classes Signed-off-by: Rohit Yadav --- utils/src/com/cloud/utils/component/PluggableService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/src/com/cloud/utils/component/PluggableService.java b/utils/src/com/cloud/utils/component/PluggableService.java index f6f72a904d0..5e0e4dfff16 100644 --- a/utils/src/com/cloud/utils/component/PluggableService.java +++ b/utils/src/com/cloud/utils/component/PluggableService.java @@ -16,11 +16,12 @@ // under the License. package com.cloud.utils.component; +import java.util.List; import java.util.Map; // This interface defines methods for pluggable code within the Cloud Stack. public interface PluggableService { // The config command properties filenames that lists allowed API commands // and role masks supported by this pluggable service - Map getProperties(); + List> getCommands(); } From 8f27c711e58e447409fb1b496dfeab9cf4cd7d63 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 18:56:02 -0800 Subject: [PATCH 35/90] ApiServer: Process through chain of api access checker, on failure it will throw exception Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index c8511b2991d..4d60215b276 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -786,9 +786,7 @@ public class ApiServer implements HttpRequestHandler { } for (APIChecker apiChecker : _apiAccessCheckers) { - // Fail the checking if any checker fails to verify - if (!apiChecker.checkAccess(user, commandName)) - return false; + apiChecker.checkAccess(user, commandName); } return true; } From c318561d6c69a2a7ac3aa7dd6df99f12637ddb27 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 18:57:22 -0800 Subject: [PATCH 36/90] ApiDiscovery: Get rid of redundant code, use apichecker to generate role based maps Signed-off-by: Rohit Yadav --- .../command/user/discovery/ListApisCmd.java | 10 +- .../discovery/ApiDiscoveryService.java | 4 +- .../discovery/ApiDiscoveryServiceImpl.java | 116 ++++++++---------- 3 files changed, 61 insertions(+), 69 deletions(-) diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java index ed3e1751027..132416bac05 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java @@ -16,7 +16,10 @@ // under the License. package org.apache.cloudstack.api.command.user.discovery; +import com.cloud.user.AccountService; +import com.cloud.user.User; import com.cloud.user.UserContext; +import com.cloud.utils.component.Inject; import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; @@ -39,14 +42,17 @@ public class ListApisCmd extends BaseCmd { @PlugService ApiDiscoveryService _apiDiscoveryService; + @Inject + private AccountService _accountService; + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="API name") private String name; @Override public void execute() throws ServerApiException { if (_apiDiscoveryService != null) { - RoleType roleType = _accountService.getRoleType(UserContext.current().getCaller()); - ListResponse response = (ListResponse) _apiDiscoveryService.listApis(roleType, name); + User user = _accountService.getActiveUser(UserContext.current().getCallerUserId()); + ListResponse response = (ListResponse) _apiDiscoveryService.listApis(user, name); if (response == null) { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Api Discovery plugin was unable to find an api by that name or process any apis"); } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java index 611493bfc08..6458c5619e8 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryService.java @@ -16,11 +16,11 @@ // under the License. package org.apache.cloudstack.discovery; +import com.cloud.user.User; import com.cloud.utils.component.PluggableService; -import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.response.ListResponse; public interface ApiDiscoveryService extends PluggableService { - ListResponse listApis(RoleType roleType, String apiName); + ListResponse listApis(User user, String apiName); } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java index 5f84486ae49..7e2ed17ecdc 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@ -18,11 +18,15 @@ package org.apache.cloudstack.discovery; import com.cloud.serializer.Param; import com.cloud.server.ManagementServer; +import com.cloud.user.User; import com.cloud.utils.ReflectUtil; import com.cloud.utils.StringUtils; +import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; +import com.cloud.utils.component.Inject; import com.cloud.utils.component.PluggableService; import com.google.gson.annotations.SerializedName; +import org.apache.cloudstack.acl.APIChecker; import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.BaseCmd; @@ -30,6 +34,7 @@ import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.command.user.discovery.ListApisCmd; import org.apache.cloudstack.api.response.ApiDiscoveryResponse; import org.apache.cloudstack.api.response.ApiParameterResponse; import org.apache.cloudstack.api.response.ApiResponseResponse; @@ -49,57 +54,31 @@ import java.util.Set; public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { private static final Logger s_logger = Logger.getLogger(ApiDiscoveryServiceImpl.class); - private static Map> _roleTypeDiscoveryResponseListMap; + @Inject(adapter = APIChecker.class) + protected Adapters _apiAccessCheckers; - private static Map _apiNameDiscoveryResponseMap = - new HashMap(); - - private static Map> _apiNameRoleTypeListMap = null; + private static Map _apiNameDiscoveryResponseMap = null; protected ApiDiscoveryServiceImpl() { super(); - if (_roleTypeDiscoveryResponseListMap == null) { + if (_apiNameDiscoveryResponseMap == null) { long startTime = System.nanoTime(); - _roleTypeDiscoveryResponseListMap = new HashMap>(); - for (RoleType roleType: RoleType.values()) - _roleTypeDiscoveryResponseListMap.put(roleType, new ArrayList()); + _apiNameDiscoveryResponseMap = new HashMap(); cacheResponseMap(); long endTime = System.nanoTime(); s_logger.info("Api Discovery Service: Annotation, docstrings, api relation graph processed in " + (endTime - startTime) / 1000000.0 + " ms"); } } - private Map> getApiNameRoleTypeListMap() { - Map> apiNameRoleTypeMap = new HashMap>(); - ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - List services = locator.getAllPluggableServices(); - services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); - for (PluggableService service : services) { - for (Map.Entry entry: service.getProperties().entrySet()) { - String apiName = entry.getKey(); - String roleMask = entry.getValue(); - try { - short cmdPermissions = Short.parseShort(roleMask); - if (!apiNameRoleTypeMap.containsKey(apiName)) - apiNameRoleTypeMap.put(apiName, new ArrayList()); - for (RoleType roleType: RoleType.values()) { - if ((cmdPermissions & roleType.getValue()) != 0) - apiNameRoleTypeMap.get(apiName).add(roleType); - } - } catch (NumberFormatException nfe) { - } - } - } - return apiNameRoleTypeMap; - } - private void cacheResponseMap() { Set> cmdClasses = ReflectUtil.getClassesWithAnnotation(APICommand.class, new String[]{"org.apache.cloudstack.api", "com.cloud.api"}); + //TODO: Fix and use PluggableService to get the classes + Map> responseApiNameListMap = new HashMap>(); - for(Class cmdClass: cmdClasses) { + for (Class cmdClass : cmdClasses) { APICommand apiCmdAnnotation = cmdClass.getAnnotation(APICommand.class); if (apiCmdAnnotation == null) apiCmdAnnotation = cmdClass.getSuperclass().getAnnotation(APICommand.class); @@ -123,9 +102,9 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { response.setRelated(responseName); Field[] responseFields = apiCmdAnnotation.responseObject().getDeclaredFields(); - for(Field responseField: responseFields) { + for (Field responseField : responseFields) { SerializedName serializedName = responseField.getAnnotation(SerializedName.class); - if(serializedName != null) { + if (serializedName != null) { ApiResponseResponse responseResponse = new ApiResponseResponse(); responseResponse.setName(serializedName.value()); Param param = responseField.getAnnotation(Param.class); @@ -137,14 +116,14 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { } Field[] fields = ReflectUtil.getAllFieldsForClass(cmdClass, - new Class[] {BaseCmd.class, BaseAsyncCmd.class, BaseAsyncCreateCmd.class}); + new Class[]{BaseCmd.class, BaseAsyncCmd.class, BaseAsyncCreateCmd.class}); boolean isAsync = ReflectUtil.isCmdClassAsync(cmdClass, - new Class[] {BaseAsyncCmd.class, BaseAsyncCreateCmd.class}); + new Class[]{BaseAsyncCmd.class, BaseAsyncCreateCmd.class}); response.setAsync(isAsync); - for(Field field: fields) { + for (Field field : fields) { Parameter parameterAnnotation = field.getAnnotation(Parameter.class); if (parameterAnnotation != null && parameterAnnotation.expose() @@ -166,10 +145,10 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { _apiNameDiscoveryResponseMap.put(apiName, response); } - for (String apiName: _apiNameDiscoveryResponseMap.keySet()) { + for (String apiName : _apiNameDiscoveryResponseMap.keySet()) { ApiDiscoveryResponse response = _apiNameDiscoveryResponseMap.get(apiName); Set processedParams = new HashSet(); - for (ApiParameterResponse param: response.getParams()) { + for (ApiParameterResponse param : response.getParams()) { if (responseApiNameListMap.containsKey(param.getRelated())) { List relatedApis = responseApiNameListMap.get(param.getRelated()); param.setRelated(StringUtils.join(relatedApis, ",")); @@ -192,41 +171,48 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { } @Override - public ListResponse listApis(RoleType roleType, String name) { - // Creates roles based response list cache the first time listApis is called - // Due to how adapters work, this cannot be done when mgmt loads - if (_apiNameRoleTypeListMap == null) { - long startTime = System.nanoTime(); - _apiNameRoleTypeListMap = getApiNameRoleTypeListMap(); - for (Map.Entry> entry: _apiNameRoleTypeListMap.entrySet()) { - String apiName = entry.getKey(); - for (RoleType roleTypeInList: entry.getValue()) { - _roleTypeDiscoveryResponseListMap.get(roleTypeInList).add( - _apiNameDiscoveryResponseMap.get(apiName)); - } - } - long endTime = System.nanoTime(); - s_logger.info("Api Discovery Service: List apis cached in " + (endTime - startTime) / 1000000.0 + " ms"); - } + public ListResponse listApis(User user, String name) { ListResponse response = new ListResponse(); + List responseList = new ArrayList(); + + if (user == null) + return null; + if (name != null) { if (!_apiNameDiscoveryResponseMap.containsKey(name)) return null; - List singleResponse = new ArrayList(); - singleResponse.add(_apiNameDiscoveryResponseMap.get(name)); - response.setResponses(singleResponse); + for (APIChecker apiChecker : _apiAccessCheckers) { + try { + apiChecker.checkAccess(user, name); + } catch (Exception ex) { + return null; + } + } + responseList.add(_apiNameDiscoveryResponseMap.get(name)); } else { - response.setResponses(_roleTypeDiscoveryResponseListMap.get(roleType)); + for (String apiName : _apiNameDiscoveryResponseMap.keySet()) { + boolean isAllowed = true; + for (APIChecker apiChecker : _apiAccessCheckers) { + try { + apiChecker.checkAccess(user, name); + } catch (Exception ex) { + isAllowed = false; + } + } + if (isAllowed) + responseList.add(_apiNameDiscoveryResponseMap.get(apiName)); + } } + response.setResponses(responseList); return response; } @Override - public Map getProperties() { - Map apiDiscoveryPropertyMap = new HashMap(); - apiDiscoveryPropertyMap.put("listApis", "15"); - return apiDiscoveryPropertyMap; + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(ListApisCmd.class); + return cmdList; } } From 3ec985f46f7f251e5fb47cc3f4aa89e57f349454 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 18:58:23 -0800 Subject: [PATCH 37/90] StaticRoleBased: commands.properties is actually cfg for this plugin Signed-off-by: Rohit Yadav --- .../acl/StaticRoleBasedAPIAccessChecker.java | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java index 55db2880664..16357846cba 100644 --- a/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java +++ b/plugins/acl/static-role-based/src/org/apache/cloudstack/acl/StaticRoleBasedAPIAccessChecker.java @@ -21,15 +21,14 @@ import com.cloud.server.ManagementServer; import com.cloud.user.Account; import com.cloud.user.AccountService; import com.cloud.user.User; +import com.cloud.utils.PropertiesUtil; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.PluggableService; import javax.ejb.Local; import javax.naming.ConfigurationException; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; @@ -37,7 +36,7 @@ import org.apache.log4j.Logger; // This is the default API access checker that grab's the user's account // based on the account type, access is granted -@Local(value=APIChecker.class) +@Local(value = APIChecker.class) public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIChecker { protected static final Logger s_logger = Logger.getLogger(StaticRoleBasedAPIAccessChecker.class); @@ -49,7 +48,7 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC protected StaticRoleBasedAPIAccessChecker() { super(); - for (RoleType roleType: RoleType.values()) + for (RoleType roleType : RoleType.values()) s_roleBasedApisMap.put(roleType, new HashSet()); } @@ -57,6 +56,10 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC public boolean checkAccess(User user, String commandName) throws PermissionDeniedException { Account account = s_accountService.getAccount(user.getAccountId()); + if (account == null) { + throw new PermissionDeniedException("The account id=" + user.getAccountId() + "for user id=" + user.getId() + "is null"); + } + RoleType roleType = s_accountService.getRoleType(account); boolean isAllowed = s_roleBasedApisMap.get(roleType).contains(commandName); if (!isAllowed) { @@ -71,32 +74,26 @@ public class StaticRoleBasedAPIAccessChecker extends AdapterBase implements APIC // Read command properties files to build the static map per role. ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); - s_accountService = locator.getManager(AccountService.class); - List services = locator.getAllPluggableServices(); - services.add((PluggableService) ComponentLocator.getComponent(ManagementServer.Name)); + processMapping(PropertiesUtil.processConfigFile(new String[] + {"commands.properties"})); - for (PluggableService service : services) { - processConfigFiles(service.getProperties(), service.getClass().toString()); - s_logger.info("Processed role based acl for: " + service.toString()); - } return true; } - private void processConfigFiles(Map configMap, String service) { - for (Map.Entry entry: configMap.entrySet()) { + private void processMapping(Map configMap) { + for (Map.Entry entry : configMap.entrySet()) { String apiName = entry.getKey(); String roleMask = entry.getValue(); try { short cmdPermissions = Short.parseShort(roleMask); - for (RoleType roleType: RoleType.values()) { + for (RoleType roleType : RoleType.values()) { if ((cmdPermissions & roleType.getValue()) != 0) s_roleBasedApisMap.get(roleType).add(apiName); } } catch (NumberFormatException nfe) { - s_logger.info("Malformed getProperties() value for service: " + service - + " for entry: " + entry.toString()); + s_logger.info("Malformed key=value pair for entry: " + entry.toString()); } } } From bca2c928e87ce81f54dccb918564714189b7d46e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 18:59:01 -0800 Subject: [PATCH 38/90] PluggableService: Fix interface definition Signed-off-by: Rohit Yadav --- .../server/ManagementServerSimulatorImpl.java | 11 ++++++----- .../network/element/CiscoNexusVSMElement.java | 11 ++++++++--- .../element/F5ExternalLoadBalancerElement.java | 15 ++++++++++++--- .../JuniperSRXExternalFirewallElement.java | 14 +++++++++++--- .../network/element/MidokuraMidonetElement.java | 9 ++------- .../cloud/network/element/NetscalerElement.java | 12 +++++++++--- .../cloud/network/element/NiciraNvpElement.java | 10 +++++++--- .../network/element/VirtualRouterElement.java | 10 +++++++--- .../com/cloud/server/ManagementServerExtImpl.java | 6 +++--- .../com/cloud/server/ManagementServerImpl.java | 6 +++--- 10 files changed, 68 insertions(+), 36 deletions(-) diff --git a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java index 44ab26a020a..c639a556cb7 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java +++ b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java @@ -17,16 +17,17 @@ package com.cloud.server; +import com.cloud.api.commands.ConfigureSimulator; import com.cloud.utils.PropertiesUtil; +import java.util.List; import java.util.Map; public class ManagementServerSimulatorImpl extends ManagementServerExtImpl { @Override - public Map getProperties() { - Map apiNameRoleMaskMapping = super.getProperties(); - apiNameRoleMaskMapping.putAll(PropertiesUtil.processConfigFile(new String[] - {"commands-simulator.properties"})); - return apiNameRoleMaskMapping; + public List> getCommands() { + List> cmdList = super.getCommands(); + cmdList.add(ConfigureSimulator.class); + return cmdList; } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java index 2cf87877859..68388a6fb18 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java +++ b/plugins/hypervisors/vmware/src/com/cloud/network/element/CiscoNexusVSMElement.java @@ -17,6 +17,7 @@ package com.cloud.network.element; +import java.lang.Class; import java.lang.String; import java.util.List; import java.util.Map; @@ -239,8 +240,12 @@ public class CiscoNexusVSMElement extends CiscoNexusVSMDeviceManagerImpl impleme } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "cisconexusvsm_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(ListCiscoNexusVSMsCmd.class); + cmdList.add(EnableCiscoNexusVSMCmd.class); + cmdList.add(DisableCiscoNexusVSMCmd.class); + cmdList.add(DeleteCiscoNexusVSMCmd.class); + return cmdList; } } diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index 438498ff38c..b9739ec21df 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.network.element; +import java.lang.Class; import java.lang.String; import java.util.ArrayList; import java.util.HashMap; @@ -262,9 +263,17 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "f5bigip_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(AddExternalLoadBalancerCmd.class); + cmdList.add(AddF5LoadBalancerCmd.class); + cmdList.add(ConfigureF5LoadBalancerCmd.class); + cmdList.add(DeleteExternalLoadBalancerCmd.class); + cmdList.add(DeleteF5LoadBalancerCmd.class); + cmdList.add(ListExternalLoadBalancersCmd.class); + cmdList.add(ListF5LoadBalancerNetworksCmd.class); + cmdList.add(ListF5LoadBalancersCmd.class); + return cmdList; } @Override diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 55722ae23ab..6e9d32daa99 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -404,9 +404,17 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "junipersrx_commands.properties"}); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(AddExternalFirewallCmd.class); + cmdList.add(AddSrxFirewallCmd.class); + cmdList.add(ConfigureSrxFirewallCmd.class); + cmdList.add(DeleteExternalFirewallCmd.class); + cmdList.add(DeleteSrxFirewallCmd.class); + cmdList.add(ListExternalFirewallsCmd.class); + cmdList.add(ListSrxFirewallNetworksCmd.class); + cmdList.add(ListSrxFirewallsCmd.class); + return cmdList; } @Override diff --git a/plugins/network-elements/midokura-midonet/src/com/cloud/network/element/MidokuraMidonetElement.java b/plugins/network-elements/midokura-midonet/src/com/cloud/network/element/MidokuraMidonetElement.java index 56734669020..a45c5c0a47c 100644 --- a/plugins/network-elements/midokura-midonet/src/com/cloud/network/element/MidokuraMidonetElement.java +++ b/plugins/network-elements/midokura-midonet/src/com/cloud/network/element/MidokuraMidonetElement.java @@ -38,15 +38,10 @@ import com.cloud.vm.VirtualMachineProfile; import org.apache.log4j.Logger; import javax.ejb.Local; +import java.lang.Class; import java.util.Map; import java.util.Set; -/** - * User: tomoe - * Date: 8/8/12 - * Time: 1:38 PM - */ - @Local(value = NetworkElement.class) public class MidokuraMidonetElement extends AdapterBase implements ConnectivityProvider, PluggableService { private static final Logger s_logger = Logger.getLogger(MidokuraMidonetElement.class); @@ -126,7 +121,7 @@ public class MidokuraMidonetElement extends AdapterBase implements ConnectivityP } @Override - public String getPropertiesFile() { + public List> getCommands() { // TODO: implement this. return null; } diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index ac1619ef1f8..a1782107e19 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.network.element; +import java.lang.Class; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; @@ -465,9 +466,14 @@ StaticNatServiceProvider { } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "netscalerloadbalancer_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(AddNetscalerLoadBalancerCmd.class); + cmdList.add(ConfigureNetscalerLoadBalancerCmd.class); + cmdList.add(DeleteNetscalerLoadBalancerCmd.class); + cmdList.add(ListNetscalerLoadBalancerNetworksCmd.class); + cmdList.add(ListNetscalerLoadBalancersCmd.class); + return cmdList; } @Override diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java index 22fab500fdb..6bcaeeeb235 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/element/NiciraNvpElement.java @@ -541,9 +541,13 @@ public class NiciraNvpElement extends AdapterBase implements } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "nicira-nvp_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(AddNiciraNvpDeviceCmd.class); + cmdList.add(DeleteNiciraNvpDeviceCmd.class); + cmdList.add(ListNiciraNvpDeviceNetworksCmd.class); + cmdList.add(ListNiciraNvpDevicesCmd.class); + return cmdList; } @Override diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 823b74f269b..02a239e72d9 100755 --- a/server/src/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/com/cloud/network/element/VirtualRouterElement.java @@ -26,6 +26,7 @@ import javax.ejb.Local; import com.cloud.utils.PropertiesUtil; import org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd; +import org.apache.cloudstack.api.command.admin.router.CreateVirtualRouterElementCmd; import org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd; import org.apache.log4j.Logger; @@ -681,9 +682,12 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "virtualrouter_commands.properties" }); + public List> getCommands() { + List> cmdList = new ArrayList>(); + cmdList.add(CreateVirtualRouterElementCmd.class); + cmdList.add(ConfigureVirtualRouterElementCmd.class); + cmdList.add(ListVirtualRouterElementsCmd.class); + return cmdList; } @Override diff --git a/server/src/com/cloud/server/ManagementServerExtImpl.java b/server/src/com/cloud/server/ManagementServerExtImpl.java index 8a59d2f9c1c..c8c188b38ad 100644 --- a/server/src/com/cloud/server/ManagementServerExtImpl.java +++ b/server/src/com/cloud/server/ManagementServerExtImpl.java @@ -207,9 +207,9 @@ public class ManagementServerExtImpl extends ManagementServerImpl implements Man } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "commands.properties", "commands-ext.properties" }); + public List> getCommands() { + //TODO: Add api cmd classes + return null; } private Date computeAdjustedTime(Date initialDate, TimeZone targetTZ, boolean adjustToDayStart) { diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 79ad759dd0b..bf105506b23 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -2298,9 +2298,9 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public Map getProperties() { - return PropertiesUtil.processConfigFile(new String[] - { "commands.properties" }); + public List> getCommands() { + //TODO: Add cmd classes + return null; } protected class EventPurgeTask implements Runnable { From c5984278ca95b24e8f0ff9d8bfd8bbde14a42643 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 19:00:20 -0800 Subject: [PATCH 39/90] apidoc: Fix apidoc Signed-off-by: Rohit Yadav --- tools/apidoc/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/apidoc/pom.xml b/tools/apidoc/pom.xml index bc7411f7013..6b159ff54eb 100644 --- a/tools/apidoc/pom.xml +++ b/tools/apidoc/pom.xml @@ -57,7 +57,7 @@ ${client.config.jars} ./target -f - ${client.config.conf}/commands.properties,${client.config.conf}/commands-ext.properties,${client.config.conf}/virtualrouter_commands.properties,${client.config.conf}/nicira-nvp_commands.properties + ${client.config.conf}/commands.properties From d8b04507d8285ac5201bcae1409aeacb2de2fb95 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 19:36:27 -0800 Subject: [PATCH 40/90] maven: exclude rat license checking for devcloud advanced cfg Signed-off-by: Rohit Yadav --- pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pom.xml b/pom.xml index aad124b0baf..f752d266a9d 100644 --- a/pom.xml +++ b/pom.xml @@ -245,7 +245,9 @@ scripts/vm/systemvm/id_rsa.cloud tools/devcloud/basebuild/puppet-devcloudinitial/files/network.conf tools/devcloud/devcloud.cfg + tools/devcloud/devcloud-advanced.cfg tools/devcloud-kvm/devcloud-kvm.cfg + tools/devcloud-kvm/devcloud-kvm-advanced.cfg ui/lib/flot/jquery.colorhelpers.js ui/lib/flot/jquery.flot.crosshair.js ui/lib/flot/jquery.flot.fillbetween.js From 7374056493ab5beccd514d115185f73feeead223 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Mon, 14 Jan 2013 20:55:13 -0800 Subject: [PATCH 41/90] Revert "apidoc: Remove api discovery from toc" This reverts commit 66514c00efad5c93a2b0996f1e79222cbff9bd48. --- tools/apidoc/gen_toc.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/apidoc/gen_toc.py b/tools/apidoc/gen_toc.py index 0b281a29c1d..7739aea633f 100644 --- a/tools/apidoc/gen_toc.py +++ b/tools/apidoc/gen_toc.py @@ -129,6 +129,7 @@ known_categories = { 'AutoScale': 'AutoScale', 'Counter': 'AutoScale', 'Condition': 'AutoScale', + 'Api': 'API Discovery', } From 0412cb8d9225b9c9fcc2ed4cfb94e702a0ea9c70 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Tue, 15 Jan 2013 02:16:25 +0000 Subject: [PATCH 42/90] Summary: Edit devcloud cfg files for advanced networking, add comments --- tools/devcloud/devcloud-advanced.cfg | 5 +- .../devcloud-advanced_internal-mgt.cfg | 124 ++++++++++++++++++ 2 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 tools/devcloud/devcloud-advanced_internal-mgt.cfg diff --git a/tools/devcloud/devcloud-advanced.cfg b/tools/devcloud/devcloud-advanced.cfg index ad4cdda1912..cfbc815dc69 100644 --- a/tools/devcloud/devcloud-advanced.cfg +++ b/tools/devcloud/devcloud-advanced.cfg @@ -1,3 +1,6 @@ +# This configuration is meant for running advanced networking, with management server on the laptop. +# It requires that the user run a DNS resolver within devcloud via 'apt-get install dnsmasq' + { "zones": [ { @@ -81,7 +84,7 @@ "gateway": "192.168.56.1" } ], - "internaldns1": "8.8.4.4", + "internaldns1": "192.168.56.10", "secondaryStorages": [ { "url": "nfs://192.168.56.10:/opt/storage/secondary" diff --git a/tools/devcloud/devcloud-advanced_internal-mgt.cfg b/tools/devcloud/devcloud-advanced_internal-mgt.cfg new file mode 100644 index 00000000000..e360b6b9e37 --- /dev/null +++ b/tools/devcloud/devcloud-advanced_internal-mgt.cfg @@ -0,0 +1,124 @@ +# This config is designed to run as an advanced network, with management server in devcloud +# It also requires an 'apt-get install dnsmasq' to run a resolver in devcloud for internal dns + +{ + "zones": [ + { + "localstorageenabled": "true", + "name": "testzone", + "guestcidraddress": "10.1.1.0/24", + "dns1": "8.8.8.8", + "physical_networks": [ + { + "broadcastdomainrange": "Zone", + "vlan": "3900-4000", + "name": "eth0", + "traffictypes": [ + { + "xen": "Pool-wide network associated with eth0", + "typ": "Management" + }, + { + "xen": "Pool-wide network associated with eth0", + "typ": "Guest" + } + ], + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + }, + { + "broadcastdomainrange": "ZONE", + "name": "VpcVirtualRouter" + } + ] + }, + { + "broadcastdomainrange": "Zone", + "name": "eth1", + "traffictypes": [ + { + "xen": "Pool-wide network associated with eth1", + "typ": "Public" + } + ], + "providers": [ + { + "broadcastdomainrange": "ZONE", + "name": "VirtualRouter" + } + ] + } + ], + "ipranges": [ + { + "startip": "10.0.3.100", + "endip": "10.0.3.199", + "netmask": "255.255.255.0", + "vlan": "untagged", + "gateway": "10.0.3.2" + } + ], + "networktype": "Advanced", + "pods": [ + { + "endip": "192.168.56.249", + "name": "testpod", + "startip": "192.168.56.200", + "netmask": "255.255.255.0", + "clusters": [ + { + "clustername": "testcluster", + "hypervisor": "XenServer", + "hosts": [ + { + "username": "root", + "url": "http://192.168.56.10/", + "password": "password" + } + ], + "clustertype": "CloudManaged" + } + ], + "gateway": "192.168.56.1" + } + ], + "internaldns1": "192.168.56.10", + "secondaryStorages": [ + { + "url": "nfs://192.168.56.10:/opt/storage/secondary" + } + ] + } + ], + "dbSvr": { + "dbSvr": "127.0.0.1", + "passwd": "cloud", + "db": "cloud", + "port": 3306, + "user": "cloud" + }, + "logger": [ + { + "name": "TestClient", + "file": "/var/log/testclient.log" + }, + { + "name": "TestCase", + "file": "/var/log/testcase.log" + } + ], + "mgtSvr": [ + { + "mgtSvrIp": "192.168.56.10", + "port": 8096 + } + ], + "globalConfig": [ + { + "name": "host", + "value": "192.168.56.10" + } + ] +} From 510450b11b611fb0112771ae56586fcbed70ecc6 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 15 Jan 2013 12:14:57 +0100 Subject: [PATCH 43/90] Remove duplicate systemUse clausule when fetching service offerings. A couple of lines back there is: if (isSystem != null) { sc.addAnd("systemUse", SearchCriteria.Op.EQ, isSystem); } So it was set redundantly, this can be removed. --- server/src/com/cloud/server/ManagementServerImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index bf105506b23..4efae630f36 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -760,7 +760,6 @@ public class ManagementServerImpl implements ManagementServer { sc.addAnd("vm_type", SearchCriteria.Op.EQ, vmTypeStr); } - sc.addAnd("systemUse", SearchCriteria.Op.EQ, isSystem); sc.addAnd("removed", SearchCriteria.Op.NULL); return _offeringsDao.search(sc, searchFilter); From 95222cdb6d07b16c89b9deb7d12eecbc89d8ce94 Mon Sep 17 00:00:00 2001 From: Wido den Hollander Date: Tue, 15 Jan 2013 13:25:48 +0100 Subject: [PATCH 44/90] Templates: Add Ubuntu 12.04 to the templates Although I still think the templates aren't well maintained, I just added 12.04 since this is an LTS and people probably want it in the list of templates. This system should be more generic I think though. --- .../hypervisor/kvm/resource/KVMGuestOsMapper.java | 2 ++ setup/db/templates.kvm.sql | 11 ++++++----- setup/db/templates.sql | 7 +++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java index b4771cacb10..bd1573c9fa9 100644 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/KVMGuestOsMapper.java @@ -91,6 +91,8 @@ public class KVMGuestOsMapper { s_mapper.put("Fedora 10", "Fedora 10"); s_mapper.put("Fedora 9", "Fedora 9"); s_mapper.put("Fedora 8", "Fedora 8"); + s_mapper.put("Ubuntu 12.04 (32-bit)", "Ubuntu 12.04"); + s_mapper.put("Ubuntu 12.04 (64-bit)", "Ubuntu 12.04"); s_mapper.put("Ubuntu 10.04 (32-bit)", "Ubuntu 10.04"); s_mapper.put("Ubuntu 10.04 (64-bit)", "Ubuntu 10.04"); s_mapper.put("Ubuntu 10.10 (32-bit)", "Ubuntu 10.10"); diff --git a/setup/db/templates.kvm.sql b/setup/db/templates.kvm.sql index bc275f5285d..8a5582540af 100644 --- a/setup/db/templates.kvm.sql +++ b/setup/db/templates.kvm.sql @@ -51,11 +51,12 @@ INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (U INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 10', 'Fedora 10'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 9', 'Fedora 9'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 5, 'Fedora 8', 'Fedora 8'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 10.04', 'Ubuntu 10.04'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 9.10', 'Ubuntu 9.10'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 9.04', 'Ubuntu 9.04'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 8.10', 'Ubuntu 8.10'); -INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Ubuntu 8.04', 'Ubuntu 8.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 12.04', 'Ubuntu 12.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 10.04', 'Ubuntu 10.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 9.10', 'Ubuntu 9.10'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 9.04', 'Ubuntu 9.04'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 8.10', 'Ubuntu 8.10'); +INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 10, 'Ubuntu 8.04', 'Ubuntu 8.04'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Debian Squeeze', 'Debian Squeeze'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Debian Lenny', 'Debian Lenny'); INSERT INTO `cloud`.`guest_os` (uuid, category_id, name, display_name) VALUES (UUID(), 2, 'Debian Etch', 'Debian Etch'); diff --git a/setup/db/templates.sql b/setup/db/templates.sql index 3867d4fe9d2..9980b159630 100755 --- a/setup/db/templates.sql +++ b/setup/db/templates.sql @@ -211,6 +211,8 @@ INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (159 INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (160, UUID(), 6, 'Windows PV'); INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (161, UUID(), 1, 'CentOS 5.7 (32-bit)'); INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (162, UUID(), 1, 'CentOS 5.7 (64-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (163, UUID(), 10, 'Ubuntu 12.04 (32-bit)'); +INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (164, UUID(), 10, 'Ubuntu 12.04 (64-bit)'); INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (200, UUID(), 1, 'Other CentOS (32-bit)'); INSERT INTO `cloud`.`guest_os` (id, uuid, category_id, display_name) VALUES (201, UUID(), 1, 'Other CentOS (64-bit)'); @@ -370,11 +372,13 @@ INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Debian GNU/Linux 4(32-bit)', 73); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Debian GNU/Linux 4(64-bit)', 74); +INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 12.04 (32-bit)', 162); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 10.04 (32-bit)', 121); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 9.10 (32-bit)', 122); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 9.04 (32-bit)', 123); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 8.10 (32-bit)', 124); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 8.04 (32-bit)', 125); +INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 12.04 (64-bit)', 163); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 10.04 (64-bit)', 126); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 9.10 (64-bit)', 127); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Ubuntu 9.04 (64-bit)', 128); @@ -385,6 +389,7 @@ INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other Ubuntu Linux (32-bit)', 59); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other Ubuntu (64-bit)', 100); + INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other 2.6x Linux (32-bit)', 75); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other 2.6x Linux (64-bit)', 76); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ("VmWare", 'Other Linux (32-bit)', 98); @@ -454,6 +459,8 @@ INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Fedora 8', 120); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 10.04', 121); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 10.04', 126); +INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 10.04', 162); +INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 10.04', 163); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 9.10', 122); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 9.10', 127); INSERT INTO `cloud`.`guest_os_hypervisor` (hypervisor_type, guest_os_name, guest_os_id) VALUES ('KVM', 'Ubuntu 9.04', 123); From 04b14ab03f089f333f4dbf7058e951a23c12a28a Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Tue, 15 Jan 2013 19:27:24 +0530 Subject: [PATCH 45/90] Marvin: physical network label not carried through in the API The label associated with the hypervisor nic to isolate traffic types by Guest/Mgmt/Public/Storage was not passed in the marvin.traffictype object and sent through to mgmt server resulting in traffic types not being applied. Signed-off-by: Prasanna Santhanam --- tools/marvin/marvin/deployDataCenter.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/marvin/marvin/deployDataCenter.py b/tools/marvin/marvin/deployDataCenter.py index 7f8c0295ad8..ff3b6e6d0e0 100644 --- a/tools/marvin/marvin/deployDataCenter.py +++ b/tools/marvin/marvin/deployDataCenter.py @@ -258,10 +258,10 @@ class deployDataCenters(): traffic_type = addTrafficType.addTrafficTypeCmd() traffic_type.physicalnetworkid = physical_network_id traffic_type.traffictype = traffictype.typ - if traffictype.labeldict is not None: - traffic_type.kvmnetworklabel = traffictype.labeldict.kvm - traffic_type.xennetworklabel = traffictype.labeldict.xen - traffic_type.vmwarenetworklabel = traffictype.labeldict.vmware + traffic_type.kvmnetworklabel = traffictype.kvm if traffictype.kvm is not None else None + traffic_type.xennetworklabel = traffictype.xen if traffictype.xen is not None else None + traffictype.vmwarenetworklabel = traffictype.vmware if traffictype.vmware is not None else None + traffictype.simulatorlabel = traffictype.simulator if traffictype.simulator is not None else None return self.apiClient.addTrafficType(traffic_type) def enableZone(self, zoneid, allocation_state="Enabled"): From bfd02c5db39ee2dad30d0edefb205b56a4248594 Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Tue, 15 Jan 2013 19:36:30 +0530 Subject: [PATCH 46/90] traffic_type not traffictype Signed-off-by: Prasanna Santhanam --- tools/marvin/marvin/deployDataCenter.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/marvin/marvin/deployDataCenter.py b/tools/marvin/marvin/deployDataCenter.py index ff3b6e6d0e0..e4f7eace9bd 100644 --- a/tools/marvin/marvin/deployDataCenter.py +++ b/tools/marvin/marvin/deployDataCenter.py @@ -260,8 +260,8 @@ class deployDataCenters(): traffic_type.traffictype = traffictype.typ traffic_type.kvmnetworklabel = traffictype.kvm if traffictype.kvm is not None else None traffic_type.xennetworklabel = traffictype.xen if traffictype.xen is not None else None - traffictype.vmwarenetworklabel = traffictype.vmware if traffictype.vmware is not None else None - traffictype.simulatorlabel = traffictype.simulator if traffictype.simulator is not None else None + traffic_type.vmwarenetworklabel = traffictype.vmware if traffictype.vmware is not None else None + traffic_type.simulatorlabel = traffictype.simulator if traffictype.simulator is not None else None return self.apiClient.addTrafficType(traffic_type) def enableZone(self, zoneid, allocation_state="Enabled"): From 8d0091d7e2e9b01df3af8deec14246f9eac1418e Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Tue, 15 Jan 2013 21:12:10 +0530 Subject: [PATCH 47/90] CLOUDSTACK-978:TypeError: instance.displayname is undefined while adding VM's to the LB rule --- ui/scripts/network.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ui/scripts/network.js b/ui/scripts/network.js index 4103c3e2b6e..f3308bb5ba7 100755 --- a/ui/scripts/network.js +++ b/ui/scripts/network.js @@ -1259,12 +1259,16 @@ data.listvirtualmachinesresponse.virtualmachine : [], function(instance) { var nonAutoScale=0; + if(instance.displayname == null) + nonAutoScale = 1; + else{ if( instance.displayname.match(/AutoScale-LB-/)==null) nonAutoScale =1; else { if(instance.displayname.match(/AutoScale-LB-/).length) nonAutoScale =0; } + } var isActiveState= $.inArray(instance.state, ['Destroyed','Expunging']) == -1; return nonAutoScale && isActiveState; } @@ -2623,12 +2627,16 @@ function(instance) { //Hiding the autoScale VMs var nonAutoScale =0; + if(instance.displayname == null) + nonAutoScale = 1 + else { if(instance.displayname.match(/AutoScale-LB-/) == null) nonAutoScale = 1; else { if( instance.displayname.match(/AutoScale-LB-/).length) nonAutoScale =0; - } + } + } var isActiveState = $.inArray(instance.state, ['Destroyed','Expunging']) == -1; var notExisting = !$.grep(itemData, function(item) { return item.id == instance.id; From 101f64410adc944ea2f2b2ad9734c990c4fe0336 Mon Sep 17 00:00:00 2001 From: anthony Date: Tue, 15 Jan 2013 09:17:12 -0800 Subject: [PATCH 48/90] Do not allow add multiple VLANs or subnets into shared network CS allows to add multiple VLANs and subnets to a shared network, but it doesn't really work, for example , vm on second VLAN or subnet cannot get IP through DHCP This patch will not allow to add mulitple VLANS or subnets into shared network CLOUDSTACK-982:Do not allow add multiple VLANs or subnets into shared network --- .../ConfigurationManagerImpl.java | 56 ++++++++++--------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index 2e20c134b54..b21c5a38bb7 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -2071,7 +2071,12 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura Long projectId = cmd.getProjectId(); Long domainId = cmd.getDomainId(); Account vlanOwner = null; - + + // if end ip is not specified, default it to startIp + if (endIP == null && startIP != null) { + endIP = startIP; + } + if (projectId != null) { if (accountName != null) { throw new InvalidParameterValueException("Account and projectId are mutually exclusive"); @@ -2176,6 +2181,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura throw new InvalidParameterValueException("Nework id is required for Direct vlan creation "); } networkId = network.getId(); + zoneId = network.getDataCenterId(); } } else if (network.getGuestType() == null || network.getGuestType() == Network.GuestType.Isolated) { throw new InvalidParameterValueException("Can't create direct vlan for network id=" + networkId + " with type: " + network.getGuestType()); @@ -2192,34 +2198,34 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura endIP = startIP; } - if (forVirtualNetwork || zone.getNetworkType() == DataCenter.NetworkType.Basic || zone.isSecurityGroupEnabled()) { - if (vlanGateway == null || vlanNetmask == null || zoneId == null) { - throw new InvalidParameterValueException("Gateway, netmask and zoneId have to be passed in for virtual and direct untagged networks"); - } - } else { - // check if startIp and endIp belong to network Cidr - String networkCidr = network.getCidr(); - String networkGateway = network.getGateway(); - Long networkZoneId = network.getDataCenterId(); - String networkNetmask = NetUtils.getCidrNetmask(networkCidr); - - // Check if ip addresses are in network range - if (!NetUtils.sameSubnet(startIP, networkGateway, networkNetmask)) { - throw new InvalidParameterValueException("Start ip is not in network cidr: " + networkCidr); - } - - if (endIP != null) { - if (!NetUtils.sameSubnet(endIP, networkGateway, networkNetmask)) { - throw new InvalidParameterValueException("End ip is not in network cidr: " + networkCidr); + if ( zone.getNetworkType() == DataCenter.NetworkType.Advanced ) { + if (network.getTrafficType() == TrafficType.Guest) { + if (network.getGuestType() != GuestType.Shared) { + throw new InvalidParameterValueException("Can execute createVLANIpRanges on shared guest network, but type of this guest network " + + network.getId() + " is " + network.getGuestType()); } + List vlans = _vlanDao.listVlansByNetworkId(network.getId()); + if ( vlans != null && vlans.size() > 0 ) { + VlanVO vlan = vlans.get(0); + if ( vlanId == null ) { + vlanId = vlan.getVlanTag(); + } else if ( vlan.getVlanTag() != vlanId ) { + throw new InvalidParameterValueException("there is already one vlan " + vlan.getVlanTag() + " on network :" + + + network.getId() + ", only one vlan is allowed on guest network"); + } + vlanGateway = vlan.getVlanGateway(); + vlanNetmask = vlan.getVlanNetmask(); + } + } else if (network.getTrafficType() == TrafficType.Management) { + throw new InvalidParameterValueException("Cannot execute createVLANIpRanges on management network"); } - - // set gateway, netmask, zone from network object - vlanGateway = networkGateway; - vlanNetmask = networkNetmask; - zoneId = networkZoneId; } + if (vlanGateway == null || vlanNetmask == null || zoneId == null) { + throw new InvalidParameterValueException("Gateway, netmask and zoneId have to be passed in for virtual and direct untagged networks"); + } + + // if it's an account specific range, associate ip address list to the account boolean associateIpRangeToAccount = false; From a6b902763071c70f6e530ea4b3440f5fb030090b Mon Sep 17 00:00:00 2001 From: anthony Date: Tue, 15 Jan 2013 11:15:42 -0800 Subject: [PATCH 49/90] default Security rule doesn't apply to system VMs since nic.getIsolationUri is not set use to.setSecurityGroupEnabled to indicate if securitygroup is enabled on this NIC CLOUDSTACK-983: default Security rule doesn't apply to system VMs --- .../hypervisor/kvm/resource/LibvirtComputingResource.java | 5 ++--- .../cloud/hypervisor/xen/resource/CitrixResourceBase.java | 6 ++++-- server/src/com/cloud/hypervisor/HypervisorGuruBase.java | 1 + 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index b52e2d8a0b0..6b5f6df3bff 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -2901,9 +2901,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements NicTO[] nics = vmSpec.getNics(); for (NicTO nic : nics) { - if (nic.getIsolationUri() != null - && nic.getIsolationUri().getScheme() - .equalsIgnoreCase(IsolationType.Ec2.toString())) { + if (nic.isSecurityGroupEnabled() || ( nic.getIsolationUri() != null + && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString()))) { if (vmSpec.getType() != VirtualMachine.Type.User) { default_network_rules_for_systemvm(conn, vmName); break; diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 36a12b1b4fa..66a5918b177 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -1324,7 +1324,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe NicTO[] nics = vmSpec.getNics(); boolean secGrpEnabled = false; for (NicTO nic : nics) { - if (nic.getIsolationUri() != null && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString())) { + if (nic.isSecurityGroupEnabled() || (nic.getIsolationUri() != null + && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString()))) { secGrpEnabled = true; break; } @@ -1342,7 +1343,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe //For user vm, program the rules for each nic if the isolation uri scheme is ec2 NicTO[] nics = vmSpec.getNics(); for (NicTO nic : nics) { - if (nic.getIsolationUri() != null && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString())) { + if ( nic.isSecurityGroupEnabled() || nic.getIsolationUri() != null + && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString())) { result = callHostPlugin(conn, "vmops", "default_network_rules", "vmName", vmName, "vmIP", nic.getIp(), "vmMAC", nic.getMac(), "vmID", Long.toString(vmSpec.getId())); if (result == null || result.isEmpty() || !Boolean.parseBoolean(result)) { diff --git a/server/src/com/cloud/hypervisor/HypervisorGuruBase.java b/server/src/com/cloud/hypervisor/HypervisorGuruBase.java index 242852fc681..2efe6d35098 100644 --- a/server/src/com/cloud/hypervisor/HypervisorGuruBase.java +++ b/server/src/com/cloud/hypervisor/HypervisorGuruBase.java @@ -62,6 +62,7 @@ public abstract class HypervisorGuruBase extends AdapterBase implements Hypervis to.setIsolationuri(profile.getIsolationUri()); to.setNetworkRateMbps(profile.getNetworkRate()); to.setName(profile.getName()); + to.setSecurityGroupEnabled(profile.isSecurityGroupEnabled()); // Workaround to make sure the TO has the UUID we need for Niciri integration NicVO nicVO = _nicDao.findById(profile.getId()); From 7fad27b846e8f3652ae04dce529693b88bd64da9 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Tue, 15 Jan 2013 11:43:53 -0800 Subject: [PATCH 50/90] network-refactor: unfortunately have to ignore tests during build since the tests involve verification of injection. This causes the database to get invoked during component initialization. The database is not available on the build server --- server/test/com/cloud/network/NetworkManagerTest.java | 10 +++++++++- .../cloud/network/firewall/FirewallManagerTest.java | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/server/test/com/cloud/network/NetworkManagerTest.java b/server/test/com/cloud/network/NetworkManagerTest.java index c0856d649ff..c7d2a076c94 100644 --- a/server/test/com/cloud/network/NetworkManagerTest.java +++ b/server/test/com/cloud/network/NetworkManagerTest.java @@ -21,6 +21,8 @@ package com.cloud.network; import junit.framework.Assert; import org.apache.log4j.Logger; +import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import com.cloud.network.element.DhcpServiceProvider; @@ -29,10 +31,16 @@ import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.testcase.ComponentSetup; import com.cloud.utils.testcase.ComponentTestCase; +@Ignore("Requires database to be set up") @ComponentSetup(managerName="management-server", setupXml="network-mgr-component.xml") public class NetworkManagerTest extends ComponentTestCase { private static final Logger s_logger = Logger.getLogger(NetworkManagerTest.class); - + @Before + @Override + protected void setUp() { + super.setUp(); + } + @Test public void testInjected() { NetworkManagerImpl networkMgr = (NetworkManagerImpl)ComponentLocator.getCurrentLocator().getManager(NetworkManager.class); diff --git a/server/test/com/cloud/network/firewall/FirewallManagerTest.java b/server/test/com/cloud/network/firewall/FirewallManagerTest.java index bb46592a7c7..4fbe8d9aca1 100644 --- a/server/test/com/cloud/network/firewall/FirewallManagerTest.java +++ b/server/test/com/cloud/network/firewall/FirewallManagerTest.java @@ -32,6 +32,7 @@ import junit.framework.Assert; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import com.cloud.exception.ResourceUnavailableException; @@ -56,6 +57,7 @@ import com.cloud.utils.db.GenericDaoBase; import com.cloud.utils.testcase.ComponentSetup; import com.cloud.utils.testcase.ComponentTestCase; +@Ignore("Requires database to be set up") @ComponentSetup(managerName="management-server", setupXml="network-mgr-component.xml") public class FirewallManagerTest extends ComponentTestCase { private static final Logger s_logger = Logger.getLogger(FirewallManagerTest.class); From 7f1486e2dc9f612af94901ab8804e24c48b8122b Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 15 Jan 2013 11:40:49 -0800 Subject: [PATCH 51/90] We need to catch PermissionDeniedException in checking if command is available to an user. --- server/src/com/cloud/api/ApiServer.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index 4d60215b276..e106f0322ad 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -549,7 +549,10 @@ public class ApiServer implements HttpRequestHandler { // if userId not null, that mean that user is logged in if (userId != null) { User user = ApiDBUtils.findUserById(userId); - if (!isCommandAvailable(user, commandName)) { + try{ + checkCommandAvailable(user, commandName); + } + catch (PermissionDeniedException ex){ s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); } @@ -649,7 +652,10 @@ public class ApiServer implements HttpRequestHandler { UserContext.updateContext(user.getId(), account, null); - if (!isCommandAvailable(user, commandName)) { + try{ + checkCommandAvailable(user, commandName); + } + catch (PermissionDeniedException ex){ s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user"); throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); } @@ -780,7 +786,7 @@ public class ApiServer implements HttpRequestHandler { return true; } - private boolean isCommandAvailable(User user, String commandName) throws PermissionDeniedException { + private void checkCommandAvailable(User user, String commandName) throws PermissionDeniedException { if (user == null) { throw new PermissionDeniedException("User is null for role based API access check for command" + commandName); } @@ -788,7 +794,6 @@ public class ApiServer implements HttpRequestHandler { for (APIChecker apiChecker : _apiAccessCheckers) { apiChecker.checkAccess(user, commandName); } - return true; } private Class getCmdClass(String cmdName) { From 354c56a9887cb1a3bfdfbdfa00ce34bc96ee8037 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Tue, 15 Jan 2013 14:21:44 -0700 Subject: [PATCH 52/90] Summary: Adding apache license headers to various devcloud configs Signed-off-by: Marcus Sorensen 1358284904 -0700 --- tools/devcloud-kvm/devcloud-kvm-advanced.cfg | 19 ++++++++++++++++++ tools/devcloud-kvm/devcloud-kvm.cfg | 20 +++++++++++++++++++ tools/devcloud/devcloud-advanced.cfg | 17 ++++++++++++++++ .../devcloud-advanced_internal-mgt.cfg | 17 ++++++++++++++++ tools/devcloud/devcloud.cfg | 18 +++++++++++++++++ 5 files changed, 91 insertions(+) diff --git a/tools/devcloud-kvm/devcloud-kvm-advanced.cfg b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg index 1110863d848..10cbce00779 100644 --- a/tools/devcloud-kvm/devcloud-kvm-advanced.cfg +++ b/tools/devcloud-kvm/devcloud-kvm-advanced.cfg @@ -1,3 +1,22 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + + { "zones": [ { diff --git a/tools/devcloud-kvm/devcloud-kvm.cfg b/tools/devcloud-kvm/devcloud-kvm.cfg index 47a128fea14..b3f048aac97 100644 --- a/tools/devcloud-kvm/devcloud-kvm.cfg +++ b/tools/devcloud-kvm/devcloud-kvm.cfg @@ -1,3 +1,23 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# This is a stock devcloud config converted from the file +# tools/devcloud/devcloud.cfg. + { "zones": [ { diff --git a/tools/devcloud/devcloud-advanced.cfg b/tools/devcloud/devcloud-advanced.cfg index cfbc815dc69..75c3a4f7147 100644 --- a/tools/devcloud/devcloud-advanced.cfg +++ b/tools/devcloud/devcloud-advanced.cfg @@ -1,3 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# # This configuration is meant for running advanced networking, with management server on the laptop. # It requires that the user run a DNS resolver within devcloud via 'apt-get install dnsmasq' diff --git a/tools/devcloud/devcloud-advanced_internal-mgt.cfg b/tools/devcloud/devcloud-advanced_internal-mgt.cfg index e360b6b9e37..a1a8cb54722 100644 --- a/tools/devcloud/devcloud-advanced_internal-mgt.cfg +++ b/tools/devcloud/devcloud-advanced_internal-mgt.cfg @@ -1,3 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# # This config is designed to run as an advanced network, with management server in devcloud # It also requires an 'apt-get install dnsmasq' to run a resolver in devcloud for internal dns diff --git a/tools/devcloud/devcloud.cfg b/tools/devcloud/devcloud.cfg index 8d296eb7b98..c41f8bcef58 100644 --- a/tools/devcloud/devcloud.cfg +++ b/tools/devcloud/devcloud.cfg @@ -1,3 +1,21 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + { "zones": [ { From f7b8ad5e8bc97c01db7ece539a490e929b050f70 Mon Sep 17 00:00:00 2001 From: Chip Childers Date: Tue, 15 Jan 2013 16:28:16 -0500 Subject: [PATCH 53/90] Updating the RAT exclude list to no longer exclude devcloud .cfg files Signed-off-by: Chip Childers --- pom.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pom.xml b/pom.xml index f752d266a9d..c440a660322 100644 --- a/pom.xml +++ b/pom.xml @@ -244,10 +244,6 @@ dist/console-proxy/js/jquery.js scripts/vm/systemvm/id_rsa.cloud tools/devcloud/basebuild/puppet-devcloudinitial/files/network.conf - tools/devcloud/devcloud.cfg - tools/devcloud/devcloud-advanced.cfg - tools/devcloud-kvm/devcloud-kvm.cfg - tools/devcloud-kvm/devcloud-kvm-advanced.cfg ui/lib/flot/jquery.colorhelpers.js ui/lib/flot/jquery.flot.crosshair.js ui/lib/flot/jquery.flot.fillbetween.js From 47251b51a7bad37c66c0fa460723ede6a3e7b0a9 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Tue, 15 Jan 2013 14:26:30 -0700 Subject: [PATCH 54/90] Summary: Allow ssh keypairs to be created if developer flag set and user ! cloud Detail: Previously in the code we allowed the configuration to create ssh keypairs and put them in the configuration table so that systemvms could have ssh key auth and work properly if the user was 'cloud' or if the developer configuration item was set to true. It got changed to requiring both the cloud user and the developer flag (using an || on a negative) somwhere along the way. This changes it back to && on a negative to allow us to run as non-cloud users with the dev flag set, and for cloud to deploy properly without the developer flag. Signed-off-by: Marcus Sorensen 1358285190 -0700 --- server/src/com/cloud/server/ConfigurationServerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index b25c63f6d7f..7e5f42445d5 100755 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -549,7 +549,7 @@ public class ConfigurationServerImpl implements ConfigurationServer { String username = System.getProperty("user.name"); Boolean devel = Boolean.valueOf(_configDao.getValue("developer")); - if (!username.equalsIgnoreCase("cloud") || !devel) { + if (!username.equalsIgnoreCase("cloud") && !devel) { s_logger.warn("Systemvm keypairs could not be set. Management server should be run as cloud user, or in development mode."); return; } From c32dbec468b176d4a6019d9e642eb9adc593bf36 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Tue, 15 Jan 2013 14:51:59 -0800 Subject: [PATCH 55/90] CLOUDSTACK-985: Revert "Using different MAC for a pair of redundant routers" The different MAC address for a pair of redundant router have issues when short time network outrage happened. When this happened: 1. BACKUP(r-2) cannot receive the broadcast from MASTER(r-1). 2. Then r-2 would announce it's MASTER after 3 seconds, and send gratuitous ARP to the gateway of public ip(usually a rack router). 3. The gateway of public ip would update it's ARP cache to associate the public ip of the network to the MAC of r-2. 4. In the meantime, r-1 still sending out VRRP broadcast(due to network issue, the broadcast never arrived at r-2), and acting as MASTER. 5. After network outrage, r-2 would receive the higher priority VRRP broadcast from MASTER again, then receded as BACKUP. 6. But the public gateway would still associate public ip with MAC of r-2, thus caused the issue. r-1 would no longer able to receive any packets from public network. And there is no way for r-1 to send gratuitous ARP again, because it's always consider itself as MASTER, no state changed, and no hook existed for receiving lower priority broadcast. So I would revert this change, and introduce another commit to ensure the newly create redundant router would share the same MAC as the first one. This reverts commit 9f257aa60b62f24193bba3f7c902e7779632e01e. --- .../VirtualNetworkApplianceManagerImpl.java | 26 ++++--------------- server/src/com/cloud/vm/dao/NicDao.java | 2 -- server/src/com/cloud/vm/dao/NicDaoImpl.java | 8 ------ 3 files changed, 5 insertions(+), 31 deletions(-) diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index 492e1dc20b1..c8fd86e821c 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1469,31 +1469,15 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian offeringId = _offering.getId(); } + PublicIp sourceNatIp = null; + if (publicNetwork) { + sourceNatIp = _networkMgr.assignSourceNatIpAddressToGuestNetwork(owner, guestNetwork); + } + // 3) deploy virtual router(s) int count = routerCount - routers.size(); DeploymentPlan plan = planAndRouters.first(); for (int i = 0; i < count; i++) { - PublicIp sourceNatIp = null; - if (publicNetwork) { - int failCount = 0; - // Generate different MAC for VR - while (sourceNatIp == null) { - sourceNatIp = _networkMgr.assignSourceNatIpAddressToGuestNetwork(owner, guestNetwork); - NicVO nic = _nicDao.findByMacAddress(sourceNatIp.getMacAddress()); - // We got duplicate MAC here, so regenerate the mac - if (nic != null) { - s_logger.debug("Failed to find a different mac for redundant router. Try again. The current mac is " + sourceNatIp.getMacAddress()); - sourceNatIp = null; - failCount ++; - } - //Prevent infinite loop - if (failCount > 3) { - s_logger.error("Failed to find a different mac for redundant router! Abort operation!"); - throw new InsufficientAddressCapacityException("Failed to find a different mac for redundant router", null, offeringId); - } - } - } - List> networks = createRouterNetworks(owner, isRedundant, plan, guestNetwork, new Pair(publicNetwork, sourceNatIp)); //don't start the router as we are holding the network lock that needs to be released at the end of router allocation diff --git a/server/src/com/cloud/vm/dao/NicDao.java b/server/src/com/cloud/vm/dao/NicDao.java index af3c7b379c1..762048b65bf 100644 --- a/server/src/com/cloud/vm/dao/NicDao.java +++ b/server/src/com/cloud/vm/dao/NicDao.java @@ -58,6 +58,4 @@ public interface NicDao extends GenericDao { NicVO findByNetworkIdInstanceIdAndBroadcastUri(long networkId, long instanceId, String broadcastUri); NicVO findByIp4AddressAndNetworkIdAndInstanceId(long networkId, long instanceId, String ip4Address); - - NicVO findByMacAddress(String macAddress); } diff --git a/server/src/com/cloud/vm/dao/NicDaoImpl.java b/server/src/com/cloud/vm/dao/NicDaoImpl.java index 00da2eb96a4..3cd7fa6b488 100644 --- a/server/src/com/cloud/vm/dao/NicDaoImpl.java +++ b/server/src/com/cloud/vm/dao/NicDaoImpl.java @@ -50,7 +50,6 @@ public class NicDaoImpl extends GenericDaoBase implements NicDao { AllFieldsSearch.and("address", AllFieldsSearch.entity().getIp4Address(), Op.EQ); AllFieldsSearch.and("isDefault", AllFieldsSearch.entity().isDefaultNic(), Op.EQ); AllFieldsSearch.and("broadcastUri", AllFieldsSearch.entity().getBroadcastUri(), Op.EQ); - AllFieldsSearch.and("macAddress", AllFieldsSearch.entity().getMacAddress(), Op.EQ); AllFieldsSearch.done(); IpSearch = createSearchBuilder(String.class); @@ -200,11 +199,4 @@ public class NicDaoImpl extends GenericDaoBase implements NicDao { sc.setParameters("address", ip4Address); return findOneBy(sc); } - - @Override - public NicVO findByMacAddress(String macAddress) { - SearchCriteria sc = AllFieldsSearch.create(); - sc.setParameters("macAddress", macAddress); - return findOneBy(sc); - } } From 4f889bd426ea841918b570bb008cf5e348715730 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Tue, 15 Jan 2013 15:22:41 -0800 Subject: [PATCH 56/90] CLOUDSTACK-985: Make sure RvR would always have same MAC address Even with newly created RvR using "restartNetwork&cleanup=false" API. --- .../network/router/VirtualNetworkApplianceManagerImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java index c8fd86e821c..717da054ac5 100755 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -1699,6 +1699,13 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian } NetworkOfferingVO publicOffering = _networkMgr.getSystemAccountNetworkOfferings(NetworkOfferingVO.SystemPublicNetwork).get(0); List publicNetworks = _networkMgr.setupNetwork(_systemAcct, publicOffering, plan, null, null, false); + String publicIp = defaultNic.getIp4Address(); + // We want to use the identical MAC address for RvR on public interface if possible + NicVO peerNic = _nicDao.findByIp4AddressAndNetworkId(publicIp, publicNetworks.get(0).getId()); + if (peerNic != null) { + s_logger.info("Use same MAC as previous RvR, the MAC is " + peerNic.getMacAddress()); + defaultNic.setMacAddress(peerNic.getMacAddress()); + } networks.add(new Pair(publicNetworks.get(0), defaultNic)); } From f6a8b45de52ad57646adb71dc55ddf3ee9dbd194 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Tue, 15 Jan 2013 16:06:21 -0800 Subject: [PATCH 57/90] ApiDiscovery: Use UserContext getCallerUser, do a lazy eval to get account service Impl. and use UserContext to get User. CloudStack's @Inject is horrible, it may sometimes fail to inject account service during startup. Do a lazy injection using ComponentLocator when needed. Signed-off-by: Rohit Yadav --- api/src/com/cloud/user/UserContext.java | 4 ++ .../command/user/discovery/ListApisCmd.java | 8 +--- .../discovery/ApiDiscoveryServiceImpl.java | 41 +++++++++---------- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/api/src/com/cloud/user/UserContext.java b/api/src/com/cloud/user/UserContext.java index b140728e596..539e11812af 100644 --- a/api/src/com/cloud/user/UserContext.java +++ b/api/src/com/cloud/user/UserContext.java @@ -50,6 +50,10 @@ public class UserContext { return userId; } + public User getCallerUser() { + return _accountMgr.getActiveUser(userId); + } + public void setCallerUserId(long userId) { this.userId = userId; } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java index 132416bac05..bad7ca7b5f6 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java @@ -16,11 +16,8 @@ // under the License. package org.apache.cloudstack.api.command.user.discovery; -import com.cloud.user.AccountService; import com.cloud.user.User; import com.cloud.user.UserContext; -import com.cloud.utils.component.Inject; -import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.BaseCmd; @@ -42,16 +39,13 @@ public class ListApisCmd extends BaseCmd { @PlugService ApiDiscoveryService _apiDiscoveryService; - @Inject - private AccountService _accountService; - @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, description="API name") private String name; @Override public void execute() throws ServerApiException { if (_apiDiscoveryService != null) { - User user = _accountService.getActiveUser(UserContext.current().getCallerUserId()); + User user = UserContext.current().getCallerUser(); ListResponse response = (ListResponse) _apiDiscoveryService.listApis(user, name); if (response == null) { throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Api Discovery plugin was unable to find an api by that name or process any apis"); diff --git a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java index 7e2ed17ecdc..f06e2005552 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/discovery/ApiDiscoveryServiceImpl.java @@ -17,17 +17,13 @@ package org.apache.cloudstack.discovery; import com.cloud.serializer.Param; -import com.cloud.server.ManagementServer; import com.cloud.user.User; import com.cloud.utils.ReflectUtil; import com.cloud.utils.StringUtils; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; -import com.cloud.utils.component.Inject; -import com.cloud.utils.component.PluggableService; import com.google.gson.annotations.SerializedName; import org.apache.cloudstack.acl.APIChecker; -import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseAsyncCmd; @@ -54,16 +50,14 @@ import java.util.Set; public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { private static final Logger s_logger = Logger.getLogger(ApiDiscoveryServiceImpl.class); - @Inject(adapter = APIChecker.class) - protected Adapters _apiAccessCheckers; - - private static Map _apiNameDiscoveryResponseMap = null; + protected static Adapters s_apiAccessCheckers = null; + private static Map s_apiNameDiscoveryResponseMap = null; protected ApiDiscoveryServiceImpl() { super(); - if (_apiNameDiscoveryResponseMap == null) { + if (s_apiNameDiscoveryResponseMap == null) { long startTime = System.nanoTime(); - _apiNameDiscoveryResponseMap = new HashMap(); + s_apiNameDiscoveryResponseMap = new HashMap(); cacheResponseMap(); long endTime = System.nanoTime(); s_logger.info("Api Discovery Service: Annotation, docstrings, api relation graph processed in " + (endTime - startTime) / 1000000.0 + " ms"); @@ -142,11 +136,11 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { } } response.setObjectName("api"); - _apiNameDiscoveryResponseMap.put(apiName, response); + s_apiNameDiscoveryResponseMap.put(apiName, response); } - for (String apiName : _apiNameDiscoveryResponseMap.keySet()) { - ApiDiscoveryResponse response = _apiNameDiscoveryResponseMap.get(apiName); + for (String apiName : s_apiNameDiscoveryResponseMap.keySet()) { + ApiDiscoveryResponse response = s_apiNameDiscoveryResponseMap.get(apiName); Set processedParams = new HashSet(); for (ApiParameterResponse param : response.getParams()) { if (responseApiNameListMap.containsKey(param.getRelated())) { @@ -166,7 +160,7 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { } else { response.setRelated(null); } - _apiNameDiscoveryResponseMap.put(apiName, response); + s_apiNameDiscoveryResponseMap.put(apiName, response); } } @@ -175,34 +169,39 @@ public class ApiDiscoveryServiceImpl implements ApiDiscoveryService { ListResponse response = new ListResponse(); List responseList = new ArrayList(); + if (s_apiAccessCheckers == null) { + ComponentLocator locator = ComponentLocator.getCurrentLocator(); + s_apiAccessCheckers = locator.getAdapters(APIChecker.class); + } + if (user == null) return null; if (name != null) { - if (!_apiNameDiscoveryResponseMap.containsKey(name)) + if (!s_apiNameDiscoveryResponseMap.containsKey(name)) return null; - for (APIChecker apiChecker : _apiAccessCheckers) { + for (APIChecker apiChecker : s_apiAccessCheckers) { try { apiChecker.checkAccess(user, name); } catch (Exception ex) { return null; } } - responseList.add(_apiNameDiscoveryResponseMap.get(name)); + responseList.add(s_apiNameDiscoveryResponseMap.get(name)); } else { - for (String apiName : _apiNameDiscoveryResponseMap.keySet()) { + for (String apiName : s_apiNameDiscoveryResponseMap.keySet()) { boolean isAllowed = true; - for (APIChecker apiChecker : _apiAccessCheckers) { + for (APIChecker apiChecker : s_apiAccessCheckers) { try { - apiChecker.checkAccess(user, name); + apiChecker.checkAccess(user, apiName); } catch (Exception ex) { isAllowed = false; } } if (isAllowed) - responseList.add(_apiNameDiscoveryResponseMap.get(apiName)); + responseList.add(s_apiNameDiscoveryResponseMap.get(apiName)); } } response.setResponses(responseList); From 8608925216e87691bc49fa4417d3446c2b81a5a7 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 15 Jan 2013 18:07:08 -0800 Subject: [PATCH 58/90] Consolidate RuntimeCloudException and CloudRuntimeException into one class CloudRuntimeException, and removed RuntimeCloudException to avoid confusion. --- .../CloudAuthenticationException.java | 4 +- .../exception/CloudExecutionException.java | 4 +- .../cloudstack/api/ServerApiException.java | 4 +- .../simulator/SimulatorRuntimeException.java | 4 +- .../com/cloud/async/AsyncCommandQueued.java | 4 +- .../exception/CloudRuntimeException.java | 48 ++++++++++-- .../HypervisorVersionChangedException.java | 4 +- .../exception/RuntimeCloudException.java | 75 ------------------- 8 files changed, 55 insertions(+), 92 deletions(-) delete mode 100644 utils/src/com/cloud/utils/exception/RuntimeCloudException.java diff --git a/api/src/com/cloud/exception/CloudAuthenticationException.java b/api/src/com/cloud/exception/CloudAuthenticationException.java index 2bba79bab1e..0bf114c0394 100644 --- a/api/src/com/cloud/exception/CloudAuthenticationException.java +++ b/api/src/com/cloud/exception/CloudAuthenticationException.java @@ -17,9 +17,9 @@ package com.cloud.exception; import com.cloud.utils.SerialVersionUID; -import com.cloud.utils.exception.RuntimeCloudException; +import com.cloud.utils.exception.CloudRuntimeException; -public class CloudAuthenticationException extends RuntimeCloudException { +public class CloudAuthenticationException extends CloudRuntimeException { private static final long serialVersionUID = SerialVersionUID.CloudAuthenticationException; public CloudAuthenticationException(String message) { diff --git a/api/src/com/cloud/exception/CloudExecutionException.java b/api/src/com/cloud/exception/CloudExecutionException.java index d8d70f8ddb5..c19fc459a8d 100755 --- a/api/src/com/cloud/exception/CloudExecutionException.java +++ b/api/src/com/cloud/exception/CloudExecutionException.java @@ -17,14 +17,14 @@ package com.cloud.exception; import java.util.HashMap; -import com.cloud.utils.exception.RuntimeCloudException; +import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.SerialVersionUID; /** * */ -public class CloudExecutionException extends RuntimeCloudException { +public class CloudExecutionException extends CloudRuntimeException { private final static long serialVersionUID = SerialVersionUID.CloudExecutionException; private final ErrorCode code; diff --git a/api/src/org/apache/cloudstack/api/ServerApiException.java b/api/src/org/apache/cloudstack/api/ServerApiException.java index 70fd34e5cf7..1f57b74745d 100644 --- a/api/src/org/apache/cloudstack/api/ServerApiException.java +++ b/api/src/org/apache/cloudstack/api/ServerApiException.java @@ -15,10 +15,10 @@ // specific language governing permissions and limitations // under the License. package org.apache.cloudstack.api; -import com.cloud.utils.exception.RuntimeCloudException; +import com.cloud.utils.exception.CloudRuntimeException; @SuppressWarnings("serial") -public class ServerApiException extends RuntimeCloudException { +public class ServerApiException extends CloudRuntimeException { private int _errorCode; private String _description; diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java index 9891bc82556..9f24bbd0cfc 100644 --- a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java +++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java @@ -18,12 +18,12 @@ package com.cloud.simulator; import com.cloud.utils.SerialVersionUID; -import com.cloud.utils.exception.RuntimeCloudException; +import com.cloud.utils.exception.CloudRuntimeException; /** * wrap exceptions that you know there's no point in dealing with. */ -public class SimulatorRuntimeException extends RuntimeCloudException { +public class SimulatorRuntimeException extends CloudRuntimeException { private static final long serialVersionUID = SerialVersionUID.CloudRuntimeException; diff --git a/server/src/com/cloud/async/AsyncCommandQueued.java b/server/src/com/cloud/async/AsyncCommandQueued.java index 200b40e71b5..f01c214564b 100644 --- a/server/src/com/cloud/async/AsyncCommandQueued.java +++ b/server/src/com/cloud/async/AsyncCommandQueued.java @@ -17,9 +17,9 @@ package com.cloud.async; import com.cloud.utils.SerialVersionUID; -import com.cloud.utils.exception.RuntimeCloudException; +import com.cloud.utils.exception.CloudRuntimeException; -public class AsyncCommandQueued extends RuntimeCloudException { +public class AsyncCommandQueued extends CloudRuntimeException { private static final long serialVersionUID = SerialVersionUID.AsyncCommandQueued; private SyncQueueVO _queue = null; diff --git a/utils/src/com/cloud/utils/exception/CloudRuntimeException.java b/utils/src/com/cloud/utils/exception/CloudRuntimeException.java index 78075947d3f..3862e2223d6 100755 --- a/utils/src/com/cloud/utils/exception/CloudRuntimeException.java +++ b/utils/src/com/cloud/utils/exception/CloudRuntimeException.java @@ -16,24 +16,62 @@ // under the License. package com.cloud.utils.exception; +import java.util.ArrayList; + +import com.cloud.utils.AnnotationHelper; import com.cloud.utils.SerialVersionUID; /** * wrap exceptions that you know there's no point in dealing with. */ -public class CloudRuntimeException extends RuntimeCloudException { +public class CloudRuntimeException extends RuntimeException { private static final long serialVersionUID = SerialVersionUID.CloudRuntimeException; - + + // This holds a list of uuids and their names. Add uuid:fieldname pairs + protected ArrayList idList = new ArrayList(); + + protected int csErrorCode; + + public CloudRuntimeException(String message) { super(message); + setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } - + public CloudRuntimeException(String message, Throwable th) { super(message, th); + setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); } - - protected CloudRuntimeException() { + + public CloudRuntimeException() { super(); + setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); + } + + public void addProxyObject(String uuid) { + idList.add(uuid); + return; + } + + public void addProxyObject(Object voObj, Long id, String idFieldName) { + // Get the VO object's table name. + String tablename = AnnotationHelper.getTableName(voObj); + if (tablename != null) { + addProxyObject(tablename, id, idFieldName); + } + return; + } + + public ArrayList getIdProxyList() { + return idList; + } + + public void setCSErrorCode(int cserrcode) { + this.csErrorCode = cserrcode; + } + + public int getCSErrorCode() { + return this.csErrorCode; } } diff --git a/utils/src/com/cloud/utils/exception/HypervisorVersionChangedException.java b/utils/src/com/cloud/utils/exception/HypervisorVersionChangedException.java index 4f637cb46be..2c0c1ccd68b 100755 --- a/utils/src/com/cloud/utils/exception/HypervisorVersionChangedException.java +++ b/utils/src/com/cloud/utils/exception/HypervisorVersionChangedException.java @@ -18,10 +18,10 @@ package com.cloud.utils.exception; import com.cloud.utils.SerialVersionUID; -public class HypervisorVersionChangedException extends RuntimeCloudException { +public class HypervisorVersionChangedException extends CloudRuntimeException { private static final long serialVersionUID = SerialVersionUID.CloudRuntimeException; - + public HypervisorVersionChangedException(String message) { super(message); } diff --git a/utils/src/com/cloud/utils/exception/RuntimeCloudException.java b/utils/src/com/cloud/utils/exception/RuntimeCloudException.java deleted file mode 100644 index 52229800785..00000000000 --- a/utils/src/com/cloud/utils/exception/RuntimeCloudException.java +++ /dev/null @@ -1,75 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.utils.exception; - -import com.cloud.utils.AnnotationHelper; -import java.util.ArrayList; - -/** - * by the API response serializer. Any exceptions that are thrown by - * class, which extends Exception instead of RuntimeException like this - * class does. - */ - -public class RuntimeCloudException extends RuntimeException { - - // This holds a list of uuids and their names. Add uuid:fieldname pairs - protected ArrayList idList = new ArrayList(); - - protected int csErrorCode; - - public void addProxyObject(String uuid) { - idList.add(uuid); - return; - } - - public RuntimeCloudException(String message) { - super(message); - setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); - } - - public RuntimeCloudException(String message, Throwable cause) { - super(message, cause); - setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); - } - - public void addProxyObject(Object voObj, Long id, String idFieldName) { - // Get the VO object's table name. - String tablename = AnnotationHelper.getTableName(voObj); - if (tablename != null) { - addProxyObject(tablename, id, idFieldName); - } - return; - } - - public RuntimeCloudException() { - super(); - setCSErrorCode(CSExceptionErrorCode.getCSErrCode(this.getClass().getName())); - } - - public ArrayList getIdProxyList() { - return idList; - } - - public void setCSErrorCode(int cserrcode) { - this.csErrorCode = cserrcode; - } - - public int getCSErrorCode() { - return this.csErrorCode; - } -} From 939acb0f4c951f8c04de78cf897c8f6a25b1f05d Mon Sep 17 00:00:00 2001 From: Min Chen Date: Tue, 15 Jan 2013 18:17:35 -0800 Subject: [PATCH 59/90] Remove unused CloudExecutionException. --- .../exception/CloudExecutionException.java | 57 ------------------- api/src/com/cloud/exception/ErrorCode.java | 52 ----------------- 2 files changed, 109 deletions(-) delete mode 100755 api/src/com/cloud/exception/CloudExecutionException.java delete mode 100755 api/src/com/cloud/exception/ErrorCode.java diff --git a/api/src/com/cloud/exception/CloudExecutionException.java b/api/src/com/cloud/exception/CloudExecutionException.java deleted file mode 100755 index c19fc459a8d..00000000000 --- a/api/src/com/cloud/exception/CloudExecutionException.java +++ /dev/null @@ -1,57 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.exception; - -import java.util.HashMap; - -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.SerialVersionUID; - -/** - * - */ -public class CloudExecutionException extends CloudRuntimeException { - private final static long serialVersionUID = SerialVersionUID.CloudExecutionException; - - private final ErrorCode code; - private final HashMap details; - - public CloudExecutionException(ErrorCode code, String message, Throwable cause) { - super(message, cause); - this.code = code; - details = new HashMap(); - } - - public ErrorCode getErrorCode() { - return code; - } - - public String getErrorMessage() { - return new StringBuilder("Error Code=").append(code).append("; Error Message=").append(super.toString()).toString(); - } - - @Override - public String toString() { - StringBuilder buff = new StringBuilder(); - buff.append("Error Code=").append(code); - buff.append("; Error Message=").append(super.toString()); - if (details.size() > 0) { - buff.append("; Error Details=").append(details.toString()); - } - return buff.toString(); - } -} diff --git a/api/src/com/cloud/exception/ErrorCode.java b/api/src/com/cloud/exception/ErrorCode.java deleted file mode 100755 index 8f048b84800..00000000000 --- a/api/src/com/cloud/exception/ErrorCode.java +++ /dev/null @@ -1,52 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.exception; - -import java.util.HashSet; - -/** - */ -public class ErrorCode { - String code; - private static HashSet s_codes = new HashSet(); - - public ErrorCode(String code) { - this.code = code; - assert !s_codes.contains(this) : "There is already an error code registered for this code: " + code; - s_codes.add(this); - } - - public String getCode() { - return code; - } - - @Override - public int hashCode() { - return code.hashCode(); - } - - @Override - public boolean equals(Object that) { - if (!(that instanceof ErrorCode)) { - return false; - } - - return this.code.equals(((ErrorCode)that).code); - } - - public final static ErrorCode UnableToReachResource = new ErrorCode("resource.unavailable"); -} From c7840cf91f215988f8e02d2d33f389e461afc49b Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Wed, 16 Jan 2013 15:10:27 +0530 Subject: [PATCH 60/90] reverting the earlier commit 432ea9c7d4aff3f7e682f2951f49ed3e95778d9f done for bug CLOUDSTACK-265 due to IP clearence issues. --- api/src/com/cloud/network/Network.java | 1 - .../com/cloud/offering/NetworkOffering.java | 2 - .../ConfigurationManagerImpl.java | 34 +++------- .../cloud/network/rules/RulesManagerImpl.java | 35 ++-------- .../cloud/offerings/NetworkOfferingVO.java | 28 +------- .../cloud/server/ConfigurationServerImpl.java | 3 +- .../com/cloud/upgrade/dao/Upgrade40to41.java | 40 +---------- .../src/com/cloud/vm/UserVmManagerImpl.java | 68 ++++++------------- setup/db/create-schema.sql | 1 - setup/db/db/schema-40to410.sql | 1 - 10 files changed, 39 insertions(+), 174 deletions(-) diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java index 39a0b26c76a..c91f6a9b80d 100644 --- a/api/src/com/cloud/network/Network.java +++ b/api/src/com/cloud/network/Network.java @@ -170,7 +170,6 @@ public interface Network extends ControlledEntity, InternalIdentity, Identity { public static final Capability AllowDnsSuffixModification = new Capability("AllowDnsSuffixModification"); public static final Capability RedundantRouter = new Capability("RedundantRouter"); public static final Capability ElasticIp = new Capability("ElasticIp"); - public static final Capability AssociatePublicIP = new Capability("AssociatePublicIP"); public static final Capability ElasticLb = new Capability("ElasticLb"); public static final Capability AutoScaleCounters = new Capability("AutoScaleCounters"); public static final Capability InlineMode = new Capability("InlineMode"); diff --git a/api/src/com/cloud/offering/NetworkOffering.java b/api/src/com/cloud/offering/NetworkOffering.java index b69ad886eaa..f2c4de520a1 100644 --- a/api/src/com/cloud/offering/NetworkOffering.java +++ b/api/src/com/cloud/offering/NetworkOffering.java @@ -105,8 +105,6 @@ public interface NetworkOffering extends InfrastructureEntity, InternalIdentity, boolean getElasticIp(); - boolean getAssociatePublicIP(); - boolean getElasticLb(); boolean getSpecifyIpRanges(); diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index b21c5a38bb7..95262797c0d 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -3163,33 +3163,20 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura void validateStaticNatServiceCapablities(Map staticNatServiceCapabilityMap) { if (staticNatServiceCapabilityMap != null && !staticNatServiceCapabilityMap.isEmpty()) { - if (staticNatServiceCapabilityMap.keySet().size() > 2) { - throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " and " + Capability.AssociatePublicIP.getName() + " capabilitiy can be sepcified for static nat service"); + if (staticNatServiceCapabilityMap.keySet().size() > 1) { + throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " capability can be specified for static nat service"); } - boolean eipEnabled = false; - boolean eipDisabled = false; - boolean associatePublicIP = true; + for (Capability capability : staticNatServiceCapabilityMap.keySet()) { String value = staticNatServiceCapabilityMap.get(capability); if (capability == Capability.ElasticIp) { - eipEnabled = value.contains("true"); - eipDisabled = value.contains("false"); - if (!eipEnabled && !eipDisabled) { + boolean enabled = value.contains("true"); + boolean disabled = value.contains("false"); + if (!enabled && !disabled) { throw new InvalidParameterValueException("Unknown specified value for " + Capability.ElasticIp.getName()); } - } else if (capability == Capability.AssociatePublicIP) { - if (value.contains("true")) { - associatePublicIP = true; - } else if (value.contains("false")) { - associatePublicIP = false; - } else { - throw new InvalidParameterValueException("Unknown specified value for " + Capability.AssociatePublicIP.getName()); - } } else { - throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " and " + Capability.AssociatePublicIP.getName() + " capabilitiy can be sepcified for static nat service"); - } - if (eipDisabled && associatePublicIP) { - throw new InvalidParameterValueException("Capability " + Capability.AssociatePublicIP.getName() + " can only be set when capability " + Capability.ElasticIp.getName() + " is true"); + throw new InvalidParameterValueException("Only " + Capability.ElasticIp.getName() + " capability can be specified for static nat service"); } } } @@ -3243,7 +3230,6 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura boolean sharedSourceNat = false; boolean redundantRouter = false; boolean elasticIp = false; - boolean associatePublicIp = false; boolean inline = false; if (serviceCapabilityMap != null && !serviceCapabilityMap.isEmpty()) { Map lbServiceCapabilityMap = serviceCapabilityMap.get(Service.Lb); @@ -3293,17 +3279,13 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura String param = staticNatServiceCapabilityMap.get(Capability.ElasticIp); if (param != null) { elasticIp = param.contains("true"); - String associatePublicIP = staticNatServiceCapabilityMap.get(Capability.AssociatePublicIP); - if (associatePublicIP != null) { - associatePublicIp = associatePublicIP.contains("true"); - } } } } NetworkOfferingVO offering = new NetworkOfferingVO(name, displayText, trafficType, systemOnly, specifyVlan, networkRate, multicastRate, isDefault, availability, tags, type, conserveMode, dedicatedLb, - sharedSourceNat, redundantRouter, elasticIp, elasticLb, associatePublicIp, specifyIpRanges, inline); + sharedSourceNat, redundantRouter, elasticIp, elasticLb, specifyIpRanges, inline); if (serviceOfferingId != null) { offering.setServiceOfferingId(serviceOfferingId); diff --git a/server/src/com/cloud/network/rules/RulesManagerImpl.java b/server/src/com/cloud/network/rules/RulesManagerImpl.java index dd091740021..a75aca3a522 100755 --- a/server/src/com/cloud/network/rules/RulesManagerImpl.java +++ b/server/src/com/cloud/network/rules/RulesManagerImpl.java @@ -16,18 +16,6 @@ // under the License. package com.cloud.network.rules; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - -import org.apache.cloudstack.api.command.user.firewall.ListPortForwardingRulesCmd; -import org.apache.log4j.Logger; - import com.cloud.configuration.ConfigurationManager; import com.cloud.domain.dao.DomainDao; import com.cloud.event.ActionEvent; @@ -65,13 +53,8 @@ import com.cloud.utils.Pair; import com.cloud.utils.Ternary; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; -import com.cloud.utils.db.DB; -import com.cloud.utils.db.Filter; -import com.cloud.utils.db.JoinBuilder; -import com.cloud.utils.db.SearchBuilder; -import com.cloud.utils.db.SearchCriteria; +import com.cloud.utils.db.*; import com.cloud.utils.db.SearchCriteria.Op; -import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.Ip; import com.cloud.vm.Nic; @@ -80,6 +63,7 @@ import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.Type; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; +import org.apache.cloudstack.api.command.user.firewall.ListPortForwardingRulesCmd; import org.apache.log4j.Logger; import javax.ejb.Local; @@ -1189,12 +1173,11 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { Network guestNetwork = _networkMgr.getNetwork(ipAddress.getAssociatedWithNetworkId()); NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); if (offering.getElasticIp()) { - if (offering.getAssociatePublicIP()) { - getSystemIpAndEnableStaticNatForVm(_vmDao.findById(vmId), true); - return true; - } + getSystemIpAndEnableStaticNatForVm(_vmDao.findById(vmId), true); + return true; + } else { + return disableStaticNat(ipId, caller, ctx.getCallerUserId(), false); } - return disableStaticNat(ipId, caller, ctx.getCallerUserId(), false); } @Override @@ -1380,11 +1363,6 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { Network guestNetwork = _networkMgr.getNetwork(nic.getNetworkId()); NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); if (offering.getElasticIp()) { - boolean isSystemVM = (vm.getType() == Type.ConsoleProxy || vm.getType() == Type.SecondaryStorageVm); - // for user VM's associate public IP only if offering is marked to associate a public IP by default on start of VM - if (!isSystemVM && !offering.getAssociatePublicIP()) { - continue; - } // check if there is already static nat enabled if (_ipAddressDao.findByAssociatedVmId(vm.getId()) != null && !getNewIp) { s_logger.debug("Vm " + vm + " already has ip associated with it in guest network " + guestNetwork); @@ -1399,6 +1377,7 @@ public class RulesManagerImpl implements RulesManager, RulesService, Manager { s_logger.debug("Allocated system ip " + ip + ", now enabling static nat on it for vm " + vm); + boolean isSystemVM = (vm.getType() == Type.ConsoleProxy || vm.getType() == Type.SecondaryStorageVm); try { success = enableStaticNat(ip.getId(), vm.getId(), guestNetwork.getId(), isSystemVM); } catch (NetworkRuleConflictException ex) { diff --git a/server/src/com/cloud/offerings/NetworkOfferingVO.java b/server/src/com/cloud/offerings/NetworkOfferingVO.java index 8de93d87b54..efaca764020 100755 --- a/server/src/com/cloud/offerings/NetworkOfferingVO.java +++ b/server/src/com/cloud/offerings/NetworkOfferingVO.java @@ -16,26 +16,10 @@ // under the License. package com.cloud.offerings; -import com.cloud.network.Networks; - -import java.util.Date; -import java.util.UUID; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -import org.apache.cloudstack.api.Identity; import com.cloud.network.Network; import com.cloud.network.Networks.TrafficType; import com.cloud.offering.NetworkOffering; import com.cloud.utils.db.GenericDao; -import org.apache.cloudstack.api.InternalIdentity; import javax.persistence.*; import java.util.Date; @@ -129,9 +113,6 @@ public class NetworkOfferingVO implements NetworkOffering { @Column(name = "elastic_lb_service") boolean elasticLb; - @Column(name = "eip_associate_public_ip") - boolean eipAssociatePublicIp; - @Column(name = "inline") boolean inline; @@ -295,21 +276,19 @@ public class NetworkOfferingVO implements NetworkOffering { this.redundantRouter = false; this.elasticIp = false; this.elasticLb = false; - this.eipAssociatePublicIp = true; this.inline = false; this.specifyIpRanges = specifyIpRanges; } public NetworkOfferingVO(String name, String displayText, TrafficType trafficType, boolean systemOnly, boolean specifyVlan, Integer rateMbps, Integer multicastRateMbps, boolean isDefault, Availability availability, String tags, Network.GuestType guestType, boolean conserveMode, boolean dedicatedLb, boolean sharedSourceNat, boolean redundantRouter, boolean elasticIp, boolean elasticLb, - boolean associatePublicIP, boolean specifyIpRanges, boolean inline) { + boolean specifyIpRanges, boolean inline) { this(name, displayText, trafficType, systemOnly, specifyVlan, rateMbps, multicastRateMbps, isDefault, availability, tags, guestType, conserveMode, specifyIpRanges); this.dedicatedLB = dedicatedLb; this.sharedSourceNat = sharedSourceNat; this.redundantRouter = redundantRouter; this.elasticIp = elasticIp; this.elasticLb = elasticLb; - this.eipAssociatePublicIp = associatePublicIP; this.inline = inline; } @@ -372,11 +351,6 @@ public class NetworkOfferingVO implements NetworkOffering { return elasticIp; } - @Override - public boolean getAssociatePublicIP() { - return eipAssociatePublicIp; - } - @Override public boolean getElasticLb() { return elasticLb; diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index 7e5f42445d5..5d246281630 100755 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -70,7 +70,6 @@ import com.cloud.utils.db.Transaction; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; import com.cloud.utils.script.Script; -import com.cloud.uuididentity.dao.IdentityDao; import org.apache.commons.codec.binary.Base64; import org.apache.log4j.Logger; @@ -972,7 +971,7 @@ public class ConfigurationServerImpl implements ConfigurationServer { "Offering for Shared networks with Elastic IP and Elastic LB capabilities", TrafficType.Guest, false, true, null, null, true, Availability.Optional, - null, Network.GuestType.Shared, true, false, false, false, true, true, true, true, false); + null, Network.GuestType.Shared, true, false, false, false, true, true, true, false); defaultNetscalerNetworkOffering.setState(NetworkOffering.State.Enabled); defaultNetscalerNetworkOffering = _networkOfferingDao.persistDefaultNetworkOffering(defaultNetscalerNetworkOffering); diff --git a/server/src/com/cloud/upgrade/dao/Upgrade40to41.java b/server/src/com/cloud/upgrade/dao/Upgrade40to41.java index e23837d49f8..cd9e20c6a46 100644 --- a/server/src/com/cloud/upgrade/dao/Upgrade40to41.java +++ b/server/src/com/cloud/upgrade/dao/Upgrade40to41.java @@ -22,12 +22,6 @@ import com.cloud.utils.script.Script; import java.io.File; import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; - -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.script.Script; /** * @author htrippaers @@ -84,7 +78,7 @@ public class Upgrade40to41 implements DbUpgrade { */ @Override public void performDataMigration(Connection conn) { - upgradeEIPNetworkOfferings(conn); + } /* (non-Javadoc) @@ -95,36 +89,4 @@ public class Upgrade40to41 implements DbUpgrade { return new File[0]; } - private void upgradeEIPNetworkOfferings(Connection conn) { - PreparedStatement pstmt = null; - ResultSet rs = null; - - try { - pstmt = conn.prepareStatement("select id, elastic_ip_service from `cloud`.`network_offerings` where traffic_type='Guest'"); - rs = pstmt.executeQuery(); - while (rs.next()) { - long id = rs.getLong(1); - // check if elastic IP service is enabled for network offering - if (rs.getLong(2) != 0) { - //update network offering with eip_associate_public_ip set to true - pstmt = conn.prepareStatement("UPDATE `cloud`.`network_offerings` set eip_associate_public_ip=? where id=?"); - pstmt.setBoolean(1, true); - pstmt.setLong(2, id); - pstmt.executeUpdate(); - } - } - } catch (SQLException e) { - throw new CloudRuntimeException("Unable to set elastic_ip_service for network offerings with EIP service enabled.", e); - } finally { - try { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - } catch (SQLException e) { - } - } - } } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index f3aca68172f..a6fbdb17915 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -16,32 +16,6 @@ // under the License. package com.cloud.vm; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - -import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; -import org.apache.cloudstack.api.command.user.vm.*; -import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd; -import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd; -import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd; -import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd; -import org.apache.commons.codec.binary.Base64; -import org.apache.log4j.Logger; - -import org.apache.cloudstack.acl.ControlledEntity.ACLType; -import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.agent.AgentManager; import com.cloud.agent.api.*; import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; @@ -53,17 +27,6 @@ import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; import com.cloud.api.query.dao.UserVmJoinDao; import com.cloud.api.query.vo.UserVmJoinVO; - -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; -import org.apache.cloudstack.api.command.user.vm.DeployVMCmd; -import org.apache.cloudstack.api.command.user.vm.DestroyVMCmd; -import org.apache.cloudstack.api.command.user.vm.RebootVMCmd; -import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; -import org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd; -import org.apache.cloudstack.api.command.user.vm.RestoreVMCmd; -import org.apache.cloudstack.api.command.user.vm.UpdateVMCmd; -import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd; import com.cloud.async.AsyncJobExecutor; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; @@ -151,12 +114,7 @@ import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.crypt.RSAHelper; -import com.cloud.utils.db.DB; -import com.cloud.utils.db.Filter; -import com.cloud.utils.db.GlobalLock; -import com.cloud.utils.db.SearchBuilder; -import com.cloud.utils.db.SearchCriteria; -import com.cloud.utils.db.Transaction; +import com.cloud.utils.db.*; import com.cloud.utils.db.SearchCriteria.Func; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.ExecutionException; @@ -164,6 +122,26 @@ import com.cloud.utils.fsm.NoTransitionException; import com.cloud.utils.net.NetUtils; import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.*; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd; +import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd; +import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd; +import org.apache.cloudstack.api.command.user.vm.*; +import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd; +import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd; +import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd; +import org.apache.commons.codec.binary.Base64; +import org.apache.log4j.Logger; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; +import java.util.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; @Local(value = { UserVmManager.class, UserVmService.class }) public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager { @@ -2788,10 +2766,6 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (ip != null && ip.getSystem()) { UserContext ctx = UserContext.current(); try { - long networkId = ip.getAssociatedWithNetworkId(); - Network guestNetwork = _networkMgr.getNetwork(networkId); - NetworkOffering offering = _configMgr.getNetworkOffering(guestNetwork.getNetworkOfferingId()); - assert (offering.getAssociatePublicIP() == true) : "User VM should not have system owned public IP associated with it when offering configured not to associate public IP."; _rulesMgr.disableStaticNat(ip.getId(), ctx.getCaller(), ctx.getCallerUserId(), true); } catch (Exception ex) { s_logger.warn("Failed to disable static nat and release system ip " + ip + " as a part of vm " + profile.getVirtualMachine() + " stop due to exception ", ex); diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql index 37d52539f16..174f53cd7ba 100755 --- a/setup/db/create-schema.sql +++ b/setup/db/create-schema.sql @@ -306,7 +306,6 @@ CREATE TABLE `cloud`.`network_offerings` ( `state` char(32) COMMENT 'state of the network offering that has Disabled value by default', `guest_type` char(32) COMMENT 'type of guest network that can be shared or isolated', `elastic_ip_service` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if the network offering provides elastic ip service', - `eip_associate_public_ip` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if public IP is associated with user VM creation by default when EIP service is enabled.', `elastic_lb_service` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if the network offering provides elastic lb service', `specify_ip_ranges` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if the network offering provides an ability to define ip ranges', `inline` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'Is this network offering LB provider is in inline mode', diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index bf3fb303e5b..c115135d006 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -58,7 +58,6 @@ ALTER TABLE `cloud`.`snapshots` ADD COLUMN `s3_id` bigint unsigned COMMENT 'S3 t ALTER TABLE `cloud`.`snapshots` ADD CONSTRAINT `fk_snapshots__s3_id` FOREIGN KEY `fk_snapshots__s3_id` (`s3_id`) REFERENCES `s3` (`id`); -ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `eip_associate_public_ip` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'true if public IP is associated with user VM creation by default when EIP service is enabled.' AFTER `elastic_ip_service`; ALTER TABLE `cloud`.`network_offerings` ADD COLUMN `inline` int(1) unsigned NOT NULL DEFAULT 0 COMMENT 'Is this network offering LB provider is in inline mode'; ALTER TABLE `cloud`.`external_load_balancer_devices` DROP COLUMN `is_inline`; From 156ed7a336643963040aa485406da8cd0e0564ed Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Wed, 16 Jan 2013 15:58:44 +0530 Subject: [PATCH 61/90] Revert "Summary: partical check-in for L4-L7 network services in the shared" Reverting due to IP clearance issued for the commit done as part of CLOUDSTACK-312 This reverts commit d4c604cfd8ec6b385de7abf694a936e89add0f38. --- .../com/cloud/network/NetworkManagerImpl.java | 80 +++++++------------ 1 file changed, 29 insertions(+), 51 deletions(-) diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 206392dce49..47db4cb82ae 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -980,14 +980,14 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "allocating Ip", create = true) - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) + public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { - if (networkId != null) { Network network = _networksDao.findById(networkId); if (network == null) { throw new InvalidParameterValueException("Invalid network id is given"); } + if (network.getGuestType() == Network.GuestType.Shared) { DataCenter zone = _configMgr.getZone(zoneId); if (zone == null) { @@ -1002,9 +1002,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (s_logger.isDebugEnabled()) { s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId()); } - return allocateIp(ipOwner, false, caller, zone); + return allocateIp(ipOwner, false, caller, callerUserId, zone); } else { - throw new InvalidParameterValueException("Associate IP address can only be called on the shared networks in the advanced zone" + + throw new InvalidParameterValueException("Associate IP address can only called on the shared networks in the advanced zone" + " with Firewall/Source Nat/Static Nat/Port Forwarding/Load balancing services enabled"); } } @@ -1022,11 +1022,11 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag DataCenter zone = _configMgr.getZone(zoneId); - return allocateIp(ipOwner, isSystem, caller, zone); + return allocateIp(ipOwner, isSystem, caller, callerUserId, zone); } @DB - public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, DataCenter zone) + public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, long callerUserId, DataCenter zone) throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException { @@ -1047,7 +1047,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Account accountToLock = null; try { if (s_logger.isDebugEnabled()) { - s_logger.debug("Associate IP address called by the user " + caller.getId()); + s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId()); } accountToLock = _accountDao.acquireInLockTable(ipOwner.getId()); if (accountToLock == null) { @@ -1133,13 +1133,8 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } DataCenter zone = _configMgr.getZone(network.getDataCenterId()); - if (network.getGuestType() == Network.GuestType.Shared && zone.getNetworkType() == NetworkType.Advanced) { - if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId())) { - _accountMgr.checkAccess(UserContext.current().getCaller(), AccessType.UseNetwork, false, network); - } else { - throw new InvalidParameterValueException("IP can be associated with guest network of 'shared' type only if" + - "network service Source Nat, Static Nat, Port Forwarding, Load balancing, firewall are enabled in the network"); - } + if (network.getGuestType() == Network.GuestType.Shared && zone.getNetworkType() == NetworkType.Advanced && isSharedNetworkOfferingWithServices(network.getNetworkOfferingId())) { + _accountMgr.checkAccess(UserContext.current().getCaller(), AccessType.UseNetwork, false, network); } else { _accountMgr.checkAccess(caller, null, true, ipToAssoc); } @@ -2011,11 +2006,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - @Override - public boolean equals(Object o) { - return super.equals(o); //To change body of overridden methods use File | Settings | File Templates. - } - private void implementNetworkElementsAndResources(DeployDestination dest, ReservationContext context, NetworkVO network, NetworkOfferingVO offering) throws ConcurrentOperationException, InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException { @@ -2510,36 +2500,17 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - private void checkSharedNetworkCidrOverlap(Long zoneId, long physicalNetworkId, String cidr) { - if (zoneId == null || cidr == null) { + private void checkSharedNetworkCidrOverlap(Long zoneId, String cidr) { + if (zoneId == null) { return; } - DataCenter zone = _dcDao.findById(zoneId); - List networks = _networksDao.listByZone(zoneId); - Map networkToCidr = new HashMap(); - - // check for CIDR overlap with all possible CIDR for isolated guest networks - // in the zone when using external networking - PhysicalNetworkVO pNetwork = _physicalNetworkDao.findById(physicalNetworkId); - if (pNetwork.getVnet() != null) { - String vlanRange[] = pNetwork.getVnet().split("-"); - int lowestVlanTag = Integer.valueOf(vlanRange[0]); - int highestVlanTag = Integer.valueOf(vlanRange[1]); - for (int vlan=lowestVlanTag; vlan <= highestVlanTag; ++vlan) { - int offset = vlan - lowestVlanTag; - String globalVlanBits = _configDao.getValue(Config.GuestVlanBits.key()); - int cidrSize = 8 + Integer.parseInt(globalVlanBits); - String guestNetworkCidr = zone.getGuestNetworkCidr(); - String[] cidrTuple = guestNetworkCidr.split("\\/"); - long newCidrAddress = (NetUtils.ip2Long(cidrTuple[0]) & 0xff000000) | (offset << (32 - cidrSize)); - if (NetUtils.isNetworksOverlap(NetUtils.long2Ip(newCidrAddress), cidr)) { - throw new InvalidParameterValueException("Specified CIDR for shared network conflict with CIDR that is reserved for zone vlan " + vlan); - } - } + if (cidr == null) { + return; } - // check for CIDR overlap with all CIDR's of the shared networks in the zone + List networks = _networksDao.listByZone(zoneId); + Map networkToCidr = new HashMap(); for (NetworkVO network : networks) { if (network.getGuestType() == GuestType.Isolated) { continue; @@ -2548,15 +2519,22 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag networkToCidr.put(network.getId(), network.getCidr()); } } - if (networkToCidr != null && !networkToCidr.isEmpty()) { - for (long networkId : networkToCidr.keySet()) { - String ntwkCidr = networkToCidr.get(networkId); - if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { - throw new InvalidParameterValueException("Specified CIDR for shared network conflict with CIDR of a shared network in the zone."); - } + + //TODO: check for CIDR overlap with all possible CIDR for guest networks in the zone + //when using external networking + + if (networkToCidr == null || networkToCidr.isEmpty()) { + return; + } + + for (long networkId : networkToCidr.keySet()) { + String ntwkCidr = networkToCidr.get(networkId); + if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { + throw new InvalidParameterValueException("Warning: The specified existing network has conflict CIDR subnets with new network!"); } } } + public void checkVirtualNetworkCidrOverlap(Long zoneId, String cidr) { if (zoneId == null) { return; @@ -2784,7 +2762,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag if (ntwkOff.getGuestType() == GuestType.Shared && (zone.getNetworkType() == NetworkType.Advanced) && isSharedNetworkOfferingWithServices(networkOfferingId)) { // validate if CIDR specified overlaps with any of the CIDR's allocated for isolated networks and shared networks in the zone - checkSharedNetworkCidrOverlap(zoneId, pNtwk.getId(), cidr); + checkSharedNetworkCidrOverlap(zoneId, cidr); } else { throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external devices!"); } From 316c5267ccc182e18c4201a72cdf8ccc739e130a Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Wed, 16 Jan 2013 16:04:14 +0530 Subject: [PATCH 62/90] Revert " Summary: check-in for L4-L7 network services in the shared network in" This reverts commit 7fcfcdf91e49d64375171c9ae7fe61067aa59b6e. Reverting due to IP clearance issued for the commit done as part of CLOUDSTACK-312 --- .../com/cloud/network/NetworkManagerImpl.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 47db4cb82ae..f378aa4fd5a 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -2951,11 +2951,10 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag throw new InvalidParameterValueException("Network with vlan " + vlanId + " already exists in zone " + zoneId); } } else { - //don't allow to creating shared network with given Vlan ID, if there already exists a isolated network or - //shared network with same Vlan ID in the zone - if (_networksDao.countByZoneUriAndGuestType(zoneId, uri, GuestType.Isolated) > 0 || - _networksDao.countByZoneUriAndGuestType(zoneId, uri, GuestType.Shared) > 0) { - throw new InvalidParameterValueException("There is a isolated/shared network with vlan id: " + vlanId + " already exists " + "in zone " + zoneId); + //don't allow to create Shared network with Vlan that already exists in the zone for Isolated networks + if (_networksDao.countByZoneUriAndGuestType(zoneId, uri, GuestType.Isolated) > 0) { + throw new InvalidParameterValueException("Isolated network with vlan " + vlanId + " already exists " + + "in zone " + zoneId); } } } @@ -3543,13 +3542,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag applyProfileToNetwork(network, profile); - DataCenterVO zone = _dcDao.findById(network.getDataCenterId()); - if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) && (zone.getNetworkType() == NetworkType.Advanced)) { - network.setState(Network.State.Setup); - } else { - network.setState(Network.State.Allocated); - } - + network.setState(Network.State.Allocated); network.setRestartRequired(false); _networksDao.update(network.getId(), network); _networksDao.clearCheckForGc(networkId); From 88a0b5ac488c6ec3b8a501ee1254a6a962db47fe Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Wed, 16 Jan 2013 16:05:17 +0530 Subject: [PATCH 63/90] Revert "Summary: partical check-in for L4-L7 network services in the shared" This reverts commit 6657246cd44629c30e6ea21cc4bbd43a42788e12. Reverting due to IP clearance issued for the commit done as part of CLOUDSTACK-312 --- .../cloud/network/element/F5ExternalLoadBalancerElement.java | 2 +- .../network/element/JuniperSRXExternalFirewallElement.java | 3 +-- .../src/com/cloud/network/element/NetscalerElement.java | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java index b9739ec21df..70faaccc461 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java +++ b/plugins/network-elements/f5/src/com/cloud/network/element/F5ExternalLoadBalancerElement.java @@ -122,7 +122,7 @@ public class F5ExternalLoadBalancerElement extends ExternalLoadBalancerDeviceMan ConfigurationDao _configDao; private boolean canHandle(Network config) { - if ((config.getGuestType() != Network.GuestType.Isolated && config.getGuestType() != Network.GuestType.Shared) || config.getTrafficType() != TrafficType.Guest) { + 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()); return false; } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java index 6e9d32daa99..ead2af9396d 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java @@ -130,8 +130,7 @@ public class JuniperSRXExternalFirewallElement extends ExternalFirewallDeviceMan private boolean canHandle(Network network, Service service) { DataCenter zone = _configMgr.getZone(network.getDataCenterId()); - if ((zone.getNetworkType() == NetworkType.Advanced && !(network.getGuestType() == Network.GuestType.Isolated || network.getGuestType() == Network.GuestType.Shared )) - || (zone.getNetworkType() == NetworkType.Basic && network.getGuestType() != Network.GuestType.Shared)) { + if ((zone.getNetworkType() == NetworkType.Advanced && network.getGuestType() != Network.GuestType.Isolated) || (zone.getNetworkType() == NetworkType.Basic && network.getGuestType() != Network.GuestType.Shared)) { s_logger.trace("Element " + getProvider().getName() + "is not handling network type = " + network.getGuestType()); return false; } diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java index a1782107e19..c0f91bb42d2 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/element/NetscalerElement.java @@ -154,8 +154,7 @@ StaticNatServiceProvider { private boolean canHandle(Network config, Service service) { DataCenter zone = _dcDao.findById(config.getDataCenterId()); - boolean handleInAdvanceZone = (zone.getNetworkType() == NetworkType.Advanced && - (config.getGuestType() == Network.GuestType.Isolated || config.getGuestType() == Network.GuestType.Shared) && config.getTrafficType() == TrafficType.Guest); + 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)) { From 4b67340d8cda021394892d8e4b0adfba493b42dd Mon Sep 17 00:00:00 2001 From: Murali Reddy Date: Wed, 16 Jan 2013 16:43:37 +0530 Subject: [PATCH 64/90] Revert "Summary: partical check-in for L4-L7 network services in the shared" This reverts commits 0de5a145e4f06420a4eb1867309af674c16ace7c, 28bbf6c52798c9bd298952844250fbc3cb92dce0 Reverting due to IP clearance issues for the commits done as part of CLOUDSTACK-312 --- api/src/com/cloud/network/NetworkService.java | 2 +- .../user/address/AssociateIPAddrCmd.java | 2 +- .../com/cloud/network/NetworkManagerImpl.java | 251 +++--------------- .../cloud/network/MockNetworkManagerImpl.java | 2 +- .../com/cloud/vpc/MockNetworkManagerImpl.java | 35 +-- 5 files changed, 51 insertions(+), 241 deletions(-) diff --git a/api/src/com/cloud/network/NetworkService.java b/api/src/com/cloud/network/NetworkService.java index 39a746e6776..b3332a345b3 100755 --- a/api/src/com/cloud/network/NetworkService.java +++ b/api/src/com/cloud/network/NetworkService.java @@ -41,7 +41,7 @@ public interface NetworkService { List getIsolatedNetworksOwnedByAccountInZone(long zoneId, Account owner); - IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, + IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException; boolean releaseIpAddress(long ipAddressId) throws InsufficientAddressCapacityException; diff --git a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java index 024ba74e8b4..93bb2401d8f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java @@ -213,7 +213,7 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { @Override public void create() throws ResourceAllocationException{ try { - IpAddress ip = _networkService.allocateIP(_accountService.getAccount(getEntityOwnerId()), getZoneId(), getNetworkId()); + IpAddress ip = _networkService.allocateIP(_accountService.getAccount(getEntityOwnerId()), false, getZoneId()); if (ip != null) { this.setEntityId(ip.getId()); diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index f378aa4fd5a..0a1fcd7e66d 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -16,58 +16,19 @@ // under the License. package com.cloud.network; -import java.net.URI; -import java.security.InvalidParameterException; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.TreeSet; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - -import com.cloud.utils.db.*; -import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; -import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; -import org.apache.log4j.Logger; - -import org.apache.cloudstack.acl.ControlledEntity.ACLType; -import org.apache.cloudstack.acl.SecurityChecker.AccessType; import com.cloud.agent.AgentManager; import com.cloud.agent.Listener; import com.cloud.agent.api.*; import com.cloud.agent.api.to.NicTO; import com.cloud.alert.AlertManager; import com.cloud.api.ApiDBUtils; - -import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.Resource.ResourceType; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.*; import com.cloud.dc.DataCenter.NetworkType; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.Pod; -import com.cloud.dc.PodVlanMapVO; -import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; -import com.cloud.dc.VlanVO; import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.PodVlanMapDao; @@ -110,13 +71,6 @@ import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy; import com.cloud.network.lb.LoadBalancingRulesManager; import com.cloud.network.rules.*; import com.cloud.network.rules.FirewallRule.Purpose; -import com.cloud.network.rules.FirewallRuleVO; -import com.cloud.network.rules.PortForwardingRule; -import com.cloud.network.rules.PortForwardingRuleVO; -import com.cloud.network.rules.RulesManager; -import com.cloud.network.rules.StaticNat; -import com.cloud.network.rules.StaticNatRule; -import com.cloud.network.rules.StaticNatRuleImpl; import com.cloud.network.rules.dao.PortForwardingRulesDao; import com.cloud.network.vpc.NetworkACLManager; import com.cloud.network.vpc.PrivateIpVO; @@ -145,30 +99,38 @@ import com.cloud.utils.component.Adapters; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.utils.concurrency.NamedThreadFactory; +import com.cloud.utils.db.*; import com.cloud.utils.db.JoinBuilder.JoinType; import com.cloud.utils.db.SearchCriteria.Op; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.Ip; import com.cloud.utils.net.NetUtils; -import com.cloud.vm.Nic; -import com.cloud.vm.NicProfile; -import com.cloud.vm.NicVO; -import com.cloud.vm.ReservationContext; -import com.cloud.vm.ReservationContextImpl; -import com.cloud.vm.SecondaryStorageVmVO; -import com.cloud.vm.UserVmVO; -import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.VirtualMachine; +import com.cloud.vm.*; import com.cloud.vm.VirtualMachine.Type; -import com.cloud.vm.VirtualMachineProfile; -import com.cloud.vm.VirtualMachineProfileImpl; import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; import com.cloud.vm.dao.VMInstanceDao; import edu.emory.mathcs.backport.java.util.Collections; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; +import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; +import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; +import org.apache.log4j.Logger; +import javax.ejb.Local; +import javax.naming.ConfigurationException; +import java.net.URI; +import java.security.InvalidParameterException; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; import java.util.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; /** * NetworkManagerImpl implements NetworkManager. @@ -980,39 +942,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag @Override @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "allocating Ip", create = true) - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) - throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { - if (networkId != null) { - Network network = _networksDao.findById(networkId); - if (network == null) { - throw new InvalidParameterValueException("Invalid network id is given"); - } - - if (network.getGuestType() == Network.GuestType.Shared) { - DataCenter zone = _configMgr.getZone(zoneId); - if (zone == null) { - throw new InvalidParameterValueException("Invalid zone Id is given"); - } - - // if shared network in the advanced zone, then check the caller against the network for 'AccessType.UseNetwork' - if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) && zone.getNetworkType() == NetworkType.Advanced) { - Account caller = UserContext.current().getCaller(); - long callerUserId = UserContext.current().getCallerUserId(); - _accountMgr.checkAccess(caller, AccessType.UseNetwork, false, network); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId()); - } - return allocateIp(ipOwner, false, caller, callerUserId, zone); - } else { - throw new InvalidParameterValueException("Associate IP address can only called on the shared networks in the advanced zone" + - " with Firewall/Source Nat/Static Nat/Port Forwarding/Load balancing services enabled"); - } - } - } - - return allocateIP(ipOwner, false, zoneId); - } - public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { Account caller = UserContext.current().getCaller(); @@ -1127,17 +1056,7 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag IPAddressVO ipToAssoc = _ipAddressDao.findById(ipId); if (ipToAssoc != null) { - Network network = _networksDao.findById(networkId); - if (network == null) { - throw new InvalidParameterValueException("Invalid network id is given"); - } - - DataCenter zone = _configMgr.getZone(network.getDataCenterId()); - if (network.getGuestType() == Network.GuestType.Shared && zone.getNetworkType() == NetworkType.Advanced && isSharedNetworkOfferingWithServices(network.getNetworkOfferingId())) { - _accountMgr.checkAccess(UserContext.current().getCaller(), AccessType.UseNetwork, false, network); - } else { - _accountMgr.checkAccess(caller, null, true, ipToAssoc); - } + _accountMgr.checkAccess(caller, null, true, ipToAssoc); owner = _accountMgr.getAccount(ipToAssoc.getAllocatedToAccountId()); } else { s_logger.debug("Unable to find ip address by id: " + ipId); @@ -1164,20 +1083,16 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag throw new InvalidParameterValueException("Ip address can be associated to the network with trafficType " + TrafficType.Guest); } - // Check that network belongs to IP owner - skip this check - // - if zone is basic zone as there is just one guest network, - // - if shared network in Advanced zone - // - and it belongs to the system - if (network.getAccountId() != owner.getId()) { - if (zone.getNetworkType() != NetworkType.Basic && !(zone.getNetworkType() == NetworkType.Advanced && network.getGuestType() == Network.GuestType.Shared)) { - throw new InvalidParameterValueException("The owner of the network is not the same as owner of the IP"); - } + // Check that network belongs to IP owner - skip this check for Basic zone as there is just one guest network, + // and it belongs to the system + if (zone.getNetworkType() != NetworkType.Basic && network.getAccountId() != owner.getId()) { + throw new InvalidParameterValueException("The owner of the network is not the same as owner of the IP"); } - // In Advance zone only allow to do IP assoc - // - for Isolated networks with source nat service enabled - // - for shared networks with source nat service enabled - if (zone.getNetworkType() == NetworkType.Advanced && (!areServicesSupportedInNetwork(network.getId(), Service.SourceNat))) { + // In Advance zone only allow to do IP assoc for Isolated networks with source nat service enabled + if (zone.getNetworkType() == NetworkType.Advanced && + !(network.getGuestType() == GuestType.Isolated && areServicesSupportedInNetwork(network.getId(), + Service.SourceNat))) { throw new InvalidParameterValueException("In zone of type " + NetworkType.Advanced + " ip address can be associated only to the network of guest type " + GuestType.Isolated + " with the " + Service.SourceNat.getName() + " enabled"); @@ -1948,21 +1863,12 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag try { NetworkGuru guru = _networkGurus.get(network.getGuruName()); Network.State state = network.getState(); - if (state == Network.State.Implemented || state == Network.State.Implementing) { + if (state == Network.State.Implemented || state == Network.State.Setup || state == Network.State.Implementing) { s_logger.debug("Network id=" + networkId + " is already implemented"); implemented.set(guru, network); return implemented; } - if (state == Network.State.Setup) { - DataCenterVO zone = _dcDao.findById(network.getDataCenterId()); - if (!isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) || (zone.getNetworkType() == NetworkType.Basic)) { - s_logger.debug("Network id=" + networkId + " is already implemented"); - implemented.set(guru, network); - return implemented; - } - } - if (s_logger.isDebugEnabled()) { s_logger.debug("Asking " + guru.getName() + " to implement " + network); } @@ -2010,16 +1916,15 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag NetworkVO network, NetworkOfferingVO offering) throws ConcurrentOperationException, InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException { - // Associate a source NAT IP (if one isn't already associated with the network) if this is a - // 1) 'Isolated' or 'Shared' guest virtual network in the advance zone - // 2) network has sourceNat service - // 3) network offering does not support a shared source NAT rule + // If this is a 1) guest virtual network 2) network has sourceNat service 3) network offering does not support a + // Shared source NAT rule, + // associate a source NAT IP (if one isn't already associated with the network) boolean sharedSourceNat = offering.getSharedSourceNat(); DataCenter zone = _dcDao.findById(network.getDataCenterId()); - if (!sharedSourceNat && areServicesSupportedInNetwork(network.getId(), Service.SourceNat) - && (network.getGuestType() == Network.GuestType.Isolated || - (network.getGuestType() == Network.GuestType.Shared && zone.getNetworkType() == NetworkType.Advanced))) { + if (network.getGuestType() == Network.GuestType.Isolated + && areServicesSupportedInNetwork(network.getId(), Service.SourceNat) + && !sharedSourceNat) { List ips = null; if (network.getVpcId() != null) { @@ -2500,70 +2405,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag } } - private void checkSharedNetworkCidrOverlap(Long zoneId, String cidr) { - if (zoneId == null) { - return; - } - - if (cidr == null) { - return; - } - - List networks = _networksDao.listByZone(zoneId); - Map networkToCidr = new HashMap(); - for (NetworkVO network : networks) { - if (network.getGuestType() == GuestType.Isolated) { - continue; - } - if (network.getCidr() != null) { - networkToCidr.put(network.getId(), network.getCidr()); - } - } - - //TODO: check for CIDR overlap with all possible CIDR for guest networks in the zone - //when using external networking - - if (networkToCidr == null || networkToCidr.isEmpty()) { - return; - } - - for (long networkId : networkToCidr.keySet()) { - String ntwkCidr = networkToCidr.get(networkId); - if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { - throw new InvalidParameterValueException("Warning: The specified existing network has conflict CIDR subnets with new network!"); - } - } - } - - public void checkVirtualNetworkCidrOverlap(Long zoneId, String cidr) { - if (zoneId == null) { - return; - } - if (cidr == null) { - return; - } - List networks = _networksDao.listByZone(zoneId); - Map networkToCidr = new HashMap(); - for (NetworkVO network : networks) { - if (network.getGuestType() != GuestType.Isolated) { - continue; - } - if (network.getCidr() != null) { - networkToCidr.put(network.getId(), network.getCidr()); - } - } - if (networkToCidr == null || networkToCidr.isEmpty()) { - return; - } - - for (long networkId : networkToCidr.keySet()) { - String ntwkCidr = networkToCidr.get(networkId); - if (NetUtils.isNetworksOverlap(ntwkCidr, cidr)) { - throw new InvalidParameterValueException("Warning: The specified existing network has conflict CIDR subnets with new network!"); - } - } - } - @Override @DB @ActionEvent(eventType = EventTypes.EVENT_NETWORK_CREATE, eventDescription = "creating network") @@ -2759,16 +2600,9 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag Collection ntwkProviders = finalizeServicesAndProvidersForNetwork(ntwkOff, physicalNetworkId).values(); if (cidr != null && providersConfiguredForExternalNetworking(ntwkProviders)) { - if (ntwkOff.getGuestType() == GuestType.Shared && (zone.getNetworkType() == NetworkType.Advanced) && - isSharedNetworkOfferingWithServices(networkOfferingId)) { - // validate if CIDR specified overlaps with any of the CIDR's allocated for isolated networks and shared networks in the zone - checkSharedNetworkCidrOverlap(zoneId, cidr); - } else { - throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external devices!"); - } + throw new InvalidParameterValueException("Cannot specify CIDR when using network offering with external devices!"); } - // Vlan is created in 2 cases - works in Advance zone only: // 1) GuestType is Shared // 2) GuestType is Isolated, but SourceNat service is disabled @@ -4488,19 +4322,6 @@ public class NetworkManagerImpl implements NetworkManager, NetworkService, Manag return false; } - public boolean isSharedNetworkOfferingWithServices(long networkOfferingId) { - NetworkOfferingVO networkOffering = _networkOfferingDao.findById(networkOfferingId); - if ( (networkOffering.getGuestType() == Network.GuestType.Shared) && ( - areServicesSupportedByNetworkOffering(networkOfferingId, Service.SourceNat) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.StaticNat) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.Firewall) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.PortForwarding) || - areServicesSupportedByNetworkOffering(networkOfferingId, Service.Lb))) { - return true; - } - return false; - } - @Override public boolean areServicesSupportedByNetworkOffering(long networkOfferingId, Service... services) { return (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(networkOfferingId, services)); diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index 874e01767a9..28d1a604c44 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -797,7 +797,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, long, Long) */ @Override - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { + public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { // TODO Auto-generated method stub return null; } diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index bd8d8bc3a69..642ea10c7ca 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -16,22 +16,6 @@ // under the License. package com.cloud.vpc; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; - -import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; -import org.apache.log4j.Logger; - -import org.apache.cloudstack.acl.ControlledEntity.ACLType; -import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; -import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; import com.cloud.dc.DataCenter; import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; @@ -48,12 +32,7 @@ import com.cloud.network.Network.Service; import com.cloud.network.Networks.TrafficType; import com.cloud.network.addr.PublicIp; import com.cloud.network.dao.NetworkServiceMapDao; -import com.cloud.network.element.LoadBalancingServiceProvider; -import com.cloud.network.element.NetworkElement; -import com.cloud.network.element.RemoteAccessVPNServiceProvider; -import com.cloud.network.element.Site2SiteVpnServiceProvider; -import com.cloud.network.element.StaticNatServiceProvider; -import com.cloud.network.element.UserDataServiceProvider; +import com.cloud.network.element.*; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; @@ -70,6 +49,16 @@ import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; import com.cloud.vm.*; import com.cloud.vpc.dao.MockVpcVirtualRouterElement; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; +import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; +import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; +import org.apache.log4j.Logger; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; +import java.util.*; @Local(value = { NetworkManager.class, NetworkService.class }) public class MockNetworkManagerImpl implements NetworkManager, Manager{ @@ -1481,7 +1470,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager{ * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, boolean, long) */ @Override - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { + public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { // TODO Auto-generated method stub return null; } From 310d35f88edd6d75499b2089813cfc8b3dd08652 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Wed, 16 Jan 2013 10:24:14 -0700 Subject: [PATCH 65/90] Summary: Change template details in devcloud-kvm sql file Signed-off-by: Marcus Sorensen 1358357054 -0700 --- tools/devcloud-kvm/devcloud-kvm.sql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/devcloud-kvm/devcloud-kvm.sql b/tools/devcloud-kvm/devcloud-kvm.sql index 97478834bf3..6d559a9c91a 100644 --- a/tools/devcloud-kvm/devcloud-kvm.sql +++ b/tools/devcloud-kvm/devcloud-kvm.sql @@ -17,7 +17,7 @@ INSERT INTO `cloud`.`disk_offering` (id, name, uuid, display_text, created, use_local_storage, type, disk_size) VALUES (17, 'tinyOffering', UUID(), 'tinyOffering', NOW(), 1, 'Service', 0); -INSERT INTO `cloud`.`service_offering` (id, cpu, speed, ram_size) VALUES (17, 1, 100, 100); +INSERT INTO `cloud`.`service_offering` (id, cpu, speed, ram_size) VALUES (17, 1, 100, 128); INSERT INTO `cloud`.`disk_offering` (id, name, uuid, display_text, created, type, disk_size) VALUES (18, 'tinyDiskOffering', UUID(), 'tinyDiskOffering', NOW(), 'Disk', 1073741824); INSERT INTO `cloud`.`configuration` (instance, name,value) VALUE('DEFAULT','router.ram.size', '100'); INSERT INTO `cloud`.`configuration` (instance, name,value) VALUE('DEFAULT','router.cpu.mhz','100'); @@ -37,4 +37,5 @@ INSERT INTO `cloud`.`configuration` (instance, name, value) VALUE('DEFAULT', 'se UPDATE `cloud`.`configuration` SET value='10' where name = 'storage.overprovisioning.factor'; UPDATE `cloud`.`configuration` SET value='10' where name = 'cpu.overprovisioning.factor'; UPDATE `cloud`.`configuration` SET value='10' where name = 'mem.overprovisioning.factor'; -UPDATE `cloud`.`vm_template` SET unique_name="tiny Linux",name="tiny Linux",url="http://marcus.mlsorensen.com/cloudstack-extras/ttylinux_pv.qcow2",checksum="81dcf4b4ca05a3b637a040e851568f29",display_text="tiny Linux",format='QCOW2',hypervisor_type='KVM' where id=5; +UPDATE `cloud`.`vm_template` SET unique_name="tiny CentOS 6.3",name="tiny CentOS 6.3",url="http://marcus.mlsorensen.com/cloudstack-extras/tiny-centos-63.qcow2",checksum="4bbb806aa8570f4dfac13b4c38ea1603",display_text="tiny CentOS 6.3",format='QCOW2',hypervisor_type='KVM' where id=5; +UPDATE `cloud`.`vm_template` SET url="http://dontdownloadthistemplate" where id=4; From 4f479e2b23cbbc42247531bd8abb005fc1b89591 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Wed, 16 Jan 2013 10:30:31 -0700 Subject: [PATCH 66/90] Summary: Modifying integration tests to use 128MB service offerings Detail: The default devcloud tiny template is set up via devcloud.sql to have at least 100MB RAM, changing the tests as well. This will also allow the builtin devcloud-kvm tiny template to work for tests as it requires a bit more. Signed-off-by: Marcus Sorensen 1358357431 -0700 --- test/integration/smoke/test_routers.py | 2 +- test/integration/smoke/test_service_offerings.py | 2 +- test/integration/smoke/test_templates.py | 2 +- test/integration/smoke/test_vm_life_cycle.py | 2 +- test/integration/smoke/test_volumes.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/integration/smoke/test_routers.py b/test/integration/smoke/test_routers.py index 93dc7606ace..435c7e41a43 100644 --- a/test/integration/smoke/test_routers.py +++ b/test/integration/smoke/test_routers.py @@ -41,7 +41,7 @@ class Services: "displaytext": "Tiny Instance", "cpunumber": 1, "cpuspeed": 100, # in MHz - "memory": 64, # In MBs + "memory": 128, # In MBs }, "virtual_machine": { diff --git a/test/integration/smoke/test_service_offerings.py b/test/integration/smoke/test_service_offerings.py index 3a8a9e156b9..7f4d130ee80 100644 --- a/test/integration/smoke/test_service_offerings.py +++ b/test/integration/smoke/test_service_offerings.py @@ -39,7 +39,7 @@ class Services: "displaytext": "Service Offering", "cpunumber": 1, "cpuspeed": 100, # MHz - "memory": 64, # in MBs + "memory": 128, # in MBs }, } diff --git a/test/integration/smoke/test_templates.py b/test/integration/smoke/test_templates.py index d450a5d8122..663b174ed78 100644 --- a/test/integration/smoke/test_templates.py +++ b/test/integration/smoke/test_templates.py @@ -52,7 +52,7 @@ class Services: "displaytext": "Tiny Instance", "cpunumber": 1, "cpuspeed": 100, # in MHz - "memory": 64, # In MBs + "memory": 128, # In MBs }, "disk_offering": { "displaytext": "Small", diff --git a/test/integration/smoke/test_vm_life_cycle.py b/test/integration/smoke/test_vm_life_cycle.py index f6fe4e002a1..0bd4f959bc3 100644 --- a/test/integration/smoke/test_vm_life_cycle.py +++ b/test/integration/smoke/test_vm_life_cycle.py @@ -80,7 +80,7 @@ class Services: "displaytext": "Tiny Instance", "cpunumber": 1, "cpuspeed": 100, # in MHz - "memory": 64, # In MBs + "memory": 128, # In MBs }, "small": { diff --git a/test/integration/smoke/test_volumes.py b/test/integration/smoke/test_volumes.py index 2d0cd491672..3fe68ec5621 100644 --- a/test/integration/smoke/test_volumes.py +++ b/test/integration/smoke/test_volumes.py @@ -53,7 +53,7 @@ class Services: "displaytext": "Tiny Instance", "cpunumber": 1, "cpuspeed": 100, # in MHz - "memory": 64, # In MBs + "memory": 128, # In MBs }, "disk_offering": { "displaytext": "Small", From a69e7f9bf605079968a7e3a7facdede167504aa4 Mon Sep 17 00:00:00 2001 From: Pranav Saxena Date: Thu, 17 Jan 2013 00:02:11 +0530 Subject: [PATCH 67/90] CLOUDSTACK-972:The template will disappear after reordering in template section --- ui/scripts/ui/widgets/listView.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/scripts/ui/widgets/listView.js b/ui/scripts/ui/widgets/listView.js index 85523ea5e7a..9e16ec2ae54 100644 --- a/ui/scripts/ui/widgets/listView.js +++ b/ui/scripts/ui/widgets/listView.js @@ -560,8 +560,8 @@ return $(this).index() == index; }); - if ($target.index() > $tr.index()) $target.after($tr); - else $target.before($tr); + // if ($target.index() > $tr.index()) $target.after($tr); + // else $target.before($tr); $tr.closest('.list-view').scrollTop($tr.position().top - $tr.height() * 2); From eeb3f1725d7efa9b297360649707ca31c6ad0ca2 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Wed, 16 Jan 2013 15:06:27 -0800 Subject: [PATCH 68/90] CS-17074: cloudstack UI - Advanced SG-enabled zone - Infrastructure menu - create guest network - scope dropdown - add option "All". --- ui/scripts/system.js | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/scripts/system.js b/ui/scripts/system.js index 6733da1e2b9..bd8d3316103 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -1148,6 +1148,7 @@ var array1 = []; if(args.context.zones[0].networktype == "Advanced" && args.context.zones[0].securitygroupsenabled == true) { array1.push({id: 'account-specific', description: 'Account'}); + array1.push({id: 'zone-wide', description: 'All'}); } else { array1.push({id: 'zone-wide', description: 'All'}); From a22bfd7e7b412793e4a7cbb73f96b7ddfb6db887 Mon Sep 17 00:00:00 2001 From: Jessica Wang Date: Wed, 16 Jan 2013 15:10:24 -0800 Subject: [PATCH 69/90] CLOUDSTACK-537: cloudstack UI - Advanced SG-enabled zone - VM Wizard - API has been chagned. Here is related UI change: not pass networkID to deployVirtualMachine API. --- ui/scripts/instanceWizard.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ui/scripts/instanceWizard.js b/ui/scripts/instanceWizard.js index 89ca1d63361..e4b1f31d427 100644 --- a/ui/scripts/instanceWizard.js +++ b/ui/scripts/instanceWizard.js @@ -545,7 +545,8 @@ if(checkedSecurityGroupIdArray.length > 0) array1.push("&securitygroupids=" + checkedSecurityGroupIdArray.join(",")); - + + /* if(selectedZoneObj.networktype == "Advanced" && selectedZoneObj.securitygroupsenabled == true) { // Advanced SG-enabled zone var networkData = { zoneId: selectedZoneObj.id, @@ -577,6 +578,8 @@ return; } } + */ + } else if (step5ContainerType == 'nothing-to-select') { if(args.context.networks != null) { //from VPC tier From 975021dda1aeee24c8729407e323a5e884e9ad31 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Wed, 16 Jan 2013 17:43:35 -0700 Subject: [PATCH 70/90] Summary: adding resizeVolume api call Detail: This merges the resizevolume feature branch, which provides the ability to migrate a disk between disk offerings, thereby changing its size, or specifying a new size if current disk offering is custom. BUG-ID: CLOUDSTACK-644 Signed-off-by: Marcus Sorensen 1358358209 -0700 --- .../agent/api/storage/ResizeVolumeAnswer.java | 40 +++ .../api/storage/ResizeVolumeCommand.java | 86 ++++++ api/src/com/cloud/event/EventTypes.java | 1 + .../com/cloud/exception/CloudException.java | 1 - api/src/com/cloud/storage/StorageService.java | 10 + api/src/com/cloud/storage/Volume.java | 9 +- .../apache/cloudstack/api/ApiConstants.java | 1 + .../api/BaseUpdateTemplateOrIsoCmd.java | 0 ...BaseUpdateTemplateOrIsoPermissionsCmd.java | 0 .../command/user/volume/ResizeVolumeCmd.java | 153 +++++++++++ .../api/test/ResizeVolumeCommandTest.java | 199 ++++++++++++++ client/tomcatconf/commands.properties.in | 1 + .../resource/LibvirtComputingResource.java | 77 ++++++ .../xen/resource/CitrixResourceBase.java | 22 ++ scripts/storage/qcow2/resizevolume.sh | 253 ++++++++++++++++++ .../com/cloud/storage/StorageManagerImpl.java | 180 +++++++++++++ setup/db/create-schema-view.sql | 0 test/integration/smoke/test_volumes.py | 125 ++++++++- tools/marvin/marvin/integration/lib/base.py | 6 + 19 files changed, 1157 insertions(+), 7 deletions(-) create mode 100644 api/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java create mode 100644 api/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java mode change 100755 => 100644 api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java create mode 100644 api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java create mode 100644 api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java create mode 100644 scripts/storage/qcow2/resizevolume.sh mode change 100755 => 100644 setup/db/create-schema-view.sql diff --git a/api/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java b/api/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java new file mode 100644 index 00000000000..3434b985aaa --- /dev/null +++ b/api/src/com/cloud/agent/api/storage/ResizeVolumeAnswer.java @@ -0,0 +1,40 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.agent.api.storage; + +import com.cloud.agent.api.Answer; + +public class ResizeVolumeAnswer extends Answer { + private long newSize; + + protected ResizeVolumeAnswer() { + + } + + public ResizeVolumeAnswer(ResizeVolumeCommand cmd, boolean result, String details, long newSize) { + super(cmd, result, details); + this.newSize = newSize; + } + + public ResizeVolumeAnswer(ResizeVolumeCommand cmd, boolean result, String details) { + super(cmd, result, details); + } + + public long getNewSize() { + return newSize; + } +} diff --git a/api/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java b/api/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java new file mode 100644 index 00000000000..8af23a0ab81 --- /dev/null +++ b/api/src/com/cloud/agent/api/storage/ResizeVolumeCommand.java @@ -0,0 +1,86 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package com.cloud.agent.api.storage; + +import com.cloud.agent.api.Command; +import com.cloud.agent.api.to.StorageFilerTO; +import com.cloud.storage.StoragePool; + +public class ResizeVolumeCommand extends Command { + private String path; + private StorageFilerTO pool; + private String vmInstance; + private Long newSize; + private Long currentSize; + private boolean shrinkOk; + + protected ResizeVolumeCommand() { + + } + + public ResizeVolumeCommand(String path, + StorageFilerTO pool, + Long currentSize, + Long newSize, + boolean shrinkOk, + String vmInstance) + { + this.path = path; + this.pool = pool; + this.vmInstance = vmInstance; + this.currentSize = currentSize; + this.newSize = newSize; + this.shrinkOk = shrinkOk; + } + + public String getPath() { + return path; + } + + public String getPoolUuid() { + return pool.getUuid(); + } + + public StorageFilerTO getPool() { + return pool; + } + + public long getNewSize() { + return newSize; + } + + public long getCurrentSize() { + return currentSize; + } + + public boolean getShrinkOk() { + return shrinkOk; + } + + public String getInstanceName() { + return vmInstance; + } + + /** + * {@inheritDoc} + */ + @Override + public boolean executeInSequence() { + return false; + } + +} diff --git a/api/src/com/cloud/event/EventTypes.java b/api/src/com/cloud/event/EventTypes.java index 8c622252d17..87eddca5a69 100755 --- a/api/src/com/cloud/event/EventTypes.java +++ b/api/src/com/cloud/event/EventTypes.java @@ -108,6 +108,7 @@ public class EventTypes { public static final String EVENT_VOLUME_EXTRACT = "VOLUME.EXTRACT"; public static final String EVENT_VOLUME_UPLOAD = "VOLUME.UPLOAD"; public static final String EVENT_VOLUME_MIGRATE = "VOLUME.MIGRATE"; + public static final String EVENT_VOLUME_RESIZE = "VOLUME.RESIZE"; // Domains public static final String EVENT_DOMAIN_CREATE = "DOMAIN.CREATE"; diff --git a/api/src/com/cloud/exception/CloudException.java b/api/src/com/cloud/exception/CloudException.java index 036cb1b8adc..732670288f1 100644 --- a/api/src/com/cloud/exception/CloudException.java +++ b/api/src/com/cloud/exception/CloudException.java @@ -54,7 +54,6 @@ public class CloudException extends Exception { return; } - public ArrayList getIdProxyList() { return idList; } diff --git a/api/src/com/cloud/storage/StorageService.java b/api/src/com/cloud/storage/StorageService.java index ff8ec13e33b..a06f2138042 100644 --- a/api/src/com/cloud/storage/StorageService.java +++ b/api/src/com/cloud/storage/StorageService.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.command.admin.storage.CancelPrimaryStorageMaint import org.apache.cloudstack.api.command.admin.storage.UpdateStoragePoolCmd; import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.PermissionDeniedException; @@ -70,6 +71,15 @@ public interface StorageService{ Volume createVolume(CreateVolumeCmd cmd); + /** + * Resizes the volume based on the given criteria + * + * @param cmd + * the API command wrapping the criteria + * @return the volume object + */ + Volume resizeVolume(ResizeVolumeCmd cmd); + /** * Delete the storage pool * diff --git a/api/src/com/cloud/storage/Volume.java b/api/src/com/cloud/storage/Volume.java index bfbd816d911..38ba2d413e0 100755 --- a/api/src/com/cloud/storage/Volume.java +++ b/api/src/com/cloud/storage/Volume.java @@ -36,6 +36,7 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba Ready("The volume is ready to be used."), Migrating("The volume is migrating to other storage pool"), Snapshotting("There is a snapshot created on this volume, not backed up to secondary storage yet"), + Resizing("The volume is being resized"), Expunging("The volume is being expunging"), Destroy("The volume is destroyed, and can't be recovered."), UploadOp ("The volume upload operation is in progress or in short the volume is on secondary storage"); @@ -62,7 +63,10 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba s_fsm.addTransition(Creating, Event.OperationFailed, Allocated); s_fsm.addTransition(Creating, Event.OperationSucceeded, Ready); s_fsm.addTransition(Creating, Event.DestroyRequested, Destroy); - s_fsm.addTransition(Creating, Event.CreateRequested, Creating); + s_fsm.addTransition(Creating, Event.CreateRequested, Creating); + s_fsm.addTransition(Ready, Event.ResizeRequested, Resizing); + s_fsm.addTransition(Resizing, Event.OperationSucceeded, Ready); + s_fsm.addTransition(Resizing, Event.OperationFailed, Ready); s_fsm.addTransition(Allocated, Event.UploadRequested, UploadOp); s_fsm.addTransition(UploadOp, Event.CopyRequested, Creating);// CopyRequested for volume from sec to primary storage s_fsm.addTransition(Creating, Event.CopySucceeded, Ready); @@ -92,7 +96,8 @@ public interface Volume extends ControlledEntity, Identity, InternalIdentity, Ba MigrationRequested, SnapshotRequested, DestroyRequested, - ExpungingRequested; + ExpungingRequested, + ResizeRequested; } /** diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java index d3bfcd66afc..58a78318fae 100644 --- a/api/src/org/apache/cloudstack/api/ApiConstants.java +++ b/api/src/org/apache/cloudstack/api/ApiConstants.java @@ -387,6 +387,7 @@ public class ApiConstants { public static final String ESP_LIFETIME = "esplifetime"; public static final String DPD = "dpd"; public static final String FOR_VPC = "forvpc"; + public static final String SHRINK_OK = "shrinkok"; public static final String NICIRA_NVP_DEVICE_ID = "nvpdeviceid"; public static final String NICIRA_NVP_TRANSPORT_ZONE_UUID = "transportzoneuuid"; public static final String NICIRA_NVP_DEVICE_NAME = "niciradevicename"; diff --git a/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java b/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoCmd.java old mode 100755 new mode 100644 diff --git a/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java old mode 100755 new mode 100644 diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java new file mode 100644 index 00000000000..e42bf3565cc --- /dev/null +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java @@ -0,0 +1,153 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api.command.user.volume; + +import org.apache.cloudstack.api.response.*; +import org.apache.log4j.Logger; + +import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; +import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; +import org.apache.cloudstack.api.APICommand; +import org.apache.cloudstack.api.Parameter; +import org.apache.cloudstack.api.ServerApiException; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; +import java.util.regex.Matcher; + +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.async.AsyncJob; +import com.cloud.event.EventTypes; +import com.cloud.projects.Project; +import com.cloud.storage.Volume; +import com.cloud.user.Account; +import com.cloud.user.UserContext; + + +@APICommand(name="resizeVolume", description="Resizes a volume", responseObject=VolumeResponse.class) +public class ResizeVolumeCmd extends BaseAsyncCmd { + public static final Logger s_logger = Logger.getLogger(ResizeVolumeCmd.class.getName()); + + private static final String s_name = "resizevolumeresponse"; + + ///////////////////////////////////////////////////// + //////////////// API parameters ///////////////////// + ///////////////////////////////////////////////////// + + @Parameter(name=ApiConstants.ID, entityType=VolumeResponse.class, type=CommandType.UUID, description="the ID of the disk volume") + private Long id; + + @Parameter(name=ApiConstants.SIZE, type=CommandType.LONG, required=false, description="New volume size in G") + private Long size; + + @Parameter(name=ApiConstants.SHRINK_OK, type=CommandType.BOOLEAN, required=false, description="Verify OK to Shrink") + private boolean shrinkOk; + + @Parameter(name=ApiConstants.DISK_OFFERING_ID, entityType=DiskOfferingResponse.class, type=CommandType.UUID, required=false, description="new disk offering id") + private Long newDiskOfferingId; + + ///////////////////////////////////////////////////// + /////////////////// Accessors /////////////////////// + ///////////////////////////////////////////////////// + + public Long getEntityId() { + return id; + } + + public Long getSize() { + return size; + } + + public boolean getShrinkOk() { + return shrinkOk; + } + + public Long getNewDiskOfferingId() { + return newDiskOfferingId; + } + + + ///////////////////////////////////////////////////// + /////////////// API Implementation/////////////////// + ///////////////////////////////////////////////////// + + @Override + public String getCommandName() { + return s_name; + } + + @Override + public AsyncJob.Type getInstanceType() { + return AsyncJob.Type.Volume; + } + + public static String getResultObjectName() { + return "volume"; + } + + @Override + public long getEntityOwnerId() { + + Volume volume = _entityMgr.findById(Volume.class, getEntityId()); + if (volume == null) { + throw new InvalidParameterValueException("Unable to find volume by id=" + id); + } + + Account account = _accountService.getAccount(volume.getAccountId()); + //Can resize volumes for enabled projects/accounts only + if (account.getType() == Account.ACCOUNT_TYPE_PROJECT) { + Project project = _projectService.findByProjectAccountId(volume.getAccountId()); + if (project.getState() != Project.State.Active) { + throw new PermissionDeniedException("Can't add resources to project id=" + project.getId() + " in state=" + project.getState() + " as it's no longer active"); + } + } else if (account.getState() == Account.State.disabled) { + throw new PermissionDeniedException("The owner of volume " + id + " is disabled: " + account); + } + + return volume.getAccountId(); + } + + + @Override + public String getEventType() { + return EventTypes.EVENT_VOLUME_RESIZE; + } + + @Override + public String getEventDescription() { + return "Volume Id: " + getEntityId() + " to size " + getSize() + "G" ; + } + + @Override + public void execute(){ + UserContext.current().setEventDetails("Volume Id: " + getEntityId() + " to size " + getSize() + "G"); + Volume volume = _storageService.resizeVolume(this); + if (volume != null) { + VolumeResponse response = _responseGenerator.createVolumeResponse(volume); + //FIXME - have to be moved to ApiResponseHelper + response.setResponseName(getCommandName()); + this.setResponseObject(response); + } else { + throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to resize volume"); + } + } +} diff --git a/api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java b/api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java new file mode 100644 index 00000000000..2d248b2f53a --- /dev/null +++ b/api/test/src/com/cloud/agent/api/test/ResizeVolumeCommandTest.java @@ -0,0 +1,199 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package src.com.cloud.agent.api.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import org.junit.Test; + +import com.cloud.agent.api.storage.ResizeVolumeCommand; +import com.cloud.agent.api.to.StorageFilerTO; +import com.cloud.storage.StoragePool; +import com.cloud.storage.Storage.StoragePoolType; +import com.cloud.storage.StoragePoolStatus; + + +public class ResizeVolumeCommandTest { + + public StoragePool dummypool = new StoragePool() { + public long getId() { + return 1L; + }; + + public String getName() { + return "name"; + }; + + public String getUuid() { + return "bed9f83e-cac3-11e1-ac8a-0050568b007e"; + }; + + public StoragePoolType getPoolType() { + return StoragePoolType.Filesystem; + }; + + public Date getCreated() { + Date date = null; + try { + date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") + .parse("01/01/1970 12:12:12"); + } catch (ParseException e) { + e.printStackTrace(); + } + return date; + } + + public Date getUpdateTime() { + return new Date(); + }; + + public long getDataCenterId() { + return 0L; + }; + + public long getCapacityBytes() { + return 0L; + }; + + public long getAvailableBytes() { + return 0L; + }; + + public Long getClusterId() { + return 0L; + }; + + public String getHostAddress() { + return "hostAddress"; + }; + + public String getPath() { + return "path"; + }; + + public String getUserInfo() { + return "userInfo"; + }; + + public boolean isShared() { + return false; + }; + + public boolean isLocal() { + return false; + }; + + public StoragePoolStatus getStatus() { + return StoragePoolStatus.Up; + }; + + public int getPort() { + return 25; + }; + + public Long getPodId() { + return 0L; + }; + }; + + Long newSize = 4194304L; + Long currentSize = 1048576L; + + ResizeVolumeCommand rv = new ResizeVolumeCommand("dummydiskpath", + new StorageFilerTO(dummypool), currentSize, newSize, false, + "vmName"); + + @Test + public void testExecuteInSequence() { + boolean b = rv.executeInSequence(); + assertFalse(b); + } + + @Test + public void testGetPath() { + String path = rv.getPath(); + assertTrue(path.equals("dummydiskpath")); + } + + @Test + public void testGetPoolUuid() { + String poolUuid = rv.getPoolUuid(); + assertTrue(poolUuid.equals("bed9f83e-cac3-11e1-ac8a-0050568b007e")); + } + + @Test + public void testGetPool() { + StorageFilerTO pool = rv.getPool(); + + Long id = pool.getId(); + Long expectedL = 1L; + assertEquals(expectedL, id); + + String uuid = pool.getUuid(); + assertTrue(uuid.equals("bed9f83e-cac3-11e1-ac8a-0050568b007e")); + + String host = pool.getHost(); + assertTrue(host.equals("hostAddress")); + + String path = pool.getPath(); + assertTrue(path.equals("path")); + + String userInfo = pool.getUserInfo(); + assertTrue(userInfo.equals("userInfo")); + + Integer port = pool.getPort(); + Integer expectedI = 25; + assertEquals(expectedI, port); + + StoragePoolType type = pool.getType(); + assertEquals(StoragePoolType.Filesystem, type); + + String str = pool.toString(); + assertTrue(str.equals("Pool[" + id.toString() + "|" + host + ":" + + port.toString() + "|" + path + "]")); + } + + @Test + public void testGetNewSize() { + long newSize = rv.getNewSize(); + assertTrue(newSize == 4194304L); + } + + @Test + public void testGetCurrentSize() { + long currentSize = rv.getCurrentSize(); + assertTrue(currentSize == 1048576L); + } + + @Test + public void testGetShrinkOk() { + assertFalse(rv.getShrinkOk()); + } + + @Test + public void testGetInstanceName() { + String vmName = rv.getInstanceName(); + assertTrue(vmName.equals("vmName")); + } + +} diff --git a/client/tomcatconf/commands.properties.in b/client/tomcatconf/commands.properties.in index 99cb874a55f..182cbd8cf3b 100644 --- a/client/tomcatconf/commands.properties.in +++ b/client/tomcatconf/commands.properties.in @@ -255,6 +255,7 @@ deleteVolume=15 listVolumes=15 extractVolume=15 migrateVolume=15 +resizeVolume=15 #### registration command: FIXME -- this really should be something in management server that #### generates a new key for the user and they just have to diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 6b5f6df3bff..b65b53114bf 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -162,6 +162,8 @@ import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; import com.cloud.agent.api.storage.DestroyCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; +import com.cloud.agent.api.storage.ResizeVolumeCommand; +import com.cloud.agent.api.storage.ResizeVolumeAnswer; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.StorageFilerTO; @@ -255,6 +257,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements private String _patchdomrPath; private String _createvmPath; private String _manageSnapshotPath; + private String _resizeVolumePath; private String _createTmplPath; private String _heartBeatPath; private String _securityGroupPath; @@ -534,6 +537,12 @@ public class LibvirtComputingResource extends ServerResourceBase implements "Unable to find the managesnapshot.sh"); } + _resizeVolumePath = Script.findScript(storageScriptsDir, "resizevolume.sh"); + if (_resizeVolumePath == null) { + throw new ConfigurationException( + "Unable to find the resizevolume.sh"); + } + _createTmplPath = Script .findScript(storageScriptsDir, "createtmplt.sh"); if (_createTmplPath == null) { @@ -1062,6 +1071,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements return execute((CleanupNetworkRulesCmd) cmd); } else if (cmd instanceof CopyVolumeCommand) { return execute((CopyVolumeCommand) cmd); + } else if (cmd instanceof ResizeVolumeCommand) { + return execute((ResizeVolumeCommand) cmd); } else if (cmd instanceof CheckNetworkCommand) { return execute((CheckNetworkCommand) cmd); } else { @@ -1268,6 +1279,72 @@ public class LibvirtComputingResource extends ServerResourceBase implements } } + private String getResizeScriptType (KVMStoragePool pool, KVMPhysicalDisk vol) { + StoragePoolType poolType = pool.getType(); + PhysicalDiskFormat volFormat = vol.getFormat(); + + if(pool.getType() == StoragePoolType.CLVM && volFormat == KVMPhysicalDisk.PhysicalDiskFormat.RAW) { + return "CLVM"; + } else if ((poolType == StoragePoolType.NetworkFilesystem + || poolType == StoragePoolType.SharedMountPoint + || poolType == StoragePoolType.Filesystem) + && volFormat == KVMPhysicalDisk.PhysicalDiskFormat.QCOW2 ) { + return "QCOW2"; + } + return null; + } + + /* uses a local script now, eventually support for virStorageVolResize() will maybe work on + qcow2 and lvm and we can do this in libvirt calls */ + public Answer execute(ResizeVolumeCommand cmd) { + String volid = cmd.getPath(); + long newSize = cmd.getNewSize(); + long currentSize = cmd.getCurrentSize(); + String vmInstanceName = cmd.getInstanceName(); + boolean shrinkOk = cmd.getShrinkOk(); + StorageFilerTO spool = cmd.getPool(); + + try { + KVMStoragePool pool = _storagePoolMgr.getStoragePool(spool.getType(), spool.getUuid()); + KVMPhysicalDisk vol = pool.getPhysicalDisk(volid); + String path = vol.getPath(); + String type = getResizeScriptType(pool, vol); + + if (type == null) { + return new ResizeVolumeAnswer(cmd, false, "Unsupported volume format: pool type '" + + pool.getType() + "' and volume format '" + vol.getFormat() + "'"); + } + + s_logger.debug("got to the stage where we execute the volume resize, params:" + + path + "," + currentSize + "," + newSize + "," + type + "," + vmInstanceName + "," + shrinkOk); + final Script resizecmd = new Script(_resizeVolumePath, + _cmdsTimeout, s_logger); + resizecmd.add("-s",String.valueOf(newSize)); + resizecmd.add("-c",String.valueOf(currentSize)); + resizecmd.add("-p",path); + resizecmd.add("-t",type); + resizecmd.add("-r",String.valueOf(shrinkOk)); + resizecmd.add("-v",vmInstanceName); + String result = resizecmd.execute(); + + if (result == null) { + + /* fetch new size as seen from libvirt, don't want to assume anything */ + pool = _storagePoolMgr.getStoragePool(spool.getType(), spool.getUuid()); + long finalSize = pool.getPhysicalDisk(volid).getVirtualSize(); + s_logger.debug("after resize, size reports as " + finalSize + ", requested " + newSize); + return new ResizeVolumeAnswer(cmd, true, "success", finalSize); + } + + return new ResizeVolumeAnswer(cmd, false, result); + } catch (CloudRuntimeException e) { + String error = "failed to resize volume: " + e; + s_logger.debug(error); + return new ResizeVolumeAnswer(cmd, false, error); + } + + } + public Answer execute(DestroyCommand cmd) { VolumeTO vol = cmd.getVolume(); diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 66a5918b177..065d3be0bdd 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -182,6 +182,8 @@ import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer; import com.cloud.agent.api.storage.DestroyCommand; import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer; import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand; +import com.cloud.agent.api.storage.ResizeVolumeCommand; +import com.cloud.agent.api.storage.ResizeVolumeAnswer; import com.cloud.agent.api.to.IpAddressTO; import com.cloud.agent.api.to.NicTO; import com.cloud.agent.api.to.PortForwardingRuleTO; @@ -468,6 +470,8 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return execute((DeleteStoragePoolCommand) cmd); } else if (clazz == CopyVolumeCommand.class) { return execute((CopyVolumeCommand) cmd); + } else if (clazz == ResizeVolumeCommand.class) { + return execute((ResizeVolumeCommand) cmd); } else if (clazz == AttachVolumeCommand.class) { return execute((AttachVolumeCommand) cmd); } else if (clazz == AttachIsoCommand.class) { @@ -5618,6 +5622,23 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe } } + public Answer execute(ResizeVolumeCommand cmd) { + Connection conn = getConnection(); + StorageFilerTO pool = cmd.getPool(); + String volid = cmd.getPath(); + long newSize = cmd.getNewSize(); + + try { + VDI vdi = getVDIbyUuid(conn, volid); + vdi.resize(conn, newSize); + return new ResizeVolumeAnswer(cmd, true, "success", newSize); + } catch (Exception e) { + s_logger.warn("Unable to resize volume",e); + String error = "failed to resize volume:" +e; + return new ResizeVolumeAnswer(cmd, false, error ); + } + } + protected SR getISOSRbyVmName(Connection conn, String vmName) { try { Set srs = SR.getByNameLabel(conn, vmName + "-ISO"); @@ -7684,4 +7705,5 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe return new SetStaticRouteAnswer(cmd, false, null); } } + } diff --git a/scripts/storage/qcow2/resizevolume.sh b/scripts/storage/qcow2/resizevolume.sh new file mode 100644 index 00000000000..2de1f9ec5ca --- /dev/null +++ b/scripts/storage/qcow2/resizevolume.sh @@ -0,0 +1,253 @@ +#!/usr/bin/env bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + + + +# resizevolume.sh -- resize a volume + +usage() { + printf "Usage: %s: -c -s -p -v -t -r \n" $(basename $0) >&2 +} + +getdevmappername() { + local path=$1 + local devmappername=`readlink -f $path |cut -d/ -f3` + if [[ $devmappername =~ "dm-" ]] + then + dmname=$devmappername + return 0 + else + return 1; + fi +} + +getdevmappersize() { + local dm=$1 + if [ ! -e "/sys/block/${dm}/size" ] + then + log "unable to find ${dm} in /sys/block" 1 + exit 1 + fi + actualsize=$((`cat /sys/block/${dm}/size`*512)); + + if [[ -z "$actualsize" ]] + then + log "unable to find actual size of ${dm}" 1 + exit 1 + fi + return 0 +} + +# log "message" 1 <-- prints to stdout as well as log, to pass error up to cloudstack +# log "message" prints only to log file +# variable shouldwelog controls whether we print to log file +log() { + local d=`date` + local msg=${1} + local stdout=${2} + + if [ ! -z "$stdout" ] + then + echo $1 + fi + + if [ $shouldwelog -eq 1 ] + then + echo "$d - $1" >> /var/log/cloud/agent/resizevolume.log + fi +} + +failshrink() { + # if this is a shrink operation, fail if commands will shrink the volume and we haven't signed of on shrinking + if [ $actualsize -gt $newsize ] + then + if [ "$shrink" == "false" ] + then + log "result would shrink the volume from $actualsize to $newsize, but confirmation to shrink wasn't passed. Shrink='$shrink'" 1 + exit 1 + fi + fi +} + +notifyqemu() { + #move this back into cloudstack libvirt calls once the libvirt java bindings support block resize + #we try to inform hypervisor of new size, but don't fail if we can't + if `virsh help 2>/dev/null | grep -q blockresize` + then + if `virsh domstate $vmname >/dev/null 2>&1` + then + sizeinkb=$(($newsize/1024)) + virsh blockresize --domain $vmname --path $path --size $sizeinkb >/dev/null 2>&1 + retval=$? + if [ -z $retval ] || [ $retval -ne 0 ] + then + log "failed to live resize $path to size of $sizeinkb kb" 1 + else + liveresize='true' + fi + fi + fi +} + +resizelvm() { + local dmname='' + local actualsize='' + local liveresize='false' + + ##### sanity checks ##### + if ! `lvresize --version > /dev/null 2>&1` + then + log "unable to resolve executable 'lvresize'" 1 + exit 1 + fi + + if ! `virsh --version > /dev/null 2>&1` + then + log "unable to resolve executable 'virsh'" 1 + exit 1 + fi + ##### end sanity ##### + + if ! getdevmappername $path + then + log "unable to resolve a device mapper dev from $path" 1 + exit 1 + fi + + getdevmappersize $dmname + + if [ $actualsize -ne $currentsize ] + then + log "disk isn't the size we think it is: cloudstack said $currentsize, disk said $actualsize." + fi + + # if this is a shrink operation, fail if commands will shrink the volume and we haven't signed of on shrinking + failshrink + + output=`lvresize -f -L ${newsize}B $path 2>&1` + retval=$? + + if [ -z $retval ] || [ $retval -ne 0 ] + then + log "lvresize failed: $output " 1 + exit 1 + fi + + #move this back into cloudstack libvirt calls once the libvirt java bindings support block resize + #we try to inform hypervisor of new size, but don't fail if we can't + notifyqemu + + log "performed successful resize - dm:$dmname currentsize:$currentsize newsize:$newsize path:$path type:$ptype vmname:$vmname live:$liveresize shrink:$shrink" +} + +resizeqcow2() { + + ##### sanity checks ##### + if [ ! -e "$path" ] + then + log "unable to find file $path" 1 + exit 1 + fi + + if ! `qemu-img info /dev/null > /dev/null 2>&1` + then + log "unable to resolve executable 'qemu-img'" 1 + exit 1 + fi + + if ! `virsh --version > /dev/null 2>&1` + then + log "unable to resolve executable 'virsh'" 1 + exit 1 + fi + ##### end sanity ##### + + $actualsize=`qemu-img info $path | grep "virtual size" | sed -re 's/^.*\(([0-9]+).*$/\1/g'` + + if [ $actualsize -ne $currentsize ] + then + log "disk isn't the size we think it is: cloudstack said $currentsize, disk said $actualsize." + fi + + # if this is a shrink operation, fail if commands will shrink the volume and we haven't signed of on shrinking + failshrink + + output=`qemu-img resize $path $newsize 2>&1` + retval=$? + + if [ -z $retval ] || [ $retval -ne 0 ] + then + log "qemu-img resize failed: $output" 1 + exit 1 + fi + + #move this back into cloudstack libvirt calls once the libvirt java bindings support block resize + #we try to inform hypervisor of new size, but don't fail if we can't + notifyqemu + + log "performed successful resize - currentsize:$currentsize newsize:$newsize path:$path type:$ptype vmname:$vmname live:$liveresize shrink:$shrink" +} + +sflag= +cflag= +pflag= +vflag= +tflag= +rflag= + +while getopts 'c:s:v:p:t:r:' OPTION +do + case $OPTION in + s) sflag=1 + newsize="$OPTARG" + ;; + c) cflag=1 + currentsize="$OPTARG" + ;; + v) vflag=1 + vmname="$OPTARG" + ;; + p) dflag=1 + path="$OPTARG" + ;; + t) tflag=1 + ptype="$OPTARG" + ;; + r) rflag=1 + shrink="$OPTARG" + ;; + ?) usage + exit 2 + ;; + esac +done + +shouldwelog=1 #set this to 1 while debugging to get output in /var/log/cloud/agent/resizevolume.log + +if [ "$ptype" == "CLVM" ] +then + resizelvm +elif [ "$ptype" == "QCOW2" ] +then + resizeqcow2 +else + echo "unsupported type $ptype" + exit 1; +fi + +exit 0 diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index 96f299c02bb..55b1342bbd2 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -47,6 +47,7 @@ import javax.naming.ConfigurationException; import org.apache.cloudstack.api.command.admin.storage.*; import org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd; import org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd; +import org.apache.cloudstack.api.command.user.volume.ResizeVolumeCmd; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; @@ -69,6 +70,8 @@ import com.cloud.agent.api.storage.CreateCommand; import com.cloud.agent.api.storage.DeleteTemplateCommand; import com.cloud.agent.api.storage.DeleteVolumeCommand; import com.cloud.agent.api.storage.DestroyCommand; +import com.cloud.agent.api.storage.ResizeVolumeCommand; +import com.cloud.agent.api.storage.ResizeVolumeAnswer; import com.cloud.agent.api.to.StorageFilerTO; import com.cloud.agent.api.to.VolumeTO; import com.cloud.agent.manager.Commands; @@ -2098,6 +2101,183 @@ public class StorageManagerImpl implements StorageManager, Manager, ClusterManag } } + @Override + @DB + @ActionEvent(eventType = EventTypes.EVENT_VOLUME_RESIZE, eventDescription = "resizing volume", async = true) + public VolumeVO resizeVolume(ResizeVolumeCmd cmd) { + VolumeVO volume = _volsDao.findById(cmd.getEntityId()); + Long newSize = null; + boolean shrinkOk = cmd.getShrinkOk(); + boolean success = false; + DiskOfferingVO diskOffering = _diskOfferingDao.findById(volume.getDiskOfferingId()); + DiskOfferingVO newDiskOffering = null; + + newDiskOffering = _diskOfferingDao.findById(cmd.getNewDiskOfferingId()); + + /* Volumes with no hypervisor have never been assigned, and can be resized by recreating. + perhaps in the future we can just update the db entry for the volume */ + if(_volsDao.getHypervisorType(volume.getId()) == HypervisorType.None){ + throw new InvalidParameterValueException("Can't resize a volume that has never been attached, not sure which hypervisor type. Recreate volume to resize."); + } + + /* Only works for KVM/Xen for now */ + if(_volsDao.getHypervisorType(volume.getId()) != HypervisorType.KVM + && _volsDao.getHypervisorType(volume.getId()) != HypervisorType.XenServer){ + throw new InvalidParameterValueException("Cloudstack currently only supports volumes marked as KVM or XenServer hypervisor for resize"); + } + + if (volume == null) { + throw new InvalidParameterValueException("No such volume"); + } + + if (volume.getState() != Volume.State.Ready) { + throw new InvalidParameterValueException("Volume should be in ready state before attempting a resize"); + } + + if (!volume.getVolumeType().equals(Volume.Type.DATADISK)) { + throw new InvalidParameterValueException("Can only resize DATA volumes"); + } + + /* figure out whether or not a new disk offering or size parameter is required, get the correct size value */ + if (newDiskOffering == null) { + if (diskOffering.isCustomized()) { + newSize = cmd.getSize(); + + if (newSize == null) { + throw new InvalidParameterValueException("new offering is of custom size, need to specify a size"); + } + + newSize = ( newSize << 30 ); + } else { + throw new InvalidParameterValueException("current offering" + volume.getDiskOfferingId() + " cannot be resized, need to specify a disk offering"); + } + } else { + + if (newDiskOffering.getRemoved() != null || !DiskOfferingVO.Type.Disk.equals(newDiskOffering.getType())) { + throw new InvalidParameterValueException("Disk offering ID is missing or invalid"); + } + + if(diskOffering.getTags() != null) { + if(!newDiskOffering.getTags().equals(diskOffering.getTags())){ + throw new InvalidParameterValueException("Tags on new and old disk offerings must match"); + } + } else if (newDiskOffering.getTags() != null ){ + throw new InvalidParameterValueException("There are no tags on current disk offering, new disk offering needs to have no tags"); + } + + if (newDiskOffering.getDomainId() == null) { + // do nothing as offering is public + } else { + _configMgr.checkDiskOfferingAccess(UserContext.current().getCaller(), newDiskOffering); + } + + if (newDiskOffering.isCustomized()) { + newSize = cmd.getSize(); + + if (newSize == null) { + throw new InvalidParameterValueException("new offering is of custom size, need to specify a size"); + } + + newSize = ( newSize << 30 ); + } else { + newSize = newDiskOffering.getDiskSize(); + } + } + + if (newSize == null) { + throw new InvalidParameterValueException("could not detect a size parameter or fetch one from the diskofferingid parameter"); + } + + if (!validateVolumeSizeRange(newSize)) { + throw new InvalidParameterValueException("Requested size out of range"); + } + + /* does the caller have the authority to act on this volume? */ + _accountMgr.checkAccess(UserContext.current().getCaller(), null, true, volume); + + UserVmVO userVm = _userVmDao.findById(volume.getInstanceId()); + + StoragePool pool = _storagePoolDao.findById(volume.getPoolId()); + long currentSize = volume.getSize(); + + /* lets make certain they (think they) know what they're doing if they + want to shrink, by forcing them to provide the shrinkok parameter. This will + be checked again at the hypervisor level where we can see the actual disk size */ + if (currentSize > newSize && !shrinkOk) { + throw new InvalidParameterValueException("Going from existing size of " + currentSize + " to size of " + + newSize + " would shrink the volume, need to sign off by supplying the shrinkok parameter with value of true"); + } + + /* get a list of hosts to send the commands to, try the system the + associated vm is running on first, then the last known place it ran. + If not attached to a userVm, we pass 'none' and resizevolume.sh is + ok with that since it only needs the vm name to live resize */ + long[] hosts = null; + String instanceName = "none"; + if (userVm != null) { + instanceName = userVm.getInstanceName(); + if(userVm.getHostId() != null) { + hosts = new long[] { userVm.getHostId() }; + } else if(userVm.getLastHostId() != null) { + hosts = new long[] { userVm.getLastHostId() }; + } + + /*Xen only works offline, SR does not support VDI.resizeOnline*/ + if(_volsDao.getHypervisorType(volume.getId()) == HypervisorType.XenServer + && ! userVm.getState().equals(State.Stopped)) { + throw new InvalidParameterValueException("VM must be stopped or disk detached in order to resize with the Xen HV"); + } + } + + try { + try { + stateTransitTo(volume, Volume.Event.ResizeRequested); + } catch (NoTransitionException etrans) { + throw new CloudRuntimeException("Unable to change volume state for resize: " + etrans.toString()); + } + + ResizeVolumeCommand resizeCmd = new ResizeVolumeCommand(volume.getPath(), new StorageFilerTO(pool), + currentSize, newSize, shrinkOk, instanceName); + ResizeVolumeAnswer answer = (ResizeVolumeAnswer) sendToPool(pool, hosts, resizeCmd); + + /* need to fetch/store new volume size in database. This value comes from + hypervisor rather than trusting that a success means we have a volume of the + size we requested */ + if (answer != null && answer.getResult()) { + long finalSize = answer.getNewSize(); + s_logger.debug("Resize: volume started at size " + currentSize + " and ended at size " + finalSize); + volume.setSize(finalSize); + if (newDiskOffering != null) { + volume.setDiskOfferingId(cmd.getNewDiskOfferingId()); + } + _volsDao.update(volume.getId(), volume); + + success = true; + return volume; + } else if (answer != null) { + s_logger.debug("Resize: returned '" + answer.getDetails() + "'"); + } + } catch (StorageUnavailableException e) { + s_logger.debug("volume failed to resize: "+e); + return null; + } finally { + if(success) { + try { + stateTransitTo(volume, Volume.Event.OperationSucceeded); + } catch (NoTransitionException etrans) { + throw new CloudRuntimeException("Failed to change volume state: " + etrans.toString()); + } + } else { + try { + stateTransitTo(volume, Volume.Event.OperationFailed); + } catch (NoTransitionException etrans) { + throw new CloudRuntimeException("Failed to change volume state: " + etrans.toString()); + } + } + } + return null; + } + @Override @DB public boolean destroyVolume(VolumeVO volume) throws ConcurrentOperationException { diff --git a/setup/db/create-schema-view.sql b/setup/db/create-schema-view.sql old mode 100755 new mode 100644 diff --git a/test/integration/smoke/test_volumes.py b/test/integration/smoke/test_volumes.py index 3fe68ec5621..36eb5ded263 100644 --- a/test/integration/smoke/test_volumes.py +++ b/test/integration/smoke/test_volumes.py @@ -54,12 +54,20 @@ class Services: "cpunumber": 1, "cpuspeed": 100, # in MHz "memory": 128, # In MBs + "storagetype": "local" }, "disk_offering": { "displaytext": "Small", "name": "Small", + "storagetype": "local", "disksize": 1 }, + 'resized_disk_offering': { + "displaytext": "Resized", + "name": "Resized", + "storagetype": "local", + "disksize": 3 + }, "volume_offerings": { 0: { "diskname": "TestDiskServ", @@ -77,8 +85,8 @@ class Services: "diskdevice": "/dev/xvdb", "ostype": 'CentOS 5.3 (64-bit)', "mode": 'basic', - "sleep": 60, - "timeout": 10, + "sleep": 10, + "timeout": 600, } @@ -237,7 +245,7 @@ class TestCreateVolume(cloudstackTestCase): ssh = self.virtual_machine.get_ssh_client( reconnect=True ) - c = "fdisk -l" + c = "/sbin/fdisk -l" res = ssh.execute(c) except Exception as e: @@ -283,6 +291,16 @@ class TestVolumes(cloudstackTestCase): cls.api_client, cls.services["disk_offering"] ) + cls.resized_disk_offering = DiskOffering.create( + cls.api_client, + cls.services["resized_disk_offering"] + ) + cls.custom_resized_disk_offering = DiskOffering.create( + cls.api_client, + cls.services["resized_disk_offering"], + custom=True + ) + template = get_template( cls.api_client, cls.zone.id, @@ -292,6 +310,8 @@ class TestVolumes(cloudstackTestCase): cls.services["zoneid"] = cls.zone.id cls.services["template"] = template.id cls.services["diskofferingid"] = cls.disk_offering.id + cls.services['resizeddiskofferingid'] = cls.resized_disk_offering.id + cls.services['customresizeddiskofferingid'] = cls.custom_resized_disk_offering.id # Create VMs, VMs etc cls.account = Account.create( @@ -321,6 +341,8 @@ class TestVolumes(cloudstackTestCase): domainid=cls.account.account.domainid ) cls._cleanup = [ + cls.resized_disk_offering, + cls.custom_resized_disk_offering, cls.service_offering, cls.disk_offering, cls.account @@ -500,7 +522,102 @@ class TestVolumes(cloudstackTestCase): ) @attr(tags = ["advanced", "advancedns", "smoke"]) - def test_07_delete_detached_volume(self): + def test_07_resize_fail(self): + """Verify invalid options fail to Resize a volume""" + # Verify the size is the new size is what we wanted it to be. + self.debug("Fail Resize Volume ID: %s" % self.volume.id) + + # first, an invalid id + cmd = resizeVolume.resizeVolumeCmd() + cmd.id = "invalid id" + cmd.diskofferingid = self.services['resizeddiskofferingid'] + success = False + try: + response = self.apiClient.resizeVolume(cmd) + except Exception as ex: + if str(ex) == "HTTP Error 431: 431": + success = True + self.assertEqual(success, True, "ResizeVolume - verify invalid id is handled appropriately") + + # Next, we'll try an invalid disk offering id + cmd.id = self.volume.id + cmd.diskofferingid = "invalid id" + success = False + try: + response = self.apiClient.resizeVolume(cmd) + except Exception as ex: + if "need to specify a disk offering" in str(ex): + success = True + self.assertEqual(success, True, "ResizeVolume - verify disk offering is handled appropriately") + + # Ok, now let's try and resize a volume that is not custom. + cmd.id = self.volume.id + cmd.diskofferingid = self.services['diskofferingid'] + cmd.size = 4 + currentSize = self.volume.size + + self.apiClient.resizeVolume(cmd) + count = 0 + success = True + while count < 10: + list_volume_response = list_volumes( + self.apiClient, + id=self.volume.id, + type='DATADISK' + ) + for vol in list_volume_response: + if vol.id == self.volume.id and vol.size != currentSize: + success = False + if success: + break + else: + time.sleep(1) + count += 1 + + self.assertEqual( + success, + True, + "Verify the volume did not resize" + ) + + + @attr(tags = ["advanced", "advancedns", "smoke"]) + def test_08_resize_volume(self): + """Resize a volume""" + # Verify the size is the new size is what we wanted it to be. + self.debug("Resize Volume ID: %s" % self.volume.id) + + cmd = resizeVolume.resizeVolumeCmd() + cmd.id = self.volume.id + cmd.diskofferingid = self.services['resizeddiskofferingid'] + + self.apiClient.resizeVolume(cmd) + + count = 0 + success = False + while count < 3: + list_volume_response = list_volumes( + self.apiClient, + id=self.volume.id, + type='DATADISK' + ) + for vol in list_volume_response: + if vol.id == self.volume.id and vol.size == 3221225472L: + success = True + if success: + break + else: + time.sleep(10) + count += 1 + + self.assertEqual( + success, + True, + "Check if the volume resized appropriately" + ) + + @attr(tags = ["advanced", "advancedns", "smoke"]) + def test_09_delete_detached_volume(self): """Delete a Volume unattached to an VM """ # Validate the following diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py index 726a628d070..87b0bbb7bbc 100644 --- a/tools/marvin/marvin/integration/lib/base.py +++ b/tools/marvin/marvin/integration/lib/base.py @@ -509,6 +509,12 @@ class Volume: [setattr(cmd, k, v) for k, v in kwargs.items()] return(apiclient.listVolumes(cmd)) + def resize(cls, apiclient, **kwargs): + """Resize a volume""" + cmd = resizeVolume.resizeVolumeCmd() + cmd.id = self.id + [setattr(cmd, k, v) for k, v in kwargs.items()] + return(apiclient.resizeVolume(cmd)) class Snapshot: """Manage Snapshot Lifecycle From c08d151e0572ce105b71658ea40978b66c5c0f69 Mon Sep 17 00:00:00 2001 From: Prachi Damle Date: Wed, 16 Jan 2013 17:16:48 -0800 Subject: [PATCH 71/90] https://issues.apache.org/jira/browse/CLOUDSTACK-993 Changes: - Introduction of maven skipped the java code that inserts the admin user. This causes the NPE in management server while trying to find the user and also, admin user cannot login as expected. - Fixing the insertion of the admin user as part of startup. --- server/src/com/cloud/server/ConfigurationServerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index 5d246281630..74fba896753 100755 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -341,8 +341,8 @@ public class ConfigurationServerImpl implements ConfigurationServer { } // now insert the user - insertSql = "INSERT INTO `cloud`.`user` (id, uuid, username, account_id, firstname, lastname, created, state) " + - "VALUES (" + id + ", UUID(), '" + username + "', 2, '" + firstname + "','" + lastname + "',now(), 'disabled')"; + insertSql = "INSERT INTO `cloud`.`user` (id, username, password, account_id, firstname, lastname, created, state) " + + "VALUES (" + id + ",'" + username + "', RAND(), 2, '" + firstname + "','" + lastname + "',now(), 'disabled')"; txn = Transaction.currentTxn(); try { From 4d4fb9c95964d1981c7ac497fe317f997d367193 Mon Sep 17 00:00:00 2001 From: Prachi Damle Date: Wed, 16 Jan 2013 17:16:48 -0800 Subject: [PATCH 72/90] https://issues.apache.org/jira/browse/CLOUDSTACK-993 Changes: - Introduction of maven skipped the java code that inserts the admin user. This causes the NPE in management server while trying to find the user and also, admin user cannot login as expected. - Fixing the insertion of the admin user as part of startup. --- server/src/com/cloud/server/ConfigurationServerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index 5d246281630..74fba896753 100755 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -341,8 +341,8 @@ public class ConfigurationServerImpl implements ConfigurationServer { } // now insert the user - insertSql = "INSERT INTO `cloud`.`user` (id, uuid, username, account_id, firstname, lastname, created, state) " + - "VALUES (" + id + ", UUID(), '" + username + "', 2, '" + firstname + "','" + lastname + "',now(), 'disabled')"; + insertSql = "INSERT INTO `cloud`.`user` (id, username, password, account_id, firstname, lastname, created, state) " + + "VALUES (" + id + ",'" + username + "', RAND(), 2, '" + firstname + "','" + lastname + "',now(), 'disabled')"; txn = Transaction.currentTxn(); try { From d9e36ac37b7b69bd90ff8e1792bffd8a0fff4dc9 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Wed, 16 Jan 2013 19:18:15 -0800 Subject: [PATCH 73/90] network-refactor: fix license issues Fix build after merge of network-refactor --- .../ConfigurationManagerImpl.java | 2 +- ...ExternalLoadBalancerDeviceManagerImpl.java | 4 +- .../com/cloud/network/NetworkServiceImpl.java | 61 +++++--------- .../lb/LoadBalancingRulesManagerImpl.java | 2 +- .../network/MockFirewallManagerImpl.java | 21 ++++- .../cloud/network/MockNetworkManagerImpl.java | 51 +++++------- .../cloud/network/MockRulesManagerImpl.java | 19 ++++- .../MockRemoteAccessVPNServiceProvider.java | 16 ++++ .../network/vpn/RemoteAccessVpnTest.java | 16 ++++ .../resource/MockResourceManagerImpl.java | 20 ++--- .../com/cloud/vpc/MockNetworkManagerImpl.java | 79 ++++++++++++++----- ...MockVpcVirtualNetworkApplianceManager.java | 3 +- .../test/com/cloud/vpc/Site2SiteVpnTest.java | 16 ++++ 13 files changed, 196 insertions(+), 114 deletions(-) diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java index feef2b23d5b..df6642af9ca 100755 --- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java @@ -3256,7 +3256,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager, Configura String inlineMode = lbServiceCapabilityMap.get(Capability.InlineMode); if (inlineMode != null) { - _networkMgr.checkCapabilityForProvider(serviceProviderMap.get(Service.Lb), Service.Lb, Capability.InlineMode, inlineMode); + _networkModel.checkCapabilityForProvider(serviceProviderMap.get(Service.Lb), Service.Lb, Capability.InlineMode, inlineMode); inline = inlineMode.contains("true"); } else { inline = false; diff --git a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java index 718f130d764..275401cc58f 100644 --- a/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java +++ b/server/src/com/cloud/network/ExternalLoadBalancerDeviceManagerImpl.java @@ -745,7 +745,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase }; private MappingNic getLoadBalancingIpNic(DataCenterVO zone, Network network, long sourceIpId, boolean revoked, String existedGuestIp) throws ResourceUnavailableException { - String srcIp = _networkMgr.getIp(sourceIpId).getAddress().addr(); + String srcIp = _networkModel.getIp(sourceIpId).getAddress().addr(); InlineLoadBalancerNicMapVO mapping = _inlineLoadBalancerNicMapDao.findByPublicIpAddress(srcIp); NicVO loadBalancingIpNic = null; MappingNic nic = new MappingNic(); @@ -1096,7 +1096,7 @@ public abstract class ExternalLoadBalancerDeviceManagerImpl extends AdapterBase return null; } - NetworkElement element = _networkMgr.getElementImplementingProvider(providers.get(0).getName()); + NetworkElement element = _networkModel.getElementImplementingProvider(providers.get(0).getName()); if (!(element instanceof IpDeployer)) { s_logger.error("The firewall provider for network " + network.getName() + " don't have ability to deploy IP address!"); return null; diff --git a/server/src/com/cloud/network/NetworkServiceImpl.java b/server/src/com/cloud/network/NetworkServiceImpl.java index dc8f54956de..b05aece918e 100755 --- a/server/src/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/com/cloud/network/NetworkServiceImpl.java @@ -34,12 +34,13 @@ import javax.naming.ConfigurationException; import org.apache.log4j.Logger; -import com.cloud.acl.ControlledEntity.ACLType; -import com.cloud.acl.SecurityChecker.AccessType; -import com.cloud.api.commands.CreateNetworkCmd; -import com.cloud.api.commands.ListNetworksCmd; -import com.cloud.api.commands.ListTrafficTypeImplementorsCmd; -import com.cloud.api.commands.RestartNetworkCmd; +import org.apache.cloudstack.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.acl.SecurityChecker.AccessType; +import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; +import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; +import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; + import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.dao.ConfigurationDao; @@ -419,50 +420,20 @@ public class NetworkServiceImpl implements NetworkService, Manager { return _networksDao.listSourceNATEnabledNetworks(owner.getId(), zoneId, Network.GuestType.Isolated); } + + + @Override @ActionEvent(eventType = EventTypes.EVENT_NET_IP_ASSIGN, eventDescription = "allocating Ip", create = true) - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) - throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { - - if (networkId != null) { - Network network = _networksDao.findById(networkId); - if (network == null) { - throw new InvalidParameterValueException("Invalid network id is given"); - } - if (network.getGuestType() == Network.GuestType.Shared) { - DataCenter zone = _configMgr.getZone(zoneId); - if (zone == null) { - throw new InvalidParameterValueException("Invalid zone Id is given"); - } - - // if shared network in the advanced zone, then check the caller against the network for 'AccessType.UseNetwork' - if (isSharedNetworkOfferingWithServices(network.getNetworkOfferingId()) && zone.getNetworkType() == NetworkType.Advanced) { - Account caller = UserContext.current().getCaller(); - long callerUserId = UserContext.current().getCallerUserId(); - _accountMgr.checkAccess(caller, AccessType.UseNetwork, false, network); - if (s_logger.isDebugEnabled()) { - s_logger.debug("Associate IP address called by the user " + callerUserId + " account " + ipOwner.getId()); - } - return _networkMgr.allocateIp(ipOwner, false, caller, zone); - } else { - throw new InvalidParameterValueException("Associate IP address can only be called on the shared networks in the advanced zone" + - " with Firewall/Source Nat/Static Nat/Port Forwarding/Load balancing services enabled"); - } - } - } - - return allocateIP(ipOwner, false, zoneId); - } - - protected IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) + public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { Account caller = UserContext.current().getCaller(); // check permissions _accountMgr.checkAccess(caller, null, false, ipOwner); - + long callerUserId = UserContext.current().getCallerUserId(); DataCenter zone = _configMgr.getZone(zoneId); - return _networkMgr.allocateIp(ipOwner, isSystem, caller, zone); + return _networkMgr.allocateIp(ipOwner, isSystem, caller, callerUserId, zone); } @Override @@ -2905,4 +2876,10 @@ public class NetworkServiceImpl implements NetworkService, Manager { return null; } + + @Override + public Network getNetwork(String networkUuid) { + return _networksDao.findByUuid(networkUuid); + } + } diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 0fefb2de67f..c771597c369 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -1083,7 +1083,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa // verify rule is supported by Lb provider of the network LoadBalancingRule loadBalancing = new LoadBalancingRule(newRule, new ArrayList(), new ArrayList()); - if (!_networkMgr.validateRule(loadBalancing)) { + if (validateRule(loadBalancing)) { throw new InvalidParameterValueException("LB service provider cannot support this rule"); } diff --git a/server/test/com/cloud/network/MockFirewallManagerImpl.java b/server/test/com/cloud/network/MockFirewallManagerImpl.java index 0d388f2c3ef..1a79acf746b 100644 --- a/server/test/com/cloud/network/MockFirewallManagerImpl.java +++ b/server/test/com/cloud/network/MockFirewallManagerImpl.java @@ -1,3 +1,19 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. package com.cloud.network; import java.util.List; @@ -6,7 +22,8 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import com.cloud.api.commands.ListFirewallRulesCmd; +import org.apache.cloudstack.api.command.user.firewall.ListFirewallRulesCmd; + import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.firewall.FirewallService; @@ -180,4 +197,6 @@ public class MockFirewallManagerImpl implements FirewallManager, } + + } diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java index 408cfd05cf7..ef5b9c9f9b7 100755 --- a/server/test/com/cloud/network/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java @@ -16,13 +16,20 @@ // under the License. package com.cloud.network; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; + import com.cloud.dc.DataCenter; -import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; @@ -33,17 +40,11 @@ import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InsufficientVirtualNetworkCapcityException; import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; -import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.network.Network.Capability; -import com.cloud.network.Network.GuestType; 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.LoadBalancingServiceProvider; -import com.cloud.network.element.NetworkElement; -import com.cloud.network.element.RemoteAccessVPNServiceProvider; -import com.cloud.network.element.Site2SiteVpnServiceProvider; import com.cloud.network.element.StaticNatServiceProvider; import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; @@ -439,20 +440,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - - - - - - /* (non-Javadoc) - * @see com.cloud.network.NetworkManager#getNetworkLockTimeout() - */ - @Override - public int getNetworkLockTimeout() { - // TODO Auto-generated method stub - return 0; - } - + /* (non-Javadoc) * @see com.cloud.network.NetworkManager#applyRules(java.util.List, com.cloud.network.rules.FirewallRule.Purpose, com.cloud.network.NetworkRuleApplier, boolean) */ @@ -516,7 +504,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS * @see com.cloud.network.NetworkManager#allocateIp(com.cloud.user.Account, boolean, com.cloud.user.Account, com.cloud.dc.DataCenter) */ @Override - public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, DataCenter zone) + public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, long callerId, DataCenter zone) throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException { // TODO Auto-generated method stub return null; @@ -559,15 +547,6 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS return null; } - /* (non-Javadoc) - * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, long, java.lang.Long) - */ - @Override - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, - InsufficientAddressCapacityException, ConcurrentOperationException { - // TODO Auto-generated method stub - return null; - } /* (non-Javadoc) * @see com.cloud.network.NetworkService#restartNetwork(com.cloud.api.commands.RestartNetworkCmd, boolean) @@ -829,4 +808,14 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS // TODO Auto-generated method stub return null; } + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, boolean, long) + */ + @Override + public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException, + InsufficientAddressCapacityException, ConcurrentOperationException { + // TODO Auto-generated method stub + return null; + } } diff --git a/server/test/com/cloud/network/MockRulesManagerImpl.java b/server/test/com/cloud/network/MockRulesManagerImpl.java index fb5be2b9d6b..3687e9c441b 100644 --- a/server/test/com/cloud/network/MockRulesManagerImpl.java +++ b/server/test/com/cloud/network/MockRulesManagerImpl.java @@ -1,3 +1,19 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. package com.cloud.network; import java.util.List; @@ -6,7 +22,8 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import com.cloud.api.commands.ListPortForwardingRulesCmd; +import org.apache.cloudstack.api.command.user.firewall.ListPortForwardingRulesCmd; + import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.NetworkRuleConflictException; import com.cloud.exception.ResourceUnavailableException; diff --git a/server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java b/server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java index ddccc2b31a0..1a01681a112 100644 --- a/server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java +++ b/server/test/com/cloud/network/vpn/MockRemoteAccessVPNServiceProvider.java @@ -1,3 +1,19 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. package com.cloud.network.vpn; import java.util.List; diff --git a/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java b/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java index 25d52e74865..b691d2a1b6f 100644 --- a/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java +++ b/server/test/com/cloud/network/vpn/RemoteAccessVpnTest.java @@ -1,3 +1,19 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. package com.cloud.network.vpn; import java.util.ArrayList; diff --git a/server/test/com/cloud/resource/MockResourceManagerImpl.java b/server/test/com/cloud/resource/MockResourceManagerImpl.java index 19356b36756..e94cdea9853 100644 --- a/server/test/com/cloud/resource/MockResourceManagerImpl.java +++ b/server/test/com/cloud/resource/MockResourceManagerImpl.java @@ -24,21 +24,15 @@ import java.util.Set; import javax.ejb.Local; import javax.naming.ConfigurationException; +import org.apache.cloudstack.api.command.admin.cluster.AddClusterCmd; +import org.apache.cloudstack.api.command.admin.cluster.DeleteClusterCmd; +import org.apache.cloudstack.api.command.admin.host.*; +import org.apache.cloudstack.api.command.admin.storage.*; +import org.apache.cloudstack.api.command.admin.swift.*; + import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupRoutingCommand; -import com.cloud.api.commands.AddClusterCmd; -import com.cloud.api.commands.AddHostCmd; -import com.cloud.api.commands.AddS3Cmd; -import com.cloud.api.commands.AddSecondaryStorageCmd; -import com.cloud.api.commands.AddSwiftCmd; -import com.cloud.api.commands.CancelMaintenanceCmd; -import com.cloud.api.commands.DeleteClusterCmd; -import com.cloud.api.commands.ListS3sCmd; -import com.cloud.api.commands.ListSwiftsCmd; -import com.cloud.api.commands.PrepareForMaintenanceCmd; -import com.cloud.api.commands.ReconnectHostCmd; -import com.cloud.api.commands.UpdateHostCmd; -import com.cloud.api.commands.UpdateHostPasswordCmd; + import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.PodCluster; diff --git a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java index 78d2ea2bbe0..b4e17948a43 100644 --- a/server/test/com/cloud/vpc/MockNetworkManagerImpl.java +++ b/server/test/com/cloud/vpc/MockNetworkManagerImpl.java @@ -16,23 +16,52 @@ // under the License. package com.cloud.vpc; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.ejb.Local; +import javax.naming.ConfigurationException; + +import org.apache.cloudstack.acl.ControlledEntity.ACLType; +import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; +import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; +import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; +import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; +import org.apache.log4j.Logger; + import com.cloud.dc.DataCenter; -import com.cloud.dc.Vlan; import com.cloud.dc.Vlan.VlanType; import com.cloud.deploy.DataCenterDeployment; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlan; -import com.cloud.exception.*; -import com.cloud.hypervisor.Hypervisor.HypervisorType; -import com.cloud.network.*; -import com.cloud.network.Network.Capability; -import com.cloud.network.Network.GuestType; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.InsufficientAddressCapacityException; +import com.cloud.exception.InsufficientCapacityException; +import com.cloud.exception.InsufficientVirtualNetworkCapcityException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.IPAddressVO; +import com.cloud.network.IpAddress; +import com.cloud.network.Network; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; +import com.cloud.network.NetworkManager; +import com.cloud.network.NetworkProfile; +import com.cloud.network.NetworkRuleApplier; +import com.cloud.network.NetworkService; +import com.cloud.network.NetworkVO; import com.cloud.network.Networks.TrafficType; +import com.cloud.network.PhysicalNetwork; +import com.cloud.network.PhysicalNetworkServiceProvider; +import com.cloud.network.PhysicalNetworkTrafficType; +import com.cloud.network.PublicIpAddress; import com.cloud.network.addr.PublicIp; import com.cloud.network.dao.NetworkServiceMapDao; -import com.cloud.network.element.*; +import com.cloud.network.element.LoadBalancingServiceProvider; +import com.cloud.network.element.NetworkElement; +import com.cloud.network.element.StaticNatServiceProvider; +import com.cloud.network.element.UserDataServiceProvider; import com.cloud.network.guru.NetworkGuru; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule.Purpose; @@ -47,18 +76,13 @@ import com.cloud.utils.Pair; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.Inject; import com.cloud.utils.component.Manager; -import com.cloud.vm.*; -import com.cloud.vpc.dao.MockVpcVirtualRouterElement; -import org.apache.cloudstack.acl.ControlledEntity.ACLType; -import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementorsCmd; -import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd; -import org.apache.cloudstack.api.command.user.network.ListNetworksCmd; -import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd; -import org.apache.log4j.Logger; - -import javax.ejb.Local; -import javax.naming.ConfigurationException; -import java.util.*; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.VirtualMachineProfileImpl; @Local(value = { NetworkManager.class, NetworkService.class }) public class MockNetworkManagerImpl implements NetworkManager, NetworkService, Manager{ @@ -155,7 +179,7 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M * @see com.cloud.network.NetworkService#allocateIP(com.cloud.user.Account, long, java.lang.Long) */ @Override - public IpAddress allocateIP(Account ipOwner, long zoneId, Long networkId) throws ResourceAllocationException, + public IpAddress allocateIP(Account ipOwner, boolean isSystem, long networkId) throws ResourceAllocationException, InsufficientAddressCapacityException, ConcurrentOperationException { // TODO Auto-generated method stub return null; @@ -1240,7 +1264,7 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M * @see com.cloud.network.NetworkManager#allocateIp(com.cloud.user.Account, boolean, com.cloud.user.Account, com.cloud.dc.DataCenter) */ @Override - public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, DataCenter zone) + public IpAddress allocateIp(Account ipOwner, boolean isSystem, Account caller, long callerId, DataCenter zone) throws ConcurrentOperationException, ResourceAllocationException, InsufficientAddressCapacityException { // TODO Auto-generated method stub return null; @@ -1288,4 +1312,17 @@ public class MockNetworkManagerImpl implements NetworkManager, NetworkService, M // TODO Auto-generated method stub return null; } + + + + + + /* (non-Javadoc) + * @see com.cloud.network.NetworkService#getNetwork(java.lang.String) + */ + @Override + public Network getNetwork(String networkUuid) { + // TODO Auto-generated method stub + return null; + } } diff --git a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java index 8716a2b5991..65ee33a65ab 100644 --- a/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java +++ b/server/test/com/cloud/vpc/MockVpcVirtualNetworkApplianceManager.java @@ -23,7 +23,8 @@ import java.util.Map; import javax.ejb.Local; import javax.naming.ConfigurationException; -import com.cloud.api.commands.UpgradeRouterCmd; +import org.apache.cloudstack.api.command.admin.router.UpgradeRouterCmd; + import com.cloud.deploy.DeployDestination; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientCapacityException; diff --git a/server/test/com/cloud/vpc/Site2SiteVpnTest.java b/server/test/com/cloud/vpc/Site2SiteVpnTest.java index 57117b1166e..dd6a4fab6a4 100644 --- a/server/test/com/cloud/vpc/Site2SiteVpnTest.java +++ b/server/test/com/cloud/vpc/Site2SiteVpnTest.java @@ -1,3 +1,19 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. package com.cloud.vpc; import java.util.ArrayList; From 3dabd5fbf3b0ddfcbe98e4a6178e206b1de2c7f7 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Wed, 16 Jan 2013 21:52:48 -0800 Subject: [PATCH 74/90] Clean up ApiServer, ApiServlet and ApiDispatcher flow to handle various CloudRuntimeException and CloudException in one place, and Introduced ApiErrorCode to handle CloudStack API error code to standard Http code mapping. Signed-off-by: Min Chen --- .../api/commands/CreatePrivateNetworkCmd.java | 8 +- .../api/commands/DestroyConsoleProxyCmd.java | 2 +- .../apache/cloudstack/api/ApiErrorCode.java | 59 +++++ .../org/apache/cloudstack/api/BaseCmd.java | 25 +- ...BaseUpdateTemplateOrIsoPermissionsCmd.java | 2 +- .../cloudstack/api/ServerApiException.java | 33 ++- .../admin/account/CreateAccountCmd.java | 2 +- .../admin/account/DeleteAccountCmd.java | 2 +- .../admin/account/DisableAccountCmd.java | 2 +- .../admin/account/EnableAccountCmd.java | 3 +- .../command/admin/account/LockAccountCmd.java | 2 +- .../admin/account/UpdateAccountCmd.java | 3 +- .../admin/autoscale/CreateCounterCmd.java | 3 +- .../admin/autoscale/DeleteCounterCmd.java | 5 +- .../command/admin/cluster/AddClusterCmd.java | 6 +- .../admin/cluster/DeleteClusterCmd.java | 3 +- .../admin/cluster/UpdateClusterCmd.java | 3 +- .../command/admin/config/UpdateCfgCmd.java | 3 +- .../UpdateHypervisorCapabilitiesCmd.java | 3 +- .../command/admin/domain/CreateDomainCmd.java | 2 +- .../command/admin/domain/DeleteDomainCmd.java | 2 +- .../command/admin/domain/UpdateDomainCmd.java | 2 +- .../api/command/admin/host/AddHostCmd.java | 5 +- .../admin/host/AddSecondaryStorageCmd.java | 4 +- .../admin/host/CancelMaintenanceCmd.java | 3 +- .../api/command/admin/host/DeleteHostCmd.java | 3 +- .../admin/host/PrepareForMaintenanceCmd.java | 3 +- .../command/admin/host/ReconnectHostCmd.java | 5 +- .../api/command/admin/host/UpdateHostCmd.java | 3 +- .../admin/network/AddNetworkDeviceCmd.java | 5 +- .../network/AddNetworkServiceProviderCmd.java | 5 +- .../network/CreateNetworkOfferingCmd.java | 2 +- .../network/CreatePhysicalNetworkCmd.java | 5 +- .../CreateStorageNetworkIpRangeCmd.java | 3 +- .../admin/network/DeleteNetworkDeviceCmd.java | 7 +- .../network/DeleteNetworkOfferingCmd.java | 3 +- .../DeleteNetworkServiceProviderCmd.java | 7 +- .../network/DeletePhysicalNetworkCmd.java | 2 +- .../DeleteStorageNetworkIpRangeCmd.java | 2 +- .../admin/network/ListNetworkDeviceCmd.java | 5 +- .../network/ListPhysicalNetworksCmd.java | 3 +- .../network/ListStorageNetworkIpRangeCmd.java | 2 +- .../network/UpdateNetworkOfferingCmd.java | 2 +- .../UpdateNetworkServiceProviderCmd.java | 3 +- .../UpdateStorageNetworkIpRangeCmd.java | 2 +- .../admin/offering/CreateDiskOfferingCmd.java | 3 +- .../offering/CreateServiceOfferingCmd.java | 3 +- .../admin/offering/DeleteDiskOfferingCmd.java | 3 +- .../offering/DeleteServiceOfferingCmd.java | 2 +- .../admin/offering/UpdateDiskOfferingCmd.java | 3 +- .../offering/UpdateServiceOfferingCmd.java | 2 +- .../api/command/admin/pod/CreatePodCmd.java | 2 +- .../api/command/admin/pod/DeletePodCmd.java | 3 +- .../api/command/admin/pod/UpdatePodCmd.java | 2 +- .../resource/UploadCustomCertificateCmd.java | 2 +- .../ConfigureVirtualRouterElementCmd.java | 3 +- .../router/CreateVirtualRouterElementCmd.java | 4 +- .../admin/router/DestroyRouterCmd.java | 3 +- .../command/admin/router/RebootRouterCmd.java | 2 +- .../command/admin/router/StartRouterCmd.java | 2 +- .../command/admin/router/StopRouterCmd.java | 3 +- .../admin/router/UpgradeRouterCmd.java | 2 +- .../api/command/admin/storage/AddS3Cmd.java | 5 +- .../CancelPrimaryStorageMaintenanceCmd.java | 3 +- .../admin/storage/CreateStoragePoolCmd.java | 8 +- .../command/admin/storage/DeletePoolCmd.java | 4 +- ...reparePrimaryStorageForMaintenanceCmd.java | 3 +- .../admin/storage/UpdateStoragePoolCmd.java | 2 +- .../api/command/admin/swift/AddSwiftCmd.java | 4 +- .../admin/systemvm/DestroySystemVmCmd.java | 2 +- .../admin/systemvm/MigrateSystemVMCmd.java | 11 +- .../admin/systemvm/RebootSystemVmCmd.java | 3 +- .../admin/systemvm/StartSystemVMCmd.java | 3 +- .../admin/systemvm/StopSystemVmCmd.java | 2 +- .../admin/systemvm/UpgradeSystemVMCmd.java | 2 +- .../admin/usage/AddTrafficTypeCmd.java | 5 +- .../admin/usage/DeleteTrafficTypeCmd.java | 3 +- .../admin/usage/UpdateTrafficTypeCmd.java | 3 +- .../api/command/admin/user/CreateUserCmd.java | 3 +- .../api/command/admin/user/DeleteUserCmd.java | 3 +- .../command/admin/user/DisableUserCmd.java | 3 +- .../api/command/admin/user/EnableUserCmd.java | 2 +- .../api/command/admin/user/LockUserCmd.java | 3 +- .../api/command/admin/user/UpdateUserCmd.java | 2 +- .../admin/vlan/CreateVlanIpRangeCmd.java | 6 +- .../admin/vlan/DeleteVlanIpRangeCmd.java | 3 +- .../api/command/admin/vm/AssignVMCmd.java | 4 +- .../api/command/admin/vm/MigrateVMCmd.java | 10 +- .../api/command/admin/vm/RecoverVMCmd.java | 3 +- .../admin/vpc/CreatePrivateGatewayCmd.java | 9 +- .../admin/vpc/CreateVPCOfferingCmd.java | 4 +- .../admin/vpc/DeletePrivateGatewayCmd.java | 3 +- .../admin/vpc/DeleteVPCOfferingCmd.java | 3 +- .../admin/vpc/UpdateVPCOfferingCmd.java | 2 +- .../api/command/admin/zone/CreateZoneCmd.java | 3 +- .../api/command/admin/zone/DeleteZoneCmd.java | 2 +- .../zone/MarkDefaultZoneForAccountCmd.java | 3 +- .../api/command/admin/zone/UpdateZoneCmd.java | 2 +- .../user/account/AddAccountToProjectCmd.java | 2 +- .../account/DeleteAccountFromProjectCmd.java | 2 +- .../user/address/AssociateIPAddrCmd.java | 9 +- .../user/address/DisassociateIPAddrCmd.java | 2 +- .../autoscale/CreateAutoScalePolicyCmd.java | 2 +- .../autoscale/CreateAutoScaleVmGroupCmd.java | 4 +- .../CreateAutoScaleVmProfileCmd.java | 3 +- .../user/autoscale/CreateConditionCmd.java | 3 +- .../autoscale/DeleteAutoScalePolicyCmd.java | 3 +- .../autoscale/DeleteAutoScaleVmGroupCmd.java | 3 +- .../DeleteAutoScaleVmProfileCmd.java | 3 +- .../user/autoscale/DeleteConditionCmd.java | 5 +- .../autoscale/DisableAutoScaleVmGroupCmd.java | 3 +- .../autoscale/EnableAutoScaleVmGroupCmd.java | 2 +- .../autoscale/UpdateAutoScalePolicyCmd.java | 3 +- .../autoscale/UpdateAutoScaleVmGroupCmd.java | 2 +- .../UpdateAutoScaleVmProfileCmd.java | 2 +- .../user/firewall/CreateFirewallRuleCmd.java | 7 +- .../firewall/CreatePortForwardingRuleCmd.java | 4 +- .../user/firewall/DeleteFirewallRuleCmd.java | 2 +- .../firewall/DeletePortForwardingRuleCmd.java | 2 +- .../firewall/UpdatePortForwardingRuleCmd.java | 2 +- .../api/command/user/iso/AttachIsoCmd.java | 5 +- .../api/command/user/iso/DeleteIsoCmd.java | 3 +- .../api/command/user/iso/DetachIsoCmd.java | 3 +- .../api/command/user/iso/ExtractIsoCmd.java | 4 +- .../api/command/user/iso/RegisterIsoCmd.java | 2 +- .../api/command/user/iso/UpdateIsoCmd.java | 3 +- .../AssignToLoadBalancerRuleCmd.java | 3 +- .../CreateLBStickinessPolicyCmd.java | 5 +- .../CreateLoadBalancerRuleCmd.java | 7 +- .../DeleteLBStickinessPolicyCmd.java | 3 +- .../DeleteLoadBalancerRuleCmd.java | 2 +- .../RemoveFromLoadBalancerRuleCmd.java | 2 +- .../UpdateLoadBalancerRuleCmd.java | 2 +- .../user/nat/CreateIpForwardingRuleCmd.java | 5 +- .../user/nat/DeleteIpForwardingRuleCmd.java | 3 +- .../command/user/nat/DisableStaticNatCmd.java | 3 +- .../command/user/nat/EnableStaticNatCmd.java | 5 +- .../user/network/CreateNetworkACLCmd.java | 7 +- .../user/network/CreateNetworkCmd.java | 3 +- .../user/network/DeleteNetworkACLCmd.java | 3 +- .../user/network/DeleteNetworkCmd.java | 2 +- .../user/network/RestartNetworkCmd.java | 2 +- .../user/network/UpdateNetworkCmd.java | 3 +- .../user/project/ActivateProjectCmd.java | 2 +- .../user/project/CreateProjectCmd.java | 4 +- .../user/project/DeleteProjectCmd.java | 3 +- .../project/DeleteProjectInvitationCmd.java | 3 +- .../user/project/SuspendProjectCmd.java | 2 +- .../user/project/UpdateProjectCmd.java | 3 +- .../project/UpdateProjectInvitationCmd.java | 2 +- .../user/resource/GetCloudIdentifierCmd.java | 3 +- .../user/resource/UpdateResourceCountCmd.java | 2 +- .../user/resource/UpdateResourceLimitCmd.java | 2 +- .../AuthorizeSecurityGroupEgressCmd.java | 2 +- .../AuthorizeSecurityGroupIngressCmd.java | 5 +- .../securitygroup/CreateSecurityGroupCmd.java | 3 +- .../securitygroup/DeleteSecurityGroupCmd.java | 5 +- .../RevokeSecurityGroupEgressCmd.java | 2 +- .../RevokeSecurityGroupIngressCmd.java | 3 +- .../user/snapshot/CreateSnapshotCmd.java | 4 +- .../snapshot/CreateSnapshotPolicyCmd.java | 2 +- .../user/snapshot/DeleteSnapshotCmd.java | 2 +- .../snapshot/DeleteSnapshotPoliciesCmd.java | 3 +- .../api/command/user/tag/CreateTagsCmd.java | 3 +- .../api/command/user/tag/DeleteTagsCmd.java | 3 +- .../user/template/CopyTemplateCmd.java | 5 +- .../user/template/CreateTemplateCmd.java | 4 +- .../user/template/DeleteTemplateCmd.java | 2 +- .../user/template/ExtractTemplateCmd.java | 4 +- .../user/template/RegisterTemplateCmd.java | 5 +- .../user/template/UpdateTemplateCmd.java | 3 +- .../api/command/user/vm/DeployVMCmd.java | 16 +- .../api/command/user/vm/DestroyVMCmd.java | 2 +- .../api/command/user/vm/RebootVMCmd.java | 3 +- .../command/user/vm/ResetVMPasswordCmd.java | 3 +- .../api/command/user/vm/RestoreVMCmd.java | 3 +- .../api/command/user/vm/StartVMCmd.java | 8 +- .../api/command/user/vm/StopVMCmd.java | 2 +- .../api/command/user/vm/UpdateVMCmd.java | 3 +- .../api/command/user/vm/UpgradeVMCmd.java | 2 +- .../user/vmgroup/CreateVMGroupCmd.java | 2 +- .../user/vmgroup/DeleteVMGroupCmd.java | 2 +- .../user/vmgroup/UpdateVMGroupCmd.java | 2 +- .../command/user/volume/AttachVolumeCmd.java | 3 +- .../command/user/volume/CreateVolumeCmd.java | 5 +- .../command/user/volume/DeleteVolumeCmd.java | 3 +- .../command/user/volume/DetachVolumeCmd.java | 2 +- .../command/user/volume/ExtractVolumeCmd.java | 5 +- .../command/user/volume/MigrateVolumeCmd.java | 3 +- .../command/user/volume/ResizeVolumeCmd.java | 13 +- .../command/user/volume/UploadVolumeCmd.java | 2 +- .../user/vpc/CreateStaticRouteCmd.java | 5 +- .../api/command/user/vpc/CreateVPCCmd.java | 11 +- .../user/vpc/DeleteStaticRouteCmd.java | 2 +- .../api/command/user/vpc/DeleteVPCCmd.java | 6 +- .../api/command/user/vpc/RestartVPCCmd.java | 8 +- .../api/command/user/vpc/UpdateVPCCmd.java | 3 +- .../api/command/user/vpn/AddVpnUserCmd.java | 5 +- .../user/vpn/CreateRemoteAccessVpnCmd.java | 8 +- .../user/vpn/CreateVpnConnectionCmd.java | 8 +- .../user/vpn/CreateVpnCustomerGatewayCmd.java | 3 +- .../command/user/vpn/CreateVpnGatewayCmd.java | 3 +- .../user/vpn/DeleteVpnConnectionCmd.java | 4 +- .../user/vpn/DeleteVpnCustomerGatewayCmd.java | 2 +- .../command/user/vpn/DeleteVpnGatewayCmd.java | 2 +- .../command/user/vpn/RemoveVpnUserCmd.java | 5 +- .../user/vpn/ResetVpnConnectionCmd.java | 4 +- .../user/vpn/UpdateVpnCustomerGatewayCmd.java | 2 +- .../command/user/discovery/ListApisCmd.java | 3 +- .../api/commands/netapp/AssociateLunCmd.java | 27 +- .../api/commands/netapp/CreateLunCmd.java | 21 +- .../netapp/CreateVolumeOnFilerCmd.java | 49 ++-- .../commands/netapp/CreateVolumePoolCmd.java | 13 +- .../commands/netapp/DeleteVolumePoolCmd.java | 9 +- .../api/commands/netapp/DestroyLunCmd.java | 9 +- .../netapp/DestroyVolumeOnFilerCmd.java | 20 +- .../api/commands/netapp/DissociateLunCmd.java | 8 +- .../api/commands/netapp/ListLunsCmd.java | 7 +- .../commands/netapp/ListVolumePoolsCmd.java | 7 +- .../netapp/ListVolumesOnFilerCmd.java | 8 +- .../api/commands/ConfigureSimulator.java | 3 +- .../api/commands/DeleteCiscoNexusVSMCmd.java | 5 +- .../api/commands/DisableCiscoNexusVSMCmd.java | 5 +- .../api/commands/EnableCiscoNexusVSMCmd.java | 2 +- .../api/commands/ListCiscoNexusVSMsCmd.java | 15 +- .../commands/AddExternalLoadBalancerCmd.java | 17 +- .../api/commands/AddF5LoadBalancerCmd.java | 10 +- .../commands/ConfigureF5LoadBalancerCmd.java | 6 +- .../DeleteExternalLoadBalancerCmd.java | 16 +- .../api/commands/DeleteF5LoadBalancerCmd.java | 7 +- .../ListF5LoadBalancerNetworksCmd.java | 5 +- .../api/commands/ListF5LoadBalancersCmd.java | 4 +- .../api/commands/AddExternalFirewallCmd.java | 37 +-- .../cloud/api/commands/AddSrxFirewallCmd.java | 13 +- .../api/commands/ConfigureSrxFirewallCmd.java | 9 +- .../commands/DeleteExternalFirewallCmd.java | 21 +- .../api/commands/DeleteSrxFirewallCmd.java | 9 +- .../commands/ListSrxFirewallNetworksCmd.java | 6 +- .../api/commands/ListSrxFirewallsCmd.java | 6 +- .../commands/AddNetscalerLoadBalancerCmd.java | 10 +- .../ConfigureNetscalerLoadBalancerCmd.java | 6 +- .../DeleteNetscalerLoadBalancerCmd.java | 7 +- .../ListNetscalerLoadBalancerNetworksCmd.java | 5 +- .../ListNetscalerLoadBalancersCmd.java | 5 +- .../api/commands/AddNiciraNvpDeviceCmd.java | 22 +- .../commands/DeleteNiciraNvpDeviceCmd.java | 7 +- .../ListNiciraNvpDeviceNetworksCmd.java | 5 +- .../api/commands/ListNiciraNvpDevicesCmd.java | 7 +- server/src/com/cloud/api/ApiDispatcher.java | 233 +++-------------- server/src/com/cloud/api/ApiServer.java | 234 +++++++++++------- server/src/com/cloud/api/ApiServlet.java | 58 ++--- .../api/commands/AddTrafficMonitorCmd.java | 4 +- .../api/commands/DeleteTrafficMonitorCmd.java | 23 +- .../api/commands/GenerateUsageRecordsCmd.java | 2 +- .../com/cloud/async/AsyncJobManagerImpl.java | 158 ++++++------ .../utils/exception/CSExceptionErrorCode.java | 32 --- 256 files changed, 1040 insertions(+), 995 deletions(-) create mode 100644 api/src/org/apache/cloudstack/api/ApiErrorCode.java diff --git a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java index 263f023b3e5..1cc20d78930 100644 --- a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java +++ b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java @@ -145,17 +145,17 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { } catch (InsufficientCapacityException ex){ s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } if (result != null) { this.setEntityId(result.getId()); this.setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a Private network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a Private network"); } } @@ -167,7 +167,7 @@ public class CreatePrivateNetworkCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create private network"); } } diff --git a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java index 80269075744..e749f2210ce 100644 --- a/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java +++ b/api/src/com/cloud/api/commands/DestroyConsoleProxyCmd.java @@ -84,7 +84,7 @@ public class DestroyConsoleProxyCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to destroy console proxy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to destroy console proxy"); } } } diff --git a/api/src/org/apache/cloudstack/api/ApiErrorCode.java b/api/src/org/apache/cloudstack/api/ApiErrorCode.java new file mode 100644 index 00000000000..51671cd7ec2 --- /dev/null +++ b/api/src/org/apache/cloudstack/api/ApiErrorCode.java @@ -0,0 +1,59 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +package org.apache.cloudstack.api; + +/** + * Enum class for various API error code used in CloudStack + * @author minc + * + */ +public enum ApiErrorCode { + + MALFORMED_PARAMETER_ERROR(430), + PARAM_ERROR(431), + UNSUPPORTED_ACTION_ERROR(432), + API_LIMIT_EXCEED(429), + + INTERNAL_ERROR(530), + ACCOUNT_ERROR(531), + ACCOUNT_RESOURCE_LIMIT_ERROR(532), + INSUFFICIENT_CAPACITY_ERROR(533), + RESOURCE_UNAVAILABLE_ERROR(534), + RESOURCE_ALLOCATION_ERROR(534), + RESOURCE_IN_USE_ERROR(536), + NETWORK_RULE_CONFLICT_ERROR(537); + + private int httpCode; + + private ApiErrorCode(int httpStatusCode){ + httpCode = httpStatusCode; + } + + public int getHttpCode() { + return httpCode; + } + + public void setHttpCode(int httpCode) { + this.httpCode = httpCode; + } + + public String toString(){ + return String.valueOf(this.httpCode); + } + + +} diff --git a/api/src/org/apache/cloudstack/api/BaseCmd.java b/api/src/org/apache/cloudstack/api/BaseCmd.java index 3399784d2a2..ef72af9cae9 100644 --- a/api/src/org/apache/cloudstack/api/BaseCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseCmd.java @@ -81,23 +81,6 @@ public abstract class BaseCmd { BOOLEAN, DATE, FLOAT, INTEGER, SHORT, LIST, LONG, OBJECT, MAP, STRING, TZDATE, UUID } - // FIXME: Extract these out into a separate file - // Client error codes - public static final int MALFORMED_PARAMETER_ERROR = 430; - public static final int PARAM_ERROR = 431; - public static final int UNSUPPORTED_ACTION_ERROR = 432; - public static final int PAGE_LIMIT_EXCEED = 433; - - // Server error codes - public static final int INTERNAL_ERROR = 530; - public static final int ACCOUNT_ERROR = 531; - public static final int ACCOUNT_RESOURCE_LIMIT_ERROR = 532; - public static final int INSUFFICIENT_CAPACITY_ERROR = 533; - public static final int RESOURCE_UNAVAILABLE_ERROR = 534; - public static final int RESOURCE_ALLOCATION_ERROR = 534; - public static final int RESOURCE_IN_USE_ERROR = 536; - public static final int NETWORK_RULE_CONFLICT_ERROR = 537; - public static final DateFormat INPUT_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); public static final DateFormat NEW_INPUT_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static Pattern newInputDateFormat = Pattern.compile("[\\d]+-[\\d]+-[\\d]+ [\\d]+:[\\d]+:[\\d]+"); @@ -230,7 +213,7 @@ public abstract class BaseCmd { int arrayStartIndex = key.indexOf('['); int arrayStartLastIndex = key.lastIndexOf('['); if (arrayStartIndex != arrayStartLastIndex) { - throw new ServerApiException(MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup"); } @@ -239,7 +222,7 @@ public abstract class BaseCmd { int arrayEndLastIndex = key.lastIndexOf(']'); if ((arrayEndIndex < arrayStartIndex) || (arrayEndIndex != arrayEndLastIndex)) { // malformed parameter - throw new ServerApiException(MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup"); } @@ -247,7 +230,7 @@ public abstract class BaseCmd { int fieldIndex = key.indexOf('.'); String fieldName = null; if (fieldIndex < arrayEndIndex) { - throw new ServerApiException(MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup"); } else { fieldName = key.substring(fieldIndex + 1); @@ -272,7 +255,7 @@ public abstract class BaseCmd { } if (!parsedIndex) { - throw new ServerApiException(MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + throw new ServerApiException(ApiErrorCode.MALFORMED_PARAMETER_ERROR, "Unable to decode parameter " + key + "; if specifying an object array, please use parameter[index].field=XXX, e.g. userGroupList[0].group=httpGroup"); } diff --git a/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java b/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java index aacc6efa2e0..3222c710c5d 100644 --- a/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java +++ b/api/src/org/apache/cloudstack/api/BaseUpdateTemplateOrIsoPermissionsCmd.java @@ -119,7 +119,7 @@ public abstract class BaseUpdateTemplateOrIsoPermissionsCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update template/iso permissions"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update template/iso permissions"); } } } diff --git a/api/src/org/apache/cloudstack/api/ServerApiException.java b/api/src/org/apache/cloudstack/api/ServerApiException.java index 1f57b74745d..682e5b7e774 100644 --- a/api/src/org/apache/cloudstack/api/ServerApiException.java +++ b/api/src/org/apache/cloudstack/api/ServerApiException.java @@ -15,28 +15,51 @@ // specific language governing permissions and limitations // under the License. package org.apache.cloudstack.api; +import java.util.ArrayList; + +import com.cloud.exception.CloudException; +import com.cloud.utils.exception.CSExceptionErrorCode; import com.cloud.utils.exception.CloudRuntimeException; @SuppressWarnings("serial") public class ServerApiException extends CloudRuntimeException { - private int _errorCode; + private ApiErrorCode _errorCode; private String _description; public ServerApiException() { - _errorCode = 0; + _errorCode = ApiErrorCode.INTERNAL_ERROR; _description = null; + setCSErrorCode(CSExceptionErrorCode.getCSErrCode(ServerApiException.class.getName())); } - public ServerApiException(int errorCode, String description) { + public ServerApiException(ApiErrorCode errorCode, String description) { _errorCode = errorCode; _description = description; + setCSErrorCode(CSExceptionErrorCode.getCSErrCode(ServerApiException.class.getName())); } - public int getErrorCode() { + // wrap a specific CloudRuntimeException to a ServerApiException + public ServerApiException(ApiErrorCode errorCode, String description, Throwable cause){ + super(description, cause); + _errorCode = errorCode; + _description = description; + if (cause instanceof CloudRuntimeException || cause instanceof CloudException ) { + CloudRuntimeException rt = (CloudRuntimeException) cause; + ArrayList idList = rt.getIdProxyList(); + if (idList != null) { + for (int i = 0; i < idList.size(); i++) { + addProxyObject(idList.get(i)); + } + } + setCSErrorCode(rt.getCSErrorCode()); + } + } + + public ApiErrorCode getErrorCode() { return _errorCode; } - public void setErrorCode(int errorCode) { + public void setErrorCode(ApiErrorCode errorCode) { _errorCode = errorCode; } diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java index f93787b7bc5..a13cf6253a7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/CreateAccountCmd.java @@ -151,7 +151,7 @@ public class CreateAccountCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a user account"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a user account"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java index a1d9b6419cb..86ccb4ba20b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DeleteAccountCmd.java @@ -91,7 +91,7 @@ public class DeleteAccountCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete user account and all corresponding users"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete user account and all corresponding users"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java index f0a5e7078b7..318dfda7ded 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/DisableAccountCmd.java @@ -115,7 +115,7 @@ public class DisableAccountCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, lockRequested == true ? "Failed to lock account" : "Failed to disable account" ); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, lockRequested == true ? "Failed to lock account" : "Failed to disable account" ); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java index 4aa1e4fc1b9..2688ef1510a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/EnableAccountCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.account; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -95,7 +96,7 @@ public class EnableAccountCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to enable account"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to enable account"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java index 34e9e53b84d..c67e8463228 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/LockAccountCmd.java @@ -84,7 +84,7 @@ public class LockAccountCmd extends BaseCmd { // response.setResponseName(getCommandName()); // this.setResponseObject(response); // } else { -// throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to lock account"); +// throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to lock account"); // } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java index f1340464d6b..ea6d9078ed6 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/account/UpdateAccountCmd.java @@ -22,6 +22,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -125,7 +126,7 @@ public class UpdateAccountCmd extends BaseCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update account"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update account"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java index a119d0f44bf..8c987228022 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/CreateCounterCmd.java @@ -20,6 +20,7 @@ package org.apache.cloudstack.api.command.admin.autoscale; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -86,7 +87,7 @@ public class CreateCounterCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create Counter with name " + getName()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create Counter with name " + getName()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java index 9304eeb7b93..2fde0617693 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/autoscale/DeleteCounterCmd.java @@ -20,6 +20,7 @@ package org.apache.cloudstack.api.command.admin.autoscale; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -56,7 +57,7 @@ public class DeleteCounterCmd extends BaseAsyncCmd { result = _autoScaleService.deleteCounter(getId()); } catch (ResourceInUseException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, ex.getMessage()); } if (result) { @@ -64,7 +65,7 @@ public class DeleteCounterCmd extends BaseAsyncCmd { this.setResponseObject(response); } else { s_logger.warn("Failed to delete counter with Id: " + getId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete counter."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete counter."); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java index 28bf72ddba7..c64883c16cf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/AddClusterCmd.java @@ -156,7 +156,7 @@ public class AddClusterCmd extends BaseCmd { clusterResponses.add(clusterResponse); } } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add cluster"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add cluster"); } response.setResponses(clusterResponses); @@ -165,10 +165,10 @@ public class AddClusterCmd extends BaseCmd { this.setResponseObject(response); } catch (DiscoveryException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (ResourceInUseException ex) { s_logger.warn("Exception: ", ex); - ServerApiException e = new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + ServerApiException e = new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); for (String proxyObj : ex.getIdProxyList()) { e.addProxyObject(proxyObj); } diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java index f0b40cb6b03..93103d3f60e 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/DeleteClusterCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.cluster; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -70,7 +71,7 @@ public class DeleteClusterCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete cluster"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete cluster"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java index 03b43def3ca..d6ec7188d0b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/cluster/UpdateClusterCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.cluster; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -112,7 +113,7 @@ public class UpdateClusterCmd extends BaseCmd { clusterResponse.setResponseName(getCommandName()); this.setResponseObject(clusterResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update cluster"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update cluster"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java index 79693e76f84..1c435178efa 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateCfgCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.config; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -76,7 +77,7 @@ public class UpdateCfgCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update config"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update config"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java index 82880c1fbae..19587f4483c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/config/UpdateHypervisorCapabilitiesCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.config; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -86,7 +87,7 @@ public class UpdateHypervisorCapabilitiesCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update hypervisor capabilities"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update hypervisor capabilities"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java index 0e6ae32583b..61614d171f0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/CreateDomainCmd.java @@ -84,7 +84,7 @@ public class CreateDomainCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create domain"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create domain"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java index 7009e70ca32..3fda9608c13 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/DeleteDomainCmd.java @@ -93,7 +93,7 @@ public class DeleteDomainCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete domain"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete domain"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java index cc5926cace1..607120c1886 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/domain/UpdateDomainCmd.java @@ -83,7 +83,7 @@ public class UpdateDomainCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update domain"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update domain"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java index 0a0a98c1c45..77296c72a4a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddHostCmd.java @@ -22,6 +22,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -148,7 +149,7 @@ public class AddHostCmd extends BaseCmd { hostResponses.add(hostResponse); } } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add host"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add host"); } response.setResponses(hostResponses); @@ -157,7 +158,7 @@ public class AddHostCmd extends BaseCmd { this.setResponseObject(response); } catch (DiscoveryException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java index 579e286f884..3bcee811151 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/AddSecondaryStorageCmd.java @@ -84,11 +84,11 @@ public class AddSecondaryStorageCmd extends BaseCmd { this.setResponseObject(hostResponse); } } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add secondary storage"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add secondary storage"); } } catch (DiscoveryException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java index 93dca9140f9..8c617c03c76 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/CancelMaintenanceCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.host; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -104,7 +105,7 @@ public class CancelMaintenanceCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to cancel host maintenance"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to cancel host maintenance"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java index 5103f986e10..c2b731b8407 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/DeleteHostCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.HostResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -84,7 +85,7 @@ public class DeleteHostCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete host"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete host"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java index 385e2aef415..80b53aa1362 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/PrepareForMaintenanceCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.host; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -104,7 +105,7 @@ public class PrepareForMaintenanceCmd extends BaseAsyncCmd { response.setResponseName("host"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to prepare host for maintenance"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to prepare host for maintenance"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java index 99e867bbebd..f42ec4b4814 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ReconnectHostCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.host; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -103,11 +104,11 @@ public class ReconnectHostCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to reconnect host"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to reconnect host"); } } catch (Exception ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java index 9ab27178838..c1e374e030b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/UpdateHostCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -108,7 +109,7 @@ public class UpdateHostCmd extends BaseCmd { this.setResponseObject(hostResponse); } catch (Exception e) { s_logger.debug("Failed to update host:" + getId(), e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update host:" + getId() + "," + e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update host:" + getId() + "," + e.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java index 3e1d74df405..b8f98021c40 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkDeviceCmd.java @@ -21,6 +21,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -74,9 +75,9 @@ public class AddNetworkDeviceCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage()); } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java index 6d4b962d4a1..22802f936a0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/AddNetworkServiceProviderCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -103,7 +104,7 @@ public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add service provider to physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add service provider to physical network"); } } @@ -114,7 +115,7 @@ public class AddNetworkServiceProviderCmd extends BaseAsyncCreateCmd { setEntityId(result.getId()); setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add service provider entity to physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add service provider entity to physical network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java index b97f85ec1ba..6733a35a5fd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java @@ -225,7 +225,7 @@ public class CreateNetworkOfferingCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create network offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create network offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java index f56ae7dbf50..1b83a9114e4 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreatePhysicalNetworkCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -151,7 +152,7 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create physical network"); } } @@ -162,7 +163,7 @@ public class CreatePhysicalNetworkCmd extends BaseAsyncCreateCmd { setEntityId(result.getId()); setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create physical network entity"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create physical network entity"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java index ccd92e19d67..59db3eb17c5 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/CreateStorageNetworkIpRangeCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -110,7 +111,7 @@ public class CreateStorageNetworkIpRangeCmd extends BaseAsyncCmd { this.setResponseObject(response); } catch (Exception e) { s_logger.warn("Create storage network IP range failed", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java index 09451242daf..4d8d18e59ba 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkDeviceCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -65,12 +66,12 @@ public class DeleteNetworkDeviceCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network device:" + getId()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete network device:" + getId()); } } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage()); } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java index c13088f6123..69f24b419c0 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkOfferingCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -70,7 +71,7 @@ public class DeleteNetworkOfferingCmd extends BaseCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete service offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete service offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java index bc744399a33..f0d2a128acc 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteNetworkServiceProviderCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.network; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -76,14 +77,14 @@ public class DeleteNetworkServiceProviderCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network service provider"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete network service provider"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java index 5f86efa9ad8..178ccb8e0b7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeletePhysicalNetworkCmd.java @@ -70,7 +70,7 @@ public class DeletePhysicalNetworkCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete physical network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java index 1873fc7d6ef..5fa26f69a48 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/DeleteStorageNetworkIpRangeCmd.java @@ -70,7 +70,7 @@ public class DeleteStorageNetworkIpRangeCmd extends BaseAsyncCmd { this.setResponseObject(response); } catch (Exception e) { s_logger.warn("Failed to delete storage network ip range " + getId(), e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java index 742ff1f74af..11e74fbb8ce 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListNetworkDeviceCmd.java @@ -23,6 +23,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; @@ -85,9 +86,9 @@ public class ListNetworkDeviceCmd extends BaseListCmd { listResponse.setResponseName(getCommandName()); this.setResponseObject(listResponse); } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage()); } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java index a301ac004ea..3331d48103a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListPhysicalNetworksCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; @@ -100,7 +101,7 @@ public class ListPhysicalNetworksCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to search for physical networks"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to search for physical networks"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java index 8fcaf4958b1..b5045bb99fd 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/ListStorageNetworkIpRangeCmd.java @@ -88,7 +88,7 @@ public class ListStorageNetworkIpRangeCmd extends BaseListCmd { this.setResponseObject(response); } catch (Exception e) { s_logger.warn("Failed to list storage network ip range for rangeId=" + getRangeId() + " podId=" + getPodId() + " zoneId=" + getZoneId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java index dc2f3099206..ca4709deb2b 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkOfferingCmd.java @@ -102,7 +102,7 @@ public class UpdateNetworkOfferingCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update network offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update network offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java index b770ea26c12..d64fd0796ee 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateNetworkServiceProviderCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -88,7 +89,7 @@ public class UpdateNetworkServiceProviderCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update service provider"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update service provider"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java index d6d0b92e4b7..d49d3c4e911 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/network/UpdateStorageNetworkIpRangeCmd.java @@ -96,7 +96,7 @@ public class UpdateStorageNetworkIpRangeCmd extends BaseAsyncCmd { this.setResponseObject(response); } catch (Exception e) { s_logger.warn("Update storage network IP range failed", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java index 08101dc4137..6c3630690f7 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateDiskOfferingCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -115,7 +116,7 @@ public class CreateDiskOfferingCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create disk offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create disk offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java index f93c2a88ce2..54151fe13b9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/CreateServiceOfferingCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -162,7 +163,7 @@ public class CreateServiceOfferingCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create service offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create service offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java index 85e034f6191..3f854637b8c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteDiskOfferingCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.DiskOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -70,7 +71,7 @@ public class DeleteDiskOfferingCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete disk offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete disk offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java index d1ea4de0504..0a8949b9071 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/DeleteServiceOfferingCmd.java @@ -68,7 +68,7 @@ public class DeleteServiceOfferingCmd extends BaseCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete service offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete service offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java index 8db731d3b31..734b18bfb93 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateDiskOfferingCmd.java @@ -18,6 +18,7 @@ package org.apache.cloudstack.api.command.admin.offering; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -91,7 +92,7 @@ public class UpdateDiskOfferingCmd extends BaseCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update disk offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update disk offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java index 38220b90673..9dddd7d6718 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/offering/UpdateServiceOfferingCmd.java @@ -89,7 +89,7 @@ public class UpdateServiceOfferingCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update service offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update service offering"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java index 331968b00db..95d9e53be75 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/CreatePodCmd.java @@ -111,7 +111,7 @@ public class CreatePodCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create pod"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create pod"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java index 8c64a8dad33..4080a7c46ee 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/DeletePodCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.pod; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -70,7 +71,7 @@ public class DeletePodCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete pod"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete pod"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java index ca5e03953a3..c99da9d8199 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/pod/UpdatePodCmd.java @@ -110,7 +110,7 @@ public class UpdatePodCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update pod"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update pod"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java b/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java index 0e559189904..97ec1dcee45 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/resource/UploadCustomCertificateCmd.java @@ -99,7 +99,7 @@ public class UploadCustomCertificateCmd extends BaseAsyncCmd { response.setObjectName("customcertificate"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to upload custom certificate"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to upload custom certificate"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java index be6be26a36f..766e19cbe57 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/ConfigureVirtualRouterElementCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.router; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -120,7 +121,7 @@ public class ConfigureVirtualRouterElementCmd extends BaseAsyncCmd { routerResponse.setResponseName(getCommandName()); this.setResponseObject(routerResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to configure the virtual router provider"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to configure the virtual router provider"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java index f6a7b744ca3..54a840987df 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/CreateVirtualRouterElementCmd.java @@ -82,7 +82,7 @@ public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network"); } } @@ -93,7 +93,7 @@ public class CreateVirtualRouterElementCmd extends BaseAsyncCreateCmd { setEntityId(result.getId()); setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add Virtual Router entity to physical network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java index 1157aaa7b93..1645456bffb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/DestroyRouterCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.router; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -104,7 +105,7 @@ public class DestroyRouterCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to destroy router"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to destroy router"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java index 9c50d2ffb0f..a095fce9cb9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/RebootRouterCmd.java @@ -98,7 +98,7 @@ public class RebootRouterCmd extends BaseAsyncCmd { response.setResponseName("router"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to reboot router"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to reboot router"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java index f1f3f681829..595afc76d12 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StartRouterCmd.java @@ -102,7 +102,7 @@ public class StartRouterCmd extends BaseAsyncCmd { routerResponse.setResponseName(getCommandName()); this.setResponseObject(routerResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to start router"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to start router"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java index 2d1b609aa5d..571b2c19977 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/StopRouterCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.router; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -109,7 +110,7 @@ public class StopRouterCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to stop router"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to stop router"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java index e2b020e09f9..f8742a2cefb 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/router/UpgradeRouterCmd.java @@ -81,7 +81,7 @@ public class UpgradeRouterCmd extends BaseCmd { routerResponse.setResponseName(getCommandName()); this.setResponseObject(routerResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to upgrade router"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to upgrade router"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/AddS3Cmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/AddS3Cmd.java index 13f066a6e57..ec62858f597 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/AddS3Cmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/AddS3Cmd.java @@ -31,6 +31,7 @@ import static org.apache.cloudstack.api.BaseCmd.CommandType.STRING; import static org.apache.cloudstack.api.BaseCmd.CommandType.BOOLEAN; import static com.cloud.user.Account.ACCOUNT_ID_SYSTEM; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -93,12 +94,12 @@ public final class AddS3Cmd extends BaseCmd { result = _resourceService.discoverS3(this); if (result == null) { - throw new ServerApiException(INTERNAL_ERROR, "Failed to add S3."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add S3."); } } catch (DiscoveryException e) { - throw new ServerApiException(INTERNAL_ERROR, "Failed to add S3 due to " + e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add S3 due to " + e.getMessage()); } diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java index 24ef48be222..59a2164e4d6 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/CancelPrimaryStorageMaintenanceCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.storage; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -107,7 +108,7 @@ public class CancelPrimaryStorageMaintenanceCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to cancel primary storage maintenance"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to cancel primary storage maintenance"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java index 78a142ac449..b5068115eb1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/CreateStoragePoolCmd.java @@ -122,17 +122,17 @@ public class CreateStoragePoolCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add storage pool"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add storage pool"); } } catch (ResourceUnavailableException ex1) { s_logger.warn("Exception: ", ex1); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex1.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex1.getMessage()); }catch (ResourceInUseException ex2) { s_logger.warn("Exception: ", ex2); - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, ex2.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, ex2.getMessage()); } catch (UnknownHostException ex3) { s_logger.warn("Exception: ", ex3); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex3.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex3.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java index 1510f7822f7..8cf4a4b7970 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/DeletePoolCmd.java @@ -78,9 +78,9 @@ public class DeletePoolCmd extends BaseCmd { } else { StoragePool pool = _storageService.getStoragePool(id); if (pool != null && pool.getStatus() == StoragePoolStatus.Removed) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to finish storage pool removal. The storage pool will not be used but cleanup is needed"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to finish storage pool removal. The storage pool will not be used but cleanup is needed"); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete storage pool"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete storage pool"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java index 6a4175516cc..ab9c226909d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/PreparePrimaryStorageForMaintenanceCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.storage; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -105,7 +106,7 @@ public class PreparePrimaryStorageForMaintenanceCmd extends BaseAsyncCmd { response.setResponseName("storagepool"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to prepare primary storage for maintenance"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to prepare primary storage for maintenance"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java b/api/src/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java index 806df561397..b60ed7f9767 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/storage/UpdateStoragePoolCmd.java @@ -78,7 +78,7 @@ public class UpdateStoragePoolCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update storage pool"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update storage pool"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java b/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java index 23a00ca04dc..61f903e9c3c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/swift/AddSwiftCmd.java @@ -92,12 +92,12 @@ public class AddSwiftCmd extends BaseCmd { swiftResponse.setObjectName("swift"); this.setResponseObject(swiftResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add Swift"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add Swift"); } } catch (DiscoveryException ex) { String errMsg = "Failed to add Swift due to " + ex.toString(); s_logger.warn(errMsg, ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, errMsg); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, errMsg); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java index ad0f09cba46..dc53ea751b4 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/DestroySystemVmCmd.java @@ -95,7 +95,7 @@ public class DestroySystemVmCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Fail to destroy system vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Fail to destroy system vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java index dd844acd17f..909fe20f883 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/MigrateSystemVMCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.systemvm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -116,20 +117,20 @@ public class MigrateSystemVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to migrate the system vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to migrate the system vm"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } catch (ManagementServerException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } catch (VirtualMachineMigrationException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java index 49e895b22fe..2e7b5303395 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/RebootSystemVmCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.systemvm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -105,7 +106,7 @@ public class RebootSystemVmCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Fail to reboot system vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Fail to reboot system vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java index 70ab5f38720..40f9d62aa64 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StartSystemVMCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.systemvm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -109,7 +110,7 @@ public class StartSystemVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Fail to start system vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Fail to start system vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java index af2bd3ad64f..134043cb388 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/StopSystemVmCmd.java @@ -112,7 +112,7 @@ public class StopSystemVmCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Fail to stop system vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Fail to stop system vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java index 290c3603f1f..14046f39aaf 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/systemvm/UpgradeSystemVMCmd.java @@ -94,7 +94,7 @@ public class UpgradeSystemVMCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Fail to reboot system vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Fail to reboot system vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java index 5dca9d2d4c1..a7336245366 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/AddTrafficTypeCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -123,7 +124,7 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add traffic type to physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add traffic type to physical network"); } } @@ -134,7 +135,7 @@ public class AddTrafficTypeCmd extends BaseAsyncCreateCmd { setEntityId(result.getId()); setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add traffic type to physical network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add traffic type to physical network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java index bb665fbfd58..526921830ec 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/DeleteTrafficTypeCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.TrafficTypeResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -73,7 +74,7 @@ public class DeleteTrafficTypeCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete traffic type"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete traffic type"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java index 279c2b858d3..fca07028160 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/usage/UpdateTrafficTypeCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.usage; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -95,7 +96,7 @@ public class UpdateTrafficTypeCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update traffic type"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update traffic type"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java index 2045abf4e93..1f1e3abc1af 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/CreateUserCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -137,7 +138,7 @@ public class CreateUserCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a user"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java index a43501e7641..74a073c72d9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DeleteUserCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -76,7 +77,7 @@ public class DeleteUserCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete user"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java index f483e628928..6b59de5672d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/DisableUserCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -92,7 +93,7 @@ public class DisableUserCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to disable user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to disable user"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java index e444aa395d2..bcd0f43e03a 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/EnableUserCmd.java @@ -76,7 +76,7 @@ public class EnableUserCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to enable user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to enable user"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java index 622b4e9a023..1b00bfd29ca 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/LockUserCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.user; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -77,7 +78,7 @@ public class LockUserCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to lock user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to lock user"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java index 170d852ff58..00bfccc1038 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/user/UpdateUserCmd.java @@ -132,7 +132,7 @@ public class UpdateUserCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update user"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java index c9717480e44..9ac1e253bfe 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/CreateVlanIpRangeCmd.java @@ -169,14 +169,14 @@ public class CreateVlanIpRangeCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create vlan ip range"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create vlan ip range"); } } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientCapacityException ex) { s_logger.info(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java index f12b2175aef..d45082a2ace 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vlan/DeleteVlanIpRangeCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.VlanIpRangeResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -70,7 +71,7 @@ public class DeleteVlanIpRangeCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete vlan ip range"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete vlan ip range"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java index 3482ec756fb..525e8d72f8f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java @@ -101,14 +101,14 @@ public class AssignVMCmd extends BaseCmd { try { UserVm userVm = _userVmService.moveVMToUser(this); if (userVm == null){ - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to move vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to move vm"); } UserVmResponse response = _responseGenerator.createUserVmResponse("virtualmachine", userVm).get(0); response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); }catch (Exception e){ e.printStackTrace(); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to move vm " + e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to move vm " + e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java index 5bb694da655..e1f20a8e9d3 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/MigrateVMCmd.java @@ -150,20 +150,20 @@ public class MigrateVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to migrate vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to migrate vm"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } catch (ManagementServerException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } catch (VirtualMachineMigrationException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java index f8308614b89..be4d10b8b5f 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vm/RecoverVMCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.vm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -77,7 +78,7 @@ public class RecoverVMCmd extends BaseCmd { recoverVmResponse.setResponseName(getCommandName()); this.setResponseObject(recoverVmResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to recover vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to recover vm"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java index 5bb76ab034b..392b6276bc9 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreatePrivateGatewayCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; @@ -115,17 +116,17 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { } catch (InsufficientCapacityException ex){ s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } if (result != null) { this.setEntityId(result.getId()); this.setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create private gateway"); } } @@ -138,7 +139,7 @@ public class CreatePrivateGatewayCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create private gateway"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java index 273f7c05233..8ccb9d5e68c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/CreateVPCOfferingCmd.java @@ -72,7 +72,7 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{ this.setEntityId(vpcOff.getId()); this.setEntityUuid(vpcOff.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a VPC offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a VPC offering"); } } @@ -84,7 +84,7 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create VPC offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create VPC offering"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java index 4a1e8d05912..2b0e1a6a193 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeletePrivateGatewayCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.PrivateGatewayResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -87,7 +88,7 @@ public class DeletePrivateGatewayCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete private gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete private gateway"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java index 231f2ee2955..9a257c24c0c 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/DeleteVPCOfferingCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.VpcOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -71,7 +72,7 @@ public class DeleteVPCOfferingCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete VPC offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete VPC offering"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java index 65df48e3e1f..c8fa77df1ff 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/vpc/UpdateVPCOfferingCmd.java @@ -90,7 +90,7 @@ public class UpdateVPCOfferingCmd extends BaseAsyncCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update VPC offering"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update VPC offering"); } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java index e49f2439288..ae57fae5a8d 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/CreateZoneCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.zone; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -156,7 +157,7 @@ public class CreateZoneCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a zone"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a zone"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java index d09c7fff891..e9a02accba1 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/DeleteZoneCmd.java @@ -71,7 +71,7 @@ public class DeleteZoneCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete zone"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete zone"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java index 816befbd029..59a37c96a84 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/MarkDefaultZoneForAccountCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.admin.zone; import org.apache.log4j.Logger; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -109,7 +110,7 @@ public class MarkDefaultZoneForAccountCmd extends BaseAsyncCmd { this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to mark the account with the default zone"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to mark the account with the default zone"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java index 0bfd1a31a0f..143c8f7a892 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/zone/UpdateZoneCmd.java @@ -164,7 +164,7 @@ public class UpdateZoneCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update zone; internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update zone; internal error."); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java index 889c3697515..f62be0bf8c3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/AddAccountToProjectCmd.java @@ -87,7 +87,7 @@ public class AddAccountToProjectCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add account to the project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add account to the project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java index f9e967ad4c2..ef14d1ae7aa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/account/DeleteAccountFromProjectCmd.java @@ -76,7 +76,7 @@ public class DeleteAccountFromProjectCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete account from the project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete account from the project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java index 93bb2401d8f..4437191db37 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/AssociateIPAddrCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; @@ -219,15 +220,15 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { this.setEntityId(ip.getId()); this.setEntityUuid(ip.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to allocate ip address"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to allocate ip address"); } } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientAddressCapacityException ex) { s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } } @@ -249,7 +250,7 @@ public class AssociateIPAddrCmd extends BaseAsyncCreateCmd { ipResponse.setResponseName(getCommandName()); this.setResponseObject(ipResponse); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to assign ip address"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to assign ip address"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java index 20ccd89ba84..c208a1a3d92 100644 --- a/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/address/DisassociateIPAddrCmd.java @@ -75,7 +75,7 @@ public class DisassociateIPAddrCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to disassociate ip address"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to disassociate ip address"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java index e92721d77bf..987d305b4b0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScalePolicyCmd.java @@ -157,7 +157,7 @@ public class CreateAutoScalePolicyCmd extends BaseAsyncCreateCmd { this.setEntityId(result.getId()); this.setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create AutoScale Policy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create AutoScale Policy"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java index e3d47a09c7d..400be5db3f1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmGroupCmd.java @@ -159,7 +159,7 @@ public class CreateAutoScaleVmGroupCmd extends BaseAsyncCreateCmd { this.setEntityId(result.getId()); this.setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create Autoscale Vm Group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create Autoscale Vm Group"); } } @@ -182,7 +182,7 @@ public class CreateAutoScaleVmGroupCmd extends BaseAsyncCreateCmd { } finally { if (!success || vmGroup == null) { _autoScaleService.deleteAutoScaleVmGroup(getEntityId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create Autoscale Vm Group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create Autoscale Vm Group"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java index 25bb03b778f..39814e7b9ce 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java @@ -22,6 +22,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -231,7 +232,7 @@ public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd { this.setEntityId(result.getId()); this.setEntityUuid(result.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create Autoscale Vm Profile"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create Autoscale Vm Profile"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java index 58926f2a4ff..89da2345134 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/CreateConditionCmd.java @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -74,7 +75,7 @@ public class CreateConditionCmd extends BaseAsyncCreateCmd { this.setEntityId(condition.getId()); this.setEntityUuid(condition.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create condition."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create condition."); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java index 483a87ac892..aa236ee082e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScalePolicyCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.AutoScalePolicyResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -92,7 +93,7 @@ public class DeleteAutoScalePolicyCmd extends BaseAsyncCmd { this.setResponseObject(response); } else { s_logger.warn("Failed to delete autoscale policy " + getId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete AutoScale Policy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete AutoScale Policy"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java index 1d78fe80395..54eb7462750 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmGroupCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.AutoScaleVmGroupResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -92,7 +93,7 @@ public class DeleteAutoScaleVmGroupCmd extends BaseAsyncCmd { this.setResponseObject(response); } else { s_logger.warn("Failed to delete autoscale vm group " + getId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete autoscale vm group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete autoscale vm group"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java index e49f0c862a3..726f006ef02 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteAutoScaleVmProfileCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -91,7 +92,7 @@ public class DeleteAutoScaleVmProfileCmd extends BaseAsyncCmd { this.setResponseObject(response); } else { s_logger.warn("Failed to delete autoscale vm profile " + getId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete autoscale vm profile"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete autoscale vm profile"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java index a1fba2e3725..5ce1ee27a73 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DeleteConditionCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.ConditionResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -57,14 +58,14 @@ public class DeleteConditionCmd extends BaseAsyncCmd { result = _autoScaleService.deleteCondition(getId()); } catch (ResourceInUseException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, ex.getMessage()); } if (result) { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { s_logger.warn("Failed to delete condition " + getId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete condition."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete condition."); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java index 2aba82c2a93..f4f9212979e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/DisableAutoScaleVmGroupCmd.java @@ -20,6 +20,7 @@ package org.apache.cloudstack.api.command.user.autoscale; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -56,7 +57,7 @@ public class DisableAutoScaleVmGroupCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to disable AutoScale Vm Group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to disable AutoScale Vm Group"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java index db7acdf5d98..80ac818d263 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/EnableAutoScaleVmGroupCmd.java @@ -52,7 +52,7 @@ public class EnableAutoScaleVmGroupCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to enable AutoScale Vm Group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to enable AutoScale Vm Group"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java index 56d71078ece..6a55a4aa1e6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScalePolicyCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.ConditionResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -68,7 +69,7 @@ public class UpdateAutoScalePolicyCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update autoscale policy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update autoscale policy"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java index ea5b6a9f489..fc6a7c6b861 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmGroupCmd.java @@ -75,7 +75,7 @@ public class UpdateAutoScaleVmGroupCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update autoscale VmGroup"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update autoscale VmGroup"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java index c8ef8b11198..570ed0beb3d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java @@ -73,7 +73,7 @@ public class UpdateAutoScaleVmProfileCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update autoscale vm profile"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update autoscale vm profile"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java index 7039b417ced..0dcba5f4d5b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreateFirewallRuleCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; @@ -134,7 +135,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal } finally { if (!success || rule == null) { _firewallService.revokeFirewallRule(getEntityId(), true); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create firewall rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create firewall rule"); } } } @@ -231,7 +232,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal if (getSourceCidrList() != null) { for (String cidr: getSourceCidrList()){ if (!NetUtils.isValidCIDR(cidr)){ - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Source cidrs formatting error " + cidr); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Source cidrs formatting error " + cidr); } } } @@ -243,7 +244,7 @@ public class CreateFirewallRuleCmd extends BaseAsyncCreateCmd implements Firewal } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " + ex.getMessage()); s_logger.trace("Network Rule Conflict: ", ex); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java index 1feefde9a1a..7d8dbb0bbdf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/CreatePortForwardingRuleCmd.java @@ -185,7 +185,7 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P _rulesService.revokePortForwardingRule(getEntityId(), true); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to apply port forwarding rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to apply port forwarding rule"); } } } @@ -302,7 +302,7 @@ public class CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd implements P } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " , ex); s_logger.trace("Network Rule Conflict: ", ex); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java index 5655b5e430f..8b0a5c16e07 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeleteFirewallRuleCmd.java @@ -95,7 +95,7 @@ public class DeleteFirewallRuleCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete firewall rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete firewall rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java index 8f4d5996df8..e70bb1556df 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/DeletePortForwardingRuleCmd.java @@ -97,7 +97,7 @@ public class DeletePortForwardingRuleCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete port forwarding rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete port forwarding rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java index a52ebb77257..2eafaaf7293 100644 --- a/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/firewall/UpdatePortForwardingRuleCmd.java @@ -124,7 +124,7 @@ public class UpdatePortForwardingRuleCmd extends BaseAsyncCmd { // response.setResponseName(getName()); // this.setResponseObject(response); // } else { -// throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update port forwarding rule"); +// throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update port forwarding rule"); // } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java index 1e154e2a07d..2a0b2c61617 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/AttachIsoCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -104,10 +105,10 @@ public class AttachIsoCmd extends BaseAsyncCmd { response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to attach iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to attach iso"); } } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to attach iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to attach iso"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java index 44efbf88f2c..4c370c70325 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DeleteIsoCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.iso; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -112,7 +113,7 @@ public class DeleteIsoCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete iso"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java index eb1c6eed2d6..c8a87cbdb3e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/DetachIsoCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.TemplateResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -91,7 +92,7 @@ public class DetachIsoCmd extends BaseAsyncCmd { response.setResponseName(DeployVMCmd.getResultObjectName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to detach iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to detach iso"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java index 5f8303ec320..7f893ccd06d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/ExtractIsoCmd.java @@ -126,11 +126,11 @@ public class ExtractIsoCmd extends BaseAsyncCmd { response.setObjectName("iso"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to extract iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to extract iso"); } } catch (InternalErrorException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java index 214d18de5cc..fbc09d8bd56 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/RegisterIsoCmd.java @@ -166,7 +166,7 @@ public class RegisterIsoCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to register iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to register iso"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java index f54f8a66daa..fd1ee3e22de 100644 --- a/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/iso/UpdateIsoCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.iso; import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd; import org.apache.log4j.Logger; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ServerApiException; @@ -72,7 +73,7 @@ public class UpdateIsoCmd extends BaseUpdateTemplateOrIsoCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update iso"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update iso"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java index 972673f4954..72c317c89d2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/AssignToLoadBalancerRuleCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -102,7 +103,7 @@ public class AssignToLoadBalancerRuleCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to assign load balancer rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to assign load balancer rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java index c01e138c1d1..90e89137bf9 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLBStickinessPolicyCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -129,7 +130,7 @@ public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd { } } finally { if (!success || (policy == null)) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create stickiness policy "); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create stickiness policy "); } } } @@ -142,7 +143,7 @@ public class CreateLBStickinessPolicyCmd extends BaseAsyncCreateCmd { this.setEntityUuid(result.getUuid()); } catch (NetworkRuleConflictException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java index 4e76a6b676f..b42ff4cc5f1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/CreateLoadBalancerRuleCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -266,7 +267,7 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements // no need to apply the rule on the backend as it exists in the db only _lbService.deleteLoadBalancerRule(getEntityId(), false); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create load balancer rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create load balancer rule"); } } } @@ -283,10 +284,10 @@ public class CreateLoadBalancerRuleCmd extends BaseAsyncCreateCmd /*implements this.setEntityUuid(result.getUuid()); } catch (NetworkRuleConflictException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); } catch (InsufficientAddressCapacityException e) { s_logger.warn("Exception: ", e); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java index 9329bd35aba..6405dca169b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLBStickinessPolicyCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.LBStickinessResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -91,7 +92,7 @@ public class DeleteLBStickinessPolicyCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete load balancer stickiness policy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete load balancer stickiness policy"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java index d53155f17b9..84ce225fa1e 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/DeleteLoadBalancerRuleCmd.java @@ -89,7 +89,7 @@ public class DeleteLoadBalancerRuleCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete load balancer"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete load balancer"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java index f56f06d15c5..54c136fae6d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/RemoveFromLoadBalancerRuleCmd.java @@ -98,7 +98,7 @@ public class RemoveFromLoadBalancerRuleCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to remove instance from load balancer rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to remove instance from load balancer rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java index 8a86f74260d..dd2b360ec23 100644 --- a/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/loadbalancer/UpdateLoadBalancerRuleCmd.java @@ -106,7 +106,7 @@ public class UpdateLoadBalancerRuleCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update load balancer rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update load balancer rule"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java index 1ce3458dde3..c3894c47f57 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/CreateIpForwardingRuleCmd.java @@ -22,6 +22,7 @@ import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; @@ -132,7 +133,7 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta _rulesService.revokeStaticNatRule(getEntityId(), true); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Error in creating ip forwarding rule on the domr"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Error in creating ip forwarding rule on the domr"); } } } @@ -151,7 +152,7 @@ public class CreateIpForwardingRuleCmd extends BaseAsyncCreateCmd implements Sta this.setEntityUuid(rule.getUuid()); } catch (NetworkRuleConflictException e) { s_logger.info("Unable to create Static Nat Rule due to ", e); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java index 6300a412d54..9879cf5011b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DeleteIpForwardingRuleCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.FirewallRuleResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -78,7 +79,7 @@ public class DeleteIpForwardingRuleCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete ip forwarding rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete ip forwarding rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java index fbd0b5ce900..eded5a10742 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/DisableStaticNatCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.IPAddressResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -86,7 +87,7 @@ public class DisableStaticNatCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to disable static nat"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to disable static nat"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java index 79a8e2bc9ff..f7cf5aad5d0 100644 --- a/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/nat/EnableStaticNatCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.nat; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -114,12 +115,12 @@ public class EnableStaticNatCmd extends BaseCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to enable static nat"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to enable static nat"); } } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " + ex.getMessage()); s_logger.trace("Network Rule Conflict: ", ex); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java index 16843b56d67..d1289b8ddc6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkACLCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.NetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; @@ -164,7 +165,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR } finally { if (!success || rule == null) { _networkACLService.revokeNetworkACL(getEntityId(), true); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create network ACL"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create network ACL"); } } } @@ -250,7 +251,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR if (getSourceCidrList() != null) { for (String cidr: getSourceCidrList()){ if (!NetUtils.isValidCIDR(cidr)){ - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Source cidrs formatting error " + cidr); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Source cidrs formatting error " + cidr); } } } @@ -262,7 +263,7 @@ public class CreateNetworkACLCmd extends BaseAsyncCreateCmd implements FirewallR } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " + ex.getMessage()); s_logger.trace("Network Rule Conflict: ", ex); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java index 3b2608729a4..870a591bb36 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/CreateNetworkCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.network; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -233,7 +234,7 @@ public class CreateNetworkCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); }else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create network"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java index 4b078ed7fe3..798bd43aa0b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkACLCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.network; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -99,7 +100,7 @@ public class DeleteNetworkACLCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network ACL"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete network ACL"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java index df070ff8ecb..2104501d9c2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/DeleteNetworkCmd.java @@ -68,7 +68,7 @@ public class DeleteNetworkCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java index ee9af3b0009..c6b5690aeaf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/RestartNetworkCmd.java @@ -90,7 +90,7 @@ public class RestartNetworkCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to restart network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to restart network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java index 5ab8a6035ad..978c71b946c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/network/UpdateNetworkCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.network; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -136,7 +137,7 @@ public class UpdateNetworkCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update network"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update network"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java index 6cc9387ac2b..8fd52753d77 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/ActivateProjectCmd.java @@ -79,7 +79,7 @@ public class ActivateProjectCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to activate a project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to activate a project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java index 865f7a0aa99..095cbfc49b8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/CreateProjectCmd.java @@ -114,7 +114,7 @@ public class CreateProjectCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a project"); } } @@ -126,7 +126,7 @@ public class CreateProjectCmd extends BaseAsyncCreateCmd { this.setEntityId(project.getId()); this.setEntityUuid(project.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java index fb41a7f14ef..6f7467fadf8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -71,7 +72,7 @@ public class DeleteProjectCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java index 67c7cefc252..7ed857e575b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/DeleteProjectInvitationCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -72,7 +73,7 @@ public class DeleteProjectInvitationCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete the project invitation"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete the project invitation"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java index 120e4fe0c55..01e4082c193 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/SuspendProjectCmd.java @@ -69,7 +69,7 @@ public class SuspendProjectCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to suspend a project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to suspend a project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java index bad117727e0..01f56311d17 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.project; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -97,7 +98,7 @@ public class UpdateProjectCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update a project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update a project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java index 32e1a755484..637c6339521 100644 --- a/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/project/UpdateProjectInvitationCmd.java @@ -92,7 +92,7 @@ public class UpdateProjectInvitationCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to join the project"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to join the project"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java index 0d62c18f55d..5799db26d7a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/GetCloudIdentifierCmd.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -74,7 +75,7 @@ public class GetCloudIdentifierCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to get cloud identifier"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to get cloud identifier"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java index d2b6870f0ca..4aa694b6857 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceCountCmd.java @@ -123,7 +123,7 @@ public class UpdateResourceCountCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to recalculate resource counts"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to recalculate resource counts"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java index 262d12dc264..9b6359fcc4c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/resource/UpdateResourceLimitCmd.java @@ -100,7 +100,7 @@ public class UpdateResourceLimitCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update resource limit"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update resource limit"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java index acafcbe19a9..0551089f033 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupEgressCmd.java @@ -206,7 +206,7 @@ public class AuthorizeSecurityGroupEgressCmd extends BaseAsyncCmd { SecurityGroupResponse response = _responseGenerator.createSecurityGroupResponseFromSecurityGroupRule(egressRules); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to authorize security group egress rule(s)"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to authorize security group egress rule(s)"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java index abd20fcc81d..35939d36659 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/AuthorizeSecurityGroupIngressCmd.java @@ -25,6 +25,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -210,7 +211,7 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd { if(cidrList != null){ for(String cidr : cidrList ){ if (!NetUtils.isValidCIDR(cidr)){ - throw new ServerApiException(BaseCmd.PARAM_ERROR, cidr + " is an Invalid CIDR "); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, cidr + " is an Invalid CIDR "); } } } @@ -219,7 +220,7 @@ public class AuthorizeSecurityGroupIngressCmd extends BaseAsyncCmd { SecurityGroupResponse response = _responseGenerator.createSecurityGroupResponseFromSecurityGroupRule(ingressRules); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to authorize security group ingress rule(s)"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to authorize security group ingress rule(s)"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java index c494355e15e..5dc49291426 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/CreateSecurityGroupCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.securitygroup; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -116,7 +117,7 @@ public class CreateSecurityGroupCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create security group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create security group"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java index 15a00253b63..506dc53ff23 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/DeleteSecurityGroupCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.securitygroup; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -120,11 +121,11 @@ public class DeleteSecurityGroupCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete security group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete security group"); } } catch (ResourceInUseException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java index 53d8fcf59c7..27072fcb6c3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupEgressCmd.java @@ -88,7 +88,7 @@ public class RevokeSecurityGroupEgressCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to revoke security group egress rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to revoke security group egress rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java index 1f56dee9bca..70851cf1e41 100644 --- a/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/securitygroup/RevokeSecurityGroupIngressCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.securitygroup; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -92,7 +93,7 @@ public class RevokeSecurityGroupIngressCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to revoke security group ingress rule"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to revoke security group ingress rule"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java index 14f46540cc3..49158a64d17 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotCmd.java @@ -152,7 +152,7 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd { this.setEntityId(snapshot.getId()); this.setEntityUuid(snapshot.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create snapshot"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create snapshot"); } } @@ -165,7 +165,7 @@ public class CreateSnapshotCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create snapshot due to an internal error creating snapshot for volume " + volumeId); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create snapshot due to an internal error creating snapshot for volume " + volumeId); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java index cafb79e0523..756a93aa8f4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/CreateSnapshotPolicyCmd.java @@ -126,7 +126,7 @@ public class CreateSnapshotPolicyCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create snapshot policy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create snapshot policy"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java index 6def8730cbd..dc0b8ee8138 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotCmd.java @@ -94,7 +94,7 @@ public class DeleteSnapshotCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete snapshot"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete snapshot"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java index 17f28d931ea..0207f3c3416 100644 --- a/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/snapshot/DeleteSnapshotPoliciesCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -80,7 +81,7 @@ public class DeleteSnapshotPoliciesCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete snapshot policy"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete snapshot policy"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java index 54338bd24e2..9c108b4904c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/CreateTagsCmd.java @@ -26,6 +26,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -115,7 +116,7 @@ public class CreateTagsCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create tags"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create tags"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java b/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java index cf2ea9ec1cb..c142f141f86 100644 --- a/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/tag/DeleteTagsCmd.java @@ -26,6 +26,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -106,7 +107,7 @@ public class DeleteTagsCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete tags"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete tags"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java index c6461a75e28..406f32cc958 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CopyTemplateCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -133,11 +134,11 @@ public class CopyTemplateCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to copy template"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to copy template"); } } catch (StorageUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java index e72b49b4e4d..9723f9a14a1 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/CreateTemplateCmd.java @@ -247,7 +247,7 @@ import com.cloud.user.UserContext; this.setEntityId(template.getId()); this.setEntityUuid(template.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a template"); } } @@ -277,7 +277,7 @@ import com.cloud.user.UserContext; response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create private template"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create private template"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java index 26f3e841f68..8ee3041713c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/DeleteTemplateCmd.java @@ -109,7 +109,7 @@ public class DeleteTemplateCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete template"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete template"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java index 521293cb275..54f3e3782fb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/ExtractTemplateCmd.java @@ -126,11 +126,11 @@ public class ExtractTemplateCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to extract template"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to extract template"); } } catch (InternalErrorException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java index b3677b9d3a1..cc4c52486e7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/RegisterTemplateCmd.java @@ -24,6 +24,7 @@ import java.util.Map; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -233,11 +234,11 @@ public class RegisterTemplateCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to register template"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to register template"); } } catch (URISyntaxException ex1) { s_logger.info(ex1); - throw new ServerApiException(BaseCmd.PARAM_ERROR, ex1.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ex1.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java index 01ea200293e..8893e8faeef 100644 --- a/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/template/UpdateTemplateCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.template; import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd; import org.apache.log4j.Logger; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ServerApiException; @@ -73,7 +74,7 @@ public class UpdateTemplateCmd extends BaseUpdateTemplateOrIsoCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update template"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update template"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java index e675c83dd6f..9d39f692eaf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java @@ -364,14 +364,14 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientCapacityException ex) { s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } } else { result = _userVmService.getUserVm(getEntityId()); @@ -382,7 +382,7 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to deploy vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to deploy vm"); } } @@ -454,18 +454,18 @@ public class DeployVMCmd extends BaseAsyncCreateCmd { setEntityId(vm.getId()); setEntityUuid(vm.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to deploy vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to deploy vm"); } } catch (InsufficientCapacityException ex) { s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java index db830d1a188..381f5b744b8 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/DestroyVMCmd.java @@ -104,7 +104,7 @@ public class DestroyVMCmd extends BaseAsyncCmd { response.setResponseName("virtualmachine"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to destroy vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to destroy vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java index 45ebc287913..63319dc6853 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RebootVMCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -107,7 +108,7 @@ public class RebootVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to reboot vm instance"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to reboot vm instance"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java index a4c2b3772e9..2ca94bf6a89 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/ResetVMPasswordCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -116,7 +117,7 @@ public class ResetVMPasswordCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to reset vm password"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to reset vm password"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java index 9b2452e355d..d906c7f6343 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/RestoreVMCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -64,7 +65,7 @@ public class RestoreVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to restore vm " + getVmId()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to restore vm " + getVmId()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java index 36199d13c24..65391f7f8ff 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StartVMCmd.java @@ -125,17 +125,17 @@ public class StartVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to start a vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to start a vm"); } } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (StorageUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ExecutionException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java index 8e589060520..cfa89a54249 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/StopVMCmd.java @@ -120,7 +120,7 @@ public class StopVMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to stop vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to stop vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java index 7f1e7efdc1a..60b23389ddd 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vm; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -126,7 +127,7 @@ public class UpdateVMCmd extends BaseCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java index f2c3882bd3c..6c2e0f1eb54 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java @@ -98,7 +98,7 @@ public class UpgradeVMCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to upgrade vm"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to upgrade vm"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java index 9c2c6027ac9..ea28497053d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/CreateVMGroupCmd.java @@ -99,7 +99,7 @@ public class CreateVMGroupCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create vm instance group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create vm instance group"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java index 47c2f764db6..3e9d1a24afa 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/DeleteVMGroupCmd.java @@ -73,7 +73,7 @@ public class DeleteVMGroupCmd extends BaseCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete vm group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete vm group"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java b/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java index 09313c0f797..eb0d747d54b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vmgroup/UpdateVMGroupCmd.java @@ -80,7 +80,7 @@ public class UpdateVMGroupCmd extends BaseCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update vm instance group"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update vm instance group"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java index e48e4e43093..e5652952a0f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/AttachVolumeCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.UserVmResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -125,7 +126,7 @@ public class AttachVolumeCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to attach volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to attach volume"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java index 04541b9fda7..0a0ba54e04f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/CreateVolumeCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.*; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -153,7 +154,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { this.setEntityId(volume.getId()); this.setEntityUuid(volume.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create volume"); } } @@ -179,7 +180,7 @@ public class CreateVolumeCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a volume"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java index 2b2e94cab6b..6e3b4e12f7f 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DeleteVolumeCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.VolumeResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -84,7 +85,7 @@ public class DeleteVolumeCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete volume"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java index c8ecddea699..db17f58e6e6 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/DetachVolumeCmd.java @@ -132,7 +132,7 @@ public class DetachVolumeCmd extends BaseAsyncCmd { response.setResponseName("volume"); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to detach volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to detach volume"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java index 43b25a83663..40e46fd6b88 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ExtractVolumeCmd.java @@ -23,6 +23,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -148,11 +149,11 @@ public class ExtractVolumeCmd extends BaseAsyncCmd { response.setUrl(uploadInfo.getUploadUrl()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to extract volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to extract volume"); } } catch (URISyntaxException ex) { s_logger.info(ex); - throw new ServerApiException(BaseCmd.PARAM_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java index 30e672ada1b..88076dbfb8b 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/MigrateVolumeCmd.java @@ -17,6 +17,7 @@ package org.apache.cloudstack.api.command.user.volume; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -98,7 +99,7 @@ public class MigrateVolumeCmd extends BaseAsyncCmd { this.setResponseObject(response); } } catch (ConcurrentOperationException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to migrate volume: "); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to migrate volume: "); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java index e42bf3565cc..ff004831516 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/ResizeVolumeCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.*; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListTaggedResourcesCmd; @@ -64,7 +65,7 @@ public class ResizeVolumeCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.DISK_OFFERING_ID, entityType=DiskOfferingResponse.class, type=CommandType.UUID, required=false, description="new disk offering id") private Long newDiskOfferingId; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -72,7 +73,7 @@ public class ResizeVolumeCmd extends BaseAsyncCmd { public Long getEntityId() { return id; } - + public Long getSize() { return size; } @@ -85,7 +86,7 @@ public class ResizeVolumeCmd extends BaseAsyncCmd { return newDiskOfferingId; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -94,7 +95,7 @@ public class ResizeVolumeCmd extends BaseAsyncCmd { public String getCommandName() { return s_name; } - + @Override public AsyncJob.Type getInstanceType() { return AsyncJob.Type.Volume; @@ -136,7 +137,7 @@ public class ResizeVolumeCmd extends BaseAsyncCmd { public String getEventDescription() { return "Volume Id: " + getEntityId() + " to size " + getSize() + "G" ; } - + @Override public void execute(){ UserContext.current().setEventDetails("Volume Id: " + getEntityId() + " to size " + getSize() + "G"); @@ -147,7 +148,7 @@ public class ResizeVolumeCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to resize volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to resize volume"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java index 4167ffd6460..e2c2c5b6d3a 100644 --- a/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/volume/UploadVolumeCmd.java @@ -112,7 +112,7 @@ public class UploadVolumeCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to upload volume"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to upload volume"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java index 96de56a5be5..adeec0d0425 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateStaticRouteCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vpc; import org.apache.cloudstack.api.response.PrivateGatewayResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; @@ -71,7 +72,7 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ } catch (NetworkRuleConflictException ex) { s_logger.info("Network rule conflict: " + ex.getMessage()); s_logger.trace("Network rule conflict: ", ex); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, ex.getMessage()); } } @@ -105,7 +106,7 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd{ } finally { if (!success || route == null) { _vpcService.revokeStaticRoute(getEntityId()); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create static route"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create static route"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java index 8a2e1f641fb..ccd8675e50d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/CreateVPCCmd.java @@ -24,6 +24,7 @@ import org.apache.cloudstack.api.response.VpcOfferingResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -126,7 +127,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ this.setEntityId(vpc.getId()); this.setEntityUuid(vpc.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create a VPC"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create a VPC"); } } @@ -139,14 +140,14 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientCapacityException ex) { s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } if (vpc != null) { @@ -154,7 +155,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create VPC"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create VPC"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java index c9e4463db14..02d342e5c80 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteStaticRouteCmd.java @@ -95,7 +95,7 @@ public class DeleteStaticRouteCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete static route"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete static route"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java index ed4e754f736..132556c87b7 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/DeleteVPCCmd.java @@ -71,14 +71,14 @@ public class DeleteVPCCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete VPC"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete VPC"); } }catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java index 4a23e6e6595..f28c4cb55bb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/RestartVPCCmd.java @@ -78,18 +78,18 @@ public class RestartVPCCmd extends BaseAsyncCmd{ SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to restart VPC"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to restart VPC"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } catch (ConcurrentOperationException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, ex.getMessage()); } catch (InsufficientCapacityException ex) { s_logger.info(ex); s_logger.trace(ex); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java index 2dc64dba267..d34f7bf7bf3 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpc/UpdateVPCCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vpc; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -92,7 +93,7 @@ public class UpdateVPCCmd extends BaseAsyncCmd{ response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update VPC"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update VPC"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java index f2d19a7cce6..479e990494d 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/AddVpnUserCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCreateCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -119,7 +120,7 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd { VpnUser vpnUser = _entityMgr.findById(VpnUser.class, getEntityId()); Account account = _entityMgr.findById(Account.class, vpnUser.getAccountId()); if (!_ravService.applyVpnUsers(vpnUser.getAccountId(), userName)) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add vpn user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add vpn user"); } VpnUsersResponse vpnResponse = new VpnUsersResponse(); @@ -144,7 +145,7 @@ public class AddVpnUserCmd extends BaseAsyncCreateCmd { VpnUser vpnUser = _ravService.addVpnUser(owner.getId(), userName, password); if (vpnUser == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to add vpn user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add vpn user"); } setEntityId(vpnUser.getId()); setEntityUuid(vpnUser.getUuid()); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java index b517af883c3..ae09ef79894 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateRemoteAccessVpnCmd.java @@ -148,12 +148,12 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { this.setEntityUuid(ipAddr.getUuid()); } } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create remote access vpn"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create remote access vpn"); } } catch (NetworkRuleConflictException e) { s_logger.info("Network rule conflict: " + e.getMessage()); s_logger.trace("Network Rule Conflict: ", e); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); } } @@ -166,11 +166,11 @@ public class CreateRemoteAccessVpnCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create remote access vpn"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create remote access vpn"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java index 3dc334d0e2a..327f35b6688 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnConnectionCmd.java @@ -94,12 +94,12 @@ public class CreateVpnConnectionCmd extends BaseAsyncCreateCmd { this.setEntityId(conn.getId()); this.setEntityUuid(conn.getUuid()); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create site to site vpn connection"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create site to site vpn connection"); } } catch (NetworkRuleConflictException e) { s_logger.info("Network rule conflict: " + e.getMessage()); s_logger.trace("Network Rule Conflict: ", e); - throw new ServerApiException(BaseCmd.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); + throw new ServerApiException(ApiErrorCode.NETWORK_RULE_CONFLICT_ERROR, e.getMessage()); } } @@ -112,11 +112,11 @@ public class CreateVpnConnectionCmd extends BaseAsyncCreateCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create site to site vpn connection"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create site to site vpn connection"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java index bde98b0b44b..a14a5ec820c 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnCustomerGatewayCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.DomainResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -160,7 +161,7 @@ public class CreateVpnCustomerGatewayCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create customer VPN gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create customer VPN gateway"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java index 4b405541a90..2d2150b89b4 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/CreateVpnGatewayCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.VpcResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -86,7 +87,7 @@ public class CreateVpnGatewayCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to create VPN gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to create VPN gateway"); } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java index 23a7793ef88..06521026bcb 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnConnectionCmd.java @@ -86,11 +86,11 @@ public class DeleteVpnConnectionCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete site to site VPN connection"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete site to site VPN connection"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java index 181ee3bbc68..854bb9b6ebf 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnCustomerGatewayCmd.java @@ -84,7 +84,7 @@ public class DeleteVpnCustomerGatewayCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete customer VPN gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete customer VPN gateway"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java index 9ac27d07664..6c89f7c9b93 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/DeleteVpnGatewayCmd.java @@ -85,7 +85,7 @@ public class DeleteVpnGatewayCmd extends BaseAsyncCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete customer VPN gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete customer VPN gateway"); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java index bdad7e31dd9..11ca651f6a2 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/RemoveVpnUserCmd.java @@ -19,6 +19,7 @@ package org.apache.cloudstack.api.command.user.vpn; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -110,11 +111,11 @@ public class RemoveVpnUserCmd extends BaseAsyncCmd { Account owner = _accountService.getAccount(getEntityOwnerId()); boolean result = _ravService.removeVpnUser(owner.getId(), userName, UserContext.current().getCaller()); if (!result) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to remove vpn user"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to remove vpn user"); } if (!_ravService.applyVpnUsers(owner.getId(), userName)) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to apply vpn user removal"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to apply vpn user removal"); } SuccessResponse response = new SuccessResponse(getCommandName()); setResponseObject(response); diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java index ed28ea5610f..14e2f8cd853 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/ResetVpnConnectionCmd.java @@ -104,11 +104,11 @@ public class ResetVpnConnectionCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to reset site to site VPN connection"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to reset site to site VPN connection"); } } catch (ResourceUnavailableException ex) { s_logger.warn("Exception: ", ex); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, ex.getMessage()); } } } diff --git a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java index 7564129c38f..27b656d49da 100644 --- a/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java +++ b/api/src/org/apache/cloudstack/api/command/user/vpn/UpdateVpnCustomerGatewayCmd.java @@ -155,7 +155,7 @@ public class UpdateVpnCustomerGatewayCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to update customer VPN gateway"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to update customer VPN gateway"); } } } diff --git a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java index bad7ca7b5f6..18c3976f365 100644 --- a/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java +++ b/plugins/api/discovery/src/org/apache/cloudstack/api/command/user/discovery/ListApisCmd.java @@ -20,6 +20,7 @@ import com.cloud.user.User; import com.cloud.user.UserContext; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.PlugService; @@ -48,7 +49,7 @@ public class ListApisCmd extends BaseCmd { User user = UserContext.current().getCallerUser(); ListResponse response = (ListResponse) _apiDiscoveryService.listApis(user, name); if (response == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Api Discovery plugin was unable to find an api by that name or process any apis"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Api Discovery plugin was unable to find an api by that name or process any apis"); } response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java index c87c9242010..671b9f49174 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/AssociateLunCmd.java @@ -21,6 +21,7 @@ import java.rmi.ServerException; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -39,27 +40,27 @@ public class AssociateLunCmd extends BaseCmd { ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required = true, description="LUN name.") private String lunName; - + @Parameter(name=ApiConstants.IQN, type=CommandType.STRING, required = true, description="Guest IQN to which the LUN associate.") private String guestIqn; - - + + /////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - - + + public String getLunName() { return lunName; } - + public String getGuestIQN() { return guestIqn; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -68,12 +69,12 @@ public class AssociateLunCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public void execute(){ ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); NetappManager netappMgr = locator.getManager(NetappManager.class); - + try { AssociateLunCmdResponse response = new AssociateLunCmdResponse(); String returnVals[] = null; @@ -85,9 +86,9 @@ public class AssociateLunCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (ServerException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } } @@ -96,5 +97,5 @@ public class AssociateLunCmd extends BaseCmd { // TODO Auto-generated method stub return 0; } - + } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java index 8c89730b978..fde0dc337f1 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateLunCmd.java @@ -21,6 +21,7 @@ import java.rmi.ServerException; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -39,21 +40,21 @@ import com.cloud.utils.component.ComponentLocator; public class CreateLunCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(CreateLunCmd.class.getName()); private static final String s_name = "createlunresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @Parameter(name=ApiConstants.NAME, type=CommandType.STRING, required = true, description="pool name.") private String poolName; - + @Parameter(name=ApiConstants.SIZE, type=CommandType.LONG, required = true, description="LUN size.") private long size; - + public String getPoolName() { return poolName; } - + public long getLunSize() { return size; } @@ -64,7 +65,7 @@ public class CreateLunCmd extends BaseCmd { ConcurrentOperationException, ResourceAllocationException { ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); NetappManager netappMgr = locator.getManager(NetappManager.class); - + try { CreateLunCmdResponse response = new CreateLunCmdResponse(); String returnVals[] = null; @@ -76,11 +77,11 @@ public class CreateLunCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (ServerException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } - + } @Override @@ -94,5 +95,5 @@ public class CreateLunCmd extends BaseCmd { // TODO Auto-generated method stub return 0; } - + } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java index a2d4b96e6dd..5ca187d84f1 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumeOnFilerCmd.java @@ -20,6 +20,7 @@ import java.net.UnknownHostException; import java.rmi.ServerException; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -40,64 +41,64 @@ public class CreateVolumeOnFilerCmd extends BaseCmd { @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, required = true, description="ip address.") private String ipAddress; - + @Parameter(name=ApiConstants.AGGREGATE_NAME, type=CommandType.STRING, required = true, description="aggregate name.") private String aggrName; @Parameter(name=ApiConstants.POOL_NAME, type=CommandType.STRING, required = true, description="pool name.") private String poolName; - + @Parameter(name=ApiConstants.VOLUME_NAME, type=CommandType.STRING, required = true, description="volume name.") private String volName; - + @Parameter(name=ApiConstants.SIZE, type=CommandType.INTEGER, required = true, description="volume size.") private Integer volSize; - + @Parameter(name=ApiConstants.SNAPSHOT_POLICY, type=CommandType.STRING, required = false, description="snapshot policy.") private String snapshotPolicy; - + @Parameter(name=ApiConstants.SNAPSHOT_RESERVATION, type=CommandType.INTEGER, required = false, description="snapshot reservation.") private Integer snapshotReservation; - + @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required = true, description="user name.") private String userName; - + @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required = true, description="password.") private String password; - + public String getIpAddress() { return ipAddress; } - + public String getAggrName() { return aggrName; } - + public String getPoolName() { return poolName; } - + public String volName() { return volName; } - + public Integer getVolSize() { return volSize; } - + public String getSnapshotPolicy() { return snapshotPolicy; } - + public Integer getSnapshotReservation() { return snapshotReservation; } - + public String getUserName() { return userName; } - + public String getPassword() { return password; } @@ -109,26 +110,26 @@ public class CreateVolumeOnFilerCmd extends BaseCmd { //param checks if(snapshotReservation != null && (snapshotReservation<0 || snapshotReservation>100)) throw new InvalidParameterValueException("Invalid snapshot reservation"); - + ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); NetappManager netappMgr = locator.getManager(NetappManager.class); - + StringBuilder s = new StringBuilder(getVolSize().toString()); s.append("g"); - + try { netappMgr.createVolumeOnFiler(ipAddress, aggrName, poolName, volName, s.toString(), snapshotPolicy, snapshotReservation, userName, password); CreateVolumeOnFilerCmdResponse response = new CreateVolumeOnFilerCmdResponse(); response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (ServerException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (UnknownHostException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } - + } @Override @@ -142,5 +143,5 @@ public class CreateVolumeOnFilerCmd extends BaseCmd { // TODO Auto-generated method stub return 0; } - + } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java index 9e38c5fc097..107f6b0583f 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/CreateVolumePoolCmd.java @@ -19,6 +19,7 @@ package com.cloud.api.commands.netapp; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -42,11 +43,11 @@ public class CreateVolumePoolCmd extends BaseCmd { private String poolName; @Parameter(name=ApiConstants.ALGORITHM, type=CommandType.STRING, required = true, description="algorithm.") private String algorithm; - + public String getPoolName() { return poolName; } - + public String getAlgorithm() { return algorithm; } @@ -57,16 +58,16 @@ public class CreateVolumePoolCmd extends BaseCmd { ConcurrentOperationException, ResourceAllocationException { ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); NetappManager netappMgr = locator.getManager(NetappManager.class); - + try { CreateVolumePoolCmdResponse response = new CreateVolumePoolCmdResponse(); netappMgr.createPool(getPoolName(), getAlgorithm()); response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } - + } @Override @@ -80,5 +81,5 @@ public class CreateVolumePoolCmd extends BaseCmd { // TODO Auto-generated method stub return 0; } - + } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java index 1105ea53e9d..a70b6d4a0da 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DeleteVolumePoolCmd.java @@ -20,6 +20,7 @@ package com.cloud.api.commands.netapp; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -39,7 +40,7 @@ import com.cloud.utils.component.ComponentLocator; public class DeleteVolumePoolCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteVolumePoolCmd.class.getName()); private static final String s_name = "deletepoolresponse"; - + @Parameter(name=ApiConstants.POOL_NAME, type=CommandType.STRING, required = true, description="pool name.") private String poolName; @@ -55,9 +56,9 @@ public class DeleteVolumePoolCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (ResourceInUseException e) { - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, e.toString()); } } @@ -72,5 +73,5 @@ public class DeleteVolumePoolCmd extends BaseCmd { // TODO Auto-generated method stub return 0; } - + } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java index c5f7b117f5b..1b3e6bc84a8 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyLunCmd.java @@ -21,6 +21,7 @@ import java.rmi.ServerException; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -37,7 +38,7 @@ import com.cloud.utils.component.ComponentLocator; @APICommand(name = "destroyLunOnFiler", description="Destroy a LUN", responseObject = DeleteLUNCmdResponse.class) public class DestroyLunCmd extends BaseCmd { - + public static final Logger s_logger = Logger.getLogger(DestroyLunCmd.class.getName()); private static final String s_name = "destroylunresponse"; @@ -56,9 +57,9 @@ public class DestroyLunCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (ServerException e) { - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, e.toString()); } } @@ -73,5 +74,5 @@ public class DestroyLunCmd extends BaseCmd { // TODO Auto-generated method stub return 0; } - + } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java index 4ddc0c9f6d0..21e10b0148f 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DestroyVolumeOnFilerCmd.java @@ -37,17 +37,17 @@ import com.cloud.utils.component.ComponentLocator; public class DestroyVolumeOnFilerCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DestroyVolumeOnFilerCmd.class.getName()); private static final String s_name = "destroyvolumeresponse"; - + @Parameter(name=ApiConstants.AGGREGATE_NAME, type=CommandType.STRING, required = true, description="aggregate name.") private String aggrName; - + @Parameter(name=ApiConstants.IP_ADDRESS, type=CommandType.STRING, required = true, description="ip address.") private String ipAddr; - + @Parameter(name=ApiConstants.VOLUME_NAME, type=CommandType.STRING, required = true, description="volume name.") private String volumeName; - - + + @Override public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, @@ -60,13 +60,13 @@ public class DestroyVolumeOnFilerCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (ResourceInUseException e) { - throw new ServerApiException(BaseCmd.RESOURCE_IN_USE_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.RESOURCE_IN_USE_ERROR, e.toString()); } catch (ServerException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } - + } @Override @@ -80,5 +80,5 @@ public class DestroyVolumeOnFilerCmd extends BaseCmd { // TODO Auto-generated method stub return 0; } - + } \ No newline at end of file diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java index 0a6c1a70ef1..f373c65bedd 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/DissociateLunCmd.java @@ -39,10 +39,10 @@ public class DissociateLunCmd extends BaseCmd { @Parameter(name=ApiConstants.PATH, type=CommandType.STRING, required = true, description="LUN path.") private String path; - + @Parameter(name=ApiConstants.IQN, type=CommandType.STRING, required = true, description="Guest IQN.") private String guestIQN; - + @Override public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, @@ -55,9 +55,9 @@ public class DissociateLunCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); } catch (ServerException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } } diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java index 630b14994e7..61b81db90c8 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListLunsCmd.java @@ -22,6 +22,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -39,7 +40,7 @@ import com.cloud.server.api.response.netapp.ListLunsCmdResponse; import com.cloud.utils.component.ComponentLocator; @APICommand(name = "listLunsOnFiler", description="List LUN", responseObject = ListLunsCmdResponse.class) -public class ListLunsCmd extends BaseCmd +public class ListLunsCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListLunsCmd.class.getName()); private static final String s_name = "listlunresponse"; @@ -70,8 +71,8 @@ public class ListLunsCmd extends BaseCmd listResponse.setResponseName(getCommandName()); this.setResponseObject(listResponse); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); - } + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); + } } @Override diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java index d77f4fad849..882cf1b2b44 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumePoolsCmd.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.log4j.Logger; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ServerApiException; @@ -64,9 +65,9 @@ public class ListVolumePoolsCmd extends BaseCmd { listResponse.setResponseName(getCommandName()); this.setResponseObject(listResponse); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, e.toString()); - } - + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, e.toString()); + } + } @Override diff --git a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java index 66a96f3a221..3cc98f43d90 100644 --- a/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java +++ b/plugins/file-systems/netapp/src/com/cloud/api/commands/netapp/ListVolumesOnFilerCmd.java @@ -39,7 +39,7 @@ import com.cloud.utils.component.ComponentLocator; public class ListVolumesOnFilerCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(ListVolumesOnFilerCmd.class.getName()); private static final String s_name = "listvolumesresponse"; - + @Parameter(name=ApiConstants.POOL_NAME, type=CommandType.STRING, required = true, description="pool name.") private String poolName; @@ -49,7 +49,7 @@ public class ListVolumesOnFilerCmd extends BaseCmd { ConcurrentOperationException, ResourceAllocationException { ComponentLocator locator = ComponentLocator.getLocator(ManagementService.Name); NetappManager netappMgr = locator.getManager(NetappManager.class); - + try { List volumes = netappMgr.listVolumesOnFiler(poolName); ListResponse listResponse = new ListResponse(); @@ -71,9 +71,9 @@ public class ListVolumesOnFilerCmd extends BaseCmd { listResponse.setResponseName(getCommandName()); this.setResponseObject(listResponse); } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, e.toString()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, e.toString()); } - + } @Override diff --git a/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java b/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java index df81249538d..e6afcc9f4b4 100755 --- a/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java +++ b/plugins/hypervisors/simulator/src/com/cloud/api/commands/ConfigureSimulator.java @@ -20,6 +20,7 @@ import org.apache.log4j.Logger; import com.cloud.agent.manager.SimulatorManager; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -62,7 +63,7 @@ public class ConfigureSimulator extends BaseCmd { SimulatorManager _simMgr = locator.getManager(SimulatorManager.class); boolean result = _simMgr.configureSimulator(zoneId, podId, clusterId, hostId, command, values); if (!result) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to configure simulator"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to configure simulator"); } SuccessResponse response = new SuccessResponse(getCommandName()); diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java index 3e45ce2a084..1496f295ccb 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DeleteCiscoNexusVSMCmd.java @@ -20,6 +20,7 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -70,7 +71,7 @@ public class DeleteCiscoNexusVSMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to delete Cisco Nexus VSM device"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete Cisco Nexus VSM device"); } } @@ -83,7 +84,7 @@ public class DeleteCiscoNexusVSMCmd extends BaseAsyncCmd { public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public String getEventType() { return EventTypes.EVENT_EXTERNAL_SWITCH_MGMT_DEVICE_DELETE; diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java index 9a7f6ada97c..67a74081292 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/DisableCiscoNexusVSMCmd.java @@ -20,6 +20,7 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -70,7 +71,7 @@ public class DisableCiscoNexusVSMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to disable Cisco Nexus VSM device"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to disable Cisco Nexus VSM device"); } } @@ -92,5 +93,5 @@ public class DisableCiscoNexusVSMCmd extends BaseAsyncCmd { @Override public String getEventType() { return EventTypes.EVENT_EXTERNAL_SWITCH_MGMT_DEVICE_DISABLE; - } + } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java index 5dc67212fd3..5064c9faabc 100644 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/EnableCiscoNexusVSMCmd.java @@ -66,7 +66,7 @@ public class EnableCiscoNexusVSMCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to enable Cisco Nexus VSM device"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to enable Cisco Nexus VSM device"); } } diff --git a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java index ee6a01bdb8a..1ac00f9c6d8 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java +++ b/plugins/hypervisors/vmware/src/com/cloud/api/commands/ListCiscoNexusVSMsCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.ClusterResponse; import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -44,7 +45,7 @@ public class ListCiscoNexusVSMsCmd extends BaseListCmd { /** * This command returns a list of all the VSMs configured in the management server. - * If a clusterId is specified, it will return a list containing only that VSM + * If a clusterId is specified, it will return a list containing only that VSM * that is associated with that cluster. If a zone is specified, it will pull * up all the clusters of type vmware in that zone, and prepare a list of VSMs * associated with those clusters. @@ -60,7 +61,7 @@ public class ListCiscoNexusVSMsCmd extends BaseListCmd { @Parameter(name=ApiConstants.CLUSTER_ID, type=CommandType.UUID, entityType = ClusterResponse.class, required = false, description="Id of the CloudStack cluster in which the Cisco Nexus 1000v VSM appliance.") private long clusterId; - + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, required = false, description="Id of the CloudStack cluster in which the Cisco Nexus 1000v VSM appliance.") private long zoneId; @@ -68,11 +69,11 @@ public class ListCiscoNexusVSMsCmd extends BaseListCmd { ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public long getClusterId() { return clusterId; } - + public long getZoneId() { return zoneId; } @@ -87,7 +88,7 @@ public class ListCiscoNexusVSMsCmd extends BaseListCmd { @Override public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException { List vsmDeviceList = _ciscoNexusVSMService.getCiscoNexusVSMs(this); - + if (vsmDeviceList.size() > 0) { ListResponse response = new ListResponse(); List vsmResponses = new ArrayList(); @@ -101,10 +102,10 @@ public class ListCiscoNexusVSMsCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseListCmd.INTERNAL_ERROR, "No VSM found."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "No VSM found."); } } - + @Override public String getCommandName() { return s_name; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java index 69a21fc184c..29a2c0bee68 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddExternalLoadBalancerCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -38,11 +39,11 @@ import com.cloud.utils.exception.CloudRuntimeException; public class AddExternalLoadBalancerCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(AddExternalLoadBalancerCmd.class.getName()); private static final String s_name = "addexternalloadbalancerresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, required = true, description="Zone in which to add the external load balancer appliance.") private Long zoneId; @@ -59,19 +60,19 @@ public class AddExternalLoadBalancerCmd extends BaseCmd { /////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getZoneId() { return zoneId; } - + public String getUrl() { return url; } - + public String getUsername() { return username; } - + public String getPassword() { return password; } @@ -102,9 +103,9 @@ public class AddExternalLoadBalancerCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage()); } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage()); } } } diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java index a5616e0ee73..839f60f71d6 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/AddF5LoadBalancerCmd.java @@ -54,7 +54,7 @@ public class AddF5LoadBalancerCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required = true, description="Credentials to reach F5 BigIP load balancer device") private String username; - + @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required = true, description="Credentials to reach F5 BigIP load balancer device") private String password; @@ -99,12 +99,12 @@ public class AddF5LoadBalancerCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to add F5 Big IP load balancer due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add F5 Big IP load balancer due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } @@ -117,7 +117,7 @@ public class AddF5LoadBalancerCmd extends BaseAsyncCmd { public String getEventType() { return EventTypes.EVENT_EXTERNAL_LB_DEVICE_ADD; } - + @Override public String getCommandName() { return s_name; diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java index e796b57cc41..cc7d1be9c78 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ConfigureF5LoadBalancerCmd.java @@ -77,12 +77,12 @@ public class ConfigureF5LoadBalancerCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to configure F5 load balancer due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to configure F5 load balancer due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java index d3015712596..29eaa0c781b 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteExternalLoadBalancerCmd.java @@ -32,19 +32,19 @@ import com.cloud.user.Account; public class DeleteExternalLoadBalancerCmd extends BaseCmd { public static final Logger s_logger = Logger.getLogger(DeleteExternalLoadBalancerCmd.class.getName()); private static final String s_name = "deleteexternalloadbalancerresponse"; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class, required = true, description="Id of the external loadbalancer appliance.") private Long id; - + /////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getId() { return id; } @@ -60,12 +60,12 @@ public class DeleteExternalLoadBalancerCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ try { @@ -75,10 +75,10 @@ public class DeleteExternalLoadBalancerCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete external load balancer."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete external load balancer."); } } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Failed to delete external load balancer."); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Failed to delete external load balancer."); } } } diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java index 8b53d70f76d..c1ab22ddc30 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/DeleteF5LoadBalancerCmd.java @@ -22,6 +22,7 @@ import org.apache.log4j.Logger; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -74,12 +75,12 @@ public class DeleteF5LoadBalancerCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete F5 load balancer."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete F5 load balancer."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java index bf1164b4d05..1d276ce10e7 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancerNetworksCmd.java @@ -23,6 +23,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; @@ -86,9 +87,9 @@ public class ListF5LoadBalancerNetworksCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java index c03d55abc0a..deaa2750d25 100644 --- a/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java +++ b/plugins/network-elements/f5/src/com/cloud/api/commands/ListF5LoadBalancersCmd.java @@ -88,9 +88,9 @@ public class ListF5LoadBalancersCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java index cda27fb8960..deaa6128b93 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddExternalFirewallCmd.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.api.commands; @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.ZoneResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -34,30 +35,30 @@ import com.cloud.utils.exception.CloudRuntimeException; @APICommand(name = "addExternalFirewall", description="Adds an external firewall appliance", responseObject = ExternalFirewallResponse.class) public class AddExternalFirewallCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(AddExternalFirewallCmd.class.getName()); - private static final String s_name = "addexternalfirewallresponse"; - + public static final Logger s_logger = Logger.getLogger(AddExternalFirewallCmd.class.getName()); + private static final String s_name = "addexternalfirewallresponse"; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @Parameter(name=ApiConstants.ZONE_ID, type=CommandType.UUID, entityType = ZoneResponse.class, required = true, description="Zone in which to add the external firewall appliance.") private Long zoneId; @Parameter(name=ApiConstants.URL, type=CommandType.STRING, required = true, description="URL of the external firewall appliance.") - private String url; - + private String url; + @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required = true, description="Username of the external firewall appliance.") - private String username; - + private String username; + @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required = true, description="Password of the external firewall appliance.") private String password; - + /////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getZoneId() { return zoneId; } @@ -65,15 +66,15 @@ public class AddExternalFirewallCmd extends BaseCmd { public String getUrl() { return url; } - + public String getUsername() { return username; } - + public String getPassword() { return password; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// @@ -85,12 +86,12 @@ public class AddExternalFirewallCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @SuppressWarnings("deprecation") @Override public void execute(){ @@ -101,9 +102,9 @@ public class AddExternalFirewallCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage()); } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage()); } } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java index a2ad4e5ce2b..9ed6814035e 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/AddSrxFirewallCmd.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.api.commands; @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -57,7 +58,7 @@ public class AddSrxFirewallCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required = true, description="Credentials to reach SRX firewall device") private String username; - + @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required = true, description="Credentials to reach SRX firewall device") private String password; @@ -102,12 +103,12 @@ public class AddSrxFirewallCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to add SRX firewall due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add SRX firewall due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } @@ -120,7 +121,7 @@ public class AddSrxFirewallCmd extends BaseAsyncCmd { public String getEventType() { return EventTypes.EVENT_EXTERNAL_FIREWALL_DEVICE_ADD; } - + @Override public String getCommandName() { return s_name; diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java index 482fcc8c0c7..c9ea7cbe374 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ConfigureSrxFirewallCmd.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.api.commands; @@ -19,6 +19,7 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -81,12 +82,12 @@ public class ConfigureSrxFirewallCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to configure SRX firewall device due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to configure SRX firewall device due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java index 5cdc9e3c92c..77597898ac0 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteExternalFirewallCmd.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.api.commands; @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.HostResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -32,9 +33,9 @@ import com.cloud.user.Account; @APICommand(name = "deleteExternalFirewall", description="Deletes an external firewall appliance.", responseObject = SuccessResponse.class) public class DeleteExternalFirewallCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(DeleteExternalFirewallCmd.class.getName()); - private static final String s_name = "deleteexternalfirewallresponse"; - + public static final Logger s_logger = Logger.getLogger(DeleteExternalFirewallCmd.class.getName()); + private static final String s_name = "deleteexternalfirewallresponse"; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -42,15 +43,15 @@ public class DeleteExternalFirewallCmd extends BaseCmd { @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class, required = true, description="Id of the external firewall appliance.") private Long id; - + /////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getId() { return id; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -61,7 +62,7 @@ public class DeleteExternalFirewallCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; @@ -77,10 +78,10 @@ public class DeleteExternalFirewallCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete external firewall."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete external firewall."); } } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Failed to delete external firewall."); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Failed to delete external firewall."); } } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java index 1dc792a723a..e45fe3180e8 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/DeleteSrxFirewallCmd.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.api.commands; @@ -19,6 +19,7 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -72,12 +73,12 @@ public class DeleteSrxFirewallCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete SRX firewall device"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete SRX firewall device"); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java index 9c2b3962a6f..03ae962bff8 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallNetworksCmd.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.api.commands; @@ -80,9 +80,9 @@ public class ListSrxFirewallNetworksCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java index 6508cc83c7d..5242316a574 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/api/commands/ListSrxFirewallsCmd.java @@ -11,7 +11,7 @@ // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the +// KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.api.commands; @@ -88,9 +88,9 @@ public class ListSrxFirewallsCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java index 9d902975723..79c657f5210 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/AddNetscalerLoadBalancerCmd.java @@ -51,7 +51,7 @@ public class AddNetscalerLoadBalancerCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required = true, description="Credentials to reach netscaler load balancer device") private String username; - + @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required = true, description="Credentials to reach netscaler load balancer device") private String password; @@ -96,12 +96,12 @@ public class AddNetscalerLoadBalancerCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to add netscaler load balancer due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add netscaler load balancer due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } @@ -114,7 +114,7 @@ public class AddNetscalerLoadBalancerCmd extends BaseAsyncCmd { public String getEventType() { return EventTypes.EVENT_EXTERNAL_LB_DEVICE_ADD; } - + @Override public String getCommandName() { return s_name; diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java index e0ec73ad501..33fe7a2e504 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ConfigureNetscalerLoadBalancerCmd.java @@ -101,12 +101,12 @@ public class ConfigureNetscalerLoadBalancerCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to configure netscaler load balancer due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to configure netscaler load balancer due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java index ec7faab39d4..5f62b802e81 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/DeleteNetscalerLoadBalancerCmd.java @@ -18,6 +18,7 @@ package com.cloud.api.commands; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -72,12 +73,12 @@ public class DeleteNetscalerLoadBalancerCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete netscaler load balancer."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete netscaler load balancer."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java index 52476df8316..ec94c6e7683 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancerNetworksCmd.java @@ -20,6 +20,7 @@ import java.util.List; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; @@ -83,9 +84,9 @@ public class ListNetscalerLoadBalancerNetworksCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java index bf679fa51c1..8886218b057 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java +++ b/plugins/network-elements/netscaler/src/com/cloud/api/commands/ListNetscalerLoadBalancersCmd.java @@ -21,6 +21,7 @@ import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; @@ -91,9 +92,9 @@ public class ListNetscalerLoadBalancersCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java index 1734ce2ff3d..3bd39b80c9d 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java @@ -38,7 +38,7 @@ public class AddNiciraNvpDeviceCmd extends BaseAsyncCmd { private static final Logger s_logger = Logger.getLogger(AddNiciraNvpDeviceCmd.class.getName()); private static final String s_name = "addniciranvpdeviceresponse"; @PlugService NiciraNvpElementService _niciraNvpElementService; - + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// @@ -52,16 +52,16 @@ public class AddNiciraNvpDeviceCmd extends BaseAsyncCmd { @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required = true, description="Credentials to access the Nicira Controller API") private String username; - + @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required = true, description="Credentials to access the Nicira Controller API") private String password; - + @Parameter(name=ApiConstants.NICIRA_NVP_TRANSPORT_ZONE_UUID, type=CommandType.STRING, required = true, description="The Transportzone UUID configured on the Nicira Controller") private String transportzoneuuid; - + @Parameter(name=ApiConstants.NICIRA_NVP_GATEWAYSERVICE_UUID, type=CommandType.STRING, required = false, description="The L3 Gateway Service UUID configured on the Nicira Controller") private String l3gatewayserviceuuid; - + ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// @@ -81,11 +81,11 @@ public class AddNiciraNvpDeviceCmd extends BaseAsyncCmd { public String getPassword() { return password; } - + public String getTransportzoneUuid() { return transportzoneuuid; } - + public String getL3GatewayServiceUuid() { return l3gatewayserviceuuid; } @@ -104,15 +104,15 @@ public class AddNiciraNvpDeviceCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to add Nicira NVP device due to internal error."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add Nicira NVP device due to internal error."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } - + @Override public String getCommandName() { return s_name; diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java index 12544410599..9a10c2879d3 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java @@ -20,6 +20,7 @@ import com.cloud.api.response.NiciraNvpDeviceResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; @@ -72,12 +73,12 @@ public class DeleteNiciraNvpDeviceCmd extends BaseAsyncCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete Nicira device."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete Nicira device."); } } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java index bea417d3687..70973c0a5a5 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java @@ -23,6 +23,7 @@ import com.cloud.api.response.NiciraNvpDeviceResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.APICommand; @@ -85,9 +86,9 @@ public class ListNiciraNvpDeviceNetworksCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java index 04aab2a296a..0d2ca5a2335 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Parameter; @@ -92,9 +93,9 @@ public class ListNiciraNvpDevicesCmd extends BaseListCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException invalidParamExcp) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage()); } catch (CloudRuntimeException runtimeExcp) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage()); } } @@ -102,5 +103,5 @@ public class ListNiciraNvpDevicesCmd extends BaseListCmd { public String getCommandName() { return s_name; } - + } diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 55d7f429ca1..04b46e5a579 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -105,46 +105,13 @@ public class ApiDispatcher { _daoNameMap.put("com.cloud.template.VirtualMachineTemplate", VMTemplateDao.class); } - public void dispatchCreateCmd(BaseAsyncCreateCmd cmd, Map params) { - processParameters(cmd, params); + public void dispatchCreateCmd(BaseAsyncCreateCmd cmd, Map params) throws Exception { + processParameters(cmd, params); + + UserContext ctx = UserContext.current(); + ctx.setAccountId(cmd.getEntityOwnerId()); + cmd.create(); - try { - UserContext ctx = UserContext.current(); - ctx.setAccountId(cmd.getEntityOwnerId()); - cmd.create(); - } catch (Throwable t) { - if (t instanceof InvalidParameterValueException || t instanceof IllegalArgumentException) { - s_logger.info(t.getMessage()); - throw new ServerApiException(BaseCmd.PARAM_ERROR, t.getMessage()); - } else if (t instanceof PermissionDeniedException) { - s_logger.info("PermissionDenied: " + t.getMessage()); - throw new ServerApiException(BaseCmd.ACCOUNT_ERROR, t.getMessage()); - } else if (t instanceof AccountLimitException) { - s_logger.info(t.getMessage()); - throw new ServerApiException(BaseCmd.ACCOUNT_RESOURCE_LIMIT_ERROR, t.getMessage()); - } else if (t instanceof InsufficientCapacityException) { - s_logger.info(t.getMessage()); - throw new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, t.getMessage()); - } else if (t instanceof ResourceAllocationException) { - s_logger.info(t.getMessage()); - throw new ServerApiException(BaseCmd.RESOURCE_ALLOCATION_ERROR, t.getMessage()); - } else if (t instanceof ResourceUnavailableException) { - s_logger.warn("Exception: ", t); - throw new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, t.getMessage()); - } else if (t instanceof AsyncCommandQueued) { - throw (AsyncCommandQueued) t; - } else if (t instanceof ServerApiException) { - s_logger.warn(t.getClass() + " : " + ((ServerApiException) t).getDescription()); - throw (ServerApiException) t; - } else { - s_logger.error("Exception while executing " + cmd.getClass().getSimpleName() + ":", t); - if (UserContext.current().getCaller().getType() == Account.ACCOUNT_TYPE_ADMIN) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, t.getMessage()); - } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, BaseCmd.USER_ERROR_MESSAGE); - } - } - } } private void doAccessChecks(BaseCmd cmd, List entitiesToAccess) { @@ -170,164 +137,36 @@ public class ApiDispatcher { } } - public void dispatch(BaseCmd cmd, Map params) { - try { - processParameters(cmd, params); - UserContext ctx = UserContext.current(); - ctx.setAccountId(cmd.getEntityOwnerId()); - if (cmd instanceof BaseAsyncCmd) { + public void dispatch(BaseCmd cmd, Map params) throws Exception { + processParameters(cmd, params); + UserContext ctx = UserContext.current(); + ctx.setAccountId(cmd.getEntityOwnerId()); + if (cmd instanceof BaseAsyncCmd) { - BaseAsyncCmd asyncCmd = (BaseAsyncCmd) cmd; - String startEventId = params.get("ctxStartEventId"); - ctx.setStartEventId(Long.valueOf(startEventId)); + BaseAsyncCmd asyncCmd = (BaseAsyncCmd) cmd; + String startEventId = params.get("ctxStartEventId"); + ctx.setStartEventId(Long.valueOf(startEventId)); - // Synchronise job on the object if needed - if (asyncCmd.getJob() != null && asyncCmd.getSyncObjId() != null && asyncCmd.getSyncObjType() != null) { - Long queueSizeLimit = null; - if (asyncCmd.getSyncObjType() != null && asyncCmd.getSyncObjType().equalsIgnoreCase(BaseAsyncCmd.snapshotHostSyncObject)) { - queueSizeLimit = _createSnapshotQueueSizeLimit; - } else { - queueSizeLimit = 1L; - } + // Synchronise job on the object if needed + if (asyncCmd.getJob() != null && asyncCmd.getSyncObjId() != null && asyncCmd.getSyncObjType() != null) { + Long queueSizeLimit = null; + if (asyncCmd.getSyncObjType() != null && asyncCmd.getSyncObjType().equalsIgnoreCase(BaseAsyncCmd.snapshotHostSyncObject)) { + queueSizeLimit = _createSnapshotQueueSizeLimit; + } else { + queueSizeLimit = 1L; + } - if (queueSizeLimit != null) { - _asyncMgr.syncAsyncJobExecution(asyncCmd.getJob(), asyncCmd.getSyncObjType(), - asyncCmd.getSyncObjId().longValue(), queueSizeLimit); - } else { - s_logger.trace("The queue size is unlimited, skipping the synchronizing"); - } - } - } - - cmd.execute(); - - } catch (Throwable t) { - if (t instanceof InvalidParameterValueException) { - // earlier, we'd log the db id as part of the log message, but now since we've pushed - // the id into a IdentityProxy object, we would need to dump that object alongwith the - // message. - InvalidParameterValueException ref = (InvalidParameterValueException) t; - ServerApiException ex = new ServerApiException(BaseCmd.PARAM_ERROR, t.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - ex.addProxyObject(idList.get(i)); - s_logger.info(t.getMessage() + " uuid: " + idList.get(i)); - } + if (queueSizeLimit != null) { + _asyncMgr + .syncAsyncJobExecution(asyncCmd.getJob(), asyncCmd.getSyncObjType(), asyncCmd.getSyncObjId().longValue(), queueSizeLimit); } else { - s_logger.info(t.getMessage()); + s_logger.trace("The queue size is unlimited, skipping the synchronizing"); } - // Also copy over the cserror code. - ex.setCSErrorCode(ref.getCSErrorCode()); - throw ex; - } else if(t instanceof IllegalArgumentException) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, t.getMessage()); - } else if (t instanceof PermissionDeniedException) { - PermissionDeniedException ref = (PermissionDeniedException)t; - ServerApiException ex = new ServerApiException(BaseCmd.ACCOUNT_ERROR, t.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - ex.addProxyObject(idList.get(i)); - s_logger.info("PermissionDenied: " + t.getMessage() + "uuid: " + idList.get(i)); - } - } else { - s_logger.info("PermissionDenied: " + t.getMessage()); - } - // Also copy over the cserror code. - ex.setCSErrorCode(ref.getCSErrorCode()); - throw ex; - } else if (t instanceof AccountLimitException) { - AccountLimitException ref = (AccountLimitException)t; - ServerApiException ex = new ServerApiException(BaseCmd.ACCOUNT_RESOURCE_LIMIT_ERROR, t.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - ex.addProxyObject(idList.get(i)); - s_logger.info(t.getMessage() + "uuid: " + idList.get(i)); - } - } else { - s_logger.info(t.getMessage()); - } - // Also copy over the cserror code. - ex.setCSErrorCode(ref.getCSErrorCode()); - throw ex; - } else if (t instanceof InsufficientCapacityException) { - InsufficientCapacityException ref = (InsufficientCapacityException)t; - ServerApiException ex = new ServerApiException(BaseCmd.INSUFFICIENT_CAPACITY_ERROR, t.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - ex.addProxyObject(idList.get(i)); - s_logger.info(t.getMessage() + "uuid: " + idList.get(i)); - } - } else { - s_logger.info(t.getMessage()); - } - // Also copy over the cserror code - ex.setCSErrorCode(ref.getCSErrorCode()); - throw ex; - } else if (t instanceof ResourceAllocationException) { - ResourceAllocationException ref = (ResourceAllocationException)t; - ServerApiException ex = new ServerApiException(BaseCmd.RESOURCE_ALLOCATION_ERROR, t.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - String id = idList.get(i); - ex.addProxyObject(id); - s_logger.warn("Exception: " + t.getMessage() + "uuid: " + id); - } - } else { - s_logger.warn("Exception: ", t); - } - // Also copy over the cserror code. - ex.setCSErrorCode(ref.getCSErrorCode()); - throw ex; - } else if (t instanceof ResourceUnavailableException) { - ResourceUnavailableException ref = (ResourceUnavailableException)t; - ServerApiException ex = new ServerApiException(BaseCmd.RESOURCE_UNAVAILABLE_ERROR, t.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - String id = idList.get(i); - ex.addProxyObject(id); - s_logger.warn("Exception: " + t.getMessage() + "uuid: " + id); - } - } else { - s_logger.warn("Exception: ", t); - } - // Also copy over the cserror code. - ex.setCSErrorCode(ref.getCSErrorCode()); - throw ex; - } else if (t instanceof AsyncCommandQueued) { - throw (AsyncCommandQueued) t; - } else if (t instanceof ServerApiException) { - s_logger.warn(t.getClass() + " : " + ((ServerApiException) t).getDescription()); - throw (ServerApiException) t; - } else { - s_logger.error("Exception while executing " + cmd.getClass().getSimpleName() + ":", t); - ServerApiException ex; - if (UserContext.current().getCaller().getType() == Account.ACCOUNT_TYPE_ADMIN) { - ex = new ServerApiException(BaseCmd.INTERNAL_ERROR, t.getMessage()); - } else { - ex = new ServerApiException(BaseCmd.INTERNAL_ERROR, BaseCmd.USER_ERROR_MESSAGE); - } - ex.setCSErrorCode(CSExceptionErrorCode.getCSErrCode(ex.getClass().getName())); - throw ex; } } + + cmd.execute(); + } @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -343,11 +182,11 @@ public class ApiDispatcher { } if ((unpackedParams.get(ApiConstants.PAGE) == null) && (pageSize != null && pageSize != BaseListCmd.PAGESIZE_UNLIMITED)) { - ServerApiException ex = new ServerApiException(BaseCmd.PARAM_ERROR, "\"page\" parameter is required when \"pagesize\" is specified"); + ServerApiException ex = new ServerApiException(ApiErrorCode.PARAM_ERROR, "\"page\" parameter is required when \"pagesize\" is specified"); ex.setCSErrorCode(CSExceptionErrorCode.getCSErrCode(ex.getClass().getName())); throw ex; } else if (pageSize == null && (unpackedParams.get(ApiConstants.PAGE) != null)) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "\"pagesize\" parameter is required when \"page\" is specified"); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "\"pagesize\" parameter is required when \"page\" is specified"); } } @@ -370,7 +209,7 @@ public class ApiDispatcher { Object paramObj = unpackedParams.get(parameterAnnotation.name()); if (paramObj == null) { if (parameterAnnotation.required()) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to missing parameter " + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to missing parameter " + parameterAnnotation.name()); } continue; @@ -383,23 +222,23 @@ public class ApiDispatcher { if (s_logger.isDebugEnabled()) { s_logger.debug("Unable to execute API command " + cmd.getCommandName() + " due to invalid value " + paramObj + " for parameter " + parameterAnnotation.name()); } - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to invalid value " + paramObj + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to invalid value " + paramObj + " for parameter " + parameterAnnotation.name()); } catch (ParseException parseEx) { if (s_logger.isDebugEnabled()) { s_logger.debug("Invalid date parameter " + paramObj + " passed to command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8)); } - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to parse date " + paramObj + " for command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to parse date " + paramObj + " for command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + ", please pass dates in the format mentioned in the api documentation"); } catch (InvalidParameterValueException invEx) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to invalid value. " + invEx.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable to execute API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8) + " due to invalid value. " + invEx.getMessage()); } catch (CloudRuntimeException cloudEx) { // FIXME: Better error message? This only happens if the API command is not executable, which typically //means // there was // and IllegalAccessException setting one of the parameters. - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal error executing API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8)); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Internal error executing API command " + cmd.getCommandName().substring(0, cmd.getCommandName().length() - 8)); } //check access on the resource this field points to diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index e106f0322ad..fc197b943e6 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -101,6 +101,8 @@ import org.apache.cloudstack.api.command.user.tag.ListTagsCmd; import com.cloud.api.response.ApiResponseSerializer; import org.apache.cloudstack.api.response.ExceptionResponse; import org.apache.cloudstack.api.response.ListResponse; + +import com.cloud.async.AsyncCommandQueued; import com.cloud.async.AsyncJob; import com.cloud.async.AsyncJobManager; import com.cloud.async.AsyncJobVO; @@ -111,9 +113,13 @@ import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; import com.cloud.event.EventUtils; +import com.cloud.exception.AccountLimitException; import com.cloud.exception.CloudAuthenticationException; +import com.cloud.exception.InsufficientCapacityException; import com.cloud.exception.InvalidParameterValueException; import com.cloud.exception.PermissionDeniedException; +import com.cloud.exception.ResourceAllocationException; +import com.cloud.exception.ResourceUnavailableException; import com.cloud.server.ManagementServer; import com.cloud.user.Account; import com.cloud.user.AccountManager; @@ -130,7 +136,7 @@ import com.cloud.utils.component.Inject; import com.cloud.utils.concurrency.NamedThreadFactory; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; -import com.cloud.utils.exception.CSExceptionErrorCode; + public class ApiServer implements HttpRequestHandler { private static final Logger s_logger = Logger.getLogger(ApiServer.class.getName()); @@ -272,8 +278,8 @@ public class ApiServer implements HttpRequestHandler { writeResponse(response, responseText, HttpStatus.SC_OK, responseType, null); } catch (ServerApiException se) { - String responseText = getSerializedApiError(se.getErrorCode(), se.getDescription(), parameterMap, responseType, se); - writeResponse(response, responseText, se.getErrorCode(), responseType, se.getDescription()); + String responseText = getSerializedApiError(se, parameterMap, responseType); + writeResponse(response, responseText, se.getErrorCode().getHttpCode(), responseType, se.getDescription()); sb.append(" " + se.getErrorCode() + " " + se.getDescription()); } catch (RuntimeException e) { // log runtime exception like NullPointerException to help identify the source easier @@ -302,7 +308,7 @@ public class ApiServer implements HttpRequestHandler { s_logger.trace(" key: " + keyStr + ", value: " + ((value == null) ? "'null'" : value[0])); } } - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "Invalid request, no command sent"); + throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, "Invalid request, no command sent"); } else { Map paramMap = new HashMap(); Set keys = params.keySet(); @@ -320,10 +326,10 @@ public class ApiServer implements HttpRequestHandler { decodedValue = URLDecoder.decode(value[0], "UTF-8"); } catch (UnsupportedEncodingException usex) { s_logger.warn(key + " could not be decoded, value = " + value[0]); - throw new ServerApiException(BaseCmd.PARAM_ERROR, key + " could not be decoded, received value " + value[0]); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, key + " could not be decoded, received value " + value[0]); } catch (IllegalArgumentException iae) { s_logger.warn(key + " could not be decoded, value = " + value[0]); - throw new ServerApiException(BaseCmd.PARAM_ERROR, key + " could not be decoded, received value " + value[0] + " which contains illegal characters eg.%"); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, key + " could not be decoded, received value " + value[0] + " which contains illegal characters eg.%"); } } else { decodedValue = value[0]; @@ -344,51 +350,81 @@ public class ApiServer implements HttpRequestHandler { String errorString = "Unknown API command: " + ((command == null) ? "null" : command[0]); s_logger.warn(errorString); auditTrailSb.append(" " + errorString); - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, errorString); + throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, errorString); } } } - } catch (Exception ex) { - if (ex instanceof InvalidParameterValueException) { - InvalidParameterValueException ref = (InvalidParameterValueException)ex; - ServerApiException e = new ServerApiException(BaseCmd.PARAM_ERROR, ex.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - e.addProxyObject(idList.get(i)); - } - } - // Also copy over the cserror code and the function/layer in which it was thrown. - e.setCSErrorCode(ref.getCSErrorCode()); - throw e; - } else if (ex instanceof PermissionDeniedException) { - PermissionDeniedException ref = (PermissionDeniedException)ex; - ServerApiException e = new ServerApiException(BaseCmd.ACCOUNT_ERROR, ex.getMessage()); - // copy over the IdentityProxy information as well and throw the serverapiexception. - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - // Iterate through entire arraylist and copy over each proxy id. - for (int i = 0 ; i < idList.size(); i++) { - e.addProxyObject(idList.get(i)); - } - } - e.setCSErrorCode(ref.getCSErrorCode()); - throw e; - } else if (ex instanceof ServerApiException) { - throw (ServerApiException) ex; - } else { - s_logger.error("unhandled exception executing api command: " + ((command == null) ? "null" : command[0]), ex); - ServerApiException e = new ServerApiException(BaseCmd.INTERNAL_ERROR, "Internal server error, unable to execute request."); - e.setCSErrorCode(CSExceptionErrorCode.getCSErrCode("ServerApiException")); - throw e; - } } + catch (InvalidParameterValueException ex){ + s_logger.info(ex.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ex.getMessage(), ex); + } + catch (IllegalArgumentException ex){ + s_logger.info(ex.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ex.getMessage(), ex); + } + catch (PermissionDeniedException ex){ + ArrayList idList = ex.getIdProxyList(); + if (idList != null) { + s_logger.info("PermissionDenied: " + ex.getMessage() + " on uuids: [" + StringUtils.listToCsvTags(idList) + "]"); + } else { + s_logger.info("PermissionDenied: " + ex.getMessage()); + } + throw new ServerApiException(ApiErrorCode.ACCOUNT_ERROR, ex.getMessage(), ex); + } + catch (AccountLimitException ex){ + s_logger.info(ex.getMessage()); + throw new ServerApiException(ApiErrorCode.ACCOUNT_RESOURCE_LIMIT_ERROR, ex.getMessage(), ex); + } + catch (InsufficientCapacityException ex){ + s_logger.info(ex.getMessage()); + String errorMsg = ex.getMessage(); + if (UserContext.current().getCaller().getType() != Account.ACCOUNT_TYPE_ADMIN){ + // hide internal details to non-admin user for security reason + errorMsg = BaseCmd.USER_ERROR_MESSAGE; + } + throw new ServerApiException(ApiErrorCode.INSUFFICIENT_CAPACITY_ERROR, errorMsg, ex); + } + catch (ResourceAllocationException ex){ + s_logger.info(ex.getMessage()); + String errorMsg = ex.getMessage(); + if (UserContext.current().getCaller().getType() != Account.ACCOUNT_TYPE_ADMIN){ + // hide internal details to non-admin user for security reason + errorMsg = BaseCmd.USER_ERROR_MESSAGE; + } + throw new ServerApiException(ApiErrorCode.RESOURCE_ALLOCATION_ERROR, errorMsg, ex); + } + catch (ResourceUnavailableException ex){ + s_logger.info(ex.getMessage()); + String errorMsg = ex.getMessage(); + if (UserContext.current().getCaller().getType() != Account.ACCOUNT_TYPE_ADMIN){ + // hide internal details to non-admin user for security reason + errorMsg = BaseCmd.USER_ERROR_MESSAGE; + } + throw new ServerApiException(ApiErrorCode.RESOURCE_UNAVAILABLE_ERROR, errorMsg, ex); + } + catch (AsyncCommandQueued ex){ + s_logger.error("unhandled exception executing api command: " + ((command == null) ? "null" : command[0]), ex); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Internal server error, unable to execute request."); + } + catch (ServerApiException ex){ + s_logger.info(ex.getDescription()); + throw ex; + } + catch (Exception ex){ + s_logger.error("unhandled exception executing api command: " + ((command == null) ? "null" : command[0]), ex); + String errorMsg = ex.getMessage(); + if (UserContext.current().getCaller().getType() != Account.ACCOUNT_TYPE_ADMIN){ + // hide internal details to non-admin user for security reason + errorMsg = BaseCmd.USER_ERROR_MESSAGE; + } + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, errorMsg, ex); + } + return response; } - private String queueCommand(BaseCmd cmdObj, Map params) { + private String queueCommand(BaseCmd cmdObj, Map params) throws Exception { UserContext ctx = UserContext.current(); Long callerUserId = ctx.getCallerUserId(); Account caller = ctx.getCaller(); @@ -444,7 +480,7 @@ public class ApiServer implements HttpRequestHandler { if (jobId == 0L) { String errorMsg = "Unable to schedule async job for command " + job.getCmd(); s_logger.warn(errorMsg); - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, errorMsg); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, errorMsg); } if (objectId != null) { @@ -554,14 +590,14 @@ public class ApiServer implements HttpRequestHandler { } catch (PermissionDeniedException ex){ s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); + throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); } return true; } else { // check against every available command to see if the command exists or not if (!_apiNameCmdClassMap.containsKey(commandName) && !commandName.equals("login") && !commandName.equals("logout")) { s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); + throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, "The given command does not exist or it is not available for user"); } } @@ -657,7 +693,7 @@ public class ApiServer implements HttpRequestHandler { } catch (PermissionDeniedException ex){ s_logger.debug("The given command:" + commandName + " does not exist or it is not available for user"); - throw new ServerApiException(BaseCmd.UNSUPPORTED_ACTION_ERROR, "The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); + throw new ServerApiException(ApiErrorCode.UNSUPPORTED_ACTION_ERROR, "The given command:" + commandName + " does not exist or it is not available for user with id:" + userId); } // verify secret key exists @@ -680,11 +716,10 @@ public class ApiServer implements HttpRequestHandler { s_logger.info("User signature: " + signature + " is not equaled to computed signature: " + computedSignature); } return equalSig; - } catch (Exception ex) { - if (ex instanceof ServerApiException && ((ServerApiException) ex).getErrorCode() == BaseCmd.UNSUPPORTED_ACTION_ERROR) { - throw (ServerApiException) ex; - } - s_logger.error("unable to verify request signature", ex); + } catch (ServerApiException ex){ + throw ex; + } catch (Exception ex){ + s_logger.error("unable to verify request signature"); } return false; } @@ -931,13 +966,13 @@ public class ApiServer implements HttpRequestHandler { } } - public String getSerializedApiError(int errorCode, String errorText, Map apiCommandParams, String responseType, Exception ex) { + public String getSerializedApiError(int errorCode, String errorText, Map apiCommandParams, String responseType) { String responseName = null; Class cmdClass = null; String responseText = null; try { - if (errorCode == BaseCmd.UNSUPPORTED_ACTION_ERROR || apiCommandParams == null || apiCommandParams.isEmpty()) { + if (apiCommandParams == null || apiCommandParams.isEmpty()) { responseName = "errorresponse"; } else { Object cmdObj = apiCommandParams.get("command"); @@ -956,48 +991,55 @@ public class ApiServer implements HttpRequestHandler { apiResponse.setErrorCode(errorCode); apiResponse.setErrorText(errorText); apiResponse.setResponseName(responseName); - // Also copy over the IdentityProxy object List into this new apiResponse, from - // the exception caught. When invoked from handle(), the exception here can - // be either ServerApiException, PermissionDeniedException or InvalidParameterValue - // Exception. When invoked from ApiServlet's processRequest(), this can be - // a standard exception like NumberFormatException. We'll leave the standard ones alone. - if (ex != null) { - if (ex instanceof ServerApiException || ex instanceof PermissionDeniedException - || ex instanceof InvalidParameterValueException) { - // Cast the exception appropriately and retrieve the IdentityProxy - if (ex instanceof ServerApiException) { - ServerApiException ref = (ServerApiException) ex; - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - for (int i=0; i < idList.size(); i++) { - apiResponse.addProxyObject(idList.get(i)); - } - } - // Also copy over the cserror code and the function/layer in which it was thrown. - apiResponse.setCSErrorCode(ref.getCSErrorCode()); - } else if (ex instanceof PermissionDeniedException) { - PermissionDeniedException ref = (PermissionDeniedException) ex; - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - for (int i=0; i < idList.size(); i++) { - apiResponse.addProxyObject(idList.get(i)); - } - } - // Also copy over the cserror code and the function/layer in which it was thrown. - apiResponse.setCSErrorCode(ref.getCSErrorCode()); - } else if (ex instanceof InvalidParameterValueException) { - InvalidParameterValueException ref = (InvalidParameterValueException) ex; - ArrayList idList = ref.getIdProxyList(); - if (idList != null) { - for (int i=0; i < idList.size(); i++) { - apiResponse.addProxyObject(idList.get(i)); - } - } - // Also copy over the cserror code and the function/layer in which it was thrown. - apiResponse.setCSErrorCode(ref.getCSErrorCode()); - } - } + SerializationContext.current().setUuidTranslation(true); + responseText = ApiResponseSerializer.toSerializedString(apiResponse, responseType); + + } catch (Exception e) { + s_logger.error("Exception responding to http request", e); + } + return responseText; + } + + public String getSerializedApiError(ServerApiException ex, Map apiCommandParams, String responseType) { + String responseName = null; + Class cmdClass = null; + String responseText = null; + + if (ex == null){ + // this call should not be invoked with null exception + return getSerializedApiError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Some internal error happened", apiCommandParams, responseType); + } + try { + if (ex.getErrorCode() == ApiErrorCode.UNSUPPORTED_ACTION_ERROR || apiCommandParams == null || apiCommandParams.isEmpty()) { + responseName = "errorresponse"; + } else { + Object cmdObj = apiCommandParams.get("command"); + // cmd name can be null when "command" parameter is missing in + // the request + if (cmdObj != null) { + String cmdName = ((String[]) cmdObj)[0]; + cmdClass = getCmdClass(cmdName); + if (cmdClass != null) { + responseName = ((BaseCmd) cmdClass.newInstance()).getCommandName(); + } else { + responseName = "errorresponse"; + } + } } + ExceptionResponse apiResponse = new ExceptionResponse(); + apiResponse.setErrorCode(ex.getErrorCode().getHttpCode()); + apiResponse.setErrorText(ex.getDescription()); + apiResponse.setResponseName(responseName); + ArrayList idList = ex.getIdProxyList(); + if (idList != null) { + for (int i = 0; i < idList.size(); i++) { + apiResponse.addProxyObject(idList.get(i)); + } + } + // Also copy over the cserror code and the function/layer in which + // it was thrown. + apiResponse.setCSErrorCode(ex.getCSErrorCode()); + SerializationContext.current().setUuidTranslation(true); responseText = ApiResponseSerializer.toSerializedString(apiResponse, responseType); diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java index 19091f25ff2..92d3137d30a 100755 --- a/server/src/com/cloud/api/ApiServlet.java +++ b/server/src/com/cloud/api/ApiServlet.java @@ -28,6 +28,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ServerApiException; import org.apache.log4j.Logger; @@ -128,7 +129,7 @@ public class ApiServlet extends HttpServlet { reqStr = auditTrailSb.toString() + " " + req.getQueryString(); s_logger.debug("===START=== " + StringUtils.cleanString(reqStr)); } - + try { HttpSession session = req.getSession(false); Object[] responseTypeParam = params.get("response"); @@ -192,7 +193,7 @@ public class ApiServlet extends HttpServlet { s_logger.warn("Invalid domain id entered by user"); auditTrailSb.append(" " + HttpServletResponse.SC_UNAUTHORIZED + " " + "Invalid domain id entered, please enter a valid one"); String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid domain id entered, please enter a valid one", params, - responseType, null); + responseType); writeResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); } } @@ -227,10 +228,10 @@ public class ApiServlet extends HttpServlet { } catch (IllegalStateException ise) { } - auditTrailSb.append(" " + BaseCmd.ACCOUNT_ERROR + " " + ex.getMessage() != null ? ex.getMessage() : "failed to authenticate user, check if username/password are correct"); - String serializedResponse = _apiServer.getSerializedApiError(BaseCmd.ACCOUNT_ERROR, ex.getMessage() != null ? ex.getMessage() - : "failed to authenticate user, check if username/password are correct", params, responseType, null); - writeResponse(resp, serializedResponse, BaseCmd.ACCOUNT_ERROR, responseType); + auditTrailSb.append(" " + ApiErrorCode.ACCOUNT_ERROR + " " + ex.getMessage() != null ? ex.getMessage() : "failed to authenticate user, check if username/password are correct"); + String serializedResponse = _apiServer.getSerializedApiError(ApiErrorCode.ACCOUNT_ERROR.getHttpCode(), ex.getMessage() != null ? ex.getMessage() + : "failed to authenticate user, check if username/password are correct", params, responseType); + writeResponse(resp, serializedResponse, ApiErrorCode.ACCOUNT_ERROR.getHttpCode(), responseType); return; } } @@ -257,7 +258,7 @@ public class ApiServlet extends HttpServlet { } catch (IllegalStateException ise) { } auditTrailSb.append(" " + HttpServletResponse.SC_UNAUTHORIZED + " " + "unable to verify user credentials"); - String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials", params, responseType, null); + String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials", params, responseType); writeResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); return; } @@ -269,7 +270,7 @@ public class ApiServlet extends HttpServlet { if (command == null) { s_logger.info("missing command, ignoring request..."); auditTrailSb.append(" " + HttpServletResponse.SC_BAD_REQUEST + " " + "no command specified"); - String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_BAD_REQUEST, "no command specified", params, responseType, null); + String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_BAD_REQUEST, "no command specified", params, responseType); writeResponse(resp, serializedResponse, HttpServletResponse.SC_BAD_REQUEST, responseType); return; } @@ -283,7 +284,7 @@ public class ApiServlet extends HttpServlet { } auditTrailSb.append(" " + HttpServletResponse.SC_UNAUTHORIZED + " " + "unable to verify user credentials"); - String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials", params, responseType, null); + String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials", params, responseType); writeResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); return; } @@ -298,7 +299,7 @@ public class ApiServlet extends HttpServlet { * params.put(BaseCmd.Properties.ACCOUNT_OBJ.getName(), new Object[] { accountObj }); } else { * params.put(BaseCmd.Properties.USER_ID.getName(), new String[] { userId }); * params.put(BaseCmd.Properties.ACCOUNT_OBJ.getName(), new Object[] { accountObj }); } } - * + * * // update user context info here so that we can take information if the request is authenticated // via api * key mechanism updateUserContext(params, session != null ? session.getId() : null); */ @@ -307,15 +308,9 @@ public class ApiServlet extends HttpServlet { "(userId=" + UserContext.current().getCallerUserId() + " accountId=" + UserContext.current().getCaller().getId() + " sessionId=" + (session != null ? session.getId() : null) + ")"); - try { - String response = _apiServer.handleRequest(params, false, responseType, auditTrailSb); - writeResponse(resp, response != null ? response : "", HttpServletResponse.SC_OK, responseType); - } catch (ServerApiException se) { - String serializedResponseText = _apiServer.getSerializedApiError(se.getErrorCode(), se.getDescription(), params, responseType, null); - resp.setHeader("X-Description", se.getDescription()); - writeResponse(resp, serializedResponseText, se.getErrorCode(), responseType); - auditTrailSb.append(" " + se.getErrorCode() + " " + se.getDescription()); - } + String response = _apiServer.handleRequest(params, false, responseType, auditTrailSb); + writeResponse(resp, response != null ? response : "", HttpServletResponse.SC_OK, responseType); + } else { if (session != null) { try { @@ -325,21 +320,18 @@ public class ApiServlet extends HttpServlet { } auditTrailSb.append(" " + HttpServletResponse.SC_UNAUTHORIZED + " " + "unable to verify user credentials and/or request signature"); - String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials and/or request signature", params, responseType, null); + String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials and/or request signature", params, responseType); writeResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); } + } catch (ServerApiException se) { + String serializedResponseText = _apiServer.getSerializedApiError(se, params, responseType); + resp.setHeader("X-Description", se.getDescription()); + writeResponse(resp, serializedResponseText, se.getErrorCode().getHttpCode(), responseType); + auditTrailSb.append(" " + se.getErrorCode() + " " + se.getDescription()); } catch (Exception ex) { - if (ex instanceof ServerApiException && ((ServerApiException) ex).getErrorCode() == BaseCmd.UNSUPPORTED_ACTION_ERROR) { - ServerApiException se = (ServerApiException) ex; - String serializedResponseText = _apiServer.getSerializedApiError(se.getErrorCode(), se.getDescription(), params, responseType, null); - resp.setHeader("X-Description", se.getDescription()); - writeResponse(resp, serializedResponseText, se.getErrorCode(), responseType); - auditTrailSb.append(" " + se.getErrorCode() + " " + se.getDescription()); - } else { - s_logger.error("unknown exception writing api response", ex); - auditTrailSb.append(" unknown exception writing api response"); - } + s_logger.error("unknown exception writing api response", ex); + auditTrailSb.append(" unknown exception writing api response"); } finally { s_accessLogger.info(auditTrailSb.toString()); if (s_logger.isDebugEnabled()) { @@ -354,9 +346,9 @@ public class ApiServlet extends HttpServlet { * private void updateUserContext(Map requestParameters, String sessionId) { String userIdStr = * (String)(requestParameters.get(BaseCmd.Properties.USER_ID.getName())[0]); Account accountObj = * (Account)(requestParameters.get(BaseCmd.Properties.ACCOUNT_OBJ.getName())[0]); - * + * * Long userId = null; Long accountId = null; if(userIdStr != null) userId = Long.parseLong(userIdStr); - * + * * if(accountObj != null) accountId = accountObj.getId(); UserContext.updateContext(userId, accountId, sessionId); } */ @@ -386,7 +378,7 @@ public class ApiServlet extends HttpServlet { private String getLoginSuccessResponse(HttpSession session, String responseType) { StringBuffer sb = new StringBuffer(); int inactiveInterval = session.getMaxInactiveInterval(); - + String user_UUID = (String)session.getAttribute("user_UUID"); session.removeAttribute("user_UUID"); diff --git a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java index fdbbbe4ca3c..cdf83ae9ab6 100644 --- a/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/AddTrafficMonitorCmd.java @@ -97,9 +97,9 @@ public class AddTrafficMonitorCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } catch (InvalidParameterValueException ipve) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, ipve.getMessage()); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, ipve.getMessage()); } catch (CloudRuntimeException cre) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, cre.getMessage()); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, cre.getMessage()); } } } diff --git a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java index 4c7d3a70546..d39323aa60d 100644 --- a/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java +++ b/server/src/com/cloud/api/commands/DeleteTrafficMonitorCmd.java @@ -20,6 +20,7 @@ import org.apache.cloudstack.api.response.HostResponse; import org.apache.log4j.Logger; import org.apache.cloudstack.api.ApiConstants; +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.Parameter; @@ -33,25 +34,25 @@ import com.cloud.utils.component.ComponentLocator; @APICommand(name = "deleteTrafficMonitor", description="Deletes an traffic monitor host.", responseObject = SuccessResponse.class) public class DeleteTrafficMonitorCmd extends BaseCmd { - public static final Logger s_logger = Logger.getLogger(DeleteTrafficMonitorCmd.class.getName()); - private static final String s_name = "deletetrafficmonitorresponse"; - + public static final Logger s_logger = Logger.getLogger(DeleteTrafficMonitorCmd.class.getName()); + private static final String s_name = "deletetrafficmonitorresponse"; + ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// ///////////////////////////////////////////////////// - + @Parameter(name=ApiConstants.ID, type=CommandType.UUID, entityType = HostResponse.class, required = true, description="Id of the Traffic Monitor Host.") private Long id; - + /////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// ///////////////////////////////////////////////////// - + public Long getId() { return id; } - + ///////////////////////////////////////////////////// /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// @@ -60,12 +61,12 @@ public class DeleteTrafficMonitorCmd extends BaseCmd { public String getCommandName() { return s_name; } - + @Override public long getEntityOwnerId() { return Account.ACCOUNT_ID_SYSTEM; } - + @Override public void execute(){ try { @@ -77,10 +78,10 @@ public class DeleteTrafficMonitorCmd extends BaseCmd { response.setResponseName(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete traffic monitor."); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to delete traffic monitor."); } } catch (InvalidParameterValueException e) { - throw new ServerApiException(BaseCmd.PARAM_ERROR, "Failed to delete traffic monitor."); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Failed to delete traffic monitor."); } } } diff --git a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java index aa3c082ce81..4206cf82885 100644 --- a/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java +++ b/server/src/com/cloud/api/commands/GenerateUsageRecordsCmd.java @@ -85,7 +85,7 @@ public class GenerateUsageRecordsCmd extends BaseCmd { SuccessResponse response = new SuccessResponse(getCommandName()); this.setResponseObject(response); } else { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to generate usage records"); + throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to generate usage records"); } } } diff --git a/server/src/com/cloud/async/AsyncJobManagerImpl.java b/server/src/com/cloud/async/AsyncJobManagerImpl.java index 7bf5c5a83cc..05d305eef6e 100644 --- a/server/src/com/cloud/async/AsyncJobManagerImpl.java +++ b/server/src/com/cloud/async/AsyncJobManagerImpl.java @@ -41,6 +41,8 @@ import org.apache.log4j.NDC; import com.cloud.api.ApiDispatcher; import com.cloud.api.ApiGsonHelper; import com.cloud.api.ApiSerializerHelper; + +import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ServerApiException; @@ -78,13 +80,13 @@ import com.google.gson.reflect.TypeToken; public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListener { public static final Logger s_logger = Logger.getLogger(AsyncJobManagerImpl.class.getName()); private static final int ACQUIRE_GLOBAL_LOCK_TIMEOUT_FOR_COOPERATION = 3; // 3 seconds - + private static final int MAX_ONETIME_SCHEDULE_SIZE = 50; private static final int HEARTBEAT_INTERVAL = 2000; private static final int GC_INTERVAL = 10000; // 10 seconds - + private String _name; - + private AsyncJobExecutorContext _context; private SyncQueueManager _queueMgr; private ClusterManager _clusterMgr; @@ -93,7 +95,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe private AsyncJobDao _jobDao; private long _jobExpireSeconds = 86400; // 1 day private long _jobCancelThresholdSeconds = 3600; // 1 hour (for cancelling the jobs blocking other jobs) - + private ApiDispatcher _dispatcher; private final ScheduledExecutorService _heartbeatScheduler = @@ -104,7 +106,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe public AsyncJobExecutorContext getExecutorContext() { return _context; } - + @Override public AsyncJobVO getAsyncJob(long jobId) { return _jobDao.findById(jobId); @@ -119,7 +121,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe public List findInstancePendingAsyncJobs(AsyncJob.Type instanceType, Long accountId) { return _jobDao.findInstancePendingAsyncJobs(instanceType, accountId); } - + @Override public long submitAsyncJob(AsyncJobVO job) { return submitAsyncJob(job, false); @@ -155,7 +157,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe s_logger.debug("Complete async job-" + jobId + ", jobStatus: " + jobStatus + ", resultCode: " + resultCode + ", result: " + resultObject); } - + Transaction txt = Transaction.currentTxn(); try { txt.start(); @@ -165,7 +167,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe s_logger.debug("job-" + jobId + " no longer exists, we just log completion info here. " + jobStatus + ", resultCode: " + resultCode + ", result: " + resultObject); } - + txt.rollback(); return; } @@ -197,7 +199,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe s_logger.debug("Update async-job progress, job-" + jobId + ", processStatus: " + processStatus + ", result: " + resultObject); } - + Transaction txt = Transaction.currentTxn(); try { txt.start(); @@ -206,11 +208,11 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe if(s_logger.isDebugEnabled()) { s_logger.debug("job-" + jobId + " no longer exists, we just log progress info here. progress status: " + processStatus); } - + txt.rollback(); return; } - + job.setProcessStatus(processStatus); if(resultObject != null) { job.setResult(ApiSerializerHelper.toSerializedStringOld(resultObject)); @@ -258,7 +260,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe if (job.getSyncSource() != null) { return; } - + if(s_logger.isDebugEnabled()) { s_logger.debug("Sync job-" + job.getId() + " execution on object " + syncObjType + "." + syncObjId); } @@ -287,7 +289,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe throw new AsyncCommandQueued(queue, "job-" + job.getId() + " queued"); } } - + @Override public AsyncJob queryAsyncJobResult(QueryAsyncJobResultCmd cmd) { Account caller = UserContext.current().getCaller(); @@ -296,10 +298,10 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe if (job == null) { throw new InvalidParameterValueException("Unable to find a job by id " + cmd.getId()); } - + User userJobOwner = _accountMgr.getUserIncludingRemoved(job.getUserId()); Account jobOwner = _accountMgr.getAccount(userJobOwner.getAccountId()); - + //check permissions if (caller.getType() == Account.ACCOUNT_TYPE_NORMAL) { //regular user can see only jobs he owns @@ -309,7 +311,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe } else if (caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN) { _accountMgr.checkAccess(caller, null, true, jobOwner); } - + //poll the job queryAsyncJobResult(cmd.getId()); return _jobDao.findById(cmd.getId()); @@ -320,10 +322,10 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe if(s_logger.isTraceEnabled()) { s_logger.trace("Query async-job status, job-" + jobId); } - + Transaction txt = Transaction.currentTxn(); AsyncJobResult jobResult = new AsyncJobResult(jobId); - + try { txt.start(); AsyncJobVO job = _jobDao.findById(jobId); @@ -334,10 +336,10 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe jobResult.setResult(job.getResult()); jobResult.setResultCode(job.getResultCode()); jobResult.setUuid(job.getUuid()); - + if(job.getStatus() == AsyncJobResult.STATUS_SUCCEEDED || job.getStatus() == AsyncJobResult.STATUS_FAILED) { - + if(s_logger.isDebugEnabled()) { s_logger.debug("Async job-" + jobId + " completed"); } @@ -349,23 +351,23 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe if(s_logger.isDebugEnabled()) { s_logger.debug("Async job-" + jobId + " does not exist, invalid job id?"); } - + jobResult.setJobStatus(AsyncJobResult.STATUS_FAILED); jobResult.setResult("job-" + jobId + " does not exist"); } txt.commit(); } catch(Exception e) { s_logger.error("Unexpected exception while querying async job-" + jobId + " status: ", e); - + jobResult.setJobStatus(AsyncJobResult.STATUS_FAILED); jobResult.setResult("Exception: " + e.toString()); txt.rollback(); } - + if(s_logger.isTraceEnabled()) { s_logger.trace("Job status: " + jobResult.toString()); } - + return jobResult; } @@ -388,66 +390,66 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe public void run() { try { long jobId = 0; - + try { JmxUtil.registerMBean("AsyncJobManager", "Active Job " + job.getId(), new AsyncJobMBeanImpl(job)); } catch(Exception e) { s_logger.warn("Unable to register active job " + job.getId() + " to JMX monitoring due to exception " + ExceptionUtil.toString(e)); } - + BaseAsyncCmd cmdObj = null; Transaction txn = Transaction.open(Transaction.CLOUD_DB); try { jobId = job.getId(); NDC.push("job-" + jobId); - + if(s_logger.isDebugEnabled()) { s_logger.debug("Executing " + job.getCmd() + " for job-" + jobId); } - + Class cmdClass = Class.forName(job.getCmd()); cmdObj = (BaseAsyncCmd)cmdClass.newInstance(); cmdObj.setJob(job); - + Type mapType = new TypeToken>() {}.getType(); Gson gson = ApiGsonHelper.getBuilder().create(); Map params = gson.fromJson(job.getCmdInfo(), mapType); - + // whenever we deserialize, the UserContext needs to be updated String userIdStr = params.get("ctxUserId"); String acctIdStr = params.get("ctxAccountId"); Long userId = null; Account accountObject = null; - + if (userIdStr != null) { userId = Long.parseLong(userIdStr); } - + if (acctIdStr != null) { accountObject = _accountDao.findById(Long.parseLong(acctIdStr)); } - + UserContext.registerContext(userId, accountObject, null, false); try { // dispatch could ultimately queue the job _dispatcher.dispatch(cmdObj, params); - + // serialize this to the async job table completeAsyncJob(jobId, AsyncJobResult.STATUS_SUCCEEDED, 0, cmdObj.getResponseObject()); } finally { UserContext.unregisterContext(); } - + // commands might need to be queued as part of synchronization here, so they just have to be re-dispatched from the queue mechanism... if (job.getSyncSource() != null) { _queueMgr.purgeItem(job.getSyncSource().getId()); checkQueue(job.getSyncSource().getQueueId()); } - + if (s_logger.isDebugEnabled()) { s_logger.debug("Done executing " + job.getCmd() + " for job-" + jobId); } - + } catch(Throwable e) { if (e instanceof AsyncCommandQueued) { if (s_logger.isDebugEnabled()) { @@ -456,25 +458,25 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe checkQueue(((AsyncCommandQueued)e).getQueue().getId()); } else { String errorMsg = null; - int errorCode = BaseCmd.INTERNAL_ERROR; + int errorCode = ApiErrorCode.INTERNAL_ERROR.getHttpCode(); if (!(e instanceof ServerApiException)) { s_logger.error("Unexpected exception while executing " + job.getCmd(), e); errorMsg = e.getMessage(); } else { ServerApiException sApiEx = (ServerApiException)e; errorMsg = sApiEx.getDescription(); - errorCode = sApiEx.getErrorCode(); + errorCode = sApiEx.getErrorCode().getHttpCode(); } - + ExceptionResponse response = new ExceptionResponse(); response.setErrorCode(errorCode); response.setErrorText(errorMsg); response.setResponseName((cmdObj == null) ? "unknowncommandresponse" : cmdObj.getCommandName()); - - // FIXME: setting resultCode to BaseCmd.INTERNAL_ERROR is not right, usually executors have their exception handling + + // FIXME: setting resultCode to ApiErrorCode.INTERNAL_ERROR is not right, usually executors have their exception handling // and we need to preserve that as much as possible here - completeAsyncJob(jobId, AsyncJobResult.STATUS_FAILED, BaseCmd.INTERNAL_ERROR, response); - + completeAsyncJob(jobId, AsyncJobResult.STATUS_FAILED, ApiErrorCode.INTERNAL_ERROR.getHttpCode(), response); + // need to clean up any queue that happened as part of the dispatching and move on to the next item in the queue try { if (job.getSyncSource() != null) { @@ -486,13 +488,13 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe } } } finally { - + try { JmxUtil.unregisterMBean("AsyncJobManager", "Active Job " + job.getId()); } catch(Exception e) { s_logger.warn("Unable to unregister active job " + job.getId() + " from JMX monitoring"); } - + StackMaid.current().exitCleanup(); txn.close(); NDC.pop(); @@ -516,17 +518,17 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe job.setFromPreviousSession(fromPreviousSession); job.setSyncSource(item); - + job.setCompleteMsid(getMsid()); _jobDao.update(job.getId(), job); - + try { scheduleExecution(job); } catch(RejectedExecutionException e) { s_logger.warn("Execution for job-" + job.getId() + " is rejected, return it to the queue for next turn"); _queueMgr.returnItem(item.getId()); } - + } else { if(s_logger.isDebugEnabled()) { s_logger.debug("Unable to find related job for queue item: " + item.toString()); @@ -544,12 +546,12 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe + executor.getSyncSource().getContentType() + "-" + executor.getSyncSource().getContentId()); } - + _queueMgr.purgeItem(executor.getSyncSource().getId()); checkQueue(executor.getSyncSource().getQueueId()); } } - + private void checkQueue(long queueId) { while(true) { try { @@ -558,7 +560,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe if(s_logger.isDebugEnabled()) { s_logger.debug("Executing sync queue item: " + item.toString()); } - + executeQueueItem(item, false); } else { break; @@ -569,7 +571,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe } } } - + private Runnable getHeartbeatTask() { return new Runnable() { @Override @@ -592,7 +594,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe } }; } - + @DB private Runnable getGCTask() { return new Runnable() { @@ -611,7 +613,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe scanLock.releaseRef(); } } - + public void reallyRun() { try { s_logger.trace("Begin cleanup expired async-jobs"); @@ -649,10 +651,10 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe } } - + }; } - + @DB protected void expungeAsyncJob(AsyncJobVO job) { Transaction txn = Transaction.currentTxn(); @@ -667,10 +669,10 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe if(_clusterMgr != null) { return _clusterMgr.getManagementNodeId(); } - + return MacAddress.getMacAddress().toLong(); } - + private void cleanupPendingJobs(List l) { if(l != null && l.size() > 0) { for(SyncQueueItemVO item: l) { @@ -701,7 +703,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe if (configDao == null) { throw new ConfigurationException("Unable to get the configuration dao."); } - + int expireMinutes = NumbersUtil.parseInt( configDao.getValue(Config.JobExpireMinutes.key()), 24*60); _jobExpireSeconds = (long)expireMinutes*60; @@ -719,48 +721,48 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe throw new ConfigurationException("Unable to get " + AsyncJobDao.class.getName()); } - + _context = locator.getManager(AsyncJobExecutorContext.class); if (_context == null) { throw new ConfigurationException("Unable to get " + AsyncJobExecutorContext.class.getName()); } - + _queueMgr = locator.getManager(SyncQueueManager.class); if(_queueMgr == null) { throw new ConfigurationException("Unable to get " + SyncQueueManager.class.getName()); } - + _clusterMgr = locator.getManager(ClusterManager.class); - + _accountMgr = locator.getManager(AccountManager.class); _dispatcher = ApiDispatcher.getInstance(); - + try { final File dbPropsFile = PropertiesUtil.findConfigFile("db.properties"); final Properties dbProps = new Properties(); dbProps.load(new FileInputStream(dbPropsFile)); - + final int cloudMaxActive = Integer.parseInt(dbProps.getProperty("db.cloud.maxActive")); - + int poolSize = (cloudMaxActive * 2) / 3; - + s_logger.info("Start AsyncJobManager thread pool in size " + poolSize); _executor = Executors.newFixedThreadPool(poolSize, new NamedThreadFactory("Job-Executor")); } catch (final Exception e) { throw new ConfigurationException("Unable to load db.properties to configure AsyncJobManagerImpl"); } - + return true; } - + @Override public void onManagementNodeJoined(List nodeList, long selfNodeId) { } - + @Override public void onManagementNodeLeft(List nodeList, long selfNodeId) { for(ManagementServerHostVO msHost : nodeList) { @@ -769,7 +771,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe txn.start(); List items = _queueMgr.getActiveQueueItems(msHost.getId(), true); cleanupPendingJobs(items); - _jobDao.resetJobProcess(msHost.getId(), BaseCmd.INTERNAL_ERROR, getSerializedErrorMessage("job cancelled because of management server restart")); + _jobDao.resetJobProcess(msHost.getId(), ApiErrorCode.INTERNAL_ERROR.getHttpCode(), getSerializedErrorMessage("job cancelled because of management server restart")); txn.commit(); } catch(Throwable e) { s_logger.warn("Unexpected exception ", e); @@ -779,7 +781,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe } } } - + @Override public void onManagementNodeIsolated() { } @@ -789,7 +791,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe try { List l = _queueMgr.getActiveQueueItems(getMsid(), false); cleanupPendingJobs(l); - _jobDao.resetJobProcess(getMsid(), BaseCmd.INTERNAL_ERROR, getSerializedErrorMessage("job cancelled because of management server restart")); + _jobDao.resetJobProcess(getMsid(), ApiErrorCode.INTERNAL_ERROR.getHttpCode(), getSerializedErrorMessage("job cancelled because of management server restart")); } catch(Throwable e) { s_logger.error("Unexpected exception " + e.getMessage(), e); } @@ -801,14 +803,14 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe return true; } - + private static ExceptionResponse getResetResultResponse(String errorMessage) { ExceptionResponse resultObject = new ExceptionResponse(); - resultObject.setErrorCode(BaseCmd.INTERNAL_ERROR); + resultObject.setErrorCode(ApiErrorCode.INTERNAL_ERROR.getHttpCode()); resultObject.setErrorText(errorMessage); return resultObject; } - + private static String getSerializedErrorMessage(String errorMessage) { return ApiSerializerHelper.toSerializedStringOld(getResetResultResponse(errorMessage)); } @@ -819,7 +821,7 @@ public class AsyncJobManagerImpl implements AsyncJobManager, ClusterManagerListe _executor.shutdown(); return true; } - + @Override public String getName() { return _name; diff --git a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java index 303e0d681fa..1a0969957a6 100755 --- a/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java +++ b/utils/src/com/cloud/utils/exception/CSExceptionErrorCode.java @@ -37,15 +37,12 @@ public class CSExceptionErrorCode { try { ExceptionErrorCodeMap = new HashMap(); ExceptionErrorCodeMap.put("com.cloud.utils.exception.CloudRuntimeException", 4250); - ExceptionErrorCodeMap.put("com.cloud.utils.exception.ExceptionUtil", 4255); ExceptionErrorCodeMap.put("com.cloud.utils.exception.ExecutionException", 4260); ExceptionErrorCodeMap.put("com.cloud.utils.exception.HypervisorVersionChangedException", 4265); - ExceptionErrorCodeMap.put("com.cloud.utils.exception.RuntimeCloudException", 4270); ExceptionErrorCodeMap.put("com.cloud.exception.CloudException", 4275); ExceptionErrorCodeMap.put("com.cloud.exception.AccountLimitException", 4280); ExceptionErrorCodeMap.put("com.cloud.exception.AgentUnavailableException", 4285); ExceptionErrorCodeMap.put("com.cloud.exception.CloudAuthenticationException", 4290); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudExecutionException", 4295); ExceptionErrorCodeMap.put("com.cloud.exception.ConcurrentOperationException", 4300); ExceptionErrorCodeMap.put("com.cloud.exception.ConflictingNetworkSettingsException", 4305); ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveredWithErrorException", 4310); @@ -66,35 +63,6 @@ public class CSExceptionErrorCode { ExceptionErrorCodeMap.put("com.cloud.exception.StorageUnavailableException", 4385); ExceptionErrorCodeMap.put("com.cloud.exception.UnsupportedServiceException", 4390); ExceptionErrorCodeMap.put("com.cloud.exception.VirtualMachineMigrationException", 4395); - - ExceptionErrorCodeMap.put("com.cloud.exception.AccountLimitException", 4400); - ExceptionErrorCodeMap.put("com.cloud.exception.AgentUnavailableException", 4405); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudAuthenticationException", 4410); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudException", 4415); - ExceptionErrorCodeMap.put("com.cloud.exception.CloudExecutionException", 4420); - ExceptionErrorCodeMap.put("com.cloud.exception.ConcurrentOperationException", 4425); - ExceptionErrorCodeMap.put("com.cloud.exception.ConflictingNetworkSettingsException", 4430); - ExceptionErrorCodeMap.put("com.cloud.exception.ConnectionException", 4435); - ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveredWithErrorException", 4440); - ExceptionErrorCodeMap.put("com.cloud.exception.DiscoveryException", 4445); - ExceptionErrorCodeMap.put("com.cloud.exception.HAStateException", 4450); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientAddressCapacityException", 4455); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientCapacityException", 4460); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientNetworkCapacityException", 4465); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientServerCapacityException", 4470); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientStorageCapacityException", 4475); - ExceptionErrorCodeMap.put("com.cloud.exception.InsufficientVirtualNetworkCapcityException", 4480); - ExceptionErrorCodeMap.put("com.cloud.exception.InternalErrorException", 4485); - ExceptionErrorCodeMap.put("com.cloud.exception.InvalidParameterValueException", 4490); - ExceptionErrorCodeMap.put("com.cloud.exception.ManagementServerException", 4495); - ExceptionErrorCodeMap.put("com.cloud.exception.NetworkRuleConflictException", 4500); - ExceptionErrorCodeMap.put("com.cloud.exception.PermissionDeniedException", 4505); - ExceptionErrorCodeMap.put("com.cloud.exception.ResourceAllocationException", 4510); - ExceptionErrorCodeMap.put("com.cloud.exception.ResourceInUseException", 4515); - ExceptionErrorCodeMap.put("com.cloud.exception.ResourceUnavailableException", 4520); - ExceptionErrorCodeMap.put("com.cloud.exception.StorageUnavailableException", 4525); - ExceptionErrorCodeMap.put("com.cloud.exception.UnsupportedServiceException", 4530); - ExceptionErrorCodeMap.put("com.cloud.exception.VirtualMachineMigrationException", 4535); ExceptionErrorCodeMap.put("com.cloud.async.AsyncCommandQueued", 4540); // Have a special error code for ServerApiException when it is From 1a2e69fb22a64b84960860965d4f757637ac5e12 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Thu, 17 Jan 2013 11:13:30 -0700 Subject: [PATCH 75/90] Summary: fix ipsectunnel.sh being called as ipsectunnel in KVM S2S vpn Signed-off-by: Marcus Sorensen 1358446410 -0700 --- .../agent/resource/virtualnetwork/VirtualRoutingResource.java | 2 +- scripts/storage/qcow2/resizevolume.sh | 0 2 files changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 scripts/storage/qcow2/resizevolume.sh diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java index 2dc7950b2b7..18a0426e2fa 100755 --- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java @@ -720,7 +720,7 @@ public class VirtualRoutingResource implements Manager { args += " -N "; args += cmd.getPeerGuestCidrList(); } - String result = routerProxy("ipsectunnel", cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP), args); + String result = routerProxy("ipsectunnel.sh", cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP), args); if (result != null) { return new Answer(cmd, false, "Configure site to site VPN failed due to " + result); } diff --git a/scripts/storage/qcow2/resizevolume.sh b/scripts/storage/qcow2/resizevolume.sh old mode 100644 new mode 100755 From 1ff7a147bd267d0b9221a8070e47b6a84cafd56d Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Thu, 17 Jan 2013 11:17:43 -0700 Subject: [PATCH 76/90] Revert "Summary: fix ipsectunnel.sh being called as ipsectunnel in KVM S2S vpn" This reverts commit 1a2e69fb22a64b84960860965d4f757637ac5e12. accidentally pushed mode change of sh file as well, need to split this out --- .../agent/resource/virtualnetwork/VirtualRoutingResource.java | 2 +- scripts/storage/qcow2/resizevolume.sh | 0 2 files changed, 1 insertion(+), 1 deletion(-) mode change 100755 => 100644 scripts/storage/qcow2/resizevolume.sh diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java index 18a0426e2fa..2dc7950b2b7 100755 --- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java @@ -720,7 +720,7 @@ public class VirtualRoutingResource implements Manager { args += " -N "; args += cmd.getPeerGuestCidrList(); } - String result = routerProxy("ipsectunnel.sh", cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP), args); + String result = routerProxy("ipsectunnel", cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP), args); if (result != null) { return new Answer(cmd, false, "Configure site to site VPN failed due to " + result); } diff --git a/scripts/storage/qcow2/resizevolume.sh b/scripts/storage/qcow2/resizevolume.sh old mode 100755 new mode 100644 From b77503b5bd001d1038bb4cd79c04db7ca993e94e Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Thu, 17 Jan 2013 11:19:56 -0700 Subject: [PATCH 77/90] Summary: fix ipsectunnel.sh being called as ipsectunnel in KVM S2S vpn Signed-off-by: Marcus Sorensen 1358446796 -0700 --- .../agent/resource/virtualnetwork/VirtualRoutingResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java index 2dc7950b2b7..18a0426e2fa 100755 --- a/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java +++ b/core/src/com/cloud/agent/resource/virtualnetwork/VirtualRoutingResource.java @@ -720,7 +720,7 @@ public class VirtualRoutingResource implements Manager { args += " -N "; args += cmd.getPeerGuestCidrList(); } - String result = routerProxy("ipsectunnel", cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP), args); + String result = routerProxy("ipsectunnel.sh", cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP), args); if (result != null) { return new Answer(cmd, false, "Configure site to site VPN failed due to " + result); } From 8c5b82dfb4060a6e7460741833812849664995ae Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Thu, 17 Jan 2013 11:21:42 -0700 Subject: [PATCH 78/90] Summary: several scripts are not mode executable Detail: several scripts in the scripts directory weren't marked executable. Normally this is handled/fixed in the packaging, but harder to deal with in development environments, so marking them executable. Signed-off-by: Marcus Sorensen 1358446902 -0700 --- scripts/network/exdhcp/prepare_dhcpd.sh | 0 scripts/network/exdhcp/prepare_dnsmasq.sh | 0 scripts/storage/qcow2/get_domr_kernel.sh | 0 scripts/storage/qcow2/managevolume.sh | 0 scripts/storage/qcow2/modifyvlan.sh | 0 scripts/storage/qcow2/resizevolume.sh | 0 scripts/util/prepare_linmin.sh | 0 scripts/vm/hypervisor/xenserver/cloud-propagate-vlan.sh | 0 .../hypervisor/xenserver/xcposs/copy_vhd_from_secondarystorage.sh | 0 .../hypervisor/xenserver/xcposs/copy_vhd_to_secondarystorage.sh | 0 .../xenserver/xcposs/create_privatetemplate_from_snapshot.sh | 0 11 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/network/exdhcp/prepare_dhcpd.sh mode change 100644 => 100755 scripts/network/exdhcp/prepare_dnsmasq.sh mode change 100644 => 100755 scripts/storage/qcow2/get_domr_kernel.sh mode change 100644 => 100755 scripts/storage/qcow2/managevolume.sh mode change 100644 => 100755 scripts/storage/qcow2/modifyvlan.sh mode change 100644 => 100755 scripts/storage/qcow2/resizevolume.sh mode change 100644 => 100755 scripts/util/prepare_linmin.sh mode change 100644 => 100755 scripts/vm/hypervisor/xenserver/cloud-propagate-vlan.sh mode change 100644 => 100755 scripts/vm/hypervisor/xenserver/xcposs/copy_vhd_from_secondarystorage.sh mode change 100644 => 100755 scripts/vm/hypervisor/xenserver/xcposs/copy_vhd_to_secondarystorage.sh mode change 100644 => 100755 scripts/vm/hypervisor/xenserver/xcposs/create_privatetemplate_from_snapshot.sh diff --git a/scripts/network/exdhcp/prepare_dhcpd.sh b/scripts/network/exdhcp/prepare_dhcpd.sh old mode 100644 new mode 100755 diff --git a/scripts/network/exdhcp/prepare_dnsmasq.sh b/scripts/network/exdhcp/prepare_dnsmasq.sh old mode 100644 new mode 100755 diff --git a/scripts/storage/qcow2/get_domr_kernel.sh b/scripts/storage/qcow2/get_domr_kernel.sh old mode 100644 new mode 100755 diff --git a/scripts/storage/qcow2/managevolume.sh b/scripts/storage/qcow2/managevolume.sh old mode 100644 new mode 100755 diff --git a/scripts/storage/qcow2/modifyvlan.sh b/scripts/storage/qcow2/modifyvlan.sh old mode 100644 new mode 100755 diff --git a/scripts/storage/qcow2/resizevolume.sh b/scripts/storage/qcow2/resizevolume.sh old mode 100644 new mode 100755 diff --git a/scripts/util/prepare_linmin.sh b/scripts/util/prepare_linmin.sh old mode 100644 new mode 100755 diff --git a/scripts/vm/hypervisor/xenserver/cloud-propagate-vlan.sh b/scripts/vm/hypervisor/xenserver/cloud-propagate-vlan.sh old mode 100644 new mode 100755 diff --git a/scripts/vm/hypervisor/xenserver/xcposs/copy_vhd_from_secondarystorage.sh b/scripts/vm/hypervisor/xenserver/xcposs/copy_vhd_from_secondarystorage.sh old mode 100644 new mode 100755 diff --git a/scripts/vm/hypervisor/xenserver/xcposs/copy_vhd_to_secondarystorage.sh b/scripts/vm/hypervisor/xenserver/xcposs/copy_vhd_to_secondarystorage.sh old mode 100644 new mode 100755 diff --git a/scripts/vm/hypervisor/xenserver/xcposs/create_privatetemplate_from_snapshot.sh b/scripts/vm/hypervisor/xenserver/xcposs/create_privatetemplate_from_snapshot.sh old mode 100644 new mode 100755 From 0b60c0d3c93c87d9db384f01ef53d733d9322e9a Mon Sep 17 00:00:00 2001 From: Edison Su Date: Thu, 17 Jan 2013 11:02:04 -0800 Subject: [PATCH 79/90] CLOUDSTACK-995: fix failed to detect centos 6.2 --- python/lib/cloudutils/utilities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/lib/cloudutils/utilities.py b/python/lib/cloudutils/utilities.py index 3f5f2a9dc8b..c9d1e339f72 100755 --- a/python/lib/cloudutils/utilities.py +++ b/python/lib/cloudutils/utilities.py @@ -110,7 +110,7 @@ class Distribution: self.distro = "Fedora" elif os.path.exists("/etc/redhat-release"): version = file("/etc/redhat-release").readline() - if version.find("Red Hat Enterprise Linux Server release 6") != -1 or version.find("Scientific Linux release 6") != -1 or version.find("CentOS Linux release 6") != -1 or version.find("CentOS release 6.2") or version.find("CentOS release 6.3") != -1: + if version.find("Red Hat Enterprise Linux Server release 6") != -1 or version.find("Scientific Linux release 6") != -1 or version.find("CentOS Linux release 6") != -1 or version.find("CentOS release 6.2") != -1 or version.find("CentOS release 6.3") != -1: self.distro = "RHEL6" elif version.find("CentOS release") != -1: self.distro = "CentOS" From e37a82375c1dd7631f37de1ed1b336f524d08c62 Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Thu, 17 Jan 2013 12:46:31 -0700 Subject: [PATCH 80/90] Summary: Fix rp_filter for VPC router Detail: VPC router was being treated like normal VR, which was an issue because normally the VR has an eth0,1,2 which are isolated, linklocal, and public networks respectively. rp_filter is turned on for eth0,1 and off for 2 (hardcoded). VPC however comes up with eth0,1 as public, linklocal, and no other interfaces until new isolated networks are added, so the process doesn't work. This change turns on rp_filter as new isolated networks are added to the VR. BUG-ID: CLOUDSTACK-938 Bugfix-for: 4.0.2 Signed-off-by: Marcus Sorensen 1358451991 -0700 --- patches/systemvm/debian/config/etc/init.d/cloud-early-config | 2 +- patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/patches/systemvm/debian/config/etc/init.d/cloud-early-config b/patches/systemvm/debian/config/etc/init.d/cloud-early-config index fe536cbb5a9..285a92fa0a6 100755 --- a/patches/systemvm/debian/config/etc/init.d/cloud-early-config +++ b/patches/systemvm/debian/config/etc/init.d/cloud-early-config @@ -660,7 +660,7 @@ EOF enable_svc dnsmasq 1 enable_svc haproxy 1 enable_svc cloud 0 - disable_rpfilter_domR + disable_rpfilter enable_fwding 1 cp /etc/iptables/iptables-vpcrouter /etc/iptables/rules setup_sshd $ETH0_IP "eth0" diff --git a/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh b/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh index d20ed5a05d2..c909cf796d1 100755 --- a/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh +++ b/patches/systemvm/debian/config/opt/cloud/bin/vpc_guestnw.sh @@ -134,6 +134,7 @@ create_guest_network() { sudo ip addr add dev $dev $ip/$mask brd + sudo ip link set $dev up sudo arping -c 3 -I $dev -A -U -s $ip $ip + echo 1 > /proc/sys/net/ipv4/conf/$dev/rp_filter # restore mark from connection mark local tableName="Table_$dev" sudo ip route add $subnet/$mask dev $dev table $tableName proto static From 2d19f3b0523b808af67fc07c398fd7b93f45c6f5 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Thu, 17 Jan 2013 16:59:48 -0800 Subject: [PATCH 81/90] network-refactor: merge stomped on a logical not' --- .../src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index c771597c369..dfd5232ddab 100755 --- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -1083,7 +1083,7 @@ public class LoadBalancingRulesManagerImpl implements LoadBalancingRulesMa // verify rule is supported by Lb provider of the network LoadBalancingRule loadBalancing = new LoadBalancingRule(newRule, new ArrayList(), new ArrayList()); - if (validateRule(loadBalancing)) { + if (!validateRule(loadBalancing)) { throw new InvalidParameterValueException("LB service provider cannot support this rule"); } From f264571e928cdbe73c8ab41be50d9df79c9c8663 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 17 Jan 2013 17:02:58 -0800 Subject: [PATCH 82/90] ApiServer: Fix default reponse type for apiserver on intergration port to xml Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiServer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/com/cloud/api/ApiServer.java b/server/src/com/cloud/api/ApiServer.java index fc197b943e6..33ae0077a79 100755 --- a/server/src/com/cloud/api/ApiServer.java +++ b/server/src/com/cloud/api/ApiServer.java @@ -256,7 +256,7 @@ public class ApiServer implements HttpRequestHandler { // (Immutable)Multimap paramMultiMap = HashMultimap.create(); // Map> parameterMap = paramMultiMap.asMap(); Map parameterMap = new HashMap(); - String responseType = BaseCmd.RESPONSE_TYPE_JSON; + String responseType = BaseCmd.RESPONSE_TYPE_XML; for (NameValuePair param : paramList) { if (param.getName().equalsIgnoreCase("response")) { responseType = param.getValue(); @@ -267,7 +267,7 @@ public class ApiServer implements HttpRequestHandler { // Check responseType, if not among valid types, fallback to JSON if (!(responseType.equals(BaseCmd.RESPONSE_TYPE_JSON) || responseType.equals(BaseCmd.RESPONSE_TYPE_XML))) - responseType = BaseCmd.RESPONSE_TYPE_JSON; + responseType = BaseCmd.RESPONSE_TYPE_XML; try { // always trust commands from API port, user context will always be UID_SYSTEM/ACCOUNT_ID_SYSTEM From cd37e22f9baf15f1369e5087197dafbcaf2ad65e Mon Sep 17 00:00:00 2001 From: Koushik Das Date: Mon, 7 Jan 2013 13:40:55 +0530 Subject: [PATCH 83/90] CLOUDSTACK-810: Make DirectAgent thread pool size configurable Removed hard-coding of directagent thread pool size and now reading it from configuration Signed-off-by: Chiradeep Vittal --- .../cloud/agent/manager/AgentManagerImpl.java | 23 ++++++++++++++----- .../agent/manager/DirectAgentAttache.java | 13 ++++------- .../src/com/cloud/configuration/Config.java | 2 +- setup/db/db/schema-40to410.sql | 2 ++ 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index 8141fdbe3e0..8b3ee6b2d63 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -28,6 +28,8 @@ import java.util.Random; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; @@ -94,6 +96,7 @@ import com.cloud.resource.Discoverer; import com.cloud.resource.ResourceManager; import com.cloud.resource.ResourceState; import com.cloud.resource.ServerResource; +import com.cloud.server.ManagementService; import com.cloud.storage.StorageManager; import com.cloud.storage.StorageService; import com.cloud.storage.dao.StoragePoolDao; @@ -220,7 +223,8 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { protected ExecutorService _executor; protected ThreadPoolExecutor _connectExecutor; - + protected ScheduledExecutorService _directAgentExecutor; + protected StateMachine2 _statusStateMachine = Status.getStateMachine(); @Inject ResourceManager _resourceMgr; @@ -280,10 +284,15 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { new LinkedBlockingQueue(), new NamedThreadFactory("AgentConnectTaskPool")); //allow core threads to time out even when there are no items in the queue _connectExecutor.allowCoreThreadTimeOut(true); - - _connection = new NioServer("AgentManager", _port, workers + 10, this); + _connection = new NioServer("AgentManager", _port, workers + 10, this); s_logger.info("Listening on " + _port + " with " + workers + " workers"); + + value = configs.get(Config.DirectAgentPoolSize.key()); + int size = NumbersUtil.parseInt(value, 500); + _directAgentExecutor = new ScheduledThreadPoolExecutor(size, new NamedThreadFactory("DirectAgent")); + s_logger.debug("Created DirectAgentAttache pool with size: " + size); + return true; } @@ -1521,7 +1530,9 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { attache.setMaintenanceMode(false); } } - - - + + public ScheduledExecutorService getDirectAgentPool() { + return _directAgentExecutor; + } + } diff --git a/server/src/com/cloud/agent/manager/DirectAgentAttache.java b/server/src/com/cloud/agent/manager/DirectAgentAttache.java index 848c7e6c624..9b7d69f1aba 100755 --- a/server/src/com/cloud/agent/manager/DirectAgentAttache.java +++ b/server/src/com/cloud/agent/manager/DirectAgentAttache.java @@ -18,14 +18,11 @@ package com.cloud.agent.manager; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import org.apache.log4j.Logger; -import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; import com.cloud.agent.api.CronCommand; @@ -37,13 +34,11 @@ import com.cloud.exception.AgentUnavailableException; import com.cloud.host.Status; import com.cloud.host.Status.Event; import com.cloud.resource.ServerResource; -import com.cloud.utils.concurrency.NamedThreadFactory; public class DirectAgentAttache extends AgentAttache { private final static Logger s_logger = Logger.getLogger(DirectAgentAttache.class); ServerResource _resource; - static ScheduledExecutorService s_executor = new ScheduledThreadPoolExecutor(500, new NamedThreadFactory("DirectAgent")); List> _futures = new ArrayList>(); AgentManagerImpl _mgr; long _seq = 0; @@ -94,15 +89,15 @@ public class DirectAgentAttache extends AgentAttache { if (answers != null && answers[0] instanceof StartupAnswer) { StartupAnswer startup = (StartupAnswer)answers[0]; int interval = startup.getPingInterval(); - _futures.add(s_executor.scheduleAtFixedRate(new PingTask(), interval, interval, TimeUnit.SECONDS)); + _futures.add(_agentMgr.getDirectAgentPool().scheduleAtFixedRate(new PingTask(), interval, interval, TimeUnit.SECONDS)); } } else { Command[] cmds = req.getCommands(); if (cmds.length > 0 && !(cmds[0] instanceof CronCommand)) { - s_executor.execute(new Task(req)); + _agentMgr.getDirectAgentPool().execute(new Task(req)); } else { CronCommand cmd = (CronCommand)cmds[0]; - _futures.add(s_executor.scheduleAtFixedRate(new Task(req), cmd.getInterval(), cmd.getInterval(), TimeUnit.SECONDS)); + _futures.add(_agentMgr.getDirectAgentPool().scheduleAtFixedRate(new Task(req), cmd.getInterval(), cmd.getInterval(), TimeUnit.SECONDS)); } } } @@ -113,7 +108,7 @@ public class DirectAgentAttache extends AgentAttache { StartupAnswer startup = (StartupAnswer)answers[0]; int interval = startup.getPingInterval(); s_logger.info("StartupAnswer received " + startup.getHostId() + " Interval = " + interval ); - _futures.add(s_executor.scheduleAtFixedRate(new PingTask(), interval, interval, TimeUnit.SECONDS)); + _futures.add(_agentMgr.getDirectAgentPool().scheduleAtFixedRate(new PingTask(), interval, interval, TimeUnit.SECONDS)); } } diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java index b91fbdd69bf..ce3698f7854 100755 --- a/server/src/com/cloud/configuration/Config.java +++ b/server/src/com/cloud/configuration/Config.java @@ -296,8 +296,8 @@ public enum Config { VmOpCleanupWait("Advanced", ManagementServer.class, Long.class, "vm.op.cleanup.wait", "3600", "Time (in seconds) to wait before cleanuping up any vm work items", "Seconds"), VmOpCancelInterval("Advanced", ManagementServer.class, Long.class, "vm.op.cancel.interval", "3600", "Time (in seconds) to wait before cancelling a operation", "Seconds"), - DefaultPageSize("Advanced", ManagementServer.class, Long.class, "default.page.size", "500", "Default page size for API list* commands", null), + DirectAgentPoolSize("Advanced", ManagementServer.class, Integer.class, "direct.agent.pool.size", "500", "Default size for DirectAgentPool", null), TaskCleanupRetryInterval("Advanced", ManagementServer.class, Integer.class, "task.cleanup.retry.interval", "600", "Time (in seconds) to wait before retrying cleanup of tasks if the cleanup failed previously. 0 means to never retry.", "Seconds"), diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql index c115135d006..a9d168d6eed 100644 --- a/setup/db/db/schema-40to410.sql +++ b/setup/db/db/schema-40to410.sql @@ -944,3 +944,5 @@ left join host_pod_ref on storage_pool.pod_id = host_pod_ref.id left join storage_pool_details on storage_pool_details.pool_id = storage_pool.id and storage_pool_details.value = 'true' left join op_host_capacity on storage_pool.id = op_host_capacity.host_id and op_host_capacity.capacity_type = 3 left join async_job on async_job.instance_id = storage_pool.id and async_job.instance_type = "StoragePool" and async_job.job_status = 0; + +INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'management-server', 'direct.agent.pool.size', '500', 'Default size for DirectAgentPool'); From b120e19280b994df940fd4fe6711a761eb174cad Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 17 Jan 2013 17:59:25 -0800 Subject: [PATCH 84/90] ApiDispatcher: In case of incorrect long int value or uuid, throw error Signed-off-by: Rohit Yadav --- server/src/com/cloud/api/ApiDispatcher.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/server/src/com/cloud/api/ApiDispatcher.java b/server/src/com/cloud/api/ApiDispatcher.java index 04b46e5a579..129ef7d4a2e 100755 --- a/server/src/com/cloud/api/ApiDispatcher.java +++ b/server/src/com/cloud/api/ApiDispatcher.java @@ -349,7 +349,6 @@ public class ApiDispatcher { try { internalId = Long.parseLong(uuid); } catch(NumberFormatException e) { - // In case regex failed, and it's still uuid string internalId = null; } if (internalId != null) @@ -381,10 +380,8 @@ public class ApiDispatcher { if (s_logger.isDebugEnabled()) { s_logger.debug("Object entity with uuid=" + uuid + " does not exist in the database."); } - if (annotation.required()) { - throw new InvalidParameterValueException("Invalid parameter with uuid=" + uuid - + ". Entity not found, or an annotation bug."); - } + throw new InvalidParameterValueException("Invalid parameter value=" + uuid + + " due to incorrect long value, entity not found, or an annotation bug."); } return internalId; } From a0bc5089d05e71ecc4c76beb3c9c700be20b815c Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 17 Jan 2013 18:40:59 -0800 Subject: [PATCH 85/90] maven: disable awsapi by default, enable by -P awsapi profile Signed-off-by: Rohit Yadav --- pom.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c440a660322..e09472f9869 100644 --- a/pom.xml +++ b/pom.xml @@ -160,7 +160,6 @@ utils deps/XenServerJava plugins - awsapi patches client test @@ -364,6 +363,12 @@ + + awsapi + + awsapi + + developer From 55e8965bd0386099a101362e0dc87f3dc2a0aa9d Mon Sep 17 00:00:00 2001 From: Marcus Sorensen Date: Fri, 18 Jan 2013 00:20:34 -0700 Subject: [PATCH 86/90] Summary: Pass StoragePoolType that maps to libvirt in cleanupDisk Description: When selecting a storage adaptor, cleanupDisk assumes that libvirt is being used. Therefore, we pass a StoragePoolType that maps to libvirt. This is the only place in LibvirtComputingResource where the StoragePoolType can't be pulled from somewhere else. BUG-ID: CLOUDSTACK-1011 Signed-off-by: Marcus Sorensen --- .../hypervisor/kvm/resource/LibvirtComputingResource.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index b65b53114bf..eac60f4df41 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -3225,8 +3225,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements } try { - //we use libvirt since we passed a libvirt connection to cleanupDisk - KVMStoragePool pool = _storagePoolMgr.getStoragePool(null, poolUuid); + // we use libvirt as storage adaptor since we passed a libvirt + // connection to cleanupDisk. We pass a storage type that maps + // to libvirt adaptor. + KVMStoragePool pool = _storagePoolMgr.getStoragePool( + StoragePoolType.Filesystem, poolUuid); if (pool != null) { pool.delete(); } From 51c1ca7cbe0ed5206ea5844acb71a3f6f53d1959 Mon Sep 17 00:00:00 2001 From: Kishan Kavala Date: Fri, 18 Jan 2013 16:13:25 +0530 Subject: [PATCH 87/90] CLOUDSTACK-1010: Fix count issue for listHosts command --- .../com/cloud/server/ManagementService.java | 11 +++++- .../api/command/admin/host/ListHostsCmd.java | 9 ++--- .../cloud/server/ManagementServerImpl.java | 37 +++++++++++++++---- 3 files changed, 43 insertions(+), 14 deletions(-) diff --git a/api/src/com/cloud/server/ManagementService.java b/api/src/com/cloud/server/ManagementService.java index fb8af1a5b4b..5302daa493b 100755 --- a/api/src/com/cloud/server/ManagementService.java +++ b/api/src/com/cloud/server/ManagementService.java @@ -25,6 +25,7 @@ import java.util.Set; import com.cloud.alert.Alert; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.command.admin.cluster.ListClustersCmd; +import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; import org.apache.cloudstack.api.command.admin.pod.ListPodsByCmd; import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd; @@ -140,6 +141,14 @@ public interface ManagementService { */ Pair, Integer> searchForPods(ListPodsByCmd cmd); + /** + * Searches for servers by the specified search criteria Can search by: "name", "type", "state", "dataCenterId", + * "podId" + * + * @param cmd + * @return List of Hosts + */ + Pair, Integer> searchForServers(ListHostsCmd cmd); /** * Creates a new template @@ -384,7 +393,7 @@ public interface ManagementService { * @return Pair, List> List of all Hosts in VM's cluster and list of Hosts with * enough capacity */ - Pair, List> listHostsForMigrationOfVM(Long vmId, Long startIndex, Long pageSize); + Pair, Integer>, List> listHostsForMigrationOfVM(Long vmId, Long startIndex, Long pageSize); String[] listEventTypes(); diff --git a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java index 82f329f4b7e..876da9a6bda 100644 --- a/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java +++ b/api/src/org/apache/cloudstack/api/command/admin/host/ListHostsCmd.java @@ -168,17 +168,16 @@ public class ListHostsCmd extends BaseListCmd { if (getVirtualMachineId() == null) { response = _queryService.searchForServers(this); } else { - List result = new ArrayList(); + Pair,Integer> result; List hostsWithCapacity = new ArrayList(); - Pair, List> hostsForMigration = _mgr.listHostsForMigrationOfVM(getVirtualMachineId(), - this.getStartIndex(), this.getPageSizeVal()); + Pair,Integer>, List> hostsForMigration = _mgr.listHostsForMigrationOfVM(getVirtualMachineId(), this.getStartIndex(), this.getPageSizeVal()); result = hostsForMigration.first(); hostsWithCapacity = hostsForMigration.second(); response = new ListResponse(); List hostResponses = new ArrayList(); - for (Host host : result) { + for (Host host : result.first()) { HostResponse hostResponse = _responseGenerator.createHostResponse(host, getDetails()); Boolean suitableForMigration = false; if (hostsWithCapacity.contains(host)) { @@ -189,7 +188,7 @@ public class ListHostsCmd extends BaseListCmd { hostResponses.add(hostResponse); } - response.setResponses(hostResponses); + response.setResponses(hostResponses, result.second()); } response.setResponseName(getCommandName()); this.setResponseObject(response); diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 4efae630f36..bad834dde5a 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -89,6 +89,7 @@ import org.apache.cloudstack.api.command.admin.vlan.ListVlanIpRangesCmd; import org.apache.cloudstack.api.command.admin.systemvm.RebootSystemVmCmd; import org.apache.cloudstack.api.command.admin.systemvm.StopSystemVmCmd; import org.apache.cloudstack.api.command.admin.domain.UpdateDomainCmd; +import org.apache.cloudstack.api.command.admin.host.ListHostsCmd; import org.apache.cloudstack.api.command.admin.host.UpdateHostPasswordCmd; import com.cloud.api.query.dao.DomainRouterJoinDao; import com.cloud.api.query.dao.InstanceGroupJoinDao; @@ -219,6 +220,7 @@ import com.cloud.user.UserVO; import com.cloud.user.dao.AccountDao; import com.cloud.user.dao.SSHKeyPairDao; import com.cloud.user.dao.UserDao; +import com.cloud.uservm.UserVm; import com.cloud.utils.EnumUtils; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; @@ -915,9 +917,26 @@ public class ManagementServerImpl implements ManagementServer { return new Pair, Integer>(result.first(), result.second()); } + @Override + public Pair, Integer> searchForServers(ListHostsCmd cmd) { + + Long zoneId = _accountMgr.checkAccessAndSpecifyAuthority(UserContext.current().getCaller(), cmd.getZoneId()); + Object name = cmd.getHostName(); + Object type = cmd.getType(); + Object state = cmd.getState(); + Object pod = cmd.getPodId(); + Object cluster = cmd.getClusterId(); + Object id = cmd.getId(); + Object keyword = cmd.getKeyword(); + Object resourceState = cmd.getResourceState(); + Object haHosts = cmd.getHaHost(); + + Pair, Integer> result = searchForServers(cmd.getStartIndex(), cmd.getPageSizeVal(), name, type, state, zoneId, pod, cluster, id, keyword, resourceState, haHosts); + return new Pair, Integer>(result.first(), result.second()); + } @Override - public Pair, List> listHostsForMigrationOfVM(Long vmId, Long startIndex, Long pageSize) { + public Pair, Integer>, List> listHostsForMigrationOfVM(Long vmId, Long startIndex, Long pageSize) { // access check - only root admin can migrate VM Account caller = UserContext.current().getCaller(); if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN) { @@ -976,10 +995,12 @@ public class ManagementServerImpl implements ManagementServer { s_logger.debug("Searching for all hosts in cluster: " + cluster + " for migrating VM " + vm); } - List allHostsInCluster = searchForServers(startIndex, pageSize, null, hostType, null, null, null, cluster, null, null, null, - null); - // filter out the current host + Pair, Integer> allHostsInClusterPair = searchForServers(startIndex, pageSize, null, hostType, null, null, null, cluster, null, null, null, null); + + // filter out the current host + List allHostsInCluster = allHostsInClusterPair.first(); allHostsInCluster.remove(srcHost); + Pair, Integer> otherHostsInCluster = new Pair, Integer>(allHostsInCluster, new Integer(allHostsInClusterPair.second().intValue()-1)); if (s_logger.isDebugEnabled()) { s_logger.debug("Other Hosts in this cluster: " + allHostsInCluster); @@ -1013,11 +1034,11 @@ public class ManagementServerImpl implements ManagementServer { } } - return new Pair, List>(allHostsInCluster, suitableHosts); + return new Pair, Integer>, List>(otherHostsInCluster, suitableHosts); } - private List searchForServers(Long startIndex, Long pageSize, Object name, Object type, Object state, Object zone, Object pod, - Object cluster, Object id, Object keyword, Object resourceState, Object haHosts) { + private Pair, Integer> searchForServers(Long startIndex, Long pageSize, Object name, Object type, Object state, Object zone, Object pod, Object cluster, Object id, Object keyword, + Object resourceState, Object haHosts) { Filter searchFilter = new Filter(HostVO.class, "id", Boolean.TRUE, startIndex, pageSize); SearchBuilder sb = _hostDao.createSearchBuilder(); @@ -1087,7 +1108,7 @@ public class ManagementServerImpl implements ManagementServer { sc.setJoinParameters("hostTagSearch", "tag", haTag); } - return _hostDao.search(sc, searchFilter); + return _hostDao.searchAndCount(sc, searchFilter); } @Override From 070856affd4e5b0baef7730aeb2c245775ee6872 Mon Sep 17 00:00:00 2001 From: Koushik Das Date: Thu, 17 Jan 2013 18:04:36 +0530 Subject: [PATCH 88/90] CLOUDSTACK-988: HV version must be updated in hypervisor_version column of host table HV version is stored in hypervisor_version column in host table wherever present Also correctly populating version column in host table with resource file version Signed-off-by: Koushik Das Signed-off-by: Abhinandan Prateek --- .../src/com/cloud/network/resource/TrafficSentinelResource.java | 2 +- .../com/cloud/hypervisor/vmware/resource/VmwareResource.java | 2 +- .../f5/src/com/cloud/network/resource/F5BigIpResource.java | 2 +- .../src/com/cloud/network/resource/JuniperSrxResource.java | 2 +- .../src/com/cloud/network/resource/NetscalerResource.java | 2 +- .../src/com/cloud/network/resource/NiciraNvpResource.java | 2 +- server/src/com/cloud/baremetal/ExternalDhcpResourceBase.java | 2 +- server/src/com/cloud/baremetal/PxeServerResourceBase.java | 2 +- server/src/com/cloud/resource/DummyHostServerResource.java | 2 +- server/src/com/cloud/resource/ResourceManagerImpl.java | 1 + 10 files changed, 10 insertions(+), 9 deletions(-) diff --git a/core/src/com/cloud/network/resource/TrafficSentinelResource.java b/core/src/com/cloud/network/resource/TrafficSentinelResource.java index a13e080b7e4..22deccffdd5 100644 --- a/core/src/com/cloud/network/resource/TrafficSentinelResource.java +++ b/core/src/com/cloud/network/resource/TrafficSentinelResource.java @@ -108,7 +108,7 @@ public class TrafficSentinelResource implements ServerResource { cmd.setPod(""); cmd.setPrivateIpAddress(_ip); cmd.setStorageIpAddress(""); - cmd.setVersion(""); + cmd.setVersion(TrafficSentinelResource.class.getPackage().getImplementationVersion()); cmd.setGuid(_guid); return new StartupCommand[]{cmd}; } diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index a444cfec197..dd917f75a6e 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -3984,7 +3984,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa cmd.setHypervisorType(HypervisorType.VMware); cmd.setStateChanges(changes); cmd.setCluster(_cluster); - cmd.setVersion(hostApiVersion); + cmd.setHypervisorVersion(hostApiVersion); List storageCmds = initializeLocalStorage(); StartupCommand[] answerCmds = new StartupCommand[1 + storageCmds.size()]; diff --git a/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java b/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java index c9c3711bfc1..80a7a85dc85 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java +++ b/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java @@ -196,7 +196,7 @@ public class F5BigIpResource implements ServerResource { cmd.setPod(""); cmd.setPrivateIpAddress(_ip); cmd.setStorageIpAddress(""); - cmd.setVersion(""); + cmd.setVersion(F5BigIpResource.class.getPackage().getImplementationVersion()); cmd.setGuid(_guid); return new StartupCommand[]{cmd}; } diff --git a/plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java b/plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java index f823ab8af4f..11ff2960e4b 100644 --- a/plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java +++ b/plugins/network-elements/juniper-srx/src/com/cloud/network/resource/JuniperSrxResource.java @@ -447,7 +447,7 @@ public class JuniperSrxResource implements ServerResource { cmd.setPod(""); cmd.setPrivateIpAddress(_ip); cmd.setStorageIpAddress(""); - cmd.setVersion(""); + cmd.setVersion(JuniperSrxResource.class.getPackage().getImplementationVersion()); cmd.setGuid(_guid); return new StartupCommand[]{cmd}; } diff --git a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java index afb01353e1e..ca8c8a71c7d 100644 --- a/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java +++ b/plugins/network-elements/netscaler/src/com/cloud/network/resource/NetscalerResource.java @@ -369,7 +369,7 @@ public class NetscalerResource implements ServerResource { cmd.setPod(""); cmd.setPrivateIpAddress(_ip); cmd.setStorageIpAddress(""); - cmd.setVersion(""); + cmd.setVersion(NetscalerResource.class.getPackage().getImplementationVersion()); cmd.setGuid(_guid); return new StartupCommand[]{cmd}; } diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java index 12ed72a1fd5..027f451b154 100644 --- a/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java +++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/resource/NiciraNvpResource.java @@ -166,7 +166,7 @@ public class NiciraNvpResource implements ServerResource { sc.setPod(""); sc.setPrivateIpAddress(""); sc.setStorageIpAddress(""); - sc.setVersion(""); + sc.setVersion(NiciraNvpResource.class.getPackage().getImplementationVersion()); return new StartupCommand[] { sc }; } diff --git a/server/src/com/cloud/baremetal/ExternalDhcpResourceBase.java b/server/src/com/cloud/baremetal/ExternalDhcpResourceBase.java index cbfcfd15f9a..69846ac4ec4 100644 --- a/server/src/com/cloud/baremetal/ExternalDhcpResourceBase.java +++ b/server/src/com/cloud/baremetal/ExternalDhcpResourceBase.java @@ -127,7 +127,7 @@ public class ExternalDhcpResourceBase implements ServerResource { cmd.setPod(_podId); cmd.setPrivateIpAddress(_ip); cmd.setStorageIpAddress(""); - cmd.setVersion(""); + cmd.setVersion(ExternalDhcpResourceBase.class.getPackage().getImplementationVersion()); cmd.setGuid(_guid); return new StartupCommand[]{cmd}; } diff --git a/server/src/com/cloud/baremetal/PxeServerResourceBase.java b/server/src/com/cloud/baremetal/PxeServerResourceBase.java index c307ccfc111..46982b1942a 100644 --- a/server/src/com/cloud/baremetal/PxeServerResourceBase.java +++ b/server/src/com/cloud/baremetal/PxeServerResourceBase.java @@ -114,7 +114,7 @@ public class PxeServerResourceBase implements ServerResource { cmd.setPod(_podId); cmd.setPrivateIpAddress(_ip); cmd.setStorageIpAddress(""); - cmd.setVersion(""); + cmd.setVersion(PxeServerResourceBase.class.getPackage().getImplementationVersion()); cmd.setGuid(_guid); return new StartupCommand[]{cmd}; } diff --git a/server/src/com/cloud/resource/DummyHostServerResource.java b/server/src/com/cloud/resource/DummyHostServerResource.java index 5144a91a3ec..d300f6b71ea 100644 --- a/server/src/com/cloud/resource/DummyHostServerResource.java +++ b/server/src/com/cloud/resource/DummyHostServerResource.java @@ -91,7 +91,7 @@ public class DummyHostServerResource extends ServerResourceBase { cmd.setPublicIpAddress(getHostStoragePrivateIp()); cmd.setPublicMacAddress(getHostStorageMacAddress().toString()); cmd.setPublicNetmask("255.255.0.0"); - cmd.setVersion("1.0"); + cmd.setVersion(DummyHostServerResource.class.getPackage().getImplementationVersion()); return new StartupCommand[] {cmd}; } diff --git a/server/src/com/cloud/resource/ResourceManagerImpl.java b/server/src/com/cloud/resource/ResourceManagerImpl.java index ffc09f0effe..b6ee747bee9 100755 --- a/server/src/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/com/cloud/resource/ResourceManagerImpl.java @@ -1772,6 +1772,7 @@ public class ResourceManagerImpl implements ResourceManager, ResourceService, Ma host.setTotalMemory(ssCmd.getMemory()); host.setSpeed(ssCmd.getSpeed()); host.setHypervisorType(hyType); + host.setHypervisorVersion(ssCmd.getHypervisorVersion()); return host; } From e45a9f3aed3f3ad2295848f2475a4a1ec478ee81 Mon Sep 17 00:00:00 2001 From: Koushik Das Date: Mon, 7 Jan 2013 11:06:54 +0530 Subject: [PATCH 89/90] CLOUDSTACK-803: HA gets triggered even when the host investigator is unable to determine the state of the host HA won't be triggered in case the host investigator is not able to determine the state Signed-off-by: Koushik Das Signed-off-by: Abhinandan Prateek --- server/src/com/cloud/agent/manager/AgentManagerImpl.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/server/src/com/cloud/agent/manager/AgentManagerImpl.java b/server/src/com/cloud/agent/manager/AgentManagerImpl.java index 8b3ee6b2d63..fd5b3bdcb69 100755 --- a/server/src/com/cloud/agent/manager/AgentManagerImpl.java +++ b/server/src/com/cloud/agent/manager/AgentManagerImpl.java @@ -918,10 +918,16 @@ public class AgentManagerImpl implements AgentManager, HandlerFactory, Manager { s_logger.info("Investigating why host " + hostId + " has disconnected with event " + event); final Status determinedState = investigate(attache); + // if state cannot be determined do nothing and bail out + if (determinedState == null) { + s_logger.warn("Agent state cannot be determined, do nothing"); + return false; + } + final Status currentStatus = host.getStatus(); s_logger.info("The state determined is " + determinedState); - if (determinedState == null || determinedState == Status.Down) { + if (determinedState == Status.Down) { s_logger.error("Host is down: " + host.getId() + "-" + host.getName() + ". Starting HA on the VMs"); event = Status.Event.HostDown; } else if (determinedState == Status.Up) { From ce4b49d30bde910c1ee9dfad077228b0491b32e9 Mon Sep 17 00:00:00 2001 From: Chiradeep Vittal Date: Fri, 18 Jan 2013 09:37:34 -0800 Subject: [PATCH 90/90] network-refactor merge: fix nonoss build Signed-off-by: Chiradeep Vittal --- api/src/com/cloud/network/NetworkModel.java | 2 ++ server/src/com/cloud/network/NetworkModelImpl.java | 6 ++++++ server/test/com/cloud/network/MockNetworkModelImpl.java | 9 +++++++++ 3 files changed, 17 insertions(+) diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java index ed76c6650ba..9baa0ec435c 100644 --- a/api/src/com/cloud/network/NetworkModel.java +++ b/api/src/com/cloud/network/NetworkModel.java @@ -246,5 +246,7 @@ public interface NetworkModel { String getDomainNetworkDomain(long domainId, long zoneId); PublicIpAddress getSourceNatIpAddressForGuestNetwork(Account owner, Network guestNetwork); + + boolean isNetworkInlineMode(Network network); } \ No newline at end of file diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java index 2470989d97d..a99e9c50cbe 100644 --- a/server/src/com/cloud/network/NetworkModelImpl.java +++ b/server/src/com/cloud/network/NetworkModelImpl.java @@ -1830,4 +1830,10 @@ public class NetworkModelImpl implements NetworkModel, Manager{ return null; } + + public boolean isNetworkInlineMode(Network network) { + NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId()); + return offering.isInline(); + } + } \ No newline at end of file diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java index fae5ad38ffc..1771660f86c 100644 --- a/server/test/com/cloud/network/MockNetworkModelImpl.java +++ b/server/test/com/cloud/network/MockNetworkModelImpl.java @@ -797,4 +797,13 @@ public class MockNetworkModelImpl implements NetworkModel, Manager { return null; } + /* (non-Javadoc) + * @see com.cloud.network.NetworkModel#isNetworkInlineMode(com.cloud.network.Network) + */ + @Override + public boolean isNetworkInlineMode(Network network) { + // TODO Auto-generated method stub + return false; + } + }