Skip to content

Commit c2ffc5b

Browse files
Fix restart VPC with cleanup
1 parent fb776f7 commit c2ffc5b

4 files changed

Lines changed: 48 additions & 2 deletions

File tree

engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ public interface FirewallRulesDao extends GenericDao<FirewallRuleVO, Long> {
6969

7070
List<FirewallRuleVO> listByNetworkPurposeTrafficType(long networkId, FirewallRule.Purpose purpose, FirewallRule.TrafficType trafficType);
7171

72+
List<FirewallRuleVO> listByVpcPurposeTrafficType(long vpcId, FirewallRule.Purpose purpose, FirewallRule.TrafficType trafficType);
73+
7274
List<FirewallRuleVO> listByIpAndPurposeWithState(Long addressId, FirewallRule.Purpose purpose, FirewallRule.State state);
7375

7476
void loadSourceCidrs(FirewallRuleVO rule);

engine/schema/src/main/java/com/cloud/network/dao/FirewallRulesDaoImpl.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ protected FirewallRulesDaoImpl() {
7474
AllFieldsSearch.and("domain", AllFieldsSearch.entity().getDomainId(), Op.EQ);
7575
AllFieldsSearch.and("id", AllFieldsSearch.entity().getId(), Op.EQ);
7676
AllFieldsSearch.and("networkId", AllFieldsSearch.entity().getNetworkId(), Op.EQ);
77+
AllFieldsSearch.and("vpcId", AllFieldsSearch.entity().getVpcId(), Op.EQ);
7778
AllFieldsSearch.and("related", AllFieldsSearch.entity().getRelated(), Op.EQ);
7879
AllFieldsSearch.and("trafficType", AllFieldsSearch.entity().getTrafficType(), Op.EQ);
7980
AllFieldsSearch.done();
@@ -355,6 +356,22 @@ public List<FirewallRuleVO> listByNetworkPurposeTrafficType(long networkId, Purp
355356
return listBy(sc);
356357
}
357358

359+
@Override
360+
public List<FirewallRuleVO> listByVpcPurposeTrafficType(long vpcId, Purpose purpose, TrafficType trafficType) {
361+
SearchCriteria<FirewallRuleVO> sc = AllFieldsSearch.create();
362+
sc.setParameters("vpcId", vpcId);
363+
364+
if (purpose != null) {
365+
sc.setParameters("purpose", purpose);
366+
}
367+
368+
if (trafficType != null) {
369+
sc.setParameters("trafficType", trafficType);
370+
}
371+
372+
return listBy(sc);
373+
}
374+
358375
@Override
359376
@DB
360377
public boolean remove(Long id) {

server/src/main/java/com/cloud/network/router/CommandSetupHelper.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ public void createApplyIpv6FirewallRulesCommands(final List<? extends FirewallRu
547547
cmds.addCommand(cmd);
548548
}
549549

550-
public void createFirewallRulesCommands(final List<? extends FirewallRule> rules, final VirtualRouter router, final Commands cmds, final long guestNetworkId) {
550+
public void createFirewallRulesCommands(final List<? extends FirewallRule> rules, final VirtualRouter router, final Commands cmds, final Long guestNetworkId) {
551551
final List<FirewallRuleTO> rulesTO = new ArrayList<>();
552552
String systemRule = null;
553553
Boolean defaultEgressPolicy = false;
@@ -581,7 +581,9 @@ public void createFirewallRulesCommands(final List<? extends FirewallRule> rules
581581

582582
final SetFirewallRulesCommand cmd = new SetFirewallRulesCommand(rulesTO);
583583
cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, _routerControlHelper.getRouterControlIp(router.getId()));
584-
cmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, _routerControlHelper.getRouterIpInNetwork(guestNetworkId, router.getId()));
584+
if (guestNetworkId != null) {
585+
cmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, _routerControlHelper.getRouterIpInNetwork(guestNetworkId, router.getId()));
586+
}
585587
cmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName());
586588
final DataCenterVO dcVo = _dcDao.findById(router.getDataCenterId());
587589
cmd.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString());

server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
import com.cloud.network.dao.LoadBalancerVO;
7373
import com.cloud.network.dao.MonitoringServiceVO;
7474
import com.cloud.network.dao.NetworkVO;
75+
import com.cloud.network.rules.FirewallRule;
7576
import com.cloud.network.dao.RemoteAccessVpnVO;
7677
import com.cloud.network.dao.Site2SiteVpnConnectionVO;
7778
import com.cloud.network.lb.LoadBalancingRule;
@@ -567,6 +568,10 @@ public boolean finalizeCommandsOnStart(final Commands cmds, final VirtualMachine
567568
finalizeMonitorService(cmds, profile, domainRouterVO, provider, publicNics.get(0).second().getId(), true, routerHealthCheckConfig);
568569
}
569570

571+
if (reprogramGuestNtwks) {
572+
reapplyVpcFirewallIngressRules(cmds, domainRouterVO, provider);
573+
}
574+
570575
for (final Pair<Nic, Network> nicNtwk : guestNics) {
571576
final Nic guestNic = nicNtwk.first();
572577
final long guestNetworkId = guestNic.getNetworkId();
@@ -638,6 +643,26 @@ protected void finalizeNetworkRulesForNetwork(final Commands cmds, final DomainR
638643
}
639644
}
640645

646+
private void reapplyVpcFirewallIngressRules(final Commands cmds, final DomainRouterVO domainRouterVO, final Provider provider) {
647+
final Long vpcId = domainRouterVO.getVpcId();
648+
if (vpcId == null) {
649+
return;
650+
}
651+
652+
if (!_vpcMgr.isProviderSupportServiceInVpc(vpcId, Service.Firewall, provider)) {
653+
return;
654+
}
655+
656+
final List<FirewallRule> firewallRulesIngress = new ArrayList<>(
657+
_rulesDao.listByVpcPurposeTrafficType(vpcId, FirewallRule.Purpose.Firewall, FirewallRule.TrafficType.Ingress));
658+
if (firewallRulesIngress.isEmpty()) {
659+
return;
660+
}
661+
662+
logger.debug("Found {} VPC firewall ingress rule(s) to apply as a part of domR {} start for VPC {}", firewallRulesIngress.size(), domainRouterVO, vpcId);
663+
_commandSetupHelper.createFirewallRulesCommands(firewallRulesIngress, domainRouterVO, cmds, null);
664+
}
665+
641666
protected boolean sendNetworkRulesToRouter(final long routerId, final long networkId, final boolean reprogramNetwork) throws ResourceUnavailableException {
642667
final DomainRouterVO router = _routerDao.findById(routerId);
643668
final Commands cmds = new Commands(OnError.Continue);

0 commit comments

Comments
 (0)