Skip to content

Commit a2dbf78

Browse files
committed
Load Balancer config
1 parent 5be6b79 commit a2dbf78

File tree

52 files changed

+4024
-130
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+4024
-130
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Licensed to the Apache Software Foundation (ASF) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The ASF licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
package com.cloud.agent.api.to;
18+
19+
import org.apache.cloudstack.network.lb.LoadBalancerConfig;
20+
21+
public class LoadBalancerConfigTO {
22+
private String name;
23+
private String value;
24+
25+
public LoadBalancerConfigTO(String name, String value) {
26+
this.name = name;
27+
this.value = value;
28+
}
29+
30+
public LoadBalancerConfigTO(LoadBalancerConfig config) {
31+
this.name = config.getName();
32+
this.value = config.getValue();
33+
}
34+
35+
public String getName() {
36+
return name;
37+
}
38+
39+
public String getValue() {
40+
return value;
41+
}
42+
}

api/src/main/java/com/cloud/agent/api/to/LoadBalancerTO.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@
3131
import com.cloud.network.lb.LoadBalancingRule.LbStickinessPolicy;
3232
import com.cloud.utils.Pair;
3333

34+
import org.apache.cloudstack.network.lb.LoadBalancerConfig;
35+
import org.springframework.util.CollectionUtils;
36+
3437
public class LoadBalancerTO {
3538
String uuid;
3639
String srcIp;
@@ -46,6 +49,7 @@ public class LoadBalancerTO {
4649
String srcIpNetmask;
4750
Long networkId;
4851
DestinationTO[] destinations;
52+
private LoadBalancerConfigTO[] lbConfigs;
4953
private StickinessPolicyTO[] stickinessPolicies;
5054
private HealthCheckPolicyTO[] healthCheckPolicies;
5155
private LbSslCert sslCert; /* XXX: Should this be SslCertTO? */
@@ -177,6 +181,22 @@ public boolean isInline() {
177181
return inline;
178182
}
179183

184+
public LoadBalancerConfigTO[] getLbConfigs() {
185+
return this.lbConfigs;
186+
}
187+
188+
public void setLbConfigs(List<? extends LoadBalancerConfig> lbConfigs) {
189+
if (CollectionUtils.isEmpty(lbConfigs)) {
190+
this.lbConfigs = new LoadBalancerConfigTO[0];
191+
return;
192+
}
193+
this.lbConfigs = new LoadBalancerConfigTO[lbConfigs.size()];
194+
int i = 0;
195+
for (LoadBalancerConfig lbConfig : lbConfigs) {
196+
this.lbConfigs[i++] = new LoadBalancerConfigTO(lbConfig);
197+
}
198+
}
199+
180200
public StickinessPolicyTO[] getStickinessPolicies() {
181201
return stickinessPolicies;
182202
}
@@ -205,6 +225,10 @@ public LbSslCert getSslCert() {
205225
return this.sslCert;
206226
}
207227

228+
public void setLbSslCert(LbSslCert sslCert) {
229+
this.sslCert = sslCert;
230+
}
231+
208232
public String getSrcIpVlan() {
209233
return srcIpVlan;
210234
}

api/src/main/java/com/cloud/event/EventTypes.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,10 @@ public class EventTypes {
229229
public static final String EVENT_LB_CERT_DELETE = "LB.CERT.DELETE";
230230
public static final String EVENT_LB_CERT_ASSIGN = "LB.CERT.ASSIGN";
231231
public static final String EVENT_LB_CERT_REMOVE = "LB.CERT.REMOVE";
232+
public static final String EVENT_LOAD_BALANCER_CONFIG_CREATE = "LB.CONFIG.CREATE";
233+
public static final String EVENT_LOAD_BALANCER_CONFIG_DELETE = "LB.CONFIG.DELETE";
234+
public static final String EVENT_LOAD_BALANCER_CONFIG_REPLACE = "LB.CONFIG.REPLACE";
235+
public static final String EVENT_LOAD_BALANCER_CONFIG_UPDATE = "LB.CONFIG.UPDATE";
232236

233237
// Global Load Balancer rules
234238
public static final String EVENT_ASSIGN_TO_GLOBAL_LOAD_BALANCER_RULE = "GLOBAL.LB.ASSIGN";

api/src/main/java/com/cloud/network/lb/LoadBalancingRulesService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ LoadBalancer createPublicLoadBalancerRule(String xId, String name, String descri
106106

107107
boolean applyLoadBalancerConfig(long lbRuleId) throws ResourceUnavailableException;
108108

109-
boolean assignCertToLoadBalancer(long lbRuleId, Long certId);
109+
boolean assignCertToLoadBalancer(long lbRuleId, Long certId, boolean forced);
110110

111111
boolean removeCertFromLoadBalancer(long lbRuleId);
112112

api/src/main/java/org/apache/cloudstack/api/ApiConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ public class ApiConstants {
9898
public static final String CLUSTER_TYPE = "clustertype";
9999
public static final String CN = "cn";
100100
public static final String COMMAND = "command";
101+
public static final String CONFIG = "config";
101102
public static final String CMD_EVENT_TYPE = "cmdeventtype";
102103
public static final String COMPONENT = "component";
103104
public static final String CPU_CORE_PER_SOCKET = "cpucorepersocket";
@@ -658,6 +659,7 @@ public class ApiConstants {
658659
public static final String LOAD_BALANCER_DEVICE_STATE = "lbdevicestate";
659660
public static final String LOAD_BALANCER_DEVICE_CAPACITY = "lbdevicecapacity";
660661
public static final String LOAD_BALANCER_DEVICE_DEDICATED = "lbdevicededicated";
662+
public static final String LOAD_BALANCER_ID = "loadbalancerid";
661663
public static final String LOAD_BALANCER_RULE = "loadbalancerrule";
662664
public static final String LOAD_BALANCER_RULE_LIST = "loadbalancerrulelist";
663665
public static final String FIREWALL_DEVICE_ID = "fwdeviceid";

api/src/main/java/org/apache/cloudstack/api/BaseCmd.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.apache.cloudstack.network.element.InternalLoadBalancerElementService;
4242
import org.apache.cloudstack.network.lb.ApplicationLoadBalancerService;
4343
import org.apache.cloudstack.network.lb.InternalLoadBalancerVMService;
44+
import org.apache.cloudstack.network.lb.LoadBalancerConfigService;
4445
import org.apache.cloudstack.query.QueryService;
4546
import org.apache.cloudstack.storage.object.BucketApiService;
4647
import org.apache.cloudstack.storage.ImageStoreService;
@@ -158,6 +159,8 @@ public static enum CommandType {
158159
@Inject
159160
public LoadBalancingRulesService _lbService;
160161
@Inject
162+
public LoadBalancerConfigService _lbConfigService;
163+
@Inject
161164
public RemoteAccessVpnService _ravService;
162165
@Inject
163166
public ProjectService _projectService;

api/src/main/java/org/apache/cloudstack/api/ResponseGenerator.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
import org.apache.cloudstack.api.response.LBHealthCheckResponse;
7676
import org.apache.cloudstack.api.response.LBStickinessResponse;
7777
import org.apache.cloudstack.api.response.ListResponse;
78+
import org.apache.cloudstack.api.response.LoadBalancerConfigResponse;
7879
import org.apache.cloudstack.api.response.LoadBalancerResponse;
7980
import org.apache.cloudstack.api.response.ManagementServerResponse;
8081
import org.apache.cloudstack.api.response.NetworkACLItemResponse;
@@ -147,6 +148,7 @@
147148
import org.apache.cloudstack.direct.download.DirectDownloadManager;
148149
import org.apache.cloudstack.management.ManagementServerHost;
149150
import org.apache.cloudstack.network.lb.ApplicationLoadBalancerRule;
151+
import org.apache.cloudstack.network.lb.LoadBalancerConfig;
150152
import org.apache.cloudstack.region.PortableIp;
151153
import org.apache.cloudstack.region.PortableIpRange;
152154
import org.apache.cloudstack.region.Region;
@@ -291,6 +293,10 @@ public interface ResponseGenerator {
291293

292294
LoadBalancerResponse createLoadBalancerResponse(LoadBalancer loadBalancer);
293295

296+
LoadBalancerConfigResponse createLoadBalancerConfigResponse(LoadBalancerConfig config);
297+
298+
List<LoadBalancerConfigResponse> createLoadBalancerConfigResponse(List<? extends LoadBalancerConfig> configs);
299+
294300
LBStickinessResponse createLBStickinessPolicyResponse(List<? extends StickinessPolicy> stickinessPolicies, LoadBalancer lb);
295301

296302
LBStickinessResponse createLBStickinessPolicyResponse(StickinessPolicy stickinessPolicy, LoadBalancer lb);

api/src/main/java/org/apache/cloudstack/api/command/user/loadbalancer/AssignCertToLoadBalancerCmd.java

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,8 @@
1717
// under the License.
1818
package org.apache.cloudstack.api.command.user.loadbalancer;
1919

20-
import org.apache.log4j.Logger;
21-
2220
import org.apache.cloudstack.api.APICommand;
21+
import org.apache.cloudstack.api.ApiCommandResourceType;
2322
import org.apache.cloudstack.api.ApiConstants;
2423
import org.apache.cloudstack.api.ApiErrorCode;
2524
import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -37,13 +36,17 @@
3736
import com.cloud.exception.ResourceUnavailableException;
3837
import com.cloud.network.rules.LoadBalancer;
3938
import com.cloud.user.Account;
39+
import org.apache.commons.lang.BooleanUtils;
40+
41+
import java.util.logging.Logger;
4042

4143
@APICommand(name = "assignCertToLoadBalancer", description = "Assigns a certificate to a load balancer rule", responseObject = SuccessResponse.class,
4244
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
4345
public class AssignCertToLoadBalancerCmd extends BaseAsyncCmd {
4446

4547
public static final Logger s_logger = Logger.getLogger(AssignCertToLoadBalancerCmd.class.getName());
4648

49+
private static final String RESPONSE_NAME = "assigncerttoloadbalancerresponse";
4750

4851
@Parameter(name = ApiConstants.LBID,
4952
type = CommandType.UUID,
@@ -59,11 +62,17 @@ public class AssignCertToLoadBalancerCmd extends BaseAsyncCmd {
5962
description = "the ID of the certificate")
6063
Long certId;
6164

65+
@Parameter(name = ApiConstants.FORCED, type = CommandType.BOOLEAN, required = false,
66+
since = "4.17",
67+
description = "Force assign the certificate. If there is a certificate bound to the LB, it will be removed")
68+
private Boolean forced;
69+
70+
6271
@Override
6372
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException,
6473
ResourceAllocationException, NetworkRuleConflictException {
6574
//To change body of implemented methods use File | Settings | File Templates.
66-
if (_lbService.assignCertToLoadBalancer(getLbRuleId(), getCertId())) {
75+
if (_lbService.assignCertToLoadBalancer(getLbRuleId(), getCertId(), isForced())) {
6776
SuccessResponse response = new SuccessResponse(getCommandName());
6877
this.setResponseObject(response);
6978
} else {
@@ -76,6 +85,11 @@ public String getEventType() {
7685
return EventTypes.EVENT_LB_CERT_ASSIGN;
7786
}
7887

88+
@Override
89+
public String getCommandName() {
90+
return RESPONSE_NAME;
91+
}
92+
7993
@Override
8094
public String getEventDescription() {
8195
return "Assigning a certificate to a load balancer";
@@ -97,4 +111,27 @@ public Long getCertId() {
97111
public Long getLbRuleId() {
98112
return lbRuleId;
99113
}
114+
115+
public boolean isForced() {
116+
return BooleanUtils.toBoolean(forced);
117+
}
118+
119+
public ApiCommandResourceType getInstanceType() {
120+
return ApiCommandResourceType.LoadBalancerRule;
121+
}
122+
123+
public Long getInstanceId() {
124+
return lbRuleId;
125+
}
126+
127+
@Override
128+
public String getSyncObjType() {
129+
return BaseAsyncCmd.networkSyncObject;
130+
}
131+
132+
@Override
133+
public Long getSyncObjId() {
134+
LoadBalancer lb = _entityMgr.findById(LoadBalancer.class, getLbRuleId());
135+
return (lb != null )? lb.getNetworkId(): null;
136+
}
100137
}

0 commit comments

Comments
 (0)