diff --git a/server/src/main/java/com/cloud/network/router/CommandSetupHelper.java b/server/src/main/java/com/cloud/network/router/CommandSetupHelper.java index 2ca6ca0d0bee..b915027e9ab3 100644 --- a/server/src/main/java/com/cloud/network/router/CommandSetupHelper.java +++ b/server/src/main/java/com/cloud/network/router/CommandSetupHelper.java @@ -365,7 +365,10 @@ public void createApplyLoadBalancingRulesCommands(final List final List destinations = rule.getDestinations(); final List stickinessPolicies = rule.getStickinessPolicies(); final LoadBalancerTO lb = new LoadBalancerTO(uuid, srcIp, srcPort, protocol, algorithm, revoked, false, inline, destinations, stickinessPolicies); - lb.setCidrList(rule.getCidrList()); + String cidrList = rule.getCidrList(); + if (cidrList != null && !cidrList.isEmpty()) { + lb.setCidrList(String.join(" ", cidrList.split(","))); + } lb.setLbProtocol(lb_protocol); lb.setLbSslCert(rule.getLbSslCert()); lbs[i++] = lb; diff --git a/ui/src/views/network/LoadBalancing.vue b/ui/src/views/network/LoadBalancing.vue index 6d9952204fd3..ad091b218a83 100644 --- a/ui/src/views/network/LoadBalancing.vue +++ b/ui/src/views/network/LoadBalancing.vue @@ -451,6 +451,22 @@ {{ $t('label.ssl') }} +
+

+ {{ $t('label.sourcecidrlist') }} + +

+ +
{{ $t('label.cancel') }} {{ $t('label.ok') }} @@ -837,7 +853,8 @@ export default { editRuleDetails: { name: '', algorithm: '', - protocol: '' + protocol: '', + cidrlist: '' }, newRule: { algorithm: 'roundrobin', @@ -1625,14 +1642,28 @@ export default { this.editRuleDetails.name = this.selectedRule.name this.editRuleDetails.algorithm = this.lbProvider !== 'Netris' ? this.selectedRule.algorithm : undefined this.editRuleDetails.protocol = this.selectedRule.protocol + // Normalize cidrlist: replace spaces with commas and clean up + this.editRuleDetails.cidrlist = (this.selectedRule.cidrlist || '') + .split(/[\s,]+/) // Split on spaces or commas + .map(c => c.trim()) + .filter(c => c) + .join(',') || '' }, handleSubmitEditForm () { if (this.editRuleModalLoading) return this.loading = true this.editRuleModalLoading = true + const payload = { + ...this.editRuleDetails, + id: this.selectedRule.id, + ...(this.editRuleDetails.cidrlist && { + cidrList: (this.editRuleDetails.cidrlist || '').split(',').map(c => c.trim()).filter(c => c) + }) + } postAPI('updateLoadBalancerRule', { ...this.editRuleDetails, - id: this.selectedRule.id + id: this.selectedRule.id, + ...payload }).then(response => { this.$pollJob({ jobId: response.updateloadbalancerruleresponse.jobid,