Skip to content

Commit 44b6b94

Browse files
committed
extension: fix unable to find NetworkACL service provider
1 parent 187ba5b commit 44b6b94

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

server/src/main/java/com/cloud/network/vpc/NetworkACLManagerImpl.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,10 @@
3333
import com.cloud.network.Network.Service;
3434
import com.cloud.network.NetworkModel;
3535
import com.cloud.network.dao.NetworkDao;
36+
import com.cloud.network.dao.NetworkServiceMapDao;
3637
import com.cloud.network.dao.NetworkVO;
3738
import com.cloud.network.element.NetworkACLServiceProvider;
39+
import com.cloud.network.element.NetworkElement;
3840
import com.cloud.network.element.VpcProvider;
3941
import com.cloud.network.vpc.NetworkACLItem.State;
4042
import com.cloud.network.vpc.dao.NetworkACLDao;
@@ -75,6 +77,8 @@ public class NetworkACLManagerImpl extends ManagerBase implements NetworkACLMana
7577
private MessageBus _messageBus;
7678
@Inject
7779
private ResourceTagDao resourceTagDao;
80+
@Inject
81+
NetworkServiceMapDao networkServiceMapDao;
7882

7983
private List<NetworkACLServiceProvider> _networkAclElements;
8084

@@ -441,12 +445,23 @@ public boolean applyACLItemsToNetwork(final long networkId, final List<NetworkAC
441445
logger.debug("Applying NetworkACL for network: {} with Network ACL service provider", network);
442446
handled = element.applyNetworkACLs(network, rules);
443447
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);
447448
break;
448449
}
449450
}
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+
}
450465
if (!foundProvider) {
451466
logger.debug("Unable to find NetworkACL service provider for network: {}", network);
452467
}

server/src/test/java/com/cloud/network/vpc/NetworkACLManagerTest.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@
6868
import static org.mockito.ArgumentMatchers.anyLong;
6969
import static org.mockito.ArgumentMatchers.eq;
7070
import static org.mockito.ArgumentMatchers.nullable;
71-
import static org.mockito.Mockito.mock;
7271
import static org.mockito.Mockito.when;
7372

7473
@RunWith(SpringJUnit4ClassRunner.class)
@@ -92,6 +91,8 @@ public class NetworkACLManagerTest extends TestCase {
9291
@Inject
9392
NetworkModel _networkModel;
9493
@Inject
94+
NetworkServiceMapDao networkServiceMapDao;
95+
@Inject
9596
List<NetworkACLServiceProvider> _networkAclElements;
9697
@Inject
9798
VpcService _vpcSvc;
@@ -169,8 +170,7 @@ public void driveTestApplyNetworkACL(final boolean result, final boolean applyNe
169170
final List<NetworkVO> networks = new ArrayList<>();
170171
networks.add(network);
171172

172-
NetworkServiceMapDao ntwkSrvcDao = mock(NetworkServiceMapDao.class);
173-
when(ntwkSrvcDao.canProviderSupportServiceInNetwork(anyLong(), eq(Network.Service.NetworkACL), nullable(Network.Provider.class))).thenReturn(true);
173+
when(networkServiceMapDao.canProviderSupportServiceInNetwork(anyLong(), eq(Network.Service.NetworkACL), nullable(Network.Provider.class))).thenReturn(true);
174174
Mockito.when(_networkDao.listByAclId(anyLong())).thenReturn(networks);
175175
Mockito.when(_networkDao.findById(anyLong())).thenReturn(network);
176176
Mockito.when(networkOfferingDao.isIpv6Supported(anyLong())).thenReturn(false);
@@ -277,6 +277,11 @@ public NetworkModel networkModel() {
277277
return Mockito.mock(NetworkModel.class);
278278
}
279279

280+
@Bean
281+
public NetworkServiceMapDao networkServiceMapDao() {
282+
return Mockito.mock(NetworkServiceMapDao.class);
283+
}
284+
280285
@Bean
281286
public VpcManager vpcManager() {
282287
return Mockito.mock(VpcManager.class);

0 commit comments

Comments
 (0)