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 <chirad...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/b0a1a47d Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/b0a1a47d Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/b0a1a47d Branch: refs/heads/master Commit: b0a1a47d48570b1026bbb24ced6e10f23fd2463d Parents: 42f3804 Author: Chiradeep Vittal <chirad...@apache.org> Authored: Thu Jan 3 15:05:12 2013 -0800 Committer: Chiradeep Vittal <chirad...@apache.org> Committed: Fri Jan 4 12:14:49 2013 -0800 ---------------------------------------------------------------------- api/src/com/cloud/network/element/IpDeployer.java | 3 +- client/tomcatconf/components.xml.in | 35 +++++++++++++++ .../element/JuniperSRXExternalFirewallElement.java | 2 +- .../src/com/cloud/network/NetworkManagerImpl.java | 2 + .../network/element/VirtualRouterElement.java | 5 ++- .../network/firewall/FirewallManagerImpl.java | 6 +++ 6 files changed, 50 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0a1a47d/api/src/com/cloud/network/element/IpDeployer.java ---------------------------------------------------------------------- diff --git a/api/src/com/cloud/network/element/IpDeployer.java b/api/src/com/cloud/network/element/IpDeployer.java index 3eebe82..8036d4b 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 http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0a1a47d/client/tomcatconf/components.xml.in ---------------------------------------------------------------------- diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in index 5957b61..49c075b 100755 --- a/client/tomcatconf/components.xml.in +++ b/client/tomcatconf/components.xml.in @@ -159,6 +159,41 @@ under the License. <adapter name="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement"/> <adapter name="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement"/> </adapters> + <adapters key="com.cloud.network.element.FirewallServiceProvider"> + <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/> + <adapter name="VirtualRouter" class="com.cloud.network.element.JuniperSRXExternalFirewallElement"/> + </adapters> + <adapters key="com.cloud.network.element.FirewallServiceProvider"> + <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/> + <adapter name="JuniperSRXExternalFirewallElement" class="com.cloud.network.element.JuniperSRXExternalFirewallElement"/> + </adapters> + <adapters key="com.cloud.network.element.DhcpServiceProvider"> + <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/> + <adapter name="ExternalDhcpElement" class="com.cloud.network.element.ExternalDhcpElement"/> + </adapters> + <adapters key="com.cloud.network.element.UserDataServiceProvider"> + <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/> + </adapters> + <adapters key="com.cloud.network.element.SourceNatServiceProvider"> + <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/> + <adapter name="JuniperSRXExternalFirewallElement" class="com.cloud.network.element.JuniperSRXExternalFirewallElement"/> + <adapter name="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement"/> + </adapters> + <adapters key="com.cloud.network.element.StaticNatServiceProvider"> + <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/> + </adapters> + <adapters key="com.cloud.network.element.PortForwardingServiceProvider"> + <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/> + </adapters> + <adapters key="com.cloud.network.element.LoadBalancingServiceProvider"> + <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/> + </adapters> + <adapters key="com.cloud.network.element.RemoteAccessVPNServiceProvider"> + <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/> + </adapters> + <adapters key="com.cloud.network.element.IpDeployer"> + <adapter name="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement"/> + </adapters> <adapters key="com.cloud.cluster.agentlb.AgentLoadBalancerPlanner"> <adapter name="ClusterBasedAgentLbPlanner" class="com.cloud.cluster.agentlb.ClusterBasedAgentLoadBalancerPlanner"/> </adapters> http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0a1a47d/plugins/network-elements/juniper-srx/src/com/cloud/network/element/JuniperSRXExternalFirewallElement.java ---------------------------------------------------------------------- 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 95bc031..fc47f3d 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 { http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0a1a47d/server/src/com/cloud/network/NetworkManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index 3f8b085..ef331e5 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<NetworkGuru> _networkGurus; @Inject(adapter = NetworkElement.class) Adapters<NetworkElement> _networkElements; + @Inject(adapter = IpDeployer.class) + Adapters<IpDeployer> _ipDeployers; @Inject NetworkDomainDao _networkDomainDao; @Inject http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0a1a47d/server/src/com/cloud/network/element/VirtualRouterElement.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java b/server/src/com/cloud/network/element/VirtualRouterElement.java index 4ff1082..abd9a50 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 { http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/b0a1a47d/server/src/com/cloud/network/firewall/FirewallManagerImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/firewall/FirewallManagerImpl.java b/server/src/com/cloud/network/firewall/FirewallManagerImpl.java index 6e3805b..54611e1 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<FirewallServiceProvider> _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; }