Skip to content

Commit 8a0b090

Browse files
committed
Move Console Proxy global settings to zone level
1 parent f020b5b commit 8a0b090

File tree

9 files changed

+87
-149
lines changed

9 files changed

+87
-149
lines changed

framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,10 @@ public ConfigKey(String category, Class<T> type, String name, String defaultValu
229229
this(type, name, category, defaultValue, description, isDynamic, Scope.Global, null);
230230
}
231231

232+
public ConfigKey(String category, Class<T> type, String name, String defaultValue, String description, Scope scope, boolean isDynamic) {
233+
this(type, name, category, defaultValue, description, isDynamic, scope, null);
234+
}
235+
232236
public ConfigKey(String category, Class<T> type, String name, String defaultValue, String description, boolean isDynamic, Kind kind, String options) {
233237
this(type, name, category, defaultValue, description, isDynamic, Scope.Global, null, null, null, null, null, kind, options);
234238
}

server/src/main/java/com/cloud/configuration/Config.java

Lines changed: 2 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.apache.cloudstack.framework.config.ConfigKey;
2626

2727
import com.cloud.agent.AgentManager;
28-
import com.cloud.consoleproxy.ConsoleProxyManager;
2928
import com.cloud.ha.HighAvailabilityManager;
3029
import com.cloud.hypervisor.Hypervisor.HypervisorType;
3130
import com.cloud.network.router.VpcVirtualNetworkApplianceManager;
@@ -405,94 +404,7 @@ public enum Config {
405404

406405

407406
// Console Proxy
408-
ConsoleProxyCapacityStandby(
409-
"Console Proxy",
410-
AgentManager.class,
411-
String.class,
412-
"consoleproxy.capacity.standby",
413-
"10",
414-
"The minimal number of console proxy viewer sessions that system is able to serve immediately(standby capacity)",
415-
null),
416-
ConsoleProxyCapacityScanInterval(
417-
"Console Proxy",
418-
AgentManager.class,
419-
String.class,
420-
"consoleproxy.capacityscan.interval",
421-
"30000",
422-
"The time interval(in millisecond) to scan whether or not system needs more console proxy to ensure minimal standby capacity",
423-
null),
424-
ConsoleProxyCmdPort(
425-
"Console Proxy",
426-
AgentManager.class,
427-
Integer.class,
428-
"consoleproxy.cmd.port",
429-
"8001",
430-
"Console proxy command port that is used to communicate with management server",
431-
null),
432-
ConsoleProxyRestart(
433-
"Console Proxy",
434-
AgentManager.class,
435-
Boolean.class,
436-
"consoleproxy.restart",
437-
"true",
438-
"Console proxy restart flag, defaulted to true",
439-
null),
440-
ConsoleProxyUrlDomain(
441-
"Console Proxy",
442-
AgentManager.class,
443-
String.class,
444-
"consoleproxy.url.domain",
445-
"",
446-
"Console proxy url domain",
447-
"domainName,privateip"),
448-
ConsoleProxySessionMax(
449-
"Console Proxy",
450-
AgentManager.class,
451-
Integer.class,
452-
"consoleproxy.session.max",
453-
String.valueOf(ConsoleProxyManager.DEFAULT_PROXY_CAPACITY),
454-
"The max number of viewer sessions console proxy is configured to serve for",
455-
null),
456-
ConsoleProxySessionTimeout(
457-
"Console Proxy",
458-
AgentManager.class,
459-
Integer.class,
460-
"consoleproxy.session.timeout",
461-
"300000",
462-
"Timeout(in milliseconds) that console proxy tries to maintain a viewer session before it times out the session for no activity",
463-
null),
464-
ConsoleProxyDisableRpFilter(
465-
"Console Proxy",
466-
AgentManager.class,
467-
Boolean.class,
468-
"consoleproxy.disable.rpfilter",
469-
"true",
470-
"disable rp_filter on console proxy VM public interface",
471-
null),
472-
ConsoleProxyLaunchMax(
473-
"Console Proxy",
474-
AgentManager.class,
475-
Integer.class,
476-
"consoleproxy.launch.max",
477-
"10",
478-
"maximum number of console proxy instances per zone can be launched",
479-
null),
480-
ConsoleProxyManagementState(
481-
"Console Proxy",
482-
AgentManager.class,
483-
String.class,
484-
"consoleproxy.management.state",
485-
com.cloud.consoleproxy.ConsoleProxyManagementState.Auto.toString(),
486-
"console proxy service management state",
487-
null),
488-
ConsoleProxyManagementLastState(
489-
"Console Proxy",
490-
AgentManager.class,
491-
String.class,
492-
"consoleproxy.management.state.last",
493-
com.cloud.consoleproxy.ConsoleProxyManagementState.Auto.toString(),
494-
"last console proxy service management state",
495-
null),
407+
496408

497409
// Snapshots
498410

@@ -1799,6 +1711,7 @@ public enum Config {
17991711

18001712
SSVMPSK("Hidden", ManagementServer.class, String.class, "upload.post.secret.key", "", "PSK with SSVM", null);
18011713

1714+
18021715
private final String _category;
18031716
private final Class<?> _componentClass;
18041717
private final Class<?> _type;

server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import javax.inject.Inject;
5151
import javax.naming.ConfigurationException;
5252

53+
import com.cloud.consoleproxy.ConsoleProxyManager;
5354
import org.apache.cloudstack.acl.RoleType;
5455
import org.apache.cloudstack.acl.SecurityChecker;
5556
import org.apache.cloudstack.affinity.AffinityGroup;
@@ -573,7 +574,7 @@ protected void populateConfigValuesForValidationSet() {
573574
configValuesForValidation.add("event.purge.interval");
574575
configValuesForValidation.add("account.cleanup.interval");
575576
configValuesForValidation.add("alert.wait");
576-
configValuesForValidation.add("consoleproxy.capacityscan.interval");
577+
configValuesForValidation.add(ConsoleProxyManager.ConsoleProxyCapacityScanInterval.key());
577578
configValuesForValidation.add("expunge.interval");
578579
configValuesForValidation.add("host.stats.interval");
579580
configValuesForValidation.add("network.gc.interval");

server/src/main/java/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,12 @@ public boolean configure(String name, Map<String, Object> params) throws Configu
120120
_consoleProxyPort = NumbersUtil.parseInt(value, ConsoleProxyManager.DEFAULT_PROXY_VNC_PORT);
121121
}
122122

123-
value = configs.get(ConsoleProxySslEnabled.key());
124-
if (value != null && value.equalsIgnoreCase("true")) {
123+
Boolean sslEnabled = ConsoleProxySslEnabled.value();
124+
if (Boolean.TRUE.equals(sslEnabled)) {
125125
_sslEnabled = true;
126126
}
127127

128-
_consoleProxyUrlDomain = configs.get("consoleproxy.url.domain");
128+
_consoleProxyUrlDomain = ConsoleProxyUrlDomain.value();
129129

130130
_listener = new ConsoleProxyListener(new AgentBasedAgentHook(_instanceDao, _hostDao, _configDao, _ksMgr,
131131
_agentMgr, _keysMgr, consoleAccessManager));
@@ -166,6 +166,8 @@ public ConsoleProxyInfo assignProxy(long dataCenterId, VMInstanceVO userVm) {
166166
urlPort = host.getProxyPort().intValue();
167167
}
168168

169+
_sslEnabled = ConsoleProxySslEnabled.valueIn(dataCenterId);
170+
_consoleProxyUrlDomain = ConsoleProxyUrlDomain.valueIn(dataCenterId);
169171
return new ConsoleProxyInfo(_sslEnabled, publicIp, _consoleProxyPort, urlPort, _consoleProxyUrlDomain);
170172
} else {
171173
logger.warn("Host that VM is running is no longer available, console access to VM {} will be temporarily unavailable.", userVm);

server/src/main/java/com/cloud/consoleproxy/AgentHookBase.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
import com.cloud.agent.api.StartupCommand;
4242
import com.cloud.agent.api.StartupProxyCommand;
4343
import com.cloud.agent.api.proxy.StartConsoleProxyAgentHttpHandlerCommand;
44-
import com.cloud.configuration.Config;
4544
import com.cloud.exception.AgentUnavailableException;
4645
import com.cloud.exception.OperationTimedoutException;
4746
import com.cloud.host.Host;
@@ -213,10 +212,14 @@ public void startAgentHttpHandlerInVM(StartupProxyCommand startupCmd) {
213212

214213
byte[] ksBits = null;
215214

216-
String consoleProxyUrlDomain = _configDao.getValue(Config.ConsoleProxyUrlDomain.key());
217-
String consoleProxySslEnabled = _configDao.getValue(ConsoleProxyManager.ConsoleProxySslEnabled.key());
218-
if (!StringUtils.isEmpty(consoleProxyUrlDomain) && !StringUtils.isEmpty(consoleProxySslEnabled)
219-
&& consoleProxySslEnabled.equalsIgnoreCase("true")) {
215+
HostVO consoleProxyHost = findConsoleProxyHost(startupCmd);
216+
217+
assert (consoleProxyHost != null);
218+
219+
Long datacenterId = consoleProxyHost.getDataCenterId();
220+
String consoleProxyUrlDomain = ConsoleProxyManager.ConsoleProxyUrlDomain.valueIn(datacenterId);
221+
Boolean consoleProxySslEnabled = ConsoleProxyManager.ConsoleProxySslEnabled.valueIn(datacenterId);
222+
if (!StringUtils.isEmpty(consoleProxyUrlDomain) && Boolean.TRUE.equals(consoleProxySslEnabled)) {
220223
ksBits = _ksMgr.getKeystoreBits(ConsoleProxyManager.CERTIFICATE_NAME, ConsoleProxyManager.CERTIFICATE_NAME, storePassword);
221224
//ks manager raises exception if ksBits are null, hence no need to explicltly handle the condition
222225
} else {
@@ -227,9 +230,6 @@ public void startAgentHttpHandlerInVM(StartupProxyCommand startupCmd) {
227230
cmd.setEncryptorPassword(getEncryptorPassword());
228231
cmd.setIsSourceIpCheckEnabled(Boolean.parseBoolean(_configDao.getValue(ConsoleProxyManager.NoVncConsoleSourceIpCheckEnabled.key())));
229232

230-
HostVO consoleProxyHost = findConsoleProxyHost(startupCmd);
231-
232-
assert (consoleProxyHost != null);
233233
if (consoleProxyHost != null) {
234234
Answer answer = _agentMgr.send(consoleProxyHost.getId(), cmd);
235235
if (answer == null || !answer.getResult()) {

server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManager.java

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
// under the License.
1717
package com.cloud.consoleproxy;
1818

19+
import java.util.Arrays;
1920
import java.util.Map;
21+
import java.util.stream.Collectors;
2022

2123
import org.apache.cloudstack.framework.config.ConfigKey;
2224

@@ -46,14 +48,48 @@ public interface ConsoleProxyManager extends Manager, ConsoleProxyService {
4648
String CERTIFICATE_NAME = "CPVMCertificate";
4749

4850
ConfigKey<Boolean> ConsoleProxySslEnabled = new ConfigKey<>(ConfigKey.CATEGORY_ADVANCED, Boolean.class, "consoleproxy.sslEnabled", "false",
49-
"Enable SSL for console proxy", false);
51+
"Enable SSL for console proxy", ConfigKey.Scope.Zone, false);
5052

5153
ConfigKey<Boolean> NoVncConsoleDefault = new ConfigKey<>(ConfigKey.CATEGORY_ADVANCED, Boolean.class, "novnc.console.default", "true",
52-
"If true, noVNC console will be default console for virtual machines", true);
54+
"If true, noVNC console will be default console for virtual machines", ConfigKey.Scope.Zone, true);
5355

5456
ConfigKey<Boolean> NoVncConsoleSourceIpCheckEnabled = new ConfigKey<>(ConfigKey.CATEGORY_ADVANCED, Boolean.class, "novnc.console.sourceip.check.enabled", "false",
5557
"If true, The source IP to access novnc console must be same as the IP in request to management server for console URL. Needs to reconnect CPVM to management server when this changes (via restart CPVM, or management server, or cloud service in CPVM)", false);
5658

59+
ConfigKey<String> ConsoleProxyCapacityStandby = new ConfigKey<>(String.class, "consoleproxy.capacity.standby", "Console Proxy", "10",
60+
"The minimal number of console proxy viewer sessions that system is able to serve immediately(standby capacity)", false, ConfigKey.Scope.Zone, null);
61+
62+
ConfigKey<String> ConsoleProxyCapacityScanInterval = new ConfigKey<>(String.class, "consoleproxy.capacityscan.interval", "Console Proxy", "30000",
63+
"The time interval(in millisecond) to scan whether or not system needs more console proxy to ensure minimal standby capacity", false, ConfigKey.Scope.Zone, null);
64+
65+
ConfigKey<Integer> ConsoleProxyCmdPort = new ConfigKey<>(Integer.class, "consoleproxy.cmd.port", "Console Proxy", String.valueOf(DEFAULT_PROXY_CMD_PORT),
66+
"Console proxy command port that is used to communicate with management server", false, ConfigKey.Scope.Zone, null);
67+
68+
ConfigKey<Boolean> ConsoleProxyRestart = new ConfigKey<>(Boolean.class, "consoleproxy.restart", "Console Proxy", "true",
69+
"Console proxy restart flag, defaults to true", false, ConfigKey.Scope.Zone, null);
70+
71+
ConfigKey<String> ConsoleProxyUrlDomain = new ConfigKey<>(String.class, "consoleproxy.url.domain", "Console Proxy", "",
72+
"Console proxy url domain - domainName,privateip", false, ConfigKey.Scope.Zone, null);
73+
74+
ConfigKey<Integer> ConsoleProxySessionMax = new ConfigKey<>(Integer.class, "consoleproxy.session.max", "Console Proxy", String.valueOf(DEFAULT_PROXY_CAPACITY),
75+
"The max number of viewer sessions console proxy is configured to serve for", false, ConfigKey.Scope.Zone, null);
76+
77+
ConfigKey<Integer> ConsoleProxySessionTimeout = new ConfigKey<>(Integer.class, "consoleproxy.session.timeout", "Console Proxy", "300000",
78+
"Timeout(in milliseconds) that console proxy tries to maintain a viewer session before it times out the session for no activity", false, ConfigKey.Scope.Zone, null);
79+
80+
ConfigKey<Boolean> ConsoleProxyDisableRpFilter = new ConfigKey<>(Boolean.class, "consoleproxy.disable.rpfilter", "Console Proxy", "true",
81+
"disable rp_filter on console proxy VM public interface", false, ConfigKey.Scope.Zone, null);
82+
83+
ConfigKey<Integer> ConsoleProxyLaunchMax = new ConfigKey<>(Integer.class, "consoleproxy.launch.max", "Console Proxy", "10",
84+
"maximum number of console proxy instances per zone can be launched", false, ConfigKey.Scope.Zone, null);
85+
86+
String consoleProxyManagementStates = Arrays.stream(com.cloud.consoleproxy.ConsoleProxyManagementState.values()).map(Enum::name).collect(Collectors.joining(","));
87+
ConfigKey<String> ConsoleProxyServiceManagementState = new ConfigKey<String>(ConfigKey.CATEGORY_ADVANCED, String.class, "consoleproxy.management.state", com.cloud.consoleproxy.ConsoleProxyManagementState.Auto.toString(),
88+
"console proxy service management state", false, ConfigKey.Kind.Select, consoleProxyManagementStates);
89+
90+
ConfigKey<String> ConsoleProxyManagementLastState = new ConfigKey<String>(ConfigKey.CATEGORY_ADVANCED, String.class, "consoleproxy.management.state.last", com.cloud.consoleproxy.ConsoleProxyManagementState.Auto.toString(),
91+
"last console proxy service management state", false, ConfigKey.Kind.Select, consoleProxyManagementStates);
92+
5793
void setManagementState(ConsoleProxyManagementState state);
5894

5995
ConsoleProxyManagementState getManagementState();

0 commit comments

Comments
 (0)