This is an automated email from the ASF dual-hosted git repository.
joao pushed a commit to branch 4.18
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.18 by this push:
new a5508acc54d server: fix haproxy misconfiguration after VPC VR start
(#8881)
a5508acc54d is described below
commit a5508acc54d1638ba469f4d7ce9898b81b5209d0
Author: Wei Zhou <[email protected]>
AuthorDate: Fri Apr 5 20:01:08 2024 +0200
server: fix haproxy misconfiguration after VPC VR start (#8881)
---
.../router/VirtualNetworkApplianceManagerImpl.java | 49 +++++++++++++---------
.../VpcVirtualNetworkApplianceManagerImpl.java | 26 ++++++++++++
2 files changed, 56 insertions(+), 19 deletions(-)
diff --git
a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index d208021e833..3093c56f03b 100644
---
a/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++
b/server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -2578,25 +2578,7 @@ Configurable, StateListener<VirtualMachine.State,
VirtualMachine.Event, VirtualM
}
}
- final List<LoadBalancerVO> lbs =
_loadBalancerDao.listByNetworkIdAndScheme(guestNetworkId, Scheme.Public);
- final List<LoadBalancingRule> lbRules = new
ArrayList<LoadBalancingRule>();
- if
(_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Lb,
provider)) {
- // Re-apply load balancing rules
- for (final LoadBalancerVO lb : lbs) {
- final List<LbDestination> dstList =
_lbMgr.getExistingDestinations(lb.getId());
- final List<LbStickinessPolicy> policyList =
_lbMgr.getStickinessPolicies(lb.getId());
- final List<LbHealthCheckPolicy> hcPolicyList =
_lbMgr.getHealthCheckPolicies(lb.getId());
- final Ip sourceIp =
_networkModel.getPublicIpAddress(lb.getSourceIpAddressId()).getAddress();
- final LbSslCert sslCert = _lbMgr.getLbSslCert(lb.getId());
- final LoadBalancingRule loadBalancing = new
LoadBalancingRule(lb, dstList, policyList, hcPolicyList, sourceIp, sslCert,
lb.getLbProtocol());
- lbRules.add(loadBalancing);
- }
- }
-
- s_logger.debug("Found " + lbRules.size() + " load balancing
rule(s) to apply as a part of domR " + router + " start.");
- if (!lbRules.isEmpty()) {
-
_commandSetupHelper.createApplyLoadBalancingRulesCommands(lbRules, router,
cmds, guestNetworkId);
- }
+ createApplyLoadBalancingRulesCommands(cmds, router, provider,
guestNetworkId);
}
// Reapply dhcp and dns configuration.
final Network guestNetwork = _networkDao.findById(guestNetworkId);
@@ -2623,6 +2605,35 @@ Configurable, StateListener<VirtualMachine.State,
VirtualMachine.Event, VirtualM
}
}
+ private void createApplyLoadBalancingRulesCommands(final Commands cmds,
final DomainRouterVO router, final Provider provider, final Long
guestNetworkId) {
+ if (router.getVpcId() != null) {
+ return;
+ }
+ final List<LoadBalancerVO> lbs =
_loadBalancerDao.listByNetworkIdAndScheme(guestNetworkId, Scheme.Public);
+ final List<LoadBalancingRule> lbRules = new
ArrayList<LoadBalancingRule>();
+ if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId,
Service.Lb, provider)) {
+ // Re-apply load balancing rules
+ createLoadBalancingRulesList(lbRules, lbs);
+ }
+
+ s_logger.debug("Found " + lbRules.size() + " load balancing rule(s) to
apply as a part of domR " + router + " start.");
+ if (!lbRules.isEmpty()) {
+ _commandSetupHelper.createApplyLoadBalancingRulesCommands(lbRules,
router, cmds, guestNetworkId);
+ }
+ }
+
+ protected void createLoadBalancingRulesList(List<LoadBalancingRule>
lbRules, final List<LoadBalancerVO> lbs) {
+ for (final LoadBalancerVO lb : lbs) {
+ final List<LbDestination> dstList =
_lbMgr.getExistingDestinations(lb.getId());
+ final List<LbStickinessPolicy> policyList =
_lbMgr.getStickinessPolicies(lb.getId());
+ final List<LbHealthCheckPolicy> hcPolicyList =
_lbMgr.getHealthCheckPolicies(lb.getId());
+ final Ip sourceIp =
_networkModel.getPublicIpAddress(lb.getSourceIpAddressId()).getAddress();
+ final LbSslCert sslCert = _lbMgr.getLbSslCert(lb.getId());
+ final LoadBalancingRule loadBalancing = new LoadBalancingRule(lb,
dstList, policyList, hcPolicyList, sourceIp, sslCert, lb.getLbProtocol());
+ lbRules.add(loadBalancing);
+ }
+ }
+
private void createDefaultEgressFirewallRule(final List<FirewallRule>
rules, final long networkId) {
final NetworkVO network = _networkDao.findById(networkId);
final NetworkOfferingVO offering =
_networkOfferingDao.findById(network.getNetworkOfferingId());
diff --git
a/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
index 74b0dddfd45..1c1dc568b2c 100644
---
a/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
+++
b/server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
@@ -64,10 +64,14 @@ import com.cloud.network.Site2SiteVpnConnection;
import com.cloud.network.VirtualRouterProvider;
import com.cloud.network.addr.PublicIp;
import com.cloud.network.dao.IPAddressVO;
+import com.cloud.network.dao.LoadBalancerDao;
+import com.cloud.network.dao.LoadBalancerVO;
import com.cloud.network.dao.MonitoringServiceVO;
import com.cloud.network.dao.NetworkVO;
import com.cloud.network.dao.RemoteAccessVpnVO;
import com.cloud.network.dao.Site2SiteVpnConnectionVO;
+import com.cloud.network.lb.LoadBalancingRule;
+import com.cloud.network.rules.LoadBalancerContainer.Scheme;
import com.cloud.network.vpc.NetworkACLItemDao;
import com.cloud.network.vpc.NetworkACLItemVO;
import com.cloud.network.vpc.NetworkACLManager;
@@ -129,6 +133,8 @@ public class VpcVirtualNetworkApplianceManagerImpl extends
VirtualNetworkApplian
private EntityManager _entityMgr;
@Inject
protected HypervisorGuruManager _hvGuruMgr;
+ @Inject
+ private LoadBalancerDao loadBalancerDao;
@Override
public boolean configure(final String name, final Map<String, Object>
params) throws ConfigurationException {
@@ -522,12 +528,32 @@ public class VpcVirtualNetworkApplianceManagerImpl
extends VirtualNetworkApplian
cmds.addCommand(finishCmd);
}
+ createApplyLoadBalancingRulesCommandsForVpc(cmds, domainRouterVO,
provider, guestNics);
+
// Add network usage commands
cmds.addCommands(usageCmds);
}
return true;
}
+ private void createApplyLoadBalancingRulesCommandsForVpc(final Commands
cmds, DomainRouterVO domainRouterVO, Provider provider,
+ List<Pair<Nic,
Network>> guestNics) {
+ final List<LoadBalancerVO> lbs =
loadBalancerDao.listByVpcIdAndScheme(domainRouterVO.getVpcId(), Scheme.Public);
+ final List<LoadBalancingRule> lbRules = new ArrayList<>();
+ createLoadBalancingRulesList(lbRules, lbs);
+ s_logger.debug("Found " + lbRules.size() + " load balancing rule(s) to
apply as a part of VPC VR " + domainRouterVO + " start.");
+ if (!lbRules.isEmpty()) {
+ for (final Pair<Nic, Network> nicNtwk : guestNics) {
+ final Nic guestNic = nicNtwk.first();
+ final long guestNetworkId = guestNic.getNetworkId();
+ if
(_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Lb,
provider)) {
+
_commandSetupHelper.createApplyLoadBalancingRulesCommands(lbRules,
domainRouterVO, cmds, guestNetworkId);
+ break;
+ }
+ }
+ }
+ }
+
@Override
protected List<MonitoringServiceVO> getDefaultServicesToMonitor(NetworkVO
network) {
if (network.getTrafficType() == TrafficType.Public) {