blob: b1d73314552ff526b45c89a8e9c8a49f37df1340 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.brooklyn.core.server;
import static org.apache.brooklyn.core.config.ConfigKeys.newBooleanConfigKey;
import static org.apache.brooklyn.core.config.ConfigKeys.newStringConfigKey;
import java.net.URI;
import java.util.List;
import java.util.Map;
import org.apache.brooklyn.api.mgmt.ManagementContext;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.config.StringConfigMap;
import org.apache.brooklyn.core.config.ConfigKeys;
import org.apache.brooklyn.core.mgmt.usage.ManagementNodeStateListener;
import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.os.Os;
import org.apache.brooklyn.util.time.Duration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.ImmutableList;
import com.google.common.reflect.TypeToken;
/** Config keys for the brooklyn server */
public class BrooklynServerConfig {
@SuppressWarnings("unused")
private static final Logger log = LoggerFactory.getLogger(BrooklynServerConfig.class);
/**
* Provided for setting; consumers should use {@link #getMgmtBaseDir(ManagementContext)}
*/
public static final ConfigKey<String> MGMT_BASE_DIR = newStringConfigKey(
"brooklyn.base.dir", "Directory for reading and writing all brooklyn server data",
Os.fromHome(".brooklyn"));
@Deprecated /** @deprecated since 0.7.0 use BrooklynServerConfig routines */
// copied here so we don't have back-ref to BrooklynConfigKeys
public static final ConfigKey<String> BROOKLYN_DATA_DIR = newStringConfigKey(
"brooklyn.datadir", "Directory for writing all brooklyn data");
/**
* Provided for setting; consumers should query the management context persistence subsystem
* for the actual target, or use {@link BrooklynServerPaths#newMainPersistencePathResolver(ManagementContext)}
* if trying to resolve the value
*/
public static final ConfigKey<String> PERSISTENCE_DIR = newStringConfigKey(
"brooklyn.persistence.dir",
"Directory or container name for writing persisted state");
public static final ConfigKey<Boolean> PERSISTENCE_DIR_MUST_EXIST = newBooleanConfigKey(
"brooklyn.persistence.dir.required",
"Whether the persistence directory should before starting AMP;"
+ "if true, it will fail if it can't find the directory;"
+ "if false, the persistence directory will be created in case it didn't exist in advance;", false);
public static final ConfigKey<String> PERSISTENCE_LOCATION_SPEC = newStringConfigKey(
"brooklyn.persistence.location.spec",
"Optional location spec string for an object store (e.g. jclouds:swift:URL) where persisted state should be kept; "
+ "if blank or not supplied, the file system is used");
public static final ConfigKey<String> PERSISTENCE_BACKUPS_DIR = newStringConfigKey(
"brooklyn.persistence.backups.dir",
"Directory or container name for writing backups of persisted state; "
+ "defaults to 'backups' inside the default persistence directory");
public static final ConfigKey<String> PERSISTENCE_BACKUPS_LOCATION_SPEC = newStringConfigKey(
"brooklyn.persistence.backups.location.spec",
"Location spec string for an object store (e.g. jclouds:swift:URL) where backups of persisted state should be kept; "
+ "defaults to the local file system");
public static final ConfigKey<Boolean> PERSISTENCE_BACKUPS_REQUIRED_ON_PROMOTION =
ConfigKeys.newBooleanConfigKey("brooklyn.persistence.backups.required.promotion",
"Whether a backup should be made of the persisted state from the persistence location to the backup location on node promotion, "
+ "before any writes from this node", true);
public static final ConfigKey<Boolean> PERSISTENCE_BACKUPS_REQUIRED_ON_DEMOTION =
ConfigKeys.newBooleanConfigKey("brooklyn.persistence.backups.required.promotion",
"Whether a backup of in-memory state should be made to the backup persistence location on node demotion, "
+ "in case other nodes might write conflicting state", true);
/** @deprecated since 0.7.0, use {@link #PERSISTENCE_BACKUPS_ON_PROMOTION} and {@link #PERSISTENCE_BACKUPS_ON_DEMOTION},
* which allow using a different target location and are supported on more environments (and now default to true) */
@Deprecated
public static final ConfigKey<Boolean> PERSISTENCE_BACKUPS_REQUIRED =
ConfigKeys.newBooleanConfigKey("brooklyn.persistence.backups.required",
"Whether a backup should always be made of the persistence directory; "
+ "if true, it will fail if this operation is not permitted (e.g. jclouds-based cloud object stores); "
+ "if false, the persistence store will be overwritten with changes (but files not removed if they are unreadable); "
+ "if null or not set, the legacy beahviour of creating backups where possible (e.g. file system) is currently used; "
+ "this key is DEPRECATED in favor of promotion and demotion specific flags now defaulting to true");
@SuppressWarnings("serial")
public static final ConfigKey<List<ManagementNodeStateListener>> MANAGEMENT_NODE_STATE_LISTENERS = ConfigKeys.newConfigKey(
new TypeToken<List<ManagementNodeStateListener>>() {},
"brooklyn.managementNodeState.listeners",
"Optional list of ManagementNodeStateListener instances",
ImmutableList.<ManagementNodeStateListener>of());
public static final ConfigKey<Duration> MANAGEMENT_NODE_STATE_LISTENER_TERMINATION_TIMEOUT = ConfigKeys.newConfigKey(
Duration.class,
"brooklyn.managementNodeState.listeners.timeout",
"Timeout on termination, to wait for queue of management-node-state listener events to be processed",
Duration.TEN_SECONDS);
public static final ConfigKey<String> BROOKLYN_CATALOG_URL = ConfigKeys.newStringConfigKey("brooklyn.catalog.url",
"The URL of a custom catalog.bom to load");
/** string used in places where the management node ID is needed to resolve a path */
public static final String MANAGEMENT_NODE_ID_PROPERTY = "brooklyn.mgmt.node.id";
public static final ConfigKey<Boolean> USE_OSGI = ConfigKeys.newBooleanConfigKey("brooklyn.osgi.enabled",
"Whether OSGi is enabled, defaulting to true", true);
public static final ConfigKey<String> OSGI_CACHE_DIR = ConfigKeys.newStringConfigKey("brooklyn.osgi.cache.dir",
"Directory to use for OSGi cache, potentially including Freemarker template variables "
+ "${"+MGMT_BASE_DIR.getName()+"} (which is the default for relative paths), "
+ "${"+Os.TmpDirFinder.BROOKLYN_OS_TMPDIR_PROPERTY+"} if it should be in the tmp dir space, "
+ "and ${"+MANAGEMENT_NODE_ID_PROPERTY+"} to include the management node ID (recommended if running multiple OSGi paths)",
"osgi/cache/${"+MANAGEMENT_NODE_ID_PROPERTY+"}/");
public static final ConfigKey<Boolean> OSGI_CACHE_CLEAN = ConfigKeys.newBooleanConfigKey("brooklyn.osgi.cache.clean",
"Whether to delete the OSGi directory before and after use; if unset, it will delete if the node ID forms part of the cache dir path (which by default it does) to avoid file leaks");
public static final ConfigKey<String> PERSIST_MANAGED_BUNDLE_WHITELIST_REGEX = ConfigKeys.newStringConfigKey(
"brooklyn.persistence.bundle.whitelist",
"Regex for bundle symbolic names explicitly allowed to be persisted (taking precedence over blacklist); "
+ "managed bundles will by default be peristed if not blacklisted; "
+ "they do not need to be explicitly whitelisted.",
null);
public static final ConfigKey<String> PERSIST_MANAGED_BUNDLE_BLACKLIST_REGEX = ConfigKeys.newStringConfigKey(
"brooklyn.persistence.bundle.blacklist",
"Regex for bundle symbolic names explicitly excluded from persistence (but whitelist takes precedence); "
+ "if not explicitly blacklisted, managed bundles will by default be peristed",
"org\\.apache\\.brooklyn\\..*");
/** @see BrooklynServerPaths#getMgmtBaseDir(ManagementContext) */
public static String getMgmtBaseDir(ManagementContext mgmt) {
return BrooklynServerPaths.getMgmtBaseDir(mgmt);
}
/** @see BrooklynServerPaths#getMgmtBaseDir(ManagementContext) */
public static String getMgmtBaseDir(StringConfigMap brooklynProperties) {
return BrooklynServerPaths.getMgmtBaseDir(brooklynProperties);
}
/** @see BrooklynServerPaths#getMgmtBaseDir(ManagementContext) */
public static String getMgmtBaseDir(Map<String,?> brooklynProperties) {
return BrooklynServerPaths.getMgmtBaseDir(brooklynProperties);
}
/**
* @return {@link ManagementContext#getManagementNodeUri()}, located in this utility class for convenience.
*/
public static Maybe<URI> getBrooklynWebUri(ManagementContext mgmt) {
return mgmt.getManagementNodeUri();
}
public static final ConfigKey<List<String>> SENSITIVE_FIELDS_TOKENS = ConfigKeys.newConfigKey(new TypeToken<List<String>>() {}, "brooklyn.security.sensitive.fields.tokens",
"List of tokens which get treated as sensitive-named fields and suppressed in many places");
public static final ConfigKey<Boolean> SENSITIVE_FIELDS_PLAINTEXT_BLOCKED = ConfigKeys.newBooleanConfigKey("brooklyn.security.sensitive.fields.plaintext.blocked",
"Whether plaintext values for sensitive-named fields are blocked");
public static final ConfigKey<List<String>> SENSITIVE_FIELDS_EXT_BLOCKED_PHRASES = ConfigKeys.newConfigKey(new TypeToken<List<String>>() {}, "brooklyn.security.sensitive.fields.ext.blocked.phrases",
"Extended blocking settings when plaintext values are blocked, allowing also to block DSL and complex values which contain any of the phrases supplied in this config key (comma-separated list)");
public static final ConfigKey<Boolean> SHELL_WORKFLOW_STEP_DISABLED = ConfigKeys.newBooleanConfigKey("brooklyn.security.shell.workflow_step.disabled",
"Whether the ShellWorkflowStep is disabled for security; default false");
}