|
33 | 33 | import com.cloud.network.Network.Service; |
34 | 34 | import com.cloud.network.NetworkModel; |
35 | 35 | import com.cloud.network.dao.NetworkDao; |
| 36 | +import com.cloud.network.dao.NetworkServiceMapDao; |
36 | 37 | import com.cloud.network.dao.NetworkVO; |
37 | 38 | import com.cloud.network.element.NetworkACLServiceProvider; |
| 39 | +import com.cloud.network.element.NetworkElement; |
38 | 40 | import com.cloud.network.element.VpcProvider; |
39 | 41 | import com.cloud.network.vpc.NetworkACLItem.State; |
40 | 42 | import com.cloud.network.vpc.dao.NetworkACLDao; |
@@ -75,6 +77,8 @@ public class NetworkACLManagerImpl extends ManagerBase implements NetworkACLMana |
75 | 77 | private MessageBus _messageBus; |
76 | 78 | @Inject |
77 | 79 | private ResourceTagDao resourceTagDao; |
| 80 | + @Inject |
| 81 | + NetworkServiceMapDao networkServiceMapDao; |
78 | 82 |
|
79 | 83 | private List<NetworkACLServiceProvider> _networkAclElements; |
80 | 84 |
|
@@ -441,12 +445,23 @@ public boolean applyACLItemsToNetwork(final long networkId, final List<NetworkAC |
441 | 445 | logger.debug("Applying NetworkACL for network: {} with Network ACL service provider", network); |
442 | 446 | handled = element.applyNetworkACLs(network, rules); |
443 | 447 | if (handled) { |
444 | | - // publish message on message bus, so that network elements implementing distributed routing |
445 | | - // capability can act on the event |
446 | | - _messageBus.publish(_name, "Network_ACL_Replaced", PublishScope.LOCAL, network); |
447 | 448 | break; |
448 | 449 | } |
449 | 450 | } |
| 451 | + if (!foundProvider) { |
| 452 | + // Get provider name and get the element by provider name (it could be an external provider) |
| 453 | + String aclProviderName = networkServiceMapDao.getProviderForServiceInNetwork(network.getId(), Service.NetworkACL); |
| 454 | + if (aclProviderName != null) { |
| 455 | + foundProvider = true; |
| 456 | + NetworkElement element = _networkModel.getElementImplementingProvider(aclProviderName); |
| 457 | + handled = ((NetworkACLServiceProvider) element).applyNetworkACLs(network, rules); |
| 458 | + } |
| 459 | + } |
| 460 | + if (handled) { |
| 461 | + // publish message on message bus, so that network elements implementing distributed routing |
| 462 | + // capability can act on the event |
| 463 | + _messageBus.publish(_name, "Network_ACL_Replaced", PublishScope.LOCAL, network); |
| 464 | + } |
450 | 465 | if (!foundProvider) { |
451 | 466 | logger.debug("Unable to find NetworkACL service provider for network: {}", network); |
452 | 467 | } |
|
0 commit comments